我不能用 0 填充 verilog 中的 reg 数组,并在 always 块中使用 for 循环

I can't fill with 0 a reg array in verilog with a for loop in an always block

下面代码的错误是:

Procedural assignment to a non-register j is not permitted, left-hand side should be reg/integer/time/genvar.

当我执行 W_E[0] = 0、W_E[1] = 0 等时,我没有收到任何错误。

genvar j;
reg W_E [31:0];
always @(*)begin
    // Wrting Data to a specific register
    for (j = 0; j < 32; j = j + 1)begin
        W_E[j] = 0;
    end
end

问题是您在 for 循环中使用了 genvar。根据 Verilog LRM、IEEE 标准,仅当您实际使用 generate 语句时才使用 genvar。 1364-2005,第 12.4.1 节:

The genvar is used as an integer during elaboration to evaluate the generate loop and create instances of the generate block, but it does not exist at simulation time. A genvar shall not be referenced anywhere other than in a loop generate scheme.

将 j 的类型改为整数即可:

integer j;
reg W_E [31:0];
always @(*)begin
    // Wrting Data to a specific register
    for (j = 0; j < 32; j = j + 1)begin
        W_E[j] = 0;
    end
end