Academia.eduAcademia.edu

Efficient VLSI fault simulation

1993, Computers & Mathematics with Applications

16 J.H. REIF to the inputs and so can be unraveled to form an acyclic network. (If required, the circuit can be made into a tree, by further cutting lines so all gates have fan-out _< 1.) The integrated circuit is thus modeled as an acyclic, Boolean circuit C. A Stuck-At (S-A) fault is a gate which is permanently set to a Boolean value b. In particular, a S-A-O (S-A-I) fault is where the gate is set to b = 0 (b = 1), respectively. The S-A is the most common fault type tested for, and of the most importance for currently used technologies such as nMOS. We will consider only the S-A fault type in this paper. Test generation is the problem of finding a set of test patterns, and (S-A) fault simulation is the problem of detecting those S-A faults which a given test pattern covers. Fault coverage is the problem of finding a set of test patterns which cover all possible S-A faults of the circuit. These problems--as our extensive references will indicate have been very thoroughly and extensively studied since the early 1960s up to the current time. In spite of considerable progress in the use of heuristic algorithms, many fundamental problems still remain, and become more difficult as the circuit size n of current VLSI continues to very quickly grow. 1.3. Previous Work in Test Generation In theory, finding a test vector which detects a given fault is NP complete [1]. S-A fault test generation is done in practice by a number of known heuristic methods including path sensitization [2-5], and the D-algorithm [6,7]. Goldberg & Leiberherr [8] have an ingenious algorithm for test pattern generation in the special case that the given Boolean circuit is a tree; in this case they reduce test pattern generation to a simple parity computation which can be done in linear time. Hence, their method for test pattern generation requires a total of O(n 2) time to generate test patterns for the 2n possible S-A faults. Another increasingly popular, and practically very efficient method for test generation is to simply generate a random set of test inputs using an efficient pseudorandom number generator. This was first suggested by Schnurmann etal. [9]. Various authors [9-14] have developed analytic methods for testing the effectiveness of random testing. In many cases, they show that a small number of random test patterns cover almost all 2n possible S-A faults, whereas the previously sighted deterministic methods may require a distinct test vector for each possible S-A fault. A large number of sufficiently random test patterns can be very easily generated by a feedback shift register circuit [15-17]. The response of the circuit tested can then be compressed by the signature methods of Carter [18,19]. I.$. Previous Work in Fault Simulation This paper is concerned with developing an efficient method for S-A fault simulation, i.e., to determine exactly all S-A faults which are covered by a given test pattern. All previously known methods [3,4,6,20-30] for S-A fault simulation of a general Boolean circuit of size n require cn ~ time for some constant c _> 1. This quadratic time bound is already very costly for moderate size LSI since if n >__104, then at least n 2 - 1010 steps required by these previous methods seems unfeasible even on the fastest known sequential machine. Recently, Abramovici etal. [30] give a linear time sequential algorithm for fault simulation of Boolean circuit trees. 1.5. Our Results In this paper, we restrict our attention primarily to the case where C is a circuit tree, i.e., it has fan-out 1. (However, in the last section, we describe how to extend our techniques to circuits with fan-out > 1.) We describe a method for constructing a circuit FS(C) (for "Fault Simulation") which simultaneously determines all detectable S-A faults for every gate of the circuit tree C. The circuit FS(C) has in the worst case _< ?n gates, (but in many cases, where C does not have a majority of v gates, FS(C) has only 6n gates). The VLSI area of FS(C) is only a small constant factor more than the VLSI area of C. The sequential execution time of our algorithm is just that used to evaluate FS(C), which is at most _< 7n steps. Even in applications such as VLSI with n = 105 gates, sequential execution of our algorithm takes only a fraction of a second on conventional machines. Furthermore, our algorithm is inherently parallel, since all that is required is evMuation Efficient VLSI fault dmulation 17 of the circuit FS(C). The parallel time for evaluation of C is its depth which is _< 3(d + 1), if C has depth d. The advantage of our method over that of Abramovici et al. [30] is that we explicitly construct a Boolean circuit for fault simulation, whereas theirs is a sequential method. Our method is also significantly different. The approach we use to solve the S-A fault simulation problem is to compute the Boolean differences (the mathematical theory of the Boolean difference is discussed in [31-33]) of the circuit output with respect to values computed by the circuit at each of its gates. This approach is discussed in [26,28,34-36], but was previously considered inefficient because of the apparently large amount of algebraic manipulation required. Baur and Strassen [37] gave an O(n) time straight line algorithm for all the partial derivatives of a polynomial over an infinite field computed by a straight line program of depth n, and Jerrum [38] gave a more combinatorial proof of this result. We use related techniques for the circuit construction of the Boolean differences over the field GF(2), to solve the S-A fault simulation problem. 1.6. A VLSI Chip for Fault Simulation and Coverage We show that if the original Boolean circuit tree C has VLSI area A, then the VLSI area required for our on-fault simulation circuits FS(C) is only a small constant factor more than A. (The constant factor depends on the VLSI technology used.) Note that because of the simplicity and locality properties of our rules for generating C' from C, this construction can easily be done automatically by known VLSI hardware designed layout tools (for example, those of Lieberherr et al. [39,40]) without any participation by the original designer of C. Our suggestion for the practical utilization of our results is as follows: Given an acyclic Boolean VLSI circuit C, we would construct "Fault Coverage" VLSI chip FC(C) which contains both our fault simulator FS(C) as well as a feedback shift register for generating pseudorandom test inputs. We do not need to output the S-A faults detected by FS(C) for each test pattern. Instead we keep two Boolean counters (initially 0) for each gate v of C, which indicates whether a S-A-0 or a S-A-1 fault at v has been covered by a previous test input. Given a new test input vector these counters can easily be updated by a single Boolean operation at the appropriate gate of FS(C). The new test pattern is output only if it covers at least one S-A fault not previously covered. We can then very quickly output from FC(C) a sequence of nonredundant test vectors until these test vectors cover all S-A faults. If it happens that not all S-A faults are covered after sampling a given number of psuedorandom test vectors, then FC(C) would indicate that C must be redesigned appropriately. However, as the above reference on the analysis of random testing indicates, a small number of random test vectors usually suffice to cover almost all S-A faults. 1.7. Fault Simulation of Circuits with Feedback Lines We generalize our results to a Boolean circuit S with feedback lines (i.e., S may have cycles). Suppose S has n gates and parallel computation time d. We can unravel S into an acyclic Boolean circuit tree C(S) with n(d + 1) gates and depth d. Thus, we can apply our previously described S-A fault simulation algorithm to C(S), yielding a fault simulation circuit FS(C(S)) of 7 n ( d + 1) gates and depth 3(d + 1). Suppose furthermore, S has VLSI area A using d layers. Then we can avoid actual construction of C(S) by repeatedly recomputing C when required. This idea yields a VLSI circuit (with feedback lines) for fault simulation with O(n) gates, O(A) area, O(t) degrees, and parallel time bound d 2. S is reversible if it can be made to run its computation both forward in time and in reverse (i.e., it can compute in constant time both its immediately previous state as well as its immediate suceeding state). Many common sequential circuits are naturally reversible in this sense, for example the Cooley-Tukey F F T circuit, and other convolution circuits, the Benes switching circuit, Batcher's sorting network, and the DES cryptographic standard. If S is reversible, we show how to construct a fault simulation circuit for detecting all S-A faults (with feedback lines) which has only small constant factors, more size, area, layers and parallel computation time than that of the original circuit S. 18 J.H. RglF 1.8. Organization of the Paper This paper is organized as follows. In Section 2 we formally define a Boolean circuit and the Boolean differences. In Section 3, we give our circuit construction for computing the Boolean differences and solving the S-A fault simulation problem for Boolean circuit trees. In Section 4, we prove the correctness of our Boolean differences circuit. In Section 5, we describe how we may extend these techniques to acyclic circuits with fan-out > 1. 2. P R E L I M I N A R Y D E F I N I T I O N S 2.1. The Boolean Difference Let f ( ~ ) be a Boolean function with indeterminates ~ = ( z l , . . . , Zr~). The Boolean difference of f ( ~ ) with respect to xi is df(~) - f ( x l , . . - , xi-1, O, x i , . . . , Xn) (~ f ( x l , - - - , xi-1, 1, X i + l , . . . , x , ) . dxi df(~) (That is, ~ is the exclusive of f ( ~ ) with xi set to 0, and of f ( ~ ) with xi set to 1.) We say f ( ~ ) is sensitive to xi if the value of f changes, depending on whether z~ is 0 or 1. Thus, df(~) _ 1 if and only if f(ff) is sensitive to z~. dxi 2.2. Boolean Circuits A Boolean circuit C is a triple (V, v0, E, L, ~, OP) where (i) V is a set of n gates (or nodes) with distinguished root Vo E V; (ii) E C_ V x V are directed edges which are assumed to contain no cycles; (iii) L is a vertex labeling from V to E U OP U {O, 1}; (iv) E = { x x , . . . , x,~} is the set of input variables; (v) OP = {-~, A, V, (~} are the usual Boolean operators. The fan-in (fan-out) of each v E V is the number of edges entering (departing from) v. For simplicity in our construction, we assume the maximum fan-in of any v E V is not more than 2. If L(v) E E U {0, 1}, then v is an input gate, and we require that v have in degree 0. We assume no two input gates are labelled with the same input variable. C is a tree if all its gates have fan-out at most 1. The depth d of circuit C is the length of the largest path in C. Since C is an acyclic digraph, C has a topological ordering < which is a total ordering such that V(u, v) E E, v < u. A topological ordering can be computed in linear sequential time on a unit cost RAM using a depth first search [41]. If C is a tree, then any postordering is a topological ordering. (See Figure 1 for an example of a Boolean circuit. Note that its gates are indexed in a topological order.) For each v E V, let C~ be the Boolean circuit identical to C except with root v. Given any input vector ~, let C~(~) be the Boolean function computed from gate v. Let C(ff) = C~o(ff) be the Boolean function computed by the circuit C from root v0. Note that C(~) can be sequentially evaluated in n steps using a traversal in reverse topological ordering of C. Alternately, C(~) can be evaluated in parallel in time d using n processors, where d is the depth of C. It will be frequently useful to modify the circuit C so that it computes a given Boolean function f(37) at a gate v E V rather than C~(~). This substitution operation C[v/f(~)] is formally defined as follows: (i) Let F be a Boolean circuit such that F ( y ) = f ( y ) ; (ii) Let (~ = C[v/f(y)] be the Boolean circuit derived by (a) taking the union of C and F, (b) deleting all edges of C entering v, and (c) merging the root of F with v, so the label of v is now the label of the root of F. Observe that Cv(x, Y) = f(37) as required. As a simple example, the substitution C = C[v/b], where b E {0, 1}, is the circuit derived from C by deleting all edges entering gate v and resetting the label of v to be b. If y is a variable, C[v/y] is similarly constructed, except the label of v is set to y. See Figure 2 for a simple example of the substitution operation. Efficient VLSI fault simulation 19 v0( Vl ( ^ ) v41 v 3 (x 2 ~ v2 v5 Figure 1. A Boolean circuittree C computing C(Xl,X2,x.~) -- (xl ^ x2)v-~x3. v01 v4 v1( ^ ) v2 v 3 fx2" ~ v5 Figure 2. Boolean circuit C = C[vs/l] derived from the circuit C of Figure 1 by introduction of a S-A-1 fault at gate us, so C (xl, x2, x3) = ((xl ^ x2) v -~1) = xl Ax2. ~.3. S-A Faults Let C be a Boolean circuit. Fix some gate v and Boolean value b E {0, i}. Observe t h a t by definition, C = C[v/b] is a circuit identical to C except it has a S-A- b fault at gate v. This S-A- b fau]t at gate v is detectable on input ~, if (~(~) ~ C(~). For each v E V, let z, be a new indeterminate variable distinct f r o m E. Observe t h a t - C[v/(z, ~ Cu)] is the circuit derived from C by substituting z~ ~ Cv in place of the subcirc u r Cu. T h e definition of Boolean difference implies dz, = z 20 J.H. RE1F if and only if (~(~,0)(~ C(~, 1) - 1 if and only if 0(~,z~) is sensitive to a change in z~. But clearly C(~, zu) is sensitive to a change in zv if and only if C(~) is sensitive to a change in C~ (~). Hence, we can let dC(~) denote dG'(~, z~) dz. dC(~) - - (~) = 1 if and only if C(~) is sensitive to a change in Cv (~). Hence, This definition implies dC~ (beC~(~))^ dC(~) dC~(~) 1 - if and only if b ¢ C~(:~) and C(~) is sensitive to a change in C~(~)) if and only if C(:~) ¢ C(~) where (~ - C[v/b]. Thus, we have dC( ) LEMMA 1. (b ~ C~(~)) A dC~(~-----)= 1 if and only if a S-A-b fault at gate v is detectable on input ~. 3. T H E C I R C U I T C O N S T R U C T I O N S 3.1. A Circuit for all Boolean Differences Fix a Boolean circuit tree C = (V, vo, E, L, E, OP). We construct a circuit C' = (V',v~, E', L', E, OP) from C as follows. C ~ contains C as a subcircuit. The vertex set V ~ of C ~ contains the original vertex set V, a distinguished new vertex s, and a distinguished new vertex v~ for each original vertex v E V, plus some additional nondistinguished new vertices. All these new vertices are distinct from those in V. The vertex s has constant label L(s) = 1 and an edge (s, v~) E E ~ from s to v~. The circuit construction now proceeds in topological order of C, using the rules R1-R5 given in Figure 3. The left portion of each rule is a subcircuit of C, and the right portion of each rule is the corresponding new subcircuit of C ~. See Figure 4 for an example of the construction using the rules R1-Rs. Note that the rules RI-R5 if applied to a gate v with fan-in 1, yields a new gate v~ with in degree 1 and label ~. In this case, the gate v ~ is to be collapsed into its unique predecessor. This operation is called a ~-gate collapse. (See Figure 5 for an example of a (~-gate collapse.) After applying ~-gate collapse wherever possible, the resulting circuit is denoted C ~. (See Figure 6.) It follows immediately from our construction that: LEMMA 2. C I has ~ 4n gates and depth <_ 3 d + 1, where n,d are the number of gates and depth of C, respectively. PROOF. The most costly rule in our construction is Rs, where 3 new gates are introduced and not collapsed. The additional depth is 2 for each original gate. This rule can he applied at most d times along each path, and a total of at most n times. | NOTE. In the case OP : {~,--,,A}, then, at most, 1 new Kate is introduced and not collapsed and the additional depth is only 1 for each original gate. In this case, the number of gates of C' is _ 2n, and the depth is <_ 2n + 1. (In practice, one can probably expect C' to have approximately 3n gates ff C has a significant proportion of gates that are not v-gates.) In Section 4, we prove: THEOREM I. For each gate v E V, C~,(:~) = dC(~) dC~(~) " Thus each gate v~ computes in C' the Boolean difference of C(ff) with respect to subcircuit Cv(~). (See Figures 6 and 8.) Efficient VLSI fault simulation 21 V t a2" Q V w. U I U > U U e W U W U I U W I W j w u U I W I W Figure 3. Rules for c o n s t r u c t i o n of C I f r o m C. 5.2. The VLSI Area of C' Let us assume a standard VLSI model such as described in [42]. A VLSI chip consists of a constant number of layers, where on each layer, the wires run along the edges of a square grid with unit length separation between grid points. Each grid point may contain a Boolean gate. Ullman [42] shows that any such VLSI chip with t layers can be redesigned to have only 2 layers, with only a factor of t 2 area increase. LEMMA 3. C' can be constructed within VLSI area ~_ 9A using _~ 2 (t -4- 1) layers, if C has a VLSI chip with area A using t layers. PROOF. We begin with the given VLSI chip for C and then add an additional t layers above the original ones. We also add an additional pair of horizontal and vertical grid lines between every previous pair of consecutive grid lines. In each application of the rules R1-P~, we place the new subcircuit associated with the distinguished new vertex v° on the l new layers immediately above the subcircuit associated with the original vertex v, using the new grid lines to do the required wiring and for placement of the additional circuit. It is easy to verify this wiring can be done within the required area. | J.H. R E w 22 ,% v4 , V1 v4 Figure 4. A circuit derived from circuit C of Figure 1 using rules R l - R s . .,. collapse " ,,, Q Figure 5. A collapse of gate v °, with fan-in 1 a n d label (~, into its predecessor u I. NOTE. The actual area increase for C' will depend somewhat on the VLSI technology utilized. However, it is clear that the area increase is a small constant, for the standard technologies such as nMOS and cMOS. 3.3. Construction of Our Fault Simulation Circuit Figure 7 gives a simple construction for building our fault simulation circuit FS(C) from the Boolean differences circuit C'. Note that thi~ construction is applied to each gate v E V, and results in 3n additional gates and an additional depth of 9. By Theorem 1, the resulting circuit Efficient VLSI fault simulation 23 | v0 vl~/ v, L~ v~ v~-~ v2 Figure 6. The circuit G' derived from circuit of Figure 4 after applying (]~-gate coltapscs. satisfies dC(~) and furthermore, FS(C)s.,.o(,)(~)= C~,(E) • C~,(E) = C.(~)• ddC(~) C.(~) - - " The following are then implied by Lemmas 1 and 2. V w V > S-A-1 (v) s - ~ - o (v) Figure 7. Construction d the fault simulation circuit FS(C) from C'. The gate S-A-b(v) indicates an S-A-b fault at sate v, for b E {0, I}. 24 J.H.R.mv vertex v computed value C~(~) Boolean difference C:,(~) = ~ S-A-1 fault S-A-O fault S-A-1 (v) S-A-O (v) =1 ^ =2 ^ =3 vl =1 ^ =2 =3 (-, (=1 ^ =2)) ^ =3 v2 =1 =2 A x 3 ( ' - , X l ) A =2 A x 3 X l A x2 A =3 v3 =1 A =3 =1 A ( - " = 3 ) A a:3 xj. ^ x2 A x3 V4 =2 "~X3 "~(Xl AX3) ('~(Xl A X2)) AX3 ( " ( = 1 AX2)) A'~X3 ,,~ =3 "~(=1 A=3) (-~(~i ^=2))^'~=3 (-,(=i A ~ ) ) ^=3 Figure 8. Boolean differences a n d S-A- b faults of circuit C given in Figure 1. THEOREM 2. Suppose we are given a Boolean circuit tree C with n gates, a depth of d, and VLSI area A using t layers. Then using the rules in Figures 3, 4 and 7, we can construct from C in linear time a Boolean circuit FS( C) consisting of< 7n gates and depth < 3(d+ 1), using VLSI area < 9A and 2 ( l + 1) layers. For each b G {0, 1}, gate v E V and input ~, FS(C)s.A_b(v)(~) = 1 (i.e., gate S-A-b(v) is evaluated to 1 by FS(C) on input ~) ff and only if a S-A-b fault in C at gate v is detectable on input ~. 3.4. Fault Simulation of VLS1 Circuits with Feedback We briefly describe here how our techniques for fault simulation can be extended to apply to some VLSI circuits S with feedback lines (i.e., S may have cycles). We note that S is input oblivious in the sense that the sequence of logical operations (but not necessarily the values computed by these operations) of its gates are independent of its given input ~. Let V be the set of gates of S. We assume the computation sequence of length d of S on input ~ can be modeled by a Boolean circuit tree C(S) of depth d such that the gates of C(S) are partitioned into disjoint levels Vo, V1,..., Vd. Intuitively, each level Vt corresponds to the logical operations executed at time t. More precisely, for each t = 0 , 1 , . . . ,d, we assume a 1-1 mapping rt from V to level Vt such that Vv G V, Cr,(v)(x) is the Boolean value computed at gate v by S at time t given an input vector :~. Thus, rt(v) evaluates to just the value computed by S at gate v of time t. We require that each edge entering a gate of level Vt depart only from a gate of level V~_1, and so the value of a gate at level Vt depends only on the values computed by gates at level Vt-1. We shall model faults in S simply by S-A-b faults in C(S). Suppose S has n gates. Then C(S) has n (d + 1) gates. A direct consequence of Theorem 2 is: COROLLARY 1. All S-A faults for S on input ~ can be determined by an acyclic Boolean circuit FS(C(S)) of___ 7 n ( d + 1) gates and depth < 3(d+ 1), and hence in < 7 n ( d + 1) sequential time. Note that the fault simulation circuit FS(C(S)) utilized just the values of gates at level Vt in reverse order t = d, d - 1 , . . . , 0. We can avoid construction of FS(C(S)) and instead construct a VLSI circuit with feedback lines which simulatively determines S-A faults of level Vt. To get the required values of the gates of level Vt we can simply reexecute S on the same input ~. Thus, (if we wish to avoid actually constructing FS(C(S)), we require by this method a total of d executions of S, each requiring parallel time d. Assuming S has VLSI area A using l layers, we get by this construction: COROLLARY 2. All S-A faults for S can be determined by a VLSI circuit (with feedback lines) of O(n) gates, O(A) area and O(t) layers, taking O(d 2) parallel time. We consider S to be reversible if after any execution of d parallel steps, a special reverse switch can be set so that on consecutive steps t = d + 1, d + 2 , . . . , 2d, the gates of S have the same value at time t as they previously did at time It - 2d - 11. As mentioned in the introduction, many switching, sorting and convolution circuits are both oblivious and reversible in this sense. Observe that if S is reversible, then S can compute the values of levels Vd, Va-1,. •., V0 in reverse order using d parallel steps. COROLLARY 3. If S is reversible, then all S-A faults can be determined by n VLSI circuit (with feedback lines) of O(n) gates, O(A) area, O(e) layers, and O(d) time. Efficient VLSIfault almulation 25 4. P R O O F OF T H E C O R R E C T N E S S OF O U R B O O L E A N D I F F E R E N C E S C I R C U I T In this section we prove Theorem 1. 4.1. Chain Rules for Boolean Differences We will use the following fundamental rules for manipulating Boolean differences. It can be easily proved from the definition of Boolean difference. PROPOSITION 1. (The Chain Rule) L<f(~,y) = fl(f~(x),Y), then df(~,y) dzi _ df~(f2(~),Y) A df2(~) df2 dzi The following propositions follow from the Chain Rule by use of elementary Boolean algebra identities and the definition of the Boolean difference. PROPOSITION 2. PROPOSITION 3. d(--,f(~)) dzi df(~) dxi d(ft(~) (B f2(x)) = dfl(~) ~ df2(~..~) dzi dzi dzi PROPOSITION 4. d(fl(~) ^ f,(~)) = f~(~) ^ df2(a) df~(~) ~h(~) df2(a) PROPOSITION 5. d(f~(~) V f2(,~)) = (_,f~(,~)) ^ df2(~) dry(a) af~(~) ^ df2(a) dzi ~ (B (-'f2(~)) A ~ (B dxi dzi 4.~. An Inductive Proof of Theorem 1 Fix a topological ordering < of the gates of circuit tree C. The proof of Theorem 1 will proceed by induction in this topological order < , beginning from the root gate v0. dC(~) = 1. Furthermore, For the basis of the induction, we observe that C~o(~) = C(~), so dC~o(~----~ the construction gives C~g(~) = 1, so we have C~g(~) = 1 dC(~) - dC~o(~)' as required. Now fix some gate u E V - {v0}. Let us make the inductive assumption that c ' , ( ~ ) = dC(~) dC~ ( ff) ' for all gates v E V strictly preceding u in the given topological order of C. Let (u, v) E E be the unique edge of C departing from gate u. By the induction hypothesis, c:,(~) = dC(,~) dC~(,~)" 26 J.H. P ~ w Define 1, C.(~), - 0,.(2), A.(~) = if L(v) E {",,(9}, if L(~) = V, if L(v) = A, where (u, v), (w, ~) e E are the edges entering gate v in C. By examining the rules Rx-Pqs, we observe that we have defined 0",(2) = 0:,(2) ^ ),.(2). We must now prove that dC(~) C.,(2) = dO.(9" Let us define H = C~[u/(zu (9 Cu)]. Recall by definition dCv(~___~)= dH(~, z.) = H(~, O) (9 H(~, 1) dC.(~) dz. gives the conditions where C.(~) (which is the subcircuit of C rooted at gate v) is sensitive to the value transmitted from gate u. LEMMA 4. dC.(~) A. (~) = dCu(2)" PROOF. This Lemma can he proved either by application of the Propositions 1-5, or directly by definition of the Boolean difference. We give here a complete direct proof. If L(v) = -% then C.(~) = --C.(~) and C.(2, z.) = --(zu (9 C.(~)) so H(~,0) (9 H(~, 1) = (-~C.(~)) (9 C.(x-')= 1 = A.(~), in this case. If L(v) = (9, then C.(~) = C.(~) (9 Cw(~) and H(2,zu) = (zu (9 Cu(~)) (9 C . ( ~ ) so H(~,0) (9 8(2, 1) = (C.(2) (9 C.(2)) (9 ((-~C.(~)) (9 C.(2)), = 1 - A,,(~), in this case. If L(v) - A, then Cv(2) - C.(2) A Cw(2) and H(2, zu) - (z. (9 C.(~)) A C w ( ~ so H(2,0) (9 H(2, 1) = (C.(~) A C,.(2)) (9 ((-,C.(~)) A C,,,(x-')), = c.(~) = ~,(~), in this case. If L(v) - V, then C~(2) - Cu(2) V Cw(2) and H(2, zu) - (zu (9 Cu(2)) V Cw(2) so H(2, 0) (9 H(2, 1) = (Cu(2) V Cw(2)) (9 ((-~Cu(2)) V C. (2)), = - c.(2) = A.(2), in this case. Thus, we have shown in each case dC,,(2) = 1-1(2, O) (9 H(2, 1) = Ae(~). dCu(2) | Efficient VLSI fault d m u l a t i o n 2T LEMMA 5. dC(~l) = 6,,,(2) A A, (~). dC~(2) PROOF. By the Chain Rule, dC(~) = ~d6'(~) ^ ~dO.(x-')= ~,(~) ^ ~.(~), _ _ dC,,(~) since by the induction hypothesis for v < u, dC(~ C',(2) = dCv(JY)' and by Lemrna 4, dC, (~) = A,,(~). dO,(2) | From Lemma 5, we immediately get dC(~) dC.(~) = C',(~) A A.(~) = C',(~), proving the induction step required for Theorem 1. 5. B O O L E A N D I F F E R E N C E S OF CIRCUITS W I T H F A N - O U T > 1 In this section, we describe how to extend our techniques to computing all the Boolean differences for a circuit C with fan-out > 1. Without loss of generality, we can assume C has fan-out _< 2 (since a transformation to fan-out < 2 requires only a size increase linear in the number of edges of C). We will fix C = (V, v0, E, L, E, OP) to be such a Boolean circuit. 5.1. Edge Sensitivity Let ~ be the circuit derived from C by replacing each edge (u, v) E E of C by a chain of two new edges (u, uv), (uv, v) where uv is a new (9 gate with fan-in 1 and fan-out 1 (see Figures 9 and 10). Note that e is logically equivalent to C since £uv(JY) - £~(JY) "- Cu(JY). Hence, by definition, d~.(~) dE[uv/(zuv~9eu,)] (~, zuv) d~(~) dz~ gives the conditions where C(~) is sensitive to the value computed across edge (u, v). (Observe dC(~) if u has fan-out > 1 in C.) that dgu¢(2---"~ d~(~Y) may differ from dCu(2) v0 vl C ) ) Figure 9. A Boolean circuit C computing C(ff) = (Zl A v-~) V -- z2. Note t h a t gate v4 has fan-out 2. J.H. REIF 28 v0 vI it V3Vl~ ~ v4vl v v3 Figure I0. The circuit£ derivedfrom C of Figure 9. 5.2. A Boolean Difference Circuit Construction for Fan-Out W e will construct our Boolean difference circuit C' as follows. C' will initiallycontain the circuit £. W e then apply in topological order of £ the rules RI-R5 of Figure 3 previously described in Section 3. W e also apply in this order a new rule Re, as given in Figure 11, to each gate u with fan-out 2. Let (u, vl), (u, v2) be the edges departing v. Before application of rule Re to gate u, since vl < u, we have already constructed a subcircuit of C' which computes dZ( ) / vl v2 \ ', - R6 U Figure 11. A rule Re for a gate u with departing edges (u,vl), ( u , ~ ) E E. Here vl' is the root o f a new s u b c i r c u i t / ~ computing "D(~) = ~ lde"', (~)j. The application of rule P~ to gate u requires that we recursively construct a subcircuit 7) that computes To complete the construction of C', we apply the (~-gate collapsing rule given in Figure 5 (see Figure 12). In the case there are many gates of fan-out 2, this constuction is obviously finite, but may be computationally inefficient (at least in comparison with our linear time construction in the case of fan-out 1), but it nevertheless is certainly much more efficient than the direct computation of Boolean differences by application of chain rules, which was the only previously known method. Efficient V L S I f a u l t s i m u l a t i o n 29 / I / v1 v3 F i g u r e 12. T h e B o o l e a n difference circuit C ' , w h i c h a t g a t e v4 c o m p u t e s CySt(:/) = dC(~) dc~, (~) = ( x l ^ " ( " (x2))) @ " ( z l ^ z2) ~ x l = "~ x l . T h e s u b s c r i p t / ) c o m p u t e s d [ dC( ) ] 5.3. Proof of our Boolean Difference Circuit with Fan-Out 2 We prove here the correctness of the Boolean difference circuit C' constructed in Section 5.2. THEOREM 3. For each gate v of C, = dC( ) PROOF BY INDUCTION. Fix a topological ordering < of the gates of C. As in Theorem 1, the proof of Theorem 3 will proceed by induction in this topological order <, beginning from the root gate v0. The basis of the induction is the same as in the proof of Theorem 1, where we have = 1 - dC( ) Now fix some gate u E V - {v0}. Let us make the inductive assumption that C~,(~) = dC(~) ' for all gates v E V strictly preceding u in the given topological order of C. Let (u, vl), (u, v2) E E be the edges of C departing from gate u. By the induction hypothesis, dC(~) C~l(ff)- dC,,(~)' for i - - 1,2. For i - 1, 2 define Av,(~)just as in the proof of Theorem 1. Av,(~) = 1, Cw(~Y), if L(vi) E {',,(9}, if L(vi) = V, "~Cw(~), if L(vi) = A, where (u, vi), (w, vi) E E are the edges entering gate vl in C. CA/4M 25:2-C J.H. RI~IF 30 By examining the rules R~-Re, we observe that where v(~) = d~..2(~) \d~.~,(~)}" We must now prove that C~,(~)-- dC(~) dCu(~)" For i = 1 , 2 let us define ~(') = ~,[u~/(z.~, (9 ~,)]. Recall by definition i -* gives the conditions where C~,(~) (which is the subcircuit of C rooted at gate vi) is sensitive to the value transmitted across the ith edge (u, vi) entering gate vi. LEMMA 6. For each i = 1,2, de.,(~) a ~ ' - dg.~,(~) " =~ PROOF. If L(vi) = -% then C~,(:~) = -~ C~(:~) and g( )(x, z,~,) = -~ (z~, (9 C~(g)) so £(i)(~,0 ) $ £(0(~, 1) = (-~C~(~)) (9 C.(~) = 1 = Av,(~), in this case. If L(vi) = (9, then Cv,(~) = Cu(:~) (9 Cw(~) and ~(0(:~, zuv,) = (zuv~ (9 C,,(~)) (9 C,.(~) so gC')(~,O) (9 gCO(~, 1) = (C~(~) (9 C~(g)) (9 ((--C~(~)) (9 C~(~)), = 1 = Av,(~), in this case. If L(vi) = A, Cv,(:~) = C.(:~) A Cw(~) and g(0(~, z,,v,) = (z,,v, (9 Ca(r)) A Cw(~) so c ( o ( g , o) (9 ~ ( o ( g , 1) = ( c . ( ~ ) ^ c ~ ( ~ ) ) (9 ((-~ c ~ ( ~ ) ) ^ c ~ (~)), = c ~ ( ~ ) = ~o,(~), in this case. If L(vi) = V, then C~,(ff) = Cu(ff)V Cw(ff) and £(i)(ff, z.v,) = (zuv, (9 Cu(~))V Cw(ff) so ~(,)(~. 0) (9 cc0(~. 1) = (c,(~) v = - c~(~) c~ (~)) (9 ((~ c~(~)) v c~(~)). = ~.,(~), in this case. Thus, we have shown in each case d~v,(:~) _ c(i)(:~,0) (9 C(i)(~, 1) = Av,(£) • de,~,(~) 1 Efficient VLSI fault dmulation 31 We will use a generalized chain rule for Boolean differences: PROPOSITION 6. //'f(:x)- fo(f1(:x),f2(:~)), then d/(~)d,, = [dY°(A . ~d_.. yy~(~)) l ( ~ )^ ld., - J ~ [[dY°(Yl(~)' Y"(~))dy~^ dY2(~) ld.,J (~ [ ( ~ 2 (d'f0('fi(x)"f2(x))~ d'fl Proposition 6 implies dC(~) d~(~) d~(~) ~ d (d£(~) ~.~,(~)) LEMMA 7. f o r i = 1,2. dCuv, (~) PROOF. By the Chain Rule and Lemma 6, since by the induction hypothesis for vi < u, C.': OZ) = d~'(,Z) dC.,(,~) Applying Lamina 7, we immediately get dC(~) d dgn (~) - (C~, (~) A )t,a (~)) (~ (C~, (~) A Zv, (~)) ~ ~ = (d£(~) ~,d~u,j, (~) ) ' c'.,(~), proving the induction step of Theorem 3. m REFERENCES 1. H. Fttjiwara and S. Toida, The complexity of fault detection problems for combinational logig circuits, IEEE Trans. Comput. C-31 (8), 555-560 (1982). 2. R.D. Eldred, Test routines based on symbolic logic statements, J. Ass. Compttt. Mack. 6 (1), 33--36 (1959). 3. D.B. Armstrong, On finding a nearly minimal set of fault detection tests for combinatorial nets, IEEE Trans. Electron. Comput.EC-15 (2), 63.-73 (1966). 4. H.Y. Chang, E.G. Manning and G. Metze, Fa,tlt Diagnosis of Digital Systems, Wiley Interacience, New York, (1970). 5. E.B. Eichelberger, Method of level sensitive testing a functional logic system, U.S. Patent 3761695, Sept. 25, 1973. 6. J.P. Roth, W.G. Bouricius and P.R. Schneider, Programmed algorithms to compute tests to detect and distinguish between failures in logic circuits, IEEE Trans. Electron. Comput. EC-16 (10), 567-580 (1967). 7. H. Fujiwara and T.S. Shimono, On the acceleration of test generation algorithms, IEEE Trans. Compst. C-32 (12), 1137-1143 (1983). 8. A.V. Goldberg and K.J. Lieberherr, Deterministic versus random pattern testability, Design Automation Comp. SCI. Lab., G.T.E. Labs., Walthaxn, MA (1985). 9. H.D. Schnurmann, E. Lindbloom and R.G. Carpenter, The weighted random test pattern generator, IEEE Trans. Comput. C-24,695-700 (1975). 10. J. Savin and P.H. Bondell, On random pattern test length, 1983 International Test Conference, pp. 95-106, (1983). II. J. Savin, G.S. Ditlow and P.H. Bondel], Random pattern testability, IEEE Trans. Comp~t. C-33 (I), 79-90 (1984). 32 J.H. REw 12. K.J. IAeberherr, Parameteri~d random testing, Dc*iln Astomation Comp. Sci. Lab., G.T.E. Labs., Waltham, MA, (1983). 13. G. Markowdty, Bounding signal probabllltes in combinational circuits, Technical Report, Dept. Comp. Sci., Univ. Maine, st Orono, 1984. 14. V.J. Lmq, Efficiency of random compact testing, IEEE Trans. Uomp*tt. O-2'? (6), 516-.525 (1978). 15. S.W. Gol0mb, Shift Re4ister Sequences, Holden-Day, San Francisco, CA, (1967). 16. Z. Barffiilai, D. Coppersmith and A.L. Rmenberg, Exhatmtion g-eneeation of bit patterns with &pplicntio~m to VLSI e~M-testing, IEEE Trans. Compst. C 4 2 (2), 190-194 (1983). i7. D.T. Tang, Logic test psttern generation using linear cycles, IEEE Tran,. Comp=t. 0 - 3 3 (9), 845-850 (1984). 18. J.L. Carter, The theory of signature testing for VLSI, IBM Wstmn R~earch Center, Yorktown Heights, NY, (1982). 19. W.C. Carter, Signature testing with guaranteed bounds for fault coverage, IEEE TeJt Comp., 75-82 (1982). 20. J.F. Poage, Derivation of optimum tests to detect fault- in combinational circuit-, In Mathematical Theory of A~tomation, Polytechnic Press, New York, (1963). 21. D.B. Armstrong, A deductive method for simulating faults in logic circuits, IEEE Trans. Compnt. C-21 (s), 404-471 (1972). 22. J.P. Roth, Diagno~s of automata failures: A calculus and s method, IBM J. Res. Develop. 10, 278-281 (1966). 23. E. Manning and H.Y. Chang, Functional technique for efficient digital fault dnndstion, IEEE Int. Gone. Digest 196 (1968). 24. H.Y.P. Chang, Comparison of parallel and deductive fault simulation, IEEE Trans. Comp~t. 0-23, 11321138 (1974). 25. M.A. Breuer, Functional partitioning and simulation of digital circuits, IEEE Trans. Compet. 0-19, 1038-1046 (1970). 26. A.D. Friedman and P.R. Menon, Fa=It Detection in Digital Cite=its, Prentice-Hall, Englewood Cliffs, N J, (1971). 27. E.G. Ulrich and T. Baker, Concurrent simulation of nearly identical digital networks, Computer 7 (4), 39-44 (1974). 28. E.I. Muelddoff and A.D. Savkar, LSI logic testing--An overview, IEEETC C-30, 1-17 (1981). 29. S.K. Jain and V.D. Agrawal, Stafan: An alternative to fault simulation, IEEE ~lst Design A*ttomation Conf., pp. 18-22, (1984). 30. M. Abramovici, P.R. Menon and D.T. Miller, Critical path tracing: An alternative to fault simulation, IEEE Desion end Test, 83--93, (February 1984). 31. A. Brown and H.W. Young, Algebraic logic network analysis, IBM Corp., Poughkeepsie, NY (NASA Contract NAS 12-689), IBM TR 0018 74, (1969). 32. A. Thayse and M. Davis, Boolean differential calculus and its application to switching theory, IEEE Trans. Comput. C-22, 409-420 (1973). 33. A. Thayse, Boolean C=Ic=l~s o/Di~crences, Monograph, Springer, Berlin, (1981). 34. E.I. Muelddorf, Theory of a switching calculus for the diagnosis of ninary logic, Elcktron. Rcchenanlagen 15,215-222 (1973). 35. E.F. Sellers, M.Y. Hsiao and L.W. Bearnson, Analyzing errors with the Boolean difference, IEEE Trans. Comp=t. 0-17,676--683 (1968). 36. C.T. Ku and G.M. Memon, The Boolean difference and multiple fanIt analysis, IEEE Trans. Compet. C-24, 691-695 (1975). 37. W. Baur and V. Strmmen, The complexity of partial derivations, Theoretical Computer Science 22,317-330 (1983). 38. V.M. Jerrum, personal communication, (1983). 39. K.J. Lieberherr, Standard hardware description language, Design Aetomation Comp. Sci. Lab., G.T.E. Labs., Waltham, MA, (1983). 40. S.M. German and K.J. Lieberherr, Zues: A language for expressing algorithms in hardware, Design A*ttomation Comp. Sci. Lab., G.T.E. Labs., Waltham, MA, (1984). 41. A.V. Aho, J.E. Hopcroft and J.D. Ullman, Design and Anallsis o/Computer Algorithms, Addison-Wealey, Reading, MA, (1974). 42. J.D. Ullman, CompvtationM Aspects of VLSI, Chapter 1, Computer Science Press, Rockville, MD, (1984).