2016-10-13 142 views
0

我知道这个问题之前已经被问过了,但是,我能找到的每个答案都指向SystemVerilog及其语法。如何初始化Verilog-2005中的二维参数数组?

我有以下代码:

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),...,...)(); 

但我试图远离那个。是否有一些我可以使用的较少知道的技巧,或者我将不得不诉诸上述两种方法之一?

回答

0

你可以做的是将你的数组打包到一个单独的向量中并选择它的一部分。

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

那么您可以选择与

TILE_SIZE[i*16+:16] 
+0

参数这工作得很好。我使用预处理器宏来定义查找表来解决我的问题,但这更简单。谢谢! –