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

Parameters 如何在Verilog-2005中初始化二维参数数组?,parameters,verilog,fpga,Parameters,Verilog,Fpga,我知道以前有人问过这个问题,但是,我能找到的每个答案都涉及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

我知道以前有人问过这个问题,但是,我能找到的每个答案都涉及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语句似乎有一些用处,但我需要实例化testbench模块并从实例化外部使用它。我相信我的另一个选择是使用模块实例参数值赋值,例如

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

但我正试图远离这一点。是否有一些不太为人所知的技巧可以使用,或者我必须求助于上述两种方法中的一种?

您可以做的是将数组打包到一个向量中,然后选择其中的一个片段

parameter [(NUM_TILES*16)-1:0]    TILE_SIZE = {16'd4, 16'd4};
然后,您可以使用

TILE_SIZE[i*16+:16]

您可以做的是将数组打包成一个向量,然后选择其中的一部分

parameter [(NUM_TILES*16)-1:0]    TILE_SIZE = {16'd4, 16'd4};
然后,您可以使用

TILE_SIZE[i*16+:16]

这很有效。我使用预处理器宏定义查找表来解决我的问题,但这要简单得多。谢谢这很有效。我使用预处理器宏定义查找表来解决我的问题,但这要简单得多。谢谢