FR 2978592 A1 20130201 FR 1157006 A 20110729 B10874 - 11-ZV2-0063 1 COMPTEUR EN MEMOIRE NON VOLATILE Domaine de l'invention La présente invention concerne de façon générale les circuits électroniques, et plus particulièrement, la réalisation d'un compteur d'évènements ou de transactions en mémoire non volatile d'un circuit électronique. Exposé de l'art antérieur Des compteurs d'évènements dont la valeur est stockée en mémoire non volatile sont de plus en plus fréquents dans les circuits électroniques. Ces compteurs comptent et stockent de façon non volatile un nombre d'évènements ou de transactions. Un exemple est le comptage d'un nombre d'utilisations d'une fonction ou d'une application. Il peut également s'agir d'un compteur temporel destiné à compter et à stocker la durée d'utilisation d'une application d'un média, d'un circuit, etc. Il peut s'agir également d'un compteur garantissant l'unicité des données dans le cas d'une fonction cryptographique. On distingue ici les compteurs réalisés en mémoire non volatile, c'est-à-dire dont les bits du compteur sont directement constitués de cellules de mémoire non volatile, des zones mémoires stockant les résultats d'un calcul (ou d'un compteur réalisé en mémoire volatile), dont l'enregistrement du résultat ne s'effectue que lors du besoin de stockage de ce B10874 - 11-ZV2-0063 2 résultat en mémoire non volatile. La présente invention vise les compteurs de la première catégorie, c'est-à-dire les compteurs réalisés en mémoire non volatile. Les compteurs visés par les modes de réalisation qui vont être décrits sont des compteurs incrémentés d'un pas relativement faible par rapport à la valeur du compteur, typiquement d'un incrément compris entre 1 et 8. Un problème que l'on rencontre dans des compteurs de ce type réalisé en mémoire non volatile est lié à la durée de vie limitée des cellules de mémorisation en nombre d'écritures. En effet, les cellules de mémoire non volatile de type EEPROM ou FLASH ont un effet d'usure. Typiquement, une cellule en mémoire EEPROM supporte de l'ordre de 500 000 cycles d'écritures. Pour réaliser un compteur susceptible de compter un nombre de transactions supérieur à cette endurance, on est contraint d'utiliser plus de cellules de mémoire non volatile que le nombre requis en théorie. En particulier, à chaque incrément (en supposant un incrément d'une unité) il faut écrire une grande partie des bits ou au moins le bit de poids faible qui change de valeur à chaque transaction. Par exemple, un compteur susceptible d'aller jusqu'à 2 millions se réalise en théorie sur trois octets (souvent plus un octet pour un calcul de CRC). En pratique, il faut quatre fois plus de place, le compteur étant transféré vers quatre autres octets de la mémoire à chaque fois que le nombre maximum théorique de cycles d'écriture est atteint. Résumé Un objet d'un mode de réalisation de la présente invention est de pallier tout ou partie des inconvénients des 30 compteurs de transactions en mémoire non volatile. Un autre objet d'un mode de réalisation de la présente invention est de réduire le nombre de bits ou d'octets nécessaires pour la réalisation d'un tel compteur. Pour atteindre tout ou partie de ces objets ainsi que 35 d'autres, on prévoit un compteur en mémoire non volatile B10874 - 11-ZV2-0063 3 comportant au moins deux sous-compteurs comptant chacun avec un modulo différent, un incrément du compteur étant reporté sur un seul des sous-compteurs et les sous-compteurs étant séquentiellement incrémentés. Selon un mode de réalisation de la présente invention, le nombre maximum d'incréments d'un sous-compteur est choisi en fonction du nombre maximum de cycles d'écriture susceptibles d'être opérés sur une cellule de mémoire non volatile. Selon un mode de réalisation de la présente invention, le compteur comporte une fonction de sélection du sous-compteur à incrémenter. Selon un mode de réalisation de la présente invention, le compteur comporte une fonction de reconstitution du résultat du compteur en lecture. Selon un mode de réalisation de la présente invention, chaque sous-compteur comporte au moins un octet. On prévoit également un procédé de reconstitution du nombre stocké dans un tel compteur, dans lequel la fonction de reconstruction exploite le théorème des restes chinois. On prévoit également un circuit électronique intégrant un tel compteur. Brève description des dessins Ces objets, caractéristiques et avantages, ainsi que d'autres seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non-limitatif en relation avec les figures jointes parmi lesquelles : la figure 1 représente schématiquement un circuit électronique équipé d'une mémoire non volatile ; et la figure 2 illustre de façon schématique un mode de 30 réalisation d'un compteur de transactions. Description détaillée De mêmes éléments ont été désignés par de mêmes références aux différentes figures. Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de 35 réalisation décrits ont été représentés et seront exposés. En B10874 - 11-ZV2-0063 4 particulier, le type de transactions compté par le compteur n'a pas été détaillé, les modes de réalisation décrits étant compatibles avec les applications usuelles d'un compteur de transactions en mémoire non volatile. De plus, la réalisation d'un circuit électronique équipé d'une mémoire non volatile n'a pas non plus été détaillée, les modes de réalisation décrits étant là encore compatibles avec les circuits usuels. La figure 1 est un schéma bloc d'un mode de réalisation d'un circuit électronique équipé d'un compteur. La figure 1 est une représentation très schématique et partielle. Le circuit électronique comporte une unité de traitement (PU) 1 susceptible de communiquer par divers bus d'adresses 11 et de données 12 avec divers circuits du circuit électronique. Parmi ces circuits, une mémoire non volatile 2 (NVM) stocke des données et contient au moins un compteur de transactions. Ce compteur est un compteur directement réalisé dans la mémoire, c'est-à-dire qu'à chaque incrément ou décrément du compteur, au moins un bit d'éléments de mémorisation non volatile est mis à jour. De préférence, le compteur est un compteur monotonique (croissant ou décroissant) incrémenté (ou décrémenté) de une unité à chaque opération. La figure 2 illustre un mode de réalisation simplifié d'un compteur réalisé en mémoire non volatile. Selon cet exemple, le compteur 3 est divisé en trois zones mémoire 32, 33 et 34 ou sous-compteurs, respectivement sur deux bits pour la zone 32 et sur trois bits pour les zones 33 et 34. Le sous- compteur 32 effectue un comptage modulo 3. Le sous-compteur 33 effectue un comptage modulo 5 et le sous-compteur 34 un comptage modulo 7. A chaque incrémentation du nombre de transactions à compter par le compteur 3, on sélectionne l'un des compteurs 32, 33 ou 34 devant être incrémenté. Pour cela, une fonction 35 du circuit électronique, par exemple le logiciel exécuté au moyen de l'unité de traitement 1 (figure 1) ou un circuit logique dédié dans une réalisation matérielle, sélectionne l'un des B10874 - 11-ZV2-0063 trois compteurs (SELECT 0/1/2) à incrémenter. Cela signifie qu'à chaque nouvelle transaction, un seul des sous-compteurs est incrémenté. Les compteurs sont utilisés séquentiellement. Par conséquent, dans cet exemple, le nombre de cycle d'écritures 5 maximum supporté par une cellule de la mémoire non volatile est divisé par trois. Lorsque l'on souhaite lire le résultat C du compteur, la reconstitution requiert une fonction 36 de combinaison (COMB) prenant en compte les valeurs respectives des trois sous- compteurs 32, 33 et 34. Le tableau 1 ci-dessous illustre le fonctionnement du compteur de la figure 2. La première colonne représente le nombre C de transactions comptées par le compteur 3, la seconde colonne SELECT identifie le sous-compteur concerné par incrément de sa valeur suite à l'incrément du nombre de transactions (la valeur 0 est affectée au sous-compteur 32, la valeur 1 est affectée au sous-compteur 33 et la valeur 2 est affectée au sous-compteur 34). Les trois colonnes C32, C33 et C34 représentent les valeurs respectives prises par les sous- compteurs 32, 33 et 34 en tenant compte du fait qu'ils évoluent respectivement modulo 3, modulo 5 et modulo 7. TABLEAU 1 C SELECT C32 C33 C34 0 0 0 0 1 0 1 0 0 2 1 1 1 0 3 2 1 1 1 4 0 2 1 1 5 1 2 2 1 6 2 2 2 2 7 0 0 2 2 8 1 0 3 2 9 2 0 3 3 10 0 1 3 3 11 1 1 4 3 B10874 - 11-ZV2-0063 6 2 1 4 4 o 2 4 4 1 2 o 4 2 2 o 5 0 0 0 5 1 0 1 5 2 0 1 6 o 1 1 6 1 1 2 6 2 1 2 0 0 2 2 0 1 2 3 0 2 2 3 1 0 0 3 1 1 0 4 1 2 0 4 2 o 1 4 2 1 1 o 2 2 1 o 3 o 0 o 3 1 0 1 3 2 0 1 4 0 1 1 4 1 1 2 4 2 1 2 5 o 2 2 5 1 2 3 5 2 2 3 6 0 0 3 6 1 0 4 6 2 0 4 0 o 1 4 0 1 1 0 0 2 1 0 1 0 2 0 1 B10874 - 11-ZV2-0063 7 1 2 1 1 2 2 1 2 0 o 1 2 1 o 2 2 2 0 2 3 0 1 2 3 1 1 3 3 2 1 3 4 o 2 3 4 1 2 4 4 2 2 4 5 o 0 4 5 1 o 0 5 2 o 0 6 0 1 0 6 1 1 1 6 2 1 1 0 o 2 1 o 1 2 2 o 2 2 2 1 0 0 2 1 1 0 3 1 2 0 3 2 o 1 3 2 1 1 4 2 2 1 4 3 0 2 4 3 1 2 0 3 2 2 0 4 0 o 0 4 1 o 1 4 2 o 1 5 0 1 1 5 1 1 2 5 2 1 2 6 B10874 - 11-ZV2-0063 8 82 0 2 2 6 83 1 2 3 6 84 2 2 3 0 85 0 0 3 0 86 1 0 4 0 87 2 0 4 1 88 0 1 4 1 89 1 1 0 1 90 2 1 0 2 91 0 2 0 2 92 1 2 1 2 93 2 2 1 3 94 0 0 1 3 95 1 0 2 3 96 2 0 2 4 97 0 1 2 4 98 1 1 3 4 99 2 1 3 5 100 0 2 3 5 101 1 2 4 5 102 2 2 4 6 103 0 0 4 6 104 1 0 0 6 La valeur du compteur est obtenue, grâce à la fonction 36. Par exemple, pour trouver la valeur C = 19 (1, 1, 6) : C32 vaut 1, on peut avoir C = 1, 2, 3, 10, 11, 12, 19, 20, 21, etc. (le compteur 32 ne change qu'une fois sur trois). C33 vaut 1, on peut donc aussi avoir C = 2, 3, 4, 17, 18, 19, etc. (chaque série de trois est séparée de 15 (3*5)). C34 vaut 6, on peut donc aussi avoir C = 18, 19, 20, 39, 40, 41, 60, 61, 62, etc. (chaque série de trois est séparée de 21 (3*7)). La plus petite valeur commune aux trois compteurs est 19. La généralisation de ce fonctionnement à toutes les valeurs du compteur se déduit du théorème des restes chinois (CRT). B10874 - 11-ZV2-0063 9 Un compteur jusqu'à 127 requiert normalement sept bits. Ici, avec huit bits, on effectue ce compte, mais en divisant par trois le nombre maximal d'écritures supportées par un bit. L'exemple de la figure 2 et du tableau 1 est un exemple simplifié illustrant le fonctionnement d'un compteur. En pratique, le nombre de transactions comptées par le compteur est beaucoup plus important. La mise en oeuvre du compteur décrit a essentiellement un intérêt pour réaliser un compteur de transactions allant au-delà du nombre de cycles d'écriture supporté par l'élément de mémoire non volatile. Comme indiqué, une zone de mémoire de type EEPROM supporte généralement plusieurs centaines de milliers (typiquement de l'ordre de 500 000). Par exemple, on peut réaliser un compteur en utilisant trois octets de mémoire non volatile ayant une endurance de l'ordre de 1,5 millions de cycles (en supposant que chaque octet supporte 500 000 cycles d'écriture). On utilisera alors, par exemple, trois sous-compteurs comptant modulo 123, 127 et 128. La valeur maximale du compteur est alors de 1 511 426 et il subsiste, dans la structure, trois bits susceptibles d'être utilisés pour un contrôle de CRC. Selon un autre exemple de réalisation, un compteur peut être réalisé en utilisant cinq octets de mémoire non volatile pour compter jusqu'à 2 564 323 alors même que les éléments de mémoire ne supportent que 500 000 cycles d'écriture par octet. Selon cet exemple, les sous-compteurs comptent respectivement modulo 11, 27, 29, 31 et 32 et il subsiste, dans la structure, sept bits disponibles pour un calcul de CRC. La structure proposée permet, en utilisant seulement six octets de mémoire non volatile, de réaliser des compteurs de transactions allant jusqu'à des comptes d'environ 3 millions. Avec une structure classique et en supposant que chaque élément de mémorisation ne supporte que 500 000 cycles d'écriture, il B10874 - 11-ZV2-0063 10 faudrait dix-huit octets (chaque groupe de 3 octets ne pouvant servir que jusqu'à 500 000). L'exploitation du contenu des sous-compteurs requiert un décodage permettant de reconstituer le résultat. Ce décodage 5 revient à appliquer le raisonnement suivant. On note K le nombre de sous-compteurs (chacun des sous-compteurs sera généralement réalisé sous la forme d'un ou deux octets de mémoire non volatile) et un seul sous-compteur est modifié à chaque incrément du compteur. Chaque sous-compteur 10 est identifié par un index i (i compris entre 1 et K). On note Mi les modulos utilisés pour faire évoluer de manière cyclique les K sous-compteurs en mémoire non volatile. On note Pi le produit des modulos (Pi = IIMj pour j compris entre 1 et i). On note Ni (i compris entre 1 et K) les valeurs contenues dans les 15 différents sous-compteurs i. En notant C la valeur du compteur à reconstruire, on doit déterminer quel est celui des sous-compteurs qui a été incrémenté en dernier afin d'être en mesure d'obtenir cette valeur. On effectue en fait le calcul de reconstruction pour 20 chaque possibilité c'est-à-dire en considérant successivement que l'un i des sous-compteurs a été incrémenté en dernier. En supposant que le compteur N1 a été écrit en dernier, C modK = 1, dans la mesure où on met successivement à jour les compteurs Ni avec i croissant. Chaque compteur Ni a 25 donc été incrémenté (C-1)/K fois sauf le compteur N1 qui a été incrémenté une fois de plus. Au compte C-1, chaque valeur de compteur Ni valait C-1/K modMi dans la mesure où chaque Ni est incrémenté une fois sur K, et cycle modulo Mi. En résolvant successivement des équations modulaires (en appliquant la 30 théorie des restes chinois), on trouve les valeurs C-1/K d'où l'on déduit la valeur C toujours en supposant que le sous-compteur N1 a été écrit en dernier. On effectue le même calcul en supposant que les autres sous-compteurs ont été écrits en dernier. Enfin, la valeur la 35 plus petite donne la valeur du compteur. B10874 - 11-ZV2-0063 11 La valeur maximum susceptible d'être comptée par le compteur serait théoriquement égale au produit des modulos. Toutefois, en pratique, on peut dans certains cas retomber sur des configurations de valeurs de sous-compteurs déjà apparues avant l'apparition de ce maximum théorique. Par exemple, ceci se produit toujours quand une des cases est incrémentée et cycle vers 0 et que l'on retombe sur une des K premières configurations. Cette limite constitue simplement le compte maximum au-delà duquel on ne peut plus distinguer deux valeurs possibles du compteur. Toutefois, mécaniquement, le compteur continue à fonctionner. Par exemple, pour K=4 et en supposant que la valeur initiale des K cases est de 0 pour un compteur de 0, lorsque le compteur cycle vers zéro et que l'on retombe sur une des K 15 premières configurations, soit : 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0, cela signifie qu'on était dans une des configura- tions : M1-1 0 0 0 0 M2-1 0 0 0 0 M3-1 0 0 0 0 M4-1 1 M2-1 0 0 1 0 M3-1 0 1 0 0 M4-1 1 1 M3-1 0 1 1 0 M4-1 1 1 1 M4-1. Avec les indications ci-dessus, on peut reconstruire la valeur du compteur global dans toutes ces configurations. La plus petite des valeurs calculées ci-dessus donne la valeur 35 maximum utilisable du compteur. 20 25 30 B10874 - 11-ZV2-0063 12 Divers modes de réalisation ont été décrits, diverses variantes et modifications apparaîtront à l'homme de l'art. En particulier, la mise en oeuvre pratique du compteur et la détermination des tailles des zones en mémoire non volatile et des modulos utilisés dépendent de l'application et sont à la portée de l'homme du métier à partir des indications fonctionnelles données ci-dessus. REVENDICATIONS1. Compteur (3) en mémoire non volatile (2) comportant au moins deux sous-compteurs (32, 33, 34) comptant chacun avec un modulo différent, un incrément du compteur étant reporté sur un seul des sous-compteurs et les sous-compteurs étant séquen- tiellement incrémentés. 2. Compteur selon la revendication 1, dans lequel le nombre maximum d'incréments d'un sous-compteur (32, 33, 34) est choisi en fonction du nombre maximum de cycles d'écriture susceptibles d'être opérés sur une cellule de mémoire non volatile (2). 3. Compteur selon la revendication 1 ou 2, comportant une fonction (35) de sélection du sous-compteur à incrémenter. 4. Compteur selon l'une quelconque des revendications 1 à 3, comportant une fonction (36) de reconstitution du résultat du compteur en lecture. 5. Compteur selon l'une quelconque des revendications 1 à 4, dans lequel chaque sous-compteur comporte au moins un octet. 6. Procédé de reconstitution (36) du nombre stocké dans un compteur (3) conforme à l'une quelconque des revendications 1 à 5, dans lequel la fonction de reconstruction exploite le théorème des restes chinois. 7. Circuit électronique intégrant un compteur (3) conforme à l'une quelconque des revendications 1 à 5.