我已經寫了下面的代碼來使用Cordic算法生成正弦角。以下是生成給定角度的x,y,z座標的代碼的一部分。Verilog代碼生成'不關心'迭代
genvar i;
generate
for (i=0; i < (width-1); i=i+1) begin
wire z_sign;
wire signed [width-1:0] x_shr, y_shr;
assign x_shr = x[i] >>> i; // signed shift right
assign y_shr = y[i] >>> i;
initial begin
#20 $display("x_shr = %b, y_shr = %b ",x_shr,y_shr);
end
//the sign of the current rotation angle
assign z_sign = z[i][31];
always @(posedge clock) begin
// add/subtract shifted data
x[i+1] <= z_sign ? x[i] + y_shr : x[i] - y_shr;
y[i+1] <= z_sign ? y[i] - x_shr : y[i] + x_shr;
z[i+1] <= z_sign ? z[i] + atan_table[i] : z[i] - atan_table[i];
#25 $display("x[%d] = %b",i,x[i]);
end
end
endgenerate
給出的輸入是:
x_shr = 'b0000000000000100;
y_shr = 'b0000000000000000;
z_sign是z的符號[I]:
z[0] = 'b00100000000000000000000000000000;
width = 16;
x[0] <= 'b0000000000000100;
y[0] <= 'b0;
所有聲明是如下
parameter width = 16;
// Inputs
input clock;
input signed [width-1:0] x_start,y_start;
reg signed [width-1:0] x [0:width-1];
reg signed [width-1:0] y [0:width-1];
reg signed [31:0] z [0:width-1];
但我得到的輸出是
x_shr = 0000000000000100, y_shr = 0000000000000000
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x_shr = xxxxxxxxxxxxxxxx, y_shr = xxxxxxxxxxxxxxxx
x[ 14] = xxxxxxxxxxxxxxxx
x[ 13] = xxxxxxxxxxxxxxxx
x[ 12] = xxxxxxxxxxxxxxxx
x[ 11] = xxxxxxxxxxxxxxxx
x[ 10] = xxxxxxxxxxxxxxxx
x[ 9] = xxxxxxxxxxxxxxxx
x[ 8] = xxxxxxxxxxxxxxxx
x[ 7] = xxxxxxxxxxxxxxxx
x[ 6] = xxxxxxxxxxxxxxxx
x[ 5] = xxxxxxxxxxxxxxxx
x[ 4] = xxxxxxxxxxxxxxxx
x[ 3] = xxxxxxxxxxxxxxxx
x[ 2] = xxxxxxxxxxxxxxxx
x[ 1] = xxxxxxxxxxxxxxxx
x[ 0] = 0000000000000100
爲什麼我在單次迭代後得到x
?
作爲輸出的「x」表示未知值,未初始化或具有多個衝突驅動程序。 – Morgan
是的,這是真的,但我檢查,沒有額外的驅動程序 – klbm9999
在生成中使用延遲看起來不正確。 – Morgan