Portzuordnung nach Reihenfolge
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 35 von 90.
In der vorherigen Lektion hast du Portzuordnung nach Namen kennengelernt, bei der du jede Verbindung explizit mit .port(signal) beschriftest. Nun behandeln wir die alternative Methode: die Portzuordnung nach Reihenfolge.
Es verbindet Signale mit den Ports eines Moduls basierend auf der Reihenfolge, in der sie in der Moduldefinition erscheinen. Du listest die Signale einfach in Klammern auf, und Verilog ordnet sie der Reihe nach zu.
Syntax:
module_name instance_name (signal1, signal2, signal3);Das erste Signal wird mit dem ersten Port verbunden, das zweite mit dem zweiten Port und so weiter.
Beispiel
Moduldefinition:
module or_gate (
input in1, // Erster Port
input in2, // Zweiter Port
output result // Dritter Port
);
assign result = in1 | in2;
endmoduleInstanziierung mit Portzuordnung nach Reihenfolge:
or_gate or1 (input_a, input_b, output_y);Dies verbindet:
- Erstes Signal
input_a→ erster Anschlussin1 - Zweites Signal
input_b→ zweiter Anschlussin2 - Drittes Signal
output_y→ dritter Anschlussresult
Die Reihenfolge ist wichtig
Bei der Portzuordnung nach Reihenfolge ist die Abfolge entscheidend:
// Richtige Reihenfolge
or_gate or1 (input_a, input_b, output_y);
// Falsche Reihenfolge - Signale mit falschen Ports verbunden!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);Wenn du die Reihenfolge verwechselst, werden die Verbindungen mit den falschen Anschlüssen hergestellt. Das kann schwer zu debuggen sein, weil der Code auf den ersten Blick korrekt aussieht.
Portzuordnung nach Namen vs. nach Reihenfolge
| Merkmal | Nach Namen | Nach Reihenfolge |
|---|---|---|
| Syntax | .port(signal) | signal1, signal2 |
| Spielt die Reihenfolge eine Rolle? | Nein | Ja |
| Selbstdokumentierend? | Ja | Nein |
| Fehlerrisiko | Niedrig | Hoch |
| Empfohlen für | Die meisten Designs | Nur einfache Fälle |
Wann die Portzuordnung nach Reihenfolge verwendet werden sollte
Die Portzuordnung nach Reihenfolge ist akzeptabel, wenn:
- Das Modul sehr wenige Ports hat (2–3)
- Die Reihenfolge der Ports offensichtlich ist und sich wahrscheinlich nicht ändern wird
- Du schnelle Testbenches schreibst
Für die meisten Designs wird die Portzuordnung nach Namen bevorzugt, weil sie klarer und weniger fehleranfällig ist.
Aufgabe
Schließe die Instanziierung ab, indem du die Signale in der richtigen Reihenfolge mithilfe der Portzuordnung nach Reihenfolge auflistest.
Was zu tun ist:
Modul-Ports (in dieser Reihenfolge):
input en(Aktivierung)input [7:0] d(Dateneingang)output [7:0] q(Datenausgang)
Zu verbindende Signale:
enable_signal→ mitenverbindendata_input→ mitdverbindendata_output→ mitqverbinden
Probier es selbst
module register (
input en,
input [7:0] d,
output [7:0] q
);
assign q = en ? d : q;
endmodule
module top (
input enable_signal,
input [7:0] data_input,
output [7:0] data_output
);
// TODO: Instantiiere register mit dem Namen reg1 unter Verwendung von ORDER-Mapping
// Liste die Signale in der richtigen Reihenfolge auf: enable_signal, data_input, data_output
// 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