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各インスタンスにはそれぞれ固有の名前(gate1、gate2)と固有の接続があります。それらは独立して動作します。
Instantiate中に起こること
- ハードウェアのコピーが作成されます
- 各インスタンスには独自のsignalsのセットがあります
- インスタンスはparallel(同時に)実行されます
- 渡す signals によって、インスタンスが設計の他の部分とどのように接続されるかが決まります
インスタンス化のルール
| ルール | 理由 |
|---|---|
| インスタンス名は一意でなければならない | コピー同士を区別するため |
| モジュール名が存在しなければならない | 別の場所で定義されていなければならない |
| connections の数は port の数と一致しなければならない | そうでなければ、Verilog はどの信号がどこに接続されるのか分からない |
| connections の順序は 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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ