Transmitter Design
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 89 von 90.
Aufgabe
In dieser Lektion vervollständigst du den UART-Transmitter, indem du das shift register hinzufügst, um jedes Byte zu senden, nicht nur den festen Buchstaben 'A'.
Das shift register lädt den vollständigen Frame (Stop-Bit + 8 data bits + Start-Bit) und gibt ihn Bit für Bit aus.
Frame-Format
| Stop (1) | Data (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Wenn beispielsweise data_in = 8'b01000001 (Buchstabe 'A') ist, wird das shift register zu: 1 01000001 0
Deine Aufgabe
Du erhältst die Zustandsmaschine aus der vorherigen Lektion (sie überträgt ein festes Byte). Du musst sie so ändern, dass sie jedes Byte aus dem data_in-Eingang sendet.
Was zu tun ist:
- Füge der Portliste (innerhalb der Klammern) einen
input [7:0]namensdata_inhinzu - Füge außerhalb der Klammern (innerhalb des Module-Bodys, da es sich um ein internes signal handelt) ein 10-Bit-
regnamensshift_reghinzu - Wenn
cnt == 0undstart == 1gilt:- Lade
shift_regmit{1'b1, data_in, 1'b0}
- Lade
- Wenn
cntzwischen 1 und 8 liegt:- Sende
tx <= shift_reg[0] - Nach rechts schieben:
shift_reg <= shift_reg >> 1
- Sende
- Wenn
cnt == 9gilt:- Sende
tx <= shift_reg[0] - Nach rechts schieben:
shift_reg <= shift_reg >> 1
- Sende
Probier es selbst
module uart_tx (
input clk,
input start, // NEW: Startsignal zum Beginn der Übertragung
output reg tx, // NEW: serielle Ausgangsleitung
output reg [3:0] cnt // Als Ausgang zum Testen belassen
);
initial begin
cnt = 0;
tx = 1; // NEW: tx auf HIGH setzen (Ruhezustand)
end
always @(posedge clk) begin
// NEW: Zählerlogik mit Startbedingung
if (cnt == 0 && start) begin // NEW: Übertragung starten
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: während der Übertragung zählen
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: nach dem letzten Bit zurücksetzen
cnt <= 0;
end
end
endmoduleAlle 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