FR 2862421 A1 20050520 FR 0313354 A 20031114 Circuit mémoire et procédé de traitement d'un code destiné à être chargé dans ladite mémoire Domaine technique de l'invention La présente invention concerne les circuits mémoires et notamment un circuit mémoire de type ROM comportant une matrice composée de cellules mémoires et lo composée de rangées (WORDLINE) et de colonnes (BITLINE), chaque rangée permettant de stocker une page de MUX mots de N bits. Etat de la technique De plus en plus de dispositifs électroniques sont équipés de produits semi-conducteurs intégrant un micro-calculateur associé à une mémoire embarquée sur un même produit semi-conducteur, constituant ainsi de véritables système intégrés (system on chie dans la littérature anglo-saxonne). La montée en puissance de tels systèmes se fait notamment par un accroissement de la capacité des mémoires ROM (ou Read Only Memory) qui servent au stockage des microprogrammes nécessaires au fonctionnement du micro-calculateur intégré. La croissance de la capacité des mémoires ROM pose des sérieux problèmes aux équipes de développement. Un premier problème résulte du fait que l'accroissement de la dimension des mémoires, lesquelles peuvent atteindre couramment 8, 16 et voire 32 mégabits, ce qui rend ces dernières extrêmement difficiles à tester avec les outils classiques de vérification dont disposent les ingénieurs. En effet, comme on le sait, la ST 03-GRI-182 programmation d'une ROM se fait par le positionnement, sur le circuit intégré, d'un plateau de programmation (désigné sous l'appellation plate dans la littérature anglo-saxonne), lequel comporte un ensemble de contacts ou vias qui sont destinés à coder l'information à stocker dans le silicium. La figure 1 rappelle le fonctionnement d'une cellule mémoire ou d'un point mémoire, lequel comporte un transistor 1 connecté en série avec un élément 2 via ou circuit ouvert - destiné à recevoir l'information à coder. L'ensemble est connecté entre le potentiel de masse (GND) et la ligne de bit 3 (ou BITLINE qui est lo en fait une colonne de la matrice), elle-même connectée aux amplificateurs (non représentés) de l'étage de sortie de la mémoire. Avant toute lecture, la ligne de bit est pré chargée au potentiel d'alimentation (Vdd). Au moment de la lecture, les décodeurs d'adresses (non représentés) 1s activent la grille (portant un signal WL ou WORD LWE) du transistor 1, rendant ce dernier passant et entraînant ainsi la décharge de la ligne de bit ou colonne lorsque l'élément mémoire 2 se trouve être un contact ou un via. Cette décharge est détectée par un amplificateur de lecture (non représenté) lequel sort ainsi un 0 logique. Dans le cas contraire, si l'élément 2 est un circuit ouvert correspondant à un 1 logique - la ligne de bit ne peut être déchargée et cette information est alors détectée par l'amplificateur de sortie. Il est à noter que lorsque les pages qui sont stockées dans la mémoire - à savoir les rangées du réseau matriciel constituant la mémoire - présentent une majorité de 0 logique positionnés sur un même bit donné, on stocke alors classiquement la valeur inverse dans les points mémoires présents sur la même ligne de bit pour toutes les pages de la mémoire et, en sortie de la colonne ou ligne de bit, on dispose un inverseur afin de rétablir la valeur correcte de l'information. De cette manière on peut assurer un nombre réduit de vias dans les points mémoires correspondant à une même ligne de bits, ce qui présente l'avantage de réduire les courants de fuites qui tendent à décharger spontanément la ligne de bit, et qui tendent à s'accroître au fur et à mesure de la réduction des dimensions des composants. ST 03-GR1-182 2862421 -3- La figure 2 illustre un exemple d'architecture classique d'une mémoire ROM qui est une mémoire de 4 bits, ayant un taux de multiplexage de 4 bits. La mémoire ROM basée sur un réseau matriciel 21, associé à un décodeur d'adresse 22 et une logique de commande 23 permettant de générer tous les signaux d'horloges etc... nécessaires à son fonctionnement. Le réseau matriciel 21 comporte un nombre de rangées ou lignes correspondant à autant de pages pouvant être stockées dans la mémoire, et un nombre de colonnes (BITLINE) 27-1 à 27-4, 28-1 à 28-4, 29-1 à 29-4 et 30-1 à 30-4, chaque colonne correspondant à une ligne de bit. Un système de lecture comporte un étage de sortie 24. Classiquement, pour programmer la mémoire, on détermine la densité de 0 qui doivent être stockées dans les 27-1, 27-2, 27-3 et 27-4 et, si cette densité est supérieure à 50%, alors on inverse les valeurs stockées dans toutes ces mêmes colonnes. On procède de même pour les autres colonnes 28-1, 28-2, 28-3 et 28-4 et on prévoit un inverseur pour rétablir la valeur correcte de l'information stockée. Ce mécanisme connu permet de réduire les courants de fuite au sein des colonnes ou lignes de bits. II n'est pourtant pas satisfaisant. En effet, il tend à créer un enchevêtrement considérable au niveau des colonnes formant le réseau matriciel et, par conséquent, rend très difficile sa vérification. On constate que l' accroissement de la taille de la mémoire ROM entraîne une augmentation correspondante de la taille du plateau de programmation et c'est finalement un ensemble de plusieurs millions, voire plusieurs dizaines de millions de contacts et de vias qu'il faut pouvoir poser sur la mémoire et surtout tester afin de s'assurer l'intégrité du microprogramme stocké dans la mémoire. Les techniques et les systèmes classiques de vérifications, notamment basés sur le LVS (Layout Versus Schematics) s'avèrent très vite incapables de conduire des tests de bas niveau sur une mémoire ROM d'une telle dimension. En effet, comme il ne peut y avoir aucune hiérarchisation dans la structure du code à tester, il faut se résoudre à conduire les vérifications de l'intégralité du code, à plat , c'est à dire en procédant aux vérifications pour chacune des cellules mémoires, associées ou non à un via ou à un contact. Cela revient à coder et à traiter un fichier ST 03-GR1-182 ou une base de données de plusieurs millions d'octets, ce qui dépasse largement les capacités des machines de vérification classiques. Il faut donc alors se résoudre à investir dans de nouveaux outils de 5 vérification et de tests, plus puissants et plus coûteux, lesquels deviendront, eux- également, désuets et insuffisants lorsque la dimension des ROM croîtra encore.... A cette difficulté majeure, vient se greffer un second problème qui résulte du fait que le stockage de certains programmes peut conduire à une grande disparité au niveau de la densité des motifs, entraînant ainsi des gradients importants au sein de la matrice. Cette apparition de gradient s'avère gênante surtout avec la miniaturisation croissante des motifs et il est souhaitable de pouvoir réduire la valeur de ces gradients. Enfin, la présence des inverseurs dans certaines lignes de bit viennent introduire un troisième problème lié au temps d'accès non négligeable au sein de la mémoire, qu'il convient également de réduire. Il y a un besoin de repenser complètement la conception des mémoires 20 mortes destinées à être intégrés dans un produit semi-conducteur, afin de résoudre les problèmes mentionnés précédemment. Exposé de l'invention La présente invention a pour but de proposer une structure de mémoire morte qui reste facile à tester même lorsque l'on accroît le nombre de cellules au sein de la matrice. Un autre but de la présente invention consiste à proposer une structure de mémoire permettant son intégration au sein d'un circuit intégré et qui améliore le gradient des vias au sein de la structure de la mémoire. ST 03-GR1-182 Un troisième but de la présente invention consiste à proposer une structure de mémoire qui présente un temps d'accès constant quel que soit la ligne de bit considérée. L'invention réalise ces buts au moyen d'une mémoire de type ROM comportant une matrice composée de cellules mémoires et composée de rangées (WORDLINE) et de colonnes (BITLINE), chaque rangée permettant de stocker une page de MUX mots de N bits. Un décodeur d'adresses permet le décodage des adresses pour extraire une page de MUX mots devant être lue. Les colonnes (BITLINE) de même rang sont groupées et connectées à un multiplexeur parmi un ensemble de N multiplexeurs et, en sortie, au moins un multiplexeur est associé à un circuit inverseur permettant le stockage de la valeur inverse d'une information dans toutes les cellules mémoires appartenant à une bande de colonnes associées à ce même multiplexeur. II en résulte une nouvelle organisation de la mémoire, avec un groupement des colonnes (BITLINE) sur une même bande de largeur MUX, lesquelles sont clairement indépendantes les unes des autres. Les procédures de vérification sont alors directement applicables sur ces mêmes bandes, indépendamment les unes des autres. On peut en effet effectuer à présent un test complet sur une bande du réseau matriciel, d'une hauteur identique à celle de la hauteur de la matrice et sur une large de (MUX) colonnes. Ce test peut être effectué sur les outils de vérification et de tests classiques (notamment LVS) , quelle que soit la dimension de la mémoire. En outre, en groupant les inverseurs sur plusieurs colonnes (BITLINE) (au sein d'un même groupe de MUX colonnes) on modifie la répartition des contacts ou vias qui sont introduits dans la matrice et, finalement, on améliore l'homogénéité au niveau de la densité des motifs et, finalement, le gradient des couches métalliques. De préférence, le stockage de la valeur inverse est effectué lorsque le nombre de 0 devant être stocké dans la mémoire dépasse un seuil prédéterminé, de manière à assurer un courant de fuite minimum. On évite ainsi, ST 03-GR1-182 comme dans la technique classique, de trop décharger les colonnes (BITLINE) tout en assurant une valeur moyenne effectuée à l'échelle d'une bande de largeur MUX et non plus d'une seule colonne. Dans un mode de réalisation préféré, on insère des circuits non inverseurs symétriques aux circuits inverseurs dans les bandes qui en sont dénuées. On assure ainsi un temps d'accès uniforme à toutes les colonnes (BITLINE) et l'on améliore le comportement de la mémoire. lo Il en résulte alors des performances similaires en sortie de tous les multiplexeurs, qu'ils soient ou non associés à des inverseurs. De préférence, les temps de transit sont réduits au moyen d'inverseurs comportant un amplificateur différentiel permettant la détection d'une faible variation 15 Av afin de réduire encore le temps de transit. L'invention a également pour objet un procédé de traitement d'un code de programmation destiné à son stockage dans un circuit mémoire comportant une matrice composée de rangées (WORDLINE) et de colonnes (BITLINE) et d'un étage de sortie multiplexé, chaque rangée permettant de stocker une page de MUX mots de N bits. Le procédé comporte les étapes suivantes: chargement (51) du code de programmation dans une mémoire en vue de son traitement; - pour chaque bit en sortie de l'étage de sortie, calcul (53) du nombre de 0 devant être stockés dans des cellules mémoires appartenant à des colonnes correspondant à un même multiplexeur, comparaison du résultat du calcul précédent et, en fonction du résultat, inversion de la valeur de chaque information à stocker dans les cellules appartenant à ladite 30 bande. ST 03-GR1-182 Description des dessins D'autres caractéristiques, but et avantages de l'invention apparaîtront à la lecture de la description et des dessins ci-après, donnés uniquement à titre 5 d'exemples non limitatifs. Sur les dessins annexés: La figure 1 illustre l'architecture classique d'une mémoire DRAM de l'art antérieur. to La figure 2 représente la structure d'une mémoire ROM conformément à la présente invention. La figure 3 illustre la structure d'une mémoire ROM modifiée conformément à la présente invention. La figure 4 illustre un mode de réalisation d'un procédé de traitement d'un code destiné à être stocké dans la structure de mémoire conformément à la présente invention. Les figures 5a et 5b illustrent respectivement un mode de réalisation préféré du circuit inverseur et du circuit tampon pour la mémoire selon l'invention. Description d'un mode de réalisation préféré La figure 3 illustre un mode de réalisation particulier de l'invention. On retrouve une structure de mémoire morte sous une forme matricielle, constituée d'un nombre de rangées constituant autant de pages, chaque page étant constituée de quatre mots de quatre bits chacun. Ces valeurs sont choisies dans un souci de simplification mais l'homme du métier pourra adapter la structure à toute caractéristique de mémoire... ST 03-GR1-182 La mémoire est constituée d'une matrice 31 organisées en rangées (WORDLINE) et en colonnes (BITLINE) comme pour la mémoire ROM classique. On rappelle que, d'une manière générale, lorsque l'on conçoit une mémoire embarquée, on définit cette dernière par le nombre de rangées que celleci comporte, correspondant à autant de pages pouvant être accédées, par un taux de multiplexage (MUX) correspondant au nombre de mots contenus dans chaque page et enfin par un nombre n de bits pour chaque mot. lo Le facteur de multiplexage permet de réduire le nombre de rangées et, corrélativement, d'accroître le nombre de bits pour chacune des rangées. D'une manière générale, on trouve les relations: Nombre de rangées de la matrice = Nombre de Mots l MUX 15 Nombre de colonnes de la matrice = n x MUX Un décodeur d'adresse 32 sert à décoder les adresses et à déterminer une page particulière de la mémoire qui doit être lue. Une logique de commande 33 permet de générer les signaux de commande et d'horloges adéquats et la mémoire fournit via un étage de sortie 34 les mots de N bits. Dans un souci de simplification, et pour bien mettre en évidence la nouveauté par rapport à la structure classique de la figure 2, on a représenté une structure de mémoire présentant les mêmes caractéristiques que celle de la figure 2, à savoir un ensemble de quatre bits en sortie et un taux de multiplexage égal à 4. Ainsi, en sortie des colonnes (BITLINE) 37-1 à 37-4, 38-1 à 38-4, 39-1 à 39-4 et 40-1 à 40-4, se trouvent les étages de multiplexeur 41, 42, 43 et 44 correspondant respectivement au bit 1, 2, 3 et 4 de l'étage de sortie. Contrairement à la structure classique, la mémoire selon l'invention opère un groupement des colonnes (BITLINE) par bande de largeur MUX correspondant à un même multiplexeur. ST 03-GRI-182 2862421 -9- On calcule donc la densité de "0" sur ce groupement de MUX colonnes adjacentes (n = MUX) et on inverse, le cas échéant, l'intégralité des n colonnes. Les n colonnes étant connectées aux entrées d'un même multiplexeur, il suffit de prévoir en sortie des multiplexeurs - par exemple les multiplexeurs 41 et 43 représentés sur la figure 3 - un inverseur pour rétablir la bonne information. L'invention tranche donc nettement avec la technique classique basée sur le calcul de la densité des 0 sur un ensemble de n colonnes, non pas adjacentes comme dans l'invention, mais espacées de MUX et donc touchant plusieurs multiplexeurs. D'où il en résultait un enchevêtrement des différentes colonnes et, par suite, la difficulté de tester la totalité. L'invention facilite considérablement la conception du circuit et, en outre, permet de séparer clairement le réseau matériel en un ensemble de N groupes distincts qui pourront être testés séparément. On peut à présent envisager d'accroître sans limite la taille des mémoires ROM tout en assurant leur vérification d'une manière simple et peu onéreuse. De préférence, on insère un inverseur lorsque le taux de 0 à stocker dans les cellules correspondant à un même bande dépasse 50 pour cents. On permet ainsi de réduire les courants de fuite qui sont susceptibles de décharger la colonne (BITLINE). En outre, on peut également modifier la répartition des contacts et des vias qui doivent être stockés en mémoire et, par suite, agir sur la valeur du gradient au sein même de la matrice. Dans un mode de réalisation préféré, les multiplexeurs qui ne sont pas associés à un inverseur, tels que les multiplexeurs 42 et 44 sur la figure 3, sont associés à un circuit de lecture comportant un élément tampon (Buffer) présentant le même temps de transit que le circuit inverseur. ST 03-GR1-182 On assure ainsi une uniformité au niveau du temps de transit de l'information en sortie de mémoire. Dans un mode de réalisation préféré, chaque inverseur est réalisé au moyen d'un amplificateur différentiel comportant une première entrée connectée à un potentiel de référence et une seconde entrée connectée à la sortie du multiplexeur. De ce fait, l'amplificateur différentiel permet de détecter très rapidement une faible variation Av du potentiel de la ligne de bit et peut interpréter plus rapidement la donnée à extraire. Le temps de transit en est encore amélioré. Pour permettre au code de programmation d'être chargé dans cette nouvelle architecture de mémoire, ce code fait l'objet d'un traitement spécifique qui est décrit en relation avec la figure 4. Ce traitement vise à diviser le code en sections qui pourront indépendamment stockées dans les tranches de largeur MUX au sein du silicium. Le procédé de traitement comporte les étapes suivantes: Dans une étape 51, le code de programmation est chargé dans la mémoire 20 d'un ordinateur afin d'y être traité. Dans une étape 52, un procédé de boucle s'initialise avec un compteur i = 1 à n, correspondants à chacun des n bits en sortie du bus de sortie. Dans une étape 53, le procédé effectue le calcul du nombre de valeur 0 stockée au sein d'un même bit i de sortie, et ce pour toutes les MUX colonnes (BITLINE) correspondant à ce bit i. L'étape 54 correspond à un test. Si la valeur trouvée est supérieur à un seuil 30 prédéterminé - de préférence 50 pour cent alors le procédé va à une étape 55 où chacun des bits correspondants au MUX colonnes (BITLINE) se trouve inversée. Dans le cas contraire, si le test de l'étape 54 échoue, alors le procédé poursuit avec une étape 56 où les valeurs stockées restent inchangées. ST 03-GR1-182 Dans une étape 57, le procédé incrémente le compteur i et réitère, le cas échéant, la boucle formée par les étapes 53-57 jusqu'au complet traitement de toutes les colonnes de la matrice. ST 03-GR1-182 Revendications 1. Circuit mémoire de type ROM comportant: - une matrice (31) composée de cellules mémoires destinée à recevoir des données, ladite matrice étant composée de rangées (WORDLINE) et de colonnes (BITLINE), chaque rangée permettant de stocker une page de MUX mots de N bits - un décodeur d'adresses (32) pour décoder les adresses et déterminer une page lo particulière devant être lue; - un ensemble de n multiplexeurs (41, 42, 43, 44) recevant en entrée les colonnes (BITLINE) de même rang i n correspondant à un même bit de l'étage de sortie; - un étage de sortie (34) comportant N bits - au moins un inverseur(s) (41, 43) connecté(s) à la sortie d'un desdits multiplexeurs afin de permettre le stockage de la valeur inverse d'une information dans les cellules mémoires appartenant à une bande de colonnes associées à un même multiplexeur. 2. Circuit mémoire de type ROM selon la revendication 1 caractérisé en ce que, en réponse à la comparaison du nombre de 0 à charger dans toute une bande de MUX colonnes correspondants à un même multiplexeur, lesdites cellules mémoires sont chargées avec la valeur inverse de l'information à stocker. 3. Circuit mémoire de type ROM selon la revendication 1 caractérisé en ce que lesdites cellules mémoires appartenant à une même bande de colonnes (BITLINE) correspondant à un même multiplexeur sont chargées avec la valeur inverse de l'information à stocker afin de réduire le courant de fuite au sein de la même colonne. 4. Circuit mémoire de type ROM selon la revendication 3 caractérisé en ce que lesdites cellules mémoires appartenant à une même bande de colonnes (BITLINE) correspondant à un même multiplexeur sont chargées avec la valeur inverse de l'information à stocker lorsque la densité de 0 au sein de ladite bande dépasse un seuil prédéterminé. ST 03-GR1-182 - 13 - 5. Circuit mémoire de type ROM selon l'une des revendications précédentes caractérisé en ce que les multiplexeurs qui ne sont pas associés à un inverseurs sont associés à des circuits tampons présentant un même temps de transit que celui desdits inverseurs. 6. Circuit mémoire de type ROM selon la revendication 3 caractérisé en ce que les dits inverseurs sont réalisés au moyen d'amplificateurs différentiels permettant la détection d'une faible variation Av afin de réduire encore le temps de transit. 7. Circuit mémoire de type ROM selon la revendication 2 caractérisé en ce que le nombre de 0 pris en compte pour déterminer si un inverseur doit être associé à chaque multiplexeur est fixé à 50 pour cent. 8. Circuit mémoire selon l'une des revendications précédentes caractérisé en ce que l'information à stocker dans lesdites cellules mémoires consiste en un code de programmation pour un micro-calculateur intégrés sur le même puce que le circuit mémoire. 9. Procédé de traitement d'un code de programmation destiné à son stockage dans un circuit mémoire tel que défini dans la revendication 1 comportant une matrice composée de rangées (WORDLINE) et de colonnes (BITLINE) et d'un étage de sortie multiplexé, chaque rangée permettant de stocker une page de MUX mots de N bits ledit procédé comportant les étapes suivantes: - chargement (51) du code de programmation dans une mémoire en vue de son traitement dans le dit circuit mémoire; - pour chaque bit en sortie de l'étage de sortie, calcul (53) du nombre de 0 30 devant être stockés dans des cellules mémoires appartenant à des colonnes correspondant à un même multiplexeur, - comparaison du résultat du calcul précédent et, en fonction du résultat, inversion de la valeur de chaque information à stocker dans les cellules appartenant à ladite bande. ST 03-GR1-182 - 14 - 10. Procédé de traitement d'un code de programmation selon la revendication 9 caractérisé en ce que l'inversion est effectuée lorsque le code comporte une majorité de 0 devant être stockée au sein de la matrice, dans des colonnes appartenant à un même multiplexeur de sortie. ST 03-GR1-182