Transmitter-Design
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 89 von 90.
Aufgabe
In dieser Lektion werden Sie den UART-Sender vervollständigen, indem Sie das Schieberegister hinzufügen, um ein beliebiges Byte zu senden, nicht nur den festen Buchstaben 'A'.
Das Schieberegister lädt den vollständigen Frame (Stopp-Bit + 8 Datenbits + Start-Bit) und schiebt ihn Bit für Bit hinaus.
Frame-Format
| Stopp (1) | Daten (8 Bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Wenn zum Beispiel data_in = 8'b01000001 (Buchstabe 'A') ist, wird das Schieberegister zu: 1 01000001 0
Ihre Aufgabe
Sie erhalten die Zustandsmaschine aus der vorherigen Lektion (die ein festes Byte überträgt). Sie müssen diese so modifizieren, dass sie ein beliebiges Byte vom Eingang data_in sendet.
Was zu tun ist:
- Fügen Sie einen
input [7:0]namensdata_inzur Port-Liste hinzu (innerhalb der Klammern). - Fügen Sie ein 10-Bit
regnamensshift_regaußerhalb der Klammern hinzu (innerhalb des Modul-Bodys, da es ein internes Signal ist). - Wenn
cnt == 0undstart == 1:- Laden Sie
shift_regmit{1'b1, data_in, 1'b0}
- Laden Sie
- Wenn
cntzwischen 1 und 8 liegt:- Senden Sie
tx <= shift_reg[0] - Nach rechts schieben:
shift_reg <= shift_reg >> 1
- Senden Sie
- Wenn
cnt == 9:- Senden Sie
tx <= shift_reg[0] - Nach rechts schieben:
shift_reg <= shift_reg >> 1
- Senden Sie
Probier es selbst
module uart_tx (
input clk,
input start, // NEU: Startsignal zum Beginn der Übertragung
output reg tx, // NEU: Serielle Ausgangsleitung
output reg [3:0] cnt // Als Ausgang für Testzwecke beibehalten
);
initial begin
cnt = 0;
tx = 1; // NEU: tx auf HIGH setzen (Ruhezustand)
end
always @(posedge clk) begin
// NEU: Zählerlogik mit Startbedingung
if (cnt == 0 && start) begin // NEU: Übertragung starten
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEU: Zählen während der Übertragung
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEU: Zurücksetzen nach dem letzten Bit
cnt <= 0;
end
end
endmoduleAlle 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