Denition 2.11 : Un circuit arborescent est un circuit qui a un chemin unique de chaque entree primaire jusqu'a chaque sortie primaire
2.2 Generation des vecteurs de test
La methode de generation des vecteurs de test que nous utilisons ici est une version modiee de l'algorithme PODEM [76]. Cet algorithme est largement uti-lise dans la litterature et il s'est montre tres ecace dans la generation des vec-teurs de test pour des circuits a haut niveau de complexite dans le cadre de la generation de vecteurs de test pour detecter les fautes a l'issue de la fabrication du ciruit. Le modele de faute utiliseen test de fabrication est souvent le modele de collage a 1 ou de collage a 0. Nous avons repris le schema general de la methode, toutefois notre algorithme est specique de la detection d'erreurs de conception. Dans ce chapitre, par exemple, ce que nous cherchons a mettre en evidence n'est pas une entree ou une sortie de composant qui reste collee a une valeur constante mais une sortie de composant qui realise une autre fonction.
La generation des vecteurs de test est eectuee en trois phases: la phase d'ac-tivation, la phase de justication et la phase de dierenciation. Avant l'execution de ces trois phases, les valeurs de tous les signaux dans le circuit sont non speci-ees, X.
2.2.1 La phase d'activation
La phase d'activation consiste a associer quelques valeurs a quelques nuds dans le circuit. Si par exemple le vecteur est destine a detecter (resp. ne pas detecter) le remplacement d'un composant C1 par un autre composant C2, nous associons les valeurs correspondantes a un des Discriminant(C1;C2) (resp. NonDiscriminant(C1;C2)) aux entrees du composant C1.
Pour accelerer le processus de generation et pour eviter autant que pos-sible le \backtracking" qui pourrait se produire a cause de la detection tardive de con its entre les valeurs associees, les vecteurs Discriminant(C1;C2) (resp.
NonDiscriminant(C1;C2)) possibles sont ordonnes selon une fonction de co^ut ex-primant la diculte d'associer chacun de ces vecteurs aux entrees de C1. Le
vec-teurDiscrimiunant(C ;C ) (resp.NonDiscriminant(C ;C )) ayant le co^ut le plus petit est tente d'abord. Si un con it se produit, le vecteur Discriminant(C1;C2) (resp. NonDiscriminant(C1;C2)) suivant est tente, et ainsi de suite. L'emploi de fonctions de co^ut dans la generation des vecteurs de test est utilise dans le systeme
CONTEST [6]. Cette methode a permis d'accelerer considerablement la genera-tion des vecteurs de test, comparee a celle d'autres systemes tels que STG [110]. Les fonctions de co^ut presentees dans [6] s'appliquent seulement aux circuits contenant des portes simples (AND/NAND/OR/NOR/NOT). Nous donnons ici une denition plus generale des fonctions de co^ut, qui s'applique egalement aux circuits contenant des composants combinatoires plus complexes.
Le co^ut de justication exprime la diculte de mettre une certaine valeur v sur un nud n dans le circuit. Si n a deja la valeur v, alors le co^ut est egal a 0. Sinon, le co^ut depend de la nature de n. Si n est une entree d'un composant, le co^ut est egal au co^ut pour mettre la valeur v sur le nud duquel n provient (une entree primaire ou une sortie d'un composant). Sin est une entree primaire, alors il sut d'associer la valeur v a cette entree, et dans ce cas le co^ut est egale a 1. Par ailleurs, sin est la sortie d'un composant, il faut trouver un vecteur d'entrees de ce composant qui genere v a sa sortie, et le co^ut dans ce cas est egal a la somme des co^uts associes aux elements du vecteur. Nous donnons dans la suite une denition formelle du co^ut de justication.
Dans tout ce qui suit, un nud est soit une entree primaire, soit la sortie ou l'entree d'un composant du circuit.
Denition 2.13
: La fonction de co^ut de justication.Soit V un ensemble de valeurs ternaires fv1;v2;:::vmgcompatible avec l'ensemble de valeurs courantes V C =fvc1;vc2;:::vcmg d'un ensemble de nuds
N = fn1;n2;:::nmg. Si la valeur vi doit ^etre associee au nud ni, 1 i m, alors la fonction de co^ut Co^utJustication(N;V ) est denie comme suit:
Co^utJustication(N;V ) =Xm
i=1
co^ut(ni;vi)jvi6=X
ou co^ut(ni;vi) est calcule comme suit:
co^ut(ni;vi) = 0;
elseif
ni est une entree d'un composantthen
m = la sortie d'un composant, ou l'entrees primaire de laquelle ni provient;
co^ut(ni;vi) = co^ut(m;vi);
elseif
ni est une entree primairethen
co^ut(ni;vi) = 1;
else
C = le composant dont la sortie est ni;
Valeurs = valeurs courantes des entrees de C;
if
vi = 1then
E = \on-set" minimal de C;
else
E = \o-set" minimal de C;
endif
P = fPj jPj 2 E ^ Pj compatible avec Valeursg;
if
P =then
co^ut(ni;vi) = 1
else
co^ut(ni;vi) = minj fCo^utJustication(entrees(C);Pj)g, Pj 2P
endif
endif
2.2.2 La phase de justication
La phase de justication consiste a associer des valeurs particulieres a quelques entrees primaires an de generer aux entrees du composant C1 les valeurs deter-minees pendant la phase d'activation.
Pour justier une valeurv a un nud n dans le circuit, il y a deux possibilites: 1. Soitn est une entree primaire, et dans ce cas la justication est immediate:
nous mettons la valeur de cette entree a v.
2. Soit n est la sortie d'un composant C, et dans ce cas il faut xer une ou plusieurs entrees de C a des valeurs qui imposent v en sortie. S'il existe
plusieurs associations possibles, la plus facile a justier est tentee d'abord (selon la fonction de co^ut correspondante). Plus la fonction de co^ut est petite, plus la justication est facile. La m^eme demarche est ensuite repetee aux entrees deC, et ainsi de suite jusqu'a ce que les entrees primaires soient atteintes.
2.2.3 La phase de dierenciation
Dans la phase de dierenciation la valeur de sortie du composant C1 doit ^etre propagee jusqu'a une ou plusieurs sorties primaires. La valeur de sortie de ce composant est remplaceepar la valeurD, et le circuit est simulesous l'application des valeurs des entrees primaires obtenues dans la phase precedente. La frontiere deD est ensuite calculee.
S'il y a plusieurs composants par lesquels la valeur D peut se propager (c'est-a-dire si la frontiere de D contient plus d'un composant), alors le composant ayant la fonction de co^ut de propagation la plus petite est tente d'abord. Cette fonction exprime la diculte de propager une valeur d'un nud a au moins une sortie primaire.
Si le nud n dont la valeur D est a propager est une sortie primaire, alors la valeurD existe deja sur une sortie primaire et le co^ut de propagation est egal a 0. Si le nudn est une entree d'un composant C, les autres entrees de C doivent ^etre associees a des valeurs qui propagent D a la sortie de C. Le co^ut de pro-pagation est donc egal au co^ut de justication des entrees de C a un vecteur propageant D dans C. Ce vecteur doit ^etre compatible avec les valeurs courantes des entrees de C. Par exemple, si les valeurs courantes des entrees d'une porte AND sont (DX11), le seul vecteur de test propageant D et compatible avec (DX11) est (D111). Donc le co^ut de propagation de D a partir de l'entree de cette porte jusqu'a une sortie primaire est egal au co^ut de xation de la valeur de la deuxieme entree a 1 plus le co^ut de propagation de D de la sortie de cette porte jusqu'a une sortie primaire.
Si le nud n est une patte de sortance (\fanout stem"), alors la propagation de D peut ^etre eectuee via n'importe laquelle de ses branches de sortance. La branche ayant le co^ut le moins eleve est choisie.
Apres la propagation de la valeurD jusqu'a la sortie du composant selectionne, une nouvelle frontiere de D est generee. La m^eme demarche est ensuite repetee jusqu'a ce que la valeur D atteigne une sortie primaire.
La denition 2.14 ci-apres presente une methode pour calculer la fonction de co^ut de propagation.
Denition 2.14
: La fonction de co^ut de propagation.La fonction de co^ut de propagation Co^utPropagation(n)d'une valeurD d'un nud
n dans l'implementation jusqu'a une sortie primaire est calculee comme suit:
if
n est une sortie primairethen
Co^utPropagation(n) = 0;
elseif
n est une entree d'un composant C ayant la sortie cthen
Valeurs = valeurs courantes des entrees de C;
P = fPj jPj est un vecteur minimal propageant D dans le composant C ^ Pj est compatible avec Valeursg;
if
P =then
Co^utPropagation(n) = 1
else
Co^utPropagation(n) = Co^utPropagation(c) +
minj Co^utJustication(entrees(C);Pj), Pj 2P;
endif
elseif
n est une patte de sortance a m branchesthen
Co^utPropagation(n) = min1jm Co^utPropagation(ij); ou ij est la jeme branche de sortance de n;