我尝试实例化参数数组,例如
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)。
答案 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}})