Input- und Output-Ports
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 31 von 90.
Eingangs- und Ausgangsports sind die Verbindungen, über die ein Modul mit der Außenwelt kommunizieren kann. Sie sind wie die Pins auf einem Chip. Ports bilden die Schnittstelle zwischen einem Modul und dem restlichen Design.
Jedes Modul hat:
- Eingangsports: Signale, die in das Modul hineingehen
- Ausgangsports: Signale, die aus dem Modul herausgehen
Eingangsports
Eingangsports empfangen Daten von außen. Sie können innerhalb des Moduls nicht geändert werden: Sie können nur gelesen werden.
input clk; // Ein-Bit-Eingang
input [7:0] data; // 8-Bit-Eingabevektor
input a, b; // Mehrere Eingänge in einer ZeileRegeln für Eingänge:
- Ihnen kann innerhalb des Moduls kein Wert zugewiesen werden
- Sie können nicht als
regdeklariert werden - Immer
wire(standardmäßig)
Ausgangsports
Ausgangsports senden Daten nach außen. Sie können durch assign- oder always-Blöcke 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:
- Kann
wire(mitassign) oderreg(mitalways) sein - Muss von etwas innerhalb des Moduls angesteuert werden
Syntax der Portdeklaration
Die Syntax der Portdeklaration ist die spezielle Art, Eingangs- und Ausgangsports in einem Modul zu schreiben. Sie teilt Verilog drei Dinge über jeden Port mit:
- Richtung: Ist es ein Eingang, Ausgang oder Ein-/Ausgang?
- Größe: Wie viele Bits breit ist es?
- Name: Wie heißt es?
module example (
input [7:0] data_in, // Eingangsvektor
input clk, // Einzelner Eingang
input enable, // Einzelner Eingang
output reg [7:0] out, // Ausgangsregister
output busy // Ausgangsleitung
);Warum die Port-Richtung wichtig ist
Die Richtung teilt Verilog mit:
- Welche Signale das Modul lesen kann (Eingänge)
- Welche Signale das Modul schreiben kann (Ausgänge)
- Welche Arten von Verbindungen zulässig sind
Die Verwendung der falschen Richtung führt zu Kompilierungsfehlern.
Codebeispiel
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 beschrieben werden (reg)
output [3:0] diff // Kann beschrieben werden (wire)
);
always @(*) begin
sum = a + b; // Schreiben in output reg
end
assign diff = a - b; // Schreiben in output wire
endmoduleAufgabe
Vervollständige die Portdeklarationen
Aufgabe:
- Füge einen 8-Bit-Eingang namens
data_inhinzu - Füge einen Ein-Bit-Eingang namens
clkhinzu - Füge einen 4-Bit-Ausgang namens
resulthinzu (verwende reg: wird im always-Block zugewiesen) - Füge einen Ein-Bit-Ausgang namens
validhinzu (verwende wire: wird mit assign zugewiesen)
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. 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