Brevet FR2874449A1 — publié le 20060224

CIRCUIT DE RETARD DE PROGRAMME AUTO-ADAPTATIF POUR MEMOIRES PROGRAMMABLES DOMAINE DE L'INVENTION La présente invention concerne des architectures de mémoires à circuits intégrés. Plus particulièrement, l'invention concerne un nouveau protocole d'opération de programmation et une nouvelle architecture de mémoire pour mémoires programmables permettant une "programmation intelligente". CONTEXTE DE L'INVENTION La figure 1 représente l'architecture de tableau d'une mémoire EEPROM programmable, basée sur une matrice de rangées et de colonnes. Chaque rangée et chaque colonne correspond à une pluralité de lignes de mots 101i 102, ..., 10n et à une pluralité de lignes de bits 201, 202, 20n (les bits sont accessibles à 2n bits par mot) respectivement. Un exemple de cellule de mémoire 30 est situé à chaque intersection de ligne de mots 10 et de ligne de bits 20. La cellule de mémoire 30 est composée d'un transistor de sélection 31 et d'un transistor à grille flottante 32 connectés en série. La grille du transistor de sélection de cellule 31 est connectée à la ligne de mots 10, son drain à la ligne de bits 20 et sa source au drain du transistor à grille flottante 32. Une source de transistor à grille flottante 34 est connectée à la masse par le biais de la ligne de source 35 et la grille du transistor à grille flottante 36 peut être logiquement connectée à une ligne Vref 40 lorsqu'elle est autorisée par un dispositif de sélection de mot 11. La mémorisation des données dans un transistor à grille flottante est obtenue en faisant varier la charge électrique qui existe sur la grille flottante. Pour obtenir une valeur de logique 1 (état effacé), des électrons doivent être injectés dans la grille flottante, ce qui augmente la tension de seuil du transistor à grille flottante 32. Pour obtenir une valeur de logique 0 (état écrit), des électrons doivent être extraits de la grille flottante, ce qui diminue la tension de seuil du transistor à grille flottante 32. Un mécanisme appelé effet tunnel Fowler Nordheim est utilisé à la fois pour des opérations d'effacement et de programmation sur une mémoire EEPROM. Ce mécanisme est très lent (de l'ordre de millisecondes) et nécessite une source haute tension Vpp qui est générée par un circuit à l'intérieur de la puce de mémoire EEPROM. La ligne Vref 40 est conduite à la Vpp lors d'une opération d'effacement et mise à la masse lors d'une opération d'écriture. La ligne de bits 20 est laissée flottante lors d'une opération d'effacement et connectée à la Vpp lors d'une opération d'écriture. L'effacement d'une cellule est obtenu en appliquant une tension élevée Vpp sur la grille 36 du transistor à grille flottante 32 (par le biais du dispositif de sélection de mot 11 et de la ligne Vref 40) et la masse à la source du transistor à grille flottante 34 (en mettant à la masse les lignes de source 35). Pour écrire la cellule de mémoire 30, Vpp doit être appliquée au drain du transistor à grille flottante 32 (par le biais de la ligne de bits 20 et du transistor de sélection de cellule 31), la grille du transistor à grille flottante 36 doit être mise à la masse (par le biais d'un dispositif de sélection de mot 11 et de la ligne Vref 40) et la source du transistor à grille flottante 34 reste flottante (au moyen de lignes de source flottantes 35). Si des cellules de mémoire 30 partagent la même ligne Vref 40, plusieurs cellules de mémoire peuvent être groupées en mots et peuvent être effacées en parallèle. De plus, chaque bit (cellule de mémoire) peut être écrit indépendamment en pilotant sa ligne de bits 20 correspondante sur Vpp. La programmation de mots est obtenue en deux étapes. Premièrement, le mot est effacé et tous les bits effacés sont établis à une valeur de logique 1 après effacement. Deuxièmement, tous les bits nécessaires dans le mot sont écrits en même temps, faisant passer tous les bits à une valeur de logique 0 afin de programmer les données de mot ciblées. Si l'on se réfère à la figure 1, en fonction de la tension de seuil (Vth) du transistor à grille flottante 32, chaque cellule de mémoire 30 sera conductrice ou non- conductrice de courant. Si la tension de seuil Vth est supérieure à la tension de référence Vref, la cellule de mémoire 30 est inactive (OFF). Si Vth est inférieure à Vref, la cellule de mémoire 30 est active (ON). Une tension de seuil Vth peut être ajustée en injectant ou en retirant des électrons de la grille flottante de chaque transistor à grille flottante 32 lors d'une opération de programmation de cellule de mémoire 30 ou de mot. Lors d'une opération d'effacement, des électrons sont injectés dans la grille flottante ayant pour résultat une valeur de tension de seuil élevée VthhighÉ Lors d'une opération d'écriture, des électrons sont retirés de la grille flottante ayant pour résultat une tension de seuil basse VthlowÉ La différence entre la Vthhigh élevée et la Vthiow basse est appelée fenêtre de programmation. La valeur de tension de référence normalement appliquée à la grille d'une cellule de mémoire 30 lors d'une opération de lecture se situe entre Vthhigh et VthiowÉ En raison d'une perte de charge possible de la grille flottante, au bout de plusieurs années par exemple, une fenêtre de programmation large est souhaitable pour empêcher une éventuelle perte de données. Les caractéristiques de rétention de données de chaque cellule de mémoire 30 dépendront de la capacité de la cellule de mémoire 30 à maintenir correctement les seuils de tension dans le temps, en raison d'une perte intrinsèque de charge de la grille flottante. De plus, les caractéristiques d'une cellule de mémoire 30 peuvent changer au bout de plusieurs cycles d'effacement et d'écriture, du fait d'un phénomène de piégeage des charges négatives. Ces caractéristiques techniques de la cellule de mémoire 30 rendent difficile de garantir une capacité de rétention des données acceptable. Par conséquent, il est souhaitable d'avoir une fenêtre de programmation qui soit aussi large que possible pour compenser les caractéristiques d'une cellule de mémoire programmable qui peuvent affecter l'intégrité des données mémorisées dans une cellule de mémoire. BREVE DESCRIPTION DES DESSINS La figure 1 est un exemple d'une matrice de mémoire EEPROM de l'art antérieur. La figure 2 est un schéma de principe d'une matrice de mémoire EEPROM (noyau de mémoire) avec un exemple de circuit supplémentaire utilisé pour une opération de programmation auto-adaptative. La figure 3 est un circuit de verrouillage de colonne associé à une opération de programmation auto-10 adaptative de la figure 2. La figure 4 est le verrou de colonne de la figure 3 avec un exemple de fonction de vérification. La figure 5 est le verrou de colonne de la figure 4, avec un exemple de verrou de colonne Vref sélectif. La figure 6 est un organigramme illustrant les fonctions d'un exemple d'algorithme d'effacement associé à une opération de programmation autoadaptative. La figure 7 est un organigramme illustrant les fonctions d'un exemple d'algorithme d'écriture associé à une opération de programmation autoadaptative. RESUME DE L'INVENTION La présente invention est un circuit pour produire une impulsion de programmation réglée automatiquement pour compenser un phénomène de piégeage de charges négatives dans l'oxyde d'un transistor à grille flottante et pour compenser une tension d'alimentation basse et des changements de température. L'impulsion de programmation est réglée selon les conditions de programmation telles que la température et la tension d'alimentation. La mémoire est contrôlée selon besoin pour obtenir une fiabilité de données améliorée dans une variété de conditions telles que la température et le nombre de fois où la grille flottante a été programmée. L'utilisation de l'impulsion de programmation réglée a pour résultat une meilleure capacité de rétention des données même en utilisant une partie qui a été programmée à plusieurs reprises. De plus, étant donné que l'impulsion de programmation est optimisée, la consommation d'énergie est également optimisée et la mémoire est moins sollicitée. La présente invention est également un procédé pour programmer et vérifier une cellule de mémoire, en utilisant une tension de lecture qui est différente d'une tension de lecture normale, après une opération d'effacement ou bien une opération d'écriture et en ajustant automatiquement les paramètres de l'impulsion de programmation. DESCRIPTION DETAILLEE DE L'INVENTION La présente invention est une opération de programmation auto-adaptative qui règle le temps de retard de l'impulsion de programmation utilisée dans une opération d'effacement ou d'écriture, en se basant sur une opération de lecture et une comparaison à une valeur logique attendue pour la cellule de mémoire 30. Les retards d'effacement et d'écriture sont réglés automatiquement pour maintenir une fenêtre de programmation acceptable dans une variété de conditions. L'augmentation du retard d'impulsion de programmation sur une partie itérée est un procédé utilisé pour récupérer une fenêtre de programmation acceptable et pour récupérer les caractéristiques de rétention de cellule de mémoire souhaitées. Par exemple, une autre impulsion de programmation est appliquée après un problème de comparaison, lorsque les charges piégées dans l'oxyde du transistor à grille flottante 32 rendent le mécanisme de programmation moins efficace. Les caractéristiques d'endurance, de rétention des données et de consommation d'énergie peuvent également être améliorées grâce à la présente invention. Dans un exemple de mode de réalisation de la présente invention, un réglage automatique du nombre d'impulsions de programmation augmente pour compenser un problème d'opération d'effacement ou d'opération d'écriture d'une quelconque cellule de mémoire à l'intérieur d'une mémoire EEPROM programmable. Si l'on se réfère à la figure 2, l'exemple de dispositif de mémoire EEPROM qui contient un noyau de mémoire 101, un bloc d'écriture de données ("data in") 102, une sélection de ligne de bits 104, un verrou de colonne 110, des décodeurs d'adresse 120, 130 et 140, des circuits de détection 105, une pompe de charge 159, une logique de commande 155, des lignes de commande 151 et un temporisateur d'écriture 154. De plus, un indicateur d'échec de programmation 152, un séquenceur dédié 150, un circuit de verrouillage dédié, un temporisateur de vérification 160, un compteur d'adresses 173, des multiplexeurs 170, 175, un comparateur 103 et un générateur de tension de référence de marge (Vref) 154 sont nécessaires pour implémenter la programmation auto-adaptative. Le noyau de mémoire 101 représente une architecture de tableau similaire à l'architecture de tableau d'une mémoire EEPROM telle que représentée sur la figure 1. Dans l'exemple de mode de réalisation, le séquenceur 150 est un automate fini utilisée pour implémenter un mode de réalisation d'un algorithme de programmation (les détails de l'algorithme de programmation sont décrits en détail par rapport aux figures 6 et 7). Dans des variantes de modes de réalisation, les fonctions d'un séquenceur 150 peuvent être effectuées par un contrôleur dédié ou par un processeur. Le séquenceur 150 est connecté à la logique de commande 155 et à un temporisateur d'écriture 153. La logique de commande 155 met en marche ou arrête la pompe de charge 159 pour fournir la tension Vpp. Le temporisateur d'écriture 154 contrôle une largeur d'impulsion de programmation. Le séquenceur 150 fournit des impulsions d'effacement et d'écriture au temporisateur d'écriture 154. Lors d'une opération de vérification, le compteur d'adresses 173 génère les adresses requises en commençant à une première adresse. Les adresses sont fournies à l'adresse Yld 120 et Yrd 140 avec des décodeurs par le biais des multiplexeurs 170, 175. Toute cellule de mémoire effacée 30 devrait être égale à une valeur de logique 1. Une valeur logique de mot effacée devrait être égale à un groupe de 2n bits, chaque bit ayant une valeur de logique 1. Par exemple, un mot de huit bits devrait avoir une valeur hexadécimale de FF après une opération d'effacement. Le comparateur 103 compare également une cellule de mémoire 30 ou un mot dans la matrice mémoire qui a été écrit au contenu des verrous de colonnes contenant une valeur de donnée ou de logique attendue. Le contenu d'au moins une cellule de mémoire programmée 30 est vérifié automatiquement (voir autres détails ci-dessous) et une opération de programmation est achevée lorsqu'une vérification d'une cellule de mémoire programmée 30 est effectuée avec succès. Un essai de mode de marge de lecture est utilisé pour vérifier la qualité d'une opération de programmation. Une référence de tension de marge est utilisée dans un essai de mode de marge de lecture. La référence de tension Vref est augmentée lors de la lecture de cellules inactives (OFF) et diminuée lors de la lecture de cellules actives (ON) et d'une comparaison à une référence de tension de lecture normale. Par exemple, une marge d'environ 0,5 volts est utilisée. L'utilisation d'une référence de tension de marge lors d'une opération de lecture garantit que la cellule de mémoire reste inactive (OFF) lorsque la cellule de mémoire 30 est lue avec Vref+0, 5V sur sa grille et la cellule de mémoire reste active (ON) lorsque la cellule de mémoire 30 est lue avec Vref-O, 5V sur sa grille. Lors de l'opération de vérification, un mot dans le noyau de la mémoire (matrice) 101 est lu en utilisant un mode de marge en appliquant une valeur Vref de façon interne par le générateur de Vref de marge 154. Une opération de programmation qui programme une valeur logique dans au moins une cellule de mémoire 30 est divisée en trois phases ou opérations: chargement, effacement et écriture. Le courant de programmation pour une seule cellule est très faible, rendant possible la programmation de plusieurs bits en parallèle. Pour améliorer la vitesse de programmation de la mémoire EEPROM, il est possible d'effacer ou d'écrire plusieurs mots dans la même rangée ou de nombreux mots sur une page en même temps. Cependant, les données devant être programmées doivent être chargées dans un tampon (verrou) dédié avant de démarrer une opération d'écriture parallèle. Un système de tampon à verrou de colonne 110 est composé d'un verrou de colonne 110 par ligne de bits 20 et d'un verrou de colonne par ligne de Vref 40. Dans un exemple de mode de réalisation, il existe un verrou de colonne 110 pour chaque ligne de bits 20 et un verrou de colonne 110 pour chaque ligne de Vref 40. Un noyau de mémoire 101 ayant un verrou de colonne 110 couplé à chaque ligne de bits fournit une opération d'effacement par mot (un ou plusieurs bit) et une opération d'écriture sélective (par bit ou par mot). Le verrou de colonne 110 assure deux fonctions. Le verrou de colonne stocke des données et amène également Vpp à une ligne de bits 20 correspondante. Les données devant être programmées dans une cellule de mémoire 30 sont chargées dans au moins un verrou de colonne 110. Un groupe de verrous de 2n bits et un verrou de Vref (ou indicateur d'octet) stockent les données devant être programmées sur une rangée ciblée. Lors d'une opération de chargement, le bus d'adresse Y AddYld 171 est décodé par le décodeur Ydl 120. Une valeur de données est chargée dans au moins un mot de verrous de colonnes 110 couplé aux lignes de bits 20. Une valeur logique (signal indicateur) est également stockée dans un verrou de colonne Vref associé. Les mots qui seront utilisés pour programmer les cellules de mémoire 30 sont sélectionnés en utilisant le signal indicateur chargé dans les verrous de colonnes Vref associés 110. Les lignes de mots sont sélectionnées par une adresse X sur une entrée de décodeur X 131, qui est décodée par un décodeur X 130. Lorsque tous les mots de données ont été chargés, des tensions d'effacement sont appliquées sur les mots sélectionnés. Le circuit de verrouillage peut être incorporé dans le bloc du verrou de colonne 110 représenté sur la figure 2. La figure 3 illustre les circuits décrits dans la demande de brevet US n 10/737 676 intitulée "EEPROM Architecture and Programming Protocol" qui peuvent être utilisés dans un mode de réalisation de la présente invention. Le circuit de verrouillage comprend un transistor de passage et une paire d'inverseurs à rétroaction pour permettre une opération de verrou d'état 210. Le verrou de colonne 210 peut être utilisé lors d'une opération d'effacement et/ou d'une opération d'écriture de mémoire. Le circuit de verrouillage de colonne 210 comprend un verrou d'état 212 et un transistor de passage de verrou d'état 220 qui est commandé par un signal de commande de charge appliqué à une grille 230 du transistor de passage de verrou d'état 220. De plus, le circuit de verrouillage de colonne 210 comprend un circuit pour fournir les tensions de référence et de programmation Vpp. La grille de passage de contrôle des données 240 est couplée à la sortie du verrou 211 et contrôlée par une entrée de contrôle des données 241. La grille de passage de contrôle des données 240 est couplée à un circuit de décalage de niveau 270 pour fournir une tension à la matrice mémoire différente de la tension utilisée dans le circuit de verrouillage d'état 210. La grille de passage de contrôle des données 240 est également couplée à une grille de passage Vpp 250 pour appliquer une tension Vpp à une colonne (ligne de bits 20). Lors de la période de chargement, une donnée d'entrée sur une Din d'entrée 201 est entrée dans les verrous de colonnes 110 en utilisant le décodeur Yld 120. Un signal de commande de chargement est appliqué à une grille 230 du transistor de passage du verrou d'état 220 qui est fixé à une valeur de logique 1 afin de verrouiller une valeur d'entrée des données par le biais de la Din 201 dans au moins un verrou d'état 212. La donnée chargée est une valeur de logique 1 pour programmer une cellule de mémoire 30 qui est inactive (OFF) et une valeur de logique 0 pour programmer une cellule de mémoire 30 qui est active (ON). De plus, une valeur de logique 1 est chargée dans un verrou de Vref correspondant à chaque mot devant être programmé. La période de chargement se termine lorsque tous les mots à chaque adresse souhaitée ont été chargés un par un dans chaque verrou qui correspond à une cellule de mémoire 30 ciblée pour une opération de programmation. Le compteur d'adresses 173 est utilisé pour compter ou incrémenter une adresse de noyau de mémoire en tant que partie d'une opération de vérification. AddYint 172 peut commencer à partir de l'emplacement 1 d'adresse et est décodé par les deux décodeurs de chargement et de lecture 120 et 140. Ensuite, après avoir terminé une opération de chargement, les cellules de mémoire 30 sont effacées comme des mots de 2' bits en parallèle. Au stade de l'effacement, des électrons sont injectés dans la structure à grille flottante en maintenant les grilles du transistor à grille flottante 32 (sur la figure 1) à une tension élevée Vpp. Une tension Vpp est fournie par au moins un verrou de colonne Vref à travers la grille de passage de sélection de mot 11. Pour implémenter une opération d'effacement, le décodeur X 130 comme représenté sur la figure 2 applique Vpp sur une ligne de mots correspondant à une adresse AddX (correspondant à la ligne de mots 11 sur la figure 1). Le transistor de passage de contrôle des données 240 est basculé sur ON, le verrou de colonne Vref 210 pilote ou met en marche le circuit de décalage de niveau (tension) 270 et applique Vpp par le biais du transistor de passage de lignes de bits 250 à la (aux) ligne(s) Vref de commande 40. La tension d'effacement nécessaire Vpp est appliquée sous forme d'une impulsion ayant une durée appliquée. La durée appliquée est appelée retard du temps d'effacement Terase. L'application de l'impulsion de tension Vpp fait accélérer les électrons jusqu'aux grilles flottantes sélectionnées 320. L'augmentation des électrons qui sont maintenus dans la grille flottante augmente le seuil de la tension de la cellule Vth. Les mots sélectionnés sont ensuite effacés et chaque bit sélectionné est établi à une valeur logique de 1. Une fois l'opération d'effacement terminée, une opération de vérification d'effacement est exécutée 300 comme illustré par l'exemple d'algorithme sur la figure 6 (décrit en outre ci-dessous). Une fois une opération d'effacement terminée, une opération d'écriture peut être exécutée. Lors d'une opération d'écriture, le décodeur X 130 (par le biais du dispositif de sélection de mot 11) applique Vpp sur la(les) ligne(s) de mots 10 sélectionnée(s) par AddX sur l'entrée du décodeur X 131. Comme représenté sur la figure 3, le transistor de passage Vpp 250, contrôlé par le verrou de colonne 210 et appliquant un signal de commande 241 à la grille du transistor de passage 240, applique Vpp aux lignes de bits 20 (sur la figure 1) qui ont été sélectionnées. Dans chaque verrou de colonne 210, le contenu de chaque verrou d'état est connecté à l'entrée du circuit de décalage de niveau 270 lorsque le transistor de passage de contrôle des données 240 se met en marche en commandant l'entrée de contrôle des données 201. Si la valeur d'état de la sortie de verrouillage 211 est une valeur logique 0, alors la grille de la grille de passage Vpp 250 conserve une valeur de logique 0 et la ligne de bits 260 reste flottante. Dans le cas où la sortie du verrou d'état 211 est une valeur logique 0, une cellule de mémoire correspondante n'est pas écrite et reste à une valeur de logique 1 une fois qu'une opération d'effacement a été achevée. Si la sortie du verrou d'état 211 est une valeur logique 1, alors la grille de passage Vpp 250 est commutée sur Vpp par le circuit de décalage de niveau 270. Dans le cas où la sortie du verrou d'état 211 est une valeur logique 1, la grille de passage Vpp 250 est conductrice, et la tension Vpp est transmise à la (aux) ligne(s) de bits 260. La cellule de mémoire sélectionnée est écrite et une valeur logique de la cellule de mémoire passe à une valeur de logique O. Lorsque l'opération d'écriture est terminée, l'opération d'écriture est ensuite automatiquement vérifiée. La cellule de mémoire écrite 30 est lue et sa valeur est comparée à une valeur de données attendue stockée dans un verrou correspondant. Une opération de vérification est effectuée une fois qu'une opération d'effacement ou qu'une opération d'écriture a été effectuée. Une opération de vérification lit au moins une cellule de mémoire 30 et compare les contenus de la cellule de mémoire 30 à une valeur attendue. Pour une opération d'effacement, la valeur attendue de chaque cellule de mémoire est une valeur de logique 1. Une valeur logique de mot effacé devrait être égale à un groupe de 2n bits, chaque bit ayant une valeur de logique 1. Par exemple, un mot de huit bits devrait avoir une valeur hexadécimale de FF après une opération d'effacement. Les mots effacés, par exemple, seront comparés à la valeur FF. Pour une opération d'écriture, une valeur attendue est la valeur logique qui est stockée dans le verrou de colonne 110, 210 associé à chaque cellule de mémoire 30. A la fois la valeur logique qui est stockée dans au moins un verrou de colonne 110, 210 et la valeur qui est stockée dans au moins une cellule de mémoire 30 sont lues. Lors de la vérification d'une opération d'écriture, la valeur logique de la cellule de mémoire 30 est comparée à la valeur logique qui est stockée dans le verrou de colonne 110, 210 correspondant. Dans une opération de lecture de cellule de mémoire 30, une tension de référence Vref est appliquée à la grille du transistor à grille flottante 32. La tension de référence peut être une tension de référence normale ou une tension de référence de marge. Le courant de drain du transistor à grille flottante 32, mesuré par les circuits de détection 105 (sur la figure 2) indique si des électrons sont stockés dans la grille flottante du transistor à grille flottante 32. Une cellule programmée retire moins de courant de drain qu'une cellule de référence indiquant une valeur de logique 0 stockée. Dans un exemple de mode de réalisation d'une opération de lecture, une tension de référence Vref est appliquée par le biais du dispositif de sélection de mot 11 à la grille 36 de chaque transistor à grille flottante 32 sélectionné. De plus, la tension Vdd est appliquée à la grille du transistor de sélection 31. Un transistor à grille flottante 32 est sélectionné par une ligne de mots activée et par une ligne de bits 20 activée. Les lignes de bits 20 sont connectées à des circuits de détection 105 par le circuit de sélection de lignes de bits 104. Dans une variante de mode de réalisation pour des applications à basse tension, le double de la valeur Vdd est appliquée à la grille du transistor de sélection 31. Une tension inférieure à 1 volt est appliquée au drain du transistor de sélection de mot 11. La figure 4 illustre un exemple de mode de réalisation d'un circuit de verrouillage de colonne 210 contenant un circuit supplémentaire qui peut être utilisé lors d'une opération de lecture de verrouillage de colonne. Dans une opération de lecture, le décodeur d'adresse X 130 et le décodeur d'adresse Y 120 et 140 spécifient les emplacements d'une cellule de mémoire 30 et d'un verrou de colonne 210 devant être lus. L'inverseur 221 est utilisé pour isoler la ligne de sortie 211 de la ligne de données Din 201. Cela empêche la connexion directe de la sortie du verrou d'état 212 à la charge capacitive de la ligne de données Din 201. Sans inverseur 221, la commutation involontaire du verrou d'état 212 peut se produire à partir d'un transfert de charge capacitive. Pour la même raison, le contenu du verrou d'état 212 ne peut pas être lu directement à travers le transistor de passage de verrou d'état 220. Pour effectuer une opération de lecture du verrou d'état 212, un transistor de passage de lecture 222 est activé et l'état du verrou d'état 212 est lu sur la ligne de données Din 201. Un processus de vérification est exécuté lorsqu'un mot de mémoire est lu et comparé à une valeur logique attendue. Par exemple, lorsqu'on vérifie si une cellule de mémoire 30 a été convenablement effacée, la valeur de mot attendue est, par exemple, FF. Dans un exemple de mode de réalisation, la comparaison est effectuée par le biais d'un comparateur dédié 103. Le processus de vérification est exécuté automatiquement une fois qu'un mot ou une pluralité de mots dans la matrice mémoire ont été effacés ou écrits. Le comparateur 103 (représenté sur la figure 2) compare les bits d'un mot effacé à une valeur de logique 1 et compare un mot écrit au contenu des verrous de colonne. Pour une vérification d'opération d'écriture, les valeurs logiques de données programmées ont été chargées dans les verrous de colonne 210 et sont lisibles. La figure 5 illustre un exemple de mode de réalisation d'un verrou de colonne Vref sélectif 210 qui contient un verrou de marqueur séparé 224. Le verrou de marqueur 224 est utilisé comme un verrou de marqueur Vref ou de mot. Si le marqueur Vref a été défini à une valeur de logique 1, le marqueur indique que le mot de mémoire correspondant a été effacé. Le verrou de marqueur 224 peut être chargé en utilisant la ligne de marqueur de charge 226, qui commande le transistor de passage de marqueur 223. La ligne de marqueur de charge 226 peut être utilisée en conjugaison avec la charge de verrou d'état 230 pour charger le même état lorsque la grille de passage du verrou d'état 220 est active et que Din 201 est stable. En variante, la ligne de marqueur de charge 226 peut être utilisée séparément pour charger une valeur logique de marqueur distincte dans le verrou de marqueur 224. Une ligne de marqueurs de lecture distincte 225 commandant le transistor de passage de marqueur 222 lit la valeur stockée dans le verrou de marqueur 224 lors d'une opération de lecture. Lors d'une opération de vérification effectuée pendant les deux opérations d'effacement et d'écriture, une cellule est lue en utilisant une opération de mode de marge dédié et comparée à une valeur de logique 1 attendue pour les cellules effacées ou en variante, les données stockées dans les verrous de colonne 110 pour les cellules écrites. Le mode de marge de lecture dédié s'assure que les cellules de mémoire 30 sont programmées avec suffisamment de marge pour maintenir un valeur logique établie dans le temps indépendamment du transistor à grille flottante 32 qui est susceptible de variations de charge naturelles. Pour vérifier la qualité d'une opération de programmation, Vref est augmentée lors de la lecture des cellules inactives (OFF) et diminuée lors de la lecture des cellules actives (ON). Lors de l'opération de lecture du mode de marge, le générateur de référence 154, comme représenté sur la figure 2, génère une tension de référence interne qui est supérieure à une tension utilisée dans une opération de lecture normale. Par exemple, une marge d'environ 0,5 volts garantit qu'une cellule de mémoire 30 reste inactive (OFF) lors de la lecture d'une cellule de mémoire particulière 30 avec Vref+O,5 volts sur sa grille et reste active (ON) lors de la lecture d'une cellule de mémoire particulière 30 avec Vref-O, 5 volts sur sa grille. Une opération de vérification peut être effectuée en utilisant plusieurs procédés. Une opération de lecture de mode de marge vérifie que le seuil de tension Vth de chaque cellule est suffisamment élevé pour surmonter toutes les variations de grille flottante qui sont liées à des conditions environnementales (par exemple, température) ou à un stockage involontaire d'électrons (par exemple, charges d'oxyde piégées). La figure 6 représente un exemple d'algorithme d'effacement utilisant une opération de vérification automatique. Après avoir initialisé un compteur d'impulsions 310, une première impulsion d'effacement est appliquée 320 aux cellules cibles 30. Une opération de vérification 330 initialise un compteur d'adresses. Si les cellules de mémoire 30 ont été convenablement effacées, un compteur d'adresses 173 est incrémenté et un autre groupe de cellules de mémoire est vérifié. Si les cellules de mémoire n'ont pas été convenablement effacées, une autre impulsion est appliquée 332, le compteur d'impulsions est incrémenté 332 et les cellules de mémoire sont à nouveau vérifiées 330. Si une valeur de compteur d'impulsions prédéterminée est atteinte, l'opération de vérification 330 se termine, l'opération d'effacement se termine 331 et un indicateur d'échec de programmation 152 apparaît 333. Si toutes les cellules de mémoire 30 passent avec succès toutes les opérations d'effacement et de vérification, une dernière impulsion d'effacement peut éventuellement être appliquée 350. Dans un mode de réalisation, la vitesse est optimisée dans l'opération de vérification. Si le résultat de comparaison confirme que la tension de seuil Vth pour une cellule ou un mot vérifié est correcte, Addyint est incrémenté et l'opération d'effacement et de vérification suivante est effectuée sur le mot suivant 330. Si la tension de seuil Vth pour la cellule ou le mot vérifié n'est pas correcte, au moins une cellule n'est pas bien effacée. Lorsque la procédure de vérification échoue, l'impulsion d'effacement est ensuite appliquée 332 à nouveau à tous les mots devant être programmés - même à ceux qui ont passé avec succès une opération de vérification antérieure. Des opérations d'effacement et de vérification supplémentaires 330 sont effectuées jusqu'à ce que toutes les cellules passent avec succès la vérification ou jusqu'à ce qu'un nombre maximal d'impulsions d'effacement ait été atteint. Lorsque les cellules qui ont échoué précédemment passent ensuite avec succès la vérification, un temps d'effacement est optimisé. Si le maximum de temps d'effacement est atteint par le temporisateur de vérification 160 (sur la figure 2) et si les cellules n'ont pas passé avec succès la vérification 330, l'opération de vérification utilisant un mode de marge s'arrête 331 et le séquenceur 150 (représenté sur la figure 1) établit 333 un indicateur d'échec de programmation 152. Si toutes les cellules passent avec succès l'opération de vérification (en utilisant un mode de marge) 330, ce qui signifie que le temps d'effacement souhaité a été atteint, une phase d'écriture commence alors 410. L'option consistant à appliquer une dernière impulsion d'effacement 350 utilisant un temps d'effacement optimisé peut être exécutée. Lorsque le temps d'effacement a été optimisé, la condition de tension élevée pour un effacement de cellule de mémoire 30 a été appliquée à tous les mots devant être programmés. Bien que cette procédure de vérification optimise rapidement le temps d'effacement, les mots qui ont été précédemment effacés seront à nouveau effacés chaque fois que le programme incrémente le compteur de temps d'effacement. Le résultat peut inutilement surcharger les cellules précédemment effacées. Si l'on se réfère à nouveau à la figure 6, une variante de mode de réalisation d'une opération de vérification peut être implémentée qui évite une charge inutile sur des mots correctement effacés. L'utilisation du verrou de colonne Vref modifié 210 (représenté sur la figure 5), le verrou de marqueur 224 (sur la figure 5) stocke un marqueur indépendant indiquant que le mot a été effacé au moins une fois. Lorsqu'une adresse de mot est chargée, le marqueur est verrouillé comme une indication stipulant que le mot n'a pas passé la vérification avec succès. Le verrou de colonne Vref passera Vpp avec succès lors de la première impulsion d'effacement. Lors de l'application de la première impulsion d'effacement 320, chaque mot devant être programmé est effacé. Ensuite, les mots sont lus en mode de marge lors d'une opération de vérification 430. Une fois que la première impulsion d'effacement a été appliquée 320, la tension d'effacement Vpp est appliquée de façon sélective aux seuls mots qui ne sont pas bien effacés (mots qui échouent lors de la vérification). Si un mot ne passe pas avec succès une opération de vérification, le verrou de marqueur 212 est établi pour indiquer une panne de vérification. L'opération de vérification se poursuit jusqu'à ce que tous les mots en mémoire aient été vérifiés. Lors d'une opération de vérification, tout mot correctement effacé ne sera pas à nouveau effacé lors d'une application d'une impulsion d'effacement ultérieure 350. Une impulsion d'effacement350 sera appliquée à tous les mots dans le noyau de la mémoire qui n'ont pas passé la vérification avec succès si au moins une donnée de verrou de colonne Vref apparaît, ce qui signifie qu'au moins un mot n'est pas correctement effacé. Lorsqu'une nouvelle impulsion d'effacement est appliquée 350, Vpp ne sera pas appliquée aux mots correctement effacés parce que les verrous de colonne Vref correspondants ont été établis lors de l'opération de vérification. L'état du verrou de marqueur 224 est maintenu et sera utilisé lors de la procédure de vérification d'une phase d'écriture ultérieure. Comme illustré sur la figure 7, lors d'une phase d'écriture 400, l'application des tensions d'écriture 420 aux cellules sélectionnées et une vérification d'écriture 430 seront effectuées après chaque impulsion d'écriture. L'opération d'une opération de vérification d'écriture est similaire à la vérification d'effacement décrite ci-dessus. Le compteur d'adresses 173 (sur la figure 2) qui fournit une adresse AddYld 171 et AddYrd 176 est initialisé 410. Tout comme dans une opération de vérification d'effacement, le verrou de colonne Vref 210 ou 224 est lu. Si le verrou de colonne Vref 210 n'a pas été établi, indiquant que le mot correspondant n'est pas programmé, l'adresse interne Y est incrémentée. Si le verrou de colonne Vref 210 a été établi, le contenu du mot du verrou de colonne correspondant aux données devant être écrites est lu. Le mot sélectionné dans le noyau de mémoire 101 qui a été écrit est lu en mode de marge 430 et comparé à l'état du verrou de colonne 212. Pour vérifier que les cellules actives (ON) sont programmées avec une marge suffisante, les grilles des cellules de mémoire 32 sont mis à la masse par le biais de chaque grille de passage 31 à chaque ligne de bits. Si le verrou et les cellules de mémoire ne correspondent pas, la comparaison s'arrête 431, indiquant qu'au moins une cellule n'a pas été correctement écrite. Si une cellule de mémoire 30 ne passe pas avec succès l'opération de vérification et qu'un nombre maximal d'itérations de vérification a été atteint, l'opération de vérification s'arrête 431 et le séquenceur 150 (représenté sur la figure 1) définit 433 un indicateur d'échec de programmation 152. Si les contenus de la comparaison du verrou et de la cellule de mémoire correspondent, le compteur d'adresse 173 (sur la figure 2) est incrémenté 432. Après chaque opération de vérification, les verrous de colonne 210 correspondant aux mots qui sont correctement écrits peuvent être réinitialisés afin d'éviter un écrasement inutile du mot. Au fur et à mesure que chaque cellule de mémoire passe avec succès l'opération de vérification, le compteur d'adresse est itérativement incrémenté 432 et une autre impulsion d'écriture est appliquée 432, suivie par une procédure de vérification 430. Lorsque toutes les cellules de mémoire souhaitées ont passé avec succès la procédure de vérification, le processus d'écriture se termine 450. L'invention proposée est la première architecture à fournir une opération de programmation de cellule de mémoire EEPROM auto-adaptative, intelligente et automatique qui effectue une opération d'écriture parallèle. En utilisant des verrous de colonnes spécifiques, des temporisateurs dédiés et une procédure internalisée de vérification contrôlée, il est possible de réduire le nombre d'impulsions et le temps nécessaire pour achever les opérations d'effacement et d'écriture. 2874449 24 En utilisant ce procédé, une opération de vérification s'adapte à des conditions de programmation telles que les variations d'alimentation électrique et de température, des variations de programmation de cellules de mémoires individuelles dues à la répartition des cellules sur la matrice et la détérioration des cellules de mémoire au bout de cycles d'effacement et d'écriture répétés. De plus, la consommation d'énergie de la programmation peut être optimisée, tout en assurant des opérations de programmation fiables sur une variété de conditions de programmation. Enfin, si un problème de programmation de cellule de mémoire se produit, il est détecté et un indicateur de panne de programmation de mémoire dédié apparaît. Bien entendu, la description ci-dessus est sensée être illustrative et non limitative. L'homme du métier comprendra que l'invention peut faire l'objet d'une modification ou altération restant dans l'esprit et la portée des revendications annexées. Le(s) mode(s) de réalisation ainsi décrit(s) peut (peuvent) comprendre une fonction, structure ou caractéristique particulière, mais chaque mode de réalisation ne comprend pas nécessairement la fonction, structure ou caractéristique décrite. Une utilisation répétée de la phrase "dans un mode de réalisation" ne se réfère pas nécessairement au même mode de réalisation, même si cela peut être le cas. De nombreux autres modes de réalisation seront évidents pour l'homme du métier après lecture et compréhension de la description cidessus. Par exemple, la présente invention s'appliquera à des types de mémoire programmable, autres que la mémoire EEPROM citée en exemple. La description est ainsi considérée comme étant illustrative et non limitative. La portée de l'invention doit, par conséquent, être limitée en référence aux revendications annexées, conjointement avec la portée globale d'équivalents auxquels se rapportent lesdites revendications. Bien entendu, l'invention n'est pas limitée aux exemples de réalisation ci-dessus décrits et représentés, à partir desquels on pourra prévoir d'autres modes et d'autres formes de réalisation, sans pour autant sortir du cadre de l'invention. REVENDICATIONS 1. Procédé pour améliorer la rétention de données dans un tableau de cellules de mémoire programmable, comprenant: la définition d'une tension de référence de marge qui est différente d'une tension de lecture de cellule de mémoire normale; la lecture d'un contenu de valeur logique d'au moins une cellule de mémoire (30) ; l'utilisation de ladite tension de référence de marge en tant que référence pour une comparaison avec 10 ledit contenu de valeur logique; la comparaison automatique dudit contenu de valeur logique de l'au moins une cellule de mémoire (30) à une valeur logique attendue; et l'ajustement automatique d'un paramètre de programmation si ledit contenu de ladite valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 2. Procédé selon la revendication 1, dans lequel ladite au moins une cellule de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable conserve une valeur logique définie indépendamment d'une variation de charge naturelle dans une grille flottante. 3. Procédé selon la revendication 1, dans lequel ladite tension de référence de marge diffère d'environ + 0,5 volts de ladite tension de lecture de cellule de mémoire normale. 4. Procédé selon la revendication 1, dans lequel ladite tension de référence de marge diffère d'environ - 0,5 volts de ladite tension de lecture de cellule de mémoire normale. 5. Procédé selon la revendication 1, dans lequel ladite tension de référence de marge est supérieure à ladite tension de lecture de cellule de mémoire normale lors de la lecture de cellules de mémoire (30) devant être dans l'état inactif "off". 6. Procédé selon la revendication 1, dans lequel ladite tension de référence de marge est inférieure à ladite tension de lecture de cellule de mémoire normale lors de la lecture de cellules de mémoire (30) devant être dans l'état actif "on". 7. Procédé selon la revendication 1, comprenant en outre l'application d'une opération d'impulsion de programmation ajustée à au moins une cellule de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable. 8. Procédé selon la revendication 1, dans lequel ledit 25 procédé est effectué après réalisation d'une opération d'effacement. 9. Procédé selon la revendication 8, dans lequel une impulsion de programmation ajustée est appliquée à une pluralité de cellules de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 10. Procédé selon la revendication 8, dans lequel une opération d'impulsion de programmation ajustée est uniquement appliquée à une quelconque cellule de mémoire (30) ayant un contenu de valeur logique différent si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 11. Procédé selon la revendication 8, dans lequel un marqueur d'indication associée à ladite cellule de mémoire (30) ayant une valeur logique différente est verrouillée si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 12. Procédé selon la revendication 1, dans lequel ledit procédé est effectué après réalisation d'une opération 20 d'écriture. 13. Procédé selon la revendication 12, dans lequel une impulsion de programmation ajustée est appliquée à une pluralité de cellules de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 14. Procédé selon la revendication 12, dans lequel une impulsion de programmation ajustée est uniquement appliquée à une quelconque cellule de mémoire (30) ayant un contenu de valeur logique différent si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 15. Procédé selon la revendication 12, dans lequel un marqueur d'indication associé à ladite cellule de mémoire (30) ayant une valeur logique différente est verrouillée si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 16. Procédé selon la revendication 1, dans lequel l'ajustement dudit paramètre d'impulsion de programmation est défini comme l'augmentation d'une durée d'impulsion. 17. Support lisible par une machine ayant stocké à l'intérieur de celuici des instructions devant être utilisées dans une machine pour améliorer la rétention de données dans un tableau de cellules de mémoire programmable, les instructions comprenant: des instructions pour définir une tension de 20 référence de marge qui est différente d'une tension de lecture de cellule de mémoire normale; des instructions pour lire un contenu de valeur logique d'au moins une cellule de mémoire (30) ; des instructions pour utiliser ladite tension de référence de marge en tant que référence pour une comparaison avec ledit contenu de valeur logique; des instructions pour comparer automatiquement ledit contenu de valeur logique de l'au moins une cellule de mémoire (30) à une valeur logique attendue; et des instructions pour ajuster automatiquement un paramètre de programmation si ledit contenu de ladite valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 18. Support lisible par une machine selon la revendication 17, dans lequel lesdites instructions sont effectuées après réalisation d'une opération d'effacement. 19. Support lisible par une machine selon la revendication 18, dans lequel au moins une instruction est exécutée pour ajuster une opération de programmation appliquée à une pluralité de cellules de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 20. Support lisible par une machine selon la revendication 18, dans lequel au moins une instruction est exécutée pour ajuster une opération de programmation uniquement appliquée à une cellule de mémoire (30) ayant un contenu de valeur logique différent si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 21. Support lisible par une machine selon la revendication 18, dans lequel au moins une instruction est exécutée pour verrouiller un marqueur d'indication associé à ladite cellule de mémoire (30) ayant une valeur logique différente si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 22. Support lisible par une machine selon la revendication 17, dans lequel lesdites instructions sont effectuées après réalisation d'une opération d'écriture. 23. Support lisible par une machine selon la revendication 22, dans lequel au moins une instruction est exécutée pour ajuster une opération de programmation appliquée à une pluralité de cellules de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 24. Support lisible par une machine selon la revendication 22, dans lequel au moins une instruction est exécutée pour ajuster une opération de programmation appliquée uniquement à une cellule de mémoire (30) ayant un contenu de valeur logique différent si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 25. Support lisible par une machine selon la revendication 22, dans lequel au moins une instruction est exécutée pour verrouiller un marqueur d'indication associé à ladite cellule de mémoire (30) ayant une valeur logique différente si ledit contenu de valeur logique de cellule de mémoire est différent de ladite valeur logique attendue. 26. Support lisible par une machine selon la revendication 17, dans lequel lesdites instructions comprennent en outre au moins une instruction pour appliquer une impulsion de programmation ajustée à au moins une cellule de mémoire (30) à l'intérieur dudit tableau de cellules de mémoire programmable. 27. Circuit de mémoire programmable comprenant: un tableau de cellules de mémoire, lesdites cellules de mémoire (30) pouvant stocker au moins une valeur logique; un circuit d'adresse couplé audit tableau de cellules de mémoire, ledit circuit d'adresse pouvant sélectionner au moins une cellule de mémoire; au moins un générateur de tension de référence (154) couplé audit tableau de cellules de mémoire, ledit générateur (154) pouvant fournir une plage de tensions; une pluralité de circuits de verrouillage (210) couplés audit tableau de cellules de mémoire, ledit circuit de verrouillage (210) pouvant stocker au moins une valeur logique attendue et au moins un verrou d'état (212) ; un circuit de détection (105) couplé à ladite au moins une cellule de mémoire (30) ; au moins un comparateur (103) couplé audit circuit de détection; et un séquenceur (150) définissant une valeur d'adresse utilisée par ledit circuit d'adresse, le séquenceur (150) étant configuré pour définir une tension de référence de marge. 28. Circuit de mémoire programmable selon la revendication 27, dans laquelle ledit séquenceur (150) est un automate fini configuré pour surveiller les états d'entrée et générer des états de sortie en réponse auxdits états d'entrée. 29. Circuit de mémoire programmable selon la revendication 27, dans laquelle ledit séquenceur (150) est un processeur configuré pour exécuter une pluralité d'instructions.