2013-02-17 2 views
1

Если verilog не разрешает объявление/передачу многомерных массивов в списке портов модуля, существует ли это обходное решение? Допустим, у меня есть массив, подобный массиву [27: 0] [64: 0]. Как мы можем передать его в модуль? (например, сделать его как 1d-массив и сделать некоторую реверсию в модуле). Я думаю, что единственный способ - передать его как 1 мерный и сделать некоторые механизмы для ссылки, такие как оригинальная многомерная. Благодарю. Я исследовал некоторое время назад, и эта функция доступна в SystemVerilog, но не в оригинальном Verilog.verilog многомерный массив

+1

SystemVerilog и Verilog - это тот же язык, согласно IEEE. Речь идет об использовании современного набора инструментов. – toolic

+0

@toolic, так что, если мы отвяжем verilog и перейдем к systemverilog? im используя xilinx project navigator – WantIt

+1

Вы должны начать думать о них как о том же языке. – toolic

ответ

5

Как отметил первоначальный комментатор, в SystemVerilog явно запрашивается то, что вы просите. Вы даже можете передавать структуры через границы модулей.

Однако, если вы застряли со старым стилем Verilog, то способ сделать так же, как вы догадались. Выровняйте его в 1D-массив и продуйте его внутри модуля.

В псевдо-коде

input [WIDTH * DEPTH - 1:0] in; 

reg [WIDTH - 1:0] array [0:DEPTH - 1]; 

integer i; 
for (i = 0; i < DEPTH; i = i + 1) 
    array = in[i * WIDTH +: WIDTH]; 

С аналогичной упаковкой для-петли на другой стороне границы модуля. Синтаксис +: хороший, но у вас даже нет доступа к этому, поэтому вы можете легко преобразовать его в явные границы.

+0

Даже без +: вы можете сделать это без внутреннего цикла. в [(i + 1) * WIDTH - 1: (i * WIDTH)] –