FR 3122024 A1 20221021 FR 2104087 A 20210420 Dans le procédé de gestion de données (300) pour une mémoire non volatile programmable bit à bit, le stockage de nouvelles données (NewDat) en un emplacement mémoire (Loc) d’un mot-mémoire comprend : - une étape de mesure (302) qui mesure les données précédentes (FormDat) stockées dans l’emplacement mémoire ; - le calcul (303) d’une première et d’une deuxième quantification (Q1, Q2) des opérations de programmation bit à bit correspondant aux bits des nouvelles données (NewDat), et d’une inversion complémentaire des nouvelles données (Compl.NewDat), qui sont respectivement différents des bits des données précédentes (FormDat), - une étape de programmation (306) comprenant, si la première quantification (Q1) est strictement supérieure à la deuxième quantification (Q2), la programmation bit à bit des bits de l’inversion complémentaire (305) des nouvelles données (Compl.NewDat) respectivement différents des bits des données précédentes (FormDat), et la programmation d’un drapeau d’inversion (InvFlg) à une valeur marquée. Figure pour l’abrégé : Fig 1 Procédé de gestion de données pour mémoire non volatile programmable bit à bit, et dispositif correspondant Des modes de réalisation de la présente invention concernent la gestion de données pour une mémoire non volatile programmable bit à bit, comme par exemple une mémoire à changement de phase « PCM », une mémoire résistive à base d’oxyde métallique « OxRAM » ou une mémoire magnétique « MRAM ». Parallèlement aux technologies dominantes de mémoire non volatile qui sont basées sur des transistors à grille flottante, typiquement des mémoires flash, l’industrie s’oriente vers un « nouveau » type de mémoires, généralement appelées mémoires résistives, telles que les OXRAM, MRAM et PCM, par exemple pour des raisons d’échelle et de coût. Contrairement aux mémoires basées sur des transistors à grille flottante, ce nouveau type de mémoires a typiquement l’avantage d’être programmable bit à bit, c’est-à-dire de pouvoir être modifiées un bit à la fois. L’inconvénient de la capacité de programmation bit à bit des mémoires résistives est que la programmation en une fois d’une séquence de données peut prendre plus de temps lorsqu’on ne traite qu’un ou quelques bits à la fois. Les mémoires résistives, par exemple du type PCM, ont habituellement un temps de programmation plus long, notamment en raison du fait que la quantité de courant nécessaire pour modifier un bit limite le nombre de bits pouvant être modifiés en une fois. De même, les opérations de programmation dans les mémoires résistives consomment généralement de grandes quantités d’énergie. Il existe cependant plusieurs situations dans lesquelles il est souhaitable de modifier une grande partie de la mémoire, comme par exemple dans le cas d’une mise à jour de micrologiciel dans un microcontrôleur « MCU », ou dans le cas d’une destruction de contenu en raison d’une brèche de sécurité. Les solutions classiques pour résoudre ce problème de durée de programmation liée à la consommation d’énergie introduisent des inconvénients qui affectent la compétitivité, notamment en ce qui concerne les coûts et l’encombrement. Par exemple, l’augmentation du courant disponible nécessite généralement de plus gros transistors et une plus grosse pompe de charge, et la fourniture d’une source extérieure de courant se traduit par un dispositif plus grand ou un dispositif non autonome. De même, l’augmentation du niveau de parallélisme, c’est-à-dire le fait de diviser la matrice mémoire en sous-matrices plus petites et de programmer plusieurs sous-matrices en parallèle, réduit la chute de tension dans une sous-matrice à condition qu’un courant suffisant soit fourni, mais introduit une plus grande aire périphérique. Il existe donc un besoin de proposer une solution pour réduire le temps de programmation et pour réduire la consommation d’énergie, avec pas ou peu de coûts et d’encombrement supplémentaires. Selon un aspect, il est proposé un procédé de gestion de données pour une mémoire non volatile programmable bit à bit, comme une mémoire résistive, par exemple une mémoire à changement de phase, comprenant un stockage de nouvelles données en un emplacement mémoire d’un mot-mémoire, ledit stockage comprenant : - une étape de mesure comprenant une mesure de données précédentes stockées dans l’emplacement mémoire ; - une étape de décision comprenant les opérations suivantes : -- calculer une première quantification d’une première rafale d’opérations de programmation bit à bit correspondant aux bits des nouvelles données respectivement différents des bits des données précédentes, -- calculer une deuxième quantification d’une deuxième rafale d’opérations de programmation bit à bit correspondant aux bits d’une inversion complémentaire des nouvelles données, respectivement différents des bits des données précédentes, -- tester si la première quantification est strictement supérieure à la deuxième quantification ; et - une étape de programmation comprenant, si le test de l’étape de décision est vrai, la programmation bit à bit des bits de l’inversion complémentaire des nouvelles données respectivement différents des bits des données précédentes, et la programmation ou le maintien d’un drapeau d’inversion dédié au mot-mémoire à une valeur marquée. Premièrement, en raison de la capacité de programmation bit à bit de la mémoire non volatile, on ne programme sélectivement que les bits des nouvelles données qui sont différents des bits déjà stockés dans l’emplacement mémoire. Les bits en commun des données précédentes restent inchangés, ce qui économise des opérations de programmation. Deuxièmement, les première et deuxième quantifications des opérations de programmation bit à bit sont des représentations du nombre de bits à modifier dans les données précédentes pour obtenir les nouvelles données, ou, respectivement, pour obtenir l’inversion complémentaire des nouvelles données. Le calcul de ces quantifications permet de voir si la programmation de l’inversion complémentaire des nouvelles données est plus rapide et plus économe en énergie que la programmation des nouvelles données non inversées. Si les nouvelles données sont programmées dans leur forme inversée complémentaire, alors le drapeau d’inversion programmé à la valeur marquée indique que le sens des données stockées est inversé complémentaire. Si le drapeau d’inversion était déjà programmé à la valeur marquée, alors on ne programme pas le drapeau d’inversion afin de le maintenir à la valeur marquée. Par conséquent, le procédé selon cet aspect permet aux nouvelles données d’être programmées selon le procédé le plus rapide, en économisant de 50 % à 100 % de la durée de programmation, tout en réduisant la consommation d’énergie en conséquence. Comme démonstration simplifiée, il est suggéré de considérer le pire cas et le cas moyen, le pire cas étant classiquement celui où 100 % des bits des données précédentes doivent basculer pour donner les nouvelles données, tandis que le cas moyen est celui où 50 % des bits doivent basculer. Avec le procédé selon cet aspect, quand le pire cas classique se produit, par exemple la programmation de nouvelles données 0xFF au lieu de données précédentes 0x00, alors l’inversion complémentaire des nouvelles données se traduit par zéro opération de programmation, sauf pour la programmation du drapeau d’inversion. On comprend alors aisément que le pire cas avec le procédé selon cet aspect est de 50 % des bits à faire basculer dans l’emplacement mémoire, ce qui correspond au cas moyen classique. Cette démonstration simplifiée, basée sur le nombre de bits à faire basculer, montre une réduction de la durée de programmation quand les deux types de basculement de bit (c’est-à-dire le passage de 0 à 1 et de 1 à 0) ont la même durée. Ceci est le cas par exemple lorsque les états binaires sont stockés de manière différentielle, comme défini ci-après. Toutefois, le passage d’un bit de 0 à 1 (« l’initialisation » d’un bit, « set » en anglais) et le passage de 1 à 0 (« la réinitialisation » d’un bit, « reset » en anglais) peuvent avoir des durées différentes. C’est le cas par exemple quand les états binaires sont stockés de manière absolue, comme défini ci-après. Selon un mode de réalisation, chaque opération de programmation bit à bit comprend l’utilisation d’une impulsion d’initialisation ayant une durée d’impulsion d’initialisation ou l’utilisation d’une impulsion de réinitialisation ayant une durée d’impulsion de réinitialisation, et le calcul de la première quantification et de la deuxième quantification comprend à chaque fois le comptage du nombre d’impulsions d’initialisation et d’impulsions de réinitialisation parmi les première rafale et deuxième rafale respectives d’opérations de programmation bit à bit, et le calcul des valeurs de quantification respectives proportionnellement aux durées cumulées des opérations de programmation bit à bit dans chaque rafale respective. En d’autres termes, ce mode de réalisation permet de prendre en compte une différence de durée entre une impulsion d’initialisation et une impulsion de réinitialisation, d’après un calcul proportionnel simple à mettre en œuvre basé sur le comptage du nombre d’impulsions d’initialisation et de réinitialisation dans les bits à modifier dans les données précédentes pour obtenir les nouvelles données ou les nouvelles données inversées complémentaires. Les valeurs de quantification proportionnelles aux durées cumulées peuvent être obtenues par exemple en additionnant la valeur de comptage de l’impulsion la plus courte (ou respectivement la plus longue) et la valeur de comptage de l’impulsion la plus longue (ou respectivement la plus courte) multipliées par un facteur de durée. Ainsi, si les nouvelles données inversées complémentaires nécessitent plus d’opérations de programmation qui présentent une durée cumulée plus courte que les opérations de programmation nécessaires pour les nouvelles données non inversées, on exécute l’étape de programmation la plus rapide et la plus économe en énergie. Selon un mode de réalisation, le calcul de la première quantification et de la deuxième quantification prend en compte l’opération de programmation du drapeau d’inversion. Selon un mode de réalisation, lorsque la taille d’emplacement mémoire est plus petite que la taille de mot-mémoire et lorsque le drapeau d’inversion dédié au mot-mémoire doit être programmé, le calcul de la première quantification et de la deuxième quantification tient compte des opérations de programmation pour l’inversion de tous les autres bits appartenant au mot-mémoire en dehors de l’emplacement mémoire ; et l’étape de programmation comprend la programmation de tous ces autres bits à leur état inversé complémentaire. Selon un mode de réalisation, chaque état binaire est stocké de manière absolue, avec un état initialisé (à 1) ou un état réinitialisé (à 0). Selon un mode de réalisation, chaque état binaire est stocké de manière différentielle en utilisant une paire orientée d’états complémentaires, chaque opération de programmation comprenant l’utilisation d’une impulsion d’initialisation et d’une impulsion de réinitialisation, et dans lequel l’étape de décision est remplacée par une étape de décision simplifiée équivalente comprenant les opérations suivantes : -- compter un premier nombre de bits respectivement différents entre les nouvelles données et les données précédentes, et -- tester si le premier nombre est strictement supérieur à 50 % de la taille du mot-mémoire. Dans le cas où le stockage des bits se fait d’une manière différentielle, chaque opération de programmation comportant une impulsion d’initialisation et une impulsion de réinitialisation, la durée de chaque opération de programmation est la même. De même, au lieu de calculer les quantifications représentant les durées cumulées des opérations de programmation respectives, le simple comptage du nombre de bits à modifier dans les données précédentes pour obtenir les nouvelles données permet de choisir l’étape de programmation la plus rapide. Selon un mode de réalisation, le procédé comprend le fait de lire des données stockées en un emplacement mémoire d’un mot-mémoire, la lecture comprenant la mesure des bits des données stockées dans l’emplacement mémoire et, si le drapeau d’inversion dédié au mot-mémoire a la valeur marquée, l’inversion de chaque bit des données mesurées vers les bits complémentaires respectifs. Selon un mode de réalisation, la mesure des données comprend un algorithme de code de correction d’erreurs exécuté sur les données stockées dans le mot-mémoire et sur le drapeau d’inversion dédié, et exécuté avant d’inverser les états binaires des données mesurées. Selon un mode de réalisation, l’étape de programmation comprend, si le test de l’étape de calcul n’est pas vérifié, la programmation bit à bit uniquement des bits des nouvelles données qui sont différents des bits respectifs des données précédentes, ainsi que la programmation ou le maintien du drapeau d’inversion dédié au mot-mémoire à une valeur non marquée. Selon un autre aspect, il est proposé un circuit intégré comportant une mémoire non volatile programmable bit à bit, comprenant un moyen de gestion de données configuré pour stocker de nouvelles données en un emplacement mémoire d’un mot-mémoire, ledit moyen de gestion de données comprenant : - un circuit de mesure configuré pour mesurer des données précédentes stockées dans l’emplacement mémoire ; - un circuit de calculateur de décision configuré : -- pour calculer une première quantification d’une première rafale d’opérations de programmation bit à bit correspondant aux bits des nouvelles données respectivement différents des bits des données précédentes, -- pour calculer une deuxième quantification d’une deuxième rafale d’opérations de programmation bit à bit correspondant aux bits d’une inversion complémentaire des nouvelles données, respectivement différents des bits des données précédentes, -- pour tester si la première quantification est strictement supérieure à la deuxième quantification ; et - un circuit de programmation configuré, si le test du circuit de calculateur de décision est vrai, pour programmer bit à bit les bits de l’inversion complémentaire des nouvelles données respectivement différents des bits des données précédentes, et pour programmer ou maintenir un drapeau d’inversion dédié au mot-mémoire à une valeur marquée. Selon un mode de réalisation, le circuit de programmation est configuré, pour chaque opération de programmation bit à bit, pour utiliser une impulsion d’initialisation ayant une durée d’impulsion d’initialisation ou une impulsion de réinitialisation ayant une durée d’impulsion de réinitialisation, et dans lequel le circuit de calculateur de décision est configuré pour calculer la première quantification et la deuxième quantification, pour compter le nombre d’impulsions d’initialisation et d’impulsions de réinitialisation parmi les première rafale et deuxième rafale respectives d’opérations de programmation bit à bit, et pour calculer les valeurs de quantification respectives proportionnellement aux durées cumulées des opérations de programmation bit à bit dans chaque rafale respective. Selon un mode de réalisation, le circuit de calculateur de décision est configuré pour calculer la première quantification et la deuxième quantification en prenant en compte l’opération de programmation du drapeau d’inversion. Selon un mode de réalisation, lorsque la taille d’emplacement mémoire est plus petite que la taille de mot-mémoire et lorsque le drapeau d’inversion dédié au mot-mémoire doit être programmé, le circuit de calculateur de décision est configuré pour calculer la première quantification et la deuxième quantification en tenant compte des opérations de programmation pour l’inversion de tous les autres bits appartenant au mot-mémoire en dehors de l’emplacement mémoire ; et le circuit de programmation est configuré pour programmer tous ces autres bits à leur état inversé complémentaire. Selon un mode de réalisation, la mémoire non volatile est configurée pour stocker chaque état binaire dans une cellule absolue adaptée pour avoir un état initialisé ou un état réinitialisé. Selon un mode de réalisation, la mémoire non volatile est configurée pour stocker chaque état binaire dans une paire de cellules différentielles adaptée pour stocker une paire orientée d’états complémentaires, le circuit de programmation étant configuré pour utiliser une impulsion d’initialisation et une impulsion de réinitialisation pour chaque opération de programmation bit à bit, et dans lequel la configuration du circuit de calculateur de décision est remplacée par une configuration simplifiée équivalente adaptée : -- pour compter un premier nombre de bits respectivement différents entre les nouvelles données et les données précédentes, et -- pour tester si le premier nombre est strictement supérieur à 50 % de la taille du mot-mémoire. Selon un mode de réalisation, le moyen de gestion de données comprend un circuit de lecture configuré pour mesurer les bits des données stockées dans un emplacement mémoire d’un mot-mémoire et, si le drapeau d’inversion dédié au mot-mémoire a la valeur marquée, pour inverser chaque bit mesuré pour obtenir le bit complémentaire respectif. Selon un mode de réalisation, le circuit de lecture comprend un mécanisme de code de correction d’erreurs destiné à être appliqué aux données stockées dans le mot-mémoire et au drapeau d’inversion dédié, et à être exécuté avant d’inverser les bits mesurés. Selon un mode de réalisation, le circuit de programmation est configuré, si le test du circuit de calculateur de décision n’est pas vérifié, pour programmer bit à bit uniquement les bits des nouvelles données qui sont différents des bits respectifs des données précédentes, ainsi que pour programmer ou maintenir le drapeau d’inversion dédié au mot-mémoire à une valeur non marquée. D’autres avantages et caractéristiques de l’invention apparaîtront à l’examen de la description détaillée de modes de réalisation et de mise en œuvre de l’invention, nullement limitatifs, et des dessins annexés, dans lesquels : ; ; ; ; ; représentent des modes de réalisation et de mise en œuvre de l’invention. La montre un exemple d’un circuit intégré CI comportant une mémoire non volatile programmable bit à bit. Une mémoire non volatile programmable bit à bit a la capacité de programmer un bit à la fois, indépendamment de l’organisation des cellules de mémoire non volatile en une matrice ARR, comme l’organisation classique en octets ou en mots de mémoire. La matrice de mémoire ARR comporte des cellules de mémoire adaptées chacune pour stocker un bit de donnée et disposées en lignes et colonnes. On retrouve notamment la capacité de programmation bit à bit dans les mémoires non volatiles résistives, comme les mémoires à changement de phase « PCM », les mémoires résistives à base d’oxyde métallique « OxRAM » ou les mémoires magnétorésistives « MRAM ». De manière conventionnelle, un bit est une valeur binaire qui peut avoir deux états, généralement désignés par les chiffres 0 et 1, les octets sont des groupes de huit bits, et l’expression mot-mémoire désigne des sections de données qui peuvent être lues en une fois. Une ligne contient généralement une pluralité de mots, et des circuits de décodeur DEC et circuits de pilotage HCDRV sont capables de sélectionner une ligne et un mot à l’intérieur de la ligne. La mémoire non volatile programmable bit à bit CI comprend la matrice de mémoire ARR et un moyen de gestion de données DatMM. Chaque cellule-mémoire résistive comprend un matériau résistif ayant deux états, à savoir un « état initialisé » qui stocke traditionnellement un « 1 » et un « état réinitialisé » qui stocke traditionnellement un « 0 ». Chaque état du matériau résistif a une résistance électrique différente, dont la valeur est utilisée comme valeur du bit respectif (par exemple « 0 » pour la résistance la plus élevée et « 1 » pour la résistance la plus faible). Dans l’exemple des mémoires à changement de phase « PCM », le matériau résistif à deux états peut être dans une phase cristalline ou dans une phase amorphe, auxquelles correspondent les deux différentes valeurs de résistance. La transition de la phase cristalline à la phase amorphe, et vice versa, est obtenue par un changement de température approprié, produit par le passage d’une impulsion de courant. En particulier, et comme cela sera expliqué plus en détail ci-après en relation avec à la , la phase amorphe (par exemple l’état réinitialisé) est obtenue avec une courte impulsion de courant rectangulaire tandis que la phase cristalline (par exemple l’état initialisé) est obtenue avec une impulsion de courant plus longue de forme triangulaire. Dans l’exemple des mémoires résistives à base d’oxyde métallique « OxRAM », le matériau résistif à deux états peut être un diélectrique, qui est intrinsèquement isolant, que l’on peut rendre conducteur à travers un filament ou un chemin de conduction formé après l’application d’une tension suffisamment élevée. Une fois le filament formé, celui-ci peut être mis à zéro (cassé, ce qui crée une résistance élevée) ou à un (reformé, ce qui donne une résistance plus faible) par des impulsions de tension respectives. Dans l’exemple des mémoires magnétorésistives « MRAM », le matériau résistif à deux états peut être obtenu par magnétorésistance à effet tunnel, la cellule étant formée de deux plaques ferromagnétiques capables de conserver une magnétisation et séparées l’une de l’autre d’une mince couche isolante. La résistance électrique de la cellule change avec l’orientation relative de la magnétisation dans les deux plaques ferromagnétiques. Une des deux plaques a une orientation de magnétisation permanente, tandis que l’orientation de magnétisation de l’autre plaque peut être modifiée pour s’adapter à l’orientation d’un champ extérieur, par exemple un champ magnétique induit par un courant circulant dans des lignes d’écriture dans deux directions possibles. En outre, chaque cellule-mémoire résistive peut être formée de deux manières possibles, c’est-à-dire une « manière absolue », aussi appelée « une cellule un bit », dans laquelle on stocke un bit dans une cellule respective ayant soit un état initialisé, soit un état réinitialisé ; ou une « manière différentielle », aussi appelée « deux cellules un bit », dans laquelle on stocke un bit dans une paire de cellules orientée, chacune stockant un état complémentaire (par exemple « 0-1 » pour signifier « 0 » et « 1-0 » pour signifier « 1 »). Dans cet exemple, la matrice de mémoire est en outre « parallélisée » (ou « divisée ») en deux parties égales H1 et H2, ce qui divise par deux la taille des lignes et limite aussi de ce fait la taille des mots. La matrice peut être divisée en plus de deux parties égales plus petites. La technique de « parallélisation » apporte de la flexibilité pour gérer les données de la matrice. La sélection et l’accès à une cellule-mémoire sont réalisés par des circuits de décodeur DEC, généralement des décodeurs de lignes et de colonnes, et les opérations de programmation (qui seront décrites plus loin relativement à la ) sont exécutées par des circuits de pilotage HCDRV, généralement des circuits de pilotage à courant élevé. Chaque mot-mémoire WD comporte un drapeau d’inversion dédié InvFlg qui permet de marquer la lecture des données qui sont stockées dans le mot-mémoire WD correspondant. Le drapeau d’inversion InvFlg peut avoir une valeur non marquée qui signifie que les données doivent être lues selon la manière conventionnelle, par exemple généralement un état réinitialisé d’une cellule se traduit par « 0 » et un état initialisé d’une cellule se traduit par « 1 » ; ou une valeur marquée qui signifie que les données doivent être lues de manière inversée complémentaire, dans laquelle, selon le même exemple type, un état réinitialisé d’une cellule se traduit par « 1 » et un état initialisé d’une cellule se traduit par « 0 ». Ce mécanisme du drapeau d’inversion InvFlg réduit le nombre d’opérations de programmation pendant le stockage de nouvelles données NewDat, et permet ainsi d’économiser du temps de programmation et de l’énergie. Le drapeau d’inversion InvFlg peut être codé sur un bit, la valeur non marquée étant « 0 » et la valeur marquée étant « 1 », par exemple. Afin d’éviter une inversion fausse des données stockées due à une erreur dans le drapeau d’inversion InvFlg, le drapeau d’inversion peut être « protégé », par exemple en étant inclus dans un mécanisme de code de correction d’erreurs, ou en retenant la majorité parmi trois bits codant le drapeau d’inversion, ou par d’autres techniques connues. Le moyen de gestion de données DatMM est configuré pour stocker les nouvelles données NewDat en un emplacement mémoire Loc qui fait partie d’un mot-mémoire WD, il comprend un circuit de mesure SNS, un circuit d’unité logique appelé circuit de calculateur de décision CAL, un circuit de programmation PROG et un circuit de lecture RD. Le moyen de gestion de données DatMM est configuré pour exécuter le procédé de gestion de données décrit plus loin relativement aux figures 3 à 6. En réponse à la réception d’une commande incluant de nouvelles données NewDat et l’emplacement mémoire Loc pour les stocker, le moyen de gestion de données DatMM exécute le processus de stockage. Au cours du processus de stockage, le circuit de mesure SNS est configuré pour mesurer les données précédentes FormDat stockées dans l’emplacement mémoire Loc. À cette fin, le circuit de mesure SNS peut commander les circuits de décodeur DEC et les circuits de pilotage HCDRV. Le circuit de calculateur de décision CAL est configuré pour identifier les bits des nouvelles données qui sont différents des bits déjà stockés dans l’emplacement mémoire, par exemple grâce à une comparaison bit à bit entre les nouvelles données NewDat et les données précédentes FormDat mesurées. Ceci va permettre aux bits des données précédentes FormDat communs aux nouvelles données NewDat de rester inchangés, ce qui va permettre de réaliser une rafale d’opérations de programmation uniquement pour les bits qui sont différents dans les nouvelles données NewDat, comparés aux bits des données précédentes FormDat. De plus, le circuit de calculateur de décision CAL est configuré pour inverser de façon complémentaire les bits des nouvelles données NewDat et pour identifier les bits des nouvelles données inversées complémentaires qui sont différents des bits déjà stockés dans l’emplacement mémoire. Le circuit de calculateur de décision CAL est configuré pour calculer une première quantification (Q1) représentant la durée d’une première rafale d’opérations de programmation bit à bit correspondant aux bits des nouvelles données NewDat respectivement différents des bits des données précédentes ; et pour calculer une deuxième quantification (Q2) représentant la durée d’une deuxième rafale d’opérations de programmation bit à bit correspondant aux bits d’une inversion complémentaire des nouvelles données NewDat respectivement différents des bits des données précédentes. Le circuit de calculateur de décision CAL compare ensuite la première quantification et la deuxième quantification puis envoie un signal de commande au circuit de programmation PROG pour programmer bit à bit les bits respectivement différents des bits des données précédentes FormDat, qui appartiennent aux nouvelles données NewDat ou qui appartiennent à l’inversion complémentaire des nouvelles données NewDat, selon le résultat de la comparaison. Si la première quantification (Q1) est strictement supérieure à la deuxième quantification (Q2), le circuit de programmation PROG est configuré pour programmer bit à bit les différents bits de l’inversion complémentaire des nouvelles données NewDat (c’est-à-dire la deuxième rafale), tout en programmant ou en maintenant le drapeau d’inversion InvFlg respectif à la valeur marquée. Si la première quantification (Q1) est inférieure ou égale à la deuxième quantification (Q2), le circuit de programmation PROG est configuré pour programmer bit à bit les différents bits des nouvelles données NewDat non inversées (c’est-à-dire la première rafale), tout en programmant ou en maintenant le drapeau d’inversion InvFlg respectif à la valeur non marquée. La programmation du drapeau d’inversion InvFlg dépend de sont état précédent. Le drapeau d’inversion InvFlg doit être programmé si son état précédent est différent de l’état souhaité. Si le drapeau d’inversion a déjà été programmé à la valeur marquée (respectivement, à la valeur non marquée), alors on ne programme pas le drapeau d’inversion afin de le maintenir à la valeur marquée (respectivement, non marquée). De même, le circuit de calculateur de décision CAL est configuré pour commander le circuit de programmation pour exécuter l’opération de programmation la plus rapide entre la programmation des nouvelles données NewDat non inversées et la programmation des nouvelles données NewDat inversées complémentaires. Pour calculer la première quantification (Q1) et la deuxième quantification (Q2), chacune représentant la durée des opérations de programmation bit à bit des données respectives, on peut avantageusement prendre en compte les différences de durée entre la mise à un d’une cellule et la remise à zéro d’une cellule. Il est maintenant fait référence à la . La représente une série d’impulsions d’initialisation SET_PLS, et une série d’impulsions de réinitialisation RESET_PLS, qui peuvent correspondre à une rafale d’opérations de programmation de nouvelles données NewDat. De manière plus spécifique, ces impulsions d’initialisation SET_PLS et impulsions de réinitialisation RESET_PLS correspondent à une opération de programmation d’une mémoire à changement de phase « PCM », où la durée d’une impulsion d’initialisation T_S est largement plus grande que la durée d’une impulsion de réinitialisation T_R. Par exemple, la durée d’une impulsion d’initialisation T_S peut être égale à environ 30, et jusqu’à 60 fois la durée d’une impulsion de réinitialisation T_R. En conséquence, le circuit de calculateur de décision CAL peut faire la distinction entre la durée des impulsions d’initialisation T_S et celle des impulsions de réinitialisation T_R, lors du calcul de la première quantification (Q1) et de la deuxième quantification (Q2). Ceci est le cas notamment lorsque les cellules de mémoire résistive ont été formées selon la manière absolue (« une cellule un bit »), où chaque opération de programmation bit à bit comprend l’utilisation d’une impulsion d’initialisation SET_PLS ayant une durée d’impulsion d’initialisation T_S ou l’utilisation d’une impulsion de réinitialisation RESET_PLS ayant une durée d’impulsion de réinitialisation T_R différente. Ce cas sera décrit plus loin relativement à la . Toutefois, dans le cas où les cellules de mémoire résistive ont été formées selon la manière différentielle (« deux cellules un bit »), chaque opération de programmation bit à bit comprend l’utilisation d’une impulsion d’initialisation SET_PLS et d’une impulsion de réinitialisation RESET_PLS. En effet, la programmation d’un « 1 » = « 10 » au lieu d’un « 0 » = « 01 » fait appel à une impulsion d’initialisation « 0_ » à « 1_ » et une impulsion de réinitialisation « _1 » à « _0 », et vice versa. Par conséquent, la durée d’une opération de programmation ne dépend pas de la valeur binaire (« 0 » ou « 1 ») à programmer. De même, lorsque la durée d’impulsion d’initialisation T_S et la durée d’impulsion de réinitialisation T_R sont égales ou presque égales, comme par exemple quand la mémoire résistive est une mémoire magnétique « MRAM », la durée d’une opération de programmation ne dépend pas de la valeur binaire (« 0 » ou « 1 ») à programmer. Dans de tels cas, le circuit de calculateur de décision CAL peut être configuré d’une manière simple équivalente, pour tester la condition pour programmer les nouvelles données non inversées NewDat ou les nouvelles données inversées complémentaires NewDat. Ces cas seront décrits plus loin relativement à la . Il est maintenant fait référence à la . La représente un schéma illustrant le procédé de gestion de données 300 pour la mémoire non volatile programmable bit à bit décrite auparavant relativement aux figures 1 et 2. Le procédé 300 comprend, en réponse à la réception d’une commande 301 comportant des nouvelles données NewDat et l’emplacement mémoire Loc correspondant, une étape de mesure 302 mesurant les données précédentes FormDat stockées dans l’emplacement mémoire Loc, une étape de décision comportant une étape de calcul 303, et une étape de test 304. L’étape de calcul 303 permet le calcul de la première quantification Q1 représentant la durée des opérations de programmation bit à bit correspondant aux bits des nouvelles données NewDat respectivement différents des bits des données précédentes ; et de la deuxième quantification Q2 représentant la durée des opérations de programmation bit à bit correspondant aux bits d’une inversion complémentaire des nouvelles données NewDat respectivement différents des bits des données précédentes. À cette fin, l’étape de calcul 303 comprend le comptage du nombre d’impulsions d’initialisation n1, n2 et le nombre d’impulsions de réinitialisation m1, m2 parmi les opérations de programmation bit à bit respectives. Les nombres ayant le suffixe « 1 » (Q1, n1, m1) se rapportent aux opérations de programmation correspondant aux nouvelles données NewDat non inversées, et les nombres ayant le suffixe « 2 » (Q2, n2, m2) se rapportent aux opérations de programmation correspondant aux nouvelles données NewDat inversées complémentaires. Le comptage de ces nombres n1, m1, n2, m2 peut résulter par exemple de comparaisons bit à bit des données précédentes FormDat mesurées avec les nouvelles données NewDat, et avec une copie inversée complémentaire des nouvelles données NewDat. Les première et deuxième valeurs de quantification Q1, Q2 sont calculées pour représenter les durées cumulées des opérations de programmation bit à bit respectives, à savoir Q1 = n1*T_S+m1*T_R et Q2 = n2*T_S+m2*T_R. Ensuite, les calculs peuvent être tous les deux simplifiés (ou normalisés) par la durée d’impulsion de réinitialisation T_R, ce qui donne Q1 = k*n1+m1 et Q2 = k*n2+m2, avec k = T_S/T_R, puisque les quantifications sont destinées à être comparées entre elles. Les expressions des première et deuxième valeurs de quantification Q1 = k*n1+m1, Q2 = k*n2+m2 sont ainsi proportionnelles aux durées cumulées des opérations de programmation bit à bit respectives. L’étape de test 304 compare les première et deuxième quantifications Q1, Q2, plus particulièrement elle teste si la première quantification Q1 est strictement supérieure à la deuxième quantification Q2. Si le résultat de l’étape de test 304 est vrai V, le procédé 300 comprend le chargement de l’inversion complémentaire 305 des nouvelles données Compl.NewDat dans des registres de programmation, et une étape de programmation 306 comprenant la programmation bit à bit des bits de l’inversion complémentaire des nouvelles données Compl.NewDat respectivement différents des bits des données précédentes FormDat. L’étape de programmation 306 comprend aussi la programmation du drapeau d’inversion InvFlg dédié au mot-mémoire respectif à une valeur marquée, si nécessaire (c’est-à-dire qi le drapeau d’inversion InvFlg n’est pas déjà à la valeur marquée). Ensuite, le procédé prend fin en 308. Si le résultat de l’étape de test 304 n’est pas vrai, c’est-à-dire faux F, l’étape de programmation 307 comprend la programmation bit à bit uniquement des bits des nouvelles données NewDat non inversées qui sont différents des bits respectifs des données précédentes FormDat. L’étape de programmation 307 comprend aussi la programmation du drapeau d’inversion InvFlg dédié au mot-mémoire respectif à une valeur non marquée si nécessaire (c’est-à-dire si le drapeau d’inversion InvFlg n’est pas déjà à la valeur non marquée). Ensuite, le procédé prend fin en 308. Avantageusement, le calcul de la première quantification Q1 et de la deuxième quantification Q2 prend en compte l’opération de programmation du drapeau d’inversion InvFlg. Autrement dit, si le drapeau d’inversion InvFlg a la valeur non marquée, la (ou les) opération de programmation pour programmer le drapeau d’inversion InvFlg à la valeur marquée est comptée dans la deuxième quantification Q2. Inversement, si le drapeau d’inversion InvFlg a la valeur marquée, la (ou les) opération de programmation pour programmer le drapeau d’inversion InvFlg à la valeur non marquée est comptée dans la première quantification Q1. En outre, quand la nouvelle valeur (marquée ou non) du drapeau d’inversion InvFlg est différente de sa valeur précédente (respectivement non marquée ou marquée), la nouvelle valeur du drapeau d’inversion InvFlg influe non seulement sur les nouvelles données NewDat isolées, mais elle influe aussi sur les données entières du mot-mémoire correspondant. En effet, le mot-mémoire n’est pas nécessairement entièrement composé des nouvelles données NewDat à l’emplacement mémoire Loc, il peut aussi comprendre d’autres données précédentes hors de l’emplacement mémoire Loc. Ainsi, lorsque la valeur du drapeau d’inversion change, deux cas sont possibles : le premier cas dans lequel les nouvelles données NewDat ont une taille supérieure ou égale à la taille du mot-mémoire WD, et le deuxième cas dans lequel les nouvelles données NewDat ont une taille strictement inférieure à la taille du mot-mémoire WD. Dans le premier cas, le mot-mémoire WD est entièrement composé des nouvelles données NewDat, et la valeur du drapeau d’inversion InvFlg influe seulement sur l’état inversé ou non inversé des nouvelles données NewDat. Les autres données précédentes hors de l’emplacement mémoire Loc, précédemment mentionnées, n’existent pas et ne doivent pas être prises en compte. Dans le deuxième cas, le mot-mémoire WD comprend à la fois de nouvelles données NewDat à l’emplacement mémoire Loc et d’autres données précédentes hors de l’emplacement mémoire Loc. La valeur du drapeau d’inversion influe toutefois sur l’état inversé ou non inversé des nouvelles données NewDat et de tous les bits appartenant au mot-mémoire WD en dehors de l’emplacement mémoire Loc. Afin d’annuler l’influence de la valeur du drapeau d’inversion InvFlg sur les bits appartenant au mot-mémoire WD hors de l’emplacement mémoire Loc, on réalise une inversion complémentaire de tous les bits appartenant au mot-mémoire WD hors de l’emplacement mémoire Loc. Ainsi, dans le deuxième cas, le calcul de la première quantification Q1 et de la deuxième quantification Q2 prend avantageusement en compte, dans les comptages n1, m1, n2, m2, les opérations de programmation pour l’inversion de tous les autres bits appartenant au mot-mémoire WD en dehors de l’emplacement mémoire Loc. L’étape de programmation 306 comprend en conséquence la programmation de tous ces autres bits à leur état inversé complémentaire, si la valeur du drapeau d’inversion InvFlg doit changer d’après les résultats V, F de l’étape de test 304. Le procédé 300 est compatible avec les deux cas d’états binaires, où les états binaires sont stockés de manière absolue (« une cellule un bit ») ou de manière différentielle (« deux cellules un bit »). Toutefois, lorsque les états binaires sont stockés de manière différentielle (« deux cellules un bit »), ou lorsque la durée d’impulsion d’initialisation T_S et la durée d’impulsion de réinitialisation T_R sont les mêmes, il est possible de simplifier, et donc potentiellement d’accélérer, l’étape de calcul 403, ce qui va être décrit maintenant. Il est maintenant fait référence à la . La représente un schéma d’un procédé 400, similaire au procédé 300 décrit relativement à la , dans lequel l’étape de calcul 403 et l’étape de test 404 sont simplifiées et optimisées pour les cas dans lesquels les états binaires sont stockés de manière différentielle (« deux cellules un bit »), ou lorsque la durée d’impulsion d’initialisation T_S et la durée d’impulsion de réinitialisation T_R sont les mêmes. Les étapes de réception d’une commande 401 et de mesure des données précédentes 402 sont analogues aux étapes 301 et 302 du procédé 300. L’étape de calcul 403 comprend le comptage d’un nombre arbitrairement appelé « premier nombre » N1 des bits respectivement différents entre les nouvelles données NewDat et les données précédentes FormDat. L’étape de test 404 teste si le premier nombre N1 est strictement supérieur à 50 % de la taille du mot-mémoire WD. Si le résultat de l’étape de test 404 est vrai V, le procédé 400 comprend une étape d’inversion complémentaire des nouvelles données 405 et une étape de programmation 406 analogue aux étapes 305 et 306 du procédé 300, puis le procédé 400 prend fin en 408. En d’autres termes, le procédé 400 correspond au procédé 300 dans lequel l’étape de décision est remplacée par une étape de décision simplifiée équivalente qui comprend le comptage du premier nombre de bits respectivement différents entre les nouvelles données et les données précédentes, et le test pour savoir si le premier nombre de bits respectivement différents est strictement supérieur à 50 % de la taille du mot-mémoire. En fait, le procédé 400 est équivalent au procédé 300 puisque, dans le cas de « deux cellules un bit », le nombre d’impulsions d’initialisation est égal au nombre d’impulsions de réinitialisation, donc n1 = m1 (= N1), n2 = m2 (= N2). Par conséquent, les première et deuxième quantifications selon le procédé 300 sont exprimées par Q1 = (k+1)*N1 et Q2 = (k+1)*N2. La comparaison de Q1 et Q2 reste la même en simplifiant par k+1, et donc Q1 = N1 et Q2 = N2. Enfin, si S est la taille du mot-mémoire WD, N1+N2 = S d’après la nature complémentaire de N1 et N2 dans le mot-mémoire WD. Par conséquent, Q1 > Q2 quand N1 > S/2. La représente un schéma d’un processus de lecture 500 dans les procédés de gestion de données 300, 400 décrits précédemment. En réponse à une demande de lecture 501 de données stockées en un emplacement mémoire Loc d’un mot-mémoire, le processus de lecture 500 comprend la mesure 502 des bits des données stockées dans l’emplacement mémoire et la mesure du drapeau d’inversion InvFlg. Il faut porter attention à l’utilisation d’un algorithme de code de correction d’erreurs ECC, qui doit avantageusement être exécuté à la fois sur les données mesurées et sur le drapeau d’inversion InvFlg, avant une éventuelle inversion 504 des états binaires des données mesurées. Si le drapeau d’inversion InvFlg dédié au mot-mémoire a la valeur marquée 503-V, le processus de lecture 500 comprend l’inversion 504 de chaque bit des données mesurées vers les bits complémentaires respectifs avant la communication 505 des données lues. Si le drapeau d’inversion InvFlg dédié au mot-mémoire a la valeur non marquée 503-F, le processus de lecture 500 mesure de façon classique les données dans leur état non inversé, et n’inverse pas les bits des données mesurées avant la communication 505 des données lues. Le procédé 500 peut ensuite prendre fin en 506. La représente un graphique montrant le gain de temps fourni par les modes de réalisation décrits relativement aux figures 1 à 5. Le graphique montre la durée T du processus de stockage en fonction du nombre de bits à modifier NbBits par rapport aux données précédentes pour obtenir les nouvelles données, pour un cas classique indiqué par une ligne pointillée et pour les modes de réalisation décrits relativement aux figures 1 à 5, indiqués par une ligne continue. Comme indiqué par la ligne pointillée, pour le cas classique, la durée T augmente proportionnellement au nombre de bits à modifier NbBits, auquel est ajouté un coût temporel fixe FxdT. Comme indiqué par la ligne continue, pour les modes de réalisation décrits, la durée T augmente proportionnellement au nombre de bits à modifier NbBits, à un taux identique à celui du cas classique, jusqu’à environ 50 % de bits à modifier dans le mot-mémoire. Au-dessus de 50 % de bits à modifier, les nouvelles données subissent une inversion complémentaire, et plus il y a de bits initialement différents dans les nouvelles données initiales, moins il y a de bits différents dans les nouvelles données inversées complémentaires. Ainsi, la durée T diminue d’environ 50 % de la plage de temps classique, jusqu’à ce que l’on atteigne le coût temporel fixe initial FxdT plus le temps de programmation de drapeau d’inversion InvFlg_prog. Toutefois, en dépit de cette représentation arbitraire du graphique, le temps de programmation InvFlg_prog du drapeau d’inversion InvFlg doit être considéré en fonction de l’état précédent du drapeau d’inversion InvFlg. En effet, en fonction de l’état précédent du drapeau d’inversion InvFlg, le coût du temps de programmation du drapeau d’inversion InvFlg peut être rentable dans le cas où il n’y a pas d’inversion sur les nouvelles données NewDat ou non rentable en cas d’inversion des nouvelles données NewDat. En fait, le graphique de la correspond au mode de réalisation dans lequel il n’y a pas de différence de temps entre la programmation d’un « 1 » et la programmation d’un « 0 » dans les cellules de mémoire résistive, comme décrit relativement à la . Dans le mode de réalisation décrit relativement à la , le gain peut être amélioré lorsqu’il y a moins de 50 % de bits à modifier dans les nouvelles données initiales. Par exemple, pour programmer un mot-mémoire complet d’une longueur de 32 bits, en utilisant les notations Q1 = k*n1+m1 et Q2 = k*n2+m2, où n1 est le nombre d’impulsions d’initialisation nécessaires pour programmer les nouvelles données non inversées, m1 est le nombre d’impulsions de réinitialisation nécessaires pour programmer les nouvelles données non inversées, n2 est le nombre d’impulsions d’initialisation nécessaires pour programmer les nouvelles données inversées, m2 est le nombre d’impulsions de réinitialisation nécessaires pour programmer les nouvelles données inversées, et k = 10, où : 00001111 00001111 00001111 00001111 + 0 = FormDat + InvFlg 11 0 1 1111 1111 1111 111 01111 1111 1111 + 0 = NewDat + InvFlg 00 1 0 0000 0000 0000 000 10000 0000 0000 + 1 = Compl.NewDat + InvFlg les bits soulignés correspondent aux impulsions nécessaires dans chaque cas ; n1 = 14 ; m1 = 0 ; Q1 = 10*14+0 = 140 n2 = 3 ; m2 = 16 ; Q2 = 10*3+16 = 46. Dans cet exemple, même si le nombre absolu d’impulsions indistinctes nécessaires pour programmer les nouvelles données inversées est plus grand que le nombre absolu d’impulsions pour programmer les nouvelles données non inversées, la durée de l’opération en cas d’inversion des données est égale à environ 30 % de la durée en cas de non inversion. En d’autres termes, Q1 peut être plus grand que Q2, même si le nombre de bits qui changent est supérieur dans le cas avec inversion que dans le cas sans inversion. Procédé de gestion de données (300) pour une mémoire non volatile programmable bit à bit, comprenant le stockage de nouvelles données (NewDat) en un emplacement mémoire (Loc) d’un mot-mémoire, ledit stockage comprenant : - une étape de mesure (302) comprenant la mesure de données précédentes (FormDat) stockées dans l’emplacement mémoire ; - une étape de décision comprenant les opérations suivantes : -- calculer (303) une première quantification (Q1) d’une première rafale d’opérations de programmation bit à bit correspondant aux bits des nouvelles données (NewDat) respectivement différents des bits des données précédentes (FormDat), -- calculer (303) une deuxième quantification (Q2) d’une deuxième rafale d’opérations de programmation bit à bit correspondant aux bits d’une inversion complémentaire des nouvelles données (Compl.NewDat), respectivement différents des bits des données précédentes (FormDat), -- tester (304) si la première quantification (Q1) est strictement supérieure à la deuxième quantification (Q2) ; et - une étape de programmation (306) comprenant, si le test de l’étape de décision est vrai (V), la programmation bit à bit des bits de l’inversion complémentaire (305) des nouvelles données (Compl.NewDat) respectivement différents des bits des données précédentes (FormDat), et la programmation ou le maintien d’un drapeau d’inversion (InvFlg) dédié au mot-mémoire à une valeur marquée. Procédé selon la revendication 1, dans lequel chaque opération de programmation bit à bit comprend l’utilisation d’une impulsion d’initialisation (SET_PLS) ayant une durée d’impulsion d’initialisation (T_S) ou l’utilisation d’une impulsion de réinitialisation (RESET_PLS) ayant une durée d’impulsion de réinitialisation (T_R), et dans lequel le calcul de la première quantification (Q1) et de la deuxième quantification (Q2) comprend à chaque fois le comptage du nombre d’impulsions d’initialisation (n1 ; n2) et d’impulsions de réinitialisation (m1 ; m2) parmi les première rafale et deuxième rafale respectives d’opérations de programmation bit à bit, et le calcul des valeurs de quantification respectives (Q1 ; Q2) proportionnellement aux durées cumulées (kn1+m1 ; kn2+m2) des opérations de programmation bit à bit dans chaque rafale respective. Procédé selon l’une quelconque des revendications 1 et 2, dans lequel le calcul de la première quantification (Q1) et de la deuxième quantification (Q2) prend en compte l’opération de programmation du drapeau d’inversion (InvFlg). Procédé selon l’une quelconque des revendications précédentes, dans lequel, lorsque la taille d’emplacement mémoire (Loc) est plus petite que la taille de mot-mémoire (WD) et lorsque le drapeau d’inversion (InvFlg) dédié au mot-mémoire (WD) doit être programmé, le calcul de la première quantification (Q1) et de la deuxième quantification (Q2) tient compte des opérations de programmation pour l’inversion de tous les autres bits appartenant au mot-mémoire (WD) en dehors de l’emplacement mémoire (Loc) ; et l’étape de programmation (306) comprend la programmation de tous ces autres bits à leur état inversé complémentaire. Procédé selon l’une quelconque des revendications 1 à 4, dans lequel chaque état binaire est stocké de manière absolue, avec un état initialisé ou un état réinitialisé. Procédé selon l’une quelconque des revendications 1 à 4, dans lequel chaque état binaire est stocké de manière différentielle en utilisant une paire orientée d’états complémentaires, chaque opération de programmation comprenant l’utilisation d’une impulsion d’initialisation (SET_PLS) et d’une impulsion de réinitialisation (RESET_PLS), et dans lequel l’étape de décision est remplacée par une étape de décision simplifiée équivalente comprenant les opérations suivantes : -- compter (403) un premier nombre (N1) de bits respectivement différents entre les nouvelles données (NewDat) et les données précédentes (FormDat), et -- tester (404) si le premier nombre (N1) est strictement supérieur à 50 % de la taille du mot-mémoire (WD). Procédé selon l’une quelconque des revendications précédentes, comprenant le fait de lire des données (500) stockées en un emplacement mémoire (Loc) d’un mot-mémoire, la lecture comprenant la mesure des bits des données stockées dans l’emplacement mémoire (502) et, si le drapeau d’inversion (InvFlg) dédié au mot-mémoire a la valeur marquée (503, V), l’inversion (504) de chaque bit des données mesurées vers les bits complémentaires respectifs. Procédé selon la revendication 7, dans lequel la mesure des données (502) comprend un algorithme de code de correction d’erreurs (ECC) exécuté sur les données stockées dans le mot-mémoire (WD) et sur le drapeau d’inversion dédié (InvFlg), et exécuté avant d’inverser (504) les états binaires des données mesurées. Procédé selon l’une quelconque des revendications précédentes, dans lequel l’étape de programmation (307) comprend, si le test de l’étape de calcul n’est pas vérifié (F), la programmation bit à bit uniquement des bits des nouvelles données (NewDat) qui sont différents des bits respectifs des données précédentes (FormDat), ainsi que la programmation ou le maintien du drapeau d’inversion (InvFlg) dédié au mot-mémoire à une valeur non marquée. Circuit intégré comportant une mémoire non volatile programmable bit à bit (CI), comprenant un moyen de gestion de données (DatMM) configuré pour stocker de nouvelles données (NewDat) en un emplacement mémoire (Loc) d’un mot-mémoire (WD), ledit moyen de gestion de données comprenant : - un circuit de mesure (SNS) configuré pour mesurer des données précédentes stockées dans l’emplacement mémoire (Loc) ; - un circuit de calculateur de décision (CAL) configuré : -- pour calculer une première quantification d’une première rafale d’opérations de programmation bit à bit correspondant aux bits des nouvelles données (NewDat) respectivement différents des bits des données précédentes, -- pour calculer une deuxième quantification d’une deuxième rafale d’opérations de programmation bit à bit correspondant aux bits d’une inversion complémentaire des nouvelles données (NewDat), respectivement différents des bits des données précédentes, -- pour tester si la première quantification est strictement supérieure à la deuxième quantification ; et - un circuit de programmation (PROG) configuré, si le test du circuit de calculateur de décision (CAL) est vrai, pour programmer bit à bit les bits de l’inversion complémentaire des nouvelles données (NewDat) respectivement différents des bits des données précédentes, et pour programmer ou maintenir un drapeau d’inversion dédié (InvFlg) au mot-mémoire (WD) à une valeur marquée. Circuit intégré selon la revendication 10, dans lequel le circuit de programmation (PROG) est configuré, pour chaque opération de programmation bit à bit, pour utiliser une impulsion d’initialisation (SET_PLS) ayant une durée d’impulsion d’initialisation (T_S) ou une impulsion de réinitialisation (RESET_PLS) ayant une durée d’impulsion de réinitialisation (T_R), et dans lequel le circuit de calculateur de décision (CAL) est configuré, pour calculer la première quantification (Q1) et la deuxième quantification (Q2), pour compter le nombre d’impulsions d’initialisation (n1, n2) et d’impulsions de réinitialisation (m1, m2) parmi les première rafale et deuxième rafale respectives d’opérations de programmation bit à bit, et pour calculer les valeurs de quantification respectives (Q1, Q2) proportionnellement aux durées cumulées (kn1+m1 ; kn2+m2) des opérations de programmation bit à bit dans chaque rafale respective. Circuit intégré selon l’une quelconque des revendications 10 et 11, dans lequel le circuit de calculateur de décision (CAL) est configuré pour calculer la première quantification (Q1) et la deuxième quantification (Q2) en prenant en compte l’opération de programmation du drapeau d’inversion (InvFlg). Circuit intégré selon l’une quelconque des revendications 10 à 12, dans lequel, lorsque la taille d’emplacement mémoire (Loc) est plus petite que la taille de mot-mémoire (WD) et lorsque le drapeau d’inversion (InvFlg) dédié au mot-mémoire (WD) doit être programmé, le circuit de calculateur de décision (CAL) est configuré pour calculer la première quantification (Q1) et la deuxième quantification (Q2) en tenant compte des opérations de programmation pour l’inversion de tous les autres bits appartenant au mot-mémoire (WD) en dehors de l’emplacement mémoire (Loc) ; et le circuit de programmation (PROG) est configuré pour programmer tous ces autres bits à leur état inversé complémentaire. Circuit intégré selon l’une quelconque des revendications 10 à 13, dans lequel la mémoire non volatile est configurée pour stocker chaque état binaire dans une cellule absolue adaptée pour avoir un état initialisé ou un état réinitialisé. Circuit intégré selon l’une quelconque des revendications 10 à 13, dans lequel la mémoire non volatile est configurée pour stocker chaque état binaire dans une paire de cellules différentielles adaptée pour stocker une paire orientée d’états complémentaires, le circuit de programmation (PROG) étant configuré pour utiliser une impulsion d’initialisation (SET_PLS) et une impulsion de réinitialisation (RESET_PLS) pour chaque opération de programmation bit à bit, et dans lequel la configuration du circuit de calculateur de décision (CAL) est remplacée par une configuration simplifiée équivalente adaptée : -- pour compter un premier nombre (N1) de bits respectivement différents entre les nouvelles données (NewDat) et les données précédentes (FormDat), et -- pour tester si le premier nombre (N1) est strictement supérieur à 50 % de la taille du mot-mémoire (WD). Circuit intégré selon l’une quelconque des revendications 10 à 15, dans lequel le moyen de gestion de données (DatMM) comprend un circuit de lecture (RD) configuré pour mesurer les bits des données stockées dans un emplacement mémoire (Loc) d’un mot-mémoire (WD) et, si le drapeau d’inversion (InvFlg) dédié au mot-mémoire (WD) a la valeur marquée, pour inverser chaque bit mesuré pour obtenir le bit complémentaire respectif. Circuit intégré selon la revendication 16, dans lequel le circuit de lecture (RD) comprend un mécanisme de code de correction d’erreurs (ECC) configuré pour être appliqué aux données stockées dans le mot-mémoire (WD) et au drapeau d’inversion dédié (InvFlg), et destiné à être exécuté avant d’inverser les bits mesurés. Circuit intégré selon l’une quelconque des revendications 10 à 17, dans lequel le circuit de programmation (PROG) est configuré, si le test du circuit de calculateur de décision (CAL) n’est pas vérifié, pour programmer bit à bit uniquement les bits des nouvelles données (NewDat) qui sont différents des bits respectifs des données précédentes (FormDat), ainsi que pour programmer ou maintenir le drapeau d’inversion (InvFlg) dédié au mot-mémoire (WD) à une valeur non marquée.