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 R Usha Rani (Associate Dean-PG), Dr. K. S. Geetha (Vice Principal) and Dr. K. N. Subramanya (Principal) for their constant encouragement and support in facilitating this Tiny Tapeout SKY25A submission.
The tt_um_mbist module implements a basic Built-In Self-Test (BIST) mechanism for an 8-bit × 16-word internal SRAM. It uses a simple Finite State Machine (FSM) to write and read test patterns from the SRAM to verify memory integrity.
The input control bus ui_in is structured as:
During the test:
Outputs are delivered via uo_out:
Inputs:
Outputs:
The module uses a simple 2-bit FSM with the following states:
The design includes an internal 16×8-bit SRAM array (mem[0:15]). Writes and reads are synchronized with the clock.
A Cocotb-based Python testbench is recommended. The typical procedure is:
Test Pattern | ui_in[3:0] | Behavior | Expected uo_out |
---|---|---|---|
0xA | 4'b1010 | All memory set to 0x0A | Done=1, Fail=0 |
0xF | 4'b1111 | All memory set to 0x0F | Done=1, Fail=0 |
Altered mem | N/A | Inject mismatch before READ | Done=1, Fail=1 |
To monitor values in simulation (Verilog), include:
initial begin
$monitor("Time=%0t | Start=%b Addr=%d DataIn=0x%0h ReadBack=0x%0h | Done=%b Fail=%b",
$time, ui_in[7], addr, ui_in[3:0], mem[addr], uo_out[7], uo_out[6]);
end
# | Input | Output | Bidirectional |
---|---|---|---|
0 | DATA_IN[0] | ||
1 | DATA_IN[1] | ||
2 | DATA_IN[2] | ||
3 | DATA_IN[3] | ||
4 | MODE[0] | ||
5 | MODE[1] | ||
6 | WRITE_EN | FAIL | |
7 | START | DONE |