DFT / Memory Test

Memory Built-In
Self-Test

Embedded test engines, March algorithms, and fault models — then run an interactive March C- simulation to watch stuck-at faults get caught live.

March C- Stuck-At Faults Transition Faults BIST Controller DFT / IEEE 1500
Architecture

Why Memories Need Their Own Test Engine

Memories occupy 70–80% of SoC area. Scan chains test logic flip-flops — they can't efficiently access the 2D array of bitcells inside a SRAM. MBIST places a compact FSM controller adjacent to each memory, running March algorithms at-speed without external ATE.

Functional Data/Addr MUX BIST/Func select MBIST Controller March FSM Phase sequencer Addr Gen ↑ ↓ counter Data Gen 0/1/pattern Response Analyzer Expected vs actual XOR Fail Address Register Addr / WData BIST Addr Memory Array (SRAM / ROM / RegFile) bitcells Wordlines (rows) Bitlines (cols) Sense Amplifiers RData PASS / FAIL go/no-go pin IEEE 1500 TAP BIST_EN, SCAN_EN CLK, RST, MODE Legend: Data/Addr bus BIST control Pass/Fail Test interface (IEEE 1500)

Fig 1 — MBIST architecture. The controller generates addresses + data patterns, drives them through the MUX into the memory, reads back the result, and compares it in the Response Analyzer. Any mismatch latches the failing address.

Fault Models

Memory Fault Models

Different manufacturing defects create different electrical faults. Each fault model requires a specific test algorithm to guarantee detection.

FaultSymbolBehaviorRoot CauseDetected By
Stuck-At-0 SA0 Cell always reads 0 regardless of write Bitline short to GND, failed pull-up March C- M2: ⇑(r1)
Stuck-At-1 SA1 Cell always reads 1 regardless of write Bitline short to VDD, failed pull-down March C- M5: ⇑(r0)
Transition Fault TF Cell can write 0 but not transition to 1 (or vice versa) Weak write driver, high bitline capacitance March B, March LR
Coupling Fault CF A write to cell A forces cell B to a value Capacitive coupling between adjacent bitlines March LR, March SS
Address Decoder Fault AF Two addresses map to same cell, or an address maps nowhere Decoder logic defect, wordline short March C-, March Y
Algorithm

March C- — The Workhorse Algorithm

A March element is written as ⇑/⇓(ops) — an arrow indicates address traversal direction, and ops are the ordered read/write operations per cell. March C- has 10n complexity (10 operations per cell) and detects SAF, TF, CF, and AF.

Notation: w0 = write 0 · r0 = read 0 (expect 0) · r1 = read 1 (expect 1) · ⇑ = ascending addresses · ⇓ = descending · ⇕ = either direction
M0: ⇑(w0)
Ascending: initialize all cells to 0. Sets a known background state.
Init / AF
M1: ⇑(r0,w1)
Ascending: read 0 (check SA1), then write 1 to each cell.
SA1 / CF↑
M2: ⇑(r1,w0)
Ascending: read 1 (check SA0/TF), then write 0.
SA0 / TF↓
M3: ⇓(r0,w1)
Descending: read 0 (check SA1 again), then write 1. Catches coupling faults sensitive to address direction.
SA1 / CF↓
M4: ⇓(r1,w0)
Descending: read 1 (check SA0), then write 0.
SA0 / CF↓
M5: ⇕(r0)
Final read: all cells must be 0. Catches any residual fault and address decoder faults.
AF / SA1
// March C- SystemVerilog behavioral model (simplified)
task march_c_minus(input int size);
  // M0: ascending write 0
  for (int i = 0; i < size; i++) mem_write(i, 0);

  // M1: ascending read 0, write 1
  for (int i = 0; i < size; i++) begin
    check(mem_read(i), 0, i, "M1 r0"); mem_write(i, 1);
  end

  // M2: ascending read 1, write 0
  for (int i = 0; i < size; i++) begin
    check(mem_read(i), 1, i, "M2 r1"); mem_write(i, 0);
  end

  // M3: descending read 0, write 1
  for (int i = size-1; i >= 0; i--) begin
    check(mem_read(i), 0, i, "M3 r0"); mem_write(i, 1);
  end

  // M4: descending read 1, write 0
  for (int i = size-1; i >= 0; i--) begin
    check(mem_read(i), 1, i, "M4 r1"); mem_write(i, 0);
  end

  // M5: ascending read 0
  for (int i = 0; i < size; i++)
    check(mem_read(i), 0, i, "M5 r0");
endtask
Interactive Lab

March C- Simulator

Click any memory cell to inject a fault, then press Run Test to watch the March C- algorithm sweep through the 4×4 array. The analyzer will catch every fault you inject.

SA0 — stuck at 0
SA1 — stuck at 1
TF(0→1) — can't write 1
TF(1→0) — can't write 0
Healthy
March C- Live Simulation — 4×4 SRAM (16 cells)
Click cells to inject faults
M0 ↑(w0)
M1 ↑(r0,w1)
M2 ↑(r1,w0)
M3 ↓(r0,w1)
M4 ↓(r1,w0)
M5 ↑(r0)
Memory Array — click a cell to cycle fault type

Operations

0
of 160 total

Errors Found

0

Current Op

Operation Log

SoC Integration

MBIST in a Real SoC Flow

🔧

IEEE 1500 Wrapper

Each memory's BIST controller is accessed via a standardized IEEE 1500 test wrapper. BIST_EN, SCAN_EN, and CLK are routed through a TAP controller, enabling JTAG-based production test.

At-Speed Testing

MBIST runs the memory at functional clock frequency, catching timing-dependent faults (slow writes, sense amp margin) that scan-based tests running at lower speed would miss.

🔁

Repair Integration

Advanced MBIST includes Built-In Redundancy Analysis (BIRA). When a failing cell is found, BIRA selects a spare row/column and programs an eFuse to remap around the defect at power-on.

🛰

In-System MBIST

MBIST can run at power-on (BIST before boot) to detect infant mortality and wear-out faults in the field, not just at production test — critical for automotive ISO 26262 and aerospace applications.

Comparison

MBIST vs ATPG — When to Use Which

AspectMBISTATPG (Scan)
TargetMemory bitcells, bitlines, wordlinesLogic gates, flip-flops
Pattern sourceOn-chip March FSMExternal ATE from .stil file
SpeedAt functional clock speedTypically slower (shift mode)
Coverage metricFault model coverage (SAF, TF, CF)Stuck-at, transition, path delay
Test timeO(n) — linear in cellsO(n²) for ATPG on large cones
Required for memories?Yes — mandatoryNo (can't reach bitcells)
FAQ

Frequently Asked Questions

MBIST (Memory Built-In Self-Test) is an on-chip DFT technique that places a compact test controller adjacent to each memory array. It runs March algorithms — sequences of write/read operations — to detect stuck-at, transition, coupling, and address decoder faults without any external ATE pattern generation.

March C- is a 10n-complexity algorithm (n = number of cells): ⇑(w0); ⇑(r0,w1); ⇑(r1,w0); ⇓(r0,w1); ⇓(r1,w0); ⇑(r0). It detects stuck-at faults, transition faults, idempotent coupling faults, and address decoder faults. The "-" means the final read element order is flexible (not strictly ascending).

Scan chains test sequential logic by shifting known data through flip-flops. Memory arrays are 2D structures requiring address-based access. For an n-bit memory, scan insertion would require n shift operations per access — completely impractical for the 70–80% of SoC area occupied by memory. MBIST is the standard solution.

SA0: the cell always reads 0 regardless of what was written — caused by a bitline shorted to GND or a failed pull-up transistor. SA1: always reads 1 — caused by VDD short or failed pull-down. March C- catches both: M2 detects SA0 (expects to read back 1 after writing 1), M5 detects SA1 (expects to read 0 at the end).

ATPG generates test patterns for combinational/sequential logic via scan chains. MBIST is specific to memory arrays — it tests bitcells, bitlines, wordlines, sense amplifiers, and address decoders using March algorithms. A complete SoC test strategy requires both: ATPG for logic, MBIST for all embedded SRAMs, ROMs, and register files.