连接SV生成的接口

时间:2013-07-19 16:24:18

标签: system-verilog

我需要连接已生成的SystemVerilog接口的端口。但我不知道生成的接口的实例名称是什么,所以我无法弄清楚如何连接它们。

例如,如果我生成这样的代码:

generate
  for (genvar abc_if_inst = 0; abc_if_inst < NUM_ABC; abc_if_inst++)
    abc_if   if_abc   (.clk(clk), .resetn(resetn));
endgenerate

如何参考接口信号,例如我假设它是这样的:

.port_x (if_abc_GEN_INST_NUM.port_x),
.port_y (if_abc_GEN_INST_NUM.port_y),

1 个答案:

答案 0 :(得分:1)

最好在for-loop的内容周围添加begin - end并应用标签。如果您不使用标签,则会添加一个自动标签,其后缀为genblk,后缀为唯一ID号。 IEEE Std 1800-2012的第27.6节详细解释了生成块命名的工作原理。第27节是关于生成块的全部内容。有关生成for循环的一个示例,请参阅第753页。

对于您提供的代码,请尝试:

generate
  for (genvar abc_if_inst=0; abc_if_inst<NUM_ABC; abc_if_inst++) begin : mygen
    abc_if   if_abc   (.clk(clk), .resetn(resetn));
  end
endgenerate

然后您可以通过以下方式连接:

.port_x (mygen[0].if_abc.port_x),
.port_y (mygen[0].if_abc.port_y),
// ...
.port_x (mygen[NUM_ABC-1].if_abc.port_x),
.port_y (mygen[NUM_ABC-1].if_abc.port_y),

请注意,mygen的索引必须是常量,例如参数,另一个genvar或硬编码值。