|
这是我自己编的CORDIC求正余弦的算法程序:
module cordic1(clk, rst, phi, cos, sin);
parameter W = 13, Z_Width = 14;
input clk;
input rst;
input signed [Z_Width-1:0] phi;
output [W-1:0] cos, sin;
reg [W-1:0] sin;
reg [W-1:0] cos;
reg [W-1:0] x[8:0];
reg [W-1:0] y[8:0];
reg signed [Z_Width-1:0] z[7:0];
always@(posedge clk )
begin
x[0]<=13'h4D;
y[0]<=13'h00;
z[0]<=phi;
//------------ 旋转45度
if(z[0][Z_Width-1])
begin
x[1] <= x[0] + y[0];
y[1] <= y[0] - x[0];
z[1] <= z[0] + 14'h65;
end
else
begin
x[1] <= x[0] - y[0];
y[1] <= y[0] + x[0];
z[1] <= z[0] - 14'h65;
end
//------------ 旋转26.57度
if(z[1][Z_Width-1])
begin
x[2] <= x[1] + {{1{y[1][W-1]}}, y[1][W-1:1]};
y[2] <= y[1] - {{1{x[1][W-1]}}, x[1][W-1:1]};
z[2] <= z[1] + 14'h3B;
end
else
begin
x[2] <= x[1] - {{1{y[1][W-1]}}, y[1][W-1:1]};
y[2] <= y[1] + {{1{x[1][W-1]}}, x[1][W-1:1]};
z[2] <= z[1] - 14'h3B;
end
//------------ 旋转14.04度
if(z[2][Z_Width-1])
begin
x[3] <= x[2] + {{2{y[2][W-1]}}, y[2][W-1:2]};
y[3] <= y[2] - {{2{x[2][W-1]}}, x[2][W-1:2]};
z[3] <= z[2] + 14'h1F;
end
else
begin
x[3] <= x[2] - {{2{y[2][W-1]}}, y[2][W-1:2]};
y[3] <= y[2] + {{2{x[2][W-1]}}, x[2][W-1:2]};
z[3] <= z[2] - 14'h1F;
end
//------------ 旋转7.13度
if(z[3][Z_Width-1])
begin
x[4] <= x[3] + {{3{y[3][W-1]}}, y[3][W-1:3]};
y[4] <= y[3] - {{3{x[3][W-1]}}, x[3][W-1:3]};
z[4] <= z[3] + 14'h10;
end
else
begin
x[4] <= x[3] - {{3{y[3][W-1]}}, y[3][W-1:3]};
y[4] <= y[3] + {{3{x[3][W-1]}}, x[3][W-1:3]};
z[4] <= z[3] - 14'h10;
end
//------------ 旋转3.58度
if(z[4][Z_Width-1])
begin
x[5] <= x[4] + {{4{y[4][W-1]}}, y[4][W-1:4]};
y[5] <= y[4] - {{4{x[4][W-1]}}, x[4][W-1:4]};
z[5] <= z[4] + 14'h8;
end
else
begin
x[5] <= x[4] - {{4{y[4][W-1]}}, y[4][W-1:4]};
y[5] <= y[4] + {{4{x[4][W-1]}}, x[4][W-1:4]};
z[5] <= z[4] - 14'h8;
end
//------------ 旋转1.79度
if(z[5][Z_Width-1])
begin
x[6] <= x[5] + {{5{y[5][W-1]}}, y[5][W-1:5]};
y[6] <= y[5] - {{5{x[5][W-1]}}, x[5][W-1:5]};
z[6] <= z[5] + 14'h4;
end
else
begin
x[6] <= x[5] - {{5{y[5][W-1]}}, y[5][W-1:5]};
y[6] <= y[5] + {{5{x[5][W-1]}}, x[5][W-1:5]};
z[6] <= z[5] - 14'h4;
end
//------------ 旋转0.90度
if(z[6][Z_Width-1])
begin
x[7] <= x[6] + {{6{y[6][W-1]}}, y[6][W-1:6]};
y[7] <= y[6] - {{6{x[6][W-1]}}, x[6][W-1:6]};
z[7] <= z[6] + 14'h2;
end
else
begin
x[7] <= x[6] - {{6{y[6][W-1]}}, y[6][W-1:6]};
y[7] <= y[6] + {{6{x[6][W-1]}}, x[6][W-1:6]};
z[7] <= z[6] - 14'h2;
end
//------------ 旋转0.45度
if(z[7][Z_Width-1])
begin
x[8] <= x[7] + {{7{y[7][W-1]}}, y[7][W-1:7]};
y[8] <= y[7] - {{7{x[7][W-1]}}, x[7][W-1:7]};
end
else
begin
x[8] <= x[7] - {{7{y[7][W-1]}}, y[7][W-1:7]};
y[8] <= y[7] + {{7{x[7][W-1]}}, x[7][W-1:7]};
end
cos <= x[8];
sin <= y[8];
end
endmodule
但是我不知怎么编写可以看到整个波形的仿真程序,看到别人用ModelSim仿真过,
(原文件名:0_2_Q(S$1R$[Y`A`1@@@NKQ.jpg)
怎么编写仿真程序才可以看到这样的效果啊 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|