systemverilog中的参数数组

时间:2019-09-26 14:23:25

标签: system-verilog questasim

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

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中编译此模块时,会出现这种错误

  

-编译模块顶部   **错误:(vlog-13069)parameters_array.sv(3):“ [”附近:语法错误,意外的“ [”,期望为“;”或“,”。

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

3 个答案:

答案 0 :(得分:1)

参数数组仅在system verilog中受支持。因此,请确保以系统Verilog模式(文件扩展名为.sv或所需的任何限定符)进行编译。

另外,您最好根据自己的情况做int

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

尝试在以下位置定义动态数组类型:

typedef int int_arr_t[];

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

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