FR 2594976 A1 19870828 FR 8702235 A 19870220 "Système de mémoire à trois modules construit à l'aide de puces de mémoire d'une largeur d'un symbole et présentant une caracté- ristique de protection contre les erreurs, chaque symbole étant constitué de 2i+1 bits" ARRIERE-PLAN DE L'INVENTION. La présente invention concerne une mémoire de système construite à l'aide de puces de mémoire d'une largeur d'un symbole et présentant une caractéristique de protection contre les erreurs. Des développements dans la technologie des mémoires ont abouti à des puces de stockage pouvant recevoir de multiples bits de données par emplacement de mémoire dans chaque puce et présentant de multiples sorties correspondantes. Des erreurs survenant lors du stockage de données dans ces mémoires sont, en général, classifiées comme étant dues à deux causes distinctes. L'une est un phénomène ambiant non destructif causé par l'impact de particules atomiques alpha. Ces particules, présentes dans un rayonnement atomique de fond ordinaire, accusent une certaine énergie par rapport au signal de données stocké dans la cellule. Lorsque ces cellules sont frappées par des particules atomiques alpha, les valeurs binaires stockées dans la cellule peuvent commuter vers une valeur opposée. Ceci provoque donc une erreur de données. Ces erreurs sont, par consé- quent, transitoires et n'influencent habituellement qu'un seul bit à la fois. Cette défaillance à de faibles valeurs des détails minimes du circuit survient relativement fréquemment. La seconde cause majeure d'erreurs est la défaillance physique réelle d'un des composants de la mémoire. Cette défaillance produit une erreur perma- nente ou "persistante". En général, cette dernière catégorie d'erreurs est relativement peu fréquente. Par ailleurs, de telles erreurs peuvent influencer un nombre quelconque de bits dans un symbole et, par conséquent, ont une importance plus grande. Actuel- lement, les symboles ont habituellement une largeur de 2i bits, o i peut avoir des valeurs de 1 à 4. De plus, des puces de mémoire avec des symboles de (2i+1) bits (c'est-à-dire 2i bits de données plus un bit de parité) ont été fabriquées, de sorte qu'au niveau d'une puce de mémoire, une erreur d'un seul bit dans un symbole peut être détectée. La présente invention utilise ce dernier type de puce de mémoire, mais en étendant le degré de protection contre les erreurs. RESUME DE L'INVENTION. Il est donc nécessaire dans de tels systèmes de mémoire de détecter et de corriger toutes les erreurs d'un seul bit dans un mot de mémoire formé de trois symboles, de détecter toutes les erreurs dans lesquelles un seul symbole dans un mot comporte un nombre quelconque d'erreurs de bits (jusqu'à un byte complètement inversé) et, en outre, de détecter autant d'erreurs d'un seul bit coexistantes survenant dans des symboles différents du même mot. Le but de l'invention est atteint par un système de mémoire à trois modules, chaque module comportant un nombre égal d'emplacements de symboles de mémoire, chaque emplacement de symbole de mémoire comportant un même nombre de 2i+1 emplacements de bits de mémoire, un mot de mémoire contenant donc 3(2i+1) bits o 3 trois emplacements de symboles de mémoire correspon- dants, o (GO) = (P) x (G) x (Q), o (P) est une matrice régulière arbitraire de dimensions (2i+l) x (2i+l), (Q) est une matrice de permutation arbitraire de dimensions f(3x(2i+1)} x {3x(2i+1)J pour effectuer une permutation par bit dans un symbole de code et/ou une permutation par symbole dans un mot de code, le choix de (P) et de (Q) comprenant des matrices d'iden- tité, et o G est une matrice pour réaliser un code de protection contre des erreurs systématique par bit présentant un profil de distance minimum de (p, 2, 0) o p est au moins égal à cinq. L'invention procure une classe étendue de codes [ 51, 32] et E 27, 16 permettant de corriger des erreurs d'un seul bit, de détecter jusqu'à quatre erreurs de bit ou de détecter des défaillances d'une seule puce de mémoire, ainsi qu'une classe de codes [ 15, 8_ permettant de corriger des erreurs d'un seul bit, de détecter jusqu'à deux erreurs de bit ou de détecter des défaillances d'une seule puce de mémoire. De plus, la présente invention présente un procédé commode pour produire des codes qui possèdent des capacités de détection de deux, de trois ou de quatre erreurs d'un seul bit. Les codes cons- truits ont un caractère optimal dans le sens qu'il n'existe pas de codes 27, 26 7 ou 15, 8 _ dont les propriétés de correction/détection sont meilleures que celles des meilleurs codes présentés ci-après. Le code 51, 32] est aussi presque optimum. ETAT CONNU DE LA TECHNIQUE. A titre d'état connu de la technique, on peut citer en particulier la demande de brevet européen 825 correspondant à la demande de brevet des Etats- Unis d'Amérique n0 391 062 qui décrit un système de correction d'une erreur d'un seul bit, de détection d'erreur de bit double, de détection d'erreur d'un seul byte dans un mot de mémoire de trois symboles de neuf bits chacun. Ainsi, l'invention procure une correction d'erreur améliorée: jusqu'à quatre erreurs de bit au lieu de deux seulement. De plus, le schéma de codage conforme à l'invention permet des décodeurs plus simples utilisant moins de matériel que celui qui est nécessaire pour la réalisation de type connu. D'autres aspects avantageux de l'invention sont cités dans les revendications dépendantes. BREVE DESCRIPTION DES DESSINS. La description suivante donne d'abord des définitions et des préliminaires données, puis dans le détail, la construction d'un code 27, 16_7, ensuite les réalisations de codeur et de décodeur, et fina- lement la construction de codes E 15,8J et 51, 31]. La description se réfère aux figures suivantes: la Fig. 1 donne une définition d'un profil de distance minimum; la Fig. 2 illustre une matrice binaire pour une base normale de GF(28); les Fig. 3, 4 donnent des matrices Mb pour chacune des seize bases normales de GF(28); la Fig. 5 illustre une matrice de générateur G symbolique les Fig. 6a, 6b, 6c illustrent respectivement une matrice de générateur réelle, une matrice de vérification de parité symbolique et une matrice de vérification de parité réelle; les Fig. 7a à d illustrent la génération des signaux AO,..., A3; les Fig. 8a à 8c illustrent des exemples de vecteurs ul, V1, W_; la Fig. 9 définit d'autres signaux intermé- diaires; la Fig. 10 illustre la génération des signaux B1, Cl, D1; la Fig. 11 illustre un décodeur complet pour le code [ 27, 16]; les Fig. 12a, 12b illustrent deux autres matrices de générateur symboliques. DEFINITIONS ET PRELIMINAIRES. Par w(x), on désigne le poids de Hamming d'un vecteur binaire x, c'est-àdire le nombre de composants (bits) dans x ayant la valeur 1. La longueur d'un code est le nombre de bits dans un mot de code, la dimension est le nombre de bits de données (non redondants) pouvant être dérivés d'un mot de code. Pour un code C linéaire binaire [ 3m,k] de longueur 3m et de dimen- sion k, tel que tous les mots de code c dans C sont répartis dans trois symboles c1, c2, c3 de longueur m, c = (cl, c2, c3), le profil de distance minimum d(C) = (d(ClO), d(CIl), d(C12)) est défini sur la Fig. 1. La première composante du profil de distance minimum est le poids minimum en bits du code. La seconde composante du profil de distance minimum est le poids minimum du code partiel dans lequel, dans chaque mot de code, le symbole de code le plus "lourd" a été supprimé et ainsi de suite. Le profil comporte donc autant d'éléments pertinents qu'il y a de symboles dans un mot de code. Chaque élément suivant du profil ne peut pas être supérieur à un élément précédent quelconque de ce profil. Un nombre quelconque d'éléments du profil peut être égal à zéro. A présent, dans la référence donnée plus haut, un code linéaire binaire [ 27, 16] est construit et comporte des mots de code formés de trois symboles de neuf bits et ayant un profil de distance minimum (4.,2,0). Ce profil de distance minimum garantit les propriétés suivantes pour le code: * correction d'erreur d'un seul bit, * détection d'erreur de deux bits, * détection d'erreur d'un seul symbole. La distance minimum pour l'ensemble du code est de quatre: cette valeur est suffisante pour la correction d'erreur d'un seul bit, la détection d'erreur de deux bits. L'élément suivant du profil de distance minimum est 2: cela signifie qu'une erreur arbitraire dans un symbole quelconque peut être détectée. D'autre part, si l'on ne tient pas compte d'un symbole (symbole d'effacement), cela signifie qu'une capacité de détection d'erreur d'un seul bit subsiste. Cette dernière particularité n'est cependant pas utilisée ici. Dans le paragraphe suivant, on construit des codes linéaires binaires (27, 16_ comportant des mots de code formés de trois symboles de 9 bits chacun et présentant un profil de distance minimum (6,2,0). Ce profil de distance minimum garantit les propriétés suivantes pour le code: * la correction d'erreur d'un seul bit, * la détection d'erreur de deux bits, * la détection d'erreur de trois bits, * la détecteur d'erreur de quatre bits, * la détection d'erreur d'un seul symbole. Pris isolément, le premier élément "6" du profil de distance minimum permettrait aussi la correc- tion de deux erreurs d'un seul bit et la détection de trois erreurs d'un seul bit. Ce dernier stratagème pourrait cependant mettre en danger la particularité de la détection d'erreur d'un seul symbole. Ainsi, on estime que la protection contre les erreurs détaillée plus haut serait plus utile dans la gestion de la mémoire. Les codes produits sont optimums en ce sens qu'un code linéaire binaire 27, 16_ quelconque comportant des mots de code formés de trois symboles de 9 bits a un profil de distance minimum (a,b,c) tel que a en vérifiant si le niveau de protection reste correct. On estime que le code donné ci-après est aussi optimum pour un décodage aisé. CONSTRUCTION DE CODES [ 27, 16] AYANT UN PROFIL DE DISTANCE MINIMUM DE (6,2,0). La matrice de générateur du code peut être écrite sous la forme: (MO Ml M2\ G = M3 M4 M5 o chaque matrice Mi (i= 0,..., 5) est constituée de 2i rangées et de 2i+ 1 colonnes. La théorie générale des codes telle que celle donnée par F.J. Mac Williams et al., dans "The theory of error correcting codes", Amsterdam 1977 est considérée comme représentant l'état général de la technique. Les codes sont construits de la manière suivante: on admet que a soit un zéro du polynôme primitif p(x) = x8+x4+x3+x2+l sur GF(2), On définit c comme étant c= a85. a est un élément primitif de GF(28). Ce champ fini a 16 bases normales: Nb: ={ab2: i = 0,1,2,3,4,5,6,7} pour b = 5,9,11,15,21,29,39,43,47,53,55,61,63,87,91,95. Ces valeurs sont prises dans la littérature concernant la théorie de codage. GF(24) a deux bases normales, GF(216) en a une multitude; voir Peterson and Weldon, Theory of Error Correcting Codes, MIT 1975 (2ème édition). En lieu et place de ce qui précède, c, c2 = a170 conviendrait également; il est à noter que 85 = 255: 3. Pour chacune de ces bases normales, on définit à présent une matrice binaire Mb de 8 sur 8 comme illustré sur la Fig. 2. Dans cette matrice, mij, i,j dans{(0, 1,..., 7)}sont définis par les relations: i c ab2 = L- mijab2, i =0,1,2,...,7 j=0 Cela signifie que (miO,mil,..., mi7) est la repré- sentation binaire de cab2 par rapport à la base nor- male Nb. Ces matrices Mb satisfont aux relations Mb = I et I + Mb + Mb = 0. Sur la Fig. 3, les matrices Mb sont données pour b dans une série A5: = {5,11,15, 29,47,53,63,87}. La Fig. 4 donne les matrices Mb pour b dans une série A4: = [9,21,39,43,55,61,91,95. Les propriétés suivantes sont nécessaires: * Propriété 1: Les codes linéaires binaires (16, 8 J avec la matrice de générateur [ I Mb] pour b dans A5 ont une distance de bits minimum de 5. Ceci peut être montré par une vérification directe. * Propriété 2: Les codes linéaires binaires C 16, 8 _ avec la matrice de générateur [ I Mb7 pour b dans A4 ont une distance de bits minimum de 4. Les mots de code de poids 4 ont une composante égale à 1 dans les huit premières positions et trois composantes égales à 1 dans les huit dernières positions ou inversement. * Preuve: Ceci peut être facilement vérifié à l'aide des matrices données sur la Fig. 4. Pour une matrice binaire A, en admettant que pT(A) désigne le vecteur de colonne des parités de rangée de A, c'est-à-dire: p(A)i = 5j Aij. On spécifie à présent le théorème suivant. * Théorème 3: Pour b dans A4 ou A5, M: = Mb, le code linéaire binaire /727, 16 3 C, avec la matrice de générateur représentée sur la Fig. 5, a un profil de distance minimum (6,2,0) si chaque mot de code de c est considéré comme étant formé de trois symboles de 9 bits (I désigne la matrice d'identité de 8 sur 8, 0 désigne la matrice de 8 sur 8 ne comprenant que des zéros). * Preuve: I1 découle des propriétés 1 et 2 que le code / 16, 8] avec la matrice de générateur [I ET(I) | M 2T(M) J a une distance de bits minimum de 6. Etant donné que [ M2 I3 = M2 C I Mj, le code avec la matrice de générateur E I PT(I) I M2 pT(M2) J a aussi une distance de bits minimum de 6. Admettons à présent que c = (cl, c2, c3) = (ml, m2)G soit un mot de code du code C, o Cl, c2 et C3 sont des vecteurs binaires de longueur 9 et m1 et m2 sont des vecteurs de longueur 8. On distingue trois cas: A. m1 e O, m2 = O. Dans ce cas c = ml I pT(I)j o pT(o)I M pT(M)3. Dès lors w(c) >, 6. B. m1 = 0, m2 # O. Dans ce cas c = m2 I pT(I)I O pT(0) I M2 pT(M2). Dès lors w(c) > 6 C. m1 O, m2 0 O C1. Si C3 Y 0, w(ci)>,2 pour i = 1,2,3. Ainsi w(c) > 6. C2. Si c3 = O, m1: m2M, et dès lors c = (m2M P(2M) I m2 p(m2) O 0). w(c) = w (m2 M, pT(M) I, pT(I) J) > 6. - Il résulte de ces observations que le code C a un profil de distance minimum (6,2,0). Les Fig. 6a, 6b, 6c donnent la matrice de générateur réelle G et la matrice de vérification de parité H d'un code ainsi dérivé. On a choisi ici pour b, la valeur 9 (Fig. 4, premier cas). De plus, par souci de clarté, au lieu de zéros binaires, on utilise des points dans une matrice de vérification de parité du code construit dans le théorème 3. En général, la matrice de générateur de code peut être écrite comme un produit de trois matrices r PJ x _ G x Q]. Dans ce produit, E P J est une matrice régulière 16x16 quelconque, [G]est une matrice de générateur 16x27 comme construite plus haut, ou selon un raisonnement semblable pour l'une quelconque des autres bases normales, ou modifiée de manière à ne perdre qu'une partie limitée de la capacité de protec- tion contre les erreurs. Q est une matrice de permu- tation 27x27. Cette dernière matrice est constituée de trois rangées et de trois colonnes de sous-matrices qui sont chacune une sous-matrice 9x9. Les sous-matrices 9x9 sont positionnées d'une manière telle que chaque rangée ou colonne de trois sous-matrices comporte exactement une matrice de sous-permutation différente de zéro, toutes les autres sous-matrices étant consti- tuées exclusivement de zéros. Chaque matrice de sous- permutation agit sur exactement un symbole associé. Chaque rangée et chaque colonne d'une quelconque matrice de souspermutation est formée de huit zéros et d'exactement un seul un. La matrice de vérification de parité ainsi dérivée peut être utilisée pour le décodage par syn- dromes du code. Le syndrome ne comprenant que des zéros indique un mot de code correct. Les 27 syndromes d'erreurs d'un seul bit sont utilisés pour corriger les il erreurs associées. Il reste 2048-1-27=2020 syndromes. Ils sont utilisés pour détecter toutes les erreurs d'un seul symbole, toutes les erreurs de bits doubles, triples et quadruples, et aussi de la plupart des autres configurations d'erreurs éventuelles (mais pas de la totalité de celles-ci). En fait, il est très improbable qu'une quelconque configuration d'erreurs non comprise dans la liste indiquée plus haut produise l'une quelconque des 28 configurations de syndrome qui donneraient finalement un mot d'utilisateur correct (même dans le cas o tous les motifs d'erreurs possè- dent la même probabilité, cette probabilité ne dépasse pas environ 28/2048, soit environ 1%. Le décodeur peut être réalisé comme sur la Fig. 2 de la référence, à l'aide de 27 circuits-portes ET à 11 voies. Mais une réalisation utilisant moins de matériel est décrite dans la section suivante. De plus, il convient de remarquer que les codes construits dans le théorème 3 sont optimums, en ce sens que pour n'importe quel code linéaire binaire E 27, 16 2 comportant des mots de code formés de trois symboles de 9 bits, le profil de distance minimum (a,b,c) satisferait à a égale à 2. MISE EN OEUVRE DE CODEUR ET DE DECODEUR. Dans cette section, on décrit la mise en oeuvre d'un codeur et d'un décodeur pour un code E 27, 16 3 (dans lequel chaque mot de code est considéré comme étant formé de trois symboles de 9 bits) cons- truit plus haut en prenant b = 9. Une matrice de générateur G de ce code est donnée sur la Fig. 6a. Il en résulte une construction directe du codeur qui ne doit réaliser que des opérations de multiplication de matrices. Une matrice de vérification de parité H de ce code est donnée sur la Fig. 6c. La Fig. 6c montre que la matrice de vérification de parité H présente une forme bien structurée. En fait, deux blocs seulement de 8x8 éléments d'agencement irrégulier se présentent. Cette forme structurée est utilisée dans la conception du décodeur. Soit s = s(r) le syndrome d'un vecteur r reçu: s = (sl,s2,..., Sll)T = HZT. Les syndromes {s = HeT I w (e) = l} sont utilisés pour la correction d'erreurs d'un seul bit. Les syndromes différents de zéro restants sont utilisés pour la détection d'erreurs, sans spécifier ainsi la nature de l'erreur. Définissons les signaux A0,Al,A2,A3 de la manière suivante: A0 = S1S2S3, A1 _ A1 = SlS2S3, A2 = s152S3, A3 = S1S253. Les bits de syndromes sl, s2, s3 sont ici en fait des bits de parité sur le symbole de code associé et Si est la valeur inverse de si. Leur réalisation à l'aide de circuits-portes NON-OU est indiquée sur les Fig. 7a à 7d. Si aucune erreur ne se présente, A0 est égal à 1. Si une erreur d'un seul bit se présente, A1,A2,A3 désignent le symbole dans lequel elle se présente: Ai = 1 si cette erreur d'un seul bit se situe dans le symbole i. Considérons à présent les vecteurs uj, vj, wj de longueur 8 qui sont les 8 derniers bits des syndromes respectifs résultant des erreurs d'un seul bit dans les positions j, j+9 et j+18 respectivement (j=l, 2,..., 8). Etant donné que M2 = I+M, il s'avère que uj et vj ne diffèrent que d'une position et que leur différence est exactement wj- On utilise cet état de fait dans la construction du décodeur. Par exemple, pour j=l, les vecteurs ul, vl, wl ont les formes indiquées sur les Fig. 8a, 8b, 8c, c'est-à-dire qu'ils correspondent aux premières colonnes respectives des matrices inférieures 8x9 de la Fig. 6c. La Fig. 9 montre les définitions des autres signaux intermédiaires Xl,Yl,Zl,Bl,Cl,Dl,SEl,SE10,SE19. Les six premiers de ces signaux servent à détecter les vecteurs ul, vl, wl indiqués plus haut, tout en visant a l'utilisation d'un petit nombre de circuits-portes. Ainsi, X1 signale les quatre zéros dans vl. Ensuite, Y1 signale les trois uns dans ul. Finalement, Z1 signale qu'aucun de ces trois derniers uns ne se présente. La détection complète de ul, M1, wl est effectuée par les signaux B1, Cl, D1. La vérification de l'apparition dans le symbole correct est effectuée par des signaux SE1 (erreur simple), SE10, SE19. Par conséquent, si une erreur de bit se produit en position 1, SE1 = 1, si une erreur de bit se produit en position 10, SE10 = 1, si une erreur de bit se produit en position 19, SE19 = 1. 1 Une réalisation des formules Xl,Y1,Zl,B1,Cl,Dl précitées est donnée dans la Fig. 10. Les entrées du bloc sont les huit bits s4, S5,..., sll du vecteur de syndrome. Les sorties du bloc sont les trois bits Bl,C1,D1. L'intérieur du bloc est formé de trois circuits-portes NON-ET et de trois circuits-portes NON- OU et a une profondeur de deux circuits-portes. Ce bloc est qualifié de BLOC 1. D'autres réalisations avec d'autres circuits-portes sont possibles, nous n'en mentionnons qu'une. La production de signaux B2...8, C2...8, D2...8 résulte directement de l'agencement de la matrice H de la Fig. 6c; le nombre de circuits- portes NON-ET requis pour chaque jeu pourrait varier. DESCRIPTION D'UN DECODEUR COMPLET. La Fig. 11 illustre un (dé)codeur complet du code [ 27, 16 indiqué plus haut. L'entrée 100 reçoit les données d'utilisateur d'une largeur de 16 bits. L'élément 102 est le générateur de bits de vérifi- cation, dans lequel les 11 bits de vérification, y compris les trois bits de parité par symbole sont produits. Il est à noter que le code est systématique à deux niveaux, du fait que les bits d'utilisateur ne sont pas modifiés et aussi du fait que les huit bits autres que de parité font eux-mêmes partie d'un symbole de code systématique ( 9, 8]. Si un code non systéma- tique était utilisé, l'élément 102 comprendrait un plus grand nombre de sorties (un nombre quelconque de 12 à 27). L'élément 104 est le système de mémoire à trois modules. Il est à noter que la mémoire peut être formée de plusieurs bancs de mémoire, chaque banc étant formé de trois modules de mémoire. A la sortie de la mémoire 104, le générateur de syndromes 106 produit, par multiplication de matrices, les onze bits de syndromes Sl...11 indiqués. Les blocs 108,..., 114 correspondent aux Fig. 7a à 7d, respectivement, pour produire des signaux A0,..., A3. Le bloc 116 correspond exactement à la Fig. 10. D'une manière analogue à celle de la Fig. 10, les blocs 118 à dérivent X2...X8; Y2...Y8; Z2...Z8, B2...B8; C2...C8; D2...D8. Ces blocs peuvent tous contenir trois cir- cuits-portes NON-ET et trois circuits-portes NON-OU et avoir une profondeur de deux circuits-portes. L'élément 132 est un circuit-porte NON-OU à huit entrées et signale si aucun des bits de syndromes S4...Sll n'est un un logique. 24 circuits-portes ET 134 sont prévus. Les trois premiers reçoivent à l'entrée B1, Cl, D1 et Ai, A2, A3, respectivement et produisent les signaux SE1, SE10, SE19, respectivement. Les trois suivants sont alimentés par le bloc 118 et par des blocs 110, 112, 114 et ainsi de suite. Trois circuits-portes ET 136 sont finalement alimentés en parallèle par la sortie du circuit-porte NON-OU 132 par les signaux Al, A2, A3 respectifs, en vue de produire les signaux SE9, S18 et SE28. Des erreurs d'un seul bit sont corrigées parce qu'une erreur d'un seul bit en position j impli- que nécessairement que SEj=1 et SEi=0 pour i=j. Le mot de code de 27 bits de largeur est transféré du bloc de stockage 104 au correcteur d'erreurs 138 qui est formé de 27 circuits-portes OU-EX à deux entrées recevant chacune un bit de code et un signal de détection d'erreur d'un seul bit correspondant SE pour inverser le bit de code. La sortie 140 peut être connectée à un dispositif d'utilisateur. De cette façon, les bits redondants sont aussi mis à jour pour des erreurs d'un seul bit. Si cela n'est pas nécessaire, les onze circuits-portes OU-EX associés et les entrées à partir des éléments 104, 134, 136 sont omis. Le reste de l'agencement n'est pas modifié. L'élément 142 est un circuit-porte NON-OU de 27 bits de largeur qui peut être construit par con- nexion de circuits-portes moins larges dans une struc- ture libre. La sortie 144 signale "Pas d'erreur d'un seul bit" (soit zéro erreur, soit un motif d'erreurs dont la différence d'avec un motif d'erreurs d'un seul bit) est établie par détection. Le circuit-porte NONOU détecte en 132 qu'aucun des bits de syndromes S4...Sll n'est un "un". Le circuit-porte NON-OU 108 agit de la même manière pour les bits de syndromes S1...S3. Le circuit-porte NON-ET 146 engendre donc une fonction OU de tous les bits de syndromes. Un signal "un" sur la sortie du circuitporte ET 148 signale donc un syndrome différent de zéro, qui n'a néanmoins pas été reconnu comme une erreur d'un seul bit particulière quelconque. Cela étant, une erreur impossible à corriger est détectée de cette façon. Il convient de noter que la profondeur logique du dispositif de reconnaissance d'erreurs est faible: deux circuits-portes dans les blocs 116-130, un circuit-porte dans chacun des cir- cuits-portes ET 134, 138 et un ou quelques uns dans le circuit-porte NON-OU 142, un de plus du fait du cir- cuit-porte ET 148. CONSTRUCTION DE CODES [15, 8] AYANT UN PROFIL DE DISTANCE MINIMUM (4,2,0). * Théorème 4: Si M est une matrice binaire de 4x4 telle que M3 = I et que le code produit par [I M} ait une distance de bits minimum de 3, le code linéaire binaire C [ 15, 8], avec la matrice de générateur indiquée sur la Fig. 12a, a un profil de distance minimum (4,2,0) si chaque mot de code de C est consi- déré comme étant formé de trois symboles de 5 bits. * Prèuve: Analogue à la preuve du théorème; Des matrices M satisfaisant aux conditions du théorème 4 sont construites d'une manière correspondant à celle indiquée plus haut pour un format de code différent. Les codes construits dans le théorème 4 sont optimums. CONSTRUCTION DE CODES 51, 21] PRESENTANT UN PROFIL DE DISTANCE MINIMUM (6,2,0). * Théorème 5: Si M est une matrice binaire de 16x16 telle que M3 = I et que le code produit par EI M] ait une distance de bits minimum d'au moins 5, le code linéaire binaire C E 51,32], avec la matrice de générateur indiquée dans la Fig. 12b a un profil de distance minimum (6,2,0) si chaque mot de code de C est considéré comme étant formé de trois symboles de 17 bits. En fait, les Fig. 5, 12a, 12b sont identiques. * Preuve: Analogue à la preuve du théorème 3. Des matrices M satisfaisant aux conditions du théorème 5 sont construitesd'une manière correspondant a celle décrite plus haut. D'une manière analogue, il est possible de calculer des codes pour des mots de mémoire plus larges, par exemple un code de (99, 64). En général, les capacités de détection d'erreurs augmentent avec la longueur des mots. R E V E N D I CATIONS ___________________________ 1.- Système de mémoire à trois modules, chaque module comportant un nombre égal d'emplacements de symboles de mémoire, chaque emplacement de symbole de mémoire comportant un même nombre de 2i+1 emplacements de bits de mémoire, un mot de mémoire contenant donc 3(2i+l) bits o 3 des moyens d'entrée pour recevoir des mots d'utili- sateur de 2(i+l) bits, des moyens de codage alimentés par les dits moyens d'entrée pour multiplier un mot d'utilisateur reçu par une matrice de générateur (GO) pour produire un mot de mémoire à stocker dans trois emplacements de symboles de mémoire correspondants, o (GO) = (P) x (G) x (Q), o (P) est une matrice régu- lière arbitraire de dimensions 2i+1 deux fois, (Q) est une matrice de permutation arbitraire de dimensions {(3x(2i+1)] x {3x(2i+1)} pour effectuer une permutation par bit dans un symbole de code et/ou une permutation par symbole dans un mot de code, le choix de (P) et de (Q) comprenant des matrices d'identité, et o G est une matrice pour réaliser un code de protection contre des erreurs systématique par bit présentant un profil de distance minimum de (p, 2, 0) o p est au moins égal à cinq. 2.- Système de mémoire à trois modules, chaque module comportant un nombre égal d'emplacements de symboles de mémoire, chaque emplacement de symbole de mémoire comportant un même nombre 2i+1 emplacements de bits de mémoire, un mot de mémoire contenant donc 3(2i+1) bits o i=2, le système de mémoire comprenant des moyens d'entrée pour recevoir des mots d'utili- sateur de 2(i+l) bits, des moyens de codage alimentés par les dits moyens d'entrée pour multiplier un mot d'utilisateur reçu par une matrice de générateur (GO) en vue de produire un mot de mémoire à stocker dans trois emplacements de symboles de mémoire correspon- dants, o (GO) = (P) x (G) x (Q), o (P) est une matrice régulière arbitraire de dimensions (2i+l) x (2i+1), (Q) est une matrice de permutation arbitraire de dimensions {(3x(2i+1)} x {3x(2i+1)} pour effectuer une permutation par bit dans un symbole de code et/ou une permutation par symbole dans un mot de code, le choix de (P) et de (Q) comprenant des matrices d'iden- tité, et o G est une matrice pour réaliser un code de protection contre des erreurs systématique par bit présentant un profil de distance minimum de (p, 2, 0) o p est au moins égal à quatre. 3.- Système de mémoire à trois modules suivant la revendication 1, dans lequel p est égal à au moins six. 4.- Système de mémoire à trois modules suivant l'une quelconque des revendications 1, 2 ou 3, dans lequel la matrice de générateur (G) a la forme ( T(I) 0 pT(0) M T(M) Y T(0) I eT(I) M2 ÉT(M2) o I est une matrice d'identité de 2i x 2i entrées, 0 est une matrice ne comprenant que des zéros de 2i x 2i entrées, pT(I) est une colonne de générateur de parités de tous des uns pour générer un bit de parité sur une première moitié du mot de données et sur une seconde moitié du mot de données respectivement, PT(o) est une colonne de tous des zéros, M est une matrice de redondance de base, M2 est la matrice carrée de M et eT(M) et pT(M2) sont les colonnes associées pour la génération d'un bit de parité sur celles-ci, et o I + M2 = 0. 5.- Mémoire à trois modules suivant la reven- dication 4, dans laquelle (M) x (M) x (M) est égal à une matrice d'identité (I) et (M) comporte des compo- sants mj,k, o O ce qui signifie que (mj,O...mj,2i-l) est la repré- J sentation binaire de cab.2 par rapport à la base nor- maie Nb du champ de Galois GF(221) en question o a est un zéro du polynome primitif associé et c est une puissance prédéterminée de ce zéro. 6.- Mémoire à trois modules suivant la reven- dication 5, dans laquelle i=3, p(x) = x8 + x4 + x3 + x2 + 1 sur GF(2) et c=a85 ou c=a170. 7.- Mémoire à trois modules suivant l'une quelconque des revendications 1 à 6, ce système de mémoire comportant un dispositif décodeur couplé à une sortie du système de mémoire pour décoder un mot de code reçu comme étant protégé par un code défini par la matrice de générateur (G), le décodeur comportant un dispositif générateur de syndromes (106) couplé à la sortie pour produire 3(2i+1) - 2i+1 bits de syndromes, un premier dispositif détecteur (108, 132) alimenté par le générateur de syndromes pour détecter un syndrome différent de zéro, un deuxième dispositif détecteur (110, 112, 114) alimenté par le générateur de syndromes pour détecter une situation dans laquelle un seul symbole de mot de code présente une parité incorrecte et indiquant ce symbole de code, un troisième dispo- sitif détecteur (116, 130) alimenté par le générateur de syndromes pour indiquer provisoirement un numéro d'ordre d'un seul bit de code erroné dans son symbole de code, un dispositif de mise en corrélation (134, 136) alimenté par le premier, le deuxième et le troi- sième dispositif détecteur pour mettre en corrélation un numéro d'ordre indiqué et un symbole de code indiqué et ensuite produire un indicateur d'erreur d'un seul bit, un premier dispositif de signalisation (142, 148) alimenté par le dispositif de mise en corrélation et par le premier dispositif détecteur pour, dans le cas d'un syndrome différent de zéro et en l'absence d'un indicateur d'erreur d'un seul bit, signaler une erreur impossible à corriger. 8.- Système de mémoire à trois modules suivant la revendication 7, comprenant, en outre, un second dispositif de signalisation (142) alimenté par le dispositif de mise en corrélation pour signaler une "situation de pas d'erreur d'un seul bit" au premier dispositif de signalisation.