This repository contains the SystemVerilog implementation of a Universal Asynchronous Receiver-Transmitter (UART), a popular communication interface used for serial communication between devices. The UART design provided here is intended for educational and academic purposes, serving as a reference for understanding UART functionality and implementation.
The UART implementation includes modules for both transmitter and receiver functionalities. These modules facilitate serial communication by converting parallel data from/to a microcontroller or other source into serial data streams and vice versa. Key features of the UART implementation include:
- Full Duplex Communication: Supports simultaneous transmission and reception of data, enabling bidirectional communication between devices.
- Configurable Parameters: Parameters such as baud rate, data length, parity, and stop bits can be configured to suit specific application requirements.
- Modular Design: The UART design is modular, allowing for easy integration into larger digital systems and FPGA-based projects.
- FIFO Buffers: Utilizes FIFO (First-In-First-Out) buffers for both transmit and receive operations, enabling efficient data transfer and buffering.
Simulation of the UART implementation can be performed using any SystemVerilog-compatible simulator. The provided testbench (testbench.sv) can be used to verify the functionality of the UART transmitter and receiver modules.
To simulate the UART implementation, follow these steps:
- Ensure that a SystemVerilog-compatible simulator is installed on your system.
- Clone this repository to your local machine.
- Navigate to the repository directory.
- Run
make compilein the terminal to compile the Verilog design. - Run
make simto start the simulation. - View simulation results in the waveform viewer provided by your simulator.
To use the UART implementation in your SystemVerilog project:
- Instantiate the
toplevelmodule in your design hierarchy. - Connect appropriate inputs and outputs to interface with external devices or other modules in your system.
- Configure UART parameters such as baud rate, data length, parity, and stop bits according to your application requirements.
- This project was inspired by the need for a simple yet functional UART implementation suitable for educational purposes.
- Special thanks to the contributors and maintainers of SystemVerilog tools and simulators used in this project.