Modul-Instanziierung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 33 von 90.
Modulinstanziierung ist der Prozess des Erstellens einer Kopie eines Moduls innerhalb eines anderen Moduls. So erstellen Sie größere Designs, indem Sie kleinere Komponenten miteinander verbinden.
Sobald Sie ein Modul definiert haben, können Sie es innerhalb eines anderen Moduls verwenden. Dies wird als Instanziierung bezeichnet. Jede Instanziierung erstellt eine separate Instanz dieses Moduls. Stellen Sie es sich wie die Verwendung eines Bauplans vor, um mehrere Kopien derselben Komponente zu erstellen.
Grundlegende Syntax
module_name instance_name (connections);| Teil | Bedeutung |
|---|---|
module_name | Name des zu instanziierenden Moduls |
instance_name | Eindeutiger Name für diese Kopie |
connections | Signale, die mit den Ports des Moduls verbunden sind |
Einfaches Beispiel
Schritt 1: Definieren eines Moduls
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleSchritt 2: Instanziieren Sie es in einem anderen Modul
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleHier ist, was in diesem Code passiert:
and_gate— der Name des Moduls, das wir verwenden möchten (muss irgendwo existieren)gate1— ein eindeutiger Name, den wir dieser spezifischen Instanz geben(x, y, z)— die Signale, die wir mit den Ports des Moduls verbinden (in der gleichen Reihenfolge, in der sie in der Moduldefinition erscheinen)
Das erste Signal x wird mit dem ersten Port a verbunden. Das zweite Signal y wird mit dem zweiten Port b verbunden. Das dritte Signal z wird mit dem dritten Port c verbunden.
Sie müssen Signale an das Modul übergeben. Die Klammern dürfen nicht leer sein. Die Anzahl der Signale muss mit der Anzahl der Ports übereinstimmen.
Mehrere Instanzen
Sie können mehrere Kopien desselben Moduls erstellen:
module top;
wire out1, out2;
wire sig1, sig2, sig3, sig4;
and_gate gate1 (sig1, sig2, out1);
and_gate gate2 (sig3, sig4, out2);
endmoduleJede Instanz hat ihren eigenen Namen (gate1, gate2) und ihre eigenen Verbindungen. Sie arbeiten unabhängig.
Was während der Instanziierung passiert
- Eine Kopie der Hardware wird erstellt
- Jede Instanz hat ihren eigenen Satz von Signalen
- Instanzen laufen parallel (gleichzeitig)
- Die Signale, die Sie übergeben, bestimmen, wie Instanzen mit dem Rest Ihres Designs verbunden werden.
Regeln für die Instanziierung
| Regel | Warum |
|---|---|
| Instanzname muss eindeutig sein | Um zwischen Kopien zu unterscheiden |
| Modulname muss existieren | Muss an anderer Stelle definiert sein |
| Anzahl der Verbindungen muss mit der Anzahl der Ports übereinstimmen | Andernfalls weiß Verilog nicht, was womit verbunden ist |
| Reihenfolge der Verbindungen muss mit der Reihenfolge der Ports übereinstimmen | Erstes Signal verbindet sich mit dem ersten Port, usw. |
Aufgabe
Vervollständigen Sie den Code, indem Sie das Modul or_gate instanziieren.
Was zu tun ist:
- Instanziieren Sie
or_gatemit dem Instanznamenor1 - Übergeben Sie die Signale in der richtigen Reihenfolge:
input_a,input_b,output_y
Spickzettel
Die Modulinstanziierung erstellt eine Kopie eines Moduls innerhalb eines anderen Moduls:
module_name instance_name (connections);Beispiel:
module and_gate (input a, input b, output c);
assign c = a & b;
endmodule
module top (input x, input y, output z);
and_gate gate1 (x, y, z); // x→a, y→b, z→c
endmoduleRegeln:
- Der Instanzname muss eindeutig sein
- Die Anzahl der Verbindungen muss mit der Anzahl der Ports übereinstimmen
- Die Reihenfolge der Verbindungen muss mit der Reihenfolge der Portdefinition übereinstimmen
- Mehrere Instanzen laufen parallel, jede mit ihren eigenen Signalen
Probier es selbst
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: Instanziiere or_gate mit dem Namen or1
// Signale in der Reihenfolge übergeben: input_a, input_b, output_y
// Verwende nicht die .port(signal) Syntax
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen