【Cordic】基于Cordic算法的NCO的设计实现

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.

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/124370965
今日推荐