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

beginfor ループの内容を-endで囲み、ラベルを適用することをお勧めします。ラベルを使用しない場合は、genblk一意の ID 番号が付加された自動ラベルが追加されます。IEEE Std 1800-2012のセクション 27.6では、生成ブロックの命名作業について詳しく説明しています。セクション 27 は、生成ブロックに関するすべてです。for ループの生成に関する 1 つの例 (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、またはハードコードされた値などの定数である必要があることに注意してください。

于 2013-07-19T17:52:16.870 に答える