Brevet FR2830637A1 — publié le 20030411

CODE DE DÉTECTION ET/OU DE CORRECTION D'ERREURS À HAUTE EFFICACITÉ La présente invention concerne les codes de détection et/ou de correction d'erreurs. Les codes de correction d'erreur ont un effet technique et résolvent un problème technique important. En effet, ils permettent de restituer la valeur d'un ou plusieurs bits erronés, par exemple à la suite d'un stockage ou d'une transmission. On peut même affirmer que, sans eux, tout stockage ou transmission d'informations numériques serait illusoire. La présente invention concerne en particulier les codes linéaires de type Hamming. Le code de Hamming est un code de détection et de correction d'erreurs utilisé dans de nombreux domaines. On va d'abord décrire un premier exemple de code de Hamming et son utilisation en stockage de données dans une mémoire, dans le cas où les données à mémoriser sont sous forme de mots de 16 bits. Soit X le mot à stocker. X peut être représenté par un vecteur Xe, dont les 16 composantes Xo à X15 correspondent aux 16 bits du mot à stocker. Cinq bits de détection d'erreur Ci (C0 à C4) sont obtenus en multipliant une matrice de contrôle de parité H, dite matrice de Hamming, de dimension 5 x 16, par le vecteur Xe, sous forme de vecteur colonne. La figure 1A illustre la matrice de Hamming H pour 16 bits et la figure 1B le mode d'obtention des bits de détection. Si l'on appelle hij les éléments de la matrice H, les bits de détection d'erreur Ci sont donnés par : Xj étant la jième composante du vecteur Xe. En écriture, on inscrit dans la mémoire des mots de 21 bits, formés des 16 bits de données Xj et des 5 bits de détection Ci. En lecture, le mot lu comprend 16 bits Xr correspondant aux bits de données et 5 bits Cr correspondant aux bits de détection. Xr et Cr peuvent ne pas être égaux à Xj et Ci si des erreurs ont eu lieu entre les opérations d'écriture et de lecture. Pour détecter et/ou corriger des erreurs éventuelles sur les bits lus, un syndrome S à cinq composantes SO... S4 est calculé en multipliant une matrice déterminée H' de dimension 5 x 21 par un vecteur colonne à 21 composantes, comprenant les 16 bits Xr et les 5 bits Cr. La figure 2A illustre la matrice H'. Les 16 premières colonnes de la matrice H' correspondent aux 16 colonnes de la matrice H. Les 5 colonnes suivantes comprennent chacune un seul "1". La 17ème colonne a son "1" sur la première ligne, la 18ème colonne a son "1" sur la deuxième ligne, et ainsi de suite jusqu'à la 21ème colonne, qui a son "1" sur la cinquième ligne. Les cinq dernières colonnes de la matrice H' servent à déterminer des erreurs éventuelles dans les bits de détection. La figure 2B illustre le calcul du syndrome S. Si le syndrome S a toutes ses composantes égales à 0, le stockage a eu lieu sans erreur et tous les bits du mot lu, bits de données ou bits de détection, sont corrects. Si S est différent de 0, le mot lu comporte une ou plusieurs erreurs. Si un seul bit du mot lu est erroné, le syndrome obtenu permet de corriger l'erreur. En effet, le syndrome correspond dans ce cas à la colonne dont les éléments ont été multipliés par le bit erroné. Ainsi, si le syndrome calculé est égal à : 0 0 s = 0 , 1 1 les composantes (00011) du syndrome correspondent aux éléments de la première colonne de la matrice de Hamming et cela signifie que le premier bit, X0, est erroné. De même, si le syndrome calculé est égal à 1 o S" = 0 , 0 0) et qu'il n'y a qu'une seule erreur dans le mot lu, cela signifie que c'est le premier bit de détection Co qui est erroné. Le code ci-dessus ne pouvant pas détecter deux erreurs, on le transforme généralement en adjoignant au mot à coder un bit de parité totale P. Le bit de parité totale P est calculé en faisant la somme modulo 2 de tous les bits de données et de tous les bits de détection. Le bit de parité totale est ajouté au mot à coder, et le mot codé, c'est-à-dire l'ensemble constitué par le mot à stocker, les bits de détection et le bit de parité totale, est mémorisé. En lecture, le mot lu est multiplié par la matrice de contrôle de parité H" représentée en figure 3A. La matrice H" a une ligne et une colonne de plus que la matrice H'. La matrice H" comporte, en haut et à gauche, c'est-à-dire sur les cinq premières lignes et les 21 premières colonnes, un bloc identique à la matrice H' . La dernière ligne D de la matrice H" ne comporte que des "1" , et la dernière colonne de la matrice H" ne comporte que des "0", à l'exception de la dernière ligne. Le syndrome obtenu S' est illustré en figure 3B. Le syndrome S' comporte six composantes S0 à S5, et est obtenu en multipliant la matrice H" par un vecteur colonne comportant les 22 bits du mot lu, composé des 16 bits de données lus Xr, suivis des cinq bits de détection lus Cr et du bit de parité totale lu Pr. Ce deuxième code est du type "SEC-DED" ("Single Error Correction" - "Double Error Detection"), signifiant "Correction d'une erreur - Détection de deux erreurs". Il peut détecter deux erreurs dans tous les cas, deux erreurs étant indiquées par le fait que la dernière composante du syndrome, S5, est nulle alors que le syndrome est différent du vecteur nul. Les bits de détection et le bit de parité totale sont calculés par un circuit de codage, et les composantes du syndrome sont calculées par un circuit de décodage. Ces circuits comportent un grand nombre d'additionneurs modulo 2 élémentaires. Chaque additionneur élémentaire nécessitant un certain temps pour effectuer une addition, les résultats fournis par les circuits de codage et de décodage présentent un certain délai. Il est souhaitable de réduire ce délai. En outre, les additionneurs de l'art antérieur sont relativement petits et leur réalisation, non optimale, ne leur permet pas d'être rapides. Un objet de la présente invention est de prévoir un code de détection et/ou de correction d'erreurs permettant l'optimisation des modules élémentaires de calcul des circuits de codage et de décodage. Un autre objet de la présente invention est de prévoir un procédé et un dispositif pour mettre en oeuvre un tel code. Un autre objet de la présente invention est de prévoir un code de détection et/ou de correction d'erreurs permettant la correction d'une erreur et la détection de deux erreurs qui est plus simple que le code de Hamming correspondant. Un autre objet de la présente invention est de prévoir un procédé et un dispositif pour mettre en oeuvre un tel code de détection et/ou de correction d'erreurs. Pour atteindre ces objets ainsi que d'autres, la présente invention prévoit un procédé pour déterminer r bits de détection d'erreur d'un mot de m bits à coder comprenant l'étape consistant à faire le produit d'un vecteur à m composantes représentatif dudit mot de m bits à coder et d'une matrice de contrôle de parité. La matrice de contrôle de parité comporte au moins deux colonnes consécutives complémentaires. Selon un mode de réalisation de la présente invention, toutes les colonnes de ladite matrice sont complémentaires, à l'exception des deux premières. Selon un mode de réalisation de la présente invention, m étant pair, ladite matrice est telle que : a) à l'exception de la première colonne, de rang 0, la représentation binaire des r-2 premiers éléments de chaque colonne de rang pair 2i correspond au rang i d'un couple dont fait partie la colonne ; b) les deux derniers éléments de chaque colonne de rang pair 2i sont "10", à l'exception des colonnes de rang 0 et m-2, où ils sont "01" ; et c) la première colonne de ladite matrice est formée de r-4 éléments égaux à "0", suivis des éléments "1101" et la deuxième colonne de ladite matrice, de rang 1, comprend des "1" sur les r-1 premières lignes et un "0" sur la dernière ligne. Selon un mode de réalisation de la présente invention, des lignes et/ou des colonnes sont permutées. Selon un mode de réalisation de la présente invention, le nombre r des bits de détection est égal à n+2, n étant le nombre de bits nécessaire pour représenter, en binaire, le nombre m de bits à coder. La présente invention concerne aussi un procédé de détermination d'un syndrome représentatif d'erreurs éventuelles survenues au cours d'un traitement, à un mot de m+r bits, les m+r bits correspondant, avant traitement à m bits d'un mot à coder et r bits de détection d'erreurs obtenus par un procédé défini cidessus appliqué au mot de m bits à coder, le syndrome étant obtenu au cours d'une étape consistant à multiplier une matrice particulière par un vecteur à m+r composantes représentatives du mot de m+r bits. La matrice particulière comporte : a) pour les colonnes de rang 0 à m-1, un premier bloc correspondant à la matrice de contrôle de parité utilisée au codage ; b) pour les r-1 premières lignes des colonnes de rang m à m+r-2, un second bloc, carré de dimension r-1, en forme de matrice diagonale ne comportant que des "1" sur sa diagonale principale, c) sous le second bloc, pour la dernière ligne des colonnes de rang m à m+r-2, des éléments inverses de ceux de la dernière ligne du second bloc ; et d) une dernière colonne ne comportant que des "0" sur les r-1 premières lignes et un "1" sur la dernière ligne. La présente invention concerne aussi un circuit de codage comportant des additionneurs élémentaires et permettant le calcul de bits de détection à l'aide d'une matrice de contrôle de parité telle que définie ci-dessus, la répartition des additionneurs élémentaires correspondant à la répartition des "1" dans ladite matrice. Selon un mode de réalisation de la présente invention, le circuit de codage comporte m entrées, chaque entrée étant couplée à une colonne du circuit et recevant un bit du mot à coder. Chaque additionneur élémentaire s'étend sur un espace correspondant sensiblement à la distance séparant trois colonnes consécutives du circuit. La présente invention concerne aussi un circuit de décodage comportant des additionneurs élémentaires et permettant la détermination d'un syndrome à l'aide d'une matrice particulière telle que définie ci-dessus, la répartition des additionneurs élémentaires correspondant à la répartition des "1" dans ladite matrice particulière. Selon un mode de réalisation de la présente invention, le circuit de décodage comporte m+r entrées, chaque entrée étant couplée à une colonne du circuit et recevant un bit du mot à décoder. Chaque additionneur s'étend sur un espace correspondant sensiblement à la distance séparant trois colonnes consécutives du circuit, à l'exception des additionneurs des colonnes m à m+r qui possèdent deux additionneurs voisins immédiats. Ces objets, caractéristiques et avantages, ainsi que d'autres de la présente invention 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 : les figures 1A et 1B, précédemment décrites, représentent respectivement une matrice de Hamming H et le mode d'obtention de bits de détection pour coder un mot de 16 bits ; les figures 2A et 2B, précédemment décrites, représentent respectivement une matrice de Hamming H' pour calculer un syndrome et le mode de calcul du syndrome pour un mot de 16 bits ; les figures 3A et 3B, précédemment décrites, représentent respectivement une matrice de Hamming H" utilisée dans un code permettant de détecter deux erreurs pour des mots de 16 bits et le mode de calcul du syndrome correspondant ; la figure 4A représente une matrice de contrôle de parité M selon la présente invention pour coder un mot de 16 bits ; la figure 4B représente une matrice M' utilisée pour calculer un syndrome selon la présente invention ; la figure 5A illustre le principe d'un circuit utilisé au codage pour coder un mot à l'aide de la matrice M ; la figure 5B représente un élément du circuit de la figure 5A ; la figure 5C représente une ligne du circuit utilisé au codage ; la figure 5D représente une autre ligne du circuit utilisé au codage ; la figure 6 représente un circuit utilisé pour calculer un syndrome ; et la figure 7 représente une matrice M'32 selon la présente invention utilisée au décodage pour des mots de 32 bits. La figure 4A représente un exemple de matrice de contrôle de parité M pour calculer des bits de détection pour des mots de 16 bits, dans un code de correction/détection d'erreur selon la présente invention. Le nombre de bits de détection est égal à 6 et la matrice M est de dimension 6 x 16. Chaque colonne de la matrice M est différente d'une autre et les colonnes sont deux à deux linéairement indépendantes. En outre, chaque colonne de la matrice M est complémentaire d'une colonne immédiatement adjacente, à l'exception des deux premières colonnes. La matrice M peut être décomposée en huit couples Ai de deux colonnes adjacentes, i allant de 0 à 7. Le couple A0 correspond aux colonnes de rang 0 et de rang 1, le couple A1 aux colonnes de rang 2 et de rang 3, etc. Dans l'exemple de matrice M représenté en figure 4A, donné à titre non limitatif, les deux colonnes d'un couple Ai sont complémentaires, à l'exception du couple A0. En figure 4A, les couples Ai sont formés de la façon suivante. Pour les couples A1 à A7, les quatre premiers éléments de la première colonne d'un couple correspondent à la représentation binaire du rang i du couple Ai. Ainsi, la première colonne du couple A3 a ses quatre premiers éléments égaux à "0011", qui est la représentation binaire du nombre 3. Les quatre premiers éléments de la première colonne du couple AO (colonne de rang 0) sont choisis égaux à "0011". Ce choix n'est pas critique. Les quatre premiers éléments de la colonne de rang 0 peuvent en effet avoir n'importe quelle valeur, pourvu que la colonne de rang 0 une fois complète soit différente de toute autre colonne de la matrice M ou des colonnes relatives aux bits de détection de la matrice utilisée au décodage, M', que l'on décrira par la suite. Le choix retenu ("0011") présente l'avantage d'utiliser un faible nombre de "1", d'où une simplification des circuits de codage et de décodage, le nombre de "1" correspondant, comme on le verra par la suite, au nombre d'additionneurs dans le circuit. Les deux derniers éléments de chaque première colonne d'un couple Ai (colonnes de rang pair) sont égaux "10", sauf pour les premier et dernier couples Ai (colonnes de rang 0 et 14), où ils sont égaux à "01". Sauf pour le premier couple, A0, chaque deuxième colonne d'un couple Ai est complémentaire de la première colonne du couple. En d'autres termes, sauf pour la colonne de rang 1, les éléments de chaque colonne de rang impair sont les compléments à deux (ou inverses) des éléments de la colonne de rang pair immédiatement précédente, et vice versa. Par exemple, les éléments de la première colonne du couple A4 sont égaux à "010010", et les éléments de la deuxième colonne de ce couple sont "101101". En figure 4A, le couple AO a pour première colonne "001101" et pour deuxième colonne "111110". On notera que l'avant-dernière ligne de la matrice M, référencée K, ayant pour éléments "0110101010101001", est complémentaire de la dernière ligne de la matrice M, référencée L, ayant pour éléments "1001010101010110". Cela procure des avantages, comme on le verra par la suite. Lorsque l'on multiplie la matrice M par un vecteur colonne de seize composantes correspondant aux bits du mot à coder, on obtient six bits de détection CO-CS, qui sont ajoutés au mot à coder pour former un mot codé de 22 bits. La figure 4B illustre la matrice M' utilisée au décodage. Au décodage, un vecteur de 22 composantes, correspondant aux 22 bits du mot à décoder (16 bits de données et 6 bits de détection après traitement quelconque, par exemple stockage dans une mémoire ou transmission), est multiplié par la matrice M' pour former un syndrome à six composantes S0-S5. La matrice M' est une matrice de dimension 6 x 22. Dans la matrice M', les seize première colonnes forment un bloc identique à la matrice M. Les cinq premières lignes des cinq colonnes suivantes (rang 16 à 20) forment un bloc A de dimension 5 x 5 constitué par une matrice diagonale ne comprenant que des "1" sur sa diagonale principale et des "0" partout ailleurs. Sous le bloc A, les éléments de la dernière ligne des colonnes de rang 16 à 20 sont choisis égaux à "11110", de façon à correspondre aux inverses des éléments de la dernière ligne du bloc A ("00001"). La dernière colonne de la matrice M ', celle qui permet de corriger une erreur sur le sixième bit de détection, comprend des "0" sur les cinq premières lignes et un "1" sur la dernière ligne. On notera que, dans la matrice M', les colonnes correspondant aux bits de données sont deux à deux complémentaires, à l'exception des deux premières. En outre, les deux dernières lignes sont complémentaires aussi. Si l'on fait la somme modulo 2 des deux dernières composantes du syndrome, S4 et S5, on obtient la somme modulo 2 de tous les bits de données et de détection du mot à décoder, c'est-à-dire un bit de parité totale Pr. Le bit de parité totale Pr est ici obtenu de façon simple et est calculé sensiblement en deux fois moins de temps que dans le cas du code de Hamming correspondant. En outre au codage, contrairement au code de Hamming correspondant, un bit de parité totale P n'est pas calculé. Le bit de parité totale Pr est utilisé de la manière suivante. Si le syndrome est égal au vecteur nul, il n'y a pas d'erreurs, ni dans les bits de données, ni dans les bits de détection. Si le syndrome est différent du vecteur nul et le bit de parité total Pr est égal à 1, cela signifie qu'il y a eu une seule erreur et elle peut être corrigée. En effet, les composantes du syndrome, dans ce cas, correspondent aux éléments de la colonne de la matrice M' correspondant au bit erroné. Si le syndrome est différent du vecteur nul et le bit de parité total Pr est égal à 0, on se trouve dans le cas de deux erreurs, qui sont détectées. La figure 5A représente schématiquement le principe d'un circuit utilisé au codage permettant de calculer les bits de détection à partir des bits de données. Le circuit de codage 1 comporte 16 entrées EO à E15, qui reçoivent les 16 bits de données X0 à X15 du mot à coder. Le circuit 1 comporte également 6 sorties Co à C5 fournissant les six bits de détection. Chaque entrée Ei est reliée à une colonne de rang i du circuit. Chaque sortie Cj est reliée à une ligne de rang j . A l'intersection de la colonne i et de la ligne j peut se trouver un additionneur modulo 2 Gi,j indiqué sommairement ici par un cercle marqué d'une croix. Les additionneurs modulo 2 peuvent être quelconques, et constitués par exemple par des portes OU-Exclusif. Comme cela est représenté en figure 5B, l'additionneur Gij comporte deux entrées ejl et ex,,2, souvent notées respectivement el et e2 dans la suite, par souci de simplification. L'entrée ei,j1 est reliée à l'entrée Ei et l'entrée ei,j2 reçoit le signal présent sur la ligne j à gauche de l'additionneur Gi j. L'additionneur Gi@j comporte aussi une sortie si,j située sur la ligne j à droite de l'additionneur Gi,j, notée souvent plus simplement s par la suite. Lorsqu'il n'y a pas d'additionneur à l'intersection de la colonne i et de la ligne j, la colonne i et la ligne j se croisent sans influence l'une sur l'autre. Cela signifie que le bit fourni à l'entrée concernée n'est pas utilisé pour le calcul du bit de détection Cj . Une colonne supplémentaire, a, située à gauche de la colonne de rang 0 relie l'entrée e2 de chaque premier additionneur d'une ligne à la masse (GND). Le fonctionnement du circuit 1 va être expliqué pour le calcul du bit de détection C4, correspondant à la ligne de rang 4. En partant de la gauche, le premier additionneur rencontré est l'additionneur G1 4. L'entrée e2 de l'additionneur G1 4 est reliée à la masse, par l'intermédiaire de la colonne a, et l'entrée el de l'additionneur G1,4 reçoit le bit de données X1 par l'intermédiaire de l'entrée El du circuit. En sortie de l'additionneur Glf4, on a s = 0 # xi, c'est-à-dire X1. Le signal fourni par l'additionneur G1,4 attaque l'entrée e2 de l'additionneur G2,4, qui effectue le calcul X1 O X2. Le calcul se poursuit ainsi jusqu'à l'additionneur 15,4, qui réalise l'addition modulo 2 du résultat fourni par l'additionneur G12,4 et du bit de données X15. Ainsi, on a : C4 = Xl O+ X2 e X4 O+ X6 O+ Xg e X10 Et> X12 Et> X15, ce qui correspond bien à la multiplication de la cinquième ligne de la matrice M par un vecteur ayant pour composantes les bits du mot à coder. De façon générale, le circuit 1 reprend la structure de la matrice M, les lignes et les colonnes du circuit correspondant aux lignes et aux colonnes de la matrice M, un additionneur modulo 2 étant situé là où la matrice M comporte un "1". Dans l'art antérieur, chaque additionneur occupe un espace correspondant à l'intervalle entre deux colonnes du circuit. On va maintenant décrire l'avantage procuré par le fait que des colonnes adjacentes de la matrice M sont complémentaires. En effet, dans la présente invention, un additionneur modulo 2 du circuit 1 n'est jamais contigu des deux côtés à un autre additionneur, sauf le cas échéant pour les deux premières colonnes. Il en résulte qu'un tel additionneur peut occuper latéralement la place de deux additionneurs et être, pour une même surface du circuit, deux fois plus gros que dans l'art antérieur. L'additionneur peut alors être réalisé de façon optimale, et être beaucoup plus rapide. La figure 5C illustre la ligne de rang 4 du circuit 1, fournissant le bit de détection C4. Chaque additionneur Gi,j est représenté sous la forme d'un bloc rectangulaire. Le premier additionneur rencontré est l'additionneur G1,4. Son entrée e2 (el,42) est reliée à la masse par l'intermédiaire de la colonne a. Son entrée el (e1,41) reçoit le bit X1 par l'intermédiaire de l'entrée El. En figure 5C, les colonnes du circuit 1 qui ne sont pas reliées à l'entrée d'un additionneur de la ligne de rang 4 sont représentées en pointillés. La sortie si,j de chacun des additionneurs alimente l'entrée e2 de l'additionneur suivant ou, pour le dernier additionneur, la sortie du circuit. La ligne de rang 4 du circuit de codage comprend huit additionneurs (G1,4, G2,4, G4, 4' G6,4 G8@4, G10 , 4' G12,4 et G151 4), les bits de données utilisés pour le calcul du bit de détection C4 étant X1, X2, X4, X6, X8, X10, X12 et X15. Tous les additionneurs de la ligne de rang 4 sont de surface double par rapport à ce qui est prévu dans l'art antérieur. Bien qu'en figure 5C l'entrée el d'un additionneur Gi,j soit située tantôt à gauche, tantôt à droite de l'additionneur, tous les additionneurs du circuit peuvent présenter la même structure physique. Dans ce cas, l'entrée el est disposée à un même emplacement déterminé de l'additionneur, un jeu de vias ou de liaisons permettant au bit souhaité d'alimenter l'entrée concernée . Dans la matrice M de la figure 4A, les deux premières colonnes ne sont pas complémentaires. Cependant, indépendamment de ce fait, les additionneurs correspondant aux deux premières colonnes du circuit 1 peuvent être de même taille que les additionneurs du reste du circuit. D'abord, un problème se pose seulement lorsque deux "1" consécutifs se trouvent sur les deux premières colonnes d'une même ligne de la matrice. Cela ne se produit que pour les lignes de rang 2 et 3. Ensuite, il est possible, même dans ces cas, d'utiliser des additionneurs de taille deux fois supérieure à l'art antérieur. Examinons par exemple le cas de la ligne de rang 3. Le premier additionneur de la ligne, G0,3 (figure 5A) , est suivi de l'additionneur G1,3. L'additionneur G0,3 réalise l'addition modulo 2 du bit XO et de 0 (potentiel de la masse). L'additionneur G0,3 fournit en sortie le bit XO. Son rôle n'est donc que de transmettre le bit de données qu'il reçoit à l'additionneur suivant. Dans la présente invention, les deux additionneurs G0,3 et G1,3 sont remplacés par un seul additionneur, non relié à la masse et recevant sur ses deux entrées les bits X0 et X1. Ainsi, en figure 5D, qui représente la ligne de rang 3 du circuit 1, un seul additionneur, noté G0-1,3, remplace les additionneurs Ego,3 et G13 de la figure 5A. L'additionneur GO-1,3 a deux entrées el et e2 recevant respectivement les bits de données Xo et X1. L'additionneur GO-1,3 fournit en sortie la somme modulo 2 des bits X1 et X2. L'additionneur G0-1,3 occupe la superficie des deux additionneurs G0,3 et G0,1. L'additionneur GO-1,3 est de même taille que les additionneurs qui le suivent, à savoir les additionneurs G2,3, GS,3, G6@3, Gg@3, G10,3, G13,3 et G14,3, connectés selon les principes énoncés ci-dessus. La ligne de rang 3 du circuit fournit le bit de détection C3, somme modulo 2 des bits de données Xo, X1, X2, X5, X6, X9, X10, X13 et X14. Les deux premiers additionneurs de la ligne de rang 2 de la figure 5A, G0,2 et G1,2, sont de même remplacés par un seul additionneur non représenté, G0-1,2, non relié à la masse et recevant sur ses deux entrées les bits de données X0 et X1. Le circuit 1, non représenté en détail ici, est ainsi formé de 48 additionneurs (8 additionneurs par ligne), disposant tous d'une même superficie de silicium, double de celle prévue par l'art antérieur. Chacun des additionneurs peut être de réalisation plus soignée et, du fait des performances optimales individuelles de chacun des additionneurs, le calcul des bits de détection peut être beaucoup plus rapide. En outre, du fait que la matrice de codage M a deux de ses lignes complémentaires, un bit de parité totale P n'est pas calculé au codage. Les 6 bits de détection Co à C5 peuvent être calculés en parallèle et ajoutés au mot à coder sans perte de temps supplémentaire. La figure 6 représente schématiquement un circuit 10 utilisé au décodage. Le circuit 10 comporte 22 entrées E'O à E'21 recevant les 22 bits du mot à décoder (16 bits de données X'0à X'15 et 6 bits de détection C' 0 à C'5). Le circuit 10 comporte six sorties S0 à S5 fournissant chacune une composante du syndrome. Le circuit 10 représenté ici est réalisé directement en sortie d'une mémoire dont seule est représentée une ligne 12 de 22 amplificateurs de lecture SA0 à SA21 ("sense amplifiers" en anglais). Les amplificateurs de lecture SAi sont situés chacun à l'extrémité d'une ligne de bits non représentée (le cas échéant, deux lignes de bits pour une mémoire DRAM) et fournissent chacun un bit du mot à décoder. Les amplificateurs de lecture SA0 à SA15 fournissent les bits de données X'0 à X'15 et les amplificateurs de lecture SA16 à SA21 fournissent les bits de détection C'0 à C'5. Le circuit de décodage 10 est réalisé sur la même puce de silicium que la mémoire dans laquelle est stocké le mot codé et peut faire partie intégrante de celle-ci. Chacune des entrées E'i du circuit 10 est espacée d'une autre entrée par l'intervalle séparant deux amplificateurs de lecture SAi. Le circuit 10 comprend d'abord, relié aux entrées E'0 à E'15, un bloc Y formé d'un pavage régulier de six lignes de huit additionneurs G'i,j chacune. La structure du bloc Y reprend la structure du circuit de codage 1, les 16 premières colonnes de la matrice M' correspondant à la matrice M. Les additionneurs G'i,j du bloc Y sont connectés de la même manière que cela a été décrit précédemment en relation avec les figures 5A à 5D. On peut d'ailleurs avoir une image du circuit 1 en se reportant au bloc Y, en remplaçant les éléments marqués d'un "prime" par des éléments sans "prime". Les additionneurs G1,0, G'1,1, G'1,4 et G'0,5, correspondant respectivement aux premiers additionneurs des lignes de rang 0, 1,4 et 5, possèdent une entrée reliée à une ligne de masse a' et une entrée reliée selon les cas au bit de données Xo ou X1. Les premiers additionneurs des lignes de rang 2 et 3, G1 o-i, 2 et G'0-1J3, reçoivent en entrée les deux bits de données Xo et X1. Les autres additionneurs du bloc Y, correspondant aux colonnes de rang 2 à 15, comportent une entrée reliée à la sortie de l'additionneur qui le précède immédiatement et une autre entrée reliée à une des deux entrées E'i susceptibles d'alimenter l'additionneur. Outre le bloc Y, le circuit 10 comprend un bloc Z de dix additionneurs reliés aux entrées E'16 à E'21, chargés de réaliser les opérations mathématiques sur les bits de données. Sur la ligne de rang 0 du bloc Z, il n'y a qu'un seul additionneur, G'16,0, qui reçoit la sortie de l'additionneur G'15,0 sur une entrée, et le bit de détection C'0 sur une autre entrée. La sortie de l'additionneur G'16,alimente la sortie So du circuit. L'additionneur G'16,0 peut occuper, si cela est souhaité, un espace s'étendant sur six colonnes du circuit 10 (amplificateurs de lecture SA16 à SA21). Cependant, pour des raisons pratiques, l'additionneur G'16,0est de même type que les additionneurs G'i,j du bloc Y et occupe une surface double de ce qui est prévu dans l'art antérieur. La ligne de rang 1 du bloc Z comprend également un seul additionneur G'17,1, de même surface que l'additionneur G'16,0, recevant sur ses deux entrées la sortie de l'additionneur G'14,1 et le bit de détection C'1. La sortie de l'additionneur G'17,1 alimente la sortie S1 du circuit 10. La ligne 2 du bloc Z comprend un additionneur G'18,2, de même taille que l'additionneur G'16,0 ou G'17,1, recevant sur une entrée la sortie de l'additionneur G'14,2 et sur son autre entrée le bit de détection C'2. L'additionneur G'18,2 alimente la sortie S2 du circuit. Sur la ligne suivante du bloc Z, se trouve l'additionneur G'19,3, de même taille que l'additionneur G'18,2, recevant en entrée la sortie de l'additionneur G'14,3 et le bit de détection C'3. L'additionneur G'19,3 alimente la sortie S3 du circuit 10. La ligne de rang 4 du bloc Z comprend un additionneur G'20,4, recevant la sortie de l'additionneur G'15,4 et le bit de détection C'4. L'additionneur G'20,4 alimente la sortie S4 du circuit 10. La dernière ligne du bloc Z, de rang 5, comporte cinq additionneurs qui ne peuvent utiliser chacun une surface double de circuit. En effet, sur cette ligne, l'additionneur G'14,5 du bloc Y alimente un additionneur G'16,5, suivi, dans cet ordre, des additionneurs G'17,5, G118,5, G'19,5 et G'21,5L'additionneur G'21,5 alimente la sortie S5 du circuit 10. Les additionneurs G'16@5, G'17,5 G'18,5 et G'1g,5, qui reçoivent respectivement les bits de détection C'0, C'1, C'2 et C'3, ne peuvent être plus larges que l'intervalle séparant deux colonnes du circuit. Leur largeur ne peut donc être supérieure à celle d'un amplificateur de lecture. L'additionneur G'21,5, par contre, recevant la sortie de l'amplificateur G'19,5 et le bit de détection C'5, peut être aussi large que deux amplificateurs de lecture et de taille semblable à celle des additionneurs du bloc Y. L'examen de la figure 6 nous indique que presque tous les additionneurs du circuit de décodage occupent une surface double de ce qui est prévu dans l'art antérieur. Les additionneurs de surface double peuvent être beaucoup plus rapides que les additionneurs de surface moitié et de ce fait, le circuit de décodage est beaucoup plus rapide que dans l'art antérieur. On notera en outre que, tant en ce qui concerne le circuit de codage que le circuit de décodage, le nombre d'additionneurs par ligne est réduit par rapport à l'art antérieur. Il en résulte un gain supplémentaire de temps. A titre de comparaison, on se rapportera à la dernière ligne de la matrice H" de l'art antérieur (figure 3A), constituée de 22 "1" consécutifs. Ainsi, la dernière ligne du circuit de décodage correspondant comprend 22 additionneurs de petite taille en série. Dans la présente invention, avec la matrice M', la dernière ligne du circuit de décodage ne comporte que 13 additionneurs, dont 9 ont une surface double par rapport à l'art antérieur. Le gain de temps intervient donc à deux niveaux. En effet, dans la présente invention, non seulement presque tous les additionneurs sont plus volumineux donc plus rapides, mais leur nombre par ligne est plus faible. Le temps global de calcul correspondant à la somme des temps de traitement dans chacun des additionneurs, le circuit de l'invention est beaucoup plus rapide et performant que le circuit de l'art antérieur. En outre, la réalisation plus soignée des additionneurs de surface plus grande permet à ceux-ci d'être plus fiables. Bien entendu, le code de la présente invention ne se limite pas à des codes destinés à des mots de 16 bits. En effet, il est possible, moyennant la complémentarité d'au moins deux colonnes consécutives, ce qui permet de réduire le temps de traitement des additionneurs concernés par ces colonnes, de définir des codes permettant de coder des mots ayant un nombre quelconque de bits. Par exemple, il est possible de généraliser la matrice M de la figure 4A pour coder un nombre m pair quelconque de bits. Le nombre de bits de détection r doit être au moins supérieur de 2 au nombre nécessaire pour représenter, en binaire, le nombre de bit du mot à coder. De préférence, r sera égal à sa valeur minimale, pour ne pas alourdir le code. Ainsi, lorsque m est égal à 16, il faut quatre bits pour représenter seize possibilités en binaire et r est choisi égal à 6, comme cela a été vu précédemment. Pour m = 32, le nombre de bits de détection est choisi égal à 7,32 étant égal à 25. Pour m = 128, il faut 9 bits de détection, et ainsi de suite. Pour généraliser la matrice M, on détermine d'abord le nombre r de bits de détection nécessaires. Ensuite, on construit la matrice Mm servant au codage de sorte que les r-2 premiers éléments de chaque colonne de rang pair indiquent, sauf pour la première colonne, le rang du couple dont fait partie la colonne (un couple Ai, de rang i, est constitué de la colonne de rang pair 2i et de la colonne de rang impair 2i+l ; le rang de la première colonne est 0, et celui de la dernière colonne m-1). Les deux derniers éléments des colonnes de rang pair sont égaux à "10" sauf pour la colonne de rang 0 et la colonne de rang m-2, où ils valent "01". La première colonne de la matrice Mm peut être formée de r-4 éléments égaux à "0", suivis des éléments "1101". La deuxième colonne de la matrice Mm, de rang 1, peut être formée de r-4 éléments égaux à "1", suivis des éléments "1110". Les colonnes de rang impair, à l'exception de la colonne de rang 1, sont complémentaires de la colonne de rang pair immédiatement précédente. On notera que la dernière ligne de la matrice Mm est complémentaire de son avant-dernière ligne. On notera aussi que les r-2 premiers éléments de la première colonne de la matrice Mm peuvent être identiques aux r-2 éléments de n'importe quelle colonne de la matrice Mm, aux conditions suivantes . la première colonne doit être différente de toutes les autres colonnes de la matrice Mm ; les quatre premiers éléments de la première colonne ne doivent pas être que des "0" et comporter plus d'un "1", afin que la colonne soit différente des colonnes de la matrice utilisée au décodage qui correspondent aux bits de détection. Pour former la matrice M'm servant au décodage, on prend d'abord la matrice de contrôle de parité Mm, et on la complète à droite par une sous-matrice carrée R de dimension r x r. La sous-matrice R comprend des "1" sur sa diagonale principale, et des "0" partout ailleurs sauf sur sa dernière ligne, dont les éléments sont les inverses de ceux de l'avantdernière ligne de la sous-matrice R. La dernière ligne de la sous-matrice R comporte ainsi des "1" partout sauf à l'avant dernière colonne. Le code utilisant les matrices Mm et M'm a une distance minimale de code égale à quatre. Il permet de corriger une erreur et de détecter deux erreurs. Au décodage, le syndrome obtenu a r composantes. Un bit de parité totale est obtenu en ajoutant modulo 2 les deux dernières composantes du syndrome. Si le syndrome est le vecteur nul, il n'y a pas d'erreur. Si le syndrome est différent du vecteur nul et le bit de parité totale est égal à "1", il y a une seule erreur. Cette erreur est aisément corrigée car le syndrome correspond à la colonne de la matrice dont les éléments ont été multipliés par le bit erroné. Si le syndrome est différent du vecteur nul et le bit de parité total est égal à "0", l'on est en présence de deux erreurs. Tous les additionneurs du circuit de codage et pratiquement tous les additionneurs du circuit de décodage, calculant respectivement les bits de détection et les composantes du syndrome à l'aide des matrices Mm et M'm, peuvent s'étendre sur deux intervalles séparant deux colonnes du circuit et avoir une surface double de celle prévue par l'art antérieur. La figure 7, à titre d'exemple, illustre une matrice M'32 utilisée pour décoder des mots de 32 bits. La matrice M'32 est de dimension 7 x 39. Ses 32 premières colonnes correspondent à la matrice M32 utilisée au codage. Les matrices M32 et M'32 sont réalisées sur le modèle de ce qui a été décrit précédemment. Les circuits de codage et de décodage correspondants, non représentés, se déduisent facilement des matrices M32 et M'32 à l'aide des principes définis en relation avec les figures 5A-5D et 6. Bien entendu, la présente invention est susceptible de diverses variantes et modifications qui apparaîtront à l'homme de l'art. En particulier, toute permutation de ligne d'une matrice de contrôle de parité selon la présente invention fait partie du domaine de l'invention et ne change en rien le code de l'invention. Toute permutation de colonnes d'une matrice de la présente invention fait aussi partie du domaine de la présente invention, pour autant que deux colonnes consécutives au moins restent complémentaires. Le nombre N de bits du mot à coder peut être pair ou impair. Si le nombre N est impair, on peut par exemple d'abord former une matrice Mm telle que décrite ci-dessus avec m pair et égal à N+1. Ensuite, la matrice MN à utiliser au codage peut dériver aisément de la matrice Mm par suppression d'une colonne quelconque, par exemple la première colonne. L'invention a principalement été décrite dans le cadre du stockage de mots en mémoire. Bien entendu, la présente invention s'applique également à tout codage et décodage de mots auxquels on veut affecter un code de détection et/ou de correction d'erreur. Par exemple, la présente invention s'applique à la transmission. REVENDICATIONS 1. Procédé pour déterminer r bits de détection d'erreur (C0, ... Cr-1) d'un mot de m bits à coder comprenant l'étape consistant à faire le produit d'un vecteur à m composantes représentatif dudit mot de m bits à coder et d'une matrice de contrôle de parité (M, Mm, M32), caractérisé en ce que la matrice de contrôle de parité comporte au moins deux colonnes consécutives complémentaires. 2. Procédé selon la revendication 1, dans lequel toutes les colonnes de ladite matrice sont complémentaires, à l'exception des deux premières. 3. Procédé selon la revendication 2, dans lequel, m étant pair, ladite matrice est telle que : a) à l'exception de la première colonne, de rang 0, la représentation binaire des r-2 premiers éléments de chaque colonne de rang pair 2i correspond au rang i d'un couple (Ai) dont fait partie la colonne ; b) les deux derniers éléments de chaque colonne de rang pair 2i sont "10", à l'exception des colonnes de rang 0 et m-2, où ils sont "01" ; et c) la première colonne de ladite matrice est formée de r-4 éléments égaux à "0", suivis des éléments "1101" et la deuxième colonne de ladite matrice, de rang 1, comprend des "1" sur les r-1 premières lignes et un "0" sur la dernière ligne. 4. Procédé selon l'une quelconque des revendications 1 à 3, dans lequel des lignes et/ou des colonnes sont permutées. 5. Procédé selon l'une quelconque des revendications 1 à 4, dans lequel le nombre r des bits de détection est égal à n+2, n étant le nombre de bits nécessaire pour représenter, en binaire, le nombre m de bits à coder. 6. Procédé de détermination d'un syndrome représentatif d'erreurs éventuelles survenues au cours' d'un traitement, à un mot de m+r bits, les m+r bits correspondant, avant traitement à m bits d'un mot à coder et r bits de détection d'erreurs obtenus par un procédé selon l'une quelconque des revendications 1 à 5 appliqué au mot de m bits à coder, le syndrome étant obtenu au cours d'une étape consistant à multiplier une matrice particulière (M', M'm, M'32) par un vecteur à m+r composantes représentatives du mot de m+r bits, caractérisé en ce que la matrice particulière comporte : a) pour les colonnes de rang 0 à m-1, un premier bloc correspondant à la matrice de contrôle de parité utilisée au codage ; b) pour les r-1 premières lignes des colonnes de rang m à m+r-2, un second bloc, carré de dimension r-1, en forme de matrice diagonale ne comportant que des "1" sur sa diagonale principale, c) sous le second bloc, pour la dernière ligne des colonnes de rang m à m+r-2, des éléments inverses de ceux de la dernière ligne du second bloc ; et d) une dernière colonne ne comportant que des "0" sur les r-1 premières lignes et un "1" sur la dernière ligne. 7. Circuit de codage (1) comportant des additionneurs élémentaires et permettant le calcul de bits de détection à l'aide d'une matrice de contrôle de parité (M, Mm, M32) telle que définie dans l'une quelconque des revendications 1 à 5, caractérisé en ce que la répartition des additionneurs élémentaires correspond à la répartition des "1" dans ladite matrice. 8. Circuit selon la revendication 7 comportant m entrées (Ei), chaque entrée étant couplée à une colonne du circuit et recevant un bit du mot à coder, dans lequel chaque additionneur élémentaire s'étend sur un espace correspondant sensiblement à la distance séparant trois colonnes consécutives du circuit. 9. Circuit de décodage (10) comportant des additionneurs élémentaires et permettant la détermination d'un syndrome à l'aide d'une matrice particulière (M', M'm, M'32) telle que définie dans la revendication 6, caractérisé en ce que la répartition des additionneurs élémentaires correspond à la répartition des "1" dans ladite matrice particulière. 10. Circuit selon la revendication 9 comportant m+r entrées (E'i), chaque entrée étant couplée à une colonne du circuit et recevant un bit du mot à décoder, dans lequel chaque additionneur s'étend sur un espace correspondant sensiblement à la distance séparant trois colonnes consécutives du circuit, à l'exception des additionneurs des colonnes m à m+r qui possèdent deux additionneurs voisins immédiats.