⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cordic.v

📁 verilog源代码
💻 V
字号:
//cordic processor// Larry Doolittle and Ming Choy// Copyright 2003 LBNL//// 16 bit input for x, y// 17 bit input for phase, including highest order bit (pi)//  (but because of rounding errors, the output is really only accurate//   to about 13 bits)// still could use some language cleanup// reference://   http://www.fpga-guru.com/cordic.htm`timescale 1ns / 1nsmodule adder16(a,b,sum,control); input [15:0] a,b; input control; output [15:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule adder15(a,b,sum,control); input [14:0] a,b; input control; output [14:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule adder14(a,b,sum,control); input [13:0] a,b; input control; output [13:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule adder13(a,b,sum,control); input [12:0] a,b; input control; output [12:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule adder12(a,b,sum,control); input [11:0] a,b; input control; output [11:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule adder11(a,b,sum,control); input [10:0] a,b; input control; output [10:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule adder10(a,b,sum,control); input [ 9:0] a,b; input control; output [ 9:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder9(a,b,sum,control); input [ 8:0] a,b; input control; output [ 8:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder8(a,b,sum,control); input [ 7:0] a,b; input control; output [ 7:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder7(a,b,sum,control); input [ 6:0] a,b; input control; output [ 6:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder6(a,b,sum,control); input [ 5:0] a,b; input control; output [ 5:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder5(a,b,sum,control); input [ 4:0] a,b; input control; output [ 4:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder4(a,b,sum,control); input [ 3:0] a,b; input control; output [ 3:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder3(a,b,sum,control); input [ 2:0] a,b; input control; output [ 2:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule  adder2(a,b,sum,control); input [ 1:0] a,b; input control; output [ 1:0] sum; assign sum = control ? (a + b) : (a - b); endmodulemodule cordic(clk, xin, yin, phasein, xout, yout, phaseout);input clk;input [15:0] xin, yin;input [16:0] phasein;output[15:0] xout, yout;output[1:0] phaseout;wire [15:0] xw0, xw1, xw2, xw3, xw4, xw5, xw6, xw7, xw8, xw9, xw10, xw11, xw12, xw13, xw14, xw15;wire [15:0] yw0, yw1, yw2, yw3, yw4, yw5, yw6, yw7, yw8, yw9, yw10, yw11, yw12, yw13, yw14, yw15;reg  [15:0] x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;reg  [15:0] y0, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15;wire [15:0] zw0;wire [15:0] zw1;wire [15:0] zw2;wire [14:0] zw3;wire [13:0] zw4;wire [12:0] zw5;wire [11:0] zw6;wire [10:0] zw7;wire [ 9:0] zw8;wire [ 8:0] zw9;wire [ 7:0] zw10;wire [ 6:0] zw11;wire [ 5:0] zw12;wire [ 4:0] zw13;wire [ 3:0] zw14;wire [ 2:0] zw15;reg [15:0] z0;reg [15:0] z1;reg [14:0] z2;reg [13:0] z3;reg [12:0] z4;reg [11:0] z5;reg [10:0] z6;reg [ 9:0] z7;reg [ 8:0] z8;reg [ 7:0] z9;reg [ 6:0] z10;reg [ 5:0] z11;reg [ 4:0] z12;reg [ 3:0] z13;reg [ 2:0] z14;reg [ 1:0] z15;// signed 12-bit input angle [-2048 , 2047 ] represents the range [ -pi/2 , pi/2 )// atan((0.5).^[0:12]')/(2*pi)*8192*4// floor(atan((0.5).^[0:14]')/(2*pi)*2**(17)+.5)// keep one high order 0 bit so these are valid signed numberswire [15:0] a0  = 16384;  // pi/4wire [15:0] a1  = 9672;wire [14:0] a2  = 5110;wire [13:0] a3  = 2594;wire [12:0] a4  = 1302;wire [11:0] a5  = 652;wire [10:0] a6  = 326;wire [ 9:0] a7  = 163;wire [ 8:0] a8  = 81;wire [ 7:0] a9  = 41;wire [ 6:0] a10 = 20;wire [ 5:0] a11 = 10;wire [ 4:0] a12 = 5;wire [ 3:0] a13 = 3;wire [ 2:0] a14 = 1;assign xout = x15;assign yout = y15;assign phaseout = z15;adder16 ax0 (16'b0000000000000000, xin, xw0, ~phasein[16]^phasein[15]);adder16 ay0 (16'b0000000000000000, yin, yw0, ~phasein[16]^phasein[15]);assign zw0 = phasein[15:0];adder16 ax1 (x0,                 y0        ,  xw1,  z0 [15]);  adder16 ay1 (y0,                 x0        ,  yw1,  ~z0 [15]);  adder16 az1 (z0,  a0,  zw1,  z0 [15]); adder16 ax2 (x1,  {{ 1{y1 [15]}},y1 [15:1]},  xw2,  z1 [15]);  adder16 ay2 (y1,  {{ 1{x1 [15]}},x1 [15:1]},  yw2,  ~z1 [15]);  adder16 az2 (z1,  a1,  zw2,  z1 [15]);adder16 ax3 (x2,  {{ 2{y2 [15]}},y2 [15:2]},  xw3,  z2 [14]);  adder16 ay3 (y2,  {{ 2{x2 [15]}},x2 [15:2]},  yw3,  ~z2 [14]);  adder15 az3 (z2,  a2,  zw3,  z2 [14]);adder16 ax4 (x3,  {{ 3{y3 [15]}},y3 [15:3]},  xw4,  z3 [13]);  adder16 ay4 (y3,  {{ 3{x3 [15]}},x3 [15:3]},  yw4,  ~z3 [13]);  adder14 az4 (z3,  a3,  zw4,  z3 [13]);adder16 ax5 (x4,  {{ 4{y4 [15]}},y4 [15:4]},  xw5,  z4 [12]);  adder16 ay5 (y4,  {{ 4{x4 [15]}},x4 [15:4]},  yw5,  ~z4 [12]);  adder13 az5 (z4,  a4,  zw5,  z4 [12]);adder16 ax6 (x5,  {{ 5{y5 [15]}},y5 [15:5]},  xw6,  z5 [11]);  adder16 ay6 (y5,  {{ 5{x5 [15]}},x5 [15:5]},  yw6,  ~z5 [11]);  adder12 az6 (z5,  a5,  zw6,  z5 [11]);adder16 ax7 (x6,  {{ 6{y6 [15]}},y6 [15:6]},  xw7,  z6 [10]);  adder16 ay7 (y6,  {{ 6{x6 [15]}},x6 [15:6]},  yw7,  ~z6 [10]);  adder11 az7 (z6,  a6,  zw7,  z6 [10]);adder16 ax8 (x7,  {{ 7{y7 [15]}},y7 [15:7]},  xw8,  z7 [ 9]);  adder16 ay8 (y7,  {{ 7{x7 [15]}},x7 [15:7]},  yw8,  ~z7 [ 9]);  adder10 az8 (z7,  a7,  zw8,  z7 [ 9]);adder16 ax9 (x8,  {{ 8{y8 [15]}},y8 [15:8]},  xw9,  z8 [ 8]);  adder16 ay9 (y8,  {{ 8{x8 [15]}},x8 [15:8]},  yw9,  ~z8 [ 8]);  adder9  az9 (z8,  a8,  zw9,  z8 [ 8]);adder16 ax10(x9,  {{ 9{y9 [15]}},y9 [15:9]},  xw10, z9 [ 7]);  adder16 ay10(y9,  {{ 9{x9 [15]}},x9 [15:9]},  yw10, ~z9 [ 7]);  adder8  az10(z9,  a9,  zw10, z9 [ 7]);adder16 ax11(x10, {{10{y10[15]}},y10[15:10]}, xw11, z10[ 6]);  adder16 ay11(y10, {{10{x10[15]}},x10[15:10]}, yw11, ~z10[ 6]);  adder7  az11(z10, a10, zw11, z10[ 6]);adder16 ax12(x11, {{11{y11[15]}},y11[15:11]}, xw12, z11[ 5]);  adder16 ay12(y11, {{11{x11[15]}},x11[15:11]}, yw12, ~z11[ 5]);  adder6  az12(z11, a11, zw12, z11[ 5]);adder16 ax13(x12, {{12{y12[15]}},y12[15:12]}, xw13, z12[ 4]);  adder16 ay13(y12, {{12{x12[15]}},x12[15:12]}, yw13, ~z12[ 4]);  adder5  az13(z12, a12, zw13, z12[ 4]);adder16 ax14(x13, {{13{y13[15]}},y13[15:13]}, xw14, z13[ 3]);  adder16 ay14(y13, {{13{x13[15]}},x13[15:13]}, yw14, ~z13[ 3]);  adder4  az14(z13, a13, zw14, z13[ 3]);adder16 ax15(x14, {{14{y14[15]}},y14[15:14]}, xw15, z14[ 2]);  adder16 ay15(y14, {{14{x14[15]}},x14[15:14]}, yw15, ~z14[ 2]);  adder3  az15(z14, a14, zw15, z14[ 2]);always @ (posedge clk) begin	x0  <=  xw0;   y0  <=  yw0;   z0  <=  zw0;	x1  <=  xw1;   y1  <=  yw1;   z1  <=  zw1;	x2  <=  xw2;   y2  <=  yw2;   z2  <=  zw2;	x3  <=  xw3;   y3  <=  yw3;   z3  <=  zw3;	x4  <=  xw4;   y4  <=  yw4;   z4  <=  zw4;	x5  <=  xw5;   y5  <=  yw5;   z5  <=  zw5;	x6  <=  xw6;   y6  <=  yw6;   z6  <=  zw6;	x7  <=  xw7;   y7  <=  yw7;   z7  <=  zw7;	x8  <=  xw8;   y8  <=  yw8;   z8  <=  zw8;	x9  <=  xw9;   y9  <=  yw9;   z9  <=  zw9;	x10 <=  xw10;  y10 <=  yw10;  z10 <=  zw10;	x11 <=  xw11;  y11 <=  yw11;  z11 <=  zw11;	x12 <=  xw12;  y12 <=  yw12;  z12 <=  zw12;	x13 <=  xw13;  y13 <=  yw13;  z13 <=  zw13;	x14 <=  xw14;  y14 <=  yw14;  z14 <=  zw14;	x15 <=  xw15;  y15 <=  yw15;  z15 <=  zw15;endendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -