FR 2798472 A1 20010316 FR 9911534 A 19990915 La présente invention concerne-un procédé de localisation d'un élé ment défectueux dans un circuit intégré dont l'agencement théorique est connu, du type comportant une succession d'étapes consistant en - la détermination d'un point de mesure du circuit intégré ; et - test du point de mesure déterminé par mise en oeuvre de : _ - l'application d'une séquence de tests aux entrées du circuit intégré ; - la mesure de signaux au point de mesure determiné du circuit integré, lors de l'application de la séquence de tests ; et - l'évaluation du point de mesure par la comparaison des si gnaux mesurés avec des signaux théoriques devant être obtenus au point de mesure déterminé pour évaluer si le point mesure est dé faillant ou satisfaisant ; et dans lequel la position de l'élément défectueux du circuit intégré est déter minée à partir des évaluations effectuées aux différents points de mesure déterminés, II commode, pour la fabrication des circuits intégrés, ou lors de la recherche de défaillances de systèmes industriels, de pouvoir déterminer l'origine de défauts ou de pannes. En particulier, dans le cas de circuits intégrés défectueux, il convient de pouvoir déterminer celui ou ceux des composants constituant le circuit intégré qui présentent une anomalie de fonctionnement. Le nombre des composants entrant dans la constitution d'un circuit intégré est généralement très élevé de sorte que la localisation du ou des quelques éléments défectueux est très délicate à effectuer parmi la multitude d'éléments d'où la panne peut résulter, On connaît actuellement un procédé d'analyse circuits intégrés connu sous le terme anglais de "back tracking". Pour la mise en oeuvre de ce procédé, on utilise une installation de tests, permettant à l'aide de sondes matérielles ou virtuelles d'effectuer des relevés des signaux circulant en dif férents points de mesure du circuit. A partir de la connaissance de la structure théorique du circuit intégré analysé, on détermine, en fonction d'une séquence de tests appliqués sur les entrées du circuit, les signaux devant être mesurés aux différents points de mesure du circuit. Pour localiser les éléments défectueux dans le circuit, on considère d'abord sortie défectueuse du circuit puis on remonte depuis cette sortie vers les entrées en testant de proche en proche chacun- -,points de me sure successifs. Tant que les mesures effectuées aux différents points ré vèlent signaux incorrects par rapport aux signaux théoriques devant être obtenus, déduit que les éléments défectueux du circuit sont en amont du point de mesure. Dès qu'on obtient, en un point de mesure, signaux cor rects, on déduit que l'élément défectueux est situé entre le point de mesure où des signaux corrects sont obtenus et le point de mesure précédent où des signaux incorrects de mesure ont été obtenus. Chaque mesure effectuée réellement sur le circuit integré nécessite un temps considérable pouvant aller de quelques secondes si le point de mesure en surface à 5 à 10 minutes si le point de mesure est situé sur une couche profonde du circuit intégré et qu'un accès matériel préalable doit être ménagé à l'aide, par exemple, d'un faisceau d'ions focalisé. On conçoit que, avec la méthode utilisée actuellement, il convient parfois de parcourir à rebours l'essentiel du circuit intégré si l'élément dé fectueux est très proche d'une entrée du circuit. Du fait de la complexité des circuits des nombreuses ramifications le constituant, la recherche de l'élément défectueux peut s'avérer extrêmement longue. L'invention a pour but de proposer un procédé de detection d'erreurs dans un circuit permettant une localisation plus rapide des zones défectueu ses, tout conservant une grande fiabilité dans cette localisation. A cet effet, l'invention a pour objet un procédé du type précité, carac térisé ce qu'il comporte initialement une étape de modélisation de l'agencement théorique du circuit intégré, sous forme d'au moins un graphe comportant un ensem ble de nceuds et d'arcs orientés des entrées circuit vers les sorties du circuit ; considérer comme un sous-graphe de recherche , un sous-graphe dont le noeud formant sommet correspond à un point de mesure défaillant; et en que, pour la recherche de l'élément défectueux, il comporte les éta pes de : _- - affecter â chaque n#ud du sous-graphe de recherche considéré une variable caractéristique dépendant de la structure du sous-graphe recherche ; considérer comme point de mesure, le point de mesure correspon dant à un n#ud du sous-graphe considéré, obtenu par application d'un cri tère prédéterminé portant sur les variables caractéristiques de l'ensemble des noeuds du sous-graphe de recherche considéré ; effectuer un test du point de mesure considéré ; - considérer comme nouveau sous-graphe de recherche soit, le sous-graphe de recherche préalablement considéré en excluant le n#ud correspondant au point de mesure testé et tous ses noeuds parents, si le point de mesure est satisfaisant soit, un sous-graphe dont le n#ud correspondant au point de mesure est le sommet , si le point de mesure est défaillant ; et rechercher, dans le nouveau sous-graphe de recherche considéré l'élément défectueux, jusqu'à vérification d'un critère d'arrêt prédéterminé. Suivant des modes particuliers de mise en oeuvre, le procédé cour porte l'une ou plusieurs des caractéristiques suivantes lors de l'étape initiale de modélisation de l'agencement théorique circuit intégré, le circuit est modélisé sous forme d'un arbre par création éventuelle de nceuds virtuels lorsque un même n#ud est le parent de au moins deux noeuds, eux-mêmes parents d'un même n#ud ; il comporte, après vérification du critère d'arrêt prédéterminé, les étapes de . évaluer dans le ou chaque dernier sous-graphe de recherche, si pour chaque n#ud virtuel correspondant à un point de mesure défaillant, le n#ud jumeau associé audit n#ud virtuel est un n#ud du même sous gra phe correspondant également à un point de mesure défaillant ; et . considérer alors le ou chaque sous-groupe pour lequel la condition est verifiée comme correspondant à une partie du circuit intégré comportant au moins un élément défectueux ; - ladite variable caractéristique propre à chaque noeud est le nombre d'ancêtres de ce noeud dans le sous-graphe de recherche consideré ; - ledit critère prédéterminé est adapté pour déterminer le noeud dont le nombre d'ancêtres est sensiblement égal au nombre moyen d'ancêtres par noeud dans le sous-arbre de recherche considéré; - il comporte une étape d'affectation à chaque noeud, indicateur de conformité initialement fixé à un état défaillant ; et pour la détermination du nouveau sous-graphe de recherche à consi dérer il comporte les étapes de . fixer l'indicateur de conformité du n#ud correspondant au point de mesure testé et de tous ses nceuds parents à un état satisfaisant, si le point de mesure testé est satisfaisant ; et . considérer comme nouveau sous-graphe de recherche, le sous- graphe inclus dans le sous-graphe de recherche précédent et comportant les seuls noeuds dont l'indicateur de conformité est fixé à l'état défaillant ; et - le sous-graphe de recherche initialement considéré est formé de l'intersection des sous-graphes ayant chacun pour sommet un noeud corres pondant à une sortie défaillante du circuit intégré. L'invention a également pour objet un dispositif de localisation d'un élément défectueux dans un circuit intégré dont l'agencement théorique est connu, du type comportant des moyens pour effectuer une succession d'étapes consistant en - la détermination d'un point de mesure du circuit intégré ; et - le test du point de mesure déterminé par mise en oeuvre de - l'application d'une séquence de tests aux entrées du circuit intégré ; - la mesure de signaux au point de mesure déterminé du circuit intégré, lors de l'application de la séquence de tests ; et - l'évaluation du point de mesure par la comparaison des si gnaux mesurés avec des signaux théoriques devant être obtenus au point de mesure déterminé pour évaluer si le point de mesure est dé faillant ou satisfaisant ; et des moyens pour déterminer la position de l'élément défectueux du circuit intégré à partir des évaluations effectuées aux différents points de mesure déterminés, -- caractérisé en ce qu'il comporte des moyens de modélisation initiale de l'agencement théorique circuit intégré, sous forme d'au moins un graphe comportant ensemble de noeuds et d'arcs orientés des entrées du circuit vers les sorties du circuit ; des moyens pour considérer initialement comme un sous-graphe de recherche , un sous-graphe dont le noeud formant sommet respond à un point de mesure défaillant ; et en que, pour la recherche de l'élément défectueux, il comporte moyens pour - affecter à chaque noeud du sous-graphe de recherche considéré une variable caractéristique dépendant de la structure du sous-graphe recherche ; - considérer comme point de mesure, le point de mesure correspon dant à un noeud du sous-graphe considéré, obtenu par application d'un cri tère prédéterminé portant sur les variables caractéristiques de l'ensemble des nceuds du sous-graphe de recherche considéré ; - effectuer un test du point de mesure considéré ; - considérer comme nouveau sous-graphe de recherche soit, le sous-graphe de recherche préalablement considéré en excluant le noeud correspondant au point de mesure testé et tous ses nceuds parents, si le point de mesure est satisfaisant soit, un sous-graphe dont le noeud correspondant au point de mesure est le sommet , si le point de mesure est défaillant ; et - rechercher, dans le nouveau sous-graphe de recherche considéré l'élément défectueux, jusqu'à vérification d'un critère d'arrêt prédéterminé. L'invention sera mieux comprise à la lecture de la description qui va suivre, donnée uniquement à titre d'exemple et faite en se référant aux des sins sur lesquels - la figure 1 est une vue schématique d'un synoptique général don nant l'interdépendance données et des actions lors de la mise en ceuvre d'un procédé selon invention ; - la figure 2 est vue plus détaillée de l'organigramme mis en ceu- vre dans l'installation dont synoptique est donné sur la figure 1 ; - les figures 3 sont des vues schématiques respectivement d'un circuit élémentaire et représentation sous forme d'un graphe d'in fluence inter-nceuds ; - la figure 5 une d'un exemple d'une zone défaillante d'une modé lisation d'un circuit intégré ; - les figures 6 et sont des vues respectivement d'une cellule dé faillante seule et de deux cellules défaillantes partageant la même sortie ; - les figures 8A 8B sont des vues schématiques respectivement d'un graphe comportant un cycle et d'un arbre résultant d'une modification du graphe par application du principe de coupure ; - la figure 9 une vue schématique de cellules de l'arbre illustrant le principe du parcours arbre pour son marquage ; - la figure 10 un organigramme explicitant le séquencement géné ral du marquage par la fonction marquage () ; - la figure 11 est un organigramme explicitant la fonction noeud_cherche sorties( utilisée lors du marquage ; - la figure 12 un organigramme explicitant la fonction sor- tie-cherche_noeuds( utilisée lors du marquage ; - la figure 13 une vue schématique de la construction d'un sous- ensemble minimal; - la figure 14 est une vue schématique d'intersections non connexes entre sous-graphes de l'arbre de référence ; - la figure 15 est une vue schématique donnant un exemple d'une in tersection de deux arbres ; - la figure 16 est une vue schématique d'un arbre donnant un exemple de numérotation ; - figure 17 est un organigramme explicitant l'algorithme de recher che d'élements défectueux par la fonction dichotomie( ) ; - figure 18 est un organigramme explicitant le calcul et la localisa tion noeud moyen par la fonction chercher noeud moyen ) ; - figure 19 est un organigramme explicitant le calcul nombre de noeuds du cumul des ancêtres par la fonction calcul moyenne( ) ; - les figures 20 et 21 sont des organigrammes explicitant éléments modifiés de l'algorithme de la figure 19 pour la localisation d'un noeud moyen par la fonction localiser moyenne () ; - la figure 22 est une vue d'un arbre illustrant des exemples de réso lutions autorisées et interdites ; - la figure 23 est un organigramme explicitant la détermination des noeuds pouvant être déclarés sommet d'une zone défaillante par la fonction analyser cellules restantes( ). - figure 24 est un organigramme explicitant la construction de la liste des candidats par la fonction construire liste_candidats( ) - figure 25 est un organigramme explicitant l'analyse sous un noeud sommet la fonction analyser sous çe sommet( ). - figure 26 est un organigramme explicitant la construction de la liste des coupures par la fonction lister_coupures a_resoudre( ). - la figure 27 est un organigramme explicitant l'algorithme de résolu tion des coupures par la fonction resoudre coupures( ) ; et - la figure 28 est un organigramme explicitant la recherche d'une ré solution interne par la fonction chercher un_nceud( ). Sur la figure 1 est représenté le schéma synoptique données et des actions mises en oeuvre par une installation de contrôle circuit inté gré mettant en oeuvre le procédé selon l'invention. programme mis en oeuvre par cette installation permet de détermi ner progressivement, à partir du schéma théorique d'un circuit intégré, les points ou des mesures physiques doivent être réalisées par mise en ceuvre d'une séquence de tests appropriés. Après chaque acquisition du résultat du test précédemment effectué, permettant de déterminer si le signal reçu au point de mesure est ou correct, le procédé mis en oeuvre détermine un nouveau point où un test doit être effectué à partir d'une nouvelle séquence de tests. Au et à mesure de l'acquisition des résultats des-tests proposés. automatiquement, le procédé selon l'invention permet de localiser la région du circuit intégré dans laquelle se trouve l'élément défectueux puis finale ment de localiser celui-ci de manière rapide. séquences de tests mises en oeuvre pour chacun des points mesure du circuit intégré sont de tout type adapté et sont par exemple - parables à celles mises en oeuvre dans un procédé de "back tracking". Les séquences de tests étant connues en soi, elles ne seront pas décrites dans la suite de la description. De même, les moyens utilisés pour assurer la mesure d'un signal en un point de mesure déterminé du circuit intégré, lors de l'application d'une séquence de tests ne seront pas décrits en détail, ceux-ci étant de tout type adapté. Le procédé selon l'invention peut être mis en oeuvre avec une instal lation comportant, d'une part, des moyens de test tels qu'un microscope électronique à balayage permettant d'effectuer des relevés des signaux cir culant en des points de mesure déterminés du circuit intégré lors de l'appli cation d'une séquence de tests, et, d'autre part, une unité de traitement d'informations, telle qu'un micro-ordinateur mettant en oeuvre un programme adapté déterminant, suivant le procédé de l'invention, les points du circuit où des mesures successives doivent être effectuées, et déduisant des résultats de mesures la position des éléments défectueux dans le circuit. Sur la figure 1 sont illustrés les différents fichiers de données utilisés ainsi que les traitements opérés sur ceux-ci, afin de déterminer, d'une part, les points successifs où des mesures doivent être effectuées sur le circuit et, d'autre part, les éléments ou zones défectueux du circuit. La structure générale du programme met en oeuvre la notion de ses sion. Une session peut être définie comme un ensemble fichiers cohé rents relatifs à des conditions données pour les entrées et paramètres du programme. Une session contient aussi l'ensemble des fichiers intermédiai res générés le programme, nécessaires au fonctionnement, et à la mé morisation numéro de la dernière étape de calcul effectuée. Le contenu d'une session est défini dans un fichier texte dont le nom porte l'extension .ses . La racine du nom est définie librement par l'utilisateur. Le chargement par le programme d'un fichier de session préexistant restaure le contexte de calcul propre à cette session (mêmes fichiers de données, mêmes paramètres de contrôle et résultats intermédiaires) et per met le redémarrage des calculs à l'endroit où ils avaient été interrompus. Le séquencement des différentes opérations est effectué par une fonction main( Le code cette fonction se trouve dans un fichier principal.c . Selon le principe du programme, les différentes opérations sont en chaînées de manière séquentielle. On distingue cinq phases principales qui seront détaillées dans la suite # phase d'interprétation de l'EDIF # phase de marquage # phase de numérotation (cette phase englobe la construction de l'arbre de référence, celle du sous-ensemble minimal et la création du sommet virtuel) # phase de localisation des fautes # phase de compte-rendu. A l'issue de chacune de ces phases, les calculs peuvent être inter rompus. Dans ce cas, tous les résultats intermédiaires nécessaires à la re prise ultérieure des calculs sont automatiquement archivés dans des fichiers de sauvegarde. Ces fichiers ont des noms comportant une extension .data . Le degré d'avancement des calculs est également archivé. La reprise des calculs se fait de façon transparente, c'est-à-dire sans avoir à faire référence à fichiers intermédiaires, en chargeant simple ment le fichier de session approprié. Initialement, la structure théorique du circuit, c'est-à-dire la structure d'un circuit sans défaut, stockée dans un fichier 100, qui est par exemple au format EDIF. Ce fichier est traité d'abord lors d'une phase d'interprétation 102 per mettant la mise en forme du fichier décrivant le circuit théorique sous forme d'un format interne propre à la mise en oeuvre du procédé. La réalisation de l'interprétation 102 et le format propre à l'application du procédé seront dé crits dans la suite de la description. Généralement, l'interprétation consiste à modéliser le circuit théorique sous la forme d'un graphe, dont les nceuds correspondent aux entrées et aux sorties des différents composants du circuit intégré et dans lequel les composants sont représentés par des ensembles d'arcs orientés reliant les noeuds entre eux. L'algorithme d'interpretation reçoit et adresse des données à une mémoire interne de session 104 assurant notamment un stockage tempo raire du fichier contenant le graphe du circuit présenté suivant un format ex ploitable. Cette mémoire 104 reliée à un fichier de session 106 assurant un stockage des données de session sur un support permanent tel qu'un dis que dur. A l'issue de l'interprétation 102, le fichier de session est soumis à une phase de marquage 108 associée à d'autres traitements préliminaires. La phase suivante notée 110 est dite "phase de construction d'un sous-ensemble minimal de numérotation". Elle a notamment pour but la définition de sous-ensembles parmi les différents arbres modélisant le cir cuit. En particulier, lors de la phase 110, sont prises en compte deux séries d'informations à savoir liste des sorties du circuit fonctionnant correcte ment, notée 112, et la liste des sorties du circuit ne fonctionnant pas correc tement notée 114. A cet effet, les sorties du circuit sont testées à partir de séquences de tests, comme cela sera expliqué dans la suite de la descrip tion. A partir du fichier de session obtenu en sortie de l'étape 110, une phase 116 chargement des listes est mise en oeuvre. Cette phase prend en compte liste des noeuds interdits stockés dans un fichier 118, la liste des niveaux métal 120 précisant les couches métalliques sur lesquelles sont présents différents éléments du circuit, ainsi qu'un fichier 122 com portant la liste noeuds déjà testés. La phase ultérieure 123 consiste en la localisation des composants ou groupes composants défectueux, causant des fautes dans le fonc tionnement circuit. Selon l'invention, cette recherche des fautes s'effectue suivant un procédé de dichotomie pratiqué sur certains arbres particuliers du circuit, en tenant compte d'une pondération encore appelée numérotation chacun nceuds effectuée suivant une méthode prédéterminée. Lors de la phase de dichotomie notée 124, est également mise oeuvre phase d'analyse supplémentaire 126 dite "phase d'analyse après épuisement" permettant de compléter la recherche des fautes effectuée par dichotomie. Cette phase supplémentaire permet de tenir compte des con traintes de modélisation du circuit qui ont conduit à certaines modifications conventionnelles du graphe le représentant. Enfin, résultats sont mis à disposition de l'utilisateur lors de la phase ultime Comme représentée sur le schéma synoptique, chacune des phases de traitement 102, 108, 110, 116, 124, 126, 128 reçoit et adresse des nées depuis et vers la mémoire interne de session 104. Cette dernière de plus reliée à un ensemble de fichiers résultats 130, ainsi qu'à un journal de stockage 132. Ces derniers assurent respectivement la mise à disposition de l'utilisateur des résultats de l'analyse et l'archivage des commentaires imprimés à l'écran. Sur figure 2 est décrite plus en détail chacune des phases succes sives 102, , 110, 124 et 126 de mise en oeuvre du procédé selon l'inven tion. Ainsi, la description détaillée de l'algorithme total va être effectuée en regard de la figure 2, où chacune étapes élémentaires sera décrite suc cessivement en référence à d'autres figures illustratives encore plus dé taillées. La première étape de la phase initiale 102 de mise en forme du fichier décrivant le circuit intégré est désignee par la référence 202 sur la figure 2. De manière générale, un circuit peut toujours être décrit comme un ensemble de cellules comportant des entrées et des sorties connectées par des noeuds. Le choix du niveau hiérarchique de définition d'une cellule est arbitraire. II s'agit par exemple sous-ensemble fonctionnel constituant une macro-cellule, d'une porte d'un transistor. De même, la notion d'entrées et de sorties du circuit à analyser peut être immédiatement trans posée aux entrées et sorties d'un bloc interne, l'analyse portant alors sur ce bloc. Avec le type de description utilisé, les signaux ne sont observés que sur les noeuds. La description des cellules se réduit à l'influence qu'exercent leurs noeuds d'entrée sur leurs noeuds de sortie. La description initiale du circuit formée d'un ensemble de cellules et de n#uds, peut donc être transformée en un graphe d'influence inter-nceuds en remplaçant chaque cellule, dont un exemple est donné sur la figure 3, par un ensemble d'arcs orientés tel qu'il lustré sur la figure 4. Sur la figure 3, est représentée une cellule 300 constituée par exem ple d'une porte ET. Cette cellule comporte deux entrées E1 et E2 reliées à des noeuds d'entrée 302 et 304 respectivement. Ces nceuds d'entrée sont reliés aux sorties d'autres cellules non représentées du circuit intégré. La sortie, notée S, de la cellule 300 reliée à un noeud 306 auxquelles sont reliées les entrées d'autres cellules représentées du circuit intégré. Sur la figure 4, la cellule 300 est remplacée par deux arcs orientés 402 et 404 reliant respectivement les noeuds d'entrée 302 et 304 aux noeuds de sortie 306 de la cellule. Ainsi, la cellule 300 est modélisée simplement par les deux arcs orientés 402 et 404. - Grâce à une telle modélisation de toutes les cellules, description totale du circuit prend ainsi la forme d'un graphe. Dans une telle modélisation du circuit et comme illustré la figure 5, une zone défaillante 500 est un sous-graphe et même, après application de modifications qui seront explicitées ultérieurement, un sous-arbre. cette figure apparaissent plusieurs types de noeuds. nceuds mauvais sont désignés par un rond au centre duquel fi gure une croix. Les noeuds mauvais sont les noeuds pour lesquels, pour une séquence de tests donnée appliquée à l'entrée du circuit, est obtenu un si gnal différent du signal théorique devant être obtenu pour ce point de me sure. Certains noeuds sont des nceuds non testables. II s'agit par exemple des noeuds situés sur des couches profondes du circuit intégré auxquels l'accès est impossible ou difficile. Ces noeuds sont désignés par un rond à l'intérieur duquel figure un point d'interrogation. noeuds bons, par opposition aux nceuds mauvais, sont des nceuds ou pour une séquence de tests donnée, le signal mesuré correspond au signal théorique devant être obtenu. Ces noeuds bons sont désignés par un rond à l'intérieur duquel figure un autre rond. Dans l'exemple de la figure 5, la zone défaillante 500 constituée d'un sous-arbre dont le sommet 502 est un noeud mauvais. noeud mau vais 502 commandé par deux noeuds non testables 503 Le pre mier noeud testable 503 est relié à deux noeuds bons et 508. Le second noeud non testable 504 est relié à un n#ud bon 51 et à un n#ud non testable 512 lui-même relié à un n#ud bon 514. De manière générale, un sous-arbre constituant une zone défaillante a les propriétés suivantes # Le sommet est un noeud sur lequel le signal est mauvais. # Toutes les terminaisons sont des noeuds sur lesquels le signal est bon. # Il peut exister des noeuds non testables entre le sommet et les terminaisons. Dans le cas contraire, il s'agit d'une cellule défaillante ou de cellules défaillantes dont les sorties sont connectées au même noeud. Un exemple de cellule défaillante seule est représenté sur la figure 6. Un exemple deux cellules défaillantes partageant la même sortie est décrit sur la figure 7. Sur ces figures, les conventions de la figure 5 sont utilisées. Dans la pratique, l'étape d'interprétation 202 consiste à transformer le fichier initiai de description du circuit, au format Edif, par exemple, en un fi chier format déterminé propre à la mise en oeuvre du procédé (fichièf dont le nom porte le suffixe .parsed ). Suivant la nature du fichier initial (repérée par l'un des suffixes .edn , .edf ou .edo ), le programme lance l'interpréteur approprié. Ces programmes d'interprétation sont utilisés comme des comman des du système d'exploitation par la fonction system( ) du langage Dans les cas où la description initiale n'est pas conforme aux formats des interpréteurs disponibles, il est toujours possible d'utiliser directement une description au format interne (format .parsed ), Le format de ces fichiers internes est donné sur la table 1. contraintes conventionnelles à respecter sont les suivantes II s'agit d'un fichier texte. # On ne doit pas sauter de ligne. # Les différents blocs doivent être placés dans l'ordre suivant les blocs décrivant les sorties ; les blocs décrivant les entrées ;les blocs décrivant les cellules internes et les blocs décrivant les noeuds. # La numérotation des sorties commence à zéro et se termine à N. # La numérotation des entrées commence à N+1 et se termine à (Nombre de broches - 1). # La numérotation des cellules internes (instances) commence à (Nombre de broches) et se termine à (Nombre de broches + - bre de çellules_internes - 1). # Les noeuds sont numérotés de zéro à (Nombre de nceuds 1). # La numérotation des noeuds dans les blocs relatifs aux sorties, aux entrées et aux cellules instanciées doit être cohérente avec la numé rotation des blocs décrivant les noeuds. # Les numéros des cellules dans les blocs décrivant les noeuds doivent être cohérents avec la numérotation des cellules instanciées, la numérotation des entrées, ainsi que la numérotation des sorties effec tuée en amont dans le fichier. Nombre_de_broches _______Nombre_de-cellules_nternes Nombre-de-nceuds Nom-Cellule-Sortie Nu méro_Cellule Sortie 1 A répéter pour chaque broche de sottie Nom-Broche-entrée Numéro_du naeud d'entrée 0 ____________ ------------ ----------------------------- ------------ Nom-Cellule Entrée Numéro-Cellule-Entrée 0 1 A répéter pour chaque broche d'entrée Nom Broche sortie Numéro du naeud-de sortie ---------------------------------------------------------------------- Nom_Cellule Numéro-Cellule Nombre entrées ------------------------------ Nom Broche entrée 'entrée pour chaque entrée de cellule Numéro-du- n#ud-d Pour chaque cellule interne ---------------------------- Nombre sorties ------------------------------ Nom Broche sortie Numéro_du-naeud-de_sortie Pour chaque sortie de cellule ------------------------------------------------------------------- ------------ ------------------------------------------------------------------- Nom du naeud Numéro_du-nceud Nombre de-broches connectées à ce-noeud ________ ___________-__________-_ ______________ Pour chaque noeud Nom_broche Pour chaque broche Numéro -cellule _à laquelle-la_broche-appartient (cellule ou entrée/sortie) -------------------------------------------------------------------------------- Table 1 : Structure d'un fichier au format de description interne ( .parsed ) Trois listes fondamentales sont construites à partir de ce fichier. 11 s'agit de # Une liste chaînée de structures de type NCFUD pour décrire les noeuds ; # Une liste chaînée de structures de type CELLULE pour décrire le brochage ; # Une liste chaînée de structures de type CELLULE pour décrire les cellules instanciées ; La définition de ces structures se trouve dans un fichier d'en-tete structures.h . Toutes les autres structures de données construites par la suite tiennent, en général, des pointeurs vers les éléments de ces listes de nière à éviter au maximum la duplication des informations. La premiere étape 204 de la phase de marquage et de traitements préliminaires consiste à trouver, pour chaque. sortie du circuit intégré, l'ensemble noeuds susceptibles de l'influencer. Ces ensembles de nceuds sont appelés cônes d'influence . Simultanément est effectué un marquage des nceuds comme cela sera décrit dans la suite de la descrip tion. A l'issue de cette étape 204, il est possible d'énumérer, pour chaque n#ud du circuit, l'ensemble des sorties du circuit que le n#ud est suscepti ble d'influencer. C'est à partir des cônes d'influence, affectés à chaque noeud, que s'effectuent les différentes opérations d'intersection et d'exclusion présentées dans la suite de la description. Au début de l'étape 204 de construction des cônes d'influence, on effectue un certain nombre de calculs préliminaires relatifs aux sorties. Cela consiste à # Compter le nombre de sorties ; # Compter le nombre de groupes de marqueurs ; # Remplir les tableaux communs associés aux sorties. Ces tableaux communs sont # tableau donnant le numéro de groupe de chaque sortie groupeSortie[ ] ; # tableau donnant le rang de chaque sortie : rangSortie[ ] ; # tableau donnant la valeur numérique du marqueur pour chaque sortie : marqueurSortie[ ] ; # tableau contenant les adresses des structures relatives à chaque sortie : adresseSortie[ ] ; 0 tableau des noms des sorties nomSortie[ ] ; # Le tableau contenant le nombre total de noeuds dans le cône relatif à chaque sortie : totalSortie[ ]. L'utilité de ces différents tableaux apparaît après la lecture des para graphes suivants relatifs à la méthode de marquage des noeuds. Pour construire le cône d'influence d'une sortie, on part de cette sortie et on parcourt le graphe d'influence avec un algorithme standard de par cours des arbres tel qu'un algorithme à ordre préfixé . Comme le graphe d'influence n'est pas un arbre, suivant la nature circuit initial, ce graphe peut comporter des cycles dus à la présence dans circuit de boucles séquentielles ou combinatoires. Lorsqu'on s'engage dans un tel cycle, on revient à un moment donné sur un noeud déjà analysé. L'algorithme est adapté pour détecter le retour sur un noeud. Quand cet événement se produit, l'algorithme crée une termi naison fictive, denommée "coupure", et rebrousse chemin. Suivant principe des coupures, on effectue des coupures quand revient sur noeuds déjà analysés. La notion de coupure est illustrée les figures et 8B. Sur la figure 8A est représenté un graphe d'influence ne présentant pas la forme arbre puisque l'un des noeuds noté 802 est le parent deux noeuds et 806, ces derniers étant eux-mêmes les parents même noeud Ainsi, les noeuds 802, 804, 808 et 806 forment une boucle combinatoire. Afin de créer un arbre à partir du graphe de la figure 8A, et comme il lustré sur la figure 8B, un noeud virtuel 810, constituant une coupure est ajouté comme parent du noeud 806. Dans la suite des dessins, les coupures sont représentées par un rond renfermant un carré. Le noeud 802 est conservé comme parent du noeud 804. Ainsi, le nceud 810 constitue un noeud jumeau virtuel du noeud 802. L'arc orienté issu du noeud 802 et pointant sur le noeud 806 est supprimé dans la structure de données. II est indiqué pour mémoire en traits pointillés sur la figure 8B. Dans la structure de données, un champ parent de la structure décrivant le noeud 810 pointe sur le noeud jumeau 802 dans la liste des nceuds. En opérant de cette manière, on obtient un arbre puisque tous cycles sont ouverts. Les cônes d'influence sont donc des sous-graphes du graphe d'influence munis de coupures appropriées. ont une structure d'arbre dont le sommet est une sortie et les - minaisons sont soit des entrées soit des coupures. Simultanément à la définition des cônes d'influence est effectué un marquage des noeuds. but du marquage est d'enregistrer pour chaque noeud les sorties du composant qu'il influence. Cet enregistrement se fait en agissant sur un "marqueur" associé à chaque noeud. Chaque fois qu'on trouve le long du parcours un noeud nouveau, on attribue à la variable "marqueur", qui est affectée au noeud, le numéro de la sortie dont on construit le cône d'influence. Ces marqueurs sont des tableaux de nombres entiers dont le type (TYPEMASQUE) est un type prédéfini dans l'en-tête structure.h . Le champ marqueur dans chaque structure NCFUD est un pointeur sur le premier élément de ce tableau. Chacun des bits de ces entiers est utilisé pour mémoriser si une sor tie est influençable ou non par ce noeud. Si le bit correspondant à la sortie d'indice est mis à 1, le noeud influence la sortie n. Sinon ce bit est laissé zéro. Comme les entiers sont limités en nombre de bits, ii faut partager l'ensemble des sorties en groupes et affecter un entier à chaque groupe pour la mémorisation des sorties du groupe. Le nombre de sorties codables est ainsi illimité. Dans un premier temps, le programme compte les broches de sortie. Soit nombreDeSorties le nombre des broches de sorties. Le nombre de bits par entier est donné par une instruction du langage C: NOMBREDEBITS = sizeof(TYPEMASQUE) * 8. Le nombre de groupes est donc donné par nombreDeGroupes = PartieEntière((nombreDeSOrtieS - 1 ) NOMBREDEBITS) + 1 Ce nombre de groupes sert à dimensionner les tableaux de - quage. groupe de la sortie n est déterminé par : groupeSortie[n] tieEntiere(n I NOMBREDEBITS). définit également le rang de la sortie n par : rangSortie[n] = n dulo(NOMBREDEBITS). Une sortie donnée est donc repérée par un couple (groupe, rang). Pour mettre à 1 le bit correspondant à la sortie numéro n, on ajoute 2 à puissance rangSortie[n] à l'entier du tableau correspondant au groupe la sortie n. Pour chaque sortie, la valeur correspondante de cet incrément marqueur est calculée dans les calculs préliminaires. Ces valeurs sont morisees dans le tableau commun marqueurSortie[] . Si node est le pointeur contenant l'adresse du n#ud à traiter l'activation de son marqueur pour la sortie n se fait donc avec l'instruction C suivante node->marqueur[groupeSortie[n]] += marqueurSortie[n] ; Pour que ce mécanisme fonctionne, il faut que chaque n#ud pouvant être marqué pour la sortie n ne le soit qu'une seule fois. Avant de marquer un n#ud pour la sortie n, il faut donc tester si ce n#ud a déjà été marqué non pour cette sortie. Pour ce faire, on opère de la façon suivante L'adresse node du n#ud et le numéro n de la sortie étant donnés, on détermine le groupe correspondant à cette sortie en lisant le tableau groupeSortieO. On utilise ce numéro de groupe pour localiser l'élément correspon dant a cette sortie dans le tableau marqueur associé à ce noeud. applique le ET logique entre cet élément du tableau et la valeur contenue dans le tableau commun marqueurSortien pour ce numéro de sor tie, c'est-a-dire test = (node->marqueur[groupeSortie[n]] ) & (marqueurSortie[n]) ; valeur de test est différente de zéro si le bit correspondant à la sortie n déjà à la valeur 1 dans le marqueur associé au noeud. L'attribution des valeurs correctes aux marqueurs associés à chaque noeud est effectuée en exécutant l'algorithme de marquage dont le principe est exposé ci-dessous Cet algorithme garantit que tout noeud est marqué une fois et une seule pour toutes les sorties qu'il est capable d'influencer. Cet algorithme est adapté au cas des marqueurs vectoriels, exposé ci-dessus. II est également adapté pour la construction de l'arbre de réfé rence, comme cela sera exposé dans la suite. Le principe de l'algorithme est de parcourir le cône d'influence du cir cuit depuis chaque sortie avec un algorithme standard de parcours des ar bres tel algorithme à ordre préfixé . Chaque fois qu'un noeud peut être marque, on vérifie s'il ne l'a pas déjà été. S'il a déjà été marqué, l'algorithme considère qu'il a atteint une terminaison et il rebrousse chemin. Pendant le marquage, on compte également le nombre total de noeuds contenus dans chaque cône d'influence. Ces totaux sont stockés dans le tableau commun totalSortie[ ] . valeur zéro du paramètre mode indique ' l'algorithme qu'il doit effectuer le marquage des noeuds. La valeur du paramètre mode indique à l'algorithme qu'il doit effectuer la construction de l'arbre de référence. La construction de l'arbre de référence sera explicitée dans la suite de la description. Le parcours du graphe s'effectue par l'appel récursif de deux fonc tions illustrées schématiquement sur la figure 9. L'enchainement des différentes étapes de l'algorithme de marquage objet la fonction marquage ( ) est exposée sur la figure 10. Ces différen tes étapes font appel aux fonctions ci-dessous exposées seront décrites en regard des figures 11 et 12. La fonction noeud cherche sorties( ) (figure 11) : cette fonction est exécutée lors de l'analyse de l'environnement d'un noeud. Elle recherche les différentes sorties de cellules connectées à un noeud donné et pour chacune de ces sorties appelle la fonction sortie cherche_noeuds(). # La fonction sortie cherche noeuds( ) (figure 12) : cette fonction exécutée lors de l'analyse des entrées de la cellule dont sortie à été sélectionnée par la fonction noeud cherche sorties( ). Pour chacune des broches d'entrée de cette cellule, elle marque, s'il y a lieu, le n#ud où elle est connectée et fait un appel à la fonction noeud_cherche sorties(. ) depuis nouveau noeud. la figure 9, sont représentées deux cellules 902 et 904 dont la sortie reliée à un même n#ud 908 relié à une entrée d'une autre cellule 910. même, deux entrées des cellules 902 et 904 sont reliées à un même n#ud 906. En initialisant le procédé sur le n#ud 908, l'application de la fonction naeud cherche sorties () permet d'identifier une des sorties des cellules 902 et 904. L'application ultérieure de la fonction sortie cherche n#uds ()- permet de trouver le n#ud 906 auquel sont connectées des entrées des cellules 902 et 904. On conçoit que l'application récursive des deux fonctions permet de parcourir l'ensemble du graphe. Sur la figure 10, est précisé l'organigramme de la fonction marquage. Sur cette figure, la variable n est utilisée pour parcourir les sorties circuit intégré à tester. Initialement, à l'étape 1000, la variable n est fixée à Tant qu'il reste des sorties du circuit intégré à parcourir, la procédure de marquage est mise en eeuvre. A cet effet, un test est effectué ' l'étape 1002 pour comparer la variable n au nombre total de sorties du circuit inté gré. A l'étape 1004, est déterminé le n#ud de la modélisation du circuit intégré associé à la sortie n considérée. l'étape 1006, ce n#ud est marqué pour la sortie n. l'étape 1008, la fonction noeud_cherche sorties () est appliquée pour le n#ud considéré. Ainsi, par l'application successive des fonctions récusives n#ud cherche sorties () et sortie cherche-naeuds l'en semble l'arbre associé à la sortie est parcouru par application algo rithmes decrits en regard des figures 11 et 12. Après épuisement de l'arbre associé à la sortie n, la variable n est in crémentée à l'étape 1010. Le test opéré à l'étape 1002 est alors remis en oeuvre. La fonction marquage s'achève après que toutes sorties du cir cuit intégré ont été traitées. La fonction noeud cherche sorties () dont l'organigramme est pré senté sur la figure 11, reçoit en entrée le noeud 1102 depuis lequel elle opère, le nom de la cellule précédente 1104, le numéro de sortie du circuit intégré 1106 dont l'arbre est en cours de marquage ainsi que le mode de fonctionnement de la fonction 1108. Pour le marquage, comme indiqué précédemment, le mode est fixé à 0. A l'étape initiale 1110, une broche connectée au noeud fourni en 1102 est choisie. Il est vérifié à l'étape 1112 que cette broche existe. Si tel est le cas, à l'étape 1114, il est vérifié que la broche est connectee à la cellule pré cédente. Si tel est le cas, l'étape 1110 est remise en oeuvre. Si la réponse au test effectué à l'étape 1114 est négative, il est vérifié à l'étape 1116 que la broche considérée est une broche de sortie. Si tel n' pas le cas, une autre broche est choisie à l'étape 1110. Si la broche considérée est une broche de sortie l'étape 1118 est mise en ceuvre. Celle-ci consiste en l'appel de la fonction sor- tie_cherche_naeuds () associés aux paramètres correspondants. A l'issue de la fonction sortie cherche noeuds (), une nouvelle bro che est choisie à l'étape 1110. Lorsque appelée depuis l'étape 1118 et comme illustré sur la figure 12, la fonction sortie cherche noeuds () dispose comme variable d'entrée du pointeur de la cellule considérée 1202, du numéro de sortie du circuit in tégré considérée 1204, du noeud de départ 1206, ainsi que du mode 1208. Ce dernier est fixé à 0 pour le marquage. A l'etape 1210, il est d'abord vérifié que la cellule est une cellule d'en trée ou de sortie. Si tel est le cas, l'algorithme rebrousse chemin. Si tel n'est pas le cas l'étape 1212 est mise en oeüvre au cours de laquelle une broche d'entrée la nouvelle cellule est choisie. II est vérifié à l'étape 1214 que cette broche d'entrée existe. Si elle existe réellement, il est vérifié à l'étape 1216 que le noeud qui est connecté est déjà marqué. Si celui-ci est déjà marqué, et que le mode est à 0 lors du test effectué à l'étape 1218, une nouvelle broche d'entrée est choisie par une nouvelle mise en oeuvre de l'étape 1212. Si le noeud considéré n'est pas déjà marqué, et que le mode est à 0 lors d'une vérification de l'étape 1220, ce noeud est marqué pour la sortie n considérée à l'étape 1222 et le compteur de noeuds de la sortie n est incré menté. Enfin, à l'étape 1224, le choix d'une nouvelle broche d'entrée est ef fectué par appel de la fonction nceud cherche sorties (). Les appels récursifs réciproques des fonctions sor ties cherche noeuds () et noeud cherche sorties () permettent par cours total des arbres associés à chacune des sorties, l'ensemble sor ties étant balayé par l'application de l'algorithme de marquage de figure 10. Ainsi s'achève la phase de marquage 108. A l'issue de celle ' com mence la phase 110 de construction du sous-ensemble minimal et de numé rotation, Pour la construction du sous-ensemble minimal, l'état de fonctionne ment des sorties du circuit à analyser doit être connu. A cet effet, une séquence de tests appropriés est préalablement ap pliquée sur les entrées du circuit à analyser, afin de déterminer parmi les sorties du circuit celles sur lesquelles apparaît un signal satisfaisant ou cor rect et celles sur lesquelles apparaît un signal défaillant ou incorrect. Ainsi, les sorties du circuit sont réparties en deux groupes. Le premier groupe des sorties satisfaisantes, est défini dans une liste dénommée SOK (Acronyme pour Sortie OK). Les sorties du circuit considérées comme défaillantes sont regrou pées dans une seconde liste dénommée SNOK (Acronyme pour Sortie Non OK). Ces listes sont désignées par les références 112 et 114 dans l'orga nigramme la Figure 1. En resumé, à ce stade, les données d'entrée du programme sont # fichier de description du circuit sous la forme d'un ensemble de cellules et de nceuds d'interconnexion. Si ce fichier est à l'un des formats Edif (extensions .edf , .edn ou .edo ), le programme lance automatiquement un interpréteur (parser). Le circuit peut egalement être décrit en utilisant le format interne de description (extension .parsed ). Ce dernier format permet d'accéder un niveau hiérarchique arbitraire de définition des cellules sans par les contraintes de l'Edif. # liste des sorties trouvées défaillantes à un moment donné la séquence test (SNOK). # liste (facultative) de sorties qui n'ont jamais été trouvées faillantes pendant le déroulement de la séquence de test (SOK). A l'étape 212, l'algorithme détermine l'arbre de référence, c'est-à-dire l'arbre dans lequel les fautes du circuit seront recherchées. Parmi les cônes relatifs aux sorties SNOK, il en existe au moins qui contient le plus petit nombre de noeuds. Ce cône particulier est le cône de référence. C'est dans ce cône que seront recherchées les fautes. Ceci est expose dans les paragraphes qui suivent. Le programme sélectionne, pour la sortie de référence, la sortie dé faillante dont le cône d'influence contient le plus petit nombre de noeuds. Ces nombres de noeuds sont contenus dans le tableau commun totalSor- ties[]. Un fois connue la sortie de référence, la fonction nceud cherche sorties( ) est exécutée avec la valeur 1 pour le paramètre mode . Le mécanisme de construction de l'arbre de référence est analogue à celui du marquage. Cependant # Au lieu d'utiliser des tableaux de marqueurs, on utilise un champ scalaire référence de chaque structure NCEUD pour mémoriser l'appartenance d'un noeud à l'arbre de référence. # On affecte à chaque noeud de l'arbre de référence une liste de parents. champ liste-parents dans chaque structure NCEUD un pointeur sur le début de la liste de parents associée â ce noeud. Un élement de liste de parents contient un pointeur vers le noeud parent, Un pointeur sur la cellule liant le noeud à ce parent et un témoin indiquant si ce parent est une coupure ou non. Les éléments de liste de parents sont décrits dans le fichier d'en-tête structures.h . Les étapes spécifiques à la construction de l'arbre de référence figu rent en gras sur la figure 12. En particulier, lors de la construction de l'arbre de reférence, le test effectué ' l'étape 1216 détermine si le noeud connecté à la broche choisie a été ou référencée. Si tel est le cas, après l'étape 121 où il est vérifié que le mode est égal à 1, l'étape 1240 est mise en oeuvre. Elle consiste à ajouter parent au noeud de départ en tant que coupure. l'issue de cette étape, nouvelle broche d'entrée est choisie à l'étape 1 Si lors du test effectué à l'étape 1216, il est constate le noeud qui est connecté à la broche d'entrée n'a pas déjà été référencé, que le mode est égal à 1 lors du test effectué à l'étape 1220, l'étape 1 est mise en oeuvre. Lors de cette étape, le noeud considéré est référence et ce noeud est ajouté à la liste des parents du noeud de départ. A l'issue de cette étape, l'appel à la fonction noeud cherche sorties () est à nouveau effectué à l'étape 1224. Le sommet de l'arbre de référence est le noeud d'entrée de la cellule de sortie associée à la sortie de référence. La décomposition du graphe d'influence en arbres n'est pas unique. Elle dépend, en particulier, de l'ordre d'enregistrement des parents dans les listes de parents. Cependant ceci ne semble pas induire de problème parti culier au niveau de la méthode. étapes suivantes, notées 214 à 220, de la phase 110 de cons truction sous-ensemble minimal consistent à construire plus petit sous- ensemble de noeuds contenant les pannes et dans lequel effectuera la re cherche proprement dite de fautes. Ce sous-ensemble est dénommé "sous- ensemble minimal". sous-ensemble minimal est un sous-graphe de l'arbre de réfé rence. méthode de construction est donnée ci-dessous. Lorsque une ou plusieurs fautes affectent simultanément un groupe de sorties, leur position est à rechercher dans le sous-ensemble formé par l'intersection des cônes d'influence de ces sorties. Ce sous-ensemble est noté : nSNOKi ï où SNOKi est le cône d'influence de la sortie d'indice ' de la liste SNOK. sous-ensemble constitué par la réunion des cônes d'influence de sorties défaillantes correspond à un ensemble de nceuds qui ne sont pas points de propagation de fautes. sous-ensemble de ce type est noté : U SOKj j où SOKj est le cône d'influence de la sortie d'indice j de la liste SOK. sous-ensemble USOKj a, en général, une intersection non vide j avec sous-ensemble nSNOKi ï On peut donc réduire la recherche en éliminant de nSNOKi cette ï intersection. On obtient alors le "sous-ensemble minimal" noté SM dans lequel se ront effectuées toutes les recherches de fautes. Du point de vue formel, on a SM SNOKi - (n SNOKi n U SOKj ) ï ï j Le sous-ensemble SM est illustré sur la figure 13 en considérant deux cônes notés 1302 et 1304 correspondant â des sorties correctes SOK1 et SOK2 et deux cônes notés 1306 et 1308 correspondant â des sorties incor rectes SNOK1 et SNOK2. Le sous-ensemble minimal SM trouvé a la structure ensemble d'arbres disjoints. Les sommets de ces arbres sont réunis à noeud virtuel de manière à ce que les algorithmes de recherche appliqués par la suite n'aient à manipuler qu'un seul arbre. Pour une liste donnée de sorties défaillantes, la construction de l'intersection nSNOKi se fait en recherchant l'ensemble des noeuds qui in fluencent simultanément toutes les sorties de la liste. II peut donc se faire que l'intersection des sorties défaillantes con duise à un sous-ensemble vide. Tel est le cas si les sorties défaillantes ont des cônes disjoints ou bien si l'intersection est non connexe comme illustré sur la figure 14. Dans ce cas, il y a plusieurs zones défaillantes indépendantes. Dans le cas particulier de la figure 14, les cônes 1402, 1406, 1408, 1410 sont chacun associés à une sortie défaillante du circuit intégré. cône 1 est disjoint des cônes 1406 à 1410, ces trois derniers cônes sentant intersections. constate, par les zones hachurées sur la figure 14, que l'intersec tion cônes 1406 à 1410 forme deux ensembles disjoints notés 1412 et 141 alors que le cône 1402 constitue lui-même une zone défaillante dont l'étendue ne peut être réduite puisque celui-ci ne possède pas d'intersection avec les autres cônes associés à des sorties défaillantes. programme est adapté pour détecter ces cas particuliers et frac tionne liste des sorties défaillantes de manière à ce que pour chaque frac tion liste l'intersection trouvée par le programme soit connexe et mini male. Pour explorer correctement ces zones, l'opérateur doit re-exécuter le programme sur chacune des fractions de liste proposées. Dans un sous-ensemble connexe, le programme est adapté pour traiter fautes multiples, sauf si ces fautes interagissent et se corrigent mutuellement, par exemple. Afin de construire le sous-ensemble minimal, on construit d'abord à l'étape des listes de masques. A partir des listes de sorties SNOK et SOK, on construit deux listes de masques dont les adresses des premiers éléments sont contenues dans les pointeurs : masque_NOK et masque OK. Un élément de ces listes est une structure dont le type (MASQUE) est prédéfini dans l'en-tête structures.h . Le champ masque de ces structures est un entier du type prédéfini (TYPEMASQUE). II sert à coder les sorties citées dans la liste de sorties et relatives à un meure groupe. Ce groupe est mémorisé dans la même structure par le-. champ groupe qui est un entier ordinaire (int). Le principe du codage des sorties dans un masque est identique à celui adopté pour les marqueurs. Le nombre d'éléments d'une liste de mas ques donc le nombre de groupes nécessaires pour repérer les sorties citées dans la liste de sorties associée. La correspondance entre numéro de sortie et le groupe est déjà mémorisée dans le tableau groupeSortie[ cité précédemment. Les champs masques de ces listes de masques sont destinés à être comparés au contenu des marqueurs du même groupe de chacun des noeuds pour la réalisation des opérations d'intersection et d'exclusion. Pour que le mécanisme de marquage fonctionne, on ne doit pas avoir de référence multiple à une même sortie dans les liste de sorties. Pour la construction de la liste masque NOK, il ne faut tenir compte de la sortie choisie comme référence puisque c'est dans cône que sera recherchée l'intersection. Les différentes opérations d'intersection et d'exclusion nécessaires à la construction du sous-ensemble minimal se font en comparant mar queurs des nceuds de !'arbre de référence avec les masques construits à partir des listes SNOK et SOK. A l'étape 216, on procède ensuite à l'intersection des listes des SNOK. Pour décider si un n#ud est inclus dans l'intersection des listes des SNOK, on compare, pour chaque élément de la liste masqueSnok , la valeur du masque et le marqueur relatif au même groupe associé à ce naeud. Si le n#ud appartient à l'intersection, tous les bits égaux à un dans les masques doivent l'être dans les marqueurs correspondants pour tous les groupes de la liste masqueSnok . La comparaison fait en utilisant le ET logique. Ceci consiste, pour chaque élément de la liste de masques, â tester l'exactitude de la condition suivante : valeur marqueur(groupe) & va leur-masque == valeur masque. Sur la figure 15 représenté, d'une part, l'arbre de référence noté 1502 et, d'autre part, autre arbre 1504 associés à une sortie incorrecte. L'intersection deux arbres notée 1506 est entourée d'une ligne pointillée. On constate cette figure, que la structure de l'intersection est celle d'un ensemble de sous-arbres 1508 et 1510, dont les sommets 1512 et 1514 respectivement sont reliés par un arc orienté à au moins un noeud de chacun des arbres 1 et 1504. La structure de l'intersection est celle d'un ensemble de sous-arbres disjoints de l'arbre de reférence. Si ces arbres n'étaient pas disjoints, il existerait dans l'arbre de référence au moins un cycle, ce qui est impossible, par construction. Pour définir l'intersection 1506, il suffit donc de savoir énumérer les sommets 1512 et 1514 ces arbres. Pour trouver les sommets de ces arbres, on parcourt l'arbre de réfé rence depuis son sommet avec une procédure standard. Dés qu'on trouve un noeud qui appartient à l'intersection, il s'agit d'un sommet ; on l'enregistre dans une liste et l'algorithme rebrousse chemin comme s'il s'agissait d'une terminaison. Les coupures interrompent également la descente mais ne sont pas prises en compte en tant que sommet. S'il y a lieu, leur jumeau peut être pris comme sommet quand il est analysé. La méthode exposée dans le paragraphe précédent consiste à re chercher l'ensemble des noeuds qui influencent simultanément toutes les sorties de la liste des SNOK. Il peut donc se faire que l'intersection trouvée soit vide. Ceci est le cas si les sorties défaillantes ont des cônes disjoints ou bien si l'intersection est non connexe comme dans le cas de la figure 14. Lorsque l'intersection trouvée est vide, le programme recherche à l'étape 218 les intersections minimales connexes. Ces sous-ensembles sont les intersections de cônes qui ne contien nent plus aucune autre intersection. Avant de rechercher ces sous ensembles, il est nécessaire de re construire la liste (interne) des SNOK et celle des masques_NOK afin de tenir compte de la sortie qui avait été prise comme référence. Ensuite, la recherche s'effectue en trois phases. La première phase consiste à rechercher la liste de tous les sous- ensembles qui font intervenir au moins une sortie de la liste SNOK dans leur définition (liste primaire). Un sous-ensemble est repéré le marqueur du noeud courant de ce sous-ensemble, Cette liste est obtenue en balayant la liste des n#uds. Pour chaque nceud, on fait le ET logique entre composantes du marqueur et leur ho mologue (de même numéro de groupe) de la liste masque NOK. Si au moins un des résultats de ces ET nul, le marqueur de ce noeud défi nit un sous-ensemble pertinent. verifie si ce sous-ensemble n'a pas déjà été trouvé avant de l'enregistrer. A la fin de cette étape, la liste primaire contient donc la désignation de tous les sous-ensembles formés à partir des cônes des SNOK. Chacun des sous-ensembles y figure de manière unique. Du point de vue de la programmation, cette liste est une liste de structures de type IisteTableauxMasques . Le champ masque de ces structures est un pointeur sur le tableau d'entiers de type (TYPEMASQUE) contenant, pour chaque groupe, le résultat des opérations ET citées ci- dessus. Le champ inclusion sert, dans la seconde phase, à indiquer si le sous-ensemble contient un autre sous ensemble. La seconde phase consiste comparer chaque élément de la liste primaire avec les autres. La comparaison consiste à tester, pour chaque groupe, les conditions suivantes (masque-du-sous-ensemble & (masque du sous-ensemble B) __ (masque du sous-ensemble A). pour tous les groupes cette condition est vraie, le sous-ensemble est inclus dans A et A doit être rejeté puisqu'il ne peut, dès lors, être intersection minimale. Pour signifier ce rejet, on met à un le champ inclusion de la structure décrivant le sous-ensemble A. la fin de cette phase, les éléments de la liste dont le champ inclu-_. sion n' pas été mis à un sont les intersections minimales connexes recher chées. Si n est le nombre de sorties de la liste SNOK, le nombre total comparaisons à effectuer est égal à n(n-1). La troisième phase consiste à passer en revue tous les éléments de la liste primaire et, pour ceux dont le champ inclusion est nul, à cons truire, à partir du champ masque , un fichier texte contenant la liste noms sorties relatifs à ce sous-ensemble. Chaque fichier issu du fractionnement du fichier des SNOK initial porte un nom construit de la manière suivante nom ListelnitialeSNOK_fraction _numéro.snok . Le programme devra etre relance pour chacune de ces fractions de la liste initiale. L'étape suivante, notée 220, consiste en l'exclusion des SOK et des entrées. II s'agit de retirer de l'intersection les noeuds qui appartiennent à l'USOK (réunion des cônes des SOK). Dans le programme, on distingue les exclusions exhaustives et non exhaustives. Pour la construction du sous-ensemble minimal, on utilise le mode non exhaustif . Dans ce mode, on parcourt chacun des arbres de l'intersection et lorsqu'un noeud appartient à la réunion des SOK, on met à un le champ exclusion dans la structure NCEUD qui lui est attachée. Le parcours se fait avec l'algorithme à ordre préfixé les coupures sont des points de rebroussement et leur jumeau peut être exclu s'il appar tient à l'USOK. Pour déterminer si un noeud appartient à fUSOK, pour chaque élé ment de la liste masque OK, on compare la valeur du masque avec l'élément (de même numéro de groupe) du tableau de marqueurs associe à ce noeud. La comparaison utilise le ET logique. Si pour l'une au moins ces comparaisons les deux entiers ont un bit homologue égal à un, le noeud appartient à l'USOK. II s'agit donc de tester l'exactitude des conditions ' vantes : valeur marqueur(groupe) & valeur masque != 0. L'exclusion des noeuds connectés à la sortie des cellules d'entrée se fait, de façon triviale, en balayant la liste des broches du composant. A l'étape 222, est défini un sommet virtuel. Les sommets du sous-ensemble minimal sont reliés â un n#ud vir tuel. La variable globale sommet virtuel est un pointeur sur ce noeud. La fonction créer un_pseudo sommet( ) crée ce n#ud et initia lise ses champs. La numérotation du sous-ensemble minimal, réalisée à l'étape sui vante notée 224, consiste à mémoriser dans le champ compteur ancêtres de chaque n#ud le nombre total de ses ancêtres. On attribue aux noeuds exclus et aux coupures un nombre d'ancêtres nul. n#ud exclu offre une contribution nulle à son successeur, coupure offre une contribution d'une unité à son successeur. parents d'un n#ud sont ses ancêtres immédiats (directement rattachés). La figure 16 donne un exemple de numérotation. Cette numérotation est utilisée dans l'algorithme de localisation pour proposer des choix de n#ud à tester. Pour effectuer la numérotation d'un arbre, on parcourt une premiere fois arbre avec l'algorithme standard à ordre préfixé et on attribue champs compteur ancêtres la valeur nulle (phase d'initia l isation). Dans une seconde phase, on refait le parcours avec l'algorithme à ordre post-fixé et attribue au compteur d'ancêtres de chaque n#ud la valeur (somme des compteurs d'ancêtres des parents de ce noeud + nom bre de parents du noeud) La phase suivante du procédé désignée par la référence générale 124 la figure 1 consiste en la recherche des fautes par dichotomie dans le sous arbre minimal. cet effet, on détermine d'abord, à l'étape 230, suivant un critère qui sera explicité dans la suite, un noeud moyen dans le sous-arbre minimal puis on effectue à l'étape 232 un test physique sur ce noeud si ce noeud est tes- table. Pour évaluer si le noeud est testable, une vérification est effectuée l'étape Si la réponse est négative, plutôt que de solliciter le testeur 232, appel à la phase 126 du procédé est effectué. L'algorithme de dichotomie assure la convergence de la recherche vers une ou plusieurs zones défaillantes. Le principe simplifié est le suivant L'algorithme propose un test sur un noeud interne du domaine de cherche. Ce noeud est choisi de telle sorte que le nombre de ses ancêtres soit approximativement égal à la valeur moyenne du nombre d'ancêtres des noeuds du domaine de recherche, non encore testés. Si le signal sur ce noeud est normal, ce noeud est éliminé de là re cherche ainsi que tous ses ancêtres. Ceci est basé sur l'hypothèse selon laquelle si un noeud n'est pas point de propagation de faute, ses ancêtres, qui sont les noeuds suscepti bles de l'influencer ne le sont pas non plus. On obtient donc ainsi une réduction, à caractère exponentiel, de zone de recherche. Si le signal sur le noeud testé est anormal, c'est que ce noeud appar tient à une zone défaillante. II est alors pris comme nouveau point de départ des recherches. Comme certains noeuds ne sont pas testables et que les noeuds trou vés mauvais ne sont pas forcément des sommets de zones défaillantes, des tests de cohérence sont nécessaires avant de pouvoir déterminer les limites d'une zone défaillante. La présence de ces tests de cohérence, imbriqués dans la dichotomie, complique singulièrement l'algorithme. Celui-ci est décrit en détail dans la suite de la description. Le sous-ensemble minimal dans lequel les fautes sont recherchées est un ensemble d'arbres disjoints. Les sommets de ces arbres forment la liste des parents d'un noeud virtuel destiné à manipuler le sous-ensemble minimal de façon globale. En fonction du moyen de test utilisé, on spécifie une profondeur limite de testabilité des noeuds (profondeur maxi). Suivant l'implantation du circuit (désignée par "layout" en anglais), la profondeur limite spécifiée peut rendre une partie des noeuds non-testables (y compris les parents du noeud virtuel). On peut, de plus, déclarer une partie des noeuds -testables indé pendamment de leur profondeur. Les terminaisons, testables ou non, du sous-ensemble minimal peu vent être # Des coupures ; # Des noeuds de sortie de cellules d'entrée (déjà exclus) ; # Des noeuds frontières d'USOK (déjà exclus). A chaque noeud est affectée une variable contenant le nombre total de ses ancêtres. Les coupures et les noeuds d'entrée un nombre d'ancêtres nul. Les caractères du noeud virtuel sont, par convention # Non-testable # Défaillant Non exclu En outre, les données suivantes sont également mises en oeuvre par le programme # liste des noeuds internes déjà testés (liste facultative). Cette liste est complétée automatiquement par le programme au fur et à mesure que des nouveaux tests sont effectués. Si elle est inexistante, le programme la crée. # liste (facultative) de noeuds que l'opérateur, pour des raisons diverses, considère comme non-testables. # Le fichier donnant le "niveau métal" de chacun des noeuds internes à tester (facultatif). Tout noeud non cité dans cette liste est considéré, par défaut, comme étant au niveau "métal 1". Si la liste n'existe pas, tous noeuds sont considérés comme étant au niveau "métal 1". *En effet, n#ud donné est toujours situé sur une "piste" d'intercon nexion. En général, les pistes d'interconnexion sont réparties sur des "ni veaux" situés à différentes profondeurs. Ces niveaux d'interconnexion sont- séparés par couches isolantes (Si02, Si3N4, etc. ...). Le premier niveau d'interconnexion appelé "métal 1" est, par conven tion, celui qui est le plus proche de la surface. Le dernier est celui qui est le plus proche du semi-conducteur. Le programme supporte 253 niveaux mais on pourrait étendre ce nombre sans problème. Mesurer l'état d'un n#ud à partir d'un testeur suppose que ce testeur sache sonder circuit jusqu'à la profondeur d'interconnexion associée à ce nceud. Pour testeur donné, il existe donc une limite de visibilité noeuds. Cette limite de testabilité est appelée "profondeur maximale de test" (variable "profondeur maxi" dans le code). Elle doit être spécifiée par l'utili sateur suivant moyen de test utilisé. Les fichiers, facultatifs, dont on dispose sont # Un fichier donnant la profondeur des noeuds (niveau métal = 1 par défaut) # Un fichier de noeuds non-testables (seuls les noeuds spécifiés sont non-testables) # Un fichier de nceuds déjà testés (créé par le programme s'il est inexistant) Les paramètres de recherche sont # La profondeur maximale de test # Le critère d'arrêt des recherches (une cellule défaillante ou une zone défaillante ou toutes les parties défaillantes). L'algorithme de recherche est basé sur le principe de dichotomie. II assure, généralement, la convergence de la recherche vers une ou plusieurs zones défaillantes. L'algorithme propose un test sur un n#ud interne du domaine de cherche. Ce n#ud est choisi de telle sorte que le nombre de ses ancêtres soit approximativement égal à la valeur moyenne du nombre d'ancêtres noeuds du domaine de recherche, non encore testés. Le noeud choisi est dit "noeud moyen". Ce n#ud doit, plus, satisfaire les contraintes suivantes # II doit être testable ; # Ne pas avoir déjà été trouvé défaillant _ . # Ne doit être un sommet de zone défaillante # Ne doit être exclu # Ne doit être l'ancêtre d'un noeud exclu après test # Ne doit être l'ancêtre d'un sommet de zone défaillante La réponse concernant le résultat du test du signal sur ce n#ud peut être fournie automatiquement par le testeur ou bien entrée au clavier par l'opérateur. Si le signal n#ud est normal, ce n#ud est éliminé de la re cherche ainsi que tous ancêtres. Pour éliminer noeud, on l'exclut, ainsi que tous ses ancêtres, en mettant à un les champs exclusion des structures de données associées à ces nceuds (exclusion dite exhaustive). Une fois cette exclusion opérée, on renumérote (en nombre d'ancêtres) le sous-ensemble minimal depuis le sommet virtuel, de telle sorte que le nouveau calcul de n#ud moyen ne tienne plus compte nouveaux n#uds exclus. Si le signal sur n#ud testé est anormal, c'est que ce n#ud est en aval d'une zone défaillante. II est alors pris comme nouveau point de départ des recherches. La technique de programmation adoptée est récursive. La même fonction est utilisée avec certains paramètres d'entrée hérités du contexte précédent. Notamment, sommet de la recherche est maintenant le n#ud dont le signal a été déclaré mauvais. On n'effectue pas de récurrence sur une coupure. On se contente de la marquer mauvaise si le signal est mauvais sur son n#ud jumeau. Au retour de chaque récurrence, suivant les décisions prises relati vement au critère d'arrêt spécifié, on peut sortir de la fonction ou bien conti nuer à chercher parmi les noeuds proposables non encore testés. Lorsque la recherche doit se poursuivre, c'est-à-dire que l'on souhaite trouver toutes les zones défaillantes ou bien que les noeuds testés mauvais et tests de cohérence effectués ne permettent pas, à ce stade, de décla rer zone défaillante. Des tests de cohérence sont nécessaires avant de pouvoir déterminer les limites d'une zone défaillante. Ceci est lié au fait que certains noeuds ne sont pas testables et que les noeuds trouvés mauvais ne sont pas forcément des sommets zones défaillantes. Les tests de cohérence et les tests d'exactitude du critère d'arrêt spé cifié sont effectués lors de la phase 126 d"'analyse après épuisement". Le premier appel de l'algorithme de recherche est fait depuis som met virtuel du sous-ensemble minimal. La zone de recherche initiale est donc le sous-ensemble minimal. L'algorithme de recherche constituant la fonction dichotomie( ) est explicité dans l'organigramme de la figure 17. La fonction dichotomie () reçoit en entrée le critère d'arrêt 1702, le sommet virtuel 1704 de l'arbre sur lequel elle opère ainsi que le sommet 1706 de la recherche. A l'étape 1708, un noeud moyen satisfaisant les contraintes spécifiées est proposé. Ce noeud moyen est déterminé comme cela sera expliqué ulté rieurement par une mise en oeuvre de la fonction chercher noeud_moyen () exposée en regard de la figure 18. II est vérifié à l'étape 1710 que ce noeud moyen existe. Si tel n'est pas le cas, l'étape 1712 est mise en oeuvre au cours de laquelle le reste de l'ar bre est analysé sans mise en ceuvre du testeur. A cet effet, la fonction ana- lyser-cellules-restantes () est mise en ceuvre pour tenter de fractionner l'ensemble des noeuds restant en zone défaillante. La fonction analy ser cellules-restantes () sera décrite ultérieurement en regard de la figure 23 tenant compte des algorithmes qu'elle met en oeuvre et qui sont dé crits aux figures 24 à 28. Si par contre, il est révélé à l'étape 1710 qu'un n#ud moyen satisfai sant contraintes spécifiques existe, ce n#ud est testé à l'étape 4 par mise oeuvre du testeur. cet effet, une séquence de tests prédéterminés est appliquée aux bornes d'entrée du circuit intégré et le signal obtenu au point de mesure cor--- respondant au n#ud moyen déterminé à l'étape 1708 est mesuré compa ré au signal théorique devant être obtenu en ce point. le signal mesuré est identique au signal théorique devant être ob tenu, le n#ud est considéré comme bon. Sinon, le n#ud est considéré comme mauvais. Suite aux tests opérés à l'étape 1716, si le n#ud est bon, celui * est exclu à l'étape 1718 et l'arbre de recherche est numéroté depuis sommet virtuel défini en 1704. L'étape 1708, ainsi que les étapes ultérieures sont remises en oeuvre sur la seule partie de l'arbre obtenue après exclusion du n#ud moyen précédemment testé. Si par contre à l'étape 1716, le n#ud est détecté comme mauvais, celui " est marqué comme mauvais à l'étape 1720. L'étape ultérieure 722 consiste à vérifier si le n#ud marqué mauvais est ou non une coupure. Si tel est cas, un autre n#ud de l'arbre est testé par une nouvelle mise en oeu- vre des étapes 1708 et suivantes. Par contre, si le noeud marqué mauvais n'est pas une coupure, ce n#ud devient à l'étape 1724 le nouveau sommet de recherche servant à une nouvelle mise en oeuvre récursive de la fonction dichotomie () appli quée avec comme nouveau sommet de recherche en 1706 le n#ud moyen précédemment considéré comme mauvais. A l'issue de l'application récursive de la fonction dichotomie () à l'étape 724, il est testé à l'étape 1726 si le critère d'arrêt considère en 1702 est ou satisfait. Tant que ce critère n'est pas satisfait, de nouveaux noeuds moyens sont proposés à l'étape 1708 et testés aux étapes ultérieu res. Dès que le critère d'arrêt est satisfait à l'étape 1726, il est mis un terme à l'étape 1728 à la fonction dichotomie et le résultat de l'analyse mise à la disposition de l'utilisateur. recherche du noeud moyen opérée à l'étape 230 de la figure 2 cor respondant à l'étape 1708 de la figure 17 s'effectue en deux phases. Dans la première phase notée 234, on parcourt l'arborescence dans laquelle 'effectue la recherche et on calcule la valeur moyenne du nombre d'ancêtres. Dans la seconde phase notée 236, on reparcourt l'arborescence et on cherche le noeud dont le nombre d'ancêtres est le plus proche, inférieure ment, la valeur moyenne calculée à l'issue de la première phase. indicateur de coupure du nceud moyen proposé est également donné. fonction chercher noeud moyen () qui assure la coordination de ces deux phases est décrite en regard de la figure 18 dans l'organigramme du calcul et de la localisation du noeud moyen. Les fonctions relatives aux deux phases sont décrites dans les paragraphes suivants, respectivement au regard de la figure 19 et des figures 19, 20 et 21. La fonction chercher noeud_moyen () mise en oeuvre à l'étape 1708, dispose en entrée, en 1802, du sommet de la recherche, c'est-à-dire du sommet de l'arbre dans lequel la recherche du noeud moyen est effec tuée. A l'étape 1804, un test est effectué pour déterminer si ce sommet est NULL, c'est-à-dire si l'arbre est vide. Si tel est le cas, à l'étape 1806, la va riable solution est fixée à 0, ainsi que la variable indiç coupure. Le résultat de la fonction est retourné à l'étape 1808 avec les valeurs associées à solu tion et indiç coupure. Les définitions de solution et indic coupure seront données dans la suite de la description en référence aux figures 20 et 21. En revanche, si l'arbre n'est pas vide, c'est-à-dire que sommet testé à l'étape 1804 est non nul, l'étape 1810 est mise en oeuvre application de la fonction calcul moyenne () qui sera décrite en référence à la figure 19. Lors cette étape, le nombre total de noeuds de l'arbre calculé par à un parcours de celui-ci. De même, le calcul du cumul des nombres d'an cêtres effectué. Le résultat de ces calculs est mémorisé respectivement dans les variables nombre total de noeuds et Cu mul -nombres-d'-ancêtres. Lors du test de l'étape 1812, le nombre total de n#uds est compa ré par la valeur . Si le nombre total de noeuds est égal à 1, la moyenne est prise égale cumul des-nombres-d'-ancêtres à l'étape 1814. En revanche, si le nombre total de nceuds est supérieur à 1, la moyenne est calculée à l'étape 1816. _ -- Quel soit le mode de calcul de la moyenne à l'étape 1814 ou 1816, l'algorithme procède à l'étape 1818 à la localisation du noeud moyen, permettant de déterminer la variable solution ainsi que l'indicateur de cou pure noté indiç coupure. L'algorithme de localisation du noeud moyen sera décrit ultérieurement en référence à la figure 19 modifiée conformément aux figures 20 et 21. A l'étape ultérieure 1820, la solution obtenue pour le noeud moyen à l'étape 1818 est comparée aux valeurs particulières NULL et sommets. Si la variable solution est égale à l'une de ces valeurs, les variables solution et indiç coupure sont fixées à 0 à l'étape 1822. Dans tous les cas, l'étape 1 est enfin mise en oeuvre mettant à disposition le résultat de la fonction cherche naeud moyen (). La fonction calcul moyenne () décrite sur la figure 19 dispose en entrée du sommet 1902 de l'arbre considéré, du total des ancêtres de cet arbre 1904, ainsi que nombre de noeuds 1906 de l'arbre considéré. A l'étape 1908, il est vérifié que le sommet considéré en 1902 testable. Si tel est le cas, à l'étape 1910, la variable nombre_nceuds est crémentée et le nombre d'ancêtres du sommet est cumulé dans la variable total ancêtres. Que le sommet considéré en 1902 soit ou non testable, l'étape ulté rieure 1912 consiste à proposer un parent du sommet, ceci afin de parcourir progressivement l'arbre. Si lors du test effectué à l'étape 1914, il est cons taté qu'il n'existe pas de parent au sommet considéré, il est mis un terme à la fonction calcul_moyenne () à l'étape 1916 et les résultats de la fonction à savoir la variable nombre noeuds et l'accumulateur sont retournés. En revanche, si lors du test de l'étape 1914, le parent proposé pour sommet existe, il est vérifié à l'étape 1918 que ce parent est exclu ou vais. Si tel est le cas, l'étape 1912 est à nouveau mise en oeuvre. Si tel est pas le cas, il est testé à l'étape 1920 que le parent consi déré est ou une coupure. S'il ne s'agit pas d'une coupure, la fonction calcul_moyenne () est mise en ceuvre de manière récursive à l'étape 1 A l'issue de cette mise en oeuvre récursive, l'étape 1912 de proposition d'un autre parent sommet considéré est à nouveau exécutée. En revanche, si à l'étape 1920, il est conclu que le parent considéré est une coupure, il est vérifié à l'étape 1924 si cette coupure est ou non tes- table. Si elle n'est pas testable, un nouveau parent est proposé à l'étape 1912. Si cette coupure est testable, la variable nombre noeuds est incré mentée à l'étape 1926, avant qu'un nouveau parent du sommet ne soit posé à l'étape 1912. Pour le calcul de la moyenne à l'étape 234 de la figure 2 correspon dant à l'étape 1810 de la figure 18, on parcourt l'arbre et, pour chaque noeud pertinent, on cumule dans un accumulateur le nombre de ses ancêtres on incrémente compteur de noeuds. On ignore les noeuds exclus ou testés mauvais ainsi que leurs ancê tres. La récurrence se produit sur les nceuds pertinents qui ne sont pas des coupures. coupures non testables sont ignorées. Les coupures testa- bles ne donnent lieu qu'à l'incrémentation du compteur de noeuds (nombre d'ancêtres nul). Pour le premier appel de la fonction, on initialise à zéro l'accumu lateur et le compteur de noeuds. Pour le premier appel, le sommet donné ne doit pas être un noeud exclu. L'algorithme détaillé du calcul du nombre de noeuds et du cumul des ancêtres constituant la fonction calcul_moyenne() est donné dans l'organigramme de la figure 19. La procédure de localisation du noeud moyen à l'étape 236 de la fi gure 2 correspondant à l'étape 1818 de la figure 18 est semblable à la pro cédure précédente moyennant quelques adaptations. Le nom de cette procédure est : localiser moyenne(). Pour en obtenir l'organigramme de la fonction localiser moyenne (), il suffit remplacer l'étape 1910 par le bloc de la figure 20, l'étape 1926 par le bloc de la figure 21. D'autre part, les paramètres d'entrée sont : Sommet, moyenne, Solu tion, indic coupure et precedent . Le paramètre precedent est la der nière meilleure valeur approchée trouvée pour le nombre d'ancêtres du noeud moyen. Le premier appel de la fonction se fait avec precedent = 0. Solution est le meilleur noeud trouvé et indiç coupure indicateur de coupure. Les noeuds déjà déclarés comme sommets de zones défaillante ne sont pas proposés comme noeuds moyens puisqu'ils sont interpretés comme noeud mauvais et écartés. Plus précisément, et comme représenté sur la figure 20, lorsqu'à l'étape 1908, le sommet est considéré comme testable, il est calculé une variable logique T à l'étape 2002. Celle-ci est donnée par T = (Sommet->compteur ancetres= Un test de la valeur de la variable T est effectué à l'étape 2004. Si cette variable est fausse, un nouveau parent du sommet est proposé à l'étape 1912. En revanche, si la variable T est vraie, alors à l'étape 2006, les va leurs des variables précédentes indiç coupure sommet sont modifiées comme indiqué ci-dessous precedent=Sommet->compteur ancetres Indiç coupure=0 Solution=Sommet De même, en remplacement de l'étape 1926, et comme représenté sur la figure 21, il est d'abord défini à l'étape 2102 une variable logique T. Celle-ci est définie par T= (nceud->compteur ancetres= compteur ancetres≥precedent) A l'étape 2104, la valeur logique de la variable T est testée. Si celle est fausse un nouveau parent du sommet est proposé à l'étape 1912. En revanche, si la variable T est vraie, à l'étape 2106, les valeurs variables précédentes, indiç coupure et solution sont modifiées comme diqué ci-dessous Precedent=nceud->compteur ancetres Indiç coupure=1 Solution=noeud Après détermination du n#ud moyen, le test de celui-ci se fait par sollicitation du testeur à l'étape 232 de la figure 2, correspondant à l'étape 1714 de figure 17 avec la fonction tester noeud( ). Cette fonction a comme paramètre d'appel l'adresse du noeud à tester. Avant de solliciter le testeur, cette fonction vérifie si le n#ud n'a pas déjà été testé en analysant le contenu du fichier des noeuds testés. Si le ré sultat est connu, il est immédiatement utilisé dans le programme. Dans le cas contraire, cette fonction interroge le testeur sur ce noeud. La réponse testeur, indépendamment de son utilisation dans le programme, est archivée dans le fichier des noeuds testés. Ceci évite, si on doit relancer le pro gramme, d'avoir à refaire des tests sur ces noeuds. La réponse fournie si le noeud a un fonctionnement correct est 1 . Si le noeud est trouvé défaillant, la réponse doit être 0 . La sollicitation du testeur est assurée par la fonction interro- ger-testeur( ). Cette fonction écrit dans un fichier texte le nom du n#ud tester et vient périodiquement relire le contenu de ce fichier. Lorsque le tes teur a répondu, la fonction retourne la réponse à la fonction tester n#ud( ). Le nom du fichier d'interface (absolu ou relatif) est défini dans le fi chier d'en tête general.h . Dans ce fichier sont également définis les tres paramètres intervenant dans le contrôle du testeur (durée entre deux lectures fichier d'interface et dépassement de temps sur la réponse - teur). Les opérations d'écriture et de lecture dans le fichier d'interface ne nécessitent aucune synchronisation entre le testeur et le programme. Des contrôles de cohérence sur le nom du n#ud et sur la réponse du testeur sont effectués dans la fonction interroger testeur( ) à chaque test. Le dialogue entre le testeur et le programme suit le protocole suivant # Le programme vide ou crée le fichier d'interface et écrit sur la première ligne le nom du n#ud à tester sans faire de retour la ligne. Le testeur est censé venir lire périodiquement ce fichier. Dès qu'il détecte la présence d'un nom de noeud nouveau, il effectue le test et répond mode append ) par un retour à la ligne suivi l'entier 0 ou 1 non suivi retour à la ligne. # Le programme vient lire périodiquement le fichier d'interface. Dès qu'il détecte la ligne supplémentaire, il sait que le testeur a répondu et le contenu de cette ligne est interprété numériquement par fonction stan dard fscanf( ) du langage C. Les flux du fichier d'interface vers le programme et le testeur sont dis tincts et peuvent être simultanés. Un programme pseudo testeur peut être lancé arrière plan (option & du shell). II permet d'écrire manuellement dans le fichier d'interface. L'opérateur peut ainsi répondre au clavier à la place du testeur. L'accès simultané au fichier d'interface est ainsi possible trois flux (le programme, le testeur et le pseudo testeur). Pour écrire le programme d'accès du testeur au fichier d'interface, on peut partir fichier source pseudo testeur.c et des en-têtes associées. L'algorithme de dichotomie est mis en oeuvre jusqu'à épuisement du sous-arbre minimal. L'analyse après épuisement d'un niveau objet de la phase 126 dans l'organigramme de la figure 1 est demandée par l'algorithme dichotomie quand il ne reste plus de n#ud proposable à tester. II s'agit alors de tenter de fractionner l'ensemble des noeuds restant en zones défaillantes. Suivant le critère d'arrêt choisi et le résultat des tentatives de frac tionnement, restitue soit la valeur 0 (critère non satisfait) soit la valeur 1 (critère satisfait). Pour un contexte donné de l'algorithme de dichotomie, lorsque tous les noeuds proposables ont été épuisés, les extrémités du sous-arbre analy sé ne peuvent etre que # noeuds de sortie de cellules d'entrée. Ces noeuds sont déjà exclus le départ. Ils seront dénommés noeuds d'entrée ; -- -- # noeuds frontières d'USOK (déjà exclus dés le départ) ; # coupures exclues ; # coupures testées mauvaises ; # coupures non testables. Les noeuds internes restant peuvent être # noeuds non testables ; # noeuds déclarés sommet de zone défaillante ; # noeuds testés mauvais mais non déclarés sommet de zone défaillante . Remarques # peut pas exister d'extrémité non testable qui ne soit ni une entrée, ni frontière d'USOK, ni une coupure. # Le sommet de l'arborescence à analyser ne peut être qu'un noeud testable et trouvé mauvais (il ne peut s'agir d'une coupure). # On considère que les ancêtres d'un sommet de zone dé faillante ne sont plus accédés par la suite. Pour décider si une zone est défaillante, on se réfère à définition donnée en regard de la figure 5. II découle de cette définition la pré sence de coupures testées mauvaises ou de coupures non testables cons titue un obstacle pour déclarer une zone défaillante. II est donc necessaire d'analyser l'environnement de ces coupures dans le reste de l'arbre de ma nière à lever le doute toutes les fois où cela est possible. Cette opération est dénommée "résolution des coupures". Elle consiste à rechercher ' les cou pures présentes ont leur noeud jumeau dans la zone de recherche cours. Sur la figure 22 est donné un exemple de résolutions autorisées et interdite, un exemple "d'effet gigogne" et un exemple de trois zones dé faillantes séparables. "L'effet gigogne" sera défini dans la suite de la des cription. Les noeuds de l'arbre représentés sur la figure 22 sont différenciés en reprenant les conventions graphiques utilisées jusqu'alors. Ainsi, les noeuds mauvais sont désignés par un rond au centre duquel figure croix. noeuds non testables sont désignés par un rond à l'intérieur duquel figure point d'interrogation, les noeuds bons sont désignés par un rond à l'intérieur d.u-._ quel figure un autre rond, et les coupures sont désignées par un rond à l'in térieur duquel figure un carré. Les coupures constituant des noeuds non testables ou nceuds mauvais présentent intérieurement outre un carré, respectivement croix et point d'interrogation. Sur l'arbre de la figure 22, trois zones défaillantes désignées par les références 2202, 2204 et 2206 sont entourées par un cerclage en pointillés. zones défaillantes présentent par définition un sommet constitué d'un noeud mauvais, qui pour des raisons de clarté a été encadré un rectan gle. Ces noeuds mauvais ont pour parent au moins un noeud testable et éventuellement des nceuds bons. Les trois zones défaillantes sont séparées puisqu'elles ne comportent pas de noeud commun. A l'intérieur de la zone défaillante 2206, figurent deux coupures 2208 et 2210. Ces coupures correspondent à des nceuds jumeaux respectivement des noeuds 2212 et 2214. L'association des coupures avec leurs noeuds ju meaux est représentée par un lien pointillé 2216 et 2218. Dans la mesure où les coupures 2208 et 2210 ont leurs noeuds ju meaux dans une même limite de zone défaillante 2208, la résolution est autorisée. En revanche, la coupure notée 2218 ayant pour noeud jumeau le noeud 2220 comme indiqué par le lien pointillé 2222 se situe hors de la limite de zone défaillante 2206. II est donc inutile de tenter de résoudre cette coupure par accès in terne à la zone déclarée défaillante 2206 étant donné que la zone défaillante qui pourrait en résulter inclurait de toute façon la première sans apporter, apparemment, d'information supplémentaire. D'autre part, une zone ne doit pas être déclarée défaillante si au moins une ses terminaisons est un sommet de zone déjà déclarée dé faillante. appelle ce phénomène l'effet gigogne . Les algorithmes crits ci-après sont adaptés pour le détecter et en tenir compte. exemples d'effets gigognes identifiés par les références 2230 2234 apparaissent sur la figure 22 aux sommets des zones défaillantes 2202 et 2206. Dans le sous-arbre où est faite l'analyse des n#uds restant, coupure (mauvaise ou non-testable) peut être connectée à Un n#ud exclu ; Un Nceud ; Sommet; Nceud interne non testable; Un nceud non exclu. Coupure non testable ; #' Coupure mauvaise ; Rien. N#ud interne testé mauvais. Cependant, il existe, par définition, des impossibilités. Les cas possi bles et impossibles sont résumés dans le tableau ci-dessous Les impossibilités de résolution sont repérées par la lettre "I" ; elles sont dues à conflits "bon l mauvais" ou "testable I non-testable". La let tre "P" indique la résolution de la connexion est possible. Coupure Coupure mauvaise Non testa ble Naeud exclu I P Sommet P 1 Noeud interne non testable 1 P Connectée à : Coupure non testable 1 P Coupure mauvaise P I Rien P P Nceud interne mauvais P Ceci conduit au tableau suivant résumant les possibilités de résolu tion des coupures. Les lettres "R" indiquent que la coupure peut être réso- la lettre "D" indique que le doute ne peut pas être levé. Les cases vides correspondent à des résolutions impossibles. Coupure Coupure mauvaise Non testa Noeud exclu R Sommet R Noeud interne non testable R Connectée à : Coupure non testable D Coupure mauvaise D Rien D D Nceud interne mauvais R En résumé, le critère de résolution peut s'énoncer Une coupure testée mauvaise sera résolue si elle a pour jumeau (dans la zone à analyser) le sommet ou un noeud interne testé mauvais. Une coupure non-testable sera résolue si elle a pour jumeau dans zone à analyser) un noeud exclu (frontière d'USOK ou noeud d'entrée) un noeud interne non-testable. L'analyse des noeuds restants consiste donc à dresser la liste des candidats pouvant être déclarés sommet de zone défaillante. Pour chacun de ces candidats on analyse le sous-arbre dont il est le sommet en appli quant le critère résolution des coupures. La résolution toutes les cou pures sous ce noeud est la condition nécessaire mais suffisante pour que la zone puisse être déclarée zone défaillante. L'algorithme détaillé de l'analyse après épuisement constituant la.. fonction analyser-cellules-restantes( ) est donné sur l'organigramme de la figure 23. La fonction analyser cellules-restantes () dispose en entrée du sommet 2302 de l'arbre considéré. La valeur de ce sommet est testée à l'étape 2304. ce sommet est NULL, la variable réponse est fixée à 0 à l'étape 2306 et la valeur de la va riable réponse est retournée à l'étape 2308 en tant que résultat de la fonc tion analyser cellules-resta ntes (). En revanche, si le sommet est différent de NULL à l'étape 2304, la liste des candidats à la résolution est construite à l'étape 0 par mise en oeuvre de la fonction construire-liste-candidats () qui sera décrite en re gard de la figure 24. Lors du test effectué à l'étape 2312, si la liste de candidats est nulle, alors la valeur de la variable réponse est fixée à 0 à l'étape 4 puis l'étape 2308 est mise en couvre. En revanche, si la liste est non nulle, la fin de la liste est considérée à l'étape 2316 puis à l'étape 2318, un élément de la liste est choisi en remon tant celle-ci. Si lors du test effectué à l'étape 2320, on constate qu'aucun élément ne peut être choisi, la liste est libérée à l'étape 2322 et la variable réponse est fixée à 0 à l'étape 2324 avant que l'étape 2308 ne soit effectuée. En revanche, si un élément de la liste peut être choisi, il est procédé, à l'étape 2326, à l'analyse des noeuds situés sous ce noeud considéré alors comme au sommet. Cette analyse est effectuée par mise en couvre de la fonction analyser sous ce sommet () qui sera décrite ultérieurement en référence à la figure 25. Après l'analyse sous le noeud choisi, il est vérifié à l'étape 2328 si le critère est ou non satisfait. Si tel n'est pas le cas, les étapes 2318 et sui- vantes sont à nouveau mises en oeuvre. Au contraire, si le critère est satis fait à l'étape 2330 la variable réponse est fixée à 1 avant que cette réponse soit retournée à l'etape 2308. Lorsqu'on est dans un contexte donné des récurrences de l'algorithme de dichotomie et qu'on exécute la phase d'analyse du reste de . l'arbre, il s'agit de trouver d'éventuelles zones pouvant être déclarées dé faillantes. Les différents candidats pouvant tenir le rôle de sommet pour ces zones sont les noeuds testés mauvais.et non encore déclarés sommets zone défaillante. Pour avoir des zones défaillantes de taille minimale, on doit recher cher les sommets de ces zones parmi les nceuds testés mauvais les plus proches des entrées et remonter ensuite vers le sommet. Dans un premier temps, on construit à l'étape 240 de la figure 2 respondant à l'étape 2310 de figure 23 la liste de ces candidats. Pour cela on parcourt l'arbre suivant la procédure à ordre post-fixé en ignorant nceuds exclus, les coupures et les sommets de zones défaillantes ainsi que leurs ancêtres. On n'enregistre que les sommets testés mauvais que l'on rencontre. La liste construite doit être relue de la fin vers le début par utilisation du pointeur de parcours inverse. La liste comporte en fait au moins un élément à savoir: le sommet. L'algorithme détaillé de construction de la liste constituant la fonction construire-liste-candidats( ) est donné dans l'organigramme de la figure 24. La fonction construire-liste-candidats () reçoit en entrée le sommet 2402 de l'arbre considéré. A l'étape 2404 un parent du sommet est proposé. II est vérifié lors du test de l'étape 2406 si un tel parent existe. Si ce parent existe, il est défini à l'étape 2408 une variable logique notée condition. Cette variable est définie par Condition=non exclu & non coupure & non sommet de zone def, Cette variable condition permet de tester si le parent considéré n'est ni exclu, ni une coupure, ni le sommet d'une zone défaillante. A l'étape 2410 la valeur booléenne de la variable condition est - luée, Si celle ' est fausse, c'est-à-dire que le parent considéré est soit clu, soit une coupure soit le sommet d'une zone de définition, un nouveau parent est proposé. Si la variable condition est vraie, c'est-à-dire que noeud considéré n'est pas exclu, n'est pas une coupure et n'est pas le - . met d'une zone défaillante, un nouvel appel récursif à la fonction cons- truire-liste-candidats () avec pour variable le parent considéré est effectué à l'étape 24 Un nouveau parent est- à nouveau proposé à l'étape 2404 à l'issue de l'étape 2412. Lorsqu'il n'est plus possible de proposer des parents, la réponse au test de l'étape 2406 est négatif. Dans ce cas, il est vérifié à l'étape 2414 si le sommet teste est ou non mauvais. Si tel est le cas, le sommet est enregistré à l'étape 2416 avant l'achèvement de la fonction. Sinon, la fonction cons- truire-liste-candidats () s'achève sans enregistrement du sommet consi déré. L'analyse sous un sommet effectuée à l'étape ultérieure 242 de fi gure 2 correspondant à l'étape 2326 de la figure 23 consiste à déterminer si les coupures trouvant sous un sommet peuvent être résolues. Dans un premier temps, on établit à l'étape 244 la liste des coupures, on détecte la présence éventuelle de noeuds non testables et la présence éventuelle effet gigogne. Une fois cette liste établie, on tente à l'étape 246 de résoudre coupures. En fonction du résultat obtenu, on teste le critère d'arrêt spécifié et on retourne au contexte d'appel. La détermination de la décision se fait de la façon suivante # Si le critère d'arrêt est une cellule défaillante , décision = si, à la fois, toutes les coupures sont résolues, tous les noeuds internes la zone sont testables et s'il n'y a pas d'effet gigogne. Dans le cas contraire, décision = 0. # Si le critère d'arrêt est une zone défaillante , décision = 1 si, à la fois, toutes les coupures sont résolues et s'il n'y a pas d'effet gigogne. Décision = 0 dans le cas contraire. a le critère d'arrêt est tout , décision = 0 quelle que soit l'analyse. Le détail de l'algorithme d'analyse sous un noeud sommet constituant la fonction analyser-sous-ce-sommet( ) est donné sur la figure 25. La fonction analyser-sous-ce-sommet () reçoit en entrée le met 2502 de l'arbre considéré ainsi qu'un critère d'arrêt 2504. La première étape 2506 consiste à construire la liste des coupures, analyser la testabilité de celle-ci et détecter l'éventualité d'un "effet gigogne . Cette étape réalisée par la mise en oeuvre de la fonction lis ter coupures a_resoudre () qui sera décrite en détail en regard de la Bure 26. . A l'issue de cette étape, les coupures sont résolues à l'étape 2508 la liste des coupures est libérée. Cette résolution des coupures s'effectue par la fonction resoudre Coupures () qui sera décrite en détail en regard de la figure 27. A l'étape 2510 est définie une variable logique T. Celle-ci est définie par: T=coupures toutes résolues & pas d'effet gigogne Un test est effectué à l'étape 2512 sur la valeur de la variable logique T. Si celle-ci est vraie, c'est-à-dire que toutes les coupures peuvent être ré solues et qu'il n'y a pas d'effet gigogne, le sommet considéré en 2502 est enregistré dans la liste des zones défaillantes à l'étape 2514. A l'étape 2516, on effectue l'opération suivante sommet->sommet zone def=1. A l'issue de l'étape 2516, ou si la variable T est fausse à l'issue l'étape 2510, une décision quant à l'analyse est prise à l'étape 2518 suivant la méthode de détermination exposée précédemment. Ensuite, cette déci sion est retournée de l'étape 2520 en tant que réponse à la fonction analy- ser-sous-ce-sommet (). Pour établir la liste des coupures à l'étape 244 de la figure 2 corres pondant à l'étape 2506 de la figure 25, on parcourt l'arbre à analyser avec la procédure â ordre préfixé. Dès qu'on trouve un sommet de zone défaillante, un indicateur d'effet gigogne est mis à un. De même, dès qu'un noeud non- testable est rencontré, un indicateur de testabilité est mis à zéro. qu'on rencontre une coupure mauvaise ou non-testable, on la rajoute tant qu'élément dans la liste et on incrémente le compteur de coupures. pro grammation est récursive. Le nouveau sommet est le nceud associé Pa rent en cours et les paramètres nombre-de-coupures, testabilité et gigogne_ sont passés par référence pendant les récurrences. Au premier appel, le nombre de coupures doit être initialisé zéro, testabilité doit être initialisé à un et gigogne doit être initialisé à zéro. Au premier appel, sommet n'est ni exclu, ni coupure, ni sommet de zone dé faillante, mais testable et testé mauvais. L'algorithme détaillé de la construction de la liste des coupures cons tituant la fonction lister coupures a resoudre () est décrit dans l'organigramme de la figure 26. La fonction lister coupures a resoudre () reçoit en entrée som- 2602 de l'arbre considéré, le nombre de coupures 2604, une variable de testabilité 2606 et une variable d'effet gigogne 2608. Lors de la première étape 2610, un parent du noeud considéré est proposé. Si lors du test effectué à l'étape 2612 il est constaté que ce parent existe pas, il est mis un terme à la fonction à l'étape 2614. Si ce parent existe, un test est effectué à l'étape 2616 pour déterminer si le parent de ce noeud est ou non un sommet de zone défaillante. Si tel est le cas, la variable gigogne est mise à 1 à l'étape 2618. Sinon, la variable gigogne est mainte- à sa valeur initiale. A l'étape ultérieure 2620, il est vérifié s'il s'agit d'un parent exclu ou du sommet d'une zone défaillante. Si la réponse est positive, l'étape 2610 est mise en oeuvre pour proposer un autre parent du noeud considéré. Si la ré ponse est négative, il est vérifié à l'étape 2622 s'il s'agit d'une coupure mau vaise ou non testable. Si tel est le cas, le nombre de coupures est incré menté à l'étape 2624 puis cette coupure est ajoutée à la liste des coupures à l'étape 2626. L'étape 2610 est enfin mise en oeuvre pour proposer un nou veau parent du noeud considéré. En revanche, si à l'étape 2622, il est constaté qu'il ne s'agit ni d'une coupure mauvaise ni d'un noeud non testable, la variable testabilité est mise à 0 à l'étape 2628. Un nouvel appel à la fonction lis ter coupures a resoudre () est effectué par récursivité à l'étape 2630 en considérant comme sommet le parent déterminé précédemment à l'étape 2610. A l'issue de cet appel récursif de la fonction, l'étape 2610 est à nou veau mise oeuvre pour proposer un nouveau parent au noeud considéré. Le processus décrit ici s'effectue jusqu'à achèvement des parents nceud considéré. Pour résolution des coupures à l'étape 246 de la figure 2, corres pondant à l'étape 2508 de la figure 25, on prend chaque coupure de la liste des coupures à résoudre et on cherche si on peut la résoudre dans le sous- arbre dans lequel on fait l'analyse. Pour decider si la résolution est possible, on applique le critère de solution énoncé précédemment. Dans un premier temps, on essaie de résoudre la coupure sur sommet. Si cette tentative échoue, on recherche une résolution dans le reste de l'arbre avec une procédure récursive. Cette procédure récursive est dé crite dans la suite. La procédure générale de résolution des coupures est détaillée dans l'organigramme de la figure 27 décrivant l'algorithme de la fonction resou- drecoupures( ). La fonction resoudre coupures () reçoit en entrée la liste des coupu res 2702, le nombre des coupures 2704, ainsi que le sommet de l'arbre con sidéré 2706. Initialement, à l'étape 2708 la variable compteur résolution est mise à 0. A l'étape 2710, une coupure est proposée dans la liste. Il est vérifié à l'étape 2712 que cette coupure existe. Si tel est le cas, il est déterminé à l'étape 2714 si cette coupure est mauvaise et si celle-ci est raccordée à un sommet. Si tel est le cas, le compteur de résolution est incrémenté à l'étape 2716 et l'étape 2710 est à nouveau mise en oeuvre pour proposer une nou velte coupure. En revanche, si la coupure proposée n'est pas une coupure mauvaise qui est raccordée à un sommet, l'étape 2718 est mise en oeuvre. Celle consiste à rechercher un noeud solution sous le sommet considéré: Cette recherche effectue par appel de la fonction chercher un noeud () qui ra décrite regard de la figure 28. II est vérifié à l'étape suivante 2720 si un tel noeud a pu être trouvé. tel est le cas, le compteur de résolution est incrémenté à l'étape 2722. A fis sue de l'étape 2722, ou dans le cas où aucun noeud n'a été trouvé lors de la recherche 2718, une nouvelle coupure est proposée dans la liste à l'étape 2710. Si le test opéré à l'étape 2712 révèle qu'il n'existe plus de coupures dans la liste, le compteur de résolution est comparé au nombre de coupures à l'étape 2724. Si ceux-ci sont égaux, la variable R est fixée à 1 à l'étape 2726. Sinon, celle-ci est fixée à la valeur 0 à l'étape 2728. La variable R in dique si oui ou non la résolution a été effectuée. Enfin, la variable R est re tournée comme solution de la fonction resoudre coupure () à l'étape 2730. La recherche d'un noeud solution effectuée à l'étape 2718 et consti tuant la fonction chercher un_noeud( ) est décrite sur la figure 28. La fonction chercher un_n#ud () reçoit en entrée la coupure consi dérée 2802 ainsi que le sommet de l'arbre considéré 2804. Initialement, la valeur de la variable test R est fixée à 0 à l'étape 2806. Un parent du sommet considéré est proposé à l'étape 2810. II est vérifié l'étape 281 si ce parent existe. Si tel n'est pas le cas, la valeur de la varia ble R est fixée à 0 à l'étape 2814 et la variable R est retournée à l'étape 2816 en tant que résultat de la fonction chercher_un_noeud (). Si le parent existe à l'étape 2812, il est déterminé à l'étape 2818 si parent est coupure. Si tel est le cas, un nouveau parent est proposé à l'étape 2810. Si tel n'est pas le cas, plusieurs tests sont effectués successivement. Lorsque l'un de ces tests est vérifié, la variable R est fixée à la valeur à l'étape 2820. Le premier test opéré à l'étape 2822 consiste à vérifier ' le noeud considéré est une coupure connectée à un noeud exclu. Si la réponse est négative, il est ensuite déterminé à l'étape 2824 si ce noeud est une cou pure connectée à un noeud non testable et n'est pas une coupure. Si la ré ponse est négative, il est déterminé à l'étape 2826 si ce noeud est une cou- pure connectée un noeud mauvais et ne constituant pas sommet d'une zone défaillante. Si la réponse est toujours négative, il déterminé à l'étape 2828 si, pour le noeud considéré, les parents ne sont pas une cou pure, s'il est exclu et s'il n'est pas le sommet d'une zone défaillante. Si tel est le cas, nouvel appel récursif de la fonction chercher un noeud ,() __ est effectué à l'étape 2830. Lors de cet appel récursif, le nouveau sommet considéré est le parent pointant vers le nceud. Si à l'issue de l'étape 2828 ou 2830 la valeur de la variable test R est égale à 1, lors d'une étape de vérification notée 2832, l'étape 2820 est à nouveau mise en ceuvre. Si la valeur de la variable test n'est pas égale à 1, un nouveau parent du sommet est proposé à l'étape 2810. REVENDICATIONS 1.- Procédé de localisation d'un élément défectueux dans circuit intégré dont l'agencement théorique est connu, du type comportant suc cession d'étapes consistant en la détermination d'un point de mesure du circuit intégré ; et le test du point de mesure déterminé par mise en oeuvre de - l'application d'une séquence de tests aux entrées du circuit intégré ; - la mesure de signaux au point de mesure déterminé du circuit intégré, lors de l'application de la séquence de tests ; et - l'évaluation du point de mesure par la comparaison des si gnaux mesurés avec des signaux théoriques devant être obtenus au point de mesure déterminé pour évaluer si le point de mesure est dé faillant ou satisfaisant ; et dans lequel la position de l'élément défectueux du circuit intégré est déter minée partir des évaluations effectuées aux différents points de mesure déterminés, caractérisé en ce qu'il comporte initialement une étape de modélisation de l'agencement théorique du circuit intégré, sous forme d'au moins un graphe comportant un ensem ble de noeuds et d'arcs orientés des entrées du circuit vers les sorties du circuit ; - considérer comme un sous-graphe de recherche , un sous-graphe dont le n#ud formant sommet correspond à un point de mesure défaillant ; - et en ce que, pour la recherche de l'élément défectueux, il comporte les étapes de - affecter â chaque nceud du sous-graphe de recherche considéré, une variable caractéristique dépendant de la structure du sous-graphe de recherche ; - considérer comme point de mesure, le point de mesure correspon dant à un noeud du sous-graphe considéré, obtenu par application d'un cri- tère prédéterminé portant sur les variables caractéristiques de l'ensemble des noeuds du sous-graphe de recherche considéré ; - effectuer un test du point de mesure considéré ; - considérer comme nouveau sous-graphe de recherche soit, le sous-graphe de recherche préalablement considéré excluant le noeud correspondant au point de mesure testé et tous noeuds parents, si le point de mesure est satisfaisant soit, un sous-graphe dont le n#ud correspondant au point mesure est le sommet , si le point de mesure est défaillant ; et - rechercher, dans le nouveau sous-graphe de recherche considéré l'élément défectueux, jusqu'à vérification d'un critère d'arrêt prédéterminé. 2.- Procédé de localisation selon la revendication 1, caractérisé en que, lors de l'étape initiale de modélisation de l'agencement théorique du circuit intégre, le circuit est modélisé sous forme d'un arbre par création éventuelle noeuds virtuels (810 ; 2208, 2210, 2218) lorsque un même n#ud est parent de au moins deux noeuds, eux-mêmes parents même noeud. 3.- Procédé de localisation selon la revendication 2, caractérisé en qu'il comporte, après vérification du critère d'arrêt prédéterminé, les étapes de - évaluer dans le ou chaque dernier sous-graphe de recherche, si pour chaque noeud virtuel correspondant à un point de mesure défaillant, le n#ud jumeau associé audit n#ud virtuel est un noeud du même sous gra phe correspondant également à un point de mesure défaillant ; et - considérer alors le ou chaque sous-groupe pour lequel la condition est vérifiée comme correspondant à une partie du circuit intégré comportant au moins un élément défectueux. 4.- Procédé de localisation selon l'une quelconque des revendications précédentes, caractérisé en ce que ladite variable caractéristique propre à chaque n#ud est le nombre d'ancêtres de ce n#ud dans le sous-graphe de recherche considéré. 5.- Procédé de localisation selon la revendication 4 prise avec l'une des revendications 2 et 3, caractérisé en ce que ledit critère prédéterminé est adapté pour déterminer le noeud dont le nombre d'ancêtres est sensi blement égal au nombre moyen d'ancêtres par nceud dans le sous arbre de recherche considéré. 6.- Procédé de localisation selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte une étape. d'affectation à cha-,. que noeud, d'un indicateur de conformité initialement fixé à un état dé faillant - et en ce que, pour la détermination du nouveau sous-graphe recher che à considérer, il comporte les étapes de fixer l'indicateur de conformité du noeud correspondant au point de mesure testé et de tous ses noeuds parents à un état satisfaisant, si le point de mesure testé est satisfaisant ; et - considérer comme nouveau sous-graphe de recherche, le sous- graphe inclus dans le sous-graphe de recherche précédent et comportant les seuls nceuds dont l'indicateur de conformité est fixé à l'état défaillant. - Procédé de localisation selon l'une quelconque des revendications précédentes, caractérisé en ce que le sous-graphe de recherche initialement considéré est formé de l'intersection des sous-graphes ayant chacun pour sommet un nceud correspondant à une sortie défaillante du circuit intégré. - Dispositif de localisation d'un élément défectueux dans un circuit intégré dont l'agencement théorique est connu, du type comportant des moyens pour effectuer une succession d'étapes consistant en - la détermination d'un point de mesure du circuit intégré ; et - le test du point de mesure déterminé par mise en ceuvre de - l'application d'une séquence de tests aux entrées du circuit intégré ; - la mesure de signaux au point de mesure déterminé du circuit intégré, lors de l'application de la séquence de tests ; et - l'évaluation du point de mesure par la comparaison des si gnaux mesurés avec des signaux théoriques devant être obtenus au point de mesure déterminé pour évaluer si le point de mesure est dé faillant ou satisfaisant ; et moyens pour déterminer la position de l'élément défectueux du circuit integré à partir des évaluations effectuées aux différents points de mesure déterminés, caractérisé en ce qu'il comporte - des moyens de modélisation initiale de l'agencement théorique du circuit intégré, sous forme d'au moins un graphe comportant un ensemble de noeuds et d'arcs orientés des entrées du circuit vers les sorties du circuit ; - des moyens pour considérer initialement comme un sous-graphe de recherche , un sous-graphe dont le n#ud formant sommet cor respond à un point de mesure défaillant ; en ce que, pour la recherche de l'élément défectueux, il comporte moyens pour - affecter à chaque noeud du . sous-graphe de recherche considère, variable caractéristique dépendant de la structure du sous-graphe recherche ; - considérer comme point de mesure, le point de mesure correspon dant à un n#ud du sous-graphe considéré, obtenu par application d'un cri tère prédéterminé portant sur les variables caractéristiques de l'ensemble noeuds du sous-graphe de recherche considéré ; - effectuer un test du point de mesure considéré ; - considérer comme nouveau sous-graphe de recherche soit, le sous-graphe de recherche préalablement considéré excluant le noeud correspondant au point de mesure testé et tous noeuds parents, si le point de mesure est satisfaisant soit, un sous-graphe dont le noeud correspondant au point de mesure est le sommet, si le point de mesure est défaillant ; et - rechercher, dans le nouveau sous-graphe de recherche considéré l'élément défectueux, jusqu'à vérification d'un critère d'arrêt prédéterminé.