Inout Ports
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 32 von 90.
Ein inout-Port ist ein bidirektionaler Port, der sowohl senden als auch empfangen kann. Er kann zu unterschiedlichen Zeiten als Eingang oder Ausgang fungieren. Die meisten Ports sind entweder input (Daten fließen hinein) oder output (Daten fließen hinaus). Ein inout-Port kann beides. Je nach Situation kann er Daten nach außen treiben oder Daten empfangen.
Stell es dir wie eine Straße mit Verkehr in beide Richtungen statt einer Einbahnstraße vor.
Inout-Ports werden verwendet für:
- Gemeinsam genutzte Busse: mehrere Geräte, die mit denselben Leitungen verbunden sind
- Speicherdatenbusse: Daten können read oder geschrieben werden
- Bidirectional-Kommunikation: I2C, SPI usw.
Nur ein Gerät treibt den Bus gleichzeitig. Andere Geräte müssen sich im hochohmigen Zustand (Z) befinden.
Einen Inout-Port deklarieren
inout [7:0] data_bus; // 8-Bit bidirektionaler Bus
inout ready; // Ein-Bit bidirektionales SignalSo funktioniert Inout
Ein inout-Port benötigt ein Steuersignal, um zu entscheiden, ob er als input oder output arbeitet:
module bidir (
inout [7:0] bus,
input [7:0] data_out,
input enable,
output [7:0] data_in
);
assign bus = (enable) ? data_out : 8'bZ; // Drive bus when enabled, else Z
assign data_in = bus; // Always read the bus
endmodule- Wenn
enable = 1, drives dasmoduledenbus(output mode) - Wenn
enable = 0, gibt dasmoduledenbusfrei (input mode, high-Z)
Wichtige Regeln für Inout
| Regel | Warum |
|---|---|
Muss als wire deklariert werden | Kann kein reg sein |
| Kann nicht gleichzeitig gelesen und beschrieben werden | Würde einen Konflikt (X) verursachen |
Verwende Z, um den Bus freizugeben | Ermöglicht es anderen Geräten, ihn zu treiben |
| Immer nur ein Treiber gleichzeitig | Verhindert Buskonflikte |
Inout vs Input vs Output
| Porttyp | Richtung | Kann Drive | Kann Read |
|---|---|---|---|
input | Ein Weg (nur hinein) | Nein | Ja |
output | Ein Weg (nur hinaus) | Ja | Nein |
inout | Zwei Wege (beide) | Ja (wenn enabled) | Ja (always) |
Häufiger Fehler
// WRONG: Kann inout nicht innerhalb eines always-Blocks zuweisen
always @(posedge clk) begin
data_bus <= something; // Error! Verwende assign mit Bedingung
end
// CORRECT: Verwende assign mit enable-Bedingung
assign data_bus = (enable) ? something : 8'bZ;Aufgabe
Add den fehlenden inout-port und die assign-Anweisungen hinzu, um diesen bidirectional-Puffer funktionsfähig zu machen.
Was zu tun ist:
- Add einen 8-Bit-
inout-port calledio_bushinzu - Add eine
assign-statement hinzu, dieio_busmitsend_valuedrives, whensend_enable1 ist, otherwiseZ - Add eine
assign-statement hinzu, dieio_businreceive_valuereads
Probier es selbst
module bidir_buffer (
// Aufgabe 1: Füge hier einen 8-Bit-inout-Port namens io_bus hinzu
input [7:0] send_value,
input send_enable,
output [7:0] receive_value
);
// Aufgabe 2: Füge eine assign-Anweisung hinzu, die io_bus mit send_value treibt, wenn send_enable 1 ist, andernfalls Z
// Aufgabe 3: Füge eine assign-Anweisung hinzu, die io_bus in receive_value liest
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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler