DFT

Stuck-at fault model

By CourseTron Team ·  9 min read ·  Updated Oct 2026 💬 𝕏 in f
Table of Contents
    🖨  Download / Print this guide (PDF)

    In short: The stuck-at fault model represents a physical defect as a single line in the circuit permanently fixed at logic 0 (SA0) or logic 1 (SA1). It is the backbone of digital manufacturing test because it is simple, technology-independent, and lets automatic test pattern generation produce a small set of vectors that catch a large fraction of real silicon defects.

    What Is a stuck at fault?

    A stuck at fault is an abstract model of a manufacturing defect in which a single signal line in a logic circuit behaves as if it were permanently tied to a fixed logic value, regardless of what the driving gate tries to do. The two cases are stuck-at-0 (SA0), where the line is frozen at logic 0, and stuck-at-1 (SA1), where it is frozen at logic 1. The model does not try to describe the underlying physics exactly — a short to ground, a short to power, an open gate input, or a broken metal track can all surface as the same logical symptom. Instead it reduces every such imperfection to one of two behaviours on a named net.

    This deliberate simplification is what makes the model so powerful. A real chip has billions of transistors and an enormous space of possible physical failures. By mapping them onto "this line is stuck high" or "this line is stuck low", test engineers get a finite, enumerable fault list on which algorithms can reason. Each gate terminal (every input pin and every output pin) contributes two faults, SA0 and SA1, so a circuit with n fault sites has at most 2n single stuck-at faults.

    Why the stuck at fault model matters

    Manufacturing is imperfect: dust particles, lithography variation, and metal voids mean a fraction of fabricated dies are defective. You cannot ship those, so every die is tested on an automatic test equipment (ATE) machine after fabrication. The question is which input patterns to apply. Exhaustively testing an n-input block needs 2n vectors — impossible for anything real. The stuck-at model gives a tractable target instead: generate just enough patterns to detect every modelled fault.

    The industry metric for this is fault coverage — the percentage of modelled faults a test set detects. High single stuck-at coverage (typically 98–99%+) correlates strongly with low defective-parts-per-million escaping to customers, which is why the model has survived decades of process scaling even though it never literally matches a transistor-level short.

    Key fact: To detect a stuck-at fault you must do two things at once — drive the faulty line to the opposite value (activation) and propagate the resulting difference to an observable output (sensitization). A pattern that only sets the value but cannot carry the effect outward detects nothing.

    How detection works: controllability and observability

    Every stuck-at test rests on two abilities, and both must succeed for the same vector:

    • Controllability — the ease of forcing a target line to a specific value from the primary inputs. To test a line for SA0 you must control it to 1 (so a good circuit shows 1 while the faulty one shows 0); for SA1 you must control it to 0.
    • Observability — the ease of propagating a line's value to a primary output or scan flop so the difference can be measured. The fault effect must travel through intervening gates along a sensitized path where every side input is held at its non-controlling value (1 for AND/NAND, 0 for OR/NOR).

    A fault is detected only when activation and propagation hold simultaneously. Lines deep inside a design are often hard to control, hard to observe, or both — which is exactly why design-for-test techniques such as scan chains exist: they turn internal flip-flops into directly controllable and observable points, collapsing a sequential problem into a combinational one.

    Detecting SA1 on line a: drive a=0, sensitize through to Z a=0b=1 SA1 AND c=0 OR Z AND output: good 0, faulty 1 good 0, faulty 1 c=0 is non-controlling for OR Activate: a=0 is opposite the stuck value. Propagate: b=1 and c=0 keep the side inputs non-controlling. CourseTron · coursetron.com
    Detecting a stuck-at-1 fault on line a: the vector sets a=0 and holds b=1 and c=0, so Z shows 0 in the good circuit and 1 in the faulty one.

    Variants and the single-fault assumption

    The classic model is the single stuck-at fault model: it assumes exactly one line is faulty at a time. This keeps the fault list linear in circuit size and is justified in practice because test sets built for single faults also catch most multiple faults as a side effect. Related and extended models include:

    • Multiple stuck-at faults — several lines faulty together; the fault space grows exponentially, so these are used selectively rather than enumerated fully.
    • Gate-level vs. pin-level faults — a fault on a gate output versus a fault on a specific fan-out branch. Branch (pin) faults are more precise because a stem and its branches can fail independently.
    • Complementary models — modern flows add transition (delay) faults for timing defects and bridging faults for shorts, because shrinking geometries produce defects that a pure stuck-at test can miss.

    Fault collapsing: shrinking the fault list

    Many faults are logically indistinguishable, so there is no point testing each separately. Fault collapsing removes this redundancy and is a standard first step before ATPG:

    • Equivalent fault collapsing — two faults are equivalent if no input vector can tell them apart; any test for one is a test for the other, so only one representative is kept. For an AND gate, an SA0 on any input is equivalent to an SA0 on the output.
    • Dominance collapsing — fault B dominates fault A if every test for A also detects B; the dominating fault can then be dropped from the target list.

    Collapsing typically reduces the fault set by 50–60%, which directly cuts ATPG runtime and pattern count without lowering real coverage. The number remaining after collapsing is the collapsed fault count, the honest denominator for a coverage figure.

    Equivalent fault collapsing on an AND gate AB AND Y A SA0 = B SA0 = Y SA0 equivalent: keep one representative A SA1, B SA1, Y SA1 stay as separate targets CourseTron · coursetron.com
    For an AND gate, an SA0 on any input is equivalent to an SA0 on the output, so one representative replaces the group in the fault list.

    Redundant and untestable faults

    Some faults can never be detected by any pattern because the faulty value is masked by logic — often caused by redundant hardware. These untestable or redundant faults are excluded from the coverage denominator (reported separately as ATPG-untestable) so they do not unfairly depress the fault-coverage number. A high redundant-fault count can also hint at wasteful or unintended logic in the netlist.

    Learn this hands-on

    Real projects and industry tool flows, with certification.

    Explore CourseTron Courses →

    How industry tools handle it

    In a production DFT flow, the stuck-at model is the default fault model fed to commercial ATPG engines such as Synopsys TestMAX (formerly TetraMAX), Siemens EDA Tessent, and Cadence Modus. The typical sequence is: insert scan chains during synthesis, build the fault list and collapse it, run ATPG to generate compact patterns using D-algorithm / PODEM-style path sensitization, fault-simulate to confirm coverage, then write the patterns out in STIL or WGL format for the ATE. Engineers read the tool's summary report for test coverage (detected / detectable) and fault coverage (detected / all), and iterate — adding test points or fixing uncontrollable nets — until coverage targets are met. The same patterns are later compressed with on-chip EDT/scan-compression logic to keep tester time and data volume affordable.

    Stuck-at flow in a production DFT toolchainInsert scanchainsBuild andcollapse faultsRun ATPG(PODEM-style)Fault-simulatecoverageWrite STIL orWGL for ATE Iterate with test points or fixes to uncontrollable nets until coverage targets are met. CourseTron · coursetron.com
    The typical flow: insert scan, build and collapse the fault list, run ATPG, fault-simulate, then write patterns for the ATE.

    stuck at fault — Interview FAQ

    What is the difference between fault coverage and test coverage?

    Fault coverage is detected faults divided by the total fault count, including undetectable ones. Test coverage is detected faults divided by the number of detectable (testable) faults, excluding proven-untestable and redundant faults. Test coverage is the figure engineers optimise because it reflects what is physically achievable on that netlist.

    Why do we use the single stuck-at model if real defects are not single stuck-at?

    Because it is finite, technology-independent, and empirically effective: test sets with high single stuck-at coverage also catch a large share of multiple, bridging, and open defects as a by-product. It is a practical proxy, deliberately simpler than the physics, that keeps ATPG tractable while still correlating with low field defect rates.

    What are the two conditions to detect a stuck-at fault?

    First, activation (controllability): force the faulty line to the value opposite the stuck value, so good and faulty circuits differ at that line. Second, propagation (observability): create a sensitized path that carries the difference to a primary output or scan cell, holding every side input at its non-controlling value. Both must hold in the same vector.

    What is fault collapsing and why is it done?

    Fault collapsing removes logically redundant faults using equivalence and dominance relations, keeping one representative per group. It shrinks the fault list by roughly half, cutting ATPG runtime and pattern volume while leaving true coverage unchanged.

    Related: boundary scan and JTAG · the VLSI Glossary · all courses.

    Advertisement