Menu
Coddy logo textTech

Transmitter Design

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 89 / 90.

challenge icon

Görev

Bu derste, yalnızca sabit 'A' harfini değil, herhangi bir byte'ı göndermek için shift register ekleyerek UART vericisini tamamlayacaksın.

shift register, tam çerçeveyi (Stop bit + 8 data bits + Start bit) yükler ve bunu her seferinde bir bit olacak şekilde dışarı kaydırır.

Çerçeve Biçimi

Stop (1)Data (8 bits)Start (0)
1data_in0

Örneğin, data_in = 8'b01000001 ('A' harfi) ise shift register şu hâle gelir: 1 01000001 0

Görevin

Önceki dersteki state machine sana veriliyor (sabit byte gönderir). Bunu, data_in girişinden herhangi bir byte gönderecek şekilde değiştirmen gerekiyor.

Yapılacaklar:

  1. port list içine (parantezlerin arasına) data_in adlı bir input [7:0] ekle
  2. Parantezlerin dışına (modül gövdesinin içine, çünkü dahili bir signal'dır) shift_reg adlı 10 bitlik bir reg ekle
  3. cnt == 0 ve start == 1 olduğunda:
    1. shift_reg değerini {1'b1, data_in, 1'b0} ile yükle
  4. cnt 1 ile 8 arasındayken:
    1. tx <= shift_reg[0] gönder
    2. Sağa kaydır: shift_reg <= shift_reg >> 1
  5. cnt == 9 olduğunda:
    1. tx <= shift_reg[0] gönder
    2. Sağa kaydır: shift_reg <= shift_reg >> 1

Kendin dene

module uart_tx (
  input clk,
  input start,           // NEW: iletimi başlatmak için start sinyali
  output reg tx,         // NEW: seri çıkış hattı
  output reg [3:0] cnt   // Test için output olarak tut
);

  initial begin
    cnt = 0;
    tx = 1;              // NEW: tx'i HIGH yap (boşta durumu)
  end

  always @(posedge clk) begin
    // NEW: start koşulu ile sayaç mantığı
    if (cnt == 0 && start) begin   // NEW: iletime başla
      cnt <= 1;
    end
    else if (cnt > 0 && cnt < 9) begin   // NEW: iletim sırasında say
      cnt <= cnt + 1;
    end
    else if (cnt == 9) begin      // NEW: son bitten sonra sıfırla
      cnt <= 0;
    end
  end

endmodule

Temeller bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi