Professional Documents
Culture Documents
VLSI Testing Solutions BUSHNELL
VLSI Testing Solutions BUSHNELL
X(t + 1) = Ts X(t)
⎡ ⎤ ⎡ ⎤⎡ ⎤
X0 (t + 1) 0 1 0 0 0 0 0 0 X0 (t)
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎢ X1 (t + 1) ⎥ ⎢ 0 0 1 0 0 0 0 0 ⎥⎢ X1 (t) ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎢ X2 (t + 1) ⎥ ⎢ 0 0 0 1 0 0 0 0 ⎥⎢ X2 (t) ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎢ X3 (t + 1) ⎥ ⎢ 0 0 0 0 1 0 0 0 ⎥⎢ X3 (t) ⎥
⎢ ⎥=⎢ ⎥⎢ ⎥
⎢ X4 (t + 1) ⎥ ⎢ 0 0 0 0 0 1 0 0 ⎥⎢ X4 (t) ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎢ X5 (t + 1) ⎥ ⎢ 0 0 0 0 0 0 1 0 ⎥⎢ X5 (t) ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎣ X6 (t + 1) ⎦ ⎣ 0 0 0 0 0 0 0 1 ⎦⎣ X6 (t) ⎦
X7 (t + 1) 1 0 1 0 0 0 0 1 X7 (t)
4
K. D. Wagner, C. K. Chin, and E. J. McCluckey, “Pseudorandom Testing,” IEEE Trans. on
Computers, vol. C-36, no. 3, pp. 332-343, March 1987.
RESET
CK
A standard LFSR
f (x) = x3 + x + 1
DQ DQ DQ
X X X
x0 0 x1 1 x2 2
RESET
CK
Modular LFSR.
⎡ ⎤ ⎡ ⎤⎡ ⎤
X0 0 0 1 X0
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎣ X1 ⎦ (t + 1) = ⎣ 1 0 1 ⎦ ⎣ X1 ⎦ (t)
X2 0 1 0 X2
Pattern # X7 X6 X5 X4 X3 X2 X1 X0
1. 0 0 0 0 0 0 0 1
2. 1 0 0 0 0 0 0 0
3. 1 1 0 0 0 0 0 0
4. 1 1 1 0 0 0 0 0
5. 1 1 1 1 0 0 0 0
6. 1 1 1 1 1 0 0 0
7. 1 1 1 1 1 1 0 0
8. 0 1 1 1 1 1 1 0
Pattern # X0 X1 X2
1. 0 0 1
2. 1 1 0
3. 0 1 1
4. 1 1 1
5. 1 0 1
6. 1 0 0
7. 0 1 0
8. 0 0 1
15.6 MISRs
Equations representing MISR:
⎡ ⎤ ⎡ ⎤⎡ ⎤ ⎡ ⎤
X0 0 1 0 0 0 0 0 0 X0 0
⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢ X1 ⎥ ⎢ 0 0 1 0 0 0 0 0 ⎥⎢ X1 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢ X2 ⎥ ⎢ 0 0 0 1 0 0 0 0 ⎥⎢ X2 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢ X3 ⎥ ⎢ 0 0 0 0 1 0 0 0 ⎥⎢ X3 ⎥ ⎢ 0 ⎥
⎢ ⎥ (t + 1) = ⎢ ⎥⎢ ⎥ (t) + ⎢ ⎥
⎢ X4 ⎥ ⎢ 0 0 0 0 0 1 0 0 ⎥⎢ X4 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
⎢ X5 ⎥ ⎢ 0 0 0 0 0 0 1 0 ⎥⎢ X5 ⎥ ⎢ 0 ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥
⎣ X6 ⎦ ⎣ 0 0 0 0 0 0 0 1 ⎦⎣ X6 ⎦ ⎣ B ⎦
X7 1 0 0 1 0 1 1 0 X7 A
X(t + 1) = TT
s X(t) + I(t)
Transpose: XT (t + 1) = XT (t)TT
s
X2 (t + 1) = TT
s X2 (t)
A DQ DQ DQ DQ DQ DQ DQ DQ
x
B
RESET
CK
Taps: h3 , h5 , h6
The modular LFSR gives the true remainder of the
output sequence
A,B
primitive polynomial
X(t + 1) = Ts X(t)
XT (t + 1) = (Ts X(t))T
= XT (t)TT
s
= XT (t)TM
The standard signature is a different state table realization of the modular MISR
signature.
The patterns generated by the circuit of Figure 15.16(b) (page 510 of the book)
are given below:
B. Replace X4 with the 1/2 bit; this gets vectors 2, 3 and 5 of the test set.
Required test vectors are shown in bold in the above table. Notice that none of
the 14 , 18 or 16
1
bits are helpful here.
x4 + x + 1
1/2
DQ DQ DQ DQ
X X X X
x3 3 x2 2 x1 1 x0 0
RESET
CK 1/4
11/32
1/8
1/16
DQ DQ DQ DQ
150 X 3 150 X 2 150 X 1 150 X 0
RESET
CK
The four flip-flop LFSR with non-primitive polynomial 1 + x4 and its patterns,
starting from the initial pattern 0001, are shown next. Its period is 4.
RESET
CK
A non−primitive LFSR.
LFSR Pattern # X3 X2 X1 X0
1. 0 0 0 1
2. 1 0 0 0
3. 0 1 0 0
4. 0 0 1 0
5. 0 0 0 1
The best system would be an LFSR with a primitive polynomial f (x) = 1+x+x4 ,
which would have a period of 15. For this example the CA is better than the non-
primitive LFSR, because the CA has a longer period and is more random.
DQ DQ DQ
X X X
2 1 0
RESET
CK
X2 X1 X0
gate circuit leading to the output X1 converts 010 pattern to 000 without affecting
all other patterns.
After 8 clocks:
Both the transition count (TC) and LFSR detect the multiple fault.
DQ DQ DQ 1 1 0 0 1 0 1 1 1
x2 x 1 x 0 0 1 0 1 1 1 0
x2 0 1 0 1 1 1 0 0
RESET
CK
Standard LFSR.
The next figure gives an augmented LFSR and the patterns it produces. This
definitely uses less hardware than a counter, which needs more complex gates. It gets
comparatively simpler as the counter width increases. A counter and its patterns
are shown below.
D D D
Q Q Q
0 1 2
RESET
CK
Counter.
Q0 0 1 0 1 0 1 0 1 0
Q1 0 0 1 1 0 0 1 1 0
Q2 0 0 0 0 1 1 1 1 0
Z = Y (B ⊕ C) ⊕ B
For output Y , the fault effect is XORed four times, while the fault effect is
XORed into Z three times, during the first 7 clock periods. Repeating the first
LFSR pattern during the 8th clock period XORs the fault effect in one additional
time frame on each output.
The error vector is set to 1 on an output when it differs from a good machine.
Here are the other error vectors:
Even with the repeated pattern, the cumulative # of 1’s in the error vector
remains odd. This is why aliasing does not occur. If the total # of 1’s in the error
vector becomes even, then aliasing might occur.
D
MR
Q
0 M B
U
Bpi 1 X
D MS
Q
0 M C
U
1 X
(b)
⎡ ⎤ ⎡ ⎤⎡ ⎤
a 0 1 0 a
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎣ b ⎦ (t + 1) = ⎣ 0 0 1 ⎦ ⎣ b ⎦ (t)
c 1 0 1 c
(c) The table below contains the fault-free outputs of the circuit and the state of
the MISR after every clock. The initial state of the flip-flops is assumed to
be Q1 Q2 Q3 = 000. The output equations used for computing the fault-free
outputs in the table are:
Y = (A ⊕ C) + AB and Z = B + C ⊕ Y
GOOD = Q1 Q2 Q3
(d) In the case of the fault q s-a-0, the faulty outputs are:
Yf = Y and Zf = Y
The table below contains the faulty outputs of the circuit and the state of the
LFSR after every clock. The initial state of the flip-flops is assumed to be
Q1 Q2 Q3 = 000 as before.
A B C Y Z LFSR state
Q1 Q2 Q3
0 0 0 0 0 0 0 0
0 0 1 1 1 0 1 1
0 1 0 0 0 0 0 1
0 1 1 1 1 1 1 1
1 0 0 1 1 0 0 0
1 0 1 0 0 0 0 0
1 1 0 1 1 0 1 1
1 1 1 1 1 0 1 0
Thus, the final signature of the faulty circuit will be “0 1 0”, and the test
hardware does not alias.
LFSR
See
detailed Q1 Q2 Q3
figure Phase shifter
R1 1 R2 R3
input 1 0
1 1
A 1 X SRL D 1 U AA
TC SRL SRL
CLK 0 1
SOUT
0 1
input 2 B Y E V BB
SRL 0 SRL 0 SRL
0 1 1 1
0 1
0 0 0
input 3 SRL C 0 Z SRL F W SRL CC
0 0
M1 M2 M3
MISR
R1
input1
(D)
RESET
TC
(Shift/test)
Q
RESET
CLK SOUT
SRL
LFSR
Char. polynomial:
3 MS
1+x+x
D Q D Q D Q
2 1 0
CLK X X X
Shift MR MR
RESET
Q Q Q
1 2 3
Phase shifter
R1 R2 R3
DQ DQ DQ DQ DQ DQ DQ DQ DQ DQ DQ DQ
x 11 x 10 x9 x8 x7 x6 x5 x4 x3 x2 x1 x0
CLK
RESET
MISR
-- This is vhdl code describing the STUMPS BIST system. The working
-- hardware is obtained from the Synopsys system. Run the Synopsys
-- design_analyzer, read in this vhdl file, and call for high optimization
-- and boundary optimization in order to obtain a good logic design.
--
library ieee;
use ieee.std_logic_1164.all;
entity stumps is
end stumps;
signal Q1 : std_logic;
signal Q2 : std_logic;
signal Q3 : std_logic;
signal D1 : std_logic;
signal D2 : std_logic;
signal D3 : std_logic;
signal U, V, W, X, Y, Z : std_logic;
begin -- stumps_arch
X <= (A xor C) or (A xor B);