1

我需要连接到已生成的 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),
4

1 回答 1

1

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

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

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),

请注意,index ofmygen需要是一个常量,例如参数、另一个 genvar 或硬编码值。

于 2013-07-19T17:52:16.870 回答