A synthesizable UART communication controller featuring FSM-based transmitter, receiver, parameterized baud-rate generation, and end-to-end loopback verification.
This repository implements a Universal Asynchronous Receiver Transmitter (UART) in Verilog RTL, designed using independent Finite State Machines (FSMs) for both transmission and reception.
The design supports configurable baud rates through parameterization, converts parallel data to serial format for transmission, reconstructs serial data back into parallel format at the receiver, and validates complete end-to-end communication using self-checking Verilog testbenches.
The project follows a modular RTL design methodology commonly used in FPGA and ASIC development.
💡 Developed, simulated, and verified using Icarus Verilog and GTKWave.
- ✅ FSM-Based UART Transmitter
- ✅ FSM-Based UART Receiver
- ✅ Parameterized Baud Rate Generator
- ✅ Parallel-to-Serial Data Conversion
- ✅ Serial-to-Parallel Data Conversion
- ✅ Start Bit Detection
- ✅ Stop Bit Verification
- ✅ Busy Status Signal
- ✅ Loopback Communication Verification
- ✅ Synthesizable RTL Design
- ✅ Self-Checking Testbench
- ✅ GTKWave Timing Verification
+----------------------+
| UART TX |
| FSM-Based Encoder |
+----------+-----------+
|
| TX
|
Serial Communication
|
|
+----------v-----------+
| UART RX |
| FSM-Based Decoder |
+----------+-----------+
|
Parallel Data Out
FSM-Based-Parameterized-UART-Transceiver-Verilog-RTL/
│
├── RTL/
│ ├── uart_tx.v
│ ├── uart_rx.v
│ └── uart_top.v
│
├── TB/
│ ├── uart_tx_tb.v
│ └── uart_system_tb.v
│
├── images/
│ └── uart_waveform.png
│
├── .gitignore
├── LICENSE
└── README.md
| Module | Description |
|---|---|
| uart_tx.v | UART Transmitter implemented using an FSM |
| uart_rx.v | UART Receiver implemented using an FSM |
| uart_top.v | Integrates transmitter and receiver into a loopback system |
| uart_tx_tb.v | Testbench for standalone transmitter verification |
| uart_system_tb.v | End-to-end loopback verification testbench |
Idle
│
▼
Start Bit
│
▼
Transmit 8 Data Bits
│
▼
Stop Bit
│
▼
Return to Idle
The UART receiver continuously monitors the serial input line.
- Detects the Start Bit
- Samples each incoming data bit according to the configured baud timing
- Reconstructs the original 8-bit data
- Verifies the Stop Bit
- Asserts
data_validonce a complete frame has been received successfully
| Tool | Purpose |
|---|---|
| Verilog HDL | RTL Design |
| Icarus Verilog | Simulation |
| GTKWave | Waveform Analysis |
| VS Code | Development Environment |
| Git | Version Control |
| GitHub | Repository Hosting |
iverilog -g2012 -o uart_system_sim RTL/uart_tx.v RTL/uart_rx.v RTL/uart_top.v TB/uart_system_tb.vvvp uart_system_simgtkwave simulation/uart_system.vcdAfter simulation, the following functionality is verified:
- UART transmission begins after
tx_start - Start bit generation
- Sequential transmission of all data bits
- Stop bit generation
- Receiver reconstructs transmitted byte
data_validasserted after successful reception- End-to-end loopback communication verified
This project demonstrates practical knowledge of:
- Finite State Machine (FSM) Design
- RTL Design Methodology
- Verilog HDL
- UART Communication Protocol
- Digital Communication Systems
- Parameterized Hardware Design
- Modular RTL Architecture
- Testbench Development
- Functional Verification
- Timing-Based Digital Design
- Waveform Debugging
- FPGA/ASIC Design Fundamentals
- Configurable data width
- Configurable parity generation/checking
- Even/Odd parity support
- Multiple stop-bit configuration
- FIFO buffering
- Interrupt generation
- APB/AHB interface
- FPGA implementation on development board
This project is licensed under the MIT License.
Abhishek Mohammad
B.Tech in Electronics & Communication Engineering
National Institute of Technology (NIT) Jalandhar
- RTL Design
- Digital System Design
- Embedded Systems
- FPGA & ASIC Design
- RISC-V Processor Design
- VLSI Design & Verification
GitHub:
https://github.com/abhishekxece
LinkedIn:
https://www.linkedin.com/in/abhishek-mohammad-377071325/