Modulinstanziierung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 33 von 90.
Die Instanziierung eines Moduls ist der Prozess des Erstellens einer Kopie eines Moduls innerhalb eines anderen Moduls. So erstellst du größere Designs, indem du kleinere Komponenten miteinander verbindest.
Sobald du ein Modul definiert hast, kannst du es innerhalb eines anderen Moduls verwenden. Dies wird als Instanziierung bezeichnet. Jede Instanziierung erstellt eine separate Instanz dieses Moduls. Stell es dir so vor, als würdest du einen Bauplan verwenden, 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: Ein Modul definieren
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleSchritt 2: Instanziiere es in einem anderen Modul
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleDas passiert in diesem Code:
and_gate: der Name desmodule, 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 desmoduleverbinden (in derselben Reihenfolge, in der sie in der Definition desmoduleerscheinen)
Das erste Signal x wird mit dem ersten Anschluss a verbunden. Das zweite Signal y wird mit dem zweiten Anschluss b verbunden. Das dritte Signal z wird mit dem dritten Anschluss c verbunden.
Du musst 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
Du kannst 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 voneinander.
Was bei der Instanziierung passiert
- Eine Kopie der Hardware wird erstellt
- Jede Instanz verfügt über ihren eigenen Satz von Signalen
- Instanzen laufen parallel (gleichzeitig)
- Die Signale, die du übergibst, bestimmen, wie Instanzen mit dem Rest deines Designs verbunden werden
Regeln für die Instanziierung
| Regel | Warum |
|---|---|
| Der Instanzname muss eindeutig sein | Um zwischen Kopien zu unterscheiden |
| Der Modulname muss vorhanden sein | Er muss an anderer Stelle definiert sein |
| Die Anzahl der Verbindungen muss mit der Anzahl der Ports übereinstimmen | Andernfalls weiß Verilog nicht, was womit verbunden ist |
| Die Reihenfolge der Verbindungen muss mit der Reihenfolge der Ports übereinstimmen | Das erste Signal wird mit dem ersten Port verbunden usw. |
Aufgabe
Vervollständige den Code, indem du das or_gate-Modul instanziierst.
Was zu tun ist:
- Instanziiere
or_gatemit dem Instanznamenor1 - Übergebe die Signale in der richtigen Reihenfolge:
input_a,input_b,output_y
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
// Übergebe die Signale in der Reihenfolge: 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler