Testgen (Faultlist) |
begin |
Set primary objectives ( );/*find all the primary |
objectives to be justified*/ |
Set all other lines to X |
if (there is conflict between two or more objectives on the fan-out branches of |
the same stem) then |
begin |
Drop the aggressor objectives; |
If (all aggressors objectives dropped) |
begin |
then test not possible; |
Exit |
End |
end |
Imply ( ) /*with respect to the victim and remaining aggressors and other inputs*/ |
Propagate ( ) /*Propagate the victim along the chosen target path*/ |
if (there is conflict between the objectives) then |
begin |
Drop the aggressor objectives; |
If (all aggressor objectives dropped) then |
begin |
test not possible |
Exit( ) |
end |
end |
Multiple back trace ( ) |
Unassigned primary inputs are assigned |
Imply ()/*with respect to primary inputs*/ |
Propagate ( );/*Propagate the delay in the victim along the target path*/ |
if (delay effect at PO) |
test is found; |
else |
begin |
no test possible |
Exit( ) |
end |
end |
Multiple back trace ( ) |
begin |
repeat |
begin |
remove one entry from the current objective; |
if (objective follows a fan-out point) then |
begin |
if (there is a contradiction with a previously assigned value) |
begin |
move the objective to a secondary stack |
else |
move the objective to a primary stack |
end |
else |
begin |
Continue tracing |
Select an input of gate with value x |
add to the current objective |
return multiple backtrace |
end |
end |
end |
until current objectives ≠ null |
if (primary stack objective ≠ null) then |
begin |
remove the highest level objective |
assign most requested value; |
add to the current objective |
return multiple back trace ( ) |
end |
if (secondary stack objective ≠ null) |
begin |
remove the highest level objective |
repeat |
begin |
assign value to the fan-out point |
Imply ( ) |
if (success) |
begin |
add to the current objective |
return multiple back trace ( ) |
end |
else |
assign next value |
end |
until all values assigned |
if (assignment not possible) |
begin |
Drop the aggressor objectives; |
If (all aggressor objectives dropped) then |
begin |
test not possible |
Exit( ) |
end |
end |
end |
end |