具有不同输入的systemverilog接口数组

时间:2014-12-01 15:05:52

标签: arrays interface system-verilog

我想实例化一个systemverilog接口数组,其中每个数组元素使用不同的输入。

如果所有元素都使用相同的输入,则实例化很简单:

x_if x_IF[`NUM_INTERFACES](clk);

此处,如果`NUM_INTERFACES2,那么clk输入会转到x_IF[0]x_IF[1]

但如果我也有

reg clk[`NUM_INTERFACES];

如何实例化x_IF以便clk[0]输入x_IF[0]clk[1]输入x_IF[1]

这是一个简单的例子;我期待在某种循环(可能使用generate)中为12个接口的数组实现这一点。

2 个答案:

答案 0 :(得分:1)

我会避免使用assign语句,特别是对于分层引用;它使代码更难以阅读和维护。

你刚刚完成了

reg clk[`NUM_INTERFACES];
x_if x_IF[`NUM_INTERFACES](clk);

具有实例数组的功能是,如果连接到端口的信号的宽度是端口宽度的倍数,则每个实例都会得到信号的一部分。

请参阅适用于模块端口的LRM 1800-2012部分 28.3.6原始实例连接列表

如果使用生成循环而不是实例数组,那么我会这样做

reg  clk[`NUM_INTERFACES];

generate
   for (genvar i=0; i<`NUM_INTERFACES; i++) begin :loop
      x_if x_IF(clk[i]);
   end
endgenerate

答案 1 :(得分:0)

我能够通过从generate循环中分配接口输入并在声明中保留未分配来实现这一点。

x_if x_IF[`NUM_INTERFACES]();
reg  clk[`NUM_INTERFACES];

// Code to create clk[`NUM_INTERFACES]

generate
   for (genvar i=0; i<`NUM_INTERFACES; i++) begin
      // Assume that the input port of x_if is called `inp`
      assign x_IF[i].inp = clk[i];
   end
endgenerate