1.软件版本
ISE14.7
2.本算法理论知识
ROM资源,作为产生离散正弦信号的另一种有效途径,CORDIC(坐标旋转数值计算)算法已越来越受到青睐。其基本思想是通过一系列逐次递减的、与运算基数相关的往复偏摆以逼近最终需要达到的旋转角度。该算法仅利用加法和移位两种运算通过迭代方式进行矢量旋转, CORDIC算法由于只采用加法和移位运算,因此很适合在FPGA中实现,它可以用来实现数字下变频中的NCO、混频器和坐标变换等功能。
实现NCO的另一种方法是采用基于坐标旋转数字式计算机的算法,即CORDIC算法,基本思想是采用逐次逼近的方法实现三角函数的计算。该算法的突出优点是,仅做加减和移位运算,结合流水线,可以实现每一个时钟周期输出一个经过n次迭代的结果。
3.核心代码
扫描二维码关注公众号,回复:
13990223 查看本文章
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 23:07:56 04/30/2012
// Design Name:
// Module Name: Tops
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module Tops(
i_clk,
i_rst,
i_phase,
i_freq,
o_freq,
o_cos,
o_sin
);
input i_clk;
input i_rst;
input[15:0] i_phase;
input[31:0] i_freq;
output[15:0]o_freq;
output[15:0]o_cos;
output[15:0]o_sin;
//频率相位累加器
//频率相位累加器
phase_adder phase_adder_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_phase_in (i_phase),
.i_frequency_in (i_freq),
.o_freq (o_freq)
);
//cordic模块//象限判决
//cordic模块//象限判决
//cordic模块//象限判决
wire [15:0] o_y;
wire [15:0] o_x;
cordic_top cordic_top_u(
.i_clk (i_clk),
.i_reset (i_reset),
.i_phase_in (o_freq[15:0]),
.i_phase_in2(o_freq[15:14]),//象限判决
.o_cos_out (o_cos),
.o_sin_out (o_sin)
);
endmodule
4.操作步骤与仿真结论
5.参考文献
A35-11
[1]王玉良, 李宏生, 夏敦柱. 基于CORDIC算法的NCO在FPGA中的实现[J]. 计算机与数字工程, 2009, 37(12):4.