FPGA UART: Sıfırdan TX/RX ile 'Hello' Banner ve Echo Modu
Artix-7 FPGA üzerinde VHDL ile sıfırdan tasarlanan tam çift yönlü UART modülü. Kart açılışında 9600 baud'da 'Hello' gönderir, ardından echo moduna geçer; PC terminalinden gönderilen her karakter anında geri iletilir.
Görseller
Proje Detayları
Proje Hakkında
TUSAŞ Uzay Sistemleri Mühendislik Merkezi Donanım Birimi stajında geliştirilen bu proje, UART protokolünü VHDL ile sıfırdan implemente eder — hazır IP core kullanılmaz. Gönderici ve alıcı, bağımsız sonlu durum makineleriyle (FSM) tasarlandı. Artix-7 kartının USB-UART köprüsü üzerinden bilgisayara bağlanır; PuTTY veya TeraTerm açıldığında kart önce `Hello` yazar, ardından echo moduna girer.
İki Aşamalı Çalışma
**Aşama 0 — Banner:** Kart programlandıktan sonra `top` modülü `WELCOME_STRING` dizisini sırayla TX'e besler. `H`, `e`, `l`, `l`, `o`, `\n`, `\r` — yedi karakterin her biri bir önceki tamamlanmadan gönderilmez. Tüm dizi bitince durum makinesi aşama 1'e geçer.
**Aşama 1 — Echo:** RX'ten alınan her byte anında TX'e yönlendirilir. Terminal ekranında yazdığın her karakter geri görünür.
TX Modülü — Durum Makinesi
TX 4 durumlu bir FSM ile çalışır:
**S_IDLE** — hat HIGH (idle), gönderim bekleniyor
**S_START** — start bit: hat LOW çekiliyor, bit timer başlıyor
**S_DATA** — 8 bit LSB-first shift register'dan serileştiriliyor
**S_STOP** — stop bit: hat HIGH, `tx_done_tick` yükseltiliyor
Baud rate hesabı generic parametreyle yapıldı:
```
c_bittimerlim = c_clkfreq / c_baudrate
= 100_000_000 / 9600 = 10_416 saat çevrimi
```
RX Modülü — Bit Örnekleme
RX, start bit tespiti için hatta düşüşü bekler. Start bit'in ortasında örnekleme yapmak için `5208` çevrim (yarı bit süresi) beklenir — bu sayede veri bitleri her zaman kararlı bölgeden okunur.
Gelen bitler shift register'a sağdan eklenerek 8-bit kelime oluşturulur. Stop bit sonunda `rx_exit_control` yükseltilerek veri hazır sinyali verilir.
UART Frame Yapısı
Her karakter şu formatta iletilir:
```
[IDLE: 1] [START: 0] [D0..D7] [STOP: 1] [IDLE: 1]
```
Örnek — `H` = 0x48 = 0100 1000, LSB-first sırasıyla:
```
IDLE START D0 D1 D2 D3 D4 D5 D6 D7 STOP
1 0 0 0 0 1 0 0 1 0 1
```
Mimari (3 Bileşen)
**`uart_tx_module`** — Generic baud rate ve stop bit parametreli, FSM tabanlı serileştirici. `tx_done_tick_o` ile `top`'a tamamlanma sinyali verir.
**`UART_RX_MODULE`** — Counter tabanlı örnekleme, shift register ile deserialization, `rx_exit_control` çıkışı.
**`top`** — İki modülü bağlar, banner dizisini ve echo mantığını yönetir. `WELCOME_STRING` sabit dizisi ASCII hex değerleriyle tanımlandı.