天天看點

【Cordic】基于Cordic算法的NCO的設計實作

1.軟體版本

ISE14.7

2.本算法理論知識

ROM資源,作為産生離散正弦信号的另一種有效途徑,CORDIC(坐标旋轉數值計算)算法已越來越受到青睐。其基本思想是通過一系列逐次遞減的、與運算基數相關的往複偏擺以逼近最終需要達到的旋轉角度。該算法僅利用加法和移位兩種運算通過疊代方式進行矢量旋轉, CORDIC算法由于隻采用加法和移位運算,是以很适合在FPGA中實作,它可以用來實作數字下變頻中的NCO、混頻器和坐标變換等功能。

        實作NCO的另一種方法是采用基于坐标旋轉數字式計算機的算法,即CORDIC算法,基本思想是采用逐次逼近的方法實作三角函數的計算。該算法的突出優點是,僅做加減和移位運算,結合流水線,可以實作每一個時鐘周期輸出一個經過n次疊代的結果。

【Cordic】基于Cordic算法的NCO的設計實作
【Cordic】基于Cordic算法的NCO的設計實作
【Cordic】基于Cordic算法的NCO的設計實作
【Cordic】基于Cordic算法的NCO的設計實作

 3.核心代碼

`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.操作步驟與仿真結論

【Cordic】基于Cordic算法的NCO的設計實作
【Cordic】基于Cordic算法的NCO的設計實作

5.參考文獻