[TR] Digilent Basys 3 FPGA kartı üzerinde UART protokolü üzerinden Blok RAM (BRAM) modülüne 16-bit veri yazmayı ve okumayı sağlayan, FSM tabanlı, paket protokolü destekli ve self-checking testbench ile doğrulanmış tam senkron bellek denetleyicisi tasarımı.
[EN] A fully synchronous Block RAM (BRAM) controller core on Basys 3 FPGA, providing 16-bit read/write access over a packetized UART protocol with FSM control and verified via a self-checking testbench.
[TR]
- Parametrik Bellek: 16-bit veri genişliği (
RAM_WIDTH = 16), 128 adres derinliği (RAM_DEPTH = 128) ve düşük gecikme (LOW_LATENCY). - Paket Tabanlı İletişim: 4 baytlık çerçeve yapısıyla kararlı veri ve komut aktarımı.
- Self-Checking Testbench: VHDL
proceduremimarisi ve otomatik doğrulama ile konsoldan anlık test onayı. - Donanım Doğrulaması: Basys 3 kartı üzerinde HTerm seri port arayüzü ile gerçek zamanlı yazma/okuma testi.
[EN]
- Parametric Memory: 16-bit data width (
RAM_WIDTH = 16), 128 depth (RAM_DEPTH = 128), and low latency (LOW_LATENCY). - Packet-Based Communication: Fixed 4-byte frame structure for reliable command and data transfer.
- Self-Checking Testbench: Automated pass/fail verification directly in the simulator console using VHDL procedures.
- Hardware Verification: Real-time write/read validation on Basys 3 FPGA using the HTerm serial terminal.
[TR] Bilgisayar ile FPGA arasındaki haberleşme 4 baytlık paketler halinde gerçekleşir:
[EN] Host PC and FPGA communicate through fixed 4-byte frames:
| Bayt No / Byte Index | Alan / Field | Açıklama (TR) | Description (EN) |
|---|---|---|---|
| Byte 1 | Opcode | 0x0A (Yazma / WRITE) veya 0x0B (Okuma / READ) |
0x0A for WRITE, 0x0B for READ |
| Byte 2 | Address | Hedef BRAM Adresi (0 - 127) | Target BRAM Address (0 - 127) |
| Byte 3 | Data (MSB) | Yazılacak verinin üst baytı (Okumada dummy: 0x00) |
Write data high byte (Dummy 0x00 during READ) |
| Byte 4 | Data (LSB) | Yazılacak verinin alt baytı (Okumada dummy: 0x00) |
Write data low byte (Dummy 0x00 during READ) |
- Yazma / WRITE (
0x0A):0x0A-0x05-0x11-0x22- [TR] Adres
0x05'e0x1122verisini yazar. - [EN] Writes
0x1122into address0x05.
- [TR] Adres
- Okuma / READ (
0x0B):0x0B-0x05-0x00-0x00- [TR] Adres
0x05'teki veriyi okur; FPGAtx_ohattından sırasıyla0x11ve0x22baytlarını geri basar. - [EN] Reads address
0x05; FPGA streams back0x11(MSB) followed by0x22(LSB).
- [TR] Adres
[TR] Sistemin kontrol mantığı 4 ana durumdan oluşmaktadır:
S_IDLE: UART RX hattından 4 baytlık paket tamamlanana kadar verileri kaydırma register'ına alır.S_WRITE: BRAM'e 1 saat çevrimlik senkronwea = '1'darbesi üreterek veriyi ilgili adrese yazar.S_READ: Adresi BRAM'e uygular ve senkron bellek okuma gecikmesini bekler.S_TRANS: Okunan 16-bit veriyi iki parçaya bölerek her baytı UART TX üzerinden seri hatta basar.
[EN] The control logic consists of 4 main states:
S_IDLE: Shifts incoming bytes from UART RX until a complete 4-byte packet is formed.S_WRITE: Commits data to the addressed location using a single-cycle synchronouswea = '1'pulse.S_READ: Applies address to BRAM and waits for synchronous memory read latency.S_TRANS: Splits the 16-bit word into two bytes and serializes them sequentially over UART TX.
Tasarım Vivado Simulator üzerinde hem dalga şekli seviyesinde hem de otomatik konsol raporlama mekanizmasıyla test edilmiştir:
(The design was verified in Vivado Simulator via both waveform timing analysis and an automated self-checking testbench):
[TR] Adres 0x05'e 0x1122 ve Adres 0x25'e 0x0960 yazılıp okunması senaryoları:
[EN] Scenarios for writing and reading 0x1122 at address 0x05 and 0x0960 at address 0x25:
Zamanlama Analizi / Timing Analysis:
- [TR]
addr,dwritevedreadsinyalleri BRAM gecikmesine tam uyumlu çalışmaktadır.tx_startsinyalinin her bayt iletimi için tam 1 clock genişliğinde darbe ürettiği vedinhattından sırasıylaMSBveLSBverilerinin aktığı doğrulanmıştır.- [EN]
addr,dwrite, anddreadbuses operate synchronously with BRAM latency.tx_startgenerates clean 1-cycle pulses per byte, transferringMSBandLSBdata sequentially ondin.
[TR] Testbench içine yerleştirilen uart_rx alıcı modeli sayesinde gelen veriler otomatik olarak yakalanmış ve beklenen verilerle karşılaştırılmıştır:
[EN] A companion uart_rx receiver model inside the testbench captures returned serial bytes and validates them against expected values:
[TR] Proje Digilent Basys 3 (Artix-7) geliştirme kartına yüklenmiş ve bilgisayar üzerinden HTerm seri port programı ile 9600 baud hızında canlı olarak test edilmiştir. HTerm üzerinden gönderilen 4 baytlık paketler ile RAM'e yazma yapılmış ve okuma komutu sonucunda doğru verilerin geri geldiği kart üzerinde gözlemlenmiştir.
[EN] Programmed onto the Digilent Basys 3 (Artix-7) FPGA board and verified in real time using the HTerm terminal at 9600 baud. 4-byte command frames write data into BRAM, and subsequent read commands return the correct 16-bit words back to the terminal.
uart-bram.webm
├── rtl/
│ ├── top.vhd # Ana FSM ve Entegrasyon Modülü / Top-level FSM & integration
│ ├── block_ram.vhd # Parametrik Blok RAM Çekirdeği / Parametric Block RAM core
│ ├── ram_pkg.vhd # clogb2 ve yardımcı fonksiyon paketi / Package & helper functions
│ ├── uart_rx.vhd # UART Alıcı Modülü / UART Receiver core
│ └── uart_tx.vhd # UART Verici Modülü / UART Transmitter core
├── tb/
│ └── tb_top.vhd # Modüler Self-Checking Testbench / Modular self-checking testbench
└── README.md

