Menu
Coddy logo textTech

Projekt nadajnika

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 89 z 90.

challenge icon

Wyzwanie

W tej lekcji uzupełnisz nadajnik UART, dodając rejestr przesuwny, aby wysyłać dowolny bajt, a nie tylko ustaloną literę 'A'.

Rejestr przesuwny wczytuje całą ramkę (bit stopu + 8 bitów danych + bit startu) i wysyła ją po jednym bicie naraz.

Format ramki

Stop (1)Dane (8 bitów)Start (0)
1data_in0

Na przykład, jeśli data_in = 8'b01000001 (litera 'A'), rejestr przesuwny przyjmuje wartość: 1 01000001 0

Twoje zadanie

Otrzymujesz maszynę stanów z poprzedniej lekcji (wysyła ustalony bajt). Musisz ją zmodyfikować, aby wysyłała dowolny bajt z wejścia data_in.

Co zrobić:

  1. Dodaj input [7:0] o nazwie data_in do listy portów (wewnątrz nawiasów)
  2. Dodaj 10-bitowy reg o nazwie shift_reg poza nawiasami (wewnątrz ciała modułu, ponieważ jest to sygnał wewnętrzny)
  3. Gdy cnt == 0 i start == 1:
    1. Wczytaj do shift_reg wartość {1'b1, data_in, 1'b0}
  4. Gdy cnt ma wartość od 1 do 8:
    1. Wyślij tx <= shift_reg[0]
    2. Przesuń w prawo: shift_reg <= shift_reg >> 1
  5. Gdy cnt == 9:
    1. Wyślij tx <= shift_reg[0]
    2. Przesuń w prawo: shift_reg <= shift_reg >> 1

Spróbuj swoich sił

module uart_tx (
  input clk,
  input start,           // NEW: sygnał start rozpoczynający transmisję
  output reg tx,         // NEW: szeregowa linia wyjściowa
  output reg [3:0] cnt   // Pozostaw jako wyjście do testowania
);

  initial begin
    cnt = 0;
    tx = 1;              // NEW: ustaw tx na stan HIGH (stan bezczynności)
  end

  always @(posedge clk) begin
    // NEW: logika licznika z warunkiem rozpoczęcia
    if (cnt == 0 && start) begin   // NEW: rozpocznij transmisję
      cnt <= 1;
    end
    else if (cnt > 0 && cnt < 9) begin   // NEW: zliczaj podczas transmisji
      cnt <= cnt + 1;
    end
    else if (cnt == 9) begin      // NEW: wyzeruj po ostatnim bicie
      cnt <= 0;
    end
  end

endmodule

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online