Introduction
This is the blog for VT ECE5505 digital system test and verification course summary, it is currently working as a draft and not finalized.
test0
graph TD
subgraph "Fault Relations Quadrant Graph"
%% Define the axes
style xAxis stroke-width:2px,stroke:#333
style yAxis stroke-width:2px,stroke:#333
xAxis["|
|
|
|
|
|
Input Fault -->"]
yAxis["-- Output Fault --
|"]
%% Define quadrants
subgraph "Q2: Input s-a-1"
q2[" Input s-a-1
Independent or
Equivalent to
Output s-a-1"]
end
subgraph "Q1: Output s-a-1"
q1[" Output s-a-1
Dominates
Input s-a-0"]
end
subgraph "Q3: Input s-a-0"
q3[" Input s-a-0
Independent or
Equivalent to
Output s-a-0"]
end
subgraph "Q4: Output s-a-0"
q4[" Output s-a-0
Dominates
Input s-a-1"]
end
%% Position quadrants
q2 --> q1
q3 --> q4
%% Add origin label
origin["0"]
%% Style
style q1 fill:#f9f,stroke:#333,stroke-width:2px
style q2 fill:#bbf,stroke:#333,stroke-width:2px
style q3 fill:#bbf,stroke:#333,stroke-width:2px
style q4 fill:#f9f,stroke:#333,stroke-width:2px
style origin fill:#fff,stroke:#fff
endtest1
%%{init: {"quadrantChart": {"chartWidth": 550, "chartHeight": 550}, "themeVariables": {"quadrant1Fill": "#f0f1f5","quadrant2Fill": "#f0f1f5","quadrant3Fill": "#f0f1f5","quadrant4Fill": "#f0f1f5"} }}%%
quadrantChart
title Fault Relations for One Input, One Output
x-axis Input 0 --> Input 1
y-axis Output 0 --> Output 1
quadrant-1 "O dominates I"
quadrant-2 Input s-a-1 equivalent to Output s-a-1
quadrant-3 Input s-a-0 equivalent to Output s-a-0
quadrant-4 Output s-a-0 dominates Input s-a-1Simulations
| Fault Simulation | Logic Sim | |
| Definition | given a circuit, fault model, a test set, determine fault coverage | |
| determine test set quality ATPG, a vector | ||
| 1️⃣Serial 2️⃣Parallel-fault 3️⃣Parallel-pattern 4️⃣Deductive Fault Simulation 5️⃣Concurrent 6️⃣Critical Path Tracing 7️⃣Statistical 8️⃣Differential 9️⃣Combined | STAFAN | |
| Non-statistical fault coverage estimation | Indirect Implication | |
Fault simulation: given a circuit, a fault model and a test set, determine the fault coverage(measure of quality) of the test set.
Faults Type
| Untestable fault | |||
| Potentially detectable fault | \(0/x\),\(1/x\) | ||
| Init fault | |||
Dominance&Equivalence
| Equivalence | Dominance | ||
| Definition | \(f_{\alpha}\equiv f_{\beta}\) \(\color{red}{f_{\alpha}\rightarrow f_{\beta}\rightarrow f_{\gamma}}\) | Under \(T_{\alpha}\supseteq T_{\beta}\),in \(T_{\beta}\) \(f_{\alpha}\equiv f_{\beta}\) | |
| Collapsing | \(2n\rightarrow n+1\) | \(n+1\rightarrow n\) | |
| test set | same | \(T_{\alpha}\supseteq T_{\beta}\) | |
| Fanout | transitivity not work | 1️⃣FOFree comb ckt: Test Set detect PI SA also detect all SA 2️⃣General comb ckt: test set detect PI&checkpint SA also detect all SA 3️⃣Irredundant comb ckt: a vec detects all single SA detects all testable multiple SA |
Deductive Fault Simulation
Deductive fault simulation1, propagate fault sets across combinatinal circuits. Lecture #6, section 10.
✴️write down sets operation equations, then write down the fault list, always check the stems.
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '60px' }}}%%
graph LR
A[Start] --> A1[Annotate Stems]
A1 --> B[Initialize fault lists for primary inputs]
B --> C[Get next gate in topological order]
C --> D[Compute gate output value]
D --> E[Include gate's own stuck-at faults]
E --> F[Propagate faults from inputs to gate output]
F --> G[Update fault list for gate's output]
G --> H{More gates to process?}
H -- Yes --> C
H -- No --> I[Collect faults at primary outputs]
I --> J[End]
| Name | Input | Output | \(L_{c}\) fault list |
|---|---|---|---|
| OR | \(a=0, b=0\) | \(c=0\) | \(\{L_{a}\cup L_{b}\}\cup \color{red}{\underset{\text{OR}}{c/1}}\quad\color{green}{\underset{\text{NOR}}{c/0}}\) |
| OR | \(a=0, b=1\) | \(c=1\) | \(\{L_{b}- L_{a}\}\cup \color{red}{\underset{\text{OR}}{c/0}}\quad\color{green}{\underset{\text{NOR}}{c/1}}\) |
| OR | \(a=1, b=0\) | \(c=1\) | \(\{L_{a}- L_{b}\}\cup \color{red}{\underset{\text{OR}}{c/0}}\quad\color{green}{\underset{\text{NOR}}{c/1}}\) |
| OR | \(a=1, b=1\) | \(c=1\) | \(\{L_{a}\cap L_{b}\}\cup \color{red}{\underset{\text{OR}}{c/0}}\quad\color{green}{\underset{\text{NOR}}{c/1}}\) |
| Name | Input | Output | \(L_{c}\) fault list |
|---|---|---|---|
| AND | \(a=0, b=0\) | \(c=0\) | \(\{L_{a}\cap L_{b}\}\cup \color{red}{\underset{\text{AND}}{c/1}}\quad\color{green}{\underset{\text{NAND}}{c/0}}\) |
| AND | \(a=0, b=1\) | \(c=0\) | \(\{L_{a}- L_{b}\}\cup \color{red}{\underset{\text{AND}}{c/1}}\quad\color{green}{\underset{\text{NAND}}{c/0}}\) |
| AND | \(a=1, b=0\) | \(c=0\) | \(\{L_{b}- L_{a}\}\cup \color{red}{\underset{\text{AND}}{c/1}}\quad\color{green}{\underset{\text{NAND}}{c/0}}\) |
| AND | \(a=1, b=1\) | \(c=1\) | \(\{L_{a}\cup L_{b}\}\cup \color{red}{\underset{\text{AND}}{c/0}}\quad\color{green}{\underset{\text{NAND}}{c/1}}\) |
| Name | Stem | Branch | \(L_{c}\) fault list |
| Fanout | \(a=0\) | \(b=0, c=0\) | \(L_{c}=L_{a}\cup c/1\) \(L_{b}=L_{a}\cup b/1\) |
| Fanout | \(a=1\) | \(b=1, c=1\) | \(L_{c}=L_{a}\cup c/0\) \(L_{b}=L_{a}\cup b/0\) |
| Name | Input | Output | \(L_{c}\) fault list |
| NOT | \(a=0\) | \(c=1\) | \(L_{a}\cup c/0\) |
| NOT | \(a=1\) | \(c=0\) | \(L_{a}\cup c/1\) |
| Name | Input | Output | \(L_{c}\) fault list |
|---|---|---|---|
| XOR | \(a=0, b=0\) | \(c=0\) | \(\{L_{a}- L_{b}\}\cup \{L_{b}- L_{a}\}\cup \color{red}{c/1}\) |
| XOR | \(a=0, b=1\) | \(c=1\) | \(\{L_{a}- L_{b}\}\cup \{L_{b}- L_{a}\}\cup \color{red}{c/0}\) |
| XOR | \(a=1, b=0\) | \(c=1\) | \(\{L_{a}- L_{b}\}\cup \{L_{b}- L_{a}\}\cup \color{red}{c/0}\) |
| XOR | \(a=1, b=1\) | \(c=0\) | \(\{L_{a}- L_{b}\}\cup \{L_{b}- L_{a}\}\cup \color{red}{c/1}\) |
Critical Path Tracing&Star Algorithm
| Critical Path Tracing | Star Algorithm | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| definition | sensitive: \(\color{red}{a\rightarrow z}\),\(\color{red}{\overline{a}\rightarrow\overline{z}}\) critial: fault \(\color{red}{v/\overline{v}}\) detected by vec \(t\) \(\color{red}{O_{critical}\rightarrow I_{sensitive}\rightarrow I_{critical}}\) | sufficient: Input that can set the output value Unmarked \(\overline{V}\)Untestable | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| stem | stem analysis: for all fanouts, for each fanout, if there exists a sensitive path that connect to the reconvergence gate(no need to be sensitive input), it so cannot traceback to stem. | can track back to stem | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| AND, NAND | \2
ATPGAutomatic test pattern generation Boolean DifferenceExpensive for large circuits, regarding time and space. D-algorithm and PODEM are used since one vector is enough for testing. \begin{align}
\underset{\color{green}{\text{Boolean Diff}}}{B_{\alpha/x}}&= \underset{\color{red}{\text{fault}\:\alpha\: \text{st}\: x}}{\alpha\left ( x \right )} \cdot \underset{\color{blue}{\text{PO }z\text{ Val Diff}}}{\frac{\mathrm{d} f_{z}\left(\alpha\right)}{\mathrm{d} \alpha\left ( x \right )}}\\
&=\alpha\left(x\right) \cdot \left(f_{z}\left( \alpha=0 \right)\right)\oplus \left(f_{z}\left( \alpha=1 \right)\right)\\
&= \alpha\left(x\right) \cdot \left[ f_{z}\left( \alpha=0 \right)\cdot \overline{ f_{z}\left( a=1 \right)}+\overline{f_{z}\left( a=0 \right)}\cdot f_{z}\left( a=1 \right)\right]
\end{align}\begin{aligned}
\underbrace{B_{\alpha/x}}_{\substack{\color{green}{\text{Boolean Diff}\\}}} &=
\underbrace{\alpha(x)}_{\substack{\color{red}{\text{Fault }\alpha\\\text{ st }x}}} \cdot
\underbrace{\frac{\mathrm{d}f_z\Big[\alpha(x)\Big]}{\mathrm{d}\alpha(x)}}_{\substack{\color{blue}{\text{PO }z \text{ Val Diff}}}} \\[2ex]
&= \underbrace{\alpha(x)}_{\substack{\color{red}{\text{Excite fault}}}} \cdot \Big[\underbrace{f_z(\alpha=0) \oplus f_z(\alpha=1)}_{\color{blue}{\text{XOR of output values}}}\Big] \\[2ex]
&= \underbrace{\alpha(x)}_{\substack{\color{red}{\text{Excite fault}}}} \cdot \Big[\underbrace{f_z(\alpha=0) \cdot \overline{f_z(\alpha=1)} + \overline{f_z(\alpha=0)} \cdot f_z(\alpha=1)}_{\color{blue}{\text{Expanded XOR operation: sensitize difference for propagation}}}\Big]
\end{aligned}\begin{align}
\frac{d x}{da}&= \left(x\left( a=0 \right)\right)\oplus \left(x\left( a=1 \right)\right)\\
&= x\left( a=0 \right)\cdot \overline{ x\left( a=1 \right)}+\overline{x\left( a=0 \right)}\cdot x\left( a=1 \right)
\end{align}Boolean Algebra | \((A+B)+C=A+(B+C)\) |
D Algorithm
Init with X, Justify recursively to PI and Propagate by recursively backtrack
Leave a Reply