2016-10-13 7 views
0

Я знаю, что этот вопрос задан раньше, однако каждый ответ, который я могу найти, относится к SystemVerilog и его синтаксису.Как инициализировать 2-мерный массив параметров в 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 утверждение кажется, что это будет какой-то пользы, но я должен был бы создать экземпляр моего TestBench модуля и использовать его из-за пределов конкретизации. Я считаю, что мой другой вариант - использовать назначение значения параметра экземпляра модуля, например.

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

Это работает очень хорошо. Я определял таблицы поиска, используя макросы препроцессора, чтобы решить мою проблему, но это намного проще. Благодаря! –