Verilog - 嵌套生成 for 循环与多个 genvars,不可能吗?
Verilog - Nested generate for loop with multiple genvars, not possible?
我试图在以下代码中向我的生成循环添加第二级嵌套,但 iverilog 抛出一个错误,指出寄存器 j
未知:
../crc.v:119: register ``j'' unknown in crc_tb.U_crc.loop[31].
那么可以在verilog中使用多个genvars吗?看起来 j
被解释为寄存器。
代码片段:
genvar i;
genvar j;
reg [DATA_WIDTH-1:0] temp;
generate
for(i = 0; i < CRC_WIDTH; i= i + 1)
begin : loop
always @(posedge clock or posedge reset)
begin
if (reset)
begin
crc_out[i+:1] = SEED[i+:1];
end
else if (init)
begin
crc_out[i+:1] = SEED[i+:1];
end
else if (data_enable)
begin
if (DEBUG)
$display("\n\nCRC OUT[%0d]\n***************************************************************************", i);
if (REVERSE)
begin
for (j = DATA_WIDTH-1; j >= 0; j = j - 1)
begin : reverse_loop
temp[DATA_WIDTH-1-j] = data[i][j];
end
crc_out[i+:1] <= prev(DATA_WIDTH-1,i,temp,crc_out);
end
else
begin
crc_out[i+:1] <= prev(DATA_WIDTH-1,i,data,crc_out);
end
end
end
end
endgenerate
您可以嵌套多个生成循环,但您的内部生成循环位于程序代码块内 - 这是非法的。也许 j
应该只是一个局部变量而不是 genvar
.
我试图在以下代码中向我的生成循环添加第二级嵌套,但 iverilog 抛出一个错误,指出寄存器 j
未知:
../crc.v:119: register ``j'' unknown in crc_tb.U_crc.loop[31].
那么可以在verilog中使用多个genvars吗?看起来 j
被解释为寄存器。
代码片段:
genvar i;
genvar j;
reg [DATA_WIDTH-1:0] temp;
generate
for(i = 0; i < CRC_WIDTH; i= i + 1)
begin : loop
always @(posedge clock or posedge reset)
begin
if (reset)
begin
crc_out[i+:1] = SEED[i+:1];
end
else if (init)
begin
crc_out[i+:1] = SEED[i+:1];
end
else if (data_enable)
begin
if (DEBUG)
$display("\n\nCRC OUT[%0d]\n***************************************************************************", i);
if (REVERSE)
begin
for (j = DATA_WIDTH-1; j >= 0; j = j - 1)
begin : reverse_loop
temp[DATA_WIDTH-1-j] = data[i][j];
end
crc_out[i+:1] <= prev(DATA_WIDTH-1,i,temp,crc_out);
end
else
begin
crc_out[i+:1] <= prev(DATA_WIDTH-1,i,data,crc_out);
end
end
end
end
endgenerate
您可以嵌套多个生成循环,但您的内部生成循环位于程序代码块内 - 这是非法的。也许 j
应该只是一个局部变量而不是 genvar
.