0

我试图在下面的代码中向我的生成循环中添加第二级嵌套,但是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
4

1 回答 1

1

您可以嵌套多个生成循环,但您的内部生成循环位于程序代码块内 - 这是非法的。也许j应该只是一个局部变量而不是一个genvar.

于 2017-04-28T20:35:53.583 回答