[go: up one dir, main page]

FR2831970A1 - Procede de memorisation de donnees avec correction d'erreur - Google Patents

Procede de memorisation de donnees avec correction d'erreur Download PDF

Info

Publication number
FR2831970A1
FR2831970A1 FR0114231A FR0114231A FR2831970A1 FR 2831970 A1 FR2831970 A1 FR 2831970A1 FR 0114231 A FR0114231 A FR 0114231A FR 0114231 A FR0114231 A FR 0114231A FR 2831970 A1 FR2831970 A1 FR 2831970A1
Authority
FR
France
Prior art keywords
word
words
error
bits
group
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
FR0114231A
Other languages
English (en)
Inventor
Michael Nicolaidis
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Iroc Technologies SA
Original Assignee
Iroc Technologies SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Iroc Technologies SA filed Critical Iroc Technologies SA
Priority to FR0114231A priority Critical patent/FR2831970A1/fr
Priority to FR0208626A priority patent/FR2831971A3/fr
Priority to PCT/FR2002/003758 priority patent/WO2003038620A2/fr
Priority to EP02793205A priority patent/EP1573541A2/fr
Priority to US10/494,080 priority patent/US7124348B2/en
Publication of FR2831970A1 publication Critical patent/FR2831970A1/fr
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

L'invention concerne un procédé de mémorisation de données permettant des détections et corrections d'erreur dans une mémoire organisée pour lire et écrire des mots d'un premier nombre (m) de bits et éventuellement pour modifier une partie seulement d'un tel mot, comprenant les étapes suivantes :associer un code de détection et de correction d'erreur à un groupe d'un deuxième nombre k >= 1 de mots; etassocier à chaque écriture une opération de vérification et, s'il y a lieu de correction d'erreur dans le groupe de mots associé au mot dans lequel on réalise une opération d'écriture totale ou partielle.

Description

<Desc/Clms Page number 1>
Figure img00010001
1 PROCÉDÉ DE MÉMORISATION DE DONNÉES AVEC CORRECTION D'ERREUR
Figure img00010002

La présente invention concerne l'organisation d'une mémoire associée à des moyens de correction d'erreur.
Etant donné la miniaturisation actuelle des circuits intégrés et notamment des circuits de mémoire, les points mémoire assurent la mémorisation de bits de données en agissant sur un nombre de porteurs de plus en plus petit. En conséquence, chaque point mémoire est de plus en plus susceptible d'être affecté d'une erreur, c'est-à-dire d'une inversion de la donnée mémorisée (passage de 0 à 1 ou de 1 à 0), notamment par suite d'une irradiation par des particules. Pour remédier à cet inconvénient on a développé des codes de correction d'erreur, chaque mot mémoire étant associé à un code de correction d'erreur. Quand on lit le contenu d'un mot et le code de correction d'erreur associé, et que l'on calcule un syndrome entre le mot mémorisé et le code de correction d'erreur, ce syndrome permet de déterminer si le mot est affecté d'une erreur ou non, de déterminer l'emplacement de l'erreur et de corriger cette erreur.
Des exemples de codes de correction d'erreur connus sont le code de Hamming et le code de Reed-Solomon. En calculant un syndrome entre le mot mémorisé et le code de correction d'erreur, on peut retrouver si le mot mémorisé est affecté d'une
<Desc/Clms Page number 2>
erreur et l'emplacement de l'erreur. Il est alors possible de corriger le mot mémorisé. On notera que l'on distingue les simples codes de détection d'erreur, par exemple l'association à un mot d'un bit de parité, qui permettent de détecter l'existence d'une erreur, des codes de correction d'erreur qui permettent de déterminer l'emplacement de l'erreur et donc de la corriger.
Un inconvénient évident de l'utilisation de codes de correction d'erreur réside dans la quantité de bits qu'ils nécessitent. Par exemple, pour des mots de plus de quatre bits, un code de Hamming nécessite n+1 bits pour permettre la correction d'une erreur, et seulement d'une erreur, dans un mot de 2n bits. Ceci signifie que, pour un mot de huit (23) bits, il faudra quatre bits de code, et même cinq bits si l'on ajoute au code de correction d'erreur un code de parité. Pour un mot de 64 (25) bits, il faudra cinq ou six bits de code de correction d'erreur. Il est clair que la surface occupée par la partie de la mémoire allouée au code de correction d'erreur dépend de la longueur des mots mémorisés et diminue quand cette longueur augmente.
Par contre, de nombreuses mémoires sont prévues pour faire des opérations sur des mots relativement courts.
D'autre part, on utilise souvent dans les mémoires des organisations dans lesquelles il est possible de changer seulement une portion d'un mot. C'est ce que l'on appelle des opérations masquables, c'est-à-dire que l'on prévoit un masque lors d'une opération d'écriture pour n'affecter que certains des bits d'un mot. Il se pose alors un problème qui est que le code de correction d'erreur du mot modifié ne correspond plus à ce mot. Ceci amène à associer un code de correction d'erreur à chaque bit d'un mot, ce qui nécessite comme on l'a vu ci-dessus une utilisation de mots de code extrêmement longs par rapport aux mots mémorisés.
Ainsi, un objet de la présente invention est de prévoir une organisation de mémoire associée à un système de correction d'erreur dans laquelle on puisse utiliser des mots de
<Desc/Clms Page number 3>
courte longueur tout en utilisant un nombre de bits de code de correction d'erreur raisonnable, sans augmenter excessivement la complexité ou la consommation du circuit.
Un autre objet de la présente invention est de prévoir une organisation de mémoire dans laquelle on puisse réaliser des opérations masquables et utiliser de façon simple un système de correction d'erreur.
Pour atteindre ces objets, la présente invention prévoit un procédé de mémorisation de données permettant des détections et corrections d'erreur dans une mémoire organisée pour lire et écrire des mots d'un premier nombre (m) de bits et éventuellement pour modifier une partie seulement d'un tel mot, comprenant les étapes suivantes : associer un code de détection et de correction d'erreur à un groupe d'un deuxième nombre k > l de mots ; et associer à chaque écriture une opération de vérification et, s'il y a lieu, de correction d'erreur dans le groupe de mots associé au mot dans lequel on réalise une opération d'écriture totale ou partielle.
Selon un mode de réalisation de la présente invention, chaque mot est un mot long de M bits comprenant un troisième nombre déterminé r de mots élémentaires à m bits.
Selon un mode de réalisation de la présente invention, un code de détection d'erreur est associé à chaque mot ; et chaque opération d'écriture est précédée d'une lecture du mot considéré et de son code de détection d'erreur et, en cas d'erreur, de la lecture du groupe de mots et du code de correction d'erreur en vue de la correction des erreurs et de la modification du code de correction d'erreur.
Selon un mode de réalisation de la présente invention, on effectue une écriture dans seulement au moins un bit d'un mot, ou dans seulement les m bits d'un mot élémentaire d'un mot long, et on procède aux étapes suivantes : lire les autres bits du groupe de mots, calculer les codes de correction d'erreur pour ces autres bits et pour toutes
<Desc/Clms Page number 4>
les valeurs possibles des positions de bits dans lesquelles on écrit, et déterminer celle des valeurs possibles pour laquelle on obtient une erreur minimale ; et si cette erreur minimale est nulle, considérer que l'écriture a réussi et calculer un nouveau code de correction d'erreur ; si cette erreur minimale est non nulle, corriger les bits en erreur aux positions autres que celles où on a écrit et calculer un nouveau code de correction d'erreur.
Selon un mode de réalisation de la présente invention, le procédé est appliqué à un mot constituant à lui seul le groupe de mots.
Selon un mode de réalisation de la présente invention, des erreurs sont susceptibles de survenir dans un seul mot d'un groupe de mots, un code de détection d'erreur est associé à chaque mot, et le code de correction d'erreur est calculé sous forme d'un OU Exclusif des codes de correction d'erreur de chaque mot.
Selon un mode de réalisation de la présente invention, on effectue une écriture dans seulement au moins un bit d'un mot d'un groupe de mots, et on associe au groupe de mots un code de calcul susceptible de reconstituer les bits du mot dans lequel on écrit à partir des valeurs des autres mots du groupe de mots et un code de correction capable de corriger des erreurs éventuelles dans le groupe de mots comprenant le mot reconstitué, ces erreurs éventuelles comprenant les erreurs affectant un des mots du groupe de mots initial ainsi que les erreurs induites par ces erreurs dans le mot reconstitué.
La présente invention prévoit aussi une mémoire pour la mise en oeuvre du procédé comprenant des moyens pour simultanément écrire dans des portions d'un mot ou dans un mot élémentaire d'un mot long et lire le reste des bits du mot long ou du groupe de mots.
Ces objets, caractéristiques et avantages, ainsi que d'autres de la présente invention seront exposés en détail dans
<Desc/Clms Page number 5>
la description suivante de modes de réalisation particuliers faite à titre non-limitatif en relation avec les figures jointes parmi lesquelles : les figures 1 à 3 illustrent des structures de blocs mémoire selon la présente invention.
Comme le représente la figure 1, étant donné une mémoire prévue pour lire et écrire normalement des mots de m bits, la présente invention prévoit d'associer à un groupe de k mots, c'est-à-dire un ensemble de k. m bits, un code de correction d'erreur unique EC. Ainsi, on utilise un code de correction d'erreur pour un ensemble de k. m bits et non plus k codes de correction d'erreur dont chacun correspond à un ensemble de m bits. Comme on le déduira des exemples numériques donnés cidessus, ceci réduit beaucoup la dimension occupée en mémoire pour la correction d'erreur. Bien entendu, ceci se fait au prix d'une légère augmentation de la surface occupée par les moyens de calcul du code de correction d'erreur. Néanmoins cette augmentation est négligeable puisque les mêmes moyens de calcul sont utilisés et déterminent les codes de correction pour tous les blocs mémoire.
En outre, selon un mode de réalisation de la présente invention, on adjoint à chaque mot de m bits, un code de détection d'erreur ED, par exemple, dans le cas où il ne peut pas y avoir plus d'une erreur par mot, un simple bit de parité.
Selon une variante de la présente invention, illustrée en figure 2, dans le cas de mots courts, par exemple des mots de 4 bits (m=4), on groupera de préférence les mots courts en mots longs de r. m = M bits (par exemple 64 bits) et on associera un code de détection d'erreur, par exemple un code de parité, ED, seulement à chaque mot long. k mots longs seront alors assemblés en un groupe de mots de k. M bits auquel est associé un code de correction d'erreur EC. Dans ce qui suit, sauf indication spécifique, le terme "mot" pourra être interprété comme désignant un mot court ou un mot long.
<Desc/Clms Page number 6>
Par exemple, si dans un système on est supposé utiliser une mémoire dont le mot est de 4 bits, on doit prévoir 3 bits supplémentaires par mot pour implémenter le code de Hamming. Pour réduire ce coût, on a intérêt à introduire des mots longs et à maximiser leur taille pour minimiser le coût du code, mais on ne veut pas utiliser des mots longs de très grande taille pour éviter une consommation très élevée lors d'une lecture. On peut choisir par exemple des mots longs de 64 bits (r = 16). Ensuite, on peut choisir des groupes d'une taille encore plus grande (par exemple des groupes de 4 mots longs). Dans ce cas, on va associer un bit de parité par mot long, et un code de Hamming (9 bits) par groupe de mots. Ceci donne un coût égal à 1/64 + 9/256 = 9,75% au lieu de 75% pour un code de Hamming par mot de 4 bits.
Le nombre de bits d'un mot d'une mémoire est généralement déterminé selon des contraintes fonctionnelles et de vitesse d'opération du système dans lequel la mémoire est insérée. Pour la mise en oeuvre de la présente invention, on va modifier la mémoire pour augmenter la taille du mot qu'on va pouvoir lire dans un cycle de lecture. On obtient ainsi des mots longs composés de r mots de m bits que l'on pourra lire en un seul cycle. Ainsi, quand le système active un cycle de lecture destiné à un mot de m bits, on va lire un mot long de r. m bits qui contient le mot auquel la lecture est destinée, on va fournir au système ce mot de m bits, et on va utiliser localement le mot long de r. m bits pour les besoins de détection et/ou de correction des erreurs.
Une mémoire normalement prévue pour des mots de m bits ne peut pas faire des lectures sur r mots de m bits, ce qui est nécessaire si on veut utiliser des mots longs. Il faut donc modifier la mémoire ce qui entraîne normalement un rallongement du temps de conception du système. Néanmoins, on trouve de plus en plus, dans des générateurs de mémoire connus, des mémoires à opérations masquables. On peut alors choisir une telle mémoire utilisant des mots de r. m bits, de façon à pouvoir faire la
<Desc/Clms Page number 7>
lecture sur le mot long, ainsi que des opérations d'écriture masquable qui permettront d'écrire sur les m bits d'un mot court ou sur un sous-ensemble de ces bits dans le cas où la mémoire d'origine permet de faire des opérations masquables sur un sousensemble des m bits du mot.
LECTURE D'UN MOT
Pour lire un mot (court ou long), on procède de façon usuelle, à savoir que l'on commence par analyser son code de détection d'erreur. Dans la majorité des cas, il n'y aura pas d'erreur et le mot est lu normalement. S'il y a une erreur, on lit tous les mots du groupe de mots et on identifie la position de l'erreur en calculant le syndrome avec le code de correction d'erreur. L'erreur est alors corrigée à la position indiquée. On évite ainsi de lire un groupe complet à chaque lecture et, en temps normal, une lecture n'est pas plus longue qu'avec une organisation de mémoire classique.
Dans le cas de certains types de mémoires, on pourra préférer ne pas adjoindre de bit de détection d'erreur à chaque mot et on lira systématiquement un groupe de mots à chaque lecture.
ECRITURE D'UN MOT
Le problème est un peu plus complexe lors d'une écriture. En effet, à chaque écriture d'un nouveau mot, il faut modifier le code de correction d'erreur du groupe de mots pour adapter ce code de correction d'erreur du groupe au mot modifié du groupe. On va proposer ci-après deux modes de réalisation de l'invention pour résoudre ce problème.
Premier mode de réalisation d'une écriture
Avant chaque écriture, on commence par lire le mot considéré, et on examine si son code de détection ED indique une erreur ou non. Si un code de détection d'erreur n'est pas associé à chaque mot, on lira le groupe de mots et le code de correction d'erreur correspondant. S'il y a une erreur, on commence par corriger le mot lu de la façon indiquée ci-dessus en relation avec l'opération de lecture. Ensuite, le mot lu
<Desc/Clms Page number 8>
initial ou le mot lu corrigé ayant été mémorisé temporairement dans un registre, on modifie le code de correction d'erreur en tenant compte de la comparaison entre chaque bit du mot initial ou du mot corrigé et chaque bit du mot nouvellement écrit. Ceci peut être fait de façon classique par des réseaux de portes OU Exclusif (XOR). On notera que ce procédé convient que l'on réécrive un mot complet à la place du mot préexistant ou que l'on réécrive seulement quelques bits d'un mot (écriture masquée).
L'opération de modification du code de correction d'erreur peut se faire en même temps que la réécriture du mot sans perdre un temps de cycle. Toutefois, cette opération nécessite que l'on procède à une lecture (au moins d'un mot, dans le cas où il n'y a pas d'erreur) avant chaque écriture.
En pratique l'augmentation du temps de cycle liée à la nécessité de réaliser la lecture d'un mot avant une écriture n'est dans de nombreux cas pas une pénalité car de nombreuses mémoires prévoient systématiquement la réalisation d'une lecture avant une écriture ou un temps de cycle mort après ou avant chaque écriture.
Par ailleurs, certaines mémoires, par exemple des mémoires cache, utilisent de façon standard un cycle de lecture avant un cycle d'écriture. Dans ce cas, les techniques présentées n'introduisent pas de réduction des performances du système. D'autre part, lire plusieurs mots avant une écriture est intéressant parce qu'on peut stocker ces mots dans un tampon, et si par la suite on vient de lire un de ces mots, on pourra faire une lecture très rapide en lisant le mot dans le tampon. On pourra aussi écrire plusieurs mots dans le tampon avant d'écrire tout le mot long dans la mémoire. Cette technique est souvent utilisée pour augmenter la vitesse des opérations de lecture ou d'écriture. Ainsi, les impératifs de réduction du coût du code se combinent avec des impératifs d'augmentation de la vitesse.
<Desc/Clms Page number 9>
Selon un aspect de la présente invention, on modifie le fonctionnement de la mémoire pour pouvoir lire et écrire un mot ou mot long ou une partie de celui-ci dans le même cycle d'accès mémoire. Ceci est possible, car, le mot ou le mot long étant sélectionné au début du cycle, on active d'abord les amplificateurs de lecture pour pouvoir lire le mot ou le mot long, et on active ensuite les amplificateurs d'écriture de tous les bits du mot ou du mot long ou une partie de celui, pour effectuer une écriture non masquable ou masquable. Cette modification élimine le cycle de lecture qui doit précéder un cycle d'écriture, mais la durée du cycle sera prolongée.
Dans certaines mémoires, par exemple des mémoires DRAM, le cycle comportant une lecture suivie d'une écriture existe de façon standard pour des raisons propres au fonctionnement de la mémoire. On pourra donc choisir d'utiliser une telle mémoire et éviter ainsi le temps et le coût nécessaires au développement d'une nouvelle famille de mémoires supportant un tel cycle.
Selon une variante de ce premier mode de réalisation de la présente invention, dans le cas où l'on suppose qu'il ne peut pas y avoir plus d'un mot affecté d'erreurs dans un groupe de k mots de m bits, plutôt que d'utiliser un code de correction d'erreur associé aux k. m bits, on pourra calculer un code de correction d'erreur pour chaque mot de m bits, et prendre comme code de correction d'erreur du groupe de mots la fonction OU Exclusif (XOR) des k codes calculés. L'indication des mots dans lesquels existera l'erreur éventuelle sera donnée par le code de détection d'erreur (ED) associé à chaque mot. Bien entendu, dans ce cas, si plus d'un code de détection d'erreur associé à plus d'un mot indique une erreur, on saura que l'on est en présence d'une erreur non corrigeable.
Deuxième mode de réalisation d'une écriture
Selon un deuxième mode de réalisation de la présente invention, on cherche à éviter de lire des bits à des positions
<Desc/Clms Page number 10>
de bit où l'on doit ensuite écrire pour éviter les inconvénients susmentionnés du premier mode de réalisation. Pour cela, on calcule le nouveau code correcteur d'erreur (et le nouveau code détecteur d'erreur le cas échéant), en utilisant la valeur des bits à écrire, la valeur des autres bits du mot, du mot long ou du groupe de mots, et la valeur du code correcteur d'erreur (et du code détecteur d'erreur le cas échéant). L'invention prévoit aussi de détecter et corriger une erreur dans les bits lus avant de les utiliser pour calculer le nouveau code.
Ce deuxième mode de réalisation s'applique plus particulièrement dans le cas où les mots sont courts et/ou où on fait une écriture masquée, c'est-à-dire où on fait une écriture seulement dans certains bits d'un mot. Par exemple, comme l'illustre la figure 3, on veut faire une écriture dans les deux positions de bits marquées d'une croix du deuxième mot, ou dans un"mot court"constituant un élément d'un"mot long".
Selon ce deuxième mode de réalisation, chaque fois que l'on veut faire une écriture masquée dans un mot, on effectue simultanément l'écriture des positions de bits choisies et la lecture des autres positions de bits du mot considéré et des autres mots du groupe de mots correspondant. On pourra adapter de nombreuses mémoires existantes à la mise en oeuvre de la présente invention. Par exemple, il est relativement simple de modifier une mémoire existante pour, chaque fois qu'on adresse un mot, connecter les positions de bits dans lesquelles on veut écrire à un amplificateur d'écriture et les autres positions de bits du même mot à un amplificateur de lecture.
Selon une première variante de ce deuxième mode de réalisation, on considère les bits lus et on donne toutes les valeurs possibles aux bits modifiés par l'opération d'écriture. Pour chacune de ces valeurs, on détermine le syndrome du groupe de mots considéré avec le code de correction d'erreur. Il est clair que, parmi toutes les valeurs possibles, il y a la valeur des bits initiaux. Alors, pour cette valeur, s'il n'y a d'erreur dans aucun des bits lus du groupe, on aura une indication
<Desc/Clms Page number 11>
d'erreur nulle. On saura alors que le nouveau code de correction d'erreur peut être calculé valablement à partir des bits nouvellement écrits et des bits lus. Si le minimum du nombre d'erreurs détecté est non nul, on saura qu'il y a une erreur dans les bits non écrits du mot ou dans les autres mots courts d'un mot long, et pour cette valeur minimum, on procédera à une correction d'erreur avant de procéder de la façon indiquée ci-dessus.
Ceci implique bien entendu d'utiliser un code de correction d'erreur qui permet de détecter des erreurs multiples ou au moins de détecter si le nombre d'erreurs est supérieur ou inférieur à un seuil déterminé. On notera que ceci permet de détecter une erreur ou bien dans le mot dans lequel on fait une écriture partielle ou bien dans un autre mot du même groupe de mots.
Le deuxième mode de réalisation de l'invention s'applique aussi avantageusement au cas où l'on réalise des opérations d'écriture masquée sur des groupes de mots constitués d'un seul (k=l) mot long, tel que défini précédemment.
Selon une deuxième variante de ce deuxième mode de réalisation, le code associé au mot ou au mot long est capable de détecter une erreur dans les bits lus du mot ou du mot long, combinée avec n'importe quelle erreur dans les bits visés par l'écriture, et de distinguer le mot ou le mot long qui contient uniquement l'erreur dans les bits lus, des mots ou mots longs qui contiennent l'erreur dans les bits lus ainsi que des erreurs quelconques dans les bits du mot ou du mot long visés par l'écriture.
Si 11 erreur dans les bits lus du mot ou du mot long peut affecter au maximum t bits, si le nombre maximum de bits du mot affectés par une écriture est q, on prévoit que le code associé au mot ou au mot long peut détecter toute erreur de multiplicité inférieure ou égale à q+t, et parmi tout groupe d'erreurs dont les multiplicités sont supérieures à 0 et inférieurs ou égales à q+t, peut distinguer l'erreur ayant la plus
<Desc/Clms Page number 12>
petite multiplicité, et peut corriger dans un mot ou mot long toute erreur dont la multiplicité ne dépasse pas t.
Selon un aspect de la présente invention, pendant une écriture sur certains bits d'un mot ou d'un mot long, on utilise le code du mot ou du mot long pour vérifier tous les mots ou mots longs formés en utilisant toutes les valeurs possibles pour les positions du mot ou du mot long visées par l'écriture ainsi que les valeurs lues dans les autres positions du mot ou du mot long. Si cette vérification indique un mot ou mot long sans erreur, alors les bits lus ne contiennent pas d'erreur. On utilise donc les valeurs des bits lus, les valeurs des bits écrits et le code lu pour calculer le nouveau code. Si par contre cette vérification ne trouve pas de mot ou mot long sans erreur, alors il y a une erreur dans les bits lus et on doit la corriger avant de calculer le nouveau code. Le mot contenant des erreurs uniquement dans les positions lus étant distingué par le code, on utilisera le code pour corriger l'erreur dans ce mot et obtenir ainsi les valeurs correctes dans les bits lus.
Dans un mode de réalisation de la présente invention, nous considérons des mémoires telles que à chaque cycle d'écriture on écrit soit sur un seul bit du mot ou du mot long soit sur tous les bits du mot (cas des mémoires ayant des mots à un bit dans lesquelles on forme des mots longs comportant r mots d'un bit, r > l, ou cas des mémoires utilisant des mots à m bits, comportant soit des écritures opérant sur tous les bits du mot, soit des écritures masquables opérant sur un seul bit du mot).
Les erreurs prises en compte sont des erreurs affectant un seul bit du mot ou du mot long. Selon ce mode de réalisation, le code correcteur d'erreurs associé au mot ou au mot long est un code correcteur d'erreurs simples capable de distinguer les erreurs doubles des erreurs simples (par exemple, code de Hamming augmenté par le bit de parité du mot ou du mot long et de son code). Quand on écrit sur tous les bits du mot ou du mot long, le nouveau code du mot ou du mot long est calculé de façon standard. Quand on écrit sur un seul bit, on vérifie avec le
<Desc/Clms Page number 13>
code deux mots ou mots longs, l'un est formé en associant aux bits lus la valeur 0 pour le bit à écrire, l'autre est formé en associant aux bits lus la valeur 1 pour le bit à écrire. Si l'une de ces vérifications ne détecte pas d'erreur, alors les bits lus sont corrects et peuvent être utilisés pour calculer le code. Si on détecte des erreurs sur les deux mots, alors le mot pour lequel on a détecté une erreur simple contient la bonne valeur pour le bit visé par l'écriture. On utilise le code pour corriger l'erreur dans ce mot. On utilise alors les bits lus obtenus dans le mot corrigé, les valeurs à écrire dans les bits visés par l'écriture et l'ancien code, pour calculer le nouveau code.
Selon un aspect de la présente invention, les écritures peuvent se faire sur tous les bits d'un mot à m bits d'un mot long, ou sur un sous-ensemble de ces bits (écriture masquée). Les erreurs prises en compte peuvent affecter un seul mot d'un mot long. On associe à chaque mot long un code appelé "code de calcul", capable de calculer les valeurs des bits d'un mot, en utilisant les valeurs des bits des autres mots du mot long, ainsi qu'un code appelé"code de correction"capable de détecter et de corriger une erreur dans un mot du mot long combinée avec l'erreur introduite dans un autre mot du mot long (le mot à écrire) quand ce mot est calculé en utilisant le code de calcul et les autres mots du mot long qui incluent alors le mot erroné.
On prévoit que le code de calcul peut détecter ses propres erreurs. En cas de détection d'erreurs dans ce code, nous allons considérer qu'il n'y a pas d'erreur dans les mots lus du mot long (étant donné qu'on suppose qu'une erreur ne peut pas affecter deux mots du mot long ni un mot et le code). On évite ainsi d'introduire une erreur dans les bits lus en essayant de les corriger avec un code de calcul erroné.
On considère le cas où les erreurs prises en compte sont des erreurs susceptibles d'affecter un seul bit d'un mot long. Le code de calcul comporte m bits. Le bit de position i de
<Desc/Clms Page number 14>
ce code est égal à la parité des bits de position i de tous les mots du mot long. Afin de pouvoir détecter des erreurs dans ce code, on lui associe un bit qui calcule sa parité (on peut observer que la parité du code de calcul est aussi la parité du mot long). La nature du code de correction sera spécifiée plus loin. Lors d'une écriture masquée ou non masquée d'un mot, on lit en même temps tous les bits non écrits du mot long associé au mot écrit, ainsi que le code de calcul avec sa parité et le code de correction. On vérifie le code de calcul en utilisant sa parité. Si on détecte une erreur, on considère qu'il n'y a pas d'autres erreurs dans le mot long (hypothèse d'une erreur simple), on utilise alors la valeur des bits lus et des bits écrits pour calculer le nouveau code de calcul avec sa parité et le nouveau code de correction. Si on ne détecte pas d'erreurs dans le code de calcul, on calcule les bits du mot visé par l'écriture, en utilisant le code de calcul et les mots du mot long non visés par l'écriture. On a alors un mot long complet et on peut utiliser le code de correction pour détecter les erreurs dans ce mot long et les corriger. Le mot long sera erroné s'il y a une erreur (par hypothèse simple) sur un mot lu. Comme la valeur des bits du mot visé par l'écriture est calculée en utilisant entre autres le mot lu erroné, on aura aussi une erreur sur le mot visé par l'écriture à la même position que l'erreur sur le mot lu erroné. On peut utiliser un code correcteur d'erreurs doubles en tant que code de correction. Ce code permet de détecter une erreur double et le cas échéant de la corriger.
On utilisera alors les bits lus corrects et les bits écrits pour calculer les nouveaux codes. Néanmoins, un code correcteur d'erreurs doubles est beaucoup plus coûteux que le code de Hamming. Pour réduire le coût on utilisera le code de Hamming.
Il permet de détecter une erreur double, mais est en principe incapable de la corriger. Néanmoins, on observe que les erreurs doubles considérées affectent une position d'un mot connu (le mot visé par l'écriture) et la même position d'un mot inconnu.
On peut pour chaque mot visé par l'écriture calculer préalable-
<Desc/Clms Page number 15>
ment les syndromes du code de Hamming pour toutes les erreurs doubles ayant cette propriété. Il y a m (r-l) couples d'erreurs et syndromes correspondants pour chaque mot visé par l'écriture.
On peut alors créer un tableau et stocker pour chaque syndrome l'erreur double correspondante. Alors, lors de la correction d'une erreur double, on calcule son syndrome et on recherche dans le tableau l'erreur double correspondante pour la corriger.
Néanmoins, quelques-unes de ces erreurs doubles peuvent avoir le même syndrome, on augmente alors le code de Hamming en rajoutant des bits supplémentaires permettant de différencier les syndromes pour ce couple. Souvent, un seul bit supplémentaire suffira, mais un plus grand nombre de bits peut être nécessaire dans certains cas.
Ces techniques ont été présentées dans le cadre de mémoires simple-accès mais l'homme de métier pourra facilement les adapter pour des mémoires à plusieurs accès (multi-ports) en les appliquant sur chaque accès d'une telle mémoire.
Le deuxième mode de réalisation de la présente invention présente l'avantage par rapport au premier de ne pas rajouter de temps de cycle dans le cas où aucune erreur n'est détectée. Bien entendu, si une erreur est détectée, il faudra effectuer la correction d'erreur mais ceci se produit également dans le cas d'une mémoire à code de correction d'erreur classique.
L'invention est susceptible de diverses variantes et modifications qui apparaîtront à l'homme de l'art. En particulier, la présente invention présente des avantages même si k=l pour améliorer les opérations d'écriture masquée dans des mémoires à code de correction d'erreur.

Claims (9)

REVENDICATIONS
1. Procédé de mémorisation de données permettant des détections et corrections d'erreur dans une mémoire organisée pour lire et écrire des mots d'un premier nombre (m) de bits et éventuellement pour modifier une partie seulement d'un tel mot, comprenant les étapes suivantes : associer un code de détection et de correction d'erreur à un groupe d'un deuxième nombre k > -l de mots ; et associer à chaque écriture une opération de vérification et, s'il y a lieu, de correction d'erreur dans le groupe de mots associé au mot dans lequel on réalise une opération d'écriture totale ou partielle.
2. Procédé selon la revendication 1, caractérisé en ce que chaque mot est un mot long de M bits comprenant un troisième nombre déterminé r de mots élémentaires à m bits.
3. Procédé selon la revendication 1 ou 2, caractérisé en ce que : un code de détection d'erreur est associé à chaque mot ; et chaque opération d'écriture est précédée d'une lecture du mot considéré et de son code de détection d'erreur et, en cas d'erreur, de la lecture du groupe de mots et du code de correction d'erreur en vue de la correction des erreurs et de la modification du code de correction d'erreur.
4. Procédé selon la revendication 1 réalisé dans une mémoire à double accès.
5. Procédé selon la revendication 1 ou 2, dans lequel on effectue une écriture dans seulement au moins un bit d'un mot, ou dans seulement les m bits d'un mot élémentaire d'un mot long, caractérisé en ce qu'il comprend les étapes suivantes : lire les autres bits du groupe de mots, calculer les codes de correction d'erreur pour ces autres bits et pour toutes les valeurs possibles des positions de bits dans lesquelles on écrit, et déterminer celle des valeurs possibles pour laquelle on obtient une erreur minimale ; et
<Desc/Clms Page number 17>
si cette erreur minimale est nulle, considérer que l'écriture a réussi et calculer un nouveau code de correction d'erreur ; si cette erreur minimale est non nulle, corriger les bits en erreur aux positions autres que celles où on a écrit et calculer un nouveau code de correction d'erreur.
6. Procédé selon la revendication 5, caractérisé en ce qu'il est appliqué à un mot constituant à lui seul le groupe de mots.
7. Procédé selon l'une quelconque des revendications 1 à 6, dans lequel des erreurs sont susceptibles de survenir dans un seul mot d'un groupe de mots, et dans lequel un code de détection d'erreur est associé à chaque mot, caractérisé en ce que le code de correction d'erreur est calculé sous forme d'un OU Exclusif des codes de correction d'erreur de chaque mot.
8. Procédé selon la revendication 1 ou 2, dans lequel on effectue une écriture dans seulement au moins un bit d'un mot d'un groupe de mots, et dans lequel on associe au groupe de mots un code de calcul susceptible de reconstituer les bits du mot dans lequel on écrit à partir des valeurs des autres mots du groupe de mots et un code de correction capable de corriger des erreurs éventuelles dans le groupe de mots comprenant le mot reconstitué, ces erreurs éventuelles comprenant les erreurs affectant un des mots du groupe de mots initial ainsi que les erreurs induites par ces erreurs dans le mot reconstitué.
9. Mémoire pour la mise en oeuvre du procédé selon l'une quelconque des revendications 5 à 8, caractérisée en ce qu'elle comprend des moyens pour simultanément écrire dans des portions d'un mot ou dans un mot élémentaire d'un mot long et lire le reste des bits du mot long ou du groupe de mots.
FR0114231A 2001-11-02 2001-11-02 Procede de memorisation de donnees avec correction d'erreur Withdrawn FR2831970A1 (fr)

Priority Applications (5)

Application Number Priority Date Filing Date Title
FR0114231A FR2831970A1 (fr) 2001-11-02 2001-11-02 Procede de memorisation de donnees avec correction d'erreur
FR0208626A FR2831971A3 (fr) 2001-11-02 2002-07-09 Procede de memorisation de donnees avec correction d'erreur
PCT/FR2002/003758 WO2003038620A2 (fr) 2001-11-02 2002-10-31 Procede de memorisation de donnees avec correction d'erreur
EP02793205A EP1573541A2 (fr) 2001-11-02 2002-10-31 Procede de memorisation de donnees avec correction d'erreur
US10/494,080 US7124348B2 (en) 2001-11-02 2002-10-31 Data storage method with error correction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR0114231A FR2831970A1 (fr) 2001-11-02 2001-11-02 Procede de memorisation de donnees avec correction d'erreur

Publications (1)

Publication Number Publication Date
FR2831970A1 true FR2831970A1 (fr) 2003-05-09

Family

ID=8869029

Family Applications (1)

Application Number Title Priority Date Filing Date
FR0114231A Withdrawn FR2831970A1 (fr) 2001-11-02 2001-11-02 Procede de memorisation de donnees avec correction d'erreur

Country Status (1)

Country Link
FR (1) FR2831970A1 (fr)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3573728A (en) * 1969-01-09 1971-04-06 Ibm Memory with error correction for partial store operation
US3814921A (en) * 1972-11-15 1974-06-04 Honeywell Inf Systems Apparatus and method for a memory partial-write of error correcting encoded data
EP0491073A1 (fr) * 1990-12-18 1992-06-24 Siemens Nixdorf Informationssysteme Aktiengesellschaft Méthode et procédé de protection de données dans des unités de mémoire
WO2001014971A1 (fr) * 1999-08-04 2001-03-01 Sun Microsystems, Inc. Systeme et procede de detection d'erreurs type double bit et de correction de telles erreurs imputables a des defaillances de composants

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3573728A (en) * 1969-01-09 1971-04-06 Ibm Memory with error correction for partial store operation
US3814921A (en) * 1972-11-15 1974-06-04 Honeywell Inf Systems Apparatus and method for a memory partial-write of error correcting encoded data
EP0491073A1 (fr) * 1990-12-18 1992-06-24 Siemens Nixdorf Informationssysteme Aktiengesellschaft Méthode et procédé de protection de données dans des unités de mémoire
WO2001014971A1 (fr) * 1999-08-04 2001-03-01 Sun Microsystems, Inc. Systeme et procede de detection d'erreurs type double bit et de correction de telles erreurs imputables a des defaillances de composants

Similar Documents

Publication Publication Date Title
FR2831971A1 (fr) Procede de memorisation de donnees avec correction d&#39;erreur
US7149949B2 (en) Method for error correction decoding in a magnetoresistive solid-state storage device
FR2858101A1 (fr) Systeme de memoire flash
FR2938358A1 (fr) Interface de memoire securisee
FR2641402A1 (fr)
FR2810152A1 (fr) Memoire eeprom securisee comprenant un circuit de correction d&#39;erreur
FR3038752A1 (fr)
EP3293637A1 (fr) Gestion d&#39;index dans une mémoire flash
US7949933B2 (en) Semiconductor integrated circuit device
FR3044817A1 (fr) Procede de gestion d&#39;une ligne de bits defectueuse du plan memoire d&#39;une memoire non volatile et dispositif de memoire correspondant
WO2014060096A1 (fr) Procédé de gestion d&#39;une mémoire flash
EP1880387B1 (fr) Dispositif de protection d&#39;une memoire contre les attaques par injection d&#39;erreur
FR2781918A1 (fr) Memoire rom a correction par redondance
WO2015086845A1 (fr) Systeme d&#39;ecriture de donnees dans une mémoire
FR2831970A1 (fr) Procede de memorisation de donnees avec correction d&#39;erreur
FR3051574A1 (fr) Gestion du stockage dans une memoire flash
EP0606796B1 (fr) Procédé de programmation en champ uniforme d&#39;une mémoire électriquement programmable et mémoire mettant en oeuvre le procédé
EP0769854B1 (fr) Système permettant un décodage correct, sous forme d&#39;un message binaire, d&#39;un code magnétique enregistré sur une piste magnétique
EP1818846B1 (fr) Vérification d&#39;intégrité de programmes ou de séquencement d&#39;une machine d&#39;états
FR2851843A1 (fr) Memoire flash comprenant un algorithme de verification d&#39;effacement integre dans un algorithme de programmation
EP1300953A1 (fr) Code de détection et/ou de correction d&#39;erreurs à haute efficacité
EP0938095B1 (fr) Mémoire programmable non-volatile et procédé de programmation d&#39;une telle mémoire
EP3792771B1 (fr) Test de programme
EP4089557B1 (fr) Procédé d&#39;exécution d&#39;un code binaire par un microprocesseur
WO2010128068A1 (fr) Procede de protection de circuits electroniques, dispositif et systeme mettant en œuvre le procede

Legal Events

Date Code Title Description
ST Notification of lapse