2015-09-10 3 views
-1

Я пытаюсь создать параметризованный массив экземпляров интерфейса в SystemVerilog, но так или иначе не получится.Параметрированный массив интерфейса SystemVerilog

interface if_dma(); 
logic [31:0] addr; 
logic [31:0] data; 
endinterface 

module mux(clk, rst, if_dma dma_ports[n-1:0]); 

//logic 

endmodule 

module dma_top(); 

if_dma dma(); 

mux #(n=3)(.clk(clk), .rst(rst), dma_ports[0](rx_channel), dma_ports[1](tx_channel)); 

endmodule 
+0

Ошибка: «dma_ports» уже объявлен в этой области (мукс) –

+1

Вместо того, чтобы добавлять комментарии в комментарии, лучше отредактировать вопрос и поместить их туда. –

+1

Вам нужно объяснить, что такое rx_channel и tx_channel. Вы не можете разделить один порт на несколько портов, интерфейс или порт интерфейса –

ответ

0

Вы не можете иметь dma_ports[0] и dma_ports[1] как отдельные порты. Объедините их в один проход: .dma_ports({tx_channel,rx_channel})

Ваш заголовок для mux нечетный. Не уверен, что вы пытались упростить заголовок для mux, или это то, что вы действительно имеете. Если вы используете стиль порта, отличного от ANSI, то не указывайте диапазоны в списке портов. Спецификация диапазона указана в определении порта (например: input clk;, output [7:0] out;, if_dma dma_ports[N];). С портом ANSI порт-список и определение одинаковы. Пример:

module mux #(parameter N=1) (input clk, rst, if_dma dma_ports[N-1:0]); 

Не смешивайте стили портов ANSI и не ANSI. Обычно рекомендуется использовать стиль ANSI.