我需要连接已生成的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),
答案 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或硬编码值。