Port-Mapping nach Reihenfolge
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 35 von 90.
In der vorangegangenen Lektion haben Sie etwas über Port-Mapping nach Name gelernt, wobei Sie jede Verbindung explizit mit .port(signal) kennzeichnen. Jetzt werden wir die alternative Methode behandeln: Port-Mapping nach Reihenfolge.
Es verbindet Signale mit den Ports eines Moduls basierend auf der Reihenfolge, in der sie in der Moduldefinition erscheinen. Sie listen die Signale einfach in Klammern auf, und Verilog ordnet sie nacheinander zu.
Syntax:
module_name instance_name (signal1, signal2, signal3);Das erste Signal verbindet sich mit dem ersten Port, 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 Port-Mapping nach Reihenfolge:
or_gate or1 (input_a, input_b, output_y);Dies verbindet:
- Erstes Signal
input_a→ erster Portin1 - Zweites Signal
input_b→ zweiter Portin2 - Drittes Signal
output_y→ dritter Portresult
Reihenfolge ist wichtig
Bei der Port-Zuweisung nach Reihenfolge ist die Sequenz entscheidend:
// Richtige Reihenfolge
or_gate or1 (input_a, input_b, output_y);
// Falsche Reihenfolge - Signale sind mit den falschen Ports verbunden!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);Wenn Sie die Reihenfolge vertauschen, gehen Verbindungen an die falschen Ports. Dies kann schwer zu debuggen sein, da der Code auf den ersten Blick korrekt aussieht.
Port-Mapping nach Name vs. nach Reihenfolge
| Merkmal | Nach Name | Nach Reihenfolge |
|---|---|---|
| Syntax | .port(signal) | signal1, signal2 |
| Reihenfolge wichtig? | Nein | Ja |
| Selbstdokumentierend? | Ja | Nein |
| Fehlerrisiko | Niedrig | Hoch |
| Empfohlen für | Die meisten Designs | Nur einfache Fälle |
Wann man Port-Mapping nach Reihenfolge verwendet
Port-Mapping nach Reihenfolge ist akzeptabel, wenn:
- Das Modul nur sehr wenige Ports hat (2-3)
- Die Port-Reihenfolge offensichtlich ist und sich wahrscheinlich nicht ändern wird
- Sie schnelle Testbenches schreiben
Für die meisten Designs wird Port-Mapping nach Namen bevorzugt, da es übersichtlicher und weniger fehleranfällig ist.
Aufgabe
Vervollständigen Sie die Instanziierung, indem Sie die Signale in der richtigen Reihenfolge unter Verwendung der Port-Zuweisung nach Reihenfolge auflisten.
Was zu tun ist:
Modul-Ports (in dieser Reihenfolge):
input en(Enable)input [7:0] d(Dateneingang)output [7:0] q(Datenausgang)
Zu verbindende Signale:
enable_signal→ verbinden mitendata_input→ verbinden mitddata_output→ verbinden mitq
Spickzettel
Port-Mapping nach Reihenfolge verbindet Signale basierend auf ihrer Position, die der Reihenfolge der Port-Definition des Moduls entspricht:
module_name instance_name (signal1, signal2, signal3);Beispiel mit einem or_gate-Modul (Ports: in1, in2, result):
or_gate or1 (input_a, input_b, output_y);Die Reihenfolge ist entscheidend — das Vertauschen von Signalen führt zu falschen Verbindungen, die schwer zu debuggen sind.
| Merkmal | Nach Name | Nach Reihenfolge |
|---|---|---|
| Syntax | .port(signal) | signal1, signal2 |
| Reihenfolge wichtig? | Nein | Ja |
| Fehlerrisiko | Niedrig | Hoch |
| Empfohlen für | Die meisten Designs | Nur einfache/wenige Ports |
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: Instanziiere das Register mit dem Namen reg1 unter Verwendung von ORDER-Mapping
// Signale in der richtigen Reihenfolge auflisten: 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. 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