Menu
Coddy logo textTech

Transmitter Design

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 89 von 90.

challenge icon

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)
1data_in0

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:

  1. Füge der Portliste (innerhalb der Klammern) einen input [7:0] namens data_in hinzu
  2. Füge außerhalb der Klammern (innerhalb des Module-Bodys, da es sich um ein internes signal handelt) ein 10-Bit-reg namens shift_reg hinzu
  3. Wenn cnt == 0 und start == 1 gilt:
    1. Lade shift_reg mit {1'b1, data_in, 1'b0}
  4. Wenn cnt zwischen 1 und 8 liegt:
    1. Sende tx <= shift_reg[0]
    2. Nach rechts schieben: shift_reg <= shift_reg >> 1
  5. Wenn cnt == 9 gilt:
    1. Sende tx <= shift_reg[0]
    2. Nach rechts schieben: shift_reg <= shift_reg >> 1

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

endmodule

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler