[Verilog][SystemVerilog] Loop generate による複数インスタンス

Verilog 2001 から generate 構文を使って、module, assertion 等のインスタンスや、assign による接続などができます。ここではループを使った生成の話です。

Loop generate

for loop 構文を使って複数インスタンスができます。loop generate の場合、genvar で generate 用の変数を宣言して for loop 内で使います。

変数 i はコンパイル時のみ使われ、シミュレーション時には存在しません。。

generate ~ endgeneate キーワード

generate ~ endgenerate というキーワードを使って、generate 箇所を明示できます。書いても書かなくても同じです。

genvar は generate ~ endgenerate の内外どちらにも記述できますが、変数のスコープは影響しないので、外側に書く方がわかりやすいと思う。

generate begin ~ end endgenerate のように begin/end を使うと変数のスコープができます。

階層の名前付け

loop generate によりひとつ新しい階層ができます。
ラベルを付けて、generate block の名前を決められます。

SystemVerilog の記述

SystemVerilog の場合、for 内に genvar を記述できます。

この場合、変数 i は、この for loop 内でのみ有効です。

See Also

  • IEEE Std 1364™-2005: 12.4.1 Loop generate constructs
  • IEEE Std 1800™-2012: 27.4 Loop generate constructs
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク