【问题标题】:I can't fill with 0 a reg array in verilog with a for loop in an always block我不能用 0 填充 verilog 中的 reg 数组,并在 always 块中使用 for 循环
【发布时间】:2021-12-29 20:13:48
【问题描述】:

我得到以下代码的错误是:

不允许对非寄存器 j 进行程序赋值,左手 side 应该是 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

【问题讨论】:

    标签: verilog


    【解决方案1】:

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

    genvar 在细化过程中用作整数来评估生成循环并创建 生成块,但它在仿真时不存在。不应在其他任何地方引用 genvar 比在循环生成方案中。

    把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
    

    【讨论】:

    • 请注意,在 SystemVerilog 中,您可以只编写 W_E = ‘{default:0}; 而不使用 for 循环。
    猜你喜欢
    • 1970-01-01
    • 2022-09-29
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多