|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我现在写着一个CORDIC 的 verilog 代码,但在逻辑上遇到问题。 https://www.edaplayground.com/x/3tHk , 为何 y[2] == 0 ?
cordic.zip
(1.01 KB, 下载次数: 4 )
--> verilog 代码
Cordic_octave.zip
(482 Bytes, 下载次数: 4 )
--> octave/matlab 代码
- module cordic(z0, xn, yn);
-
- input [21:0] z0;
- output [16:0] xn, yn;
- parameter N= 10; // number of iterations
-
- reg [(N-1):0] d;
- reg [16:0] x [(N-1):0];
- reg [16:0] y [(N-1):0];
- reg [21:0] z [(N-1):0];
- reg [21:0] arctan [(N-1):0];
- initial begin
-
- x[0] = 'b10011011011101001; // 0.60725 in binary
- y[0] = 0;
- arctan[0] = 45.0;
- arctan[1] = 26.6;
- arctan[2] = 14.0;
- arctan[3] = 7.1;
- arctan[4] = 3.6;
- arctan[5] = 1.8;
- arctan[6] = 0.9;
- arctan[7] = 0.4;
- arctan[8] = 0.2;
- arctan[9] = 0.1;
- end
- integer i;
- always @(*)
- begin z[0] = z0;
- for(i=0; i<N; i=i+1)
- begin
- d[i] = (z[i][16] == 0) ? 0 : 1;
- if(d[i] == 0) begin
- x[i+1] = x[i] - y[i] >> i;
- y[i+1] = y[i] + x[i] >> i;
- z[i+1] = z[i] - arctan[i];
- end
-
- else begin
- x[i+1] = x[i] + y[i] >> i;
- y[i+1] = y[i] - x[i] >> i;
- z[i+1] = z[i] + arctan[i];
- end
-
- $display("i=%2d, x[i]=%b, y[i]=%b, z[i]=%b, d[i]=%2d, arctan[i]=%b", i,x[i],y[i],z[i],d[i],arctan[i]);
- end
- end
- assign xn = x[N-1]; // xn = cos(z0)
- assign yn = y[N-1]; // yn = sin(z0)
- endmodule
复制代码
- `timescale 1ns/100ps
- module cordic_tb;
- reg[21:0] z0;
- wire[16:0] xn, yn;
- cordic C1
- (
- .z0(z0), .xn(xn), .yn(yn)
- );
- initial begin
- $dumpfile("cordic.vcd");
- $dumpvars(0, cordic_tb);
- #10 z0 = 30;
- end
- endmodule
复制代码
i= 0, x=10011011011101001, y=00000000000000000, z=0000000000000000011110, d= 0, arctan=0000000000000000101101
i= 1, x=10011011011101001, y=10011011011101001, z=1111111111111111110001, d= 1, arctan=0000000000000000011011
i= 2, x=00011011011101001, y=00000000000000000, z=0000000000000000001100, d= 0, arctan=0000000000000000001110
i= 3, x=00000110110111010, y=00000110110111010, z=1111111111111111111110, d= 1, arctan=0000000000000000000111
i= 4, x=00000001101101110, y=00000000000000000, z=0000000000000000000101, d= 0, arctan=0000000000000000000100
i= 5, x=00000000000110110, y=00000000000110110, z=0000000000000000000001, d= 0, arctan=0000000000000000000010
i= 6, x=00000000000000000, y=00000000000000011, z=1111111111111111111111, d= 1, arctan=0000000000000000000001
i= 7, x=00000000000000000, y=00000000000000000, z=0000000000000000000000, d= 0, arctan=0000000000000000000000
i= 8, x=00000000000000000, y=00000000000000000, z=0000000000000000000000, d= 0, arctan=0000000000000000000000
i= 9, x=00000000000000000, y=00000000000000000, z=0000000000000000000000, d= 0, arctan=0000000000000000000000
Done
|
|