图3.2 CORDIC流水线型设计流程图
其VHDL程序设计的关键语句采用if语句实现。在同一个程序中,多条if语句是按顺序执行的。一个完整if语句如下:
if (theta(i)>0) then
x(i+1)<=x(i)-SRL(y(i), i);
y(i+1)<=y(i)+ (SRL(x(i), i));
theta (i+1)<= theta (i)-θi ;
else
x(i+1)<=x(i)+( SRL (y(i), i));
y(i+1)<=y(i)-( SRL (x(i), i));
theta (i+1)<= theta (i)+θi
end if;
其中,SRL (m, k)实现数据m右移k位,并返回值为移位后的结果。按照图3.2编写可产生正余弦信号的CORDIC运算程序,如下:
module cordic(clk, phi, cos, sin);
parameter? W = 13, W_Z = 14;
input ??clk;
input [W_Z-1:0]? phi;
output [W-1:0]??? cos, sin;
reg [W-1:0]?? cos, sin;
reg [W-1:0]?? x[8:0], y[8:0];
reg [W_Z-1:0] z[7:0];
always(posedge clk)begin
x[0] <= 13'h4D; ? ? ??? ??? //修正CORDIC算法的比例因子,K的倒数
y[0] <= 13'h00;
z[0] <= phi;
//旋转45度
if(z[0][W_Z-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
仿真结果及结论会在第四章给出。
哪里有射频培训机构
|