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 etLB 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 etLB 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,…,wx); ⇓ (rx,…, 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