如何在 Verilog-2005 中初始化二维参数数组?

How do I initialize a 2-dimensional parameter array in Verilog-2005?

我知道以前有人问过这个问题,但是,我能找到的每个答案都涉及 SystemVerilog 及其语法。

我有以下代码:

parameter NUM_TILES = 2;

parameter [15:0]    TILE_SIZE       [NUM_TILES - 1'b1:0];
parameter [15:0]    TILE_PRV_SIZE   [NUM_TILES - 1'b1:0];
parameter [15:0]    TILE_LOOP       [NUM_TILES - 1'b1:0];

我尝试了以下方法,但 Verilog-2005 不支持数组文字。

parameter [15:0]    TILE_SIZE       [NUM_TILES - 1'b1:0]; = '{16'd4, 16'd4};

defparam 语句似乎会有一些用处,但我需要实例化我的测试平台模块并从实例化外部使用它。我相信我的另一个选择是使用模块实例参数值分配,例如

module top_tb UUT #(.TILE_SIZE[i](16'd4),...,...)();

但我正在努力远离它。我可以使用一些鲜为人知的技巧,还是我必须求助于上述两种方法之一?

你可以做的是将你的数组打包成一个向量和 select 它的一部分。

parameter [(NUM_TILES*16)-1:0]    TILE_SIZE = {16'd4, 16'd4};

然后你可以select参数

TILE_SIZE[i*16+:16]