您现在的位置: 主页 > 嵌入式处理器 > FPGA > cordic算法verilog实现(复杂版) - FPGA/ASIC技术 -
本文所属标签:
为本文创立个标签吧:

cordic算法verilog实现(复杂版) - FPGA/ASIC技术 -

来源: 网络用户发布,如有版权联系网管删除 2018-08-11 

module cordic (clk,rst_n,ena,phase_in,sin_out,cos_out,eps);

 

parameter DATA_WIDTH=8; 

parameter PIPELINE=8; 

input     clk; 

input     rst_n; 

input     ena; 

input  [DATA_WIDTH-1:0]         phase_in; 

 

output [DATA_WIDTH-1:0]  sin_out;   

output [DATA_WIDTH-1:0]  cos_out; 

output [DATA_WIDTH-1:0]  eps; 

 

reg    [DATA_WIDTH-1:0]  sin_out; 

reg    [DATA_WIDTH-1:0]  cos_out; 

reg    [DATA_WIDTH-1:0]  eps; 

 

reg    [DATA_WIDTH-1:0]  phase_in_reg; 

 

reg        [DATA_WIDTH-1:0]     x0,y0,z0; 

reg        [DATA_WIDTH-1:0]  x1,y1,z1; 

reg        [DATA_WIDTH-1:0]  x2,y2,z2; 

reg        [DATA_WIDTH-1:0]  x3,y3,z3; 

reg        [DATA_WIDTH-1:0]  x4,y4,z4; 

reg        [DATA_WIDTH-1:0]  x5,y5,z5; 

reg        [DATA_WIDTH-1:0]  x6,y6,z6; 

reg        [DATA_WIDTH-1:0]  x7,y7,z7; 

 

reg        [1:0]   quadrant[PIPELINE:0]; 

 

integer i; 

 

//get real quadrant and map to first_n quadrant 

 

always@(posedge clk or negedge rst_n) 

begin 

        if(!rst_n) 

               phase_in_reg<=8'b0000_0000; 

        else 

               if(ena) 

                       begin 

                               case(phase_in[7:6]) 

                                      2'b00:phase_in_reg<=phase_in; 

                                      2'b01:phase_in_reg<=phase_in-8'h40;  //-pi/2 

                                      2'b10:phase_in_reg<=phase_in-8'h80;  //-pi 

                                      2'b11:phase_in_reg<=phase_in-8'hc0;  //-3pi/2 

                                      default:; 

                                endcase 

                        end 

end 

 

always@(posedge clk or negedge rst_n) 

begin 

        if(!rst_n) 

               begin 

                       x0<=8'b0000_0000; 

                       y0<=8'b0000_0000; 

                       z0<=8'b0000_0000; 

               end 

         else 

               if(ena) 

                       begin 

                               x0<=8'h4D;  //define aggregate constant Xi=1/P=1/1.6467=0.60725 (Xi=2^7*P+8'h4D) 

                               y0<=8'h00; 

                               z0<=phase_in_reg; 

                       end 

end 

 

//level 1 

always@(posedge clk or negedge rst_n) 

begin 

        if(!rst_n) 

               begin 

                       x1<=8'b0000_0000; 

                       y1<=8'b0000_0000; 

                       z1<=8'b0000_0000; 

               end 

         else 

                if(ena) 

                       if(z0[7]==1'b0) 

                               begin 

                                      x1<=x0-y0; 

                                      y1<=y0+x0; 



              查看评论 回复



嵌入式交流网主页 > 嵌入式处理器 > FPGA > cordic算法verilog实现(复杂版) - FPGA/ASIC技术 -
 

"cordic算法verilog实现(复杂版) - FPGA/ASIC技术 -"的相关文章

网站地图

围观()