FR 2740601 A1 19970430 FR 9512662 A 19951026 PROCÉDÉ DE PROGRAMMATION D'UNE MÉMOIRE ADRESSABLE PAR SON CONTENU A CELLULES MÉMOIRES A GRILLE FLOTTANTE L'invention concerne un procédé de programmation d'une mémoire adressable par son contenu, appelée mémoire CAM (Content Addressable Memory), utilisant des cellules mémoires à grille flottante. De telles mémoires CAM sont notamment (mais pas exclusivement) utilisées dans le circuit de redondance associé à une mémoire principale, dans un circuit intégré. Chacune peut contenir l'adresse d'un élément défectueux de cette mémoire. Ceci permet le cas échéant à un circuit de sélection de redondance, de sélectionner un élément de redondance à la place de l'élément défectueux adressé. L'élément défectueux, et par suite l'élément de redondance, peut être une colonne, une rangée de la mémoire, un groupe de colonnes ou un groupe de rangées de la mémoire. La figure 1 représente ainsi un synoptique d'un circuit mémoire utilisant des mémoires CAM pour mémoriser des adresses défectueuses. Une mémoire principale MP est adressée via un bus d'adresse ADR et un décodeur d'adresse DEC. Des mémoires CAM, dans l'exemple notées CAM1 à CAMp, sont ainsi prévues. Dans l'exemple, l'adresse d'un élément mémoire défectueux est codée sur m bits, et chaque mémoire CAM contient m bits plus 1 bit de validation. Ce bit de validation indique si la mémoire CAM contient ou non une adresse défectueuse. Dans une mémoire CAM du type à cellules mémoires à grille flottante qui nous intéresse, chaque bit de la mémoire CAM est mémorisé dans un bistable à deux cellules mémoires à grille flottante. Dans une application aux circuits de redondance comme détaillée ci-dessus, chaque mémoire CAM utilisée comprend donc m+l bistables de ce type pour mémoriser une adresse défectueuse sur m bits et pour indiquer par l'état d'un bit de validation, si la mémoire CAM en question est utilisée (c'est à dire si elle mémorise effectivement une adresse défectueuse) ou non. Les m bits d'une mémoire CAMi pour mémoriser une adresse sont notés Di(0) à Di(m) et le bit de validation est noté vali, avec is [1, p]. Les bits des différentes mémoires CAM sont appliqués à un circuit de comparaison respectif, COMp1 à COMPO. Chaque circuit de comparaison COMPi compare chacun des bits Di(0) à D;(m) de la mémoire CAMi à des bits d'adresse présents sur le bus d'adresse ADR, dans l'exemple aO à am. Cette comparaison est par exemple obtenue pour chaque bit par une simple porte logique de type NON OU qui, si les deux bits comparés sont identiques, égaux à 0 ou 1, donne un en sortie et qui donne zéro en sortie si les deux bits comparés sont complémentaires. Le circuit de comparaison comprendra alors à la suite une porte NAND pour délivrer zéro en sortie, si la sortie de chacune des portes NON OU est à un et si le bit de validation de la mémoire CAMi correspondante est à un. sinon cette porte NAND délivre un zéro en sortie. Les p sorties R1 à Rp des p circuits de comparaison COMPi associés aux p mémoires CAMi sont appliquées à un circuit de sélection des éléments de redondance SEL~R. Ce circuit de sélection envoie un signal d'inhibition inh vers le décodeur de la mémoire principale MP, si un des signaux R1 à Rp est à zéro, pour sélectionner à la place d'un élément de la mémoire principale, un élément de la mémoire de redondance MR. En sortie de fabrication, les deux cellules de chacun des bistables des mémoires CAM sont vierges. Lorsque l'on met le circuit intégré sous tension, les mémoires CAM sont tout de suite alimentées et les cellules mémoires des bistables sont polarisées. Comme les deux cellules de chacun des bistables sont vierges, les bistables sont alors dans un mode de consommation de courant. Or les normes de consommation en mode de repos d'un circuit intégré sont sévères et n'autorisent qu'un très faible courant de consommation. Il faut donc empêcher une telle consommation des bistables dans le circuit intégré. Il suffit de programmer une des deux cellules pour que le bistable soit dans un mode non consommateur de courant. Selon la cellule que l'on programme, la sortie du bistable change ou ne change pas d'état. En effet, à l'origine, les deux cellules sont vierges. Il s'ensuit un état binaire zéro en sortie de chaque bistable. Selon que l'on programme l'une ou l'autre des cellules d'un bistable, on obtient en sortie, un état binaire zéro ou un état binaire un. Donc selon la cellule que l'on programme dans le bistable, l'état binaire lu en sortie change ou ne change pas par rapport à l'état d'origine dans lequel les deux cellules étaient vierges. En pratique, on programme donc tous les bistables des mémoires CAM utilisées dans un circuit intégré, que ces mémoires soient réellement utilisées ou non. Or il est constant que lorsqu'il s'agit de cellules mémoires à grille flottante dans quelque application que ce soit, il est nécessaire de tester leur bonne programmation, pour le cas échéant réitérer l'application des signaux de programmation jusqu'à obtenir un test de programmation correct ou pour déclarer en défaut la cellule que l'on n'arrive pas à programmer. Ceci s'avère d'autant plus impérieux que l'on a vu qu'un bistable non programmé ou mal programmé peut induire une consommation de courant mal venue. Dans des applications de redondance comme détaillées plus haut en relation avec la figure 1, on a ainsi l'habitude de tester les signaux Ri appliqués au circuit de sélection de redondance. Or on ne teste ainsi que les mémoires CAM effectivement utilisées. On pourrait imaginer de tester plus en amont, les sorties de la mémoire CAM. Outre que la circuiterie de test deviendrait très encombrante (p.[m+l] fils à tester), la sortie d'un bistable ne change que si on programme une cellule déterminée de ce bistable. Donc si c'est l'autre cellule qui est programmée, la sortie ne change pas. C'est à dire qu'on ne peut tester que la programmation de la cellule qui fait changer d'état la sortie du bistable. Tout ceci se révèle très insuffisant en pratique. En effet, la mauvaise programmation d'une cellule d'une mémoire CAM, peut provoquer des fuites de courant qui peuvent décider un testeur à mettre un circuit au rebut, par exemple si la consommation de courant s'avère supérieure aux normes imposées. Le circuit intégré pourra encore être mis au rebut parce que l'activation de la redondance ne va pas fonctionner correctement (adresse défectueuse mal programmée). Un objet de l'invention est un procédé de programmation amélioré d'une mémoire CAM. Un objet de l'invention est un procédé de programmation d'une mémoire CAM qui permette un test fiable de la programmation. Telle qu'elle est revendiquée, l'invention concerne un procédé de programmation de cellules mémoires à grille flottante d'une mémoire accessible par son contenu, dans un circuit intégré. Le procédé de programmation comprend l'application par un circuit de commutation d'une impulsion de haute tension de programmation par un chemin de programmation, sur le drain de cellules sélectionnées. Selon l'invention, dans une phase de vérification, on maintient la sélection de ces cellules pour effectuer un accès direct à ces cellules en leur appliquant une tension de lecture par ledit chemin de programmation et effectuer une mesure de courant ou de tension sur ledit chemin. D'autres avantages et caractéristiques sont détaillés dans la description suivante à titre indicatif et nullement limitatif de l'invention et en référence aux dessins annexés dans lesquels - la figure 1 déjà décrite représente un synoptique de circuit mémoire utilisant des mémoires CAM, - la figure 2 représente un schéma général des moyens de programmation des mémoires CAM d'un circuit intégré, - la figure 3 représente un schéma détaillé d'un circuit de programmation d'une mémoire CAM selon un mode de réalisation de l'invention et - la figure 4 représente un schéma détaillé d'un circuit de programmation d'une mémoire CAM selon un autre mode de réalisation de l'invention. La figure 2 montre d'une manière générale le principe de programmation de mémoires CAM0,..., CAMp dans un circuit intégré. A chaque mémoire CAMi correspond un transistor de commutation Tci, qui permet de sélectionner la mémoire à programmer et lui appliquer une impulsion de haute tension de programmation délivrée par un circuit 1 de commutation de haute tension. Le circuit 1 de commutation de haute tension est commandé par un signal de commande noté PROG. Le transistor de commutation Tci associé à la mémoire CAMi est commandé par un signal de commande PCAMi. Enfin, le mot à programmer dans une mémoire sélectionnée est appliqué via un registre REG à partir du bus d'adresse. Les signaux PROG, PCAMi, et le mot à programmer peuvent être gérés par un testeur du circuit intégré. Ils peuvent aussi être gérés en tout ou partie en interne, par une unité de commande appropriée du circuit intégré. Sur la figure 3, une mémoire CAM1 et les moyens de programmation de cette mémoire sont détaillés. La mémoire CAM0 comprend dans cet exemple k+l bistables de mémorisation. Deux de ces bistables sont représentés, Bg et Bk. Un bistable à cellules mémoire à grille flottante comprend classiquement deux cellules mémoires et six transistors pour programmer et lire le bistable. Ainsi le bistable Bg comprend une première cellule C1 connectée entre la masse et un noeud A et une deuxième cellule C2 connectée entre la masse et un noeud B. Les grilles des deux cellules sont connectées ensemble. Une tension de grille VG leur est appliquée par un circuit 3 de génération de tension, dont le niveau dépend de l'opération effectuée : lecture, programmation, voire effacement. A la mise sous tension, c'est le niveau de lecture qui est appliqué sur la grille des cellules mémoires, par exemple de l'ordre du niveau de la tension d'alimentation logique VDD. Entre la tension d'alimentation logique du circuit VDD et le noeud A, sont connectés en série un premier transistor T1 et un deuxième transistor T2. Dans l'exemple, T1 est un transistor MOS de type de conductivité P dont la source est connectée à la tension VDD et le transistor T2 est un transistor MOS de type de conductivité N dont la source est connectée au noeud A. De manière similaire, entre la tension d'alimentation logique du circuit VDD et le noeud B, sont connectés en série un troisième transistor T3 et un quatrième transistor T4. Dans l'exemple, le transistor T3 est un transistor MOS de type de conductivité P dont la source est connectée à la tension VDD. Le transistor T4 est un transistor MOS de type de conductivité N dont la source est connectée au noeud B. Les deuxième et quatrième transistors T2 et T4 ont leurs grilles connectées ensemble. Une tension VB leur est appliquée par le circuit 3 de génération de tension. La grille du transistor T1 est connectée au drain du transistor T3. La grille du transistor T3 est connectée au drain du transistor T1. On utilise l'un ou l'autre drain des transistors T1 et T3 comme sortie OUT0 du bistable. Dans l'exemple, on choisit le drain du transistor T3. Ainsi, si la cellule C1 n'est pas programmée, elle est passante et elle tire le drain du transistor T1 vers zéro volt. On retrouve donc zéro volts sur la grille du transistor T3 qui porte donc son drain vers la tension d'alimentation VDD. La sortie OUTo du bistable B,, qui à l'origine avait deux cellules vierges, change donc d'état et passe de zéro à un. Si c'est l'autre cellule C2 qui n'est pas programmée, la sortie du bistable ne change pas d'état et reste à zéro. Ceci est bien connu. (On notera que la sortie notée OUTo correspond à la sortie notée D1(0) dans la figure 1). Pour sélectionner et programmer l'une ou l'autre cellules, un cinquième et un sixième transistors sont prévus dans chaque bistable. Ainsi, dans le bistable Bg un cinquième transistor T5 est prévu en série entre un transistor Tc1 de commutation associé à la mémoire CAM1 et le drain de la cellule C1. Il est commandé sur sa grille par un signal de haute tension d'adresse aO correspondant dérivé du bus d'adresse. Le sixième transistor T6 est prévu en série entre le transistor Tc1 de commutation associé à la mémoire CAM1 et le drain de la cellule C2. Il est commandé sur sa grille par le signal de haute tension d'adresse inversé /aO correspondant dérivé du bus d'adresse. On a vu que la haute tension VPC nécessaire à la programmation de la mémoire CAM1 est appliquée par le transistor de commutation noté Tc1. Ce transistor commute l'impulsion de haute tension de programmation VPC fournie par le commutateur de haute tension 1. Cette impulsion de tension est elle-même commutée par l'un des deux transistors T5 ou T6 sur le drain de la cellule associée C1 ou C2, selon l'état respectif des signaux de haute tension d'adresse dérivés aO et /aO (pour que les transistors T5 et T6 commutent de la haute tension, ils doivent être commandés en haute tension, c'est à dire avec un niveau actif sur leur grille du niveau de la tension à commuter). Sur la figure 3, un exemple bien connu d'une structure d'un circuit de commutation de haute tension 3 est représenté. Cette structure ne sera pas détaillée. On pourra se reporter si nécessaire au brevet français 2 693 327 de la demanderesse. Ce circuit de commutation de haute tension est connecté entre une haute tension VPP et la masse. La haute tension VPP est dans cet exemple appliquée par une source externe sur une broche d'alimentation 4 du circuit intégré. Le circuit de commutation 1 délivre en sortie une impulsion de tension VPc dont le niveau haut est celui de la haute tension externe VPP ou délivre un niveau zéro en sortie, selon la commande impulsionnelle PRoG appliquée au circuit de commutation. Dans l'exemple représenté, la commande PROG est générée par une unité de commande 2. Cette unité de commande peut être un microprocesseur ou un circuit de séquencement du circuit intégré. La durée de l'impulsion est calibrée en fonction de l'opération à exécuter et de la nature des cellules mémoires (EPROM, EEPROM). On note dl la durée de l'impulsion de programmation des cellules de la mémoire CAM1. Les moyens de programmation des bistables de la mémoire CAM1 comprennent donc principalement les moyens de commuter l'impulsion de programmation sur les cellules soit dans l'exemple: le circuit 1 de commutation et le transistor Tc1. On a vu que la sélection des cellules à programmer se fait par les signaux du bus d'adresse. C'est à dire par les signaux de haute tension ai dérivés du bus d'adresse et leurs signaux inverses /ai, appliqués respectivement aux transistors T5 et T6 du bistable Bi Ainsi le procédé de programmation d'une mémoire CAM consiste classiquement à appliquer le mot d'adresse à programmer sur le bus d'adresse, à appliquer une commande de commutation PROG de durée dl et à rendre passant le transistor de commutation Tc1 associé à la mémoire, pour appliquer sur le drain de la cellule sélectionnée une impulsion de haute tension de programmation de durée dl. A la fin de l'impulsion, une cellule est programmée dans chaque bistable. Ainsi, normalement, aucun bistable ne doit plus consommer de courant. Selon l'invention, on prévoit alors de mesurer le courant sur le chemin de programmation, c'est à dire sur la ligne d'application de la haute tension de programmation, appliquée sur le drain de la cellule programmée, en effectuant un accès direct de lecture aux cellules. En effet en maintenant le mot d'adresse à programmer sur les transistors T5 et T6 des bistables (sortie du registre REG de la figure 2), on maintient la sélection de la cellule sur le drain de laquelle l'impulsion de programmation a été appliquée, ce qui permet d'appliquer sur ce drain une tension de lecture, par exemple VDD. Cette tension de lecture peut être fournie par une source d'alimentation externe, sur la broche d'alimentation qui reçoit normalement Vpp. Ceci peut être fait par un testeur. Si la cellule sélectionnée a été bien programmée, elle ne passe aucun courant. Si par contre elle n'a pas été bien programmée, elle tire du courant sur le chemin d'application de l'impulsion, c'est à dire notamment sur la broche 4. Ce courant peut alors être mesuré sur cette broche externe 4. On peut alors décider d'une nouvelle application de l'impulsion de programmation, et refaire ensuite le test, jusqu'à ne plus mesurer de courant ou décider que la cellule est défectueuse et utiliser une autre mémoire CAM, après avoir isolé la mémoire CAM défectueuse du reste du circuit, pour qu'elle ne consomme plus de courant. Cette opération de programmation avec vérification par accès direct en lecture et mesure du courant est dans l'exemple supervisée par le testeur. Dans une application de redondance dans un circuit mémoire, cette opération sera effectuée par le testeur dans la phase de réparation de la mémoire principale. Dans ce qui vient d'être exposé, on voit que l'on effectue globalement le test sur toutes les cellules qui ont été programmées dans une mémoire CAM. Cependant on pourrait très bien prévoir une circuiterie plus complexe pour accéder individuellement aux cellules programmées. Mais cela rendrait la procédure de programmation beaucoup plus longue, sans améliorer la fiabilité de la programmation des cellules. La figure 4 expose une variante de réalisation de l'invention. Elle s'applique en particulier aux circuits intégrés qui comprennent un multiplieur de tension 5 pour générer en interne leur haute tension VPP, à partir de la tension d'alimentation logique VDD du circuit. Dans ce cas, on prévoit que le circuit 1 de commutation de haute tension comprend un circuit complémentaire 6 pour forcer la tension en sortie du circuit 1 de commutation lorsque l'une au moins des cellules sélectionnées de la mémoire CAM sélectionnée passe du courant. Dans l'exemple, ce circuit complémentaire 6 comprend deux transistors T7 et T8. Le transistor T7 est monté entre la tension VPP et la tension VPC en sortie du circuit 1 de commutation. Il est commandé à l'état passant par un signal de test (noté TEST). Ce transistor est résistif, pour tirer le niveau de la tension VPC vers zéro volt Si au moins une des cellules sélectionnées consomme du courant. Si aucun courant ne circule sur la ligne VPc, le niveau de VPc reste à VPP, tout le temps du test. Le test peut utiliser la même commande PROG du circuit de commutation pour appliquer comme impulsion de test, l'impulsion de programmation de durée dl. L'autre transistor T8 est connecté entre la sortie du circuit de commutation et un point de test 7. Il est commandé à l'état passant par le signal TEST. I1 permet de transmettre sur le point de test 7 le niveau de la tension VpC. Ce niveau de tension peut alors être mesuré ou comparé à une référence. En pratique, si ce niveau est nul, c'est qu'il passe du courant sur la ligne. On peut en déduire qu'au moins une cellule n'est pas correctement programmée. La vérification de la programmation de la mémoire CAM selon cette variante peut être réalisée en interne, sous contrôle de l'unité de commande 5 ou d'un automate approprié. C'est alors l'unité de commande qui génère le signal TEST et un circuit de comparaison 8 du niveau de tension sur le point 7 délivre un signal de vérification vers l'unité de commande 5. L'unité de commande décide si il faut ou non ré-appliquer une impulsion de programmation sur la mémoire CAM à programmer. Cette réalisation en interne du procédé de programmation est intéressante notamment pour des applications de redondance dynamique. Ce mode de réalisation peut tout aussi bien être contrôlé par le testeur. Dans ce cas, on sort la tension au point 7 sur une des broches externes du circuit intégré. Le procédé de programmation selon l'invention consiste donc après avoir appliqué le mot de programmation sur les signaux du bus d'adresse du circuit intégré pour sélectionner les cellules à programmer, sélectionné la mémoire CAM à programmer (Tci) et appliquer ensuite une première impulsion de haute tension de programmation (PROG), à maintenir la sélection de ces cellules pour les accéder directement en lecture et effectuer une mesure de courant ou de tension sur le chemin d'application de l'impulsion de haute tension de programmation. L'invention a été en partie expliquée par référence aux circuits mémoires utilisant des mémoires CAM pour la redondance, mais elle s'applique plus généralement à tous les circuits intégrés utilisant des mémoires CAM. REVENDICATIONS 1. Procédé de programmation de cellules mémoires à grilles flottantes dans une mémoire accessible par le contenu, dans un circuit intégré, comprenant l'application par un chemin de programmation d'une haute tension de programmation délivrée par un circuit de commutation sur le drain de cellules sélectionnées, caractérisé en ce que dans une phase de vérification, on maintient la sélection de ces cellules pour effectuer un accès direct en lecture à ces cellules en leur appliquant une tension de lecture par ledit chemin de programmation, et effectuer une mesure de courant ou de tension sur ledit chemin de programmation. 2. Procédé de programmation selon la revendication 1, le circuit de commutation recevant une haute tension (VPP) à partir d'une broche externe du circuit intégré, caractérisé en ce qu'en phase de programmation une tension de lecture est appliquée sur ladite broche externe et que l'on mesure le courant sur cette broche. 3. Procédé de programmation selon la revendication 1, caractérisé en ce qu'en phase de vérification, on active un moyen pour forcer à zéro le niveau de l'impulsion de programmation délivrée en sortie du circuit de commutation, en présence de courant sur ledit chemin de programmation et un moyen pour mesurer le niveau de tension en sortie du circuit de commutation.