systemverilog 中的参数数组

Array of parameters in systemverilog

我尝试实例化参数数组,例如

module top();
    parameter array_size = 10;
    parameter par_array [array_size] = '{array_size{12}};

    initial begin
        $display("%d",par_array[array_size-1]);
    end
endmodule

但是当我尝试在 questasim 中编译这个模块时,我得到了这种错误

-- Compiling module top ** Error: (vlog-13069) parameters_array.sv(3): near "[": syntax error, unexpected '[', expecting ';' or ','.

关于这个主题的搜索让我找到了 following 主题,回答者说 systemverilog 确实允许这种构造。
我真的不想使用长参数向量,因为它会导致新的困难,并且这个构造是在 Vivado 中编译的(但为了验证我需要使用 Questa)。

system verilog 支持参数数组。因此,请确保您在系统 verilog 模式下编译(文件扩展名 .sv 或您需要的任何限定符)。

另外你最好int在你的情况下:

parameter int par_array [array_size] = '{array_size{12}};`
----------^^^

尝试在某些地方定义动态数组类型:

typedef int int_arr_t[];

然后在你的模块中使用新的定义类型

module #(parameter array_size =12,
                  parameter int_arr_t par_array = '{array_size{12}})

解压缩的数组参数需要数据类型。

parameter int par_array [array_size] = '{array_size{12}};

只能指定简单的整型参数,不能指定数据类型,只能指定范围。

帮自己一个忙,不要在任何地方依赖隐式数据类型。