0

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

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):靠近“[”:语法错误,意外'[',期待';' 或者 ','。

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

4

3 回答 3

1

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

你最好int在你的情况下做:

parameter int par_array [array_size] = '{array_size{12}};`
----------^^^
于 2019-09-26T15:31:23.693 回答
1

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

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

只能指定简单的整数参数,而无需指定数据类型而仅指定范围。

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

于 2019-09-26T23:23:38.803 回答
0

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

typedef int int_arr_t[];

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

module #(parameter array_size =12,
                  parameter int_arr_t par_array = '{array_size{12}})
于 2019-09-26T22:58:11.597 回答