Menu
Coddy logo textTech

Module Instantiation

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 33/90。

moduleのインスタンス化とは、別のmoduleの内部にmoduleのコピーを作成するプロセスです。これは、小さなコンポーネント同士を接続して、より大きな設計を構築する方法です。

モジュールを定義したら、別のモジュール内でそれを使用できます。これはインスタンス化と呼ばれます。インスタンス化するたびに、そのモジュールの個別のインスタンスが作成されます。同じコンポーネントの複数のコピーを、設計図を使って構築するようなものだと考えてください。

基本構文

module_name instance_name (connections);
部分意味
module_nameインスタンス化するモジュールの名前
instance_nameこのコピーの一意の名前
connectionsモジュールのポートに接続された信号

簡単な例

ステップ 1: モジュールを定義する

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

ステップ 2: 別のmoduleでインスタンス化する

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

このコードでは、次のことが起こります:

  • and_gate:使用したいmoduleの名前(どこかに存在している必要があります)
  • gate1:この特定のインスタンスに付ける一意の名前
  • (x, y, z):moduleのportに接続するsignal(moduleの定義に現れる順番と同じ順序)

最初の信号 x は最初のポート a に接続します。2 番目の信号 y は 2 番目のポート b に接続します。3 番目の信号 z は 3 番目のポート c に接続します。

モジュールに信号を渡す必要があります。かっこを空にすることはできません。信号の数はポートの数と一致していなければなりません。

複数のインスタンス

同じモジュールのコピーを複数作成できます。

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

各インスタンスにはそれぞれ固有の名前(gate1gate2)と固有の接続があります。それらは独立して動作します。

Instantiate中に起こること

  • ハードウェアのコピーが作成されます
  • 各インスタンスには独自のsignalsのセットがあります
  • インスタンスはparallel(同時に)実行されます
  • 渡す signals によって、インスタンスが設計の他の部分とどのように接続されるかが決まります

インスタンス化のルール

ルール理由
インスタンス名は一意でなければならないコピー同士を区別するため
モジュール名が存在しなければならない別の場所で定義されていなければならない
connections の数は port の数と一致しなければならないそうでなければ、Verilog はどの信号がどこに接続されるのか分からない
connections の順序は port の順序と一致しなければならない最初の signal は最初の port に接続され、以下同様
challenge icon

チャレンジ

or_gateモジュールをインスタンス化して、コードを完成させてください。

行うこと:

  1. インスタンス名or1or_gateをインスタンス化する
  2. 信号を正しい順序で渡す:input_ainput_boutput_y

自分で試してみよう

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

module top (
  input input_a,
  input input_b,
  output output_y
);
  
  // TODO: or_gate を or1 という名前でインスタンス化する
  // 信号を次の順序で渡す: input_a, input_b, output_y
  // .port(signal) 構文を使用しない
  

endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ