RTL Studio Open IDE

Interface Protocols

Synthesizable SystemVerilog UART Core (8-N-1)

A synthesizable 8-N-1 UART with valid/ready TX/RX handshakes and parameterizable baud timing.

About this block

Simulate it in the Verilog IDE

Hardsystemverilogsimsyn

Synthesizable SystemVerilog UART Core (8-N-1) is a SystemVerilog reference block in the Interface Protocols catalog. UART, SPI, I2C, and other serial or peripheral protocol interfaces. Marked Hard: a larger reference. Simulate the packaged testbench before you change the RTL.

This OpenIP provides a compact 8-N-1 UART transmitter and receiver with valid/ready handshakes.

Baud timing is generated from fixed CLK_FREQ and BAUD_RATE parameters (default 100 MHz / 115200).

The design is fully synthesizable and verified with Verilator.

  1. Choose Open in IDE. RTL Studio loads the packaged workspace for Synthesizable SystemVerilog UART Core (8-N-1).
  2. Read the SystemVerilog module in the editor. The catalog line for this block: A synthesizable 8-N-1 UART with valid/ready TX/RX handshakes and parameterizable baud timing.
  3. Run the packaged testbench with the in-browser Verilator simulator, then open the VCD in the waveform viewer.
  4. Run Yosys in the same IDE for a generic netlist. Sky130 liberty mapping is a separate Pro library option.

RTL Studio is the Verilog simulator and IDE around this block: Slang lint, Verilator, VCD waveforms, and Yosys, in the browser. Simulation guide · Yosys guide.

Features

  • Separate TX and RX finite-state machines.
  • Programmable baud via parameters (no runtime register programming).
  • tx_ready / tx_busy status for transmit flow control.
  • rx_valid / rx_ready receive handshake with stop-bit checking.
  • Self-checking testbench with seven directed test cases.

Ports

PortDirectionWidthDescription
clk_iinput1System clock
rst_n_iinput1Active-low reset
tx_valid_iinput1TX byte launch
tx_data_iinput8TX payload
tx_ready_ooutput1TX accepts new byte
tx_pin_ooutput1Serial TX line
tx_busy_ooutput1TX serializer active
rx_valid_ooutput1RX byte available
rx_data_ooutput8RX payload
rx_ready_iinput1RX consumer ready
rx_pin_iinput1Serial RX line

Parameters

ParameterDefaultDescription
CLK_FREQ100_000_000Clock frequency in Hz
BAUD_RATE115200UART line rate

Integration

Tie rx_pin_i high when idle. Hold rx_ready_i high unless software back-pressure is required. Adjust CLK_FREQ / BAUD_RATE to match your SoC clock before synthesis.

More in Interface Protocols

All Interface Protocols blocks