Outils de génération de structures BIST/BISR pour mémoires
Transcription
Outils de génération de structures BIST/BISR pour mémoires
INSTITUT NATIONAL POLYTECHNIQUE DE GRENOBLE N° attribué par la bibliothèque |__|__|__|__|__|__|__|__|__|__| THESE pour obtenir le grade de DOCTEUR DE L’INPG Spécialité : « Microelectronique» préparée au laboratoire TIMA/INPG dans le cadre de l’Ecole Doctorale « Electronique, Electrotechnique, Automatique, Telecommunication , Signal (EEATS)» présentée et soutenue publiquement par M. Slimane Boutobza le 20/12/2002 Titre : Outils de génération de structures BIST/BISR pour mémoires Directeur de thèse : Michael Nicolaidis JURY M. M. M. M. M. Pierre Gentil Jaume Segura Joseph Borel Pascal Fouillat Michael Nicolaidis , , , , , Président Rapporteur Rapporteur Rapporteur Directeur de thèse Dédicaces A ma mère pour ce dont elle a rêvait et pu avec la grâce de dieu réaliser A mon père pour ses sacrifices A Hayet pour tout A Fouzia et Hanane; Ahmed et Ali pour leur soutient moral et affectif A mon petit bébé Mariam qui connaîtra un jour le travail de son père et j’espère fera mieux A vous tous j’offre ce modeste travail Remerciement Je tiens à remercier tous ceux qui m’ont aidé et soutenu durant cette thèse, je cite à titre d’exemple Tarek Kannat, Ahmed Abdelhay, Elisabeth Essalhinne. Je remercie M. Eric Dupont de m’avoir ouvert les portes de son entreprise et permit de mener à bien ma thèse et offert l’opportunité d’en dériver un produit industriel. Je remercie l’ensemble des membres d’iRoC Technologies pour leur soutient et leur convivialité qui m’ont permis de m’épanouir aussi bien dans ma thèse que dans mon travail. Et je remercie particulièrement M. Michael Nicolaidis (alias Nic) pour sa patience et sa compréhension, pour m’avoir soutenu malgré les difficultés rencontrées, et sagement conseiller dans les différents choix adoptés. Table des Matières Introduction 1 Les mémoires RAMs : Principe, Test et Réparation 5 7 7 9 9 12 15 15 16 23 24 25 26 29 30 31 1.1 Introduction 1.2 Principe d'uneRAM 1.3 La technologie des RAMs 1.3.1 Les RAMs Statiques (SRAMs 1.3.2 Les RAMs Dynamiques (DRAMs) 1.4 Les fautes dans les RAMs 1.4 Les fautes dans les RAMs 1.4.1 Les fautes et leurs modélisations 1.4.2 Modèles de fautes pour RAMs 1.4.3 Les relations entre les fautes 1.5 Tests fonctionnels des RAMs 1.5.1 Les tests fonctionnels traditionnels 1.5.2 Les tests March 1.5.3 Les tests NPSF 1.5.4 Tests Pseudo Aléatoire pour RAMs (Pseudo Random Tests PRT 1.6 Conclusion Test, diagnostic et réparation intégrés des RAMs 2.1 Test, DFT et BIST 2.2 Techniques de test intégré 2.3 BIST pour RAMs 2.3.1 Principe 2.3.2 Approches BISTs pour RAM 2.4 Diagnostic et Réparation Intégrée 2.5 Conclusion Approches BIST pour RAMs 3.1 Introduction 3.2 Le BIST March 3.3 Le BIST Transparent 3.4 Le BIST Programmable 3.4.1 Principe 3.4.2 Implémentation 3.4.3 Extension de la couverture de fautes 3.4.4 Résultats Expérimentaux 3.5 Le BIST Rapide 3.5.1 Introduction 3.5.2 Principe 3.5.3 Implémentations et résultats expérimentaux 3.5.4 Méthodologie Rapid BIST (optimisation automatique) 3.6 Conclusion Synthèse de BISTs pour les tests non-Marchs 4.1Introduction 4.2Synthèse de BIST pour les tests mémoires 33 33 35 37 37 39 45 47 51 55 55 58 60 61 63 68 71 71 73 74 75 88 91 93 95 95 4.2.1 Principe 4.2.2 Perturbation et irrégularité 4.2.3 Classification des algorithmes de test: familles de tests 4.2.4 Implémentation des perturbations 4.2.5 Implémentation de la Synthèse de BIST 4.3 Exemples d'application de l'approche de synthèse de BIST 4.3.1 Synthèse de BISTs pour Tests Topologiques 4.3.2 Synthèse de BISTs pour Tests OCBs 4.3.3 Synthèse de BISTs pour Tests Pseudo aléatoires 4.4 Conclusion 95 96 101 106 109 110 110 121 126 127 Structures matérielles pour la réparation intégrée des RAMs 129 131 131 133 137 138 140 5.1 Introduction 5.2 Diagnostique et réparation des mémoires 5.3 Principe de l'architecture CBISR 5.4 Résultats expérimentaux 5.5 Généralisation de l'approche CBISR 5.6 Conclusion Conception et implémentation de l'outil MBISTER 6.1 Introduction 6.2 Etat de l'Art des générateurs de structures d'autotest et d'auto réparation intégrés 6.2.1 Classification 6.2.2 Principe de génération 6.2.3 Capacités et limitations 6.2.4 L'avenir des outils de Génération des structures BIST et BISR 6.3 Travail antérieur 6.4 Spécification et Principe de l'outil MBISTER 6.5 Conception de MBISTER 6.5.1 Choix des solutions 6.5.2 Structure physique de MBISTER : une structure multicouche 6.6 Le langage CHDL 6.6.1 Motivation 6.6.2 Description 6.6.3 Propriétés (Caractéristiques 6.7 Implémentation de MBISTER 6.7.1 Etapes (flux) fonctionnelle 6.7.2 Modélisation de l'IHM 6.7.3 Intégration dans le flux de conception 6.7.4 Le Test Expert 6.7.5 Rapid BIST 6.7.6 Processus de génération 6.7.7 Processus d'interconnections 6.7.8 Les Utilitaires Software 6.8 Résultats expérimentaux et comparaison 6.9 Conclusion Conclusion et Perspectives Bibliographie Annexe 141 143 143 144 144 145 146 146 146 148 148 149 152 152 152 156 158 158 160 163 164 165 167 170 171 173 177 179 Introduction 1 Introduction Les systèmes digitaux contiennent généralement une partie importante de mémoire dans leurs structures. De nos jours, il n’est pas rare en effet, de trouver des SOCs (Systeme On Chip) ayant jusqu’à 60 à 80% de leurs surfaces constituées par celles de leurs RAMs enterrées. D’un autre coté, les parties mémoires possèdent, relativement aux parties logiques, un taux de défauts élevé. Ceci est dû à leurs densités importantes, à un taux élevé de signaux partagés, aux faibles seuils de tension imposés (pour la réduction de la consommation) ainsi qu’à leurs règles de dessins très poussées (optimisation de surface). Par conséquent, la qualité du test de fabrication doit être très élevée afin d’obtenir une qualité acceptable pour le produit final. On a alors besoin de développer des tests effectifs permettant la détection et éventuellement, la localisation des fautes réelles affectant les mémoires. D’autre part, le coût du test est devenu, d’une manière générale, de plus en plus important au point même de surpasser celui de la conception du circuit lui-même. Dès lors, il devient primordial d’élaborer des techniques de test rentables. Efficacité (qualité) et rentabilité sont donc les deux exigences que doit respecter toute stratégie de test optimale. Pour se faire, différentes approches de test ont été élaborées : l'utilisation d’un testeur externe (Automatic Test Equipment (ATE)), une conception en vue de la testabilité (Design For Testability (DFT)), ou enfin, l'utilisation des techniques d'auto-test intégré (Built In Self Test (BIST)). Bien qu’elles possèdent un certain nombre d’avantages, les approches ATE et DFT induisent des limitations assez importantes. La première ne prend pas toujours en compte la testabilité du circuit lors de la génération automatique des vecteurs de test, ne permet pas toujours un test à la fréquence nominale (nécessaires pour découvrir les fautes de délai) et elle est très difficile à appliquer da ns le cas des RAMs enterrés. La seconde utilise une technique sérielle de (scan path) pour l'application des vecteurs de test et/ou la récupération des résultats, ce qui d’une part, augmente considérablement le temps de test et d’autre part, ne permet pas d’appliquer le test à la vitesse de fonctionnement réelle du circuit. Le BIST est une technique où la génération des vecteurs de test et l'analyse des résultats sont effectuées d'une manière interne au circuit. Cette technique permet de contourner les inconvénients des deux autres techniques. En incorporant le circuit de test, le BIST permet de se passer d'un équipement de test externe complexe (cher). Il permet également de réduire d'une manière considérable le temps du test en générant d'une façon parallè le les vecteurs de test, au niveau puce et en exploitant les BISTs de chaque puce pour un test simultané au niveau carte et modules. Enfin, il peut assurer un test à la fréquence nominale du circuit et offre la possibilité de tester le circuit en phase de maintenance ainsi qu’en phase d’opération. Bien que les techniques de Built In Self Test pour mémoires ont atteint une certaine maturité, ils sont toujours cependant confrontés à un certain nombre de défis. En effet, avec chaque nouvelle technologie, la diminution des dimensions géométriques résulte en de nouvelles familles de fautes complexes (fautes de k-couplages et fautes transitoires) qui implique des algorithmes complexes et donc coûteux à implémenter. Par conséquent, le compromis couverture de faute s/coût en surface est 2 difficile à optimiser. En plus, pour certaines RAMs très rapides, le test à la fréquence nominale n’est pas toujours assuré ce qui affecte également la qualité de test (couverture de fautes). Le rendement des RAMs (enterrées) conditionne en grande partie celui du système. Par conséquent, l’amélioration de ce dernier, par le biais de techniques de réparation est un objectif des plus importants. La réparation est une technique de tolérance aux fautes qui consiste à contourner les parties défectueuses et les remplacer par des parties correctes redondantes. Dans le cas des mémoires, ces éléments redondants peuvent être : des mots, des blocs, des lignes ou des colonnes. L’approche de réparation intégrée (Built In Self Repair –BISR-) est une approche assez récente où l’analyse et l’action de réparation sont effectuées à l’intérieur du circuit. La technique BISR permet de contourner les inconvénients de la réparation traditionnelle (laser pour brûler les fusibles ou les antifusibles), à savoir : elle résout le problème d’accessibilité des RAMs enterrées, elle ne nécessite pas de dispositifs onéreux (moins coûteuse), possède un temps de réparation beaucoup plus court et permet de réparer à la fois les fautes survenant lors de la fabrication et celles survenant durant la durée de vie du circuit. Le défi principal pour les techniques BISRs est celui d’offrir une bonne capacité de réparation tout en ayant un faible coût en surface. Le temps et la complexité due à la mise en œuvre des techniques de test et de réparation intégrée, ont une incidence directe sur le coût du test et par conséquent, sur l’exigence de la rentabilité. Pour palier ces contraintes, le processus de conception et d’implémentation des solutions élaborées doit être complètement automatisé. Depuis quelques années, un certain nombre d’outils de génération/insertion de BIST pour mémoires ont été développés. Au fil du temps, ces outils ont connu des améliorations considérables leurs permettant d’offrir des fonctionnalités/caractéristques de plus en plus puissantes, telle que l’indépendance de tout environnement de conception, la génération de solutions RTL (Register Transfert Level) synthétisables, donc indépendantes de la technologie et des environnements graphiques conviviaux. Cependant, malgré ces améliorations notables, les outils actuellement disponibles présentent toujours des limitations importantes : • La flexibilité des architectures générées est limitée à certains algorithmes de type March et quelques autres algorithmes tels que le Checkerboard. Ces algorithmes ne peuvent couvrir qu’une partie des fautes présentes dans les mémoires actuelles. • Ils n’offrent pas des solutions de réparation intégrée (indépendantes de la technologie). • Ce sont souvent de simples générateurs qui n’effectuent aucun compromis entre des paramètres antagonistes, tel que l’encombrement en surface/couverture de faute ou délais exigés/encombrement en surface, ce qui implique souvent une génération d’architectures non optimales par rapport aux spécifications de l’utilisateur. A travers cette thèse, nous visons donc un double objectif. D’une part, remporter les différents défis imposés aux architectures de test de réparation intégré en proposant des techniques BIST/BISRs ayant une grande couverture de fautes, un mécanisme de réparation efficace, un faible coût matériel et offrant des tests à la fréquence nominale. Et D’autre part, contourner les limitations des outils de génération actuels en offrant un outil de synthèse de structures BIST/BISR pour mémoires d’une nouvelle génération capable de synthétiser 3 n’importe quel test fonctionnel. Ce synthétiseur pourra ainsi prendre en charge la complexité de test/réparation et améliorer le facteur “Time-to-Market“. Il doit aussi offrir une grande variété de structures de test/réparation pouvant répondre aux exigences de l’utilisateur. Ce mémoire est répartie en trois parties principales. Une partie de généralités, composée par les deux premiers chapitres. Dans le chapitre 1, nous commencerons par donner un aperçu de l’aspect technologique des RAMs. Suivra ensuite une revue des différentes fautes susceptibles d'affecter les RAMs, leurs modélisations ainsi que les techniques de test nécessaires pour leurs détections. Tandis que dans le chapitre 2 nous exposerons le s différentes techniques de test, diagnostic et réparation intégrées pour les RAMs. Une seconde partie (chapitre 3, 4 et 5) où nous exposons l’essentiel des solutions BIST/BISR pour RAM que nous avons développé. Dans le chapitre 3, nous commençons par développer les différentes architectures BISTs (le BIST March, le BIST Transparent et le BIST Programmable) proposés et nous terminerons par exposer la partie matérielle d'une méthodologie mixte software/hardware appelée “Rapid BIST” pour la générations de BIST à fréquence maximale (at-speed and full-speed testing). Dans le chapitre 4 nous développons une approche originale permettant d’étendre l’architecture du BIST March pour implémenter d’une manière efficace l’ensemble des tests non-Marchs. Ceci permet la prise en compte de la plupart (si ce n’est de la totalité) des défauts classiques ainsi que des éventuels nouveaux défauts. Nous exposerons enfin dans le chapitre 5, une solution de réparation intégrée à la fois efficace et peu coûteuse. Ces architectures seront par la suite intégrées dans l'outil de synthèse de BIST, pour constituer sa couche bas niveau (matérielle) contribuant ainsi à sa flexibilité en termes de solutions de test/réparation offertes. Par conséquent, L’aspect conceptuel de la synthèse de ces différentes architectures sera quelques fois abordé dans cette partie afin de mieux comprendre la conception proposée de la partie qui suit. La dernière partie (chapitre 6) est spécifique à l’outil de synthèse automatique de ces solutions. Cette partie commence par exposer les travaux précédents dans ce domaine et détaille ensuite la conception et l’implémentation d’un nouvel outil de CAO pour la synthèse automatiques des BIST/BISR pour mémoires appelé MBISTER (Memory Built In Selft TEst and Repair). Elle termine en dressant une comparaison avec les autres outils (industriels ou universitaires). 4 Chapitre 1 Les mémoires RAMs : Principe, Test et Réparation 5 Les mémoires RAMs : Principe, Test et Réparation 1.1 Introduction Les systèmes digitaux, de type microprocesseurs, ASIC ou SOC (Système on Chip) contiennent généralement une partie importante de mémoire dans leur structure. Celle ci possède (relativement à la partie logique), un taux assez élevé de défauts. Ceci est dû d'une part à la surface élevée qu'occupe la mémoire dans le circuit, et d'autre part, à sa densité importante. Dés lors, développer des tests effectifs permettant la détection et éventuellement, la localisation des fautes réelles est d'une importance capitale pour la qualité de la mémoire, mais aussi pour celle du système en entier. Tester d'une manière exhaustive les RAMs actuelles possédant des capacités de l'ordre des Mega bits, n'est pas chose pratique. La solution passerait plutôt par le développement de différents modèles de fautes, représentant chacun une classe spécifique de fautes ayant des manifestations similaires sur le fonctionnement du circuit. Cette modélisation peut être faite à différents nivaux (géométrique, électrique ou fonctionnel), et doit être à la fois effective et simple. Basé sur ces modèles de fautes, une multitude d’algorithmes de test a vu le jour. Ces tests peuvent être déterministes ayant en charge la détection et éventuellement la localisation des fautes sur lesquelles ils sont basés, avec une couverture de fautes ciblées de 100%. Ils peuvent être également des tests pseudo-alétaoires ciblant la détection de quelques fautes spécifiques avec une probabilité d'échappement (i.e de non détection). Ces tests fonctionnels doivent cependant être complétés par des tests électriques (AC, DC), pour la détection des fautes paramétriques (fautes dues au courant et tension), ainsi que par des tests dynamiques pour la détection des fautes de délai (fautes temporelles). Dans ce chapitre nous commencerons par développer le principe, ainsi que l’évolution technologique des RAMs (Random Acces Memories). Suivra ensuite une revue générale des différentes fautes susceptibles d'affecter les RAMs, leur modélisation ainsi que les techniques de test nécessaires pour leur détection. 1.2 Principe d'une RAM Le principe d'une RAM, comme d'ailleurs de tout type de mémoires (ROM, EPROM, FIFO... etc.) est de stocker des informations utiles pour le système et de les restituer en temps voulu. Avec les microprocesseurs, elles constituent le couple éléments de stockage-capacité de calcul sur lequel sont basés les systèmes électroniques actuels. Ce principe a d’ailleurs été calqué sur celui du cerveau humain, qui constitue de loin la machine la plus parfaite et la plus complexe que nous avons connu. 6 Les RAMs sont également appelées "mémoires volatiles" du fait qu'elles perdent leurs contenus après leur mise hors tension. Les autres particularités des RAMs sont : l'accès aléatoire à n'importe qu'elle cellule mémoire et la possibilité d'y lire et d'y écrire des informations. De par leur spectre d'application très étendu, et la diversité des techniques de leur implémentation, les RAMs possèdent souvent des structures assez complexes. Cependant, en les modélisant au niveau fonctionnel (on fait abstraction de leurs détails d'implémentation), on retrouve un squelette commun donné par la figure 1.1. Le bloc de rafraîchissement (en pointillé) est spécifique aux RAMs Dynamiques (DRAM) (voir section 1.2). Reg d'adresses Décodeur colonnes Décodeur.ligne Adresses Logique de rafraichissement Matrice mémoire Circuit d'écritrure Amplificateur de lécture Reg de données Refres h Bus de données R/W Figure 1.1 : Modèle fonctionnel d'une RAM. Les principaux éléments d'une RAM sont donc : • • • La matrice mémoire : Elle contient les éléments de stockage (cellules) de la RAM. Elle est sous forme carrée ou rectangulaire afin de minimiser la surface et faciliter son implémentation. Elle peut être organisée en plusieurs sous matrices. Le circuit de décodage : Il est composé du registre d'adresse qui stocke les adresses, du décodeur ligne qui est souvent connecté aux adresses de poids fort et du décodeur colonne connecté aux adresses de poids faible. Le décodeur ligne sélectionne une ligne de la matrice mémoire, ensuite, selon la taille du mot mémoire (B bits), le décodeur colonne sélectionne B colonnes de cette ligne pour une opération de lecture ou d'écriture. La logique de lecture/écriture : Le signal R/W (lecture/écriture) sélectionne le mode de fonctionnement de la RAM. Dans le cas d'une lecture, le contenu de(s) la cellule(s) sélectionnée(s) est amplifiée par l'amplificateur de lecture. Ces données seront ensuite chargées dans le registre de données avant d'êtres acheminées vers le bus de données. Dans le cas d'une opération d'écriture, les données se trouvant sur le bus de données sont chargées dans le registre de données, et écrites dans la matrice mémoire via l'amplificateur d'écriture. 7 • Dans le cas des RAMs Dynamiques, les données sont stockées sous forme de charges capacitives. Du fait de cette nature, leurs cellules mémoires nécessitent un circuit de rafraîchissement pour restaurer leurs contenus. Ce rafraîchissement est nécessaire après que les cellules mémoires sont accédées en lecture (destructive), ou ne sont pas accédées pendant un "long" moment, ce qui entraîne dans un cas comme l'autre la décharge des capacités correspondantes. L'opération de rafraîchissement est activée par le signal Refresh. Le décodeur colonne sélectionne toutes les colonnes. Le décodeur ligne sélectionne l'adresse contenue dans le registre d'adresses, tel que toutes les cellules mémoires sont lues et rafraîchies simultanément. Durant cette opération, la logique de rafraîchissement désactive le registre de données. Les performances d'une RAM, exprimées généralement en nano secondes, sont données par son temps d'accès (en lecture), et son temps de cycle (cycle time). Le temps d’accès représente le temps de propagation depuis le temps de la prise en compte de l’opération de lecture (i.e. front montant de l’horloge) jusqu'à l'apparition des données sur le bus de sortie. Le temps de cycle est défini comme étant le temps minimal nécessaire entre deux accès successifs à une RAM. Les spécifications temporelles d'une RAM sont généralement données par des diagrammes temporels. Ceux ci précisent les spécifications temporelles des signaux d'entrée entre eux (temps de setup et de hold), et de ces derniers avec les signaux de sortie (délais). Ces diagrammes sont spécifiques à chaque type de RAM, et varient en fonction de leurs interfaces et de leurs protocoles d’accès. La section suivante concernera une revue des différentes technologies RAMs. Quelques modèles électriques seront présentés afin de mieux comprendre, par la suite, les modèles de fautes basées sur ce niveau d'abstraction (électrique). Notons que par la suite de ce mémoire, nous utiliseront les conventions suivantes : le symbole N représente la taille des adresses, B celle des données et n celle de la mémoire. 1.3 La technologie des RAMs Tout au long de son histoire, l'évolution technologique des RAMs a essentiellement été motivée par deux objectifs : achever les meilleures performances possibles et atteindre de grandes densités d'intégration. Les SRAMs (Static RAM) ont souvent assuré le premier objectif. Tandis que les DRAMs (Dynamic RAM), avec leurs cellules spécifiques (capacité), atteignent de loin les densités les plus élevées. Elles sont souvent utilisées pour explorer les performances et caractéristiques de nouveaux processus technologiques. 1.3.1 Les RAMs Statiques (SRAMs) Les densités des SRAMs ont toujours été inférieures à celles des DRAMs à cause du no mbre de transistors relativement élevé, que requièrent leurs cellules. Cependant, grâce à leur temps d’accès rapide, et leur consommation modérée, les SRAMs sont largement utilisées dans les systèmes digitaux. Historiquement, les SRAMs primaires ont été développées dans trois technologies différentes : la Bipolaire, la NMOS et la CMOS. Après cela, la tendance à été surtout envers une combinaison des ces technologies, pour augmenter la vitesse, la densité ou les deux à la fois. D’autres technologies comme l’Arséniure de Gallium (AsGa) ont vu le jour. Ainsi, pour des besoins en vitesse, on utilise plutôt la 8 technologie Bipolaire ou l’AsGa. Pour des objectifs de hautes densités et de faible consommation, on utilise la technologie CMOS (pure) ou la MOS mixte (combinaison de NMOS et de CMOS). Enfin, pour des spécifications de vitesse et de densité à la fois, on utilise les technologies CMOS, MOS mixte et BiCMOS (combinaison de technologie Bipolaire et CMOS). Le tableau 1.1 résume, d’après une étude que nous avons menée, les caractéristiques des SRAMs pour différentes technologies de fabrication. Tension d’alimentation (v) Taille des Mots (bus de données) Temps d’accès (ns) Capacité vs Technologie (µm) 1.65–5 1-32 bits 4 Kb 64 Kb 256 Kb 5 1.2 0.8 15-2.5 4 Mb 16 Mb 0.6 0.4 64 Mb 64 Mb 72 Mb 0.25 0.18 0.13 Tableau 1.1 : Caractéristiques technologiques des SRAMs. Le voltage en 1.65v (pour des SRAM asynchrones) est utilisé pour des applications nécessitant de faibles consommations (e.g., l'électronique embarquée). Les SRAMs en 32 bits de données sont utilisées pour des applications nécessitant une grande densité de calcul telles que les applications vidéo. Le temps d’accès le plus faible (2.5 ns) correspond à une SRAM utilisant le front montant et descendant de l’horloge (Double Data Rate). Notons enfin que l'augmentation de la densité d’intégration des SRAMs, d’une technologie à l’autre, est due à une diminution de la taille de leurs cellules et à une augmentation de la surface de la puce. Cellules SRAM : Une cellule mémoire SRAM est conçue sous forme de bascules bistables. Elle peut donc être forcée à un des deux états (0 ou 1), et rester dans cet état après la disparition de ses stimuli. Elle peut être modélisée par deux inverseurs couplés en opposé. Il existe différentes approches pour son implémentation (figure 1.2) : • Cellule mémoire à six transistors NMOS (dont deux transistors (Q3 et Q4) déplétés pour la charge). Cette solution est peu coûteuse (peu d'étapes technologiques), mais consomme beaucoup de courant (figure 1.2-a). • Une amélioration significative dans la surface du silicium ainsi que dans la puissance de dissipation est obtenue en substituant aux transistors pull up, des résistances de charge en polysilicium (figure 1.2-b). Cette approche implique une opération de lecture relativement lente (chargement à travers une résistance de grande valeur ohmique) et nécessite donc une phase de pré charge. • Cellule CMOS avec charges en PMOS. C'est la solution la plus optimale pour un circuit VLSI CMOS. C'est une solution assez rapide, qui en plus, consomme peu de courant (lorsque la cellule retient l'information stockée). Elle est cependant assez coûteuse à cause des étapes de fabrication supplémentaires des transistors PMOS (figure 1.2-c). Les transistors Q1-Q3 forment un inverseur, qui est couplé en opposé avec le second inverseur Q2Q4, pour former une bascule. Les transistors de passage Q5 et Q6, permettent l’accès à cette bascule 9 pour une opération de lecture ou d’écriture. Le décodeur ligne sélectionne une ligne de cellules en activant son signal ligne de mot (LM). Ce signal est connecté aux transistors de passage de toutes les cellules de cette ligne. Pour sélectionner une cellule particulière dans cette ligne, le décodeur colonnes active les signaux de ligne de bit (LB, LB) correspondants. VDD Q3 VDD Q4 LM LM Q6 Q2 Q5 Q1 LB VSS Q6 Q5 Q1 LB LB Q2 VSS LB VDD (a) (b) Q3 Q4 LM Q6 Q2 Q5 Q1 LB VSS LB (c) Figure 1.2 : Cellules de RAMs statiques. Pour écrire dans la cellule appropriée, on doit mettre à 1 le signal LM (les transistors Q5 et Q6 sont passants), et forcer les signaux LB etLB avec des données complémentaires. La cellule sera forcée à l’état des signaux lignes de bit grâce à leurs charges relativement élevées (en comparaison avec celle de la cellule). Dans une opération de lecture les signaux LB etLB sont préchargés au même niveau haut. Après l'accès à la cellule, la donnée stockée par celle ci sera déterminée selon la différence de tension entre LB et LB Cette différence est due aux valeurs complémentaires stockées dans les transistors Q3 et Q4, et propagées à LB et LB, en sélectionnant le signal LM. Autres composants architecturaux: Les décodeurs des SRAMs, comme d'ailleurs ceux des autres RAMs, sont souvent réalisés en deux dimensions, à savoir, un décodeur ligne actionnant les lignes de mots et un décodeur colonne pour activer les lignes de bits. Cette décomposition permet de réduire la surface du décodeur d'adresses de n à 2 n (n taille de la mémoire). Le décodeur ligne peut être réalisé sous forme de structure NOR statique ou dynamique. L'approche statique [GOO91] est relativement simple (circuit asynchrone), et peu consommatrice. Elle est cependant assez lente et assez gourmande en silicium dans le cas d'un grand nombre de bits à décoder. L'approche dynamique [MAZ88], nécessite une circuiterie d'horloge (circuit synchrone). Elle est plus compacte et plus rapide. En contre partie, elle consomme plus de courant. 10 Le décodeur colonnes sélectionne B bits parmi ceux que contient la ligne sélectionnée. Il peut être réalisé avec un arbre de transistors (NMOS) ou des interrupteurs en CMOS. Le premier est simple à réaliser, tandis que le second a l'avantage de la rapidité. La logique de lecture/écriture des SRAMs (valable aussi pour les autres RAMs) est assez simple. La figure 1.3 [ASH97] montre un exemple du circuit d’écriture d'une RAM. Le circuit de lecture d'une SRAM est donné par la figure 1.3.b. On utilise généralement un amplificateur différentiel. Tout en offrant une commutation rapide, ce circuit est capable de détecter les faibles variations de tension sur les lignes LB et LB. VD Donnée d'entrée donnée Ecriture BIT LB L (a) BIT CS (b) Figure 1.3 : Circuits d’écriture (a) et de lecture (b) pour RAMs. Les différents types de SRAMs : les SRAMs peuvent êtres, soit asynchrones, avec une interface système assez simpliste, soit synchrone (avec une horloge), offrant les meilleures performances temporelles possibles. La quasi-totalité des SRAM existant actuellement est de type synchrone. Afin d’augmenter encore plus leurs cadences de fonctionnement, celles ci ont connu différentes techniques d’optimisation. La plus importante d’entre elles est la technique du “Burst” qui consiste à partir d’une adresse de base, à lire ou écrire des données à des adresses successives (en rafale) en utilisant un compteur interne. Généralement ce sont les deux bits de poids faible des adresses qui sont utilisés. Ce qui permet ainsi d’augmenter la performance de la RAM en accédant à 4 mots mémoires à partir d’une seule adresse de départ. Les DDR (Double Data Rate) SRAMs sont une autre évolution des SRAMs. A l’inverse des SRAMs conventionnelles, ils utilisent pour leurs opérations de lecture et d’écriture, les deux fronts de l’horloge (montant et descendant), ce qui leurs permet de traiter deux fois plus de données, et donc, d’avoir une cadence de fonctionnement beaucoup plus importante. En plus des SRAMs commune (à usage général), ils existent d'autres plus spécifiques à une application donnée. Celles ci intègrent souvent des circuiteries additionnelles afin de les rendre compatibles avec leurs applications. On distingue les SRAMs multi ports (jusqu’à 12 ports), permettant des lectures écritures simultanées dans la mémoire, les mémoires associatives (Content Addressable Memories (CAM)) pour la reconnaissance des formes et la gestion des bases de données, les FIFOs (First In First Out), etc. 11 1.3.2 Les RAMs Dynamiques (DRAMs) Malgré leur handicap de vitesse (par rapport aux SRAMs), les DRAMs ont été produites en grandes quantités durant cette dernière décade : 54% de la production générale des mémoires contre 22% pour les SRAMs en 1990, et 58% contre 21% en 1994. Leurs densités élevées ont permit notamment, une évolution importante des capacités des DRAM (donnée par la loi π qui stipule que celles-ci quadruplent tous les 3 ans). D'un autre coté, l’industrie des DRAMs a connu des évolutions successives, visant à atteindre les meilleures performances possibles. Trois phases principales caractérisent ces évolutions. Dans la première phase, la tendance était plutôt à l'implémentation de modes d'accès spéciaux, en jouant sur le timing des signaux RAS (Row Address Strobe) et CAS (Column Address Strobe). Cette phase a donné naissance à des DRAMs (asynchrones) peu rapides telles que les Fast Page Mode (FPM) DRAMs, les Extended Data Output (EDO) DRAMs et Burst Extended Data Output (BEDO) DRAMs qui ne dépassaient pas le cap des 100 Mhz. Dans la seconde phase, la tendance était de migrer des DRAMs asynchrone vers ceux utilisant un mode synchrone, d'où l’émergence de la famille des DRAMs Synchrones ou SDRAMs. Cette famille a permit d’atteindre des fréquences de 100 (PC100 SDRAM), 133 ou 166 Mhz, et de doubler ces fréquences pour la version DDR. Enfin, la dernière évolution des DRAMs concerne les DRAMs basées sur de nouveaux protocoles de communication et/ou de nouvelles architectures internes, te lles que les CDRAM (Cached DRAM) qui utilisent une SRAM interne (dans la DRAM) pour accélérer l’accès en mémoire, les Rambus DRAMs (RDRAMs) qui utilisent une nouvelle architecture ayant un bus d’adresses de 16 bits et des bancs de mémoires bien distribués sur celui ci ou enfin, les SyncLink DRAMs (SLDRAMs) qui passent tous les signaux de contrôle de la mémoire sur une seule ligne afin d’éviter la synchronisation entre les différents canaux, et augmenter ainsi leur cadence de fonctionnement. La figure 1.4 résume les caractéristiques de ces différentes DRAMs en terme de performance. DRAMs nouvelles génération Performance(MHZ) RDRAM 400 SLDRAM DRAMs synchrones CDRAM 200 DDR SDRAM PC 100 SDRAM DRAMs asynchrones 100 BEDO DRAM EDO DRAM FPM DRAM 1985 1990 1995 2000 Date Figure 1.4 : Les différentes générations de DRAMs et leurs performances. Les cellules DRAMs: Les DRAMs utilisent une capacité comme élément de stockage. 12 Il existe plusieurs approches pour implémenter cette capacité. La plus utilisée est cependant la cellule DRAM à 1-Transitor (également appelée la cellule DRAM planar). Conçue en 1973, elle devient un standard et a été utilisé pour les DRAMs de 16 Kb jusqu’à ceux de 1 Mb (figure 1.5). Cette cellule est constituée d’un transistor enrichi et d’une capacité occupant environ 30% de sa surface. LM C LB Figure 1.5 : Cellule DRAM 1-transistor. Dans une opération de lecture, la ligne de bit (LB) est pré chargé au même niveau de tension que l’amplificateur de lecture (entre 0 et 1). Ensuite, la ligne mot LM est mise à 1, permettant le transfert de la charge de la capacité à LB. Ceci cause une différence de potentiel sur LB, dont la valeur est déterminée suivant la charge de la capacité et de la capacitance de LB. Un circuit de lecture très sensible tel que celui de la figure 1.3 est nécessaire pour détecter cette faible variation. Cette opération de transfert de charge rend l’opération de lecture destructive, nécessitant ainsi une réécriture des informations lues. L’opération d’écriture consiste à forcer LB au niveau désiré, et mettre LM à 1. La miniaturisation des cellules DRAMs a été accompagnée par la nécessité, pour des besoins de fiabilité, d’assurer une quantité de charge minimale (25-30 fF). Ceci revenait à augmenter la capacité de stockage. Or, les capacités planars ne pouvaient assurer cet objectif sans entraver celui de la miniaturisation. D’où l’émergence des technologies de cellules en 3D [ASH97]. Les plus importantes d’entre elles sont : • Cellule à capacité tranchée (Trench Capacitor Cell) : Son grand avantage est la possibilité d’augmenter la capacité de la cellule en augmentant la profondeur de la tranchée, et non celle de la surface de silicium occupée par la cellule. Elle est assez utilisée pour les DRAMs de grandes capacités (e.g. 4 Mb) • Cellule à capacité entassée (Stacked Capacitor Cell ou STC) : Au lieu de trancher la capacité à l’intérieur du silicium, on la tasse au-dessus du transistor d’accès. Ce modèle est utilisé pour les DRAMs de 4 Mb et plus. L'opération de rafraîchissement : Les DRAMs sont dites dynamiques du fait qu’elles perdent leurs charges (informations), même en étant toujours sous tension (à cause des courants de fuite). Ce qui nécessite la lecture et le rafraîchissement de leurs cellules à des intervalles temporelles périodiques. Durant cette opération de rafraîchissement, une ligne entière est lue, et les informations qu’elle contenait y seront réécrites. On distingue trois modes de rafraîchissement, ayant tous pour objectif la diminution de l'impact de cette opération sur les performances de la RAM [MIC99] : 13 • • • Rafraîchissement en RAS uniquement : Le Rafraîchissement est effectué sur le front descendant du signal RAS, en maintenant le signal CAS au niveau haut. Pendant cette phase, les données en sortie sont dans un état de haute impédance. Rafraîchissement en CAS avant RAS (CAS before RAS refresh ou CBR) : Simple à utiliser, et peu consommateur en courant (utilise un compteur interne pour désigner les lignes à rafraîchir). Ce mode est activé en mettant le signal CAS au niveau bas, et en effectuant un front descendant du signal RAS. Rafraîchissement caché : Dans ce mode, l'utilisateur effectue une opération de lecture ou d'écriture, laisse ensuite le signal CAS à l’état bas et crée un front descendant du signal RAS en le faisant basculer du bas vers le haut et du haut vers le bas (sorte de rafraîchissement CBR). Dans un cycle de lecture les données restent valides en sortie, d'où le sens du terme "caché". Tous ces modes de rafraîchissement peuvent êtres utilisés avec un rafraîchissement en rafale (burst refresh), en effectuant une succession de cycles de rafraîchissement jusqu'à balayer toutes les lignes de la DRAM; ou un rafraîchissement distribué (le plus utilisé) toutes les 15,6µs. Ce dernier permet à la DRAM d'être disponible en lecture ou en écriture entre les cycles de rafraîchissement. Après avoir développé le principe et les différentes technologies des RAMs, la prochaine section traitera des fautes pouvant apparaître dans ces RAMs, de leurs modélisations et de leurs manifestations à travers les différents niveaux hiérarchiques. 1.4 Les fautes dans les RAMs Historiquement, les premiers algorithmes de tests pour mémoires, tels que le Damier (Checkerboard) ou GALPAT. [BRE76], étaient développés d'une façon empirique, et ne reposaient sur aucun modèle de faute particulier. Par conséquent, leur qualité en terme de couverture de fautes ne pouvait être prouvée (pas de modèle de faute utilisé). D'un autre côté, certains de ces tests sont de complexité O(n log n) ou O(n²). Leur application aux actuelles RAMs de capacité de l'ordre des mégabits nécessiterait un temps exorbitant Il apparaît donc clairement l'importance de la modélisation des fautes afin d’optimiser la qualité du test ainsi que son coût. Avant de développer les fautes spécifiques aux RAMs, nous donnons un bref aperçu sur les fautes et les principes de leurs modélisations. 1.4.1 Les fautes et leurs modélisations On parle d'une faute, lorsqu'il existe une différence physique entre le système correct et le système actuel. Cette faute se translate en erreur si le système est dans un état erroné. Cette translation peut ne jamais se produire (masquage de faute) ou se produire d'une manière différée. L’erreur conduit à une défaillance si elle est propagée jusqu’à la sortie du système. Du point de vue temporel, les fautes se manifestent de deux façons : fautes permanentes, et fautes non permanentes. Les fautes permanentes (appelées aussi fautes hard ou "solides"), sont présentes dans le système d'une manière permanente. Entre autres, ils incluent les erreurs de design (fautes logiques, fautes temporelles.), les défauts de fabrication (court-circuit, et circuit ouvert...) etc. 14 Les fautes non permanentes se produisent à des instants aléatoires et affectent le comportement du système pour des durées indéterminées. Les tests de fabrications ne peuvent donc pas les détecter. Si on ajoute à cela le faite qu'elles possèdent un pourcentage élevé par rapport à l’ensemble des types de fautes (88-97% d’après [GOO91]), on comprend que le test des fautes non permanentes est à la fois important et difficile à réaliser. En réalité il nécessite un type de test particulier (test en ligne) comme on le verra par la suite. Les fautes non permanentes peuvent à leur tour être subdivisés en fautes transitoires (appelés aussi fautes soft), causées par les conditions d’environnement tels que les rayons cosmiques, les particules alpha..., et en fautes intermittentes telles que le bruit, le timing critique, la température…etc. La modélisation des fautes est une opération assez complexe. Elle vise à avoir le meilleur compromis possible entre deux aspects antagonistes, à savoir, une reproduction fidèle du comportement du défaut réel, et une modélisation simple de celui ci. Le premier assure une bonne couverture des défauts réels et le second permet un coût raisonnable pour la simulation de la faute et la génération des vecteurs de test. Ce compromis est nécessaire du fait qu'en technologie CMOS, les défauts réels résultent souvent en des modèles assez complexes (le modèle simple de collage ne représente qu'une partie des défauts pouvant survenir), ce qui entrave l'objectif de la simplicité du modèle. Les défauts physiques sont souvent modélisés au niveau logique. Ceci permet, entre autre, de contourner l'examen physique fastidieux du circuit et de développer des tests indépendants de la technologie. Ces modèles logiques sont souvent utilisés dans le cas des fautes permanentes. Ces mêmes modèles peuvent servir également à la modélisation des fautes intermittentes. Nous devons cependant prendre en compte la durée courte des dysfonctionnements causés par ce type de fautes. Ceci peut se faire soit en répétant le test, soit en les translatant en fautes permanentes par le biais des conditions de stress (température, pression...). En revanche, il n'existe pas de modèles de fautes bien définis pour les fautes transitoires. 1.4.2 Modèles de fautes pour RAMs Une RAM peut être modélisée dans différents niveaux d’abstraction (figure 1.6). Cependant, pour le test des RAMs, on n’utilise généralement que des modèles de fautes basés sur les niveaux fonctionnels, électrique ou géométrique (layout). Le niveau comportemental étant peu précis par rapport au niveau fonctionnel. Le niveau logique n’est pas considéré, puisque la RAM est constitué essentiellement des cellules mémoires et non de portes logiques. Comportemental Fonctionnel Logique Electrique Géometrique Figure 1.6 : Niveaux d'abstraction utilisés pour la modélisation des fautes dans une RAM (blocs ombrés). 15 Notre travail concerne le test fonctionnel. Les fautes basées sur le modèle fonctionnel de la RAM seront donc développées d’une manière assez détaillée. 1.4.2.1 Les fautes fonctionnelles La figure 1.7 donne une version simplifiée du modèle fonctionnel de la RAM (figure 1.1). Ce modèle, appelé le modèle fonctionnel réduit, est plutôt adapté au cas du test et non à la localisation des fautes. Il a été largement utilisé [THA78], [ABA83], et [GOO90] à cause de sa simplicité et sa représentation des fonctions essentielles d’une RAM. Adresses Décodeurs d'adresses Matrice mémoire Logique de lecture/écriture Données Figure 1.7: Le modèle fonctionnel réduit. Avant de développer et analyser les fautes pouvant affecter chacun des blocs de ce modèle réduit, mentionnons que la modélisation des fautes des RAMs est généralement basée sur les hypothèses suivantes : • Les fautes sont uniques : cette supposition permet de réduire la complexité du test1 . Elle peut être justifiée par le faite que la majorité des fautes multiples peut être détectée par les te sts de fautes uniques. • L’opération de lecture ne cause pas de faute: cette supposition est nécessaire du moment que l’opération de lecture est la seule façon de vérifier le contenu de la cellule. Sans elle la procédure de test devient impossible. • L’opération d’écriture non transitoire ne cause pas de faute : cette supposition concerne le cas des DRAMs, puisque comme on l’a vu, leur lecture est destructive et nécessite une opération de réécriture. Les fautes dans la matrice mémoire a)- Fautes de collage (Stuck at Faults (SAFs)) : Une cellule mémoire collée à 0 (SA0) ou à 1 (SA1), ne peut être mise à 1 ou à 0 (respectivement), par une opération d'écriture 2 . 1 A titre d’exemple, la détection d’une faute de collage unique est de complexité O(n), tandis que celle d’une faute de collage double est de O (n2 ). 16 En comparaison avec les autres types de fautes, le nombre de fautes de collage possibles dans la mémoire est relativement peu élevé. (un circuit contenant N logiques distinctes peut avoir jusqu'à 2N SAFs). Pour tester des SAFs, chaque cellule (ligne) doit être mise à 1 et à 0 (écrire un 1 ou un 0 et lire la cellule correspondante). b)- Fautes de transition (Transition Faults (TFs)) : Une cellule dans un état s {0,1}, ne peut effectuer la transition s à s (quand on veut écrire s dans cette cellule). Ainsi, on peut avoir une TF positive <↑ / 0>, ou négative<↓ / 1>. Pour le test des TFs, chaque cellule doit effectuer une transition positive et une autre négative, et être lue aussitôt (après la transition). Remarque : Les TFs ne peuvent pas survenir dans les DRAMs, puisque leurs cellules sont des capacités et non des bistables [DAS97]. c)- Fautes de couplage (Coupling Faults (CFs)): Une faute de couplage double (simplement appelée CF) [NAI78], [SUK81], implique deux cellules. Une opération d'écriture qui génère les transitions 0à1 ou 1à 0 dans une cellule j, change l'état d'une autre cellule i {i ≠ j} de s à s, indépendamment du contenu des autres cellules. Les CFs sont causées par les courts-circuits et les effets parasites, tels que les fuites de courant, ou les capacités d'isolement. En réalité ce sont un cas particulier des fautes de K-couplage [NAI78] Ceux ci nécessitent, en plus des deux cellules (couplante et couplée) i et j, que k-2 autres cellules (pouvant êtres n'importe ou dans la matrice mémoire), soient dans des états particuliers. On distingue les CFs dépendants de la transition de la cellule couplante, et ceux dépendants de l'état de celle ci. Marinescu classifie les CFs basées sur la transition de la cellule couplante en [MAR82] : • Fautes de couplage indempotant (Idempotent Coupling Faults (CFids )) : Une transition positive ou négative d'une certaine cellule force le contenu d'une autre cellule à la valeur 0 ou 1.Quatre CFids sont possibles : <↑ , 0>, <↑ , 1>, <↓ , 0> et <↓ , 1>. • Fautes de couplage inverse (Inverting Coupling Faults (CFinvs)) : Une transition positive ou négative d'une certaine cellule inverse l'état d'une autre cellule indépendamment du contenu de celle-ci. Il existe deux CFinvs : <↑ , b>, <↓ , b> (le symbole b représente une inversion d’état d'une cellule). Tester pour ces types de fautes revient (si nécessaire) à initialiser la cellule couplée à une valeur adéquate, effectuer (par une écriture) la transition appropriée de la cellule couplante et lire la cellule couplée correspondante. 2 Certains auteurs admettent qu'une cellule collée peut changer d'état à la suite d'une faute de couplage. 17 Remarque : Dans [NIC85], il est supposé que les CFids se produisent plus fréquemment que les CFinvs, puisqu’il est peu probable que la même action implique des transitions opposées (0 à 1 et 1 à 0) à la cellule fautive. Les fautes de couplage causées par l'état de la cellule couplante peuvent affecter plus d'une cellu le (ou ligne). On distingue : • • Les "Bridging Faults" (BFs ) : Ils représentent un grand pourcentage des fautes se produisant dans les circuits intégrés. Ils consistent en des courts-circuits entre deux ou plusieurs nœuds. Cette faute bidirectionnelle (pont), peut être modélisée par un modèle en "wire-OR", ou en "wireAND", selon la technologie utilisée. Certaines recherches [ACK91] ont montré que les BFs peuvent également résulter en un comportement plus complexe, que le modèle permanent logique exposé ci dessus. [DEK88] défini les fautes de couplage d’état (State Coupling Faults (SCFs)) comme ceci : une cellule (ou ligne) couplée est forcée à une valeur donnée uniquement lorsque la cellule couplante est dans un état particulier. Les SCFs possibles sont donc <0;0>,<0;1>, <1;0> et <1;1>. Tester pour ces fautes nécessite de mettre (en écriture) la cellule couplante dans un état donné, et tester la cellule couplée pour les deux états 0 et 1. Cette procédure est refaite pour l’état inverse de la cellule couplante. d)- Fautes sensibles à la configuration du voisinage (Neighborhood Pattern Sensitive Faults (NPSFs)): Dans la figure 1.8, une hiérarchie des différentes fautes appartenant à la même classe de fautes est présentée. K =N PSF NPSF Fautes de Kcoulplage K =5 ou 9. CF K =2 Figure 1.8 : Classes des PSFs. Les fautes sensibles à la configuration (Pattern Sensitive Faults (PSFs)) peuvent êtres définies comme étant la sensibilité du contenu d'une cellule à celui de toutes les autres cellules de la mémoire. Les PSFs sont causées par la grande densité des RAMs, ainsi que par les interférences indésirables (e.g. électromagnétiques). A cause de la complexité des PSFs (une complexité minimale de 3n*2n 18 [HAY75]), on considère souvent les fautes de k-couplage, ou les cellules couplantes appartiennent à un ensemble restreint de k cellules parmi toutes les cellules de la mémoire. En poussant les choses plus loin, Suk [SUK 80] ne considère (pour des raisons de coût) que le modèle encore plus restreint des fautes sensibles au voisinage ou NPSFs. Ce modèle est basé sur l’hypothèse que la cellule de base (cellule couplée) ne peut être réellement influencée que par ses voisins topologiques (physiques). Cette hypothèse est assez réaliste du moment que les cellules voisines topologiquement partagent des lignes et des composants électriques avec la cellule de base, et sont donc susceptibles d’interférer avec elle. On considère souvent le voisinage à 5 ou 9 cellules (figure 1.9 a et b). N W B E S (a): voisinage 5cellules N W W N NE B E SW S SE (b): Voisinage 9- B (c) : Voisinage en ligne/colonne Figure 1.9 : Différents types de voisinages. L'adjacence logique (adresses consécutives) ne conduit pas nécessairement à une adjacence physique. On parle alors "d’adresses brouillées" (scrambled adresses). Pour les RAMs actuelles de hautes densités, cette différence peut être due à différents facteurs. A titre d’exemple, afin d’ augmenter le rendement de la mémoire fautive, des colonnes et des lignes de rechange sont parfois utilisées pour sa reconfiguration (voir chapitre 5). Dans une RAM reconfigurée, les cellules voisines physiquement peuvent ne pas l’être logiquement. Les NPSFs peuvent êtres classées en : • NPSFs actives3 (ANPSFs) [SUK 80] : La cellule de base change son contenu suite à un changement dans la configuration des cellules avoisinantes (une transition positive ou négative d'une cellule avoisinante, et le reste est dans un certain état). Le test pour les ANPSFs doit effectuer la lecture, depuis chaque cellule, de l’état 0 et de l'état 1, et ceci pour toutes les transitions possibles du voisinage de la cellule de base. • NPSFs passives (PNPSFs) [SUK 80] : Influencé par le contenu des cellules avoisinantes, le contenu de la cellule de base ne peut être changé. Pour tester pour les PNPSFs, les valeurs 0 et 1 doivent êtres écrites et lues de chaque cellule, et ceci pour toutes les combinaisons possibles du voisinage de la cellule de base. 3 Appelées également NPSFs dynamiques dans [SAL 85]. 19 • NPSF statiques (SNPFs ) [SAL85] : Le contenu de la cellule de base est forcé à une certaine valeur par le contenu de la configuration des cellules avoisinantes. Pour tester pour les SNPSFs, on doit lire l'état 0 et 1 de chaque cellule, et ceci pour toutes les combinaisons possibles du voisinage de la cellule de base. D'autres voisinages ont été explorés. Dans [FRA90] au lieu de considérer le voisinage physique (NPSFs) ils considèrent le voisinage (électrique) ligne/colonne (figure 1.9.c) puisque toutes les cellules d'une ligne partagent la même ligne de mots (LM), et que toutes les cellules d'une colonne partagent la même ligne de bit (LB). En plus, les tests basés sur ce modèle de fautes restent valides pour les mémoires reconfigurables (impliquant des adresses brouillées). Les fautes citées jusqu’à maintenant sont les modèles les plus utilisés. D’autres fautes effectives affectant la matrice mémoire existent. Les plus importantes d’entre elles sont : • Les fautes de collage ouvert (Stuck Open Faults (SOFs)) [DEK88] : La cellule mémoire ne peut être accédée à cause d’un circuit ouvert dans la ligne mot. • Les fautes de couplage perturbé (disturb coupling faute (CFdst))4 [JON76]: Cette faute ne dépend pas de l’état d’une cellule ou de l’opération d’écriture dans celle ci (comme c’est le cas pour toutes les fautes de couplage vues jusqu’ici), mais peut être due à une opération d’écriture ou de lecture sur la cellule couplante. Ces opérations provoquent une perturbation (une transition négative ou positive) sur la cellule couplée. Il existe huit CFdsts possibles : <r0 ; ↑ >, <r0; ↓>, <r1; ↑>, <r1; ↓>, <w0; ↑>, <w0; ↓ >, <w1; ↑ >, <w1; ↓> (wx et rx pour écriture et lecture de la donnée x respectivement).L’intérêt d’un tel modèle de faute a été prouvé dans [GOO96]. Les fautes dans le décodeur d’adresse (Address Faults- AF) Les modèles de fautes pour la matrice mémoire (SAF, TF, CF et NPSF) sont également valables pour les fautes pouvant affecter le décodeur d’adresses ou la logique de lecture/écriture. Selon [GOO91], les fautes fonctionnelles du décodeur d'adresse peuvent résulter dans les fautes suivantes : • En présence d'une certaine adresse, aucune cellule ne peut être accédée (faute 1). • Une certaine cellule ne peut jamais être accédée (faute 2). • En présence d'une certaine adresse, plusieurs cellules sont accédées simultanément (faute 3). • Une certaine cellule peut être accédée avec plus d'une adresse (faute 4). Ces fautes ne se manifestent jamais toutes seules (il y'a autant de cellules que d'adresses), mais plutôt, en combinaisons les uns avec les autres. Par exemple, la faute1 entraîne l'apparition des fautes 2 ou 3. La faute 2 implique au minimum l'apparition de la faute 1 ou de la faute 4. Et la faute 3 nécessite la 4 Cette faute ne respecte donc pas l’hypothèse d’une lecture non fautive. C’est un modèle plus probable pour les DRAMs. Leur contenu est en effet rétabli à chaque accès. On parle alors de couplage de faute dynamique, ou une opération de lecture, d’écriture ou de rafraîchissement sur la cellule peut entraîner une faute. Ce principe a été utilisé dans [SAC93] pour développer un modèle de faute de couplage pour les DRAMs. 20 présence des fautes 1 ou 4. Ainsi, les fautes d’adresses sont généralement groupées en quatre groupes de fautes donnés par la figure 1.10. Ax Cx Ax Cx Ax Cx Ay Cy Faute B (1+3) Ay Cy Faute C (2+4) Ay Cy Faute D (3+4) Ax Cx Faute A (1+2) Figure 1.10 : Classes de fautes dans le décodeur d'adresses (A : adresse, C : cellule). Presque5 toutes les fautes du décodeur d'adresse peuvent être modélisées en fautes de la matrice mémoire [THA77]. Le test dédié aux fautes de la matrice mémoire permet donc de les détecter. Remarque : Dans le cas d'une technologie CMOS, une "Stuck Open Fault" [MIC86] peut se produire. Une étude intéressante [SAC96] a montré qu'en présence d'une certaine combinaison d'adresses, cette faute peut transformer le comportement combinatoire du décodeur d’adresses en un comportement séquentiel. Les fautes dans la logique de lecture/écriture La plupart des fautes de la logique de lecture/écriture sont faciles à détecter puisqu'elles résultent en des défauts catastrophiques (permanents). Toutes ces fautes (fautes de collage, fautes de transition et fautes de couplage) peuvent être transposées en fautes dans la matrice mémoire [NAI78] [THA77], et détectées par les tests dédiés à celle ci. 1.4.2.2 Les fautes dynamiques Les fautes fonctionnelles affectent le comportement logique du circuit. Elles ne constituent qu'une partie des fautes d'un circuit (en particulier une RAM). L'autre partie concerne les fautes électriques. Ces fautes peuvent être soit paramétriques affectant les paramètres électriques (courant/voltage) de la RAM, soit dynamiques (d’origine électrique), affectant les paramètres temporels de celle ci. Nous avons choisi de présenter cette dernière catégorie de fautes (les fautes dynamiques), parce qu'elles se manifestent comme des fautes fonctionnelles (bien qu'elles ne puissent être modélisée par les modèles de fautes fonctionnelles). En plus, la majorité de ces fautes peut être détectée par des tests fonctionnels. Dans [GOO91], les fautes dynamiques sont classées en : • Les fautes de recouvrement (Recovery Faults) : Ces fautes se manifestent comme des fautes fonctionnelles lorsque la RAM est utilisée au maximum de ses limites temporelles. Dans ce cas quelques parties de la RAM ne peuvent se rétablir rapidement, de telle sorte que l'opération actuelle est influencée par la précédente. 5 Les fautes de type NPSF ne peuvent être transposées à la matrice mémoire [goor90]. 21 On distingue les fautes de recouvrement de l'amplificateur de lecture, et ceux de l'opération d'écriture. Les premières se produisent lorsque l'amplificateur de lecture est saturé par une longue série de la même chaîne de données (0 or 1), et n'est pas assez rapide pour lire la valeur opposée. Les secondes sont dues à la "lourdeur" du décodeur d'adresses, tel que l'opération de lecture courante utilise l'adresse de celle qui la précède. Pour tester pour ces fautes, 1- suivre l'opération de lecture pour une adresse donnée par une opération (lecture ou écriture) à une adresse différente. 2- tester pour toutes les combinaisons d'adresses. • Les fautes de rétention (Retention Faults) : Ces fautes ne sont pas dues à une opération de lecture ou d'écriture, mais se produisent lorsque la RAM perd ses informations d'une manière spontanée. On distingue les fautes de "Sleeping Sickness" et celles de collage de la ligne de rafraîchissement (Refresh Line Stuck at). Les premières sont dues à la perte de charge de la cellule (capacité) lorsque la DRAM n'a pas été accédée pendant un long moment (leurs équivalentes en SRAM sont les pertes de données statiques ou "Static Data Loss"). Les secondes sont dues au fait que la DRAM ne retient pas ses données pour un temps supérieur à la période maximale de rafraîchissement. Le test de ces fautes nécessite de placer des éléments de temporisation entre les séquences de test. • Fautes de "déséquilibre" (Imbalance Faults) : Quand une cellule mémoire est lue, l'amplificateur de lecture peut produire la valeur opposée lorsque toutes les cellules se trouvant dans la même ligne de bit contiennent cette valeur opposée. 1.4.3 Les relations entre les fautes Les fautes fonctionnelles vues jusqu'à maintenant peuvent être classées selon leurs degrés de complexité dans la hiérarchie donnée par la figure 1.11. Les études menées dans ce domaine ont montré que les tests qui détectent un modèle de faute donné, détectent en général les modèles de fautes de moindre hiérarchie. C'est le cas par exemple du test pour les TFs qui détecte également les SAFs. SAF TF CFst CFinv CFid. PNPSF ANPSF SNPSF (Hierarchie ↑) Figure 1.11 : Hiérarchie de fautes fonctionnelles réduites. Les fautes peuvent êtres combinées et résulter en fautes liés ou non. Papachristou [PAP85] considère que les fautes sont liées lorsqu’une faute influence le comportement d'une autre faute. Dans certains cas, les liens entre fautes peuvent générer un effet de masquage et empêcher ainsi le test de détecter les deux fautes (dans d'autres cas ils peuvent produire un effet d'élimination, ou une faute 22 donnée inhibe l’excitation de la faute avec laquelle elle est liée). Les TFs par exemple, peuvent être liés avec les CFs, impliquant un masquage réciproque. La Figure 1.11 donne également l'ordre de dominance des fautes (l'inverse de celui de leur hiérarchie). Les fautes avec une grande dominance peuvent masquer ceux de moindre dominance. Lorsque le masquage se produit, un nouveau test doit être fourni. Quelques fautes liées sont cependant difficiles à détecter avec les tests fonctionnels. D'autres sont impossibles à détecter avec ce genre de tests. C'est le cas par exemple d'un nombre pair de CFinvs liées, qui sont excitées par la même transition positive ou négative de leurs cellules couplantes, qui sont localisées du même coté des adresses hautes ou basses par rapport à l’adresse de la cellule couplée (commune). La section suivante présente une revue générale des techniques de test développées par les chercheurs afin de détecter, entre autres, les fautes fonctionnelles et électriques qu'on vient de voir. 1.5 Tests fonctionnels des RAMs L'objectif du test est la détection et éventuellement, la localisation (en vue d'une réparation) des différentes fautes pouvant exister dans le circuit. De part leur spectre d'applications très large, leurs configurations assez diverses et leurs technologies variées, les RAMs possèdent (comme on l’a vu) une multitude de modèles de fautes. Il s'ensuit que le test des RAMs ne peut se faire en utilisant un flux de test unifié, mais plutôt des tests spécifiques à chaque modèle de faute. En général, les algorithmes de test pour RAM sont basés sur les modèles de fautes fonctionnels (la structure interne de la mémoire n’est pas prise en compte). Ils sont conçus dans l'objectif de couvrir toutes les fautes d'un modèle de faute particulier, et ceci avec le minimum de complexité (longueur) possible. La figure 1.12 donne une taxonomie assez complète des tests fonctionnels pour RAMs. Tests Fonctionnels Tests Pseudorandom Tests déterministes Tests traditionnels Tests basés sur les modèles de fautes Test March Test NPSF Figure 1.12 : Taxonomie des tests pour RAMs. D'après cette taxonomie on peut distinguer les tests traditionnels dits libres. Bien qu'ils appartiennent à la famille des tests fonctionnels, ils ne sont basés sur aucun modèle de faute précis. À l'inverse, les tests March, basées sur des modèles de fautes SAFs, TFs et CFs, et les tests NPSF, basées sur les fautes NPSFs, assurent (à 100%) la détection de leurs modèles de fautes respectifs. Enfin la famille des tests fonctionnels comprend aussi celle des tests pseudo-aléatoires. Dans ce type de tests, soit les adresses et/ou les données et/ou les opérations (lecture/écriture) sont générés d'une 23 manière aléatoire pour une implémentation efficace. Leur couverture de faute n'est pas assurée à 100%, mais elle peut l’être au prix d’une complexité croissante. Tous ces tests fonctionnels, peuvent être réalisés au niveau puce, au niveau carte et même au niveau système. Pour ces deux derniers niveaux, on s’intéresse souvent à la localisation (en plus de la détection) des fautes. 1.5.1 Les tests fonctionnels traditionnels Historiquement, ces tests traditionnels sont les premiers tests fonctionnels pour RAMs. Bien qu'ils soient plus coûteux (>= O(n)) que les tests March, ils offrent cependant un certain nombre d’avantages : • Ils peuvent détecter un certain nombre de fautes non fonctionnelles. • Quelques-uns d'entre eux permettent une localisation assez précise des fautes détectées. • Les anciennes mémoires ayant des tailles peu importantes, s’accommodent parfaitement de la complexité de ces tests. Les tests traditionnels les plus connus sont : MSCAN [ABA83], Checkerboard, GALPAT, Walking 0/1[BRE76], Sliding diagonal et Butterfly [GOO91]. Le test Checkerboard par exemple, peut détecter entre autres les fautes Sleeping Sickness (voir section1.3.2.2). Il génère en effet, le pire cas de configuration de données pour le courant de fuite dans une DRAM (cellule de base à 1 et toutes les cellules avoisinantes à 0). Même si GALPAT et Walking 0/1 sont de complexité O(n²), ils peuvent cependant localiser les SAFs, TFs, CFs et AFs. En plus, GALPAT peut également détecter les fautes de recouvrement en écriture (voir section 1.3.4). Le tableau 1.2 résume les couvertures de fautes ainsi que les complexités de ces tests traditionnels : Couverture de faute Algorithme de test Complexité du test SAF TF CF AF Fautes Dynamiques MSCAN L - - - - O(n) Checkerboard L - - - Rétention O(n) GALPAT L L L L Recouvrement en écriture O(n²) Sliding diagonal L L - LQ - Walking 1/0 L L L L Recouvrement de l'ampli de lecture O(n²) Butterfly L - - - - O(n log n) O(n Tableau 1.2 : Tests fonctionnels traditionnels (D : détecte, L : localise LQ : localise quelques-uns et - : aucun). 24 n ) 1.5.2 Les tests Marchs Les tests March sont des algorithmes de test plus récents, avec de meilleures couvertures de fautes et de complexité (O(n)) inférieure ou égale à celle des tests tradition nels. Ils sont dits "March" parce qu'ils marchent (balayent) d'une façon uniforme à travers les cellules de la RAM. Ils peuvent détecter les SAFs, les TFs et les CFs et leurs combinaisons. Ils peuvent également détecter quelques fautes NPSFs. Les tests Ma rch sont souvent symétriques. Ils acceptent un adressage ascendant (⇑), ou descendant (⇓) sans aucune conséquence sur leur couverture de fautes. Ainsi, pour n'importe quel algorithme March, on peut avoir quatre versions différentes assurant exactement la même couverture de fautes (avec des données complémentaires ou non et un adressage inversé ou non). Les tests March procèdent généralement de la même manière : d'abord ils excitent (sensibilisent) la faute en portant les cellules qui y contribuent à l’état désiré (pour une CF de type <↑ , 0>, faire la transition positive de la cellule couplante). Ensuite, ils activent la faute en écrivant la valeur opposée à celle que permet celle ci (pour une SA0, par exemple, écrire un 1). Et enfin, ils mettent à jour la faute en effectuant une opération de lecture sur la cellule correspondante. Nous illustrons ci-dessous le principe d'élaboration d'un test March capable de détecter les modèles de fautes basiques (SAF, TF, CFinv et Cfid). Pour se faire, nous allons détaille r la couverture du test pour les fautes Cfids. Ces fautes possèdent une hiérarchie supérieure à celle des autres. Leur test permet également de couvrir les autres modèles de fautes. L'algorithme March A [SUK 81] : Pour détecter une CF, lorsque la cellule j influence la cellule i, on doit provoquer une transition sur la cellule j et lire la cellule i. En d'autres termes, la cellule j doit être adressée avant la cellule i. Pour une CF ou cette fois ci c'est la cellule i qui influence la cellule j, la cellule i doit être adressée avant la cellule j. Pour cette raison, dans le cas des fautes de couplage, on utilise une séquence (un élément) de March dans un certain sens, et on répète ensuite cette même séquence dans le sens d'adressage opposé. Ainsi, chaque paire de cellules i et j est adressée dans les deux sens. Pour détecter les CFid de type <↑ ; 1>, on initialise d'abord toutes les cellules à 0. On exécute ensuite un élément March dans lequel on provoque la transition positive (↑) de toutes les cellules. Ceci va activer n'importe qu'elle CFid de type <↑ ; 1> ou la cellule couplante est adressée avant la cellule couplée. On peut également provoquer dans le même élément March, la transition négative (↓) pour détecter les CFids de type <↓ ; 1>. Enfin on doit bien sûr, effectuer une opération de lecture sur chaque cellule, afin de mettre à jour le résultat des fautes. Cette opération de lecture doit être réalisée à la première place, afin d'éviter que l'opération d'écriture sur une cellule (couplée) masque l'effet de couplage activé par les transitions des autres cellules (couplantes). De cette première analyse, on obtient les deux éléments March (initialisation et détection des fautes <↑ ; 1> et <↓ ; 1>.) suivants : c (w0) ; ⇑ (r0,w1,w0). On doit maintenant ajouter un autre élément March pour la détection des CFids de type <↑ ; 0> et <↓ ; 0>. En suivant l'analyse précédente, on obtient l’élément (r1,w0,w1). Cependant cet élément nécessite que toutes les cellules soient initialisées à l’état 1. On rajoute donc une opération d'écriture à 1 dans l’élément March précédent. On obtient ainsi : c (w0) ; ⇑ (r0,w1,w0,w1) ; ⇑ (r1,w0,w1). À noter que ces séquences possèdent des propriétés intéressantes : les deux éléments March incluent les transitions ↑ et↓, et leur dernière transition est ↑. En plus, un élément commence avec une lecture 25 de 0 et le second avec une lecture de 1. Ces propriétés permettent de détecter toutes les CFids multiples, et en particulier, les Cfids liées. Comme on l'a déjà expliqué, on doit répéter les éléments March en utilisant un adressage en sens inverse. On obtient finalement l’algorithme de March A donnée par la figure 1.13. { ⇑ (w0) ; ⇑ (r0,w1 ,w0, ,w1) ; ⇑ (r1,w0,w1) ; ⇓ (r1,w0,w1,w0) ; ⇓ (r0,w1,w0)} M0 M1 M2 M3 M4 Figure 1.13 : L'algorithme March A. March A est de complexité 15n, et assure la détection des fautes suivantes : • SAF : SA0 sont détectées par les opérations de lecture des M2 et M3. Tandis que M1 et M4 détectent les SA1. • TF : <↑ / 0> sont détectées par M1 suivi de M2, ou M2 suivi de M3. <↓ /1> sont détectées par M3 suivi M4. • CFid : Les CFids simples et multiples sont détectées. • CFinv : Le test pour CFids permet également de détecter les CFinvs ([GOO 91]). • March A détecte également les CFids liées et quelques CFids liées avec les CFinvs. Ainsi March A est un algorithme complet (pour les SAFs, TFs et CFs), et non redondant (tous ses éléments sont nécessaires à la détection de ces fautes). Remarque : Afin de détecter les fautes dans le décodeur d’adresses, [GOO91] donne la condition nécessaire et suffisante suivante : ⇑ (rx,…,wx); ⇓ (rx,…, wx); avec x et x ∈ {0, 1} où le symbole “…” signifie un nombre d’opérations quelconque. La condition ci dessus est respectée par les séquences 2 et 4 de l’algorithme March A. Celui-ci couvre donc également les fautes d’adressage. La figure 1.14 résume les algorithmes de type March les plus connus, tandis que le tableau 1.3 donne leurs caractéristiques en termes de complexité et couverture de faute. L'algorithme de March LR est l'un des plus récents à être développé. Il possède la couverture de faute la plus large tout en ayant une complexité des plus modérée. 26 March C - :{ c (w0) ; ⇑ (r0,w1); ⇑ (r1,w0); ⇓ (r0,w1) ; ⇓ (r1,w0) ; c (r0)} [GOO91] March A : { c (w0) ; ⇑ (r0,w1,w0,w1) ; ⇑ (r1,w0,w1) ; ⇓ (r1,w0,w1,w0) ; ⇓ (r0,w1,w0)} [SUK81] March B: {c(w0) ; ⇑ (r0,w1,r1,w0,r0,w1) ; ⇑ (r1,w0,w1) ; ⇓ (r1,w0,w1,w0) ; ⇓(r0,w1,w0)} [SUK81] March M : {c(w0) ; ⇑ (r0, w1, r1, w0); c (r0); ⇑ (r0, w1) ; c (r1); ⇑(r1,w0,r0,w1) ; c(r1) Figure 1.14 : Exemples d’algorithmes March. A noter enfin que tous ces tests Marchs peuvent être facilement modifiables pour détecter les fautes de rétention et les fautes de collage ouvert (SOFs). Ceci peut se faire en insérant des éléments de temporisation entre les éléments Marchs pour les premières, et en suivant une opération d’écriture à (1 et 0) par une opération de lecture dans le même élément March pour les secondes. Couverture de fautes Algorithme SAF TF CF AF Fautes liées. Complexit é March C D D D D CFid-CFid 10n March A D D D D March B March M March LR D D D D D D D D D D D D 15n CFid-CFid TF-CFids TF-* CFid-* CFst-*6 TF-* CFid-* CFst-*7 CFdst-* 17n 16n 14n Tableau 1.3 : Caractéristiques des différents algorithmes March (D : détecte, * : SAF, TF, ou CF). 6 7 À l'exception de lien CFst-CFst. À l'exception de lien CFst-CFst. 27 1.5.3 Les tests NPSF Nous avons déjà vu que les fautes de type NPSF (section 1.4.2) sont un cas restreint des fautes sensibles à la configuration (PSF). Tester la RAM pour les PSFs nécessite (3n² + 2n)* 2n opérations ce qui est assez coûteux et peu pratique. En revanche, les tests pour les NPSFs possèdent une complexité plus raisonnable (tableau 1.4). Type de NPSF Nombre d'opérations (par cellule) ANPSF PNPSF SNPSF (k-1). 2k 2k 2k Tableau 1.4 : Tests NPSF : nombre d'opération par cellule (k = 5 ou 9, voisinage considéré). Cette complexité modérée, avec le fait que les NPSFs sont assez représentatives des fautes qui apparaissent avec les RAMs actuelles (de hautes densités), et que leur test permet également de couvrir les fautes de moindre hiérarchie, sont autant de raisons pour adopter ce modèle de fautes. Une approche générale, pour tester la cellule de base pour les NPSFs actives et statiques consiste à [ABA83] : 1- Sensibiliser (exciter) toute faute en utilisant la configuration (voisine) adéquate. 2- Lire l'état de la cellule de base aussitôt pour détecter la faute. Afin de générer la configuration appropriée d'une façon efficace, la longueur de la séquence test doit être minimale. Pour réaliser cet objectif, les deux méthodologies ci dessous sont généralement utilisées : • Dans le cas d'une configuration contenant uniquement des 0s ou des 1s comme celle des SNPSFs, la séquence Hamiltonienne doit être utilisée. Cette séquence permet un nombre minimal d'opération d'écriture en générant des configurations qui diffèrent d'un seul bit par rapport à leurs précédentes. Le code Gray constitue un exemple typique d'une séquence Hamiltonniene. • Dans le cas d'une configuration contenant une transition positive (0à1) ou négative (1à0), comme celles que nécessitent les ANPSFs et les PNPSFs, on doit utiliser la séquence d'Euler. Cette séquence génère d'une manière exhaustive toutes les transitions (une seule transition est permise à chaque fois) possibles des k bit d'une configuration. Une fois les données de test générées (en appliquant une des méthodes ci dessus), la prochaine étape consiste à appliquer ces configurations pour tous les voisinages de la matrice mémoire. Afin de minimiser le nombre des opérations d’écriture, on minimise le nombre d'adresses générées. Ceci peut se faire en testant les différents voisinages d'une manière simultanée, soit en utilisant la méthode de pavage "tilling" ou celle dite des deux groupes. Dans la méthode de pavage [MAZ87], la matrice mémoire est complètement couverte par un graphe de voisinages de type tetromino, qui ne se chevauchent pas. Elle est parcourue de manière à ce que chacune des cellules réalise toutes le s transitions et les valeurs prévues. On peut utiliser pour cela soit le voisinage 5-cellules soit celui de 9-cellules. Dans le cas des NPSFs statiques, on effectue n2k écritures, en utilisant la méthode du pavage ce nombre peut être réduit à (n/k) 2k écritures. Le même 28 raisonnement est valable pour les NPSFs actives et passives (diviser par k le nombre total d'opération d'écriture). Dans la méthode des deux groupes [SUK80], la matrice mémoire est divisée en deux groupes. Une cellule donnée est une cellule de base dans un groupe, et une cellule avoisinante dans un autre groupe. Cette méthode ne peut être appliquée que pour le voisinage à 5-cellules. Elle permet de réduire au quart le nombre d'opérations de lecture. Plusieurs algorithmes pour la détection et éventuellement la localisation des NPSFs ont été proposés dans la littérature. On trouve dans [GOO91] un bon résumé des ces algorithmes. Ils diffèrent entres eux en fonction du type de fautes détectées et/ou localisées (NPSF active, passive ou statique), du type de voisinage utilisé (5-cellules, ou 9-cellules), et enfin du type de génération d'adresses adopté (la méthode des 2 groupes, ou celle du pavage). On donne ci après quelques exemples de ces algorithmes : • Suk et Reddy proposent dans [SUK80], un algorithme pour la détection et la localisation des NPSFs actives et passives (APNPSFs). L'algorithme utilise le voisinage en 5-cellules et la méthode des 2-groupes. Il est de complexité 195.5n (sachant que la limite inférieure pour la détection des APNPSFs est de 160 lectures + 32 écritures = 192 opérations). L'algorithme peut être facilement modifié pour localiser uniquement les ANPSFs ou uniquement les PNPSFs. • On trouve dans [SAL85] un algorithme pour la détection des NPSF statiques. Il utilise la méthode de 2-groupes avec un voisinage de 5-cellules. L’algorithme consiste à écrire un 0 dans la cellule de base et générer les 16 combinaisons possibles des cellules de voisinage. Après chaque combinaison, on vérifie le contenu de la cellule de base (avec une opération de lecture). On répète ensuite les mêmes étapes en écrivant cette fois ci un 1 dans la cellule de base. L'algorithme nécessite 32n lectures et 34n écritures. En utilisant une combinaison de trois séquences hamiltonnienes on peut réduire le nombre d'écriture à (7/8)*40n. • Un algorithme basé sur la sensibilité aux configurations ligne/colonne a été proposé dans [FRA90]. Il considère que les interactions entre les cellules de la même ligne ou de la même colonne. Cet algorithme est plus général que les algorithmes (classiques) pour NPSFs, et détecte en plus des fautes sensibles au voisinage ligne/colonne, les SAFs, CFs, et les NPSFs. Il est de complexité plutôt grande (O(n3/2 )), mais possède l'avantage d’être valable aussi pour les mémoires reconfigurable s. La plupart des algorithmes NPSFs (notamment les deux décrits ci dessus) sont basés sur hypothèse que les voisinages physique et logique sont identiques. D'autres algorithmes n’utilisant pas cette hypothèse et sans même connaître la table de brouillage ont été proposés dans [FRA91]. Ils sont de complexité O(n[log3 n]2 ), et permettent également de détecter les SAFs et les CFs. D'autres chercheurs ont considéré le problème de test des fautes de k-couplage, sans aucune restriction sur la localisation des cellules couplantes. Leurs algorithmes sont basés sur une famille de code binaire, appelée codes exhaustifs. Un code exhaustif (n,k-1) (n taille de la RAM, et k taille du voisinage qui peut être placé n'importe ou dans la matrice mémoire) est un code qui produit les 2k configurations possibles dans une séquence de longueur n. Dans [COC94], on propose deux algorithmes de complexité 10n et 4 n.log2n + 18n, capables de détecter les fautes de 2-couplage et de 29 3-couplage (respectivement). Un autre algorithme traitant des fautes de couplage élevé (6-couplage et 9-couplage) est donné dans [DAS97]. 1.5.4 Tests Pseudo Aléatoire pour RAMs (Pseudo Random Tests PRT) La Figure 1.15 montre le schéma bloc d'une RAM avec ses signaux d’adresses, de lecture/écriture (R/W) et des données d'entrée. Dans le cas d'un test déterministe, tous ces signaux sont déterministes. Les tests pseudo-aléatoires quant à eux, nécessitent que soit les données et/ou les adresses et/ou le signal de contrôle de lecture écriture soient générés d'une manière aléatoire. Ainsi, selon où non l'aspect aléatoire d'un ou plusieurs de ces signaux, on peut avoir différents algorithmes PRT. On parle alors de probabilité d'échappement (escape probability) e. Pour un modèle de fautes donné, soit par exemple le SA0 , la probabilité de ne pas détecter cette faute est donnée par e. Pour e = 0.002, on aura donc une couverture de fautes (pour ce modèle de fautes) minimale de 99.8%. Bus de données Contrôle de lecture/écriture 1 B RAM sous test. Bus d'adresses N Figure 1.15 : Modèle simplifié d'une RAM. Cette probabilité d'échappement est inversement proportionnelle à la longueur de la séquence de test. Plus e est petite (une grande couverture de fautes) plus cette longueur est importante. Le coût et la complexité d'un test pseudo-aléatoire dépendent d'une manière directe de sa longueur. Celle-ci, comme on vient de le voir, dépend à son tour de la couverture de faute désirée (probabilité d'échappement), du modèle de faute considéré, mais aussi du type du PRT utilisé. Soit : L = F (modèle de faute, type de PRT, probabilité d'échappement). Pour calculer la longueur de test L, on modélise généralement le modèle de faute ainsi que le type de PRT utilisé par des chaînes de markov. A titre d'exemple, le modèle d'une SAF est donné en [BAR 87] et ceux des CFinvs et CFids dans [MAZ 89]. Ce procédé de modélisation est assez fastidieux. Dans [goor95] une méthode automatique pour le calcul de L a été proposée et implémentée. Une étude comparative intéressante, pour différents modèles de fautes, entre les tests (fonctionnels) déterministes et le s tests PR est donnée dans [DAV89]. Cette étude a montré que les tests PR peuvent détecter des fautes très complexes telle que les ANSFs, avec k = 5, pour qui, il n'existe pas de tests 30 déterministes. Cette étude a démontré cependant, l’inefficacité des tests PRs pour la détection des fautes simples 8 . Une des particularités des plus intéressante pour le test PR est sa linéarité pour les fautes bornées9 . En d'autres termes, lorsque la complexité de la faute augmente, la longueur du test PR reste de l'ordre de O(n) (voir [DAB92] pour la preuve). Ce n'est pas le cas des tests déterministes. A titre d’exemple, pour détecter les CF triples, les tests déterministes sont de complexité O(n.logn). Alors que la complexité de tests PR pour ce même type de fautes est de O(n) (447n pour e=10 -3 ) [ASH97]. Cette propriété fait des tests PRs un candidat intéressant pour la détection de fautes complexes nouvelles, qui apparaissent avec de nouvelles technologies. En conclusion, l'utilisation des PRTs offre les avantages suivants : • La détection des fautes complexes, telles que les fautes de 3-couplages, avec une grande probabilité et une complexité (longueur) de test modérée. • Ils sont la seule alternative pour le test de certaines fautes complexes pour qui aucun test déterministe n’existe. C'est le cas par exemple des fautes de k-couplage avec k > 3. • Dans le cas des Built In Test pour les petites mémoires, leurs implémentations est assez triviale (aisée) puisqu'ils ne nécessitent pas la génération de données de test spécifiques. 1.6 Conclusion Après avoir revu, d’une manière assez détaillée, les différents types de fautes dans les mémoires et les algorithmes de test assurant leurs couvertures, nous aborderons dans le chapitre suivant, les différentes approches d’implémentation de ces derniers, dans le cadre du test intégré. 8 [THE78] affirme que les SAFs sont le modèle de fautes le plus difficile à détecter avec les tests PRs. Une faute k-bornée implique k cellules, avec k < N, tel que k est indépendant du nombre N des cellules de la mémoire. Une faute est dite bornée si elle est k-bornée pour quelques valeurs de k [DAV97]. 9 31 Chapitre 2 Test, diagnostic et réparation intégrés des RAMs 32 Test, diagnostic et réparation intégrés des RAMs 2.1 Test, DFT et BIST Après l'extraction des défauts, la modélisation des classes de fautes, et l'élaboration des algorithmes de test (couvrant ces modèles de fautes), vient ensuite l'étape d'implémentation de ces algorithmes, c'est à dire la mise en œuvre du test. Celui ci est généralement confronté à un certain nombre de problèmes (inhérents au test) tels que : • La complexité du circuit, de la carte et du système. • La densité du paquetage. • Le coût et le temps de la génération de test et de la simulation des fautes. • Le coût et la complexité des testeurs (ATE). • Le temps dû à l’application du test et au diagnostic. D’un autre côté, avec l’augmentation de la densité des ICs (Integrated Circuit) et de leurs complexités, notamment avec les SOC actuels, le coût du test est devenu de plus en plus important au point même de dépasser le coût de la conception du circuit lui-même. Dès lors, il devient primordial d’élaborer une stratégie de test efficace et rentable. Pour se faire, les ingénieurs du test ont le choix entre plusieurs stratégies, à savoir, l'utilisation de testeur externe (Automatic Test Equipment (ATE)), une conception en vue de la testabilité (Design For Testability (DFT)), ou enfin, l'utilisation des techniques d'auto-test intégré (Built In Self Test (BIST)). Cependant, pour un test efficace, on utilise rarement une technique toute seule mais plutôt en combinaison avec les autres. Toutes ces techniques ont comme commun objectif, la réduction du coût du test tout en garantissant une bonne qualité de celui ci. La réduction du coût du test, passe à son tour par la réduction du temps de test et de sa complexité. Ceci nous ramène au principe de la testabilité. On entend par cela l'aptitude qu'a un IC à être facilement testable. En fonction de sa structure et de sa fonctionnalité, une logique peut être plus difficile à tester qu’une autre. C’est le cas de la logique séquentielle (plus difficile à tester) par rapport à une logique combinatoire, d’une logique aléatoire par rapport à une logique structurée ou encore, d’une logique asynchrone par rapport à une logique synchrone. La testabilité est donc fonction de multitude de facteurs, tels que la complexité du circuit ou la méthodologie de conception. Avec l'accumulation d'expériences, les chercheurs ont développé plusieurs recommandations pour augmenter la testabilité du circuit : éviter les logiques asynchrones, isoler l'horloge de la logique combinatoire, partitioner les circuits larges en sous-circuits de moindres tailles, initialiser le circuit pour éviter les états inconnus…etc. Ces techniques ad hoc ont ensuite évolué vers des techniques structurées plus généralisées et plus efficaces. Celles ci ont pour but d’accéder aux nœuds internes en limitant le nombre de broche E/S supplémentaires. Ils ont également mis au point deux métriques pour évaluer la testabilité d'un circuit : la Contrôlabilité de ses entrées internes et l'Observabilité de ses sorties. Ces notions qui provenaient de l’automatique 33 ont été réutilisées dans les circuits digitaux pour signifier la difficulté de positionner un nœud à 0 ou à 1 (contrôlabilité) à partir des entrées primaires et à observer la valeur d’un nœud donnée au travers des sorties primaires (observabilité). Les ATEs appliquent aux entrées primaires d’un circuit des vecteurs de test déterminés à l'aide des générateurs automatiques de vecteurs de test (Automatic Test Pattern Generation (ATPG)). Souvent cette génération se fait après la conception du circuit sans prendre en compte sa testabilité. Par conséquent elle peut être inappropriée pour les modules enterrés, et ne permettent pas toujours un test à la fréquence système (nécessaires pour découvrir certains types de fautes telles que les fautes de délai). La DFT peut être perçue comme étant un moyen d'augmenter la testabilité du circuit, et donc de diminuer le coût de son test, en facilitant la génération et l'application des vecteurs de test en vue de détecter ses fautes ainsi que la récupération des résultats de ce test. Ceci revient essentiellement à augmenter la contrôlabilité et l'observabilité des noeuds internes du circuit par le biais des registres de scan 10 .Plus précisément, l'objectif des techniques DFTs est de développer des approches structurelles pour faciliter le test des circuits séquentiels complexes. Son principe est : si une bascule peut être contrôlée pour n'importe quelle valeur et si elle peut être aisément observable, alors le problème de génération du test, pour un circuit séquentiel est ramené à celui du test d'un circuit combinatoire (plus simple à tester). Les techniques DFTs permettent une flexibilité quant à l'algorithme de te st à implémenter, tout en présentant un coût matériel modéré. Cependant, vu qu'ils utilisent une technique sérielle (registre de décalage pour l'application des vecteurs de test et/ou la récupération des résultats), ils augmentent considérablement le temps de test. D’autre part, l’opération de scan des données depuis et vers les registres de scan est cadencée par l’horloge du testeur externe, ce qui limite sa fréquence et ne permet donc pas toujours de tester à la fréquence nominale du système. Cette fréque nce et également limité par la nécessité d’utiliser n cycles d’horloges pour appliquer un vecteur de test de n bits. Le BIST est une méthode par laquelle on choisit de générer les vecteurs test (et souvent procéder à l'analyse des résultats) d'une manière interne au circuit. La logique du BIST peut être soit une logique entièrement dédiée à cette tache [BAR87] ou extraite de la logique fonctionnelle du circuit à tester luimême. En incorporant l'ensemble ou une partie du circuit de test, le BIST permet de se passer d'un équipement de test externe complexe (cher). Il permet également de réduire d'une façon considérable le temps du test, en générant d'une façon parallèle les vecteurs de test, au niveau puce et en exploitant les BISTs de chaque puce pour un test simultané au niveau carte et modules. D’autres avantages tel que le test à la fréquence nominale du circuit et la possibilité de tester le circuit en phase de maintenance ainsi qu’en phase d’opération sont autant d’atouts qui plaident en sa faveur. Cependant, l'utilisation du BIST a également son prix. Elle conduira obligatoirement à un surcoût en matériel et s’accompagne généralement d’une perte de performance. 10 Registre à décalage à la fois sériel et parallèle. 34 2.2 Techniques de test intégré Le BIST est un terme IEEE (inventé en 1982) qui représente la fusion des termes “Built In Test” et ”Self Test”, en d’autres termes, la fusion du test intégré avec l’auto-test. Le BIST est une technique générale qui peut être appliquée à n’importe quelle logique (aléatoire, structurée –RAM, séquentielle…). Cependant, pour être efficace, il faut choisir la technique BIST la plus optimale en fonction des caractéristiques du circuit et des contraintes du test. Selon un critère ou un autre, on peut classer les techniques de BIST en plusieurs catégories. Du point de vue phase de test, le BIST peut être soit un BIST en ligne soit un BIST hors-ligne. Le premier se subdivise en deux catégories : le BIST concurrent qui s’exécute d’une façon parfaitement transparente et parallèle avec le fonctionnement normal du circuit et le BIST non concurrent, qui s’exécute pendant les cycles d’attente du système. Le BIST hors-ligne nécessite quant à lui une phase de test dédié. Il peut être soit fonctionnel soit structurel. Les BIST structurels nécessitent la connaissance de la structure du circuit (e.g. au niveau porte logique). Ils sont basés sur le principe de la détection et l’isolation des fautes au niveau des nœuds. Leurs patterns n’ont pas donc (en générale) de signification fonctionnelle. Ils ont l’avantage d’avoir un degré de rigueur d’évaluation élevé (i.e. procédures de test systématiques et couverture de faute exacte) et de ne pas tester pour les fautes qui ne peuvent pas se produire. Ils présentent cependant quelques inconvénients majeurs. Ils nécessitent la connaissance de la structure du circuit chose qui n’est pas toujours évidente (modules IP, structures très complexes), ne testent pas le comportement/fonctionnement du circuit, ils peuvent donc ne pas détecter les fautes fonctionnelles, quelques approches ne peuvent fonctionner à la fréquence nominale et enfin, l’encombrement en surface peut être plus élevé que dans le cas du BIST fonctionnel. Du point de vue répartition sur les unités à tester, on peut avoir soit un BIST centralisé soit un BIST distribué. Le premier est peu coûteux, mais relativement lent (délais des routages plus importants), le second peut être certes assez coûteux mais assure une bonne vitesse de fonctionnement. Le choix d’une stratégie ou d’une autre dépend des caractéristiques du circuit, tel que le nombre d’unités à partager, les contraintes temporelles imposées et la surface additionnelle tolérée. Enfin, du point de vue ressources matérielles, le BIST peut être classé en deux catégories : les BIST séparés pour qui 100% de leurs ressources sont nouvelles (rajoutées au circuit) et les BIST intégrés (in-situ) qui utilisent les ressources déjà disponibles pour les reconfigurer en éléments de test. Ces ressources partagées jouent donc le double rôle : testeur en mode test, et partie intégrante du système en mode normal. Pour une optimisation des performances et du diagnostic, le BIST distribué et séparé est préférable, tandis que pour une optimisation de surface, le BIST centralisé et/ou intégré s’avère être la meilleure stratégie. Dans tous les cas, le choix de ces stratégies est guidé par plusieurs paramètres : temps de test, couverture de faute, contraintes de surface, dégradation de performances…etc. Enfin, le test intégré peut être soit parallèle, on parle alors de test par horloge (test per clock) ou sériel appelé aussi test par scan. Ce dernier utilise des techniques de scan pour acheminer une partie ou l’intégralité des données de test. 35 Les différentes classifications que nous venons de voir sont relatives au fonctionnement du BIST dans son environnement de test. Elles considèrent donc l’architecture BIST dans son intégralité. Si toutefois nous considérons son architecture interne, constituée principalement, d’une unité de génération de vecteurs de test, et d’une autre pour l’évaluation des résultats, d’autres classifications, basées sur les implémentations de ces modules peuvent être élaborées. Concernant le module de génération du stimulus, différentes techniques d’implémentation existent. Les plus importantes d’entre elles sont : • Patterns deterministques pré-stockés : cette approche nécessite une ATE et la simulation de fautes. Elle peut impliquer une grande RAM/ROM pour stocker les patterns. En revanche, elle assure une couverture de faute complète et une durée de test assez courte. • Patterns exhaustifs : pour un circuit combinatoire de n entrées, cette approche nécessite 2n patterns, elle n’est donc pratique que pour les circuits combinatoires ayant un nombre d’entrées raisonnable. Elle détecte toutes les fautes combinatoires et non redondantes et peut être implémentée en utilisant un circuit simple tel qu’un compteur binaire ou un LFSR. Elle présente l’avantage d’être indépendante de la fonctionnalité du circuit tout en ayant une couverture de fautes bien connue. • Patterns pseudo-exhaustifs : dans cette approche, le circuit est réparti en plusieurs ensembles, chaque sous-ensemble est testé d’une manière exhaustive. Elle peut être une solution de rechange lorsque l’approche exhaustive est non pratique, en garantissant les mêmes avantages que celle ci. Elle nécessite cependant une analyse du circuit plus détaillée et ne peut être applicable que pour la logique combinatoire. • Patterns pseudo-aléatoire : très simple et peu coûteuse à implémenter, cette approche présente cependant l’inconvénient d’une couverture de faute non déterministe qui augmente avec la longueur du test. Elle implique souvent un nombre de patterns plus important que l’approche déterministe, mais moins important que l’approche exhaustive. D’un autre côté, sa couverture est limitée pour les fautes “Random Pattern Resistant”. Toutefois, elle peut être appliquée à la logique combinatoire aussi bien qu’à la logique séquentielle. Le module d’évaluation de la réponse quant à lui, peut être implémenté en utilisant deux techniques principales : • La technique de compression : tel que le comptage de 0 ou 1 ou des transitions qui assurent une compression logarithmique des vecteurs de sorties, les techniques de parité (paire ou impaire) ou encore l’analyse de la signature qui est la technique la plus répandue. • La technique de comparaison : directe entre deux modules identiques ou avec des références stockées ou générées. Ces techniques d’évaluation de la réponse ont pour objectif de déterminer si les réponses du circuit sous test aux stimuli d’entrées sont correctes. Or, plusieurs milliers si ce n’est plusieurs millions de patterns sont souvent appliqués au circuit à chaque test. L’objectif dans ce cas, est d’éviter la technique de comparaison qui nécessite le stockage de millions de réponses de référence et les compare une à une avec les réponses du circuit. Le défi est donc d’effectuer une compression de ces réponses sans pour autant perdre la couverture de fautes fournie par les patterns d’entrée. Or, ces techniques de compression présentent toutes une probabilité de masquage non nulle qui peut altérer, 36 d’une manière plus ou moins importante cette couverture de faute. Ce masquage peut néanmoins être réduit en augmentant la taille du circuit de compression. Le choix final dépend donc de plusieurs critères : vitesse, surcoût en surface, taux de compression, capacité de détection…etc. 2.3 BIST pour RAMs En ce qui concerne les mémoires, le BIST s'avère être un choix nécessaire pour plus d'un cas : • Pour les RAMs dynamiques de grandes capacités (> 64 Mbits) à cause du temps nécessaire à leur test [FRA90]. • Pour les RAM enterrées à cause de la difficulté d'y accéder [NAD90]. Nous avons vu que le test du BIST peut être effectué dans une séquence spécifique de test (BIST horsligne) ou lorsque le circuit est dans son mode de fonctionnent (BIST en-ligne). Cette classification reste valable pour les BIST mémoire. Le BIST hors ligne permet une flexibilité quant aux données de test à appliquer et offre la possibilité d'effectuer des tests pour des modèles de fautes complexes. Cependant, en utilisant une séquence de test dédiée, les informations stockées dans le circuit sont souvent perdues. Cet inconvénient est toutefois contourné dans le cas du “BIST transparent ” (voir section 2.3.2.2), où la flexibilité du test peut être assurée sans perte de données. Une autre limitation du BIST hors ligne concerne le fait qu’il ne peut pas détecter les fautes non permanentes qui se produisent entres les sessions de test. En testant le circuit durant son mode de fonctionnement normal, le BIST en-ligne permet de contre carrer cet inconvénient. D’autre part, il n’a pas besoin d'une session de test spécifique, ce qui procure au circuit un certain niveau de tolérance aux fautes. Cependant, il utilise souvent de la redondance d'informations sous forme de codes de parités et codes détecteurs correcteurs d'erreurs (Error Correcting Code (ECC)), qu'il faudra stocker (en plus des données nominales) dans le circuit. Ce qui augmente considérablement son coût en surface. Dans le cadre de notre travail, nous nous sommes surtout intéressés au BIST hors-ligne, que nous appellerons, pour des raisons de simplicité, BIST tout court. 2.3.1 Principe La figure 2.1 montre le schéma bloc d'un circuit BIST pour RAMs. Un générateur de données test (Test Data Generator (TDG)) génère la donnée test, qui sera appliquée ensuite à l'adresse spécifiée par le générateur d'adresses (Address Generator : AG) et le résultat sera ensuite évalué par le vérificateur de réponse ((Response Evaluator (RE)). Enfin, un contrôleur permet de contrôler et synchroniser les différents blocs du BIST. Ce schéma est également valable pour les autres stratégies de test, à ceci près que dans le cas du BIST, les données de test et les adresses (blocs TDG et AG) sont générées d'une façon autonome et interne au circuit en exploitant tant que faire se peut le parallélisme disponible dans celui ci. 37 Contrôleur TGL AG TDG (RAM) RD Figure 2.1 : Diagramme bloc d'un BIST (parallèle) pour RAMs. Pour implémenter le générateur d'adresses on a le choix entre une multitude de compteurs autonomes et exhaustifs tel qu’un Linear Feed Back Shift Regsiter (LFSR), un Cellular Automata (CA) ou un compteur binaire. Des paramètres telle que la vitesse d’exécution, la surface tolérée ou encore le type de séquence voulue (déterministe ou pseudo-aléatoire) détermineront le choix final à adopter. La vérification du résultat est une partie importante du schéma de test de la mémoire qu’il convient de garder à l’intérieur du circuit afin de pouvoir exploiter la vitess e et le parallélisme du BIST. Plusieurs stratégies de vérification de la réponse peuvent être utilisées. On peut comparer directement les données de réponse avec celles prévues (Comparaison Déterministe) [NIC85]. Le circuit correspondant (portes OU-Exlusives et un arbre binaire de porte OU) est simple à réaliser et peut être facilement testé avec une séquence de Walking Ones sur les entrées du comparateur plus la séquence 00..00. Lorsque la RAM est conçue sous forme de plusieurs matrices on peut aussi utiliser une comparaison mutuelle des données contenues dans celles ci. Cette solution présente l’avantage d’être applicable pour n’importe quel algorithme, y compris les algorithmes pseudo-aléatoire puisqu’elle ne nécessite pas la connaissance préalable des vecteurs résultats. Cette technique ne couvre pas cependant les fautes identiques affectant les matrices mémoires (e.g les AFs). Une autre technique de vérification des résultats consiste à les compacter à l’aide d’un analyseur de signature à entrées parallè les (Multiple Input Signature Analyzer (MISR)), et comparer (extérieurement) la signature obtenue avec la signature référence, prédéterminée par simulation. Cette approche peut être utilisée pour tout type d’algorithme, elle permet notamment de réduire le nombre de bits à évaluer. A noter également qu’à l’inverse des deux méthodes précédentes (utilisant des comparateurs), les analyseurs de signatures sont auto-testable par construction (tout problème dans leurs structures se manifestera dans la signature finale), et permettent de couvrir les fautes dans la logique d’adressage et ceux affectant le sequencement du BIST (contrôleur). Cependant, le phénomène de masquage (deux séquences différentes produisant la même signature) doit être précisément quantifié et correctement pris en compte. Le digramme de BIST RAM de la figure 2.1 utilise un contrôleur en logique combinatoire. Celui ci est la réalisation physique de l'algorithme de test choisi. En se spécifiant uniquement à un algorithme donné, le BIST correspondant offre généralement une cadence de fonctionnement élevée tout en ayant une surface modérée. Une alternative intéressante à cette approche est celle qui utilise un contrôleur sous forme de RAM (ou ROM). On parle alors de BIST programmable (voir chapitre 3 pour plus de détails) qui permet de changer l'algorithme de test à implémenter pour cibler éventuellement de 38 nouveaux types de fautes. Cette solution est surtout intéressante pour les DRAMs de grandes capacités. Elle permet donc une flexibilité de l'algorithme de test tout en minimisant la conception de celui ci. En contre partie, son temps d'exécution n'est pas des plus rapides et la mémoire micro-codée doit à son tour être testée. La section suivante passe en revue les différentes techniques de BIST mémoires utilisées jusqu’à maintenant. 2.3.2 Approches BISTs pour RAM L'adjonction du circuit BIST vise à réduire le coût du test d'un IC. Il est cependant clair que l'introduction d'un bloc supplémentaire implique un coût additionnel que l'on doit essayer de compenser en optimisant les paramètres suivants : • La surface en silicium doit être la plus minimale possible afin d'éviter de trop augmenter la surface du circuit et réduire de ce fait son rendement11 . • La logique d'interconnections du BIST avec la RAM (multiplexeurs, portes logiques) doit être faite de manière à minimiser l'impact du temps d'accès à la mémoire. • La couverture de fautes qui dépend essentiellement du modèle de fautes et de l'algorithme choisi. • Le BIST doit être lui-même testable. Soit à l' aide d'un testeur externe en utilisant le scan path par exemple, soit en le rendant partiellement ou entièrement auto-testable. Dans un cas comme dans l'autre, il faudra considérer le coût supplémentaire résultant. • Le contrôle du BIST nécessite des broches supplémentaires qui peuvent avoir un impact important sur le coût d'encapsulation (dans le cas des RAMs non enterrées). Le multiplexage est une alternative qui résout ce problème, mais qui cependant, pénalise les performances du circuit à cause du retard qu'il introduit. Lorsqu'on utilise l'approche BIST, les fautes vues dans le chapitre précédent sont souvent simplifiées ou restreintes afin de réduire le coût en surface et/ou le temps de test. Basé sur des modèles de fautes spécifiques et utilisant ou non des techniques DFT, différent BISTs ont été proposés dans la littérature. Ci dessous, on décrit quelques-uns de ces BISTs pour une illustration plus concrète. 2.3.2.1 Le BIST Parallèle Le BIST parallèle est de loin la technique la plus utilisée dans le cas des BISTs RAMs vu qu’elle assure un test à la fréquence nominale du système, et ne pose pas de contrainte sur l’algorithme de test à implémenter. Il est la réalisation physique de l’algorithme de test considéré. Il varie donc en fonctions du type d’algorithme utilisé. BIST basés sur les tests Marchs Ce type de BIST est essentiellement utilisé pour les tests de mise en marche (Power-On Tests), et les tests de SRAMs12 . De plus, il ne peut utiliser des techniques de parallélisme telles que des opérations 11 Lorsque la surface et la complexité du circuit augmentent, elles entraînent l'augmentation de la consommation et par conséquent la diminution du rendement. 12 Les tests March détectent (voir chapitre précédent) les SAF, TF, CF et ne peuvent détecter toutes les NPSF. Or, ces dernières sont très probables dans les DRAMs. Par conséquent, les tests Marchs ne peuvent être considérés comme des tests complets pour les DRAMs. 39 multi-bits (e.g. test en mode ligne) à cause de l'incompatibilité de ces mécanismes avec le principe même des tests Marchs. Une des architectures BISTs la plus adaptée aux algorithmes Marchs est celle proposée par Nicolaidis dans [NIC85]. Le circuit BIST est implémenté en utilisant une architecture hiérarchique. Des blocs dédiés implémentent chaque niveau de cette hiérarchie ce qui résulte en une surface assez compacte (même pour les RAMs de faibles capacités). L'adressage est réalisé à l'aide d'un LFSR U p/Down et le résultat est vérifié à l'aide d'un comparateur. Le BIST implémente l'algorithme B de Marinescu (voir chapitre 1) mais peut supporter n'importe quel algorithme de type March. Cette structure constituera par la suite (chapitre 3 et 4) l'ossature sur laquelle sera basée notre technique de synthèse de BIST pour les tests Marchs (famille des tests Marchs). Le coût en surface (pour l'algorithme ci dessus) varie de 6% pour une RAM de 1kx16 bits, à 1% pour une RAM de 4kx 64 bits. Un autre exemple qui concerne les SRAMs orientées mot, est celui donné par Dekker dans [DEK89]. Le BIST implémente l'algorithme 13n (8n (test March) + test pour la rétention de données). Il utilise un compteur et un MISR pour la génération d'adresses et la vérification de la réponse (respectivement). Il contient un générateur qui produit les données du mot (data background) et leurs inverses afin de détecter les fautes de couplage entre les cellules du même mot. Il utilise également un compteur de temporisation qui, combiné avec le compteur d'adresses, produit les délais d'attentes nécessaires à la détection des fautes de rétention. Son coût en surface est de 4% pour une SRAM de 1Kx8 bits (pour une technologies de 1.5 µm et sans inclure le test de rétention). BISTs pour le test des fautes NPSFs Ce genre de BIST est dédié pour les RAMs de grandes densités (DRAMs). Les BISTs NPSFs utilisent généralement des compteurs pour la génération d'adresses (nécessaires pour la génération de la configuration appropriée du voisinage considéré), ce qui est assez coûteux en terme de surface. Dans [MAZ87], une implémentation BIST pour la détection à la fois des NPSFs statiques et dynamiques a été proposée. Ce BIST utilise un voisinage 9-cellules. Il modifie le décodeur afin d'achever une sélection multiple des lignes de bits (la matrice mémoire est composée de 4 sous matrices) ce qui permet une écriture simultanée dans plusieurs cellules de la même ligne de mot (LM). Cette stratégie (parallélisme), est beaucoup plus rapide que les tests NPSF traditionnels. Dans une opération de lecture un comparateur multibit détecte les fautes possibles. L'algorithme est de complexité 195 n , et possède un coût additionnel en surface de 0.4% pour une DRAM de 256kbits. BIST pseudo -aléatoire Les BISTs basés sur des tests pseudo-aléatoires sont une approche intéressante, d'une part parce qu'ils sont simples et compacts à implémenter, et d'autre part, parce qu'ils peuvent couvrir les nouveaux types de fautes qui ne possèdent pas encore des modèles bien définis. [MAZ 89] propose un BIST basé sur le test pseudo-aléatoire pour la détection des SAFs, CFs et les fautes de k-couplage. Le BIST est basé sur la génération aléatoire des données, adresses et opérations. Il utilise une comparaison mutuelle entre le s deux sous-matrices de la RAM (pour contourner le problème de masquage dans le cas d'un MISR). Pour une probabilité d'échappement 0,001 il nécessite un test de complexité 1775n pour k ≤5. On trouve dans [DAV98], un résumé à la fois exhaustif et détaillé sur les techniques de test pseudoaléatoire, et notamment leurs implémentations BIST. 40 2.3.2.2 Le BIST Transparent Le BIST Transparent est une technique de test intégré hors-ligne. Elle appartient également à la catégorie des BISTs parallèles, vu qu’elle assure une opération de test à chaque cycle d’horloge. A l’inverse des approches BIST traditionnelles, elle permet de restaurer (automatiquement) le contenu initial de la mémoire, une fois la phase de test terminée. Par conséquent, elle est particulièrement adaptée pour les tests périodiques, durant la durée de vie de la mémoire (préserve le contenu de celle ci) aussi bien que pour les tests manufacturiers. Un BIST Transparent est basé sur un algorithme March transparent qui utilise le contenu de la RAM pour dériver les paternes de test. Ceci est effectué en précédant chaque opération d’écriture par une opération de lecture qui va déterminer la donnée référence. La donnée à écrire est soit la donnée lue soit sa valeur opposée. Un algorithme transparent assure que la dernière donnée écrite est toujours égale à la première valeur lue. Une propriété importante de l’algorithme transparent est qu’il sauvegarde la couverture de faute de l’algorithme March original. Ceci est vrai lorsque le modèle de fautes utilisé est symétrique (i.e. contient l’ensemble de fautes de chaque modèle considéré, les SA1 mais aussi les SA0, le TFs 0à1 mais aussi les TFs 1à 0, …etc). Le BIST Transparent requiert un coût additionnel minimal en surface par rapport au BIST March (1.2 % pour une RAM de 32 Kbits au lieu de 1% pour l’algorithme initial d’après [NIC92]). Cependant, puisque à chaque session de test il utilise le contenu initial de la mémoire (background), qui contient des données aléatoires ou du moins, non uniforme, il peut détecter un certain nombre de fautes non modélisées. Il peut donc avoir une couverture de faute encore meilleure que celle du BIST March. Une étude détaillée sur la théorie des algorithmes transparent et la transformation des algorithmes conventionnels en le urs équivalents transparents est donnée dans [NIC96]. Le BIST transparent symétrique est une autre variante du BIST transparent. Elle utilise la propriété de symétrie des algorithmes Marchs pour essayer de réduire la longueur de la séquence de test. Ceci revient à éliminer les séquences de prédiction formées par les opérations de lecture de l’algorithme transparent. Pour se faire, elle exploite la symétrie de cet algorithme pour implémenter une technique de compression de données utilisant une signature pré-calculée. On trouve dans [YAR99] un exemple de ce type de BIST. Dans cette architecture l’auteur atteint des réductions de 12 à 33% de longueur de test (suivant le degré de symétrie de l’algorithme de test), tout en maintenant, au pire, la même couverture de fautes. 2.3.2.3 Le BIST Sériel La technique du BIST sériel présente l’avantage d’être simple et peu encombrante, puisqu’elle peut réutiliser des cellules de scan déjà existantes sur le circuit (technique du BIST intégré). Cette technique est surtout utilisée dans le cas des RAMs enterrées (voir section 2.3.2.6) où l’accessibilité à la RAM se trouve très réduite. Elle est particulièrement adaptée au BIST centralisé où la circuiterie de test est partagée entre plusieurs mémoires. Cependant, elle est limitée au niveau des algorithmes de test qu’elle peut supporter. 41 Le BIST sériel implémente une partie ou l’ensemble des modules de génération d’adresses, de génération de données et d’évaluation de la réponse en utilisant un registre de scan. On trouve dans [NIC94] un exemple d’une architecture de BIST sériel utilisant un scan path pour véhiculer les adresses et un autre scan path pour véhiculer les données de test et un comparateur pour la vérification des réponses des sorties Cette architecture bien que simple et auto-testable (le scan path peut être facilement testé avec un flux binaire de 0 et de 1 pour vérifier le collage à 0 et à 1), elle présente l’inconvénient d’utiliser deux scan paths séparés pour les données ce qui est assez coûteux en surface. Une seconde variante moins coûteuse en surface a été proposée. Celle ci garde un scan path complet pour l’adressage de la mémoire mais utilise un seul scan path pour appliquer les données et récupérer les résultats du test. Cette architecture nécessite cependant m (m étant la taille du scan path des données) décalages pour appliquer la donnée de test et m décalages pour transférer à l’extérieur les résultats de test. Elle présente cependant l’inconvénient de BIST sériels, à savoir, le test est appliqué d’une manière sérielle (nécessite n cycles d’horloge pour appliquer un vecteur de n bits). Une solution qui remédie à l’encombrement de la première architecture et à la vitesse de la seconde consistait à utiliser des séquences spécifiques utilisant un seul décalage pour appliquer chaque donnée de test et un seul décalage pour chaque réponse de sortie (en utilisant une technique de compactage spatial). Ces séquences sont acheminées en utilisant un scan path double (une cellule scan maître et deux cellules esclaves) pour éviter de dupliquer le scan path. 2.3.2.4 Le BIST Programmable Le BIST, est une réalisation matérielle intégrée d'un algorithme de test spécifique. Une fois conçu, il ne peut être modifié pour cibler un nouvel algorithme de test. D'où l'idée du BIST programmable : concevoir une architecture flexible capable de prendre en charge le test de la mémoire dans différentes étapes de fabrication et d'utilisation, en programmant à chaque fois l’algorithme de test approprié. Pour se faire, les BISTs programmables utilisent généralement des unités de stockage, dans lesquelles ils chargent l'algorithme de test sous forme d'un ensemble d'instructions. Si on désire effectuer un nouveau test, un nouvel ensemble d'instructions est chargé procurant ainsi un nouveau BIST. Les BIST Programmables sont particulièrement utilisés dans des tests intensifs d’un processus technologique instable pour le caractériser et extraire ses modèles de fautes. Cette fonctionnalité de debuggage est rendue possible grâce à leur flexibilit é sur l’algorithme de test à exécuter. Cependant, cette flexibilité et ce gain en temps (en re-conception et re-implémentation) ont leurs prix. En effet, les BISTs programmables souffrent généralement de : • Un coût en surface conséquent. Dans une approche de test intégré, ceci constitue un sérieux inconvénient. • La testabilité du circuit de test et plus spécialement celle de l'unité de stockage est généralement faible. • La flexibilité atteinte, en terme d’algorithme de test, n'est pas toujours importante. BIST avec micro-code Cette architecture fait partie des toutes premières approches de BISTs programmable pour mémoire. Koike [KOI90] a proposé une architecture de BIST programmable utilisant une micro-ROM comme logique de contrôle. L'adressage est réalisé avec un compteur/décompteur et la vérification du résultat se fait à l'aide d'un comparateur. La ROM n'occupe que 10% de la surface du BIST. En adaptant le contenu de cette ROM, plusieurs algorithmes peuvent être implémentés. Plus particulièrement les 42 algorithmes Marchs (O(n)) et Galloping (O(n2 )) ont été implémentés pour une DRAM de 16M bits, résultant en un coût en surface de 0.8% et 2% respectivement. De plus, ce coût peut devenir plus beaucoup plus important si cette approche est appliquée à des RAMs ente rrées de tailles bien inférieures. D’autres approches de BIST Programmables, ayant différentes propriétés, existent. Celles ci seront répertoriées et étudiées d’une manière assez détaillée dans la section 3.3.1. 2.3.2.5 BIST pour les (D)RAMs de grandes capacités Les techniques BISTs vues jusqu'à maintenant concernent tous les types de RAMs. Cependant, les DRAMs de grandes capacités sont concernées par l'optimisation en particulier de deux paramètres : la réduction de leur temps de test conséquent et l'augmentation de leur rendement par le biais de leurs réparation. Ce dernier point peut se faire de différentes façons, la plus intéressante est sans doute la réparation intégrée (Built In Self Repair (BISR)) qui sera développée plus en détail dans le chapitre 5. Le temps de test des DRAM dépend bien évidement de la complexité de l'algorithme de test choisi. Des efforts considérables ont été développés pour réduire cette complexité tout en maintenant une couverture de fautes importante (voir chapitre 1). Cependant, même pour les tests de complexité O(n) le temps de test des DRAMs actuelles de grandes capacités peut être très important. Celui ci en effet, dépend également de la taille (conséquente) de la DRAM. D'où le développement de techniques de test parallè les visant à diminuer ce temps de test en testant plusieurs cellules simultanément. Ces techniques peuvent bien évidement collaborer avec le BIST pour une meilleure optimisation du temps de test. Les plus importantes d'entre elles sont : le test multibit (Muti Bit Test (MBT)), le test en mode ligne (Line Mode Test (LMT)) et le test parallèle avec masquage de l'adresse colonne (Column Address Maskable Parallel Test (CMT)). Le test multibits [INO87] a été introduit pour le test des DRAMs de 1 à 4 Mbits. Il c onsiste à écrire et comparer en parallèle 4 à 16 cellules ce qui réduit des mêmes facteurs le temps de test. Dans le cas du test LMT, on effectue ces mêmes opérations sur la ligne toute entière. On a ainsi un temps de test proportionnel à n (pour une matrice mémoire carrée). Ce gain en temps substantiel a malheureusement son prix. D'abord il faudra compléter ce test par celui des décodeurs d'adresses et celui de la logique de lecture/écriture. Ensuite, cette approche ne permet pas de détecter certaines fautes de couplages (notamment celles entre les cellules de la même ligne) du fait que le contenu de la mémoire est limité à certaines configurations à cause de l'opération d'écriture parallèle. Et enfin, dans une optique de réparation, là ou les cellules fautives ne peuvent être localisées. Notons également que cette technique nécessite des comparateurs ou des registres additionnels à chaque paire de lignes de bits ce qui introduit une importante pénalité en surface. Mazumder et Pattel [MAZ89 ] essayèrent de remédier à ces inconvénients en modifiant le décodeur d'adresses colonnes au détriment du coût en surface. La technique CMT [MAR91] développée pour le test des DRAMs de grandes densités, est une amélioration du test LMT. Elle permet de contrecarrer les inconvénients de celui ci en couvrant éventuellement toutes les fautes de couplage et permet une recherche rapide de l'adresse de la cellule fautive en utilisant une technique de masquage de l'adresse colonne. Elle a été implémentée sur une DRAM de 64 Mbits de Mutsubishi, et a résulté en une réduction de 1/16K du temps de test avec un coût en surface de 0,1%. 43 Une étude plus générale sur les techniques de parallélisme permettant un gain en temps de test est présentée dans [FRA90]. Celles ci sont classées en fonction du nombre de matrices mémoires testées simultanément et du nombre de bits accédés simultanément. Ces techniques nécessitent comme nous l’avons vu la modification dynamique (en mode test) des décodeurs d’adresses, et/ou de la logique de lecture/écriture. Selon ces paramètres, les techniques d’accélération du temps de test sont classées en quatre grandes familles : une matrice mémoire et un bit, une matrice mémoire et plusieurs bits, plusieurs matrices mémoires et un bit accédé par matrice, plusieurs matrices mémoires et plusieurs bits. Cette dernière étant l’architecture la plus rapide. Elle présente cependant l’inconvénient de ne pas détecter certaines fautes de couplage, vu l’uniformité de ses patterns de test. En revanche, l’architecture une matrice mémoire et un bit possède une granularité plus fine et permet de détecter et localiser toutes les fautes de couplage et de sensibilité au contenu des cellules (fautes PSF). Dans tous les cas, l’architecture à adopter doit effectuer un compromis entre les modèles de fautes considérés et le temps de test. 2.3.2.6 BIST pour RAMs enterrées Avec l'avènement des systèmes sur puces (Sytemes On Chip (SOC)), l'utilisation des blocs enterrés constituait une approche intéressante sur plus d'un pla n. Elle permettait en effet de réduire le time to market en utilisant des blocs préconçus, de diminuer considérablement le coût de développement en utilisant le concept de reutilisabilité, d'augmenter les performances temporelles du système en implémentant des algorithmes optimisés et enfin de diminuer le coût en surface en proposant des conceptions optimisées (en surface). Ces avantages ont encouragé les concepteurs à utiliser de plus en plus de RAM enterrées (d’abord les SRAMs puis les DRAMs) jusqu’à ce qu’elles atteignent plus de 50% des surfaces des SOCs actuels. À l'inverse des exigences de test des DRAMS de grandes capacités, le temps de test pour les RAMs enterrées, souvent de tailles petites ou moyennes, n'est pas le facteur d'optimisation le plus important. Plus particulièrement, les RAMs enterrées sont concernées par l'augmentation de leurs testabilités. La solution BIST semble répondre à ces exigences, souvent en combinaison avec les techniques DFT. Dans d'autre cas, on fusionne même ces deux techniques pour concevoir un BIST sériel. Notons néanmoins, qu’avec la tendance actuelle d’incorporer des SRAMs et des DRAMs de grandes tailles dans les SOCs, le temps de test devient une contrainte supplémentaire pour les mémoires enterrées. Parmi les exemples pratiques de ces techniques on peut citer : • Le test de la RAM enterrée avec une stratégie scan path "brute" peut s’avérer très compromettant du pont de vue temporel. Celui ci nécessite en effet le chargement sériel du vecteur de test, proportionnel à la taille de la RAM et la récupération (sérielle) du résultat. Parmi les solutions proposées pour contourner ce problème, on peut citer la technique du flag scan register (FLSR) [MAE92]. Cette approche est basée sur des registres FLSRs dont les cellules sont constituées de deux bascules LSSD montées en maître-esclave. Les registres FLSRs permettent toutes les fonctionnalités des bascules LSSD (modes chargement parallèle, décalage et transparent) et intègrent en plus un comparateur comme logique de vérific ation, ce qui permet d'éviter le problème de masquage de fautes. Chaque cellule du registre FLSR est connectée à un bit des données de la RAM. Les données de test peuvent être chargées d’une manière parallèle ou sérielle 44 dans une bascule LSSD, et appliquées à la RAM sous test. La réponse de celle ci est évaluée intérieurement (comparaison) et le résultat de cette évaluation est stocké dans le second LSSD. L’ensemble des résultats sera ensuite décalé parallèlement ou sériellement vers la sortie. Cette technique DFT a été utilisée pour les RAMs simple et double ports. • • Le Circular Self-Test Path (CSTP) est une technique de test aléatoire insetu (conçue par les ressources du système et non par des ressources spécifiques) assez utilisée pour les BIST logiques. Cette technique a été étendue dans [KRA92] pour le test des DRAMs enterrées. La technique CSTP requiert la modification des registres de la RAM (registre d'adresses, registre des données et registre de la logique de lecture/écriture) et leur inclusion dans un chemin de données circulaire. Ces registres modifiés doivent contenir des possibilités d'initialisation (un RAZ global ou un scaning sériel). Dans le mode test, ces registres servent au test aléatoire (opération de XOR entre le contenu d’un registre et le registre précédent) de la RAM correspondante mais également peuvent êtres utilisés soit comme générateurs de données soit comme compacteur de réponse pour les modules de RAMs adjacents. Une comparaison entre le BIST basé CSTP, et ceux utilisant une approche conventionnelle a montré l'intérêt d'une telle technique en terme de compromis entre la couverture de fautes et le coût en surface (utilisation des registres simples déjà existant sur le circuit) pour le test des RAMs enterrées de tailles variables[KRA92]. Cette technique présente cependant, l'inconvénient majeur d'un temps de simulation conséquent pour le calcul de la signature référence ainsi qu’une couverture de faute probabiliste. Une autre technique sérielle particulièrement adaptée pour le test des RAMs enterrées multiples ayant des tailles et des configurations de ports variées est celle dite BIST avec interfaçage série [NAD90]. Dans cette technique, le BIST contrôle un seul bit d'entrée (appelé serial data in ) et observe un seul bit de sortie (appelé serial data out), au lieu de 2B bits (B bits pour le contrôle et B bit pour l’observation) dans le cas des RAMs orientées mots. Les autres bits sont contrôlés et observés indirectement à travers le chemin de données sériel en utilisant la RAM elle -même et un ensemble de multiplexeurs. Ce qui permet de réduire le nombre de lignes à router depuis la logique du BIST jusqu’à la matrice mémoire. Ce BIST a été appliqué pour les SRAMs orientées mots en utilisant plusieurs algorithmes tels que March C, GALPAT ou Walking 1/0 avec un coût en surface allant de 60% pour une SRAM de 1Kbits à 4,3% pour deux mémoires de 16 Kbits partageant la même logique de contrôle. Néanmoins, comme nous l’avons précédemment évoqué, cette technique est limitée au niveau des algorit hmes de test qu’elle peut supporter. Dans les applications système nécessitant des tests périodiques, il est préférable que l'algorithme de test ne détruise pas les informations contenues dans la RAM. Ceci revient à sauvegarder ces informations quelque part, et les restituer aussitôt le test terminé. Pour les mémoires enterrées, ceci constitue une contrainte sévère. La technique du BIST Transparent vu précédemment, permet de remédier à ce problème. Cette technique constitue donc une alternative intéressant e pour le test des RAMs enterrées. 2.4 Diagnostic et Réparation Intégrée Le test intégré vu jusqu’à maintenant s’occupe essentiellement de la détection des fautes. Afin d’augmenter le rendement des RAMs de grandes densités, les techniques telle que Built in Self 45 Diagnosis (BISD) et Built In Self Repair (BISR), ont été explorées. Elles sont basées sur la détection, la localisation et la réparation des fautes. Le diagnostic à pour objectif de relier le comportement erroné observé en sortie d’une unité sous test avec la faute physique correspondante. Le degré de précision dans la localisation de fautes est appelé “la résolution du diagnostic”. Plus cette résolution est fine, plus la localisation est précise et le diagnostic et/ou la réparation sont meille urs. Le diagnostic de fautes peut être effectué suivant deux approches différentes : • Une approche cause-effet qui analyse une cause (faute) possible et détermine les effets (réponses) correspondants. Cette approche nécessite une simulation préalable intensive pour déterminer le dictionnaire de fautes qui est une base de données stockant tous les couples faute-réponse explorés. • Une approche effet-cause dans laquelle l’effet (réponse actuelle de l’unité sous test) est traité pour déterminer les causes (fautes) possibles. Dans le cas d’une logique combinatoire, cette approche peut utiliser un algorithme de déduction tel que celui proposé dans [ABR90] pour localiser d’une manière automatique la faute. Dans le cas des mémoires, l’approche cause-effet n’est pas utilisée vue qu’elle nécessite un dictionnaire de fautes de très grande taille (jusqu’à 2 n cas à simuler et à stocker). Dans une logique de réparation intégré (BISD) il convient d’effectuer un bon compromis entre la résolution du diagnostic (complexité de l’algorithme de détection), le temps nécessaire à son exécution et la surface supplémentaire qu’il induit. L’approche BISR peut être considérée comme une technique de tolérance aux fautes basées sur la redondance matérielle (en contraste avec la redondance informationnelle et temporelle). C’est une répartition dynamique qui consiste à substituer une unité fautive avec une unité de rechange. Par conséquent, elle est intéressée par la localisation de cette unité défaillante, plus que par une identification précise de la faute à l’intérieur d’elle. Dans le cas des RAMs, la redondance est constituée par des colonnes et/ou de lignes de rechange. Il existe différentes approches BISR, selon le niveau hiérarchique où la redondance a été introduite. Par exemple au niveau le plus bas, les mots redondants peuvent être introduits. La logique d’autoréparation peut soit réparer toutes les fautes, dans ce cas la capacité totale de la mémoire sera restaurée, soit elle ne peut pas toutes les réparer (à cause d’un nombre de fautes excessif), dans ce cas, le bloc mémoire correspondant doit être interdit d’accès dans le mode opératoire normale. L’approche BISR pour RAM sera détaillée plus amplement dans le chapitre 5 où nous exposerons une approche BISR nouvelle basée sur la redondance colonne. En règle générale, les recommandations globales, lors de l’utilisation des approches BISD et BISR pour les mémoires enterrées sont : • Minimaliser le coût additionnel en surface de la logique d’auto-test et d’auto-réparation. . • Maximiser la testabilité de la circuiterie additionnelle. • Optimiser l’allocation des ressources de rechange. • Minimiser le temps de test et de diagnostic. 46 Les approches BISD et BISR sont des techniques de tolérance aux fautes utilisant de la redondance matérielle pour remédier (corriger) les fautes permanentes. Pour les fautes non permanentes (transitoires et intermittentes), la redondance informationnelle sous forme de code est généralement utilisée. Celle ci offre un grand taux de couverture de fautes, pour un surcoût matériel raisonnable. Parmi les codes utilisés on peut citer le code de parité (pair ou impair) ou encore les codes détecteurs et correcteurs d’erreur (error-correcting code (ECC)) codes) très utilisés pour les mémoires semiconducteurs. Ces codes doivent être capables de détecter et corriger les erreurs les plus probables (i.e. erreurs simples). La capacité de la correction d’erreur d’un code est donnée par la distance minimale de son code13 . Pour une distance égale à 2 la détection des erreurs simples est possible, tandis qu’un code de distance égale à 3 procure une détection des erreurs doubles ainsi qu’une correction des erreurs simples (voir [PRA86] et [RAO89] pour plus d’informations). En contre partie, les codes ayant une grande capacité de détection et de correction impliquent un surcoût matériel important. 2.5 Conclusion Depuis quelques années déjà le BIST est l'approche la plus répandue pour le test des RAMs enterrées. Celui ci permet en effet d’achever une grande maturité tant sur la couverture de fautes achevée par ses tests que par les techniques de conception. Les techniques de BISD et BISR peuvent collaborer d’une manière assez souple et transparente avec le BIST pour fournir une stratégie de test-diagnostic répartion complète. Il convient toutefois d’adapter ces techniques aux spécificités de leurs unités de test correspondantes, et à la stratégie globale de test et de réparation adoptée afin d’optimiser leurs implémentations. 13 La distance d’un code, est le nombre minimal de bits pour lequel un mot code diffère d’un autre. La distance minimale doit donc être >1. 47 Résumé : Les Systems on Chip actuelles intègrent en général une grande proportion de mémoires enterrées. Ces mémoires sont de plus en plus denses et occupent des surfaces très importantes dans le circuit (jusqu'à 80%). De plus, elles peuvent présenter un grand taux de défauts affectant ainsi d'une façon conséquente le rendement total du circuit. La qualité de la mémoire et donc cruciale pour la qualité de l'ensemble du circuit. D'autre part, la réduction du coût du développement passe par la réduction du coût du test. Enfin, le management de la complexité de test des structures de plus en plus complexes (e.g., il existe actuellement des SoCs contenant plus de 400 mémoires enterrées !), ne peut se faire d'une manière efficace sans la disposition et l'intégration des techniques de test les plus avancées. A travers la première partie des travaux réalisés dans cette thèse, nous avons tenté de répondre à l'exigence de la qualité de test en présentant un ensemble assez diversifié de solutions de test intégré (BIST) pour mémoires. Ces solutions permettent de couvrir les différentes phases de test d'une mémoire (test de caractérisation, test de production, test durant la phase opérationnelle et test d'analyse des défauts), en assurant un bon compromis couverture de fautes/coût en surface et en garantissant un test à la fréquence nominale. En parallèle à ces solutions BISTs, nous avons également développé une technique CBISR (Column BISR) qui permet d'assurer un rendement de production élevé et une durée de vie prolongée en particulier pour les mémoires de grandes tailles. La seconde partie de cette thèse adresse le problème de la génération automatique des solutions élabores en proposant un outil de synthèse de structures BIST/BISR pour mémoires. Cet outil innove à la fois par l'approche de son implémentation et par les fonctionnalités offertes. Afin de permettre une implémentation efficace, il utilise une approche originale de synthèse de BIST pour les tests de mémoires basée sur la notion de perturbation par rapport à un axe médiane représenté par les tests Marchs. Hor mis quelques tests électriques, cette approche permet de synthétiser n'importe quel algorithme de test pour mémoires. D'autre part, cette approche est suffisamment flexible pour pouvoir supporter la synthèse des algorithmes de test qui pourront être développes. L’outil offre enfin, un mécanisme pour explorer l'espace des solutions en prenant en compte différentes stratégies d'optimisation afin de délivrer l'architecture optimale, suivant le coût en surface, et/ou la fréquence de fonctionnement, et/ou la couverture de faute et/ou la capacité de réparation. Summary: Modern Systems on Chip usually include large embedded memories. These memories occupy the largest part of the circuit (up to 80% of the total circuit area). Furthermore, memories are more dense than logic and thus, more prone to faults. Therefore, the quality of the memory is crucial for the overall quality of the chip. On the other hand, the reduction of the development cost passes from the reduction of the test cost. Finally, the management of the test complexity of the increasingly complex structures cannot be made with an effective manner without the provision and integration of the advanced test techniques. In the first part of the present thesis, we try to answer to test quality requirement by presenting various memory Built In Self Test (BIST) solutions that cover all the tests required for memory: characterization test, production test, field test and defects analysis test. The proposed solutions allow handling the limitations of the existing memory BIST techniques, such as the selection of the best tradeoff between fault coverage/area overhead and the guarantee of the at-speed testing. We developed also a CBISR (Column Built In Self Repair) technique that allows a significant yield improvement and a prolonged product life in particular for large memories. The second part of this thesis addresses the problem of the automation of the BIST/BISR solutions generation. This is done by designing and implementing a synthesis tool for memories BIST/BISR. This tool innovates at the same time by its implementation approach and the offered features. In order to allow an effective implementation, it uses an original approach of BIST synthesis of the memory tests. This approach is based on the concept of disturbance by report to a median axis represented by the March tests.Except some electric tests, this synthesis approach allows to synthesize any memory test algorithm. Furthermore, by supporting the disturbances of these algorithms, this approach is flexible enough to allow supporting the synthesis of new test algorithms that could be introduced in the future. It offers finally, a mechanism to explore the solutions space by taking into account various optimization strategies in order to deliver optimal architecture, with respect to area cost, the operation frequency, the fault coverage and the repair efficiency. ISBN (format électronique):2-84813-009-1 48