モジュールのインスタンス化
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各インスタンスには独自の名前(gate1、gate2)と独自の接続があります。これらは独立して動作します。
インスタンス化の際に起こること
- ハードウェアのコピーが作成されます
- 各インスタンスは独自の信号のセットを持ちます
- インスタンスは並行(同時)に動作します
- 渡す
signalsによって、インスタンスがデザインの残りの部分とどのように接続するかが決まります
インスタンス化のルール
| ルール | 理由 |
|---|---|
instance_name は一意である必要があります | コピー同士を区別するため |
module_name は存在している必要があります | 他で定義されている必要があるため |
接続数は port の数と一致する必要があります | 一致しない場合、Verilogは何がどこに接続されているか判断できません |
接続の順序(order)は port の順序と一致する必要があります | 最初の signal が最初の port に接続されます |
チャレンジ
or_gate モジュールをインスタンス化してコードを完成させてください。
作業手順:
- インスタンス名
or1でor_gateをインスタンス化します - 正しい順序でシグナルを渡します:
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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。