我知道之前已经问过这个问题,但是,我能找到的每个答案都是指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),...,...)();
但我试图远离那个。是否有一些鲜为人知的技巧我可以使用,还是我必须采用上述两种方法中的一种?
答案 0 :(得分:0)
您可以做的是将数组打包到一个矢量中并选择一个切片。
parameter [(NUM_TILES*16)-1:0] TILE_SIZE = {16'd4, 16'd4};
然后您可以使用
选择参数TILE_SIZE[i*16+:16]