Skip to content

Commit d17faba

Browse files
TinyTapeoutBoturish
authored andcommitted
feat: update project tt_um_aksp_mbist_mbisr from adityapundir1985/tt_um_aksp_mbist_mbisr
Commit: 94fb5aa8865fabb74fac5f77e0feda1e236115b6 Workflow: https://github.com/adityapundir1985/tt_um_aksp_mbist_mbisr/actions/runs/19987226194
1 parent 58949b7 commit d17faba

File tree

10 files changed

+5346
-0
lines changed

10 files changed

+5346
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Apache License
2+
Version 2.0, January 2004
3+
http://www.apache.org/licenses/
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"app": "Tiny Tapeout main deda2f4f",
3+
"repo": "https://github.com/adityapundir1985/tt_um_aksp_mbist_mbisr",
4+
"commit": "94fb5aa8865fabb74fac5f77e0feda1e236115b6",
5+
"workflow_url": "https://github.com/adityapundir1985/tt_um_aksp_mbist_mbisr/actions/runs/19987226194",
6+
"project_id": 3498,
7+
"sort_id": 1765017369039
8+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# MBIST with MBISR Memory Test and Repair System
2+
3+
## How it works
4+
5+
This project implements a Memory Built-In Self-Test (MBIST) controller with integrated Memory Built-In Self-Repair (MBISR) capabilities. The system automatically tests an embedded 256×8-bit SRAM memory and can repair faulty cells on-the-fly.
6+
7+
### Key Components:
8+
9+
1. **MBIST Controller** (`mbist_marchc_controller.v`):
10+
- Implements March C- algorithm (simplified variant)
11+
- Tests memory with pattern: {↕(w0); ↑(r0,w1); ↓(r1,w0); ↑(r0)}
12+
- Reports per-address failures via `fail_valid` and `fail_addr` signals
13+
14+
2. **MBISR Controller** (`mbisr_controller.v`):
15+
- Content-Addressable Memory (CAM) style repair logic
16+
- Supports up to 16 repair entries
17+
- Automatically remaps faulty addresses to spare memory region (0xF0-0xFF)
18+
- Transparent to user - faulty addresses are automatically redirected
19+
20+
3. **Memory Module** (`memory.v`):
21+
- 256×8-bit synchronous SRAM
22+
- Configurable address and data widths
23+
- Supports read/write operations
24+
25+
4. **Integration Top** (`top.v`):
26+
- Connects MBIST, MBISR, and memory modules
27+
- Manages test execution and repair coordination
28+
29+
### Operation Flow:
30+
31+
1. **Initialization**: Memory is cleared to zero on reset
32+
2. **Test Start**: User asserts `START` signal
33+
3. **March C- Execution**: MBIST runs through 4 march elements:
34+
- Write 0 ascending (↕w0)
35+
- Read 0, Write 1 ascending (↑r0,w1)
36+
- Read 1, Write 0 descending (↓r1,w0)
37+
- Read 0 ascending verification (↑r0)
38+
4. **Fault Detection**: Any mismatched read triggers failure reporting
39+
5. **Automatic Repair**: MBISR records faulty addresses and remaps to spares
40+
6. **Completion**: `DONE` signal asserted, `FAIL` indicates if faults were found
41+
42+
## How to test
43+
44+
### Test Interface:
45+
46+
**Inputs:**
47+
- `clk`: System clock (any frequency up to 1MHz)
48+
- `rst_n`: Active-low reset (assert to initialize)
49+
- `START` (ui[0]): Begin MBIST test (pulse high)
50+
51+
**Outputs:**
52+
- `DONE` (uo[0]): Test completion indicator (high when finished)
53+
- `FAIL` (uo[1]): Fault detection indicator (high if any faults found)
54+
55+
### Test Procedure:
56+
57+
1. **Apply clock signal** (typically 1-10MHz)
58+
2. **Release reset** (set `rst_n = 1`)
59+
3. **Start test** (pulse `START` high for at least 1 clock cycle)
60+
4. **Monitor outputs**:
61+
- `DONE = 0`, `FAIL = 0`: Test in progress
62+
- `DONE = 1`, `FAIL = 0`: Test passed (memory intact)
63+
- `DONE = 1`, `FAIL = 1`: Test completed with faults (repairs applied)
64+
5. **Repeat test** as needed (system resets between runs)
65+
66+
### Simulation Testing:
67+
68+
```bash
69+
cd test
70+
make # Run RTL simulation
71+
make GATES=yes # Run gate-level simulation
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Tiny Tapeout project information
2+
project:
3+
title: "MBIST + MBISR Built-In Memory Test & Repair" # Project title
4+
author: "Dr Aditya Kumar Singh Pundir, Dr Pallavi Singh" # Your name
5+
discord: "dradityapundir" # Your discord username, for communication and automatically assigning you a Tapeout role (optional)
6+
description: "Memory Built-In Self-Test (March C-) and Built-In Self-Repair with CAM-based faulty address remapping." # One line description of what your project does
7+
language: "Verilog" # other examples include SystemVerilog, Amaranth, VHDL, etc
8+
clock_hz: 10000000 # Clock frequency in Hz (or 0 if not applicable)
9+
10+
# How many tiles your design occupies? A single tile is about 167x108 uM.
11+
tiles: "1x1" # Valid values: 1x1, 1x2, 2x2, 3x2, 4x2, 6x2 or 8x2
12+
13+
# Your top module name must start with "tt_um_". Make it unique by including your github username:
14+
top_module: "tt_um_aksp_mbist_mbisr"
15+
16+
# List your project's source files here.
17+
# Source files must be in ./src and you must list each source file separately, one per line.
18+
# Don't forget to also update `PROJECT_SOURCES` in test/Makefile.
19+
source_files:
20+
- "tt_um_aksp_mbist_mbisr.v"
21+
- "top.v"
22+
- "mbist_marchc_controller.v"
23+
- "mbisr_controller.v"
24+
- "memory.v"
25+
26+
# The pinout of your project. Leave unused pins blank. DO NOT delete or add any pins.
27+
# This section is for the datasheet/website. Use descriptive names (e.g., RX, TX, MOSI, SCL, SEG_A, etc.).
28+
pinout:
29+
# Inputs
30+
ui[0]: "START" # MBIST start signal (active high)
31+
ui[1]: "" # Unused
32+
ui[2]: "" # Unused
33+
ui[3]: "" # Unused
34+
ui[4]: "" # Unused
35+
ui[5]: "" # Unused
36+
ui[6]: "" # Unused
37+
ui[7]: "" # Unused
38+
39+
# Outputs
40+
uo[0]: "DONE" # MBIST completion status (active high)
41+
uo[1]: "FAIL" # MBIST failure status (active high if fault detected)
42+
uo[2]: "" # Unused
43+
uo[3]: "" # Unused
44+
uo[4]: "" # Unused
45+
uo[5]: "" # Unused
46+
uo[6]: "" # Unused
47+
uo[7]: "" # Unused
48+
49+
# Bidirectional pins
50+
uio[0]: "" # Unused (configured as input)
51+
uio[1]: "" # Unused (configured as input)
52+
uio[2]: "" # Unused (configured as input)
53+
uio[3]: "" # Unused (configured as input)
54+
uio[4]: "" # Unused (configured as input)
55+
uio[5]: "" # Unused (configured as input)
56+
uio[6]: "" # Unused (configured as input)
57+
uio[7]: "" # Unused (configured as input)
58+
59+
# Do not change!
60+
yaml_version: 6
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"FLOW_NAME": "LibreLane",
3+
"FLOW_VERSION": "3.0.0.dev44",
4+
"PDK": "ihp-sg13g2",
5+
"PDK_SOURCE": "IHP-Open-PDK",
6+
"PDK_VERSION": "cb7daaa8901016cf7c5d272dfa322c41f024931f"
7+
}
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
Metric,Value
2+
design__lint_error__count,0
3+
design__lint_timing_construct__count,0
4+
design__lint_warning__count,5
5+
design__inferred_latch__count,0
6+
design__instance__count,2351
7+
design__instance__area,28941.5
8+
design__instance_unmapped__count,0
9+
synthesis__check_error__count,0
10+
design__max_slew_violation__count__corner:nom_fast_1p32V_m40C,0
11+
design__max_fanout_violation__count__corner:nom_fast_1p32V_m40C,1
12+
design__max_cap_violation__count__corner:nom_fast_1p32V_m40C,0
13+
power__internal__total,0.0005084325675852597
14+
power__switching__total,0.0001777306606527418
15+
power__leakage__total,0.0000012110145917176851
16+
power__total,0.0006873742095194757
17+
clock__skew__worst_hold__corner:nom_fast_1p32V_m40C,-0.2580389308596379
18+
clock__skew__worst_setup__corner:nom_fast_1p32V_m40C,0.2582579223574388
19+
timing__hold__ws__corner:nom_fast_1p32V_m40C,0.13052218009172442
20+
timing__setup__ws__corner:nom_fast_1p32V_m40C,14.776633668246921
21+
timing__hold__tns__corner:nom_fast_1p32V_m40C,0.0
22+
timing__setup__tns__corner:nom_fast_1p32V_m40C,0.0
23+
timing__hold__wns__corner:nom_fast_1p32V_m40C,0
24+
timing__setup__wns__corner:nom_fast_1p32V_m40C,0.0
25+
timing__hold_vio__count__corner:nom_fast_1p32V_m40C,0
26+
timing__hold_r2r__ws__corner:nom_fast_1p32V_m40C,0.130522
27+
timing__hold_r2r_vio__count__corner:nom_fast_1p32V_m40C,0
28+
timing__setup_vio__count__corner:nom_fast_1p32V_m40C,0
29+
timing__setup_r2r__ws__corner:nom_fast_1p32V_m40C,18.313389
30+
timing__setup_r2r_vio__count__corner:nom_fast_1p32V_m40C,0
31+
design__max_slew_violation__count__corner:nom_slow_1p08V_125C,0
32+
design__max_fanout_violation__count__corner:nom_slow_1p08V_125C,1
33+
design__max_cap_violation__count__corner:nom_slow_1p08V_125C,0
34+
clock__skew__worst_hold__corner:nom_slow_1p08V_125C,-0.2605281619735503
35+
clock__skew__worst_setup__corner:nom_slow_1p08V_125C,0.26091313181822673
36+
timing__hold__ws__corner:nom_slow_1p08V_125C,0.6614113888235399
37+
timing__setup__ws__corner:nom_slow_1p08V_125C,13.406190315102398
38+
timing__hold__tns__corner:nom_slow_1p08V_125C,0.0
39+
timing__setup__tns__corner:nom_slow_1p08V_125C,0.0
40+
timing__hold__wns__corner:nom_slow_1p08V_125C,0
41+
timing__setup__wns__corner:nom_slow_1p08V_125C,0.0
42+
timing__hold_vio__count__corner:nom_slow_1p08V_125C,0
43+
timing__hold_r2r__ws__corner:nom_slow_1p08V_125C,0.661411
44+
timing__hold_r2r_vio__count__corner:nom_slow_1p08V_125C,0
45+
timing__setup_vio__count__corner:nom_slow_1p08V_125C,0
46+
timing__setup_r2r__ws__corner:nom_slow_1p08V_125C,16.347385
47+
timing__setup_r2r_vio__count__corner:nom_slow_1p08V_125C,0
48+
design__max_slew_violation__count__corner:nom_typ_1p20V_25C,0
49+
design__max_fanout_violation__count__corner:nom_typ_1p20V_25C,1
50+
design__max_cap_violation__count__corner:nom_typ_1p20V_25C,0
51+
clock__skew__worst_hold__corner:nom_typ_1p20V_25C,-0.2587981568965002
52+
clock__skew__worst_setup__corner:nom_typ_1p20V_25C,0.25900801680966523
53+
timing__hold__ws__corner:nom_typ_1p20V_25C,0.3243774785035836
54+
timing__setup__ws__corner:nom_typ_1p20V_25C,14.291236154547047
55+
timing__hold__tns__corner:nom_typ_1p20V_25C,0.0
56+
timing__setup__tns__corner:nom_typ_1p20V_25C,0.0
57+
timing__hold__wns__corner:nom_typ_1p20V_25C,0
58+
timing__setup__wns__corner:nom_typ_1p20V_25C,0.0
59+
timing__hold_vio__count__corner:nom_typ_1p20V_25C,0
60+
timing__hold_r2r__ws__corner:nom_typ_1p20V_25C,0.324377
61+
timing__hold_r2r_vio__count__corner:nom_typ_1p20V_25C,0
62+
timing__setup_vio__count__corner:nom_typ_1p20V_25C,0
63+
timing__setup_r2r__ws__corner:nom_typ_1p20V_25C,17.596252
64+
timing__setup_r2r_vio__count__corner:nom_typ_1p20V_25C,0
65+
design__max_slew_violation__count,0
66+
design__max_fanout_violation__count,1
67+
design__max_cap_violation__count,0
68+
clock__skew__worst_hold,-0.2580389308596379
69+
clock__skew__worst_setup,0.2582579223574388
70+
timing__hold__ws,0.13052218009172442
71+
timing__setup__ws,13.406190315102398
72+
timing__hold__tns,0.0
73+
timing__setup__tns,0.0
74+
timing__hold__wns,0
75+
timing__setup__wns,0.0
76+
timing__hold_vio__count,0
77+
timing__hold_r2r__ws,0.130522
78+
timing__hold_r2r_vio__count,0
79+
timing__setup_vio__count,0
80+
timing__setup_r2r__ws,16.347385
81+
timing__setup_r2r_vio__count,0
82+
design__die__bbox,0.0 0.0 202.08 154.98
83+
design__core__bbox,2.88 3.78 199.2 151.2
84+
design__io,45
85+
design__die__area,31318.4
86+
design__core__area,28941.5
87+
design__instance__count__stdcell,713
88+
design__instance__area__stdcell,11470.6
89+
design__instance__count__macros,0
90+
design__instance__area__macros,0
91+
design__instance__count__padcells,0
92+
design__instance__area__padcells,0
93+
design__instance__count__cover,0
94+
design__instance__area__cover,0
95+
design__instance__utilization,0.396339
96+
design__instance__utilization__stdcell,0.396339
97+
design__rows,39
98+
design__rows:CoreSite,39
99+
design__sites,15951
100+
design__sites:CoreSite,15951
101+
design__instance__count__class:buffer,2
102+
design__instance__area__class:buffer,14.5152
103+
design__instance__count__class:inverter,20
104+
design__instance__area__class:inverter,114.307
105+
design__instance__count__class:sequential_cell,82
106+
design__instance__area__class:sequential_cell,4078.77
107+
design__instance__count__class:multi_input_combinational_cell,398
108+
design__instance__area__class:multi_input_combinational_cell,3730.41
109+
flow__warnings__count,1
110+
flow__errors__count,0
111+
design__power_grid_violation__count__net:VPWR,0
112+
design__power_grid_violation__count__net:VGND,0
113+
design__power_grid_violation__count,0
114+
design__instance__count__class:timing_repair_buffer,180
115+
design__instance__area__class:timing_repair_buffer,3055.45
116+
timing__drv__floating__nets,0
117+
timing__drv__floating__pins,0
118+
design__instance__displacement__total,0
119+
design__instance__displacement__mean,0
120+
design__instance__displacement__max,0
121+
route__wirelength__estimated,15177.2
122+
design__violations,0
123+
design__instance__count__class:clock_buffer,17
124+
design__instance__area__class:clock_buffer,400.982
125+
design__instance__count__class:clock_inverter,14
126+
design__instance__area__class:clock_inverter,76.2048
127+
design__instance__count__setup_buffer,0
128+
design__instance__count__hold_buffer,147
129+
global_route__vias,4627
130+
global_route__wirelength,26239
131+
antenna__violating__nets,0
132+
antenna__violating__pins,0
133+
route__antenna_violation__count,0
134+
antenna_diodes_count,0
135+
route__net,718
136+
route__net__special,2
137+
route__drc_errors__iter:0,293
138+
route__wirelength__iter:0,16736
139+
route__drc_errors__iter:1,53
140+
route__wirelength__iter:1,16457
141+
route__drc_errors__iter:2,43
142+
route__wirelength__iter:2,16459
143+
route__drc_errors__iter:3,0
144+
route__wirelength__iter:3,16463
145+
route__drc_errors,0
146+
route__wirelength,16463
147+
route__vias,4086
148+
route__vias__singlecut,4086
149+
route__vias__multicut,0
150+
design__disconnected_pin__count,16
151+
design__critical_disconnected_pin__count,0
152+
route__wirelength__max,369.55
153+
design__instance__count__class:fill_cell,1638
154+
design__instance__area__class:fill_cell,17470.9
155+
timing__unannotated_net__count__corner:nom_fast_1p32V_m40C,30
156+
timing__unannotated_net_filtered__count__corner:nom_fast_1p32V_m40C,0
157+
timing__unannotated_net__count__corner:nom_slow_1p08V_125C,30
158+
timing__unannotated_net_filtered__count__corner:nom_slow_1p08V_125C,0
159+
timing__unannotated_net__count__corner:nom_typ_1p20V_25C,30
160+
timing__unannotated_net_filtered__count__corner:nom_typ_1p20V_25C,0
161+
timing__unannotated_net__count,30
162+
timing__unannotated_net_filtered__count,0
163+
design_powergrid__voltage__worst__net:VPWR__corner:nom_typ_1p20V_25C,1.1996
164+
design_powergrid__drop__average__net:VPWR__corner:nom_typ_1p20V_25C,1.19989
165+
design_powergrid__drop__worst__net:VPWR__corner:nom_typ_1p20V_25C,0.0004017
166+
design_powergrid__voltage__worst__net:VGND__corner:nom_typ_1p20V_25C,0.000304913
167+
design_powergrid__drop__average__net:VGND__corner:nom_typ_1p20V_25C,0.000097758
168+
design_powergrid__drop__worst__net:VGND__corner:nom_typ_1p20V_25C,0.000304913
169+
design_powergrid__voltage__worst,0.000304913
170+
design_powergrid__voltage__worst__net:VPWR,1.1996
171+
design_powergrid__drop__worst,0.0004017
172+
design_powergrid__drop__worst__net:VPWR,0.0004017
173+
design_powergrid__voltage__worst__net:VGND,0.000304913
174+
design_powergrid__drop__worst__net:VGND,0.000304913
175+
ir__voltage__worst,1.1999999999999999555910790149937383830547332763671875
176+
ir__drop__avg,0.000111000000000000001118029280267052172348485328257083892822265625
177+
ir__drop__worst,0.0004020000000000000135724764760425387066788971424102783203125
178+
magic__drc_error__count,0
179+
magic__illegal_overlap__count,0
180+
design__lvs_device_difference__count,0
181+
design__lvs_net_difference__count,0
182+
design__lvs_property_fail__count,0
183+
design__lvs_error__count,0
184+
design__lvs_unmatched_device__count,0
185+
design__lvs_unmatched_net__count,0
186+
design__lvs_unmatched_pin__count,0
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
163. Printing statistics.
2+
3+
=== tt_um_aksp_mbist_mbisr ===
4+
5+
Number of wires: 486
6+
Number of wire bits: 521
7+
Number of public wires: 79
8+
Number of public wire bits: 114
9+
Number of ports: 8
10+
Number of port bits: 43
11+
Number of memories: 0
12+
Number of memory bits: 0
13+
Number of processes: 0
14+
Number of cells: 502
15+
sg13g2_a21o_1 10
16+
sg13g2_a21oi_1 22
17+
sg13g2_a221oi_1 4
18+
sg13g2_a22oi_1 26
19+
sg13g2_and2_1 11
20+
sg13g2_and3_1 5
21+
sg13g2_and4_1 2
22+
sg13g2_buf_1 2
23+
sg13g2_dfrbpq_1 82
24+
sg13g2_inv_1 20
25+
sg13g2_mux2_1 3
26+
sg13g2_nand2_1 45
27+
sg13g2_nand2b_1 11
28+
sg13g2_nand3_1 48
29+
sg13g2_nand4_1 2
30+
sg13g2_nor2_1 30
31+
sg13g2_nor2b_1 3
32+
sg13g2_nor3_1 11
33+
sg13g2_nor4_1 6
34+
sg13g2_o21ai_1 60
35+
sg13g2_or2_1 21
36+
sg13g2_or3_1 2
37+
sg13g2_or4_1 1
38+
sg13g2_tiehi 38
39+
sg13g2_tielo 22
40+
sg13g2_xnor2_1 10
41+
sg13g2_xor2_1 5
42+
43+
Chip area for module '\tt_um_aksp_mbist_mbisr': 7775.535600
44+
of which used for sequential elements: 4017.081600 (51.66%)
45+

0 commit comments

Comments
 (0)