Modelsim:localparam的范围错误

Sia*_*hei 2 verilog system-verilog

我正在尝试在Modelsim中编译以下代码:

    module ctrl_mem
    #(
        parameter BYTE_SIZE = 256
    )
    (
        input [ADDR_W - 1 : 0]  i_addr,
        ...
        ...
    );
    localparam ADDR_W = $clog2(BYTE_SIZE);
Run Code Online (Sandbox Code Playgroud)

Modelsim写道,ADDR_W未知.这里讨论了类似的问题,但没有涉及 Modelsim的行为,不幸的是我不能评论它来问这个问题.

是否有可能在没有代码修改的情况下修复此问题?

我使用的是Modelsim Altera入门版10.3c

dav*_*_59 5

您的代码不合法​​.Verilog/SystemVerilog LRM要求在引用之前声明简单的标识符(那些没有后跟' . '或' ( ')的标识符.编写此模块的正确方法是

 module ctrl_mem
    #(
        parameter BYTE_SIZE = 256, localparam ADDR_W = $clog2(BYTE_SIZE)
    )
    (
        input [ADDR_W - 1 : 0]  i_addr,
        ...
        ...
    );
Run Code Online (Sandbox Code Playgroud)