Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
//Source: VLSI Test Principles and Architectures [Wang] (P-179)
//Top subroutine
D-Algorithm(C,f)
initialize all gates to don't-cares;
set a fault-effect (D or D') on line with fault f and insert it to the D-frontier;
J-frontier = ɸ;
result = D-Alg-Recursion(C);
if result == success then
print out values at the primary inputs;
else
print fault f is untestable;
end if
//Recursion subroutine
D-Alg-Recursion(C)
if there is a conflict in any assignment or D-frontier is Ø then
return failure;
end if
/* first propagate the fault-effect to a PO. */
if no fault-effect has reached a PO then
while not all gates in D-frontier has been tried do
g = a gate in D-frontier that has not been tried;
set all unassigned inputs of g to non-controlling value and add them to theJ-frontier;
result = D-Alg-Recursion(C);
if result success then
return (success);
end if
end while
return (failure);
end if {fault-effect has reached at least one PO}
if J-frontier is Ø then
return (success);
end if
g = a gate in J-frontier;
while g has not been justified do
j = an unassigned input of g;
setj= I and insertj= I toJ-frontier;
result D-AIg-Recursion(C);
if result success then
return (success);
else try the other assignment
set j = O;
end if
end while
return(failure);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment