Menu
Coddy logo textTech

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

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

モジュールのインスタンス化(Module instantiation)とは、あるモジュールの内部に別のモジュールのコピーを作成するプロセスのことです。これは、より小さなコンポーネントを接続し合うことで、より大きな設計を構築するための方法です。

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

基本構文

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 に接続します。

モジュールにシグナルを渡す必要があります。 カッコ内を空にすることはできません。シグナルの数はポートの数と一致する必要があります。

Multiple Instances

同じモジュールのインスタンスを複数作成できます:

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

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

インスタンス化の際に起こること

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

インスタンス化のルール

ルール理由
instance_name は一意である必要がありますコピー同士を区別するため
module_name は存在している必要があります他で定義されている必要があるため
接続数は port の数と一致する必要があります一致しない場合、Verilogは何がどこに接続されているか判断できません
接続の順序(order)は port の順序と一致する必要があります最初の signal が最初の port に接続されます
challenge icon

チャレンジ

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

作業手順:

  1. インスタンス名 or1or_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腕試し

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

基礎のすべてのレッスン