【问题标题】:Parameterized array of Interface SystemVerilog接口 SystemVerilog 的参数化数组
【发布时间】:2015-09-10 01:28:01
【问题描述】:

我试图在 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

【问题讨论】:

  • 错误:“dma_ports”已在此范围内声明(多路复用器)
  • 与其在 cmets 中添加详细信息,不如编辑问题并将它们放在那里。
  • 你需要解释一下rx_channel和tx_channel是什么。不能将单个端口拆分为多个端口连接,接口或无接口端口

标签: parameters interface system-verilog


【解决方案1】:

您不能将 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风格。

【讨论】: