# UART Controller ## Overview The UART controller is a peripheral that realizes serial communication (RS-232). It supports transmit/receive FIFOs, baud rate generation, and asynchronous communication protocol, enabling communication with external devices and PCs. ## Module Hierarchy ``` uart (uart/uart.v) ├── fifo × 2 (uart/fifo.v) # FIFO buffer ├── uart_rx (uart/uart_rx.v) # UART receiver │ └── synchronizer (synchronizer.v) # Clock domain synchronization └── uart_tx (uart/uart_tx.v) # UART transmitter ``` ### Key Features - **Baud Rate**: Configurable - **FIFO**: Transmit/receive buffers - **Interface**: AXI4-Lite based interconnect ### Submodule Description #### fifo (uart/fifo.v) FIFO for transmit/receive buffers. Has configurable depth and is instantiated twice as transmit FIFO (TX buffer) and receive FIFO (RX buffer). Implemented in BRAM, uses 2048 entries to utilize the minimum BRAM capacity as much as possible. #### synchronizer (synchronizer.v) Clock domain synchronization circuit using 2-stage flip-flops. Used for synchronization of the rxd signal. #### uart_rx (uart/uart_rx.v) UART receive module. Detects start bit and performs sampling at the center of the signal. Our UART receive module does not handle errors very well. #### uart_tx (uart/uart_tx.v) UART transmit module. Transmits start bit, 8-bit data, and stop bit after waiting for the number of cycles according to the baud rate. ## State Machine ### uart.v (Top-level Control) #### Read State Machine | State | Operation | |-------|------| | `RD_IDLE` | Wait for read request | | `RD_WAIT` | Wait for data read from RXFIFO | #### Write State Machine | State | Operation | |-------|------| | `WR_IDLE` | Wait for write request | | `WR_WAIT` | Wait for data write to TXFIFO | ### uart_tx.v (Transmitter Control) | State | Operation | |-------|------| | `IDLE` | Wait for transmit request, txd=1 (HIGH) | | `RUN` | Transmitting data (start bit→8 data bits→stop bit) | ### uart_rx.v (Receiver Control) | State | Operation | |-------|------| | `IDLE` | Wait for start bit detection | | `RUN` | Receiving data (start bit verification→8 data bit reception→stop bit verification) |