FR 2787233 A1 20000616 FR 9815786 A 19981211 Procédé pour vérifier l'intégrité des circuits de décodage d'une mémoire. L'invention concerne un procédé pour vérifier l'intégrité des circuits de décodage d'une mémoire. L'invention se rapporte plus particulièrement aux tests de production, notamment à un test connu sous le nom de test de la diagonale. Une étape importante lors de la fabrication de circuit intégré est la vérification du bon fonctionnement des circuits en fin de chaîne de production. Etant donné les tailles des transistors, il n'est pas rare qu'une impureté déposée soit sur un masque de fabrication, soit sur la rondelle de silicium pendant la fabrication provoque une erreur sur le circuit. Les erreurs se traduisent de différentes manières, qui peuvent être un défaut de connexion, un court-circuit, un transistor défectueux. D'une manière générale, cela revient à avoir des signaux dits collés soit entre deux signaux, soit plus généralement collé à "1" ou collé à "0". Pour les mémoires la densité d'intégration est maximale et le risque de collage en est augmenté. De nombreux tests sont élaborés pour tester de manière individuelle tous les éléments fonctionnels de la mémoire. Le temps de test devant être réduit au maximum pour des raisons de coût, on procède d'abord aux tests les plus rapides qui permettent de détecter un maximum d'erreurs de sorte que la totalité des tests n'est réalisée que sur les composants valides. Un des premiers tests effectués sur les mémoires consiste à vérifier l'intégrité de la matrice de mémorisation. Ce test d'intégrité de la matrice est l'un des plus courts et permet donc un tri rapide des composants défectueux. Cependant les autres éléments de la mémoire doivent également être testés. Cela permet d'effectuer entre autre tous les autres tests en considérant que la matrice de mémorisation fonctionne correctement. Pour vérifier l'intégrité des circuits de décodage, il est connu, dans l'état de la technique, le test de la diagonale. Le test de la diagonale consiste à mettre toutes les cellules de mémorisation dans un premier état puis à écrire, dans un deuxième état, toutes les cellules de mémorisation qui se situent sur la diagonale de la matrice de mémorisation. La figure 1 représente une matrice 1 de cellules 2 de mémorisation de type carré. Le contenu des cellules 2 de mémorisation est indiqué sur chaque cellule 2. On peut voir que la totalité des cellules contient l'information binaire "0" à l'exception des cellules de la diagonale de la matrice 1 qui contiennent l'information binaire "1". Le test de la diagonale se termine par une lecture de chaque cellule de mémorisation pour vérifier qu'il n'y a pas de décodage multiple de lignes ou de colonnes. Un décodage multiple se traduit par une lecture erronée du contenu de certaines cellules. En effet, lorsqu'une erreur se produit lors de l'écriture, deux bits ou aucun sont écrits simultanément au lieu d'un seul transformant un "0" en "1", ou l'inverse. De même, lorsqu'une erreur de décodage se produit lors de la lecture, plusieurs cellules sont lues simultanément et l'information lue est le résultat d'une fonction logique de type ET ou de type OU (suivant le type de mémoire et/ou suivant l'erreur) entre les données lues simultanément. Le test de la diagonale est très efficace dans le cas d'une matrice de mémorisation de type carré, c'est-à- dire pour une matrice qui dispose d'autant de lignes (lignes de mots) que de colonnes (lignes de bits). Toutefois il est fréquent d'avoir des matrices de mémorisation de type rectangulaire, c'est à dire qui ont un nombre de lignes et de colonnes différent. Si l'on se réfère aux mémoires à accès par page (classiquement, une page fait 64 mots de 8 bits). Cela se traduit par une mémoire qui dispose de 512 colonnes quelque soit sa capacité totale. Le test de la diagonale se traduit alors comme indiqué sur les figures 2 et 3. On divise la matrice rectangulaire en plusieurs matrices carrées. Comme l'homme du métier peut le voir sur les figures 2 et 3, les motifs écrits se répètent pour des adresses différentes. Cela est d'autant plus gênant que le motif se répète pour des adresses o seul un unique bit change. Il n'est donc pas possible de tester valablement le décodage concernant cet unique bit car le changement de ce bit revient à tester une zone de mémoire identique. Dans certains cas, la mémoire peut même être décomposée en un nombre de carrés plus important (il existe aujourd'hui des mémoires accessible par page dont la taille varie entre 1 kbits et 16 Mbits ce qui se traduit par un nombre de lignes variable, pour un nombre de colonnes fixe). Dans certains cas, le nombre de carrés répétés est plus important et se traduit par la non testabilité du décodage d'un nombre de bits d'adresses important. Par ailleurs, les mémoires les plus sujettes à des tailles non rectangulaires sont généralement organisées en mots, d'autres sont même configurables suivant plusieurs tailles de mots. L'invention propose d'améliorer la technique de test en profitant de l'organisation par mots de la mémoire. Le procédé proposé par l'invention permet d'une part de s'affranchir des incertitudes de test décrites précédemment, et d'autre part de diminuer le temps de test. L'invention a pour objet un procédé pour vérifier l'intégrité des circuits de décodage d'une mémoire comprenant une matrice de mémorisation comportant N lignes et M colonnes de mots de L bits, la matrice de mémorisation disposant de N * M * L cellules de mémorisation accessibles à l'aide de N * M adresses par mots de L bits, N, M et L étant des entiers positifs supérieurs à 1, dans lequel, après avoir écrit tous les mots de la mémoire avec un même premier mot, on effectue au moins N ou M écritures de deuxièmes mots dans la matrice de mémorisation de telle manière que chaque ligne et chaque colonne ait au moins un deuxième mot d'inscrit, les deuxièmes mots étant différents du premier mot, puis on lit tous les mots de la matrice de mémorisation. Un tel procédé permet de réduire le nombre d'écritures et de réduire le nombre bits d'adresse, dont le décodage n'est pas vérifiable, par la taille des mots lorsque l'on teste une mémoire disposant d'un petit nombre de lignes. Il est bon de prévoir, si plusieurs deuxièmes mots sont inscrits sur une même ligne ou dans une même colonne que les deuxièmes mots soient différents. Cela permet de réduire à zéro le risque de non testabilité du décodage d'un bit d'adresse. Une amélioration, pour les mémoires qui disposent d'un mode d'écriture par page, consiste en ce que une pluralité de deuxièmes mots différents sont écrits simultanément sur une même ligne. De manière pratique, les deuxièmes mots sont écrits sur les diagonales de blocs de mémorisation, chaque bloc disposant d'autant de lignes de mots que de colonnes de mots. L'utilisation d'un algorithme d'écriture par bloc permet de s'affranchir de la forme de la matrice de mémorisation. L'invention sera mieux comprise et d'autres particularités et avantages apparaîtront à la lecture de la description qui va suivre, la description faisant référence aux dessins annexés parmi lesquels: la figure 1 représente une mémoire carré et son contenu suivant l'état de la technique, les figures 2 et 3 représentent la répartition de ôrv i um données de test sur des matrices de type rectangulaire, selon l'état de la technique. la figure 4 représente une répartition de données de test sur une mémoire, selon l'invention. les figures 5 et 6 représentent deux algorithmes de déroulement d'un test, selon l'invention. La figure 4 représente un exemple de motif de remplissage selon l'invention. Les colonnes 3 sont des colonnes de. mots et non des colonnes de bits. L'utilisation des colonnes de mots permet de réduire de manière considérable le nombre d'écritures à effectuer lorsque la matrice dispose de moins de lignes que de colonnes (le nombre d'écriture étant divisé dans ce cas par la taille des mots). Sur la figure 4, l'homme du métier peut remarquer que l'on écrit des diagonales de mots qui peuvent paraître inutiles. Toutefois si la mémoire est configurable en deux tailles de mots par exemple 8 et 16 bits, cela revient à écrire en 16 bits, soit deux mots à la fois, la lecture de vérification s'effectuant en 8 bits. Il est également possible lorsque l'on utilise des mémoires à accès par page (64 mots de 8 bits) d'effectuer des écritures par page ce qui permet d'effectuer 4 ou 8 écritures (éventuellement plus) simultanément sur chaque ligne. L'homme du métier peut s'apercevoir que les écritures reviennent à tester la mémoire par blocs, chaque bloc utilisant un mot d'écriture différent. Le choix des mots n'est pas très important mais il faut éviter d'utiliser des mots identiques sur une même ligne o sur une même colonne. De nombreux algorithmes de mise en oeuvre sont possibles. Les figures 5 et 6 représentent deux algorithmes donnés à titre d'exemple qui peuvent être implémentés selon l'invention. La figure 5 représente un algorithme simple de mise en oeuvre. Dans cet algorithme, X correspond par exemple à un indice de colonne de mots et Y correspond par exemple à un indice de ligne de mots. Pour l'exemple illustré sur la figure 5, on suppose qu'un nombre maximal de lignes YMAX de mots est inférieur à un nombre maximal de colonnes XMAX de mots. Lors d'une première étape 50, on écrit la totalité des mots de la matrice de mémorisation avec un unique mot, par exemple le mot de huit bits codé h00 (le "h" signifiant qu'il s'agit d'un mot codé en hexadécimal). Le déroulement de cette première étape 50 peut se faire mot par mot, page par page ou de manière globale suivant les possibilités offertes par la mémoire à tester. Après la première étape 50, on exécute une deuxième étape 51. Lors de cette deuxième étape 51, on initialise un mot à écrire de huit bits, par exemple, à la valeur hO1, un indice de colonne X de mot, par exemple à 0, et un indice de ligne Y de mot, par exemple à 0. Puis, on rentre dans une boucle d'écriture qui commence par un premier test 52. Le premier test 52 compare l'indice de colonne X avec le nombre maximal de colonnes XMAX. Si l'indice de colonne X est inférieur au nombre maximal de colonnes XMAX, alors on effectue un deuxième test 53. Si l'indice de colonne X n'est pas inférieur au nombre maximal de colonnes XMAX, alors on effectue une troisième étape 54. Le deuxième test 53 compare l'indice de ligne Y avec le nombre maximal de lignes YMAX. Si l'indice de ligne Y est inférieur au nombre maximal de lignes YMAX, alors on effectue une quatrième étape 55. Si l'indice de ligne Y n'est pas inférieur au nombre maximal de lignes YMAX, alors on effectue une cinquième étape 56 avant d'effectuer la quatrième étape 55. La troisième étape 54 consiste en la vérification des écritures dans la matrice de mémorisation. Cette 11i troisième étape 54 revient à lire tous les mots de la matrice de mémorisation afin de vérifier que la lecture du contenu correspond à ce qui a été écrit. Si la lecture de toute la mémoire est correcte, alors la mémoire est reconnue valide, sinon, la mémoire est reconnue non opérationnelle. La troisième étape 54 termine le test. Lors de la quatrième étape 55, on écrit le mot à écrire à l'emplacement de mémorisation qui correspond à la ligne de mot d'indice Y courant et à la colonne de mot d'indice X courant. Lors de la cinquième étape 56, on initialise à 0 l'indice de ligne Y et on incrémente le mot à écrire d'une unité. Après avoir exécuté la quatrième étape 55, on effectue une sixième étape 57. La sixième étape 57 consiste en la mise à jour des indices de ligne Y et de colonne X. Les indices de ligne Y et de colonne sont alors incrémentés d'une unité chacun. A l'issue de cette sixième étape, on effectue à nouveau le premier test 52. Cet exemple simple de mise en oeuvre peut subir de nombreuses modifications sans pour autant sortir du cadre de l'invention. Si le nombre maximal de lignes YMAX est supérieur au nombre maximal de colonnes XMAX, il convient d'échanger les indices de ligne et de colonne pour avoir un algorithme d'écriture de durée réduite. De même, les différentes valeurs numériques sont arbitraires. En effet, pendant la première étape 50, on peut très bien initialiser la matrice avec une autre valeur numérique, à condition de ne pas utiliser cette valeur numérique comme mot à écrire par la suite. Préférentiellement, on utilise soit la valeur hOO, soit la valeur hFF pour cette première étape car certaines mémoires permettent d'avoir une mise à "1" ou une mise à "0"' globale pour tous les bits de mémorisation. En ce qui concerne le mot à écrire, il a été choisi dans l'exemple de la figure 5 de l'initialiser à hOl puis de l'incrémenter. Tout autre valeur d'initialisation, ainsi que tout autre mode de changement de mot à écrire autre qu'une simple incrémentation est possible. Il convient de ne pas écrire deux fois le même mot sur une même ligne ou dans une même colonne. Lors de la deuxième étape 51 les indices de ligne et de colonne sont initialisés à 0. il est tout à fait possible d'utiliser une autre initialisation, par exemple Y = 3. Dans ce cas, les diagonales de matrice carré ne correspondront pas au motif inscrit. De même, on peut incrémenter Y de trois unités au lieu de une unité, mais le motif ne correspondra plus à des diagonales. Préférentiellement on utilise les diagonales de blocs de mots carrés (autant de lignes de mots que de colonnes de mots) de la matrice de mémorisation afin de simplifier les algorithmes de traitement. Il est aussi possible d'initialiser les indices X et Y aux valeurs respectives XMAX et YMAX et de décrémenter les indices X et Y. Bien entendu, il faut également effectuer les tests des indices en les comparant à zéro. Egalement, il a été représenté une mémoire utilisant des mots de huit bits, l'invention est tout à fait transposable sur des mémoires organisées en mots de tailles différentes. Bien entendu, l'algorithme de la figure 5 peut être amélioré. En effet si l'on dispose d'une mémoire ayant un accès configurable selon au moins deux tailles de mots différentes, il conviendra d'écrire avec des mots de la taille la plus grande et de lire la mémoire avec des mots de la taille la plus petite. Dans ce cas, il convient d'avoir un mot séparable en deux mots distincts. Préférentiellement, si la mémoire est configurable selon deux tailles de mots, alors on utilise un mot séparable en deux mots complémentaires. La figure 6 représente un algorithme de mise en 7:I,- 1 un oeuvre utilisant un découpage en bloc de la mémoire. Cet algorithme est particulièrement intéressant lorsque la mémoire dispose d'un mode d'écriture par page. Dans cet algorithme, X correspond par exemple à un indice de colonne de mots et Y correspond par exemple à un indice de ligne de mots. Pour l'exemple illustré sur la figure 6, on suppose qu'un nombre maximal de lignes YMAX de mots est supérieur à une taille de bloc (un nombre maximal de colonnes XMAX de mots étant un multiple de la taille de bloc, par exemple à l'aide d'un coefficient huit). Lors d'une première étape 60, on écrit la totalité des mots de la matrice de mémorisation avec un unique mot, par exemple le mot de huit bits codé hFF. Le déroulement de cette première étape 60 peut se faire suivant différentes possibilités, comme expliqué pour l'étape 50. Après la première étape 60, on exécute une deuxième étape 61. Lors de cette deuxième étape 61, on initialise des premier à huitième mots de huit bits, par exemple aux valeurs respectives hOl, h03, h07, hOF, hFE, hFC, hF8 et hFO, un indice de colonne X de mot, par exemple à 0, et un indice de ligne Y de mot, par exemple à 0. Puis on rentre dans une boucle d'écriture qui commence par un premier test 62. Le premier test 62 compare l'indice de ligne Y avec le nombre maximal de lignes YMAX. Si l'indice de ligne Y est inférieur au nombre maximal de lignes YMAX, alors on effectue un deuxième test 63. Si l'indice de ligne Y n'est pas inférieur au nombre maximal de lignes YMAX, alors on effectue une troisième étape 64. Le deuxième test 63 compare l'indice de colonne X avec la taille de bloc. Si l'indice de colonne X est inférieur à la taille de bloc, alors on effectue une quatrième étape 65. Si l'indice de colonne X n'est pas inférieur à la taille de bloc, alors on effectue une cinquième étape 66 avant d'effectuer la quatrième étape 65. La troisième étape 64 consiste en la vérification des écritures dans la matrice de mémorisation. Cette troisième étape 64 est identique à l'étape 54 précédemment décrite. La troisième étape 64 termine le test. Lors de la quatrième étape 65, on écrit les premier à huitième mots aux emplacements de mémorisation qui correspondent d'une part à la ligne de mot d'indice Y courant et d'autre part, respectivement, à la colonne de mot d'indice X courant, à la colonne de mot d'indice X courant additionné de la taille de bloc, à la colonne de mot d'indice X courant additionné de deux fois la taille de bloc, à la colonne de mot d'indice X courant additionné de trois fois la taille de bloc, à la colonne de mot d'indice X courant additionné de quatre fois la taille de bloc, à la colonne de mot d'indice X courant additionné de cinq fois la taille de bloc, à la colonne de mot d'indice X courant additionné de six fois la taille de bloc, et à la colonne de mot d'indice X courant additionné de sept fois la taille de bloc. Bien évidemment si la mémoire dispose d'un mode d'écriture par page, cela revient à n'effectuer qu'une seule écriture de page. Si la mémoire ne dispose pas de mode d'écriture par page, l'écriture de plusieurs blocs peut correspondre à une perte de temps, notamment si le nombre maximal de lignes de mots YMAX est supérieur au nombre maximal de colonnes de mots XMAX. Lors de la cinquième étape 66, on initialise à 0 l'indice de colonne X et on change les premier à huitième mots. Le changement des premier à huitième mots peut s'effectuer de différentes manières, par exemple par un décalage d'un bit de chacun des mots. Ce qui importe dans le changement des mots, c'est d'une part de changer chacun des premier à huitième mots de telle sorte que, d'une part, les huit mots soient différents les uns des autres, et d'autre part, chacun des premier à huitième mots n'aient pas été déjà utilisés, précédemment et respectivement, comme premier à huitième mots. Préférentiellement, on n'utilise pas plus d'une fois un mot dans une matrice. Après avoir exécuté la quatrième étape 65, on effectue une sixième étape 67. La sixième étape 67 consiste en la mise à jour des indices de ligne Y et de colonne X. Les indices de ligne Y et de colonne sont alors incrémentés d'une unité chacun. A l'issue de cette sixième étape, on effectue à nouveau le premier test 62. Cet exemple de mise en oeuvre peut subir de nombreuses modifications sans pour autant sortir du cadre de l'invention. Notamment toutes les indications de modifications présentées pour l'algorithme de la figure 5 sont valables pour l'algorithme de la figure 6. L'homme du métier peut noter que si l'on effectue l'algorithme de la figure 6 en ayant une taille de bloc égale à XMAX et si l'on n'utilise qu'un mot à écrire alors on se retrouve dans la situation de l'algorithme de la figure 5, en ayant les lignes et les colonnes de mots inversées. Par analogie également, si l'on dispose d'une mémoire ayant un accès avec plusieurs tailles de mots et pas de mode d'écriture par page, on peut effectuer l'algorithme de la figure 6 en prenant comme nombre de mots à écrire le rapport entre la plus grande et la plus petite taille de mot, la taille de bloc découlant de la division du nombre de mots de taille minimale se situant sur une même ligne divisé par le nombre de mots à écrire. REVENDICATIONS 1. Procédé pour vérifier l'intégrité des circuits de décodage d'une mémoire comprenant une matrice de mémorisation comportant N lignes et M colonnes de mots de L bits, la matrice de mémorisation disposant de N * M * L cellules de mémorisation accessibles à l'aide de N * M adresses par mots de L bits, N, M et L étant des entiers positifs supérieurs à 1, caractérisé en ce que, après avoir écrit tous les mots de la mémoire avec un même premier mot (hOO), on effectue au moins N ou M écritures de deuxièmes mots (hOl à hFE) dans la matrice de mémorisation de telle manière que chaque ligne et chaque colonne ait au moins un deuxième mot d'inscrit, les deuxièmes mots étant différents du premier mot, puis on lit tous les mots de la matrice de mémorisation. 2. Procédé selon la revendication 1, caractérisé en ce que, si plusieurs deuxièmes mots sont inscrits sur une même ligne ou dans une même colonne, alors les deuxièmes mots sont différents. 3. Procédé selon l'une des revendications 1 ou 2, la mémoire disposant d'un accès de donnée selon au moins deux tailles de mots, caractérisé en ce que l'on écrit les deuxièmes mots avec la taille de mot la plus grande, et en ce que l'on lit les mots avec la taille de mot la plus petite. 4. Procédé selon la revendication 3, la mémoire disposant d'un accès de donnée selon uniquement deux tailles de mots, caractérisé en ce que les deuxièmes mots écrits de la taille la plus grande sont séparables en deux mots de la taille la plus petite complémentaires l'un de l'autre. 5. Procédé selon l'une des revendication 1 à 4, la mémoire disposant d'un mode d'écriture par page, caractérisé en ce que une pluralité de deuxièmes mots différents sont écrits simultanément sur une même ligne. 6. Procédé selon l'une des revendications 1 à 5, caractérisé en ce que le premier mot est un mot constitué de bits qui sont tous dans le même état. 7. Procédé selon la revendication 6, caractérisé en ce que l'écriture de la mémoire avec le premier mot s'effectue soit par une mise à "1" globale, soit par une mise à "0" globale de toutes les cellules élémentaires de mémorisation. 8. Procédé selon l'une des revendications 1 à 7, caractérisé en ce que les deuxièmes mots sont écrits sur les diagonales de blocs de mémorisation, chaque bloc disposant d'autant de lignes de mots que de colonnes de mots. 9. Procédé selon l'une des revendications 1 à 8, caractérisé en ce que si N est supérieur à M, alors N écritures sont effectuées, et en ce que si M est supérieur à N, alors M écritures sont effectuées.