Menu
CoddyTech

モジュールのインスタンス化

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

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

モジュールを定義したら、別のモジュール内で使用できます。これはインスタンス化と呼ばれます。インスタンス化するたびに、そのモジュールの独立したインスタンスが作成されます。同じ部品の複製を複数作るために設計図を使うようなものだと考えてください。

基本構文

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 top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

このコードでは、次のことが行われます。

  • and_gate: 使用するモジュールの名前(どこかに存在している必要があります)
  • gate1: この特定のインスタンスに付ける一意の名前
  • (x, y, z): モジュールのポートに接続する信号(モジュール定義に記載されている順)

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

各ポートに1つの信号を渡します。 Verilogでは信号の数が少なくても、括弧の中が空でも受け付けますが、信号が渡されないポートは未接続のままとなり、設計内の何にも接続されません。モジュールのポート数を超える信号を渡すとエラーになります。

複数のインスタンス

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

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

各インスタンスには、それぞれ独自の名前(gate1、gate2)と独自の接続があります。それぞれ独立して動作します。

インスタンス化中に起こること

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

インスタンス化のルール

ルール理由
インスタンス名は一意でなければならない複製を区別するため
モジュール名が存在しなければならない別の場所で定義されている必要がある
ポートごとに1つの信号を渡す信号のないポートは未接続のままとなり、ポート数より信号数が多いとエラーになる
接続の順序はポートの順序と一致しなければならない最初の信号は最初のポートに接続される、など
challenge icon

チャレンジ

or_gate モジュールをインスタンス化して、コードを完成させましょう。

やること:

  1. or1 というインスタンス名で or_gate をインスタンス化する
  2. 信号を正しい順序で渡す:input_a、input_b、output_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オンラインコンパイラ