Eingangs- und Ausgangs-Ports
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 31 von 90.
Eingangs- und Ausgangsports sind die Verbindungen, die es einem Modul ermöglichen, mit der Außenwelt zu kommunizieren. Sie sind wie die Pins auf einem Chip. Ports sind die Schnittstelle zwischen einem Modul und dem Rest des Designs.
Jedes Module hat:
- Eingangs-Ports — Signale, die in das Module hineingehen
- Ausgangs-Ports — Signale, die aus dem Module herausgehen
Eingangsports (Input Ports)
Eingangsports (input) empfangen Daten von außerhalb. Sie können innerhalb des Moduls nicht geändert werden — sie können only gereaden werden.
input clk; // Ein-Bit-Eingang
input [7:0] data; // 8-Bit-Eingangsvektor
input a, b; // Mehrere Eingänge in einer ZeileRegeln für Inputs:
- Können innerhalb des Moduls keinen Wert zugewiesen bekommen
- Können nicht als
regdeklariert werden - Sind immer
wire(standardmäßig)
Output Ports
Output ports senden Daten nach außen. Sie können von assign- oder always-Blöcken angesteuert werden.
output out; // Ein-Bit-Ausgang
output [3:0] result; // 4-Bit-Ausgang
output reg busy; // Ausgang kann reg sein
output wire ready; // Ausgang kann wire seinRegeln für Ausgänge:
- Können
wire(mitassign) oderreg(mitalways) sein - Müssen von etwas innerhalb des Moduls angesteuert werden
Port-Deklarationssyntax
Die Port-Deklarationssyntax ist die spezifische Art und Weise, wie Sie Eingangs- und Ausgangsports in einem Modul schreiben. Sie teilt Verilog drei Dinge über jeden Port mit:
- Richtung — ist es input, output oder inout?
- Größe — wie viele bit breit ist es?
- Name — wie wird es called?
module example (
input [7:0] data_in, // Eingangsvektor
input clk, // Einzelner Eingang
input enable, // Einzelner Eingang
output reg [7:0] out, // Ausgangs-reg
output busy // Ausgangs-wire
);Warum die Portrichtung wichtig ist
Die Richtung sagt Verilog:
- Welche Signale das Modul lesen kann (Eingänge)
- Welche Signale das Modul schreiben kann (Ausgänge)
- Welche Arten von Verbindungen erlaubt sind
Die Verwendung der falschen Richtung führt zu Kompilierungsfehlern.
Code-Beispiel
module port_demo (
input [3:0] a, // Kann nur gelesen werden
input [3:0] b, // Kann nur gelesen werden
output reg [3:0] sum, // Kann geschrieben werden (reg)
output [3:0] diff // Kann geschrieben werden (wire)
);
always @(*) begin
sum = a + b; // Schreiben in output reg
end
assign diff = a - b; // Schreiben in output wire
endmoduleAufgabe
Vervollständige die Port-Deklarationen
Was zu tun ist:
- Füge einen 8-bit-
inputcalleddata_inhinzu - Füge einen
single-bit-inputcalledclkhinzu - Füge einen 4-
bit-outputcalledresulthinzu (verwendereg— wird imalways-Block zugewiesen) - Füge einen
single-bit-outputcalledvalidhinzu (verwendewire— wird mitassignzugewiesen)
Probier es selbst
module port_challenge (
// Aufgabe 1: Füge einen 8-Bit-Eingang namens data_in hinzu
// Aufgabe 2: Füge einen 1-Bit-Eingang namens clk hinzu
// Aufgabe 3: Füge einen 4-Bit-Ausgang namens result hinzu (verwende reg)
// Aufgabe 4: Füge einen 1-Bit-Ausgang namens valid hinzu (verwende wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
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