We gratefully acknowledge the Center of Excellence (CoE) in Integrated Circuits and Systems (ICAS) and the Department of Electronics and Communication Engineering (ECE) for providing the necessary resources and guidance. Special thanks to Dr. H V Ravish Aradhya (HOD-ECE), Dr. K. S. Geetha (Vice Principal), and Dr. K. N. Subramanya (Principal) for their constant encouragement and support to carry out this Tiny Tapeout SKY25a submission.
The tt_um_tx_fsm module is a Tiny FIFO-based transmitter with error detection and retransmission support, implemented with a TinyTapeout wrapper. Its primary function is to buffer input data and provide reliable communication using Single Error Correction and Double Error Detection (SECDED) principles along with Automatic Repeat reQuest (ARQ) mechanisms.
Data can be written into the FIFO and later read out with different modes of operation, including normal transmission, corrupted transmission (for testing error detection), and retransmission of the last valid word. The design generates ack
and nack
signals to indicate successful transmission or request for retransmission.
The entire module runs synchronously with the input clock (clk
) and uses an asynchronous active-low reset (rst_n
) for safe initialization.
The module accepts its control through the dedicated input bus ui_in:
ui_in[7]
→ wr_en (write enable)ui_in[6]
→ rd_en (read enable)ui_in[5:2]
→ data_in[3:0] (4-bit input data)ui_in[1:0]
→ err_mode (error handling mode)The output port uo_out provides both status and data:
uo_out[7]
→ ack (acknowledge successful transmission)uo_out[6]
→ nack (request retransmission)uo_out[5:2]
→ data_out[3:0] (transmitted data)uo_out[1:0]
→ reserved (unused, tied to 0)Other wrapper signals:
ena
is always high when powered.uio_in
, uio_out
, and uio_oe
are unused.The design combines a FIFO buffer with error-handling logic:
FIFO Buffer:
wr_en
) and read (rd_en
) enables.Error Handling via err_mode:
00
→ Normal transmission: data is read from FIFO, ACK asserted.01
→ Corrupted transmission: data is output with injected error, ACK asserted.10
→ Retransmission: last valid word is re-sent, NACK asserted.FSM & Control Logic:
last_data
for retransmission.ack
/nack
based on error mode.This ensures reliable data delivery with SECDED + ARQ principles.
When the reset signal (rst_n
) is asserted low:
wr_ptr
, rd_ptr
) are reset to 0.data_out
, last_data
, ack
, nack
) are cleared.This guarantees a deterministic startup and safe behavior after power-up or reset.
Unused inputs (uio_in
) are consumed using a reduction operation, while uio_out
and uio_oe
are tied to zero, preventing synthesis warnings.
The design is verified using a Cocotb testbench. Multiple scenarios are covered:
Normal Transmission
err_mode=00
.ack=1
and correct data output.Corrupted Transmission (Error Injection)
err_mode=01
.ack=1
still indicates transaction completion.Retransmission (ARQ)
err_mode=10
.nack=1
indicates retransmission request.Sequential Reads
Simulation logs and waveforms confirm correct behavior of FIFO, SECDED, and ARQ mechanisms.
# | Input | Output | Bidirectional |
---|---|---|---|
0 | ui_in[0] | ||
1 | ui_in[1] | ||
2 | ui_in[2] | uo_out[2] | |
3 | ui_in[3] | uo_out[3] | |
4 | ui_in[4] | uo_out[4] | |
5 | ui_in[5] | uo_out[5] | |
6 | ui_in[6] | uo_out[6] | |
7 | ui_in[7] | uo_out[7] |