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

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:

  1. Fügen Sie einen input [7:0] namens data_in zur Port-Liste hinzu (innerhalb der Klammern).
  2. Fügen Sie ein 10-Bit reg namens shift_reg außerhalb der Klammern hinzu (innerhalb des Modul-Bodys, da es ein internes Signal ist).
  3. Wenn cnt == 0 und start == 1:
    1. Laden Sie shift_reg mit {1'b1, data_in, 1'b0}
  4. Wenn cnt zwischen 1 und 8 liegt:
    1. Senden Sie tx <= shift_reg[0]
    2. Nach rechts schieben: shift_reg <= shift_reg >> 1
  5. Wenn cnt == 9:
    1. Senden Sie tx <= shift_reg[0]
    2. Nach rechts schieben: shift_reg <= shift_reg >> 1

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

endmodule

Alle Lektionen in Grundlagen