FR 2624676 A1 19890616 FR 8717301 A 19871211 DISPOSITIF DE CODAGE ET DE DECODAGE DE CODES REED-SOLOMONz -L'invention concerne un dispositif pour fabriquer un message codé selon un code de Reed-Solomon en déterainant k symboles de redondance à partir des symboles à p bits d'un message à transmettre, et des coefficients à p bits d'un polynoie générateur de degré k, comprenant - une mémoire vive de k symboles, c'est-à-dire colportant k positions pouvant contenir chacune p bits, - un additionneur à deux entrées fournissant à sa sortie la sone module 2 des deux mots de p bits présents sur ses entrées, - une première mémoire d'un syibole, c'est-à-dire dont la capacité est de p bits, - un multiplieur fournissant à sa sortie le produit d'un mot de p bits présent sur une entrée, par un des coefficients du polynoie générateur. - une deuxième mémoire d'un symbole. De tels dispositifs de codage sont utilisés dans des réseaux de transmission de données. Un exemple d'un tel réseau est un réseau de transxission du son de haute qualité permet tant de transférer numériquement des voies de son vers des. stations locales de radiophonie qui émiettent en sodulation de fréquence. Le code de Reed-Solomon y est utilisé de préférence parcequ'il est bien adapté à la détection et à la correction d'erreurs de transmission se produisant par paquets groupés. Les codes de Reed Solo on sont des codes colportant en général un nombre important d'élénents, et les opérations de codage et de décodage sont complexes et requièrent en principe de très grosses possibilité de calcul numérique Une méthode de codage et de décodage de codes de Reed-Solomon et des indications sur les éléments a' mettre en oeuvre sont exposées dans le brevet français FR-P-2 549 984 La Demanderesse a constaté qu'une organisation particulière des moyens matériels de lise en oeuvre de la mé- thode en question permet d'améliorer la vitesse d'exécution en réalisant plusieurs opérations dans un même temps d'horloge. L'invention se propose donc de fournir un dispositif de codage optimisé particulièrement rapide. Il est utile de rappeler quelques prinçipes pour une. bonne compréhension de la description qui va suivre. Des codes détecteurs et correcteurs sont constitués d'un certain nombre i de mots représentant le message à transmettre, associés à un nombre k de mots dits de redondance qui permettent la détection et la correction d'erreurs de transmission, le code comportant donc n mots avec n = m+k. Les codes cycliques sont des codes de groupe tels que tout message déduit par permutation circulaire d'un message quelconque du code appartient toujours au code. Tous les éléments d'un code cyclique C(n,m) sont multiples d'un meme élément fondamental appelé polynoîe générateur. La notion de polynome f(x) crée une analogie de représentation selon laquelle le coefficient de chaque puissance de x dans le polynome représente une partie d'un message, la position (le rang) de cette partie dans le message étant représentée par la puissance de x dans le polynome. Tout code cyclique généré à partir d'un polynome premier de degré k (qui représente donc un ensemble de k+1 symboles) détecte tout paquet comprenant jusqu'à k erreurs. Parmi les codes cycliques, le code dit B.C.H. utilise un polynome générateur qui a pour racines des puissances successives de a, soit (a, a2ta3 an], a étant un élément primitif appartenant à un corps de Galois CG(2n). Si la base du corps n'est plus 2, mais un entier quelconque q, donnant lieu à un corps CG(qn), le code B.C.H. particulier obtenu est un code de Reed-Solomon: Chaque symbole n'a plus deux formes possibles, mais q. Si q est de la forme 2P, chaque symbole du message a 2P formes différentes, et peut être traduit en p bits. Un code de Reed-Solomon C(n1m) est ainsi constitué de n symboles (chacun comportant p bits) dont m représertent le message, et k = n-n représentent la redondance. Le polynome générateur est de degré k et chacun de ses coefficients est un symbole conportant p bits. Le codage, c'est-à-dire la recherche des k symboles de redondance correspondant à n symboles de message, s'effectue en recherchant le reste de la division du message, multi- plié par xk, par le polynome générateur : ce reste constitue les k symboles de redondance. L'idée de base sur laquelle repose la réalisation du codeur est d'utiliser un registre à décalage de k positions de p bits chacune pour stocker les k premiers symboles (de poids le plus élevé) d'un message, de commencer alors le calcul des k restes partiels de la division de ces premiers sym- boles par le polynome générateur, ces premiers restes correspondant donc au premier terme du quotient, et, chaque opération de calcul utilisant successivement un des symboles stockés, de profiter du vidage du registre-qui en résulte pour remplir ce dernier au fur et à mesure avec les résultats du calcul, c'est-à-dire les premiers restes partiels, après quoi ce reste partiel-ayant k-l termes, on introduit un symbole suivant du message ce qui, avec les k-i termes du premier reste partiel, fournit k termes comme au début, avec lesquels on effectue de la même façon que précédemment le calcul des k-l restes partiels correspondants maintenant au deuxième terme du quotient, puis on introduit le symbole suivant, et ainsi de suite. A cet effet le dispositif de codage selon l'invention est remarquable en ce que la mémoire vive de k symboles est un registre à décalage à k positions, dont l'entrée est reliée à l'entrée du dispositif! et dont la sortie est reliée à une des deux entrées de l'additionneur et également à la première mémoire dont la sortie est reliée à l'entrée du ul- tiplieur, la sortie de ce dernier étant reliée à l'autre entrée de l'additionneur dont la sortie est reliée à l'entrée de la deuxième mémoire, la sortie de cette dernière étant rebouclée sur l'entrée du registre à décalage à k positions,en ce que dans une première phase d'initialisation, des moyens de commande de séquence font entrer les k premiers symboles de degré le plus élevé du message dans les k positions du registre à décalage, en ce que ces moyens commandent ensuite une séquence itérative dans laquelle ils font d'abord entrer un symbole suivant du message dans le registre dont le contenu de la dernière position passe donc dans la première mémoire, puis commandent ensuite la multiplication dans le multiplieur par successivement les k coefficients du polynome générateur en activant entre chaque multiplication la deuxième mémoire puis le registre à décalage, qui reçoit alors en entrée le contenu de la deuxième mémoire, cette séquence itérative étant répétée jusqu'à l'introduction du dernier symbole de message, suivi encore de k zéros, les k symboles de redondance cherchés se trouvant à la fin dans les k positions du registre à décalage. L'invention concerne aussi un dispositif à mettre en oeuvre dans une opération de décodage, pour calculer les syndromes d'un message codé selon un code de Reed-Solomon C(n,m)' basé sur un polynome générateur de degré k = n-m et composé de symboles à p bits présentés tour à tour à l'entrée du dispositif, comprenant un additionneur à deux entrées chacune pour un mot de p bits, dont une des entrées est reliée à la sortie d'un multiplieur fournissant à sa sortie le produit d'un mot de p bits présenté à son entrée par successivement chacune des racines du polynome générateur, une mémoire vive organisée par mots de p bits, son entrée étant reliée à la sortie de l'additionneur, dispositif dans une première variante duquel l'entrée de la mémoire peut être reliée à l'entrée du dispositif, et dans une deuxième variante duquel la sortie de la mémoire est reliée à l'autre entrée de l'additionneur. Le décodage d'un message reçu, susceptible d'êtré entaché d'erreurs, s'effectue en calculant d'abord un ou plusieurs mots appelés syndromes, qui indiquent l'absence d'erreur quand ils sont nuls, et qui dans le cas contraire permet tent de corriger un certain nombre d'erreurs. Un syndrome s'obtient en remplaçant x par une des racines dti pôlynome générateur, dans le polynome qui représente le message reçu. Ceci sera expliqué plus en détail à propos de l'exemple de réalisation du dispositif selon l'invention. Un procédé pour calculer les syndromes est divulgué par le document cité plus haut. il fait appel à un processus itératif au cours duquel on calcule à chaque fois la racine du polynome élevée à la puissance qui correspond au rang du terme du polynome. L'invention se propose d'utiliser une organisation différente des étapes du calcul, qui permet une réalisation bon marché et simple, de rapidité suffisante. A cet effet, le dispositif selon l'invention dans sa première variante1 est notamment remarquable en ce que l'entrée du dispositif est reliée à l'autre entrée de l'additionneur, la mémoire contient au moins k mots, et sa sortie est reliée à l'entrée du multiplieur, et en ce que des moyens de commande de séquence font entrer dans une phase d'initialisation le premier symbole du message, de degré le plus élevé, présenté à l'entrée du système, dans k positions de la mémo-i- re, l'entrée de celle-ci étant dô'nc reliée à l'entrée du dispositif, puis commandent un cycle itératif dans lequel l'en- trée de la mémoire est constamment reliée à la sortie de l'additionneur et dans chacune des étapes duquel un nouveau symbole le du message est introduit et maintenu à l'entrée du dispositif, c'est-à-dire aussi à une des entrées de l'additionneur, puis une première position de la mémoire est lue, son contenu multiplié par une des racines du polynome générateur, et la valeur de sortie de l'additionneur mise dans la mémoire, puis la même séquence est engendrée avec une deuxième position de mémoire et une deuxième racine du polynome générateur, et ainsi de suite pour les k positions avec les k racines, l'étape suivarite du cycle itératif commençant ensuite avec l'introduction d'un nouveau symbole du message à l'entrée du dispositif, suivi des k séquences de multiplication, addition, et enregistrement, et ainsi de suite jusqu'au dernier symbole du message, les k positions de la mémoire contenant alors chacune un syndrome. Dans sa deuxième variante, le dispositif utilise des séquences itératives telles que le dispositif peut être réali sé en majeure partie au moyen d'un seul circuit intégré polyvalent. A cet effet, le dispositif selon l'invention est no taaent remarquable en ce que des moyens sont prévus pour relier l'entrée du multiplieur soit à l'entrée du dispositif soit à la sortie de la mémoire, en ce que le multiplieur peut en outre être neutralisé, c'est-à-dire fournir en sortie un mot identique à celui présenté en entrée, et l'additionneur peut en outre être court-circuité pour fournir en sortie un mot identique à celui présenté sur son entrée reliée à la sortie du multiplieur, et en ce que des moyens de commande de séquence font entrer, dans une phase d'initialisation, des zéros dans k positions de la mémoire, puis commandent un cycle itératif dont chaque étape correspond à la présentation d'un nouveau symbole du message sur l'entrée duidispositif, suivie d'une première opération et, sauf pour la dernière étape, d'une deuxième opération, exécutées chacune k fois, la même position de mémoire étant utilisée aussi bien en lecture qu'en écriture pour les deux opérations, mais une position différente étant utilisée pour chacune des k fois, associée chaque fois dans le multiplieur à une des k racines du polynome générateur, la première opération consistant en la liaison de l'entrée du multiplieur avec l'entrée du dispositif, la neutralisation du multiplieur, la réalisation d'une addition et l'enregistrement de son résultat dans la mémoire, la deuxième opération consistant en-la liaison de l'entrée du multiplieur avec la sortie de la mémoire, la mise en court-circuit de l'additionneur, la réalisation d'une multiplication et l'enregistrement de son résultat dans la mémoire, l'exécution complète de ce cycle itératif, jusqu'à la présentation et lé traitement du dernier symbole de degré le plus faible du message, fournissant un syndrome dans chacune des k positions de la mémoire. La figure 1 représente une division de polynomes, pour illustrer la méthode. La figure 2 représente schématiquement un dispositif de codage selon l'invention. La figure 3 représente schématiquement une variante d'un dispositif pour calculer le syndrome d'un message. La figure 4 représente une autre variante d'un dispositif pour calculer le syndrome d'un message. Les figures 5 et 6 représentent des schémas équivalents du dispositif de la figure 4 dans deux configurations particulières. Dans l'application à une transmission de son de haute qualité mentionnée en introduction, on échantillonne le son sur 14 bits, puis on comprime les échantillons à 10 bits de façon connue selon une loi de coapression quasi-instantanée, et on les transmet par groupes de 6x32 échantillons, soit 192 mots de 10 bits chacun. Dans chacun de ces mots, une erreur sur les deux bits de poids le plus faible n'a pas de grandes conséquences, donc on cherche à protéger seulenent les huits bits de poids le plus fort contre les erreurs. On a donc à protéger un paquet de 192 symboles à 8 bits. Dans l'exemple de réalisation présenté ci-après on a choisi un polynome générateur de degré k = 6, le code obtenu est donc un code C(198, 192 > . il est bien évident qu'en changeant les valeurs de n, k, m, on peut appliquer cet exemple à n'importe quel autre code. Ici n = 198 k=6 i = 192 On a donc 192 symboles de message, associés à 6 symboles de redondance, soit un ensemble de 198 symboles au total, constituant ce qu'on appelle une trame1. Dans le cas présent, chaque symbole est un mot de 8 bit, ou octet. Le dispositif peut etre adapté à tout autre longueur de mot, en modifiant les capacités des registres ou mémoires, et les valeurs contenues dans la table de multiplier cation du multiplieur. Les 192 symboles du message sont représentés par un polynome P(x) dont les coefficients, qui correspondent chacun à un des symboles, sont représéntés par les signes C1g1, C1901...C11C0 où l'indice correspond à la puissance de x. Ce polynome est multiplié par xk=x6 et devient donc x6.P(x) = C191 x197 + C190 x196 +....+ C0x6 (1) La multiplication par x6 revient à ajouter six symboles nuls à droite du message. Le polynome générateur est représenté par G(x) = x6+Ax5+Bx4+Cx3+Dx2+Ex+F (2) où les coefficients A, B, ...F représentent chacun un mot de p bits (ici p=8), dont la valeur est déterminée selon les dimensions n, m caractérisant le code. Dans le cas du code C(198, 192) on a A = 01110001 B = 10000000 C = 01010001 D = 01101101 E-= 01011100 F = 00010001 La figure 1 représente la division du polynome (1) par le polynome (2). Comme le polynome générateur (2) est nor réalisé, le premier coefficient du quotient est C191 On sait que le terme de gauche du dividende (1) va disparaître, puisque le premier terme du quotient est choisi dans ce but : on n'a donc pas besoin de prévoir de capacité mémoire pour ce terme de gauche.Lors du premier cycle de division on ajoute au dividende un polynome produit du premier terme du quotient C191 x191, par le polynome générateur qui possède k+1 = 7 termes. Le terme de gauche disparaissant, il reste 6 termes à soustraire, dont le coefficient est à chaque fois égal au pre mier symbole du message : C191, multiplié C191riultiplié tour à tour par les coefficients A, B, .. F du polynome générateur.Les coefficients du reste partiel, résultant de la soustraction module 2, correspondant au premier terme (C191 x 191) du quotient sont donc (on rappelle qu'une soustraction modulo 2 est identique à une addition) C190+A.C1911 Cj89+B.C191,...,C186 +E.C191, C185 + F.C191 et ces termes1 concaténés avec les termes non altérés du dividende C134 x 190 + C183 x 189 + + Cox6 constituent le nouveau dividende (représenté entouré d'un cadre sur la figure 1) qui va être utilisé pour y retrancher le produit du second terme du quotient par le polynome générateur, le processus reprenant de façon identique à celui décrit ci-dessus.Notamment le nouveau coefficient de gauche va disparaître, puisque la valeur du second terme du quotient est choisie dans ce but, et on aura donc besoin dé 6 positions comme précedemment pour stocker le deuxième reste partiel. il faut noter qu'on se désintéresse totalement de la valeur du quotient. Le terme constant, à multiplier successivement par les coefficients du polynome générateur, est maintenant le nouveau coefficient de gauche de dividende soit cl190 + A.C19j). Le processus est poursuivi jusqu'au terme de degré zéro du quotient. Sur la figure 2, les différentes connexions représentées par un seul trait sont en réalité des connexions mufti fils transportant en parallèle tous les bits d'un symbole. A partir d'un registre de données 12 contenant successivement les symboles du message à transmettre, ceux-ci sont amenés à l'entrée 6. Cette entrée est reliée à l'entrée du registre à décalage 5 comportant k = 6 positions. Chaque position peut contenir un symbole, c'est-à-dire ici p = 8 bits. La sortie du registre 5 est reliée à une première mémoire 1 d'un symbole, c'est-à-dire capable de mémoriser p = 8 bits, et aussi à une des deux entrées d'un additionneur 4 gui est un additionneur module 2. Des moyens de commande symbolisés par C cl mandent un moyen de sélection symbolisé par un commutateur 13, qui permet l'entrée dans le registre 5 des symboles présentés sur l'entrée 6 du dispositif. Les moyens C font entrer k + 1 = 7 symboles dans le registre. Comme ce dernier n'a que 6 positions, le symbole qui était dans la sixième position du registre à l'avant-dernier temps passe dans la mémoire 1, activée en écriture par C lors du dernier temps. Cette mémoire contient donc alors le symbole entré en premier. L'introduction des 6 premiers symboles constitue une phase d'initialisation, et l'introduction du septième est la première opération d'un cycle itératif. La sortie de la mémoire 1 est reliée à l'entrée 9 d'un multiplieur 3 dont la sortie est reliée à l'autre entrée de l'additionneur 4. Les moyens C commandent la présentation successive des coefficients A, B, C, .. F du polynome générateur en tant que multiplicateur dans l'opération de multipli cation Le coefficient C190 est d'abord présent en tant que multiplicande, alors que A est présenté comme multiplicateur, et la sortie fournit donc le produit A.C190 après activation du multiplieur par les moyens de commande. Le coefficient C189 est alors dans la sixième position du registre 5. L'additionneur 4 fournit donc en sortie C189 + A.C190. L'additionneur est simplement constitué de portes logiques, dont le résultat est immédiatement disponible (dans le même temps d'horloge). La sortie de cet additionneur est reliée à l'entrée d'une deu xième mémoire 2 qui, activée en écriture par les moyens de commande, enregistre cette valeur. Ensuite le registre est "avancé d'un cran", le coefficient B est présenté en tant que multiplicateur, la sortie de la deuxième mémoire 2 étant rebouclée sur l'entrée du registre 5, via le commutateur 13, actionné par C, son contenu passe dans la première position du registre 5, mais l'écriture en première mémoire 1 n'est pas activée et son contenu demeure inchangé. Le multiplieur 3 puis l'écriture en deuxième mémoire 2 sont ensuite activés, et cette deuxième mémoire contient alors C188 + B.C190. les quatre temps suivants sont semblables avec la présentation successive des coefficients C, D, E, F en tant que multiplicateurs. en tant que multiplicateurs. Alors commence le deuxième cycle itératif : les moyens de commande font entrer un nouveau symbole du message, à savoir : C184 dans la première position du registre 1, en poussant le contenu de la sixième position, c'est-à-dire le premier résultat des calculs ci-dessus : {c1go + A.C191, dans la mémoire 1, alors activée en écriture. Un nouveau cycle de 6 opérations de multiplication, d'enregistrement dans la mémoire 2, et de décalage du registre, identique à celui décrit cidessus est alors réalisé. Puis les moyens de commande démar- rent alors un nouveau cycle itératif en faisant entrer le coefficient suivant C183 et ainsi de suite.A la fin, lorsqu'on introduit par la borne 6 le coefficient Co. il faut encore le pousser jusqu'à la première mémoire 1,-csest-à-dire continuer encore six fois le processus itératif complet en in troduisant des zéros à la place des symboles de message. (en effet, si l'on considère le message placé en dividende sur la figure 1, les termes en x5, x4 , xO qui n'existent pas correspondent à 6 coefficients nuls). Chaque étage du processus itératif correspond seulement à trois temps élémentaires d'horloge : dans le premier temps le registre est avancé d'une position et la mémoire 1 enregistre une valeur, dans le deuxième temps la multiplication est faite, et dans le troisième temps la mémoire 2 enregistre une valeur. Le tableau A, présenté à la fin du present texte, montre les contenus successifs des 6 positions du registre 5 et des deux mémoires, pendant les premiers temps du processus. Lorsque les 198 cycles répétitifs sont exécutés, le registre contient le reste final de la division c'est-à-dire six symboles qui sont les symboles de redondance à associer au message. Le multiplieur 3 qui est un multiplieur modulo f(x) où f(x) est un polynome irréductible sur un corps de Galois CG(2p), est réalisé sous la forme d'une table de multiplica- tion d'un octet quelconque (soit 256 formes possibles) par l'un des six coefficients A, B.. F. Cette table doit donc pouvoir contenir 256 x 6 = 1536 octets. Elle est enregistrée dans une mémoire-morte. L'introduction des coefficients A, B,...F en tant que multiplicateurs est symbolique : en réalité l'octet à multiplier et le numéro du coefficient constituent à eux deux une adresse à laquelle on lit dans la mémoire morte le résultat de la multiplication. Ceci s'effectue en un seul temps d'horloge. Les moyens de commande de séquences sont constitués par différentes commandes qui sont mémorisées dans une mémoire morte 20, qui est adressée par un compteur 21. Les données de cette mémoire 20 commandent les différents sous-ensembles du calculateur. Ceci veut dire que les différentes flèches référencées C, sont constituées en pratique d'une connexion multifils, dont chaque fil commande une fonction particulière, la longueur d'un mot dans la mémoire 20 étant telle que chaque bit d'un de ces mots alimente un fil de connexion. Le commutateur 13 est purement symbolique. En fait les sorties des mémoires 2 et 12 sont reliées en permanence à l'entrée du registre 5, et celle des mémoires qui n'est pas en service a sa sortie mise à l'état de haute iepédance Le processus complet comporte trois parties : une initialisation, un cycle de calcul itératif, et la sortie du résultat. L'initialisation suivie du cycle itératif représentent au total 198 opérations d'entrée d'un symbole, c'est-à- dire autant d'opérations que de symboles dans le message à émettre. On peut donc exécuter ces opérations en temps réel au rythme selon lequel les symboles codés sont émis. nais la phase de sortie des résultats nécessiterait une interruption dans la continuité du processus.Afin d'éviter cela, on a prévu un deuxième registre à décalage 50 branché en parallèle sur le premier et des moyens d'aiguillage des sorties des registres 5 et 50, synbolisés par des commutateurs 15, 16. Dans la position représentée, le registre 5 est utilisé pour le calcul, et la sortie du registre 50 est connectée à une borne 14.de sortie des résultats. Dans l'autre- position des commutateurs 15, 16, le registre 50 a sa sortie reliée à la borne 8, et le registre 5 est relié à la sortie 14. Il suffit donc -d'intervertir les registres entre chaque cycle pour pouvoir enchainer les cycles de façon continue, l'un des registres étant utilisé en lecture de son contenu final, pendant que l'autre sert à exécuter le calcul suivant. Si un message reçu est entaché d'erreurs cela signifie que certains des symboles ont été modifiés. Cette modi fication peut etre interprétée comme l'addition de symboles d'erreur aux symboles vrais. Le message de départ étant représenté par un polynome M(x) = x6 P(x) + R(x) (3) ou x6 P(x) est le polynome (1) ci-dessus, et R(x) le reste de sa division par G(x). Le message reçu erroné est représenté par V(x) = E(x) + x6 P(x) + R(x) (4) dans lequel E(x) représente les termes d'erreur ajoutés. Si l'on divise ces termes par le polynome générateur1 on obtient V(x)/G(x)=E(x)/G(x) + x6P(x)/GXx) + R(x)/G(x) (5) Selon les lois de composition définies dans le corps des symboles1 le résultat d'une division est le reste de cette division. Donc le deuxième terme est égal à R(x). Quant au troisième terme, R E(x)=O, le résultat complet est nul. Pour réaliser cette division par G(x) on aurait pu réutiliser le montage utilisé pour le codage, décrit plus haut. Néanmoins un procédé différent permet d'utiliser une structure mieux adaptée à la mise en oeuvre de la correction des erreurs. Le polynome générateur peut être mis sous forme d'un produit G(x) = (x-a0) (x-a1) ..(x-k) dans lequel ao,a1 ak sont les racines du polynome. La vérification du fait que V(x) est divisible par G(x), c'est-à-dire que le polynome(5)- est nul, revient à vérifier que le polynome (4) a les mêmes racines que le polynome générateur. Au lieu de réaliser effectivement la division par G(x), on remplace x dans le polynome (4), par aO, puis a1 et ainsi de suite. A chaque fois on obtient une valeur appelée syndrome. S'ils sont tous nuls, cela veut dire que toutes les racines de G(x) sont racines de V(x) et il n'y a pas d'erreur. Si un seul n'est pas nul, il y a eu erreur. A partir des syndromes on peut corriger un certain nombre d'erreurs notamment au moyen de l'algorithme de correction décrit dans le document cité en préambule, pages 7 à 15. Un polynone de degré k possède k racines1 ce qui conduit donc à k syndromes différents. Dans l'exemple du code C(198, 192) présenté ici, k =6. Il y a donc 6 syndromes. Il faut noter qu'un syndrome n'est pas un polynome, mais a seulement la dimension d'un symbole. En général c'est donc un mot de p bits, et dans l'exemple présent, un syndrome est un octet : en effet le syndrome n'est pas le polynome muni des racines, mais la valeur du polynome, c'est-à-dire qu'on a réalisé les additions module 2 des termes du polynome les uns aux autres. Chaque terme étant un octet1 le résultat est un octet. Reprenant le polynome (4), qui est ici de degré 197, en remplaçant x par une racine ZaZ du polynome générateur1 on peut mettre une première fois "a" en facteur V(a) = (Q97.a196+Q196.a195+...+Q1)a+Q0 puis à nouveau V(a) =((Q197.a195 + Q196 a194+ +Q2)a+Q1)a+Qo et ainsi de suite jusqu'à obtenir V(a) =((...((Q197.a)+Q196)a+Q195)a+...+Q2)a+Q1)a+Q0 (6) On peut donc éviter de calculer a1961 a195, etc dans un premier temps on fait le produit Q1g7 a, auquel on ajoute Q1961 on multiplie à nouveau le tout par a, puis on ajoute Q195 et ainsi de suite. Le dispositif de la figure 3 permet de réaliser très simplement cette séquence de calculs des syndromes. L'entrée des symboles du message reçu dans ce dispositif est constituée par un registre 16 dans lequel sont enregistrés tour à tour les symboles du message. Ce registre d'entrée 16 est relié à l'une des entrées de l'additionneur 20 à deux entrées, chacune pour un octet. L'autre entrée de l'additionneur 20 est reliée à la sortie d'un multiplieur 18 réalisé sous forme d'une table de ul- tiplication qui fournit le produit d'un mot de p bits, ici un octet présenté à son entrée par1 successivement, les 6 racines aOt a1.. .a5 du polynome générateur, sous la commande de moyens C de commande de séquence.Ces racines sont ici des octets, qui sont dans le cas de code C(198, 192) égales à aO= 10000000(élément neutre) a1=.01000000 a2= 00100000 a3= 00010000 a4= 00001000 -a5= 00000100 et le produit résultant est ainsi un octet1 puisque le multiplieur est un multiplieur nodulo f(x), comme celui décrit à propos du codeur Il est réalisé de la même façon au moyen d'une mémoire morte. Le dispositif comporte une mémoire vive 17 qui, dans cette première variante1 peut être un registre à décalage à 6 positions contenant chacune un octet, dont la sortie est reliée à l'entrée du multiplieur 18, et dont l'entrée est reliée à la sortie de l'additionneur 20 et au registre 16 d'entrée du dispositif.Un commutateur 22 est inséré dans cette liaison pour prélever des données soit à partir du registre 16, soit à partir 'due l'additionneur 20. Il peut être réalisé sots la forme d'un multiplexeur "2 octets vers 1 oc tet". Ce dispositif fonctionne de la façon suivante dans une phase d'initialisation, le commutateur 22 étant dans la position représentée, des moyens de commande, qui peuvent être analogues aux moyens 10, il de la figure 1, font entrer 6 fois le premier symbole Q197 dans la mémoire 17. Ensuite le commutateur 22 passe dans l'autre position pour tout le reste du calcul, qui est un cycle itératif comportant 197 étapes, une par symbole à partir de Q196 jusqu a QO. Dans la première étape, un nouveau symbole Q196 est amené dans le registre d'entrée 16. Le symbole Q197 présent dans la dernière position de la mémoire 17 est multiplié par aO dans le multiplieur puis ajouté à Q196 dans l'additionneur 20, puis le registre 17 avance d'une position et le résultat Q197.a0 + Q196 est placé en tête du registre. Cette séquence de multiplication1 addition et avance du registre est répétée encore cinq autres fois avec à chaque fois une nouvelle racine a11 a2....a5 en tant que multiplicateur dans le multiplieur 18. A la fin, les 6 positions du registre contiennent Q197.a0 + Q196 Q197.a1 + Q196,... Q197.a5 + Q196 A ce moment débute la seconde étape du processus itératif avec le symbole Q195 dans le registre 17, et six séquences de multiplication, addition1 et décalage du registre. A l'issue de cette deuxième étape on a donc dans le registre ((Q197 a0 + Q196) ao + Oi95)1((Qi97.ai + Q196).ai + Q195), etc On constate que la première position contient le début de l'expression (6) avec a = a0, chacune des autres positions contenant le même début avec tour à tour les racines a1,a2...a5. Les étapes suivantes comprennent chaque fois les mêmes séquences1 avec à chaque étape un nouveau coefficient dans l'entrée 16, et ceci jusqu'à la dernière étape avec Qo A l'issue de la dernière étape les six positions du registre 17 contiennent chacune un des six syndromes correspondant respectivement aux racines ag, a1" aS, qu'on peut lire sur la connexion de sortie 23, en même temps qu'on introduit 6 fois le symbole Q197 du message suivant. Une structure de ce type peut être réalisée, comme celle du codeur de la figure 2, au moyens de divers composants assemblés sur une carte de circuit imprimé.- La figure 4 représente une variante de structure qui, bien que en apparence plus complexe, est préférable parce que tous les éléments représentés à l'intérieur du cadre 27 en pointillés existent sous forme d'un seul circuit intégré et que l'organisation de ce circuit intégré permet de réaliser aussi la mise en oeuvre d'un algorithme de détermination des erreurs1 après le calcul des syndromes.Un tel circuit est disponible chez plusieurs constructeurs sous des références équivalentes, et notamment sous la référence "An 2901" chez "Analog Devices". Il s'agit d'un microprocesseur Zen tranches" c'est-à-dire dont la longueur de mot peut être choisie à volonté en assemblant plusieur "tranches" de microprocesseur. Ainsi le dispositif peut être adapté à toutes les longueurs de symboles de code. Dans le cas présent, deux microprocesseurs sont assemblés bout à bout pour traiter des symboles de 8 bits. Ces circuits sont associés de préfétence à un circuit "Ai 2910 microprograni controller1 qui joue le rôle des moyens de commande de séquence C mentionnés dans la présente description. Le microprocesseur 27 comprend un registre 17 à seize positions1 dont six sont utilisées pour le calcul des syndromes, mais dont les seize positions sont toutes utilisées dans l'algorithme ultérieur de correction des erreurs. L'adresse d'enregistrement ou de lecture est accessible aux moyens C. Le registre 17 est accessible dans un même temps d'horloge sur deux positions de mémoire simultanément. Il possède donc deux sorties 29, 30. La sortie 30 peut être amenée à l'extérieur, ce qui est symbolisé par la borne 25. Cette sortie ters l'extérieur est sélectionnée par un élément 19 dont la sortie peut être mise à l'état de haute impédance par les moyens de contrôle de séquence C. Le microprocesseur comprend aussi une unité arithmétique et logique 20 dont la sortie est rebouclée sur l'entrée de la mémoire 17. Elle possède deux entrées dont l'une est reliée à la sortie 29 de la mémoire 17 et dont l'autre est accessible au moyen d'un multiplexeur 28, soit à partir de l'extérieur, ce qui est symbolisé par la borne 24, soit à partir de la deuxième sortie 30 du registre 17. Ce multiplexeur sera utilisé dans l'algorithme de correction des erreurs. Dans l'étape de calcul des syndromes, c'est la borne 24 qui est reliée en permanence à l'entrée de l'unité 20. Celle-ci peut additionner deux mots présents sur ses entrées, et aussi transmettre sans altération un mât présent sur l'une de ses entrées. Cette faculté est utilisée ici pour l'entrée 24 en provenance de l'extérieur : on dira alors que l'additionneur 10 est court-circuité. Le mode opératoire de l'unité 20 est déterminé par un décodeur d'opérandes et de fonctions 21 commandé par les moyens C. A l'extérieur du microprocesseur, un registre d'entrée 16 est suivi d'un élément 26 qui peut être mis en état de haute impédance quand l'élément 19 n'y est pas, et réciproquement, et dont la sortie est réunie à la borne 25, reliée à l'entrée d'une table d'opérations 180. Cette entrée peut donc être reliée soit à l'entrée du dispositif soit à une sortie de la mémoire. La table d'opérations 180 est semblable à la table de multiplication 18 de la figure 3, mais elle offre en tout seize opérations possibles. Parmi ces seize opérations, elle offre la multiplication par des six racines ag, a1 ars comme dans le cas de la figure 3. D'autres opérations sont utilisées pour la correction des erreurs qui est faite après le calcul des syndromes.Pour le calcul de ces derniers, seules les six multiplications sont utilisées et la table 180 est un simple multiplieur. Ce dernier peut en outre être neutralisé, ce qui signifie qu'il réalise alors le produit du mot présent sur son entrée par un mot unité1 ce qui revient à transmettre le mot présent à son entrée sans altération. Il se. trouve que dans le présent exemple aO est l'élément neutre du corps, et que cette fonction neutre revient donc à une multi plication par aO La sortie du multiplieur 180 est reliée à la borne 24, c'est-à-dire à une des entrées de l'additionneur 20, pendant tout le calcul des syndromes. Au cours du cycle itératif de calcul le dispositif est utilisé pour deux opérations distinctes dans deux configurations différentes Pour une première opération l'entrée 16 est réunie à l'entrée du multiplieur (l'élément-19 est à l'état de haute iupédance), et le multiplieur est neutralisé : le dispositif est donc équivalent à celui représenté à la figure 5. Pour une deuxième opération, c'est l'élément 26 qui est à l'état de haute impédance et la sortie de la mémoire est donc reliée à l'entrée du multiplieur, et l'additionneur est courtcircuité, le produit de la multiplication parvient donc tel quel à l'entrée de la mémoire : le dispositif est alors équi- valent à celui représenté à la figure 6. Dans une phase d'initialisation les six positions de mémoire sont replis de zéros. Puis un cycle itératif commence : le premier symbole Q197 est amené à l'entrée 16. Une première opération selon le schéma de la figure 5 consiste en la réalisation d'une addition et l'enregistre- ment de son résultat dans la mémoire, le résultat étant placé dans la même position de mémoire que celle ayant fourni le terme à ajouter dans l'additionneur 20. Comme la mémoire contient initialenent des zéros, on ajoute zéro à Q1g7, et on retrouve donc Q197 dans la mémoire. Le fait d'avoir rempli la mémoire de zéros permet d'obtenir que la première étape soit identique aux suivantes. Dans une deuxième opération selon le schéma de la figure 6, une multiplication est réalisée et son résultat est placé dans la position de mémoire qui a fourni le mot à multiplier. Si le multiplicateur est aO, on retrouve donc aO.Q197 dans la mémoire. Une étape du cycle itératif comprend au total six premières opérations et six deuxièmes opérations, chaque couple d'opérations portant à chaque fois sur une position de mémoire différente. L'étape peut consister en six premières opérations successives, suivies de six deuxièmes opérations, les positions de mémoire étant choisies dans l'ordre 0, 1, 2, 3, 4, 5, 0,1, 2, 3, 4, 5. Elle peut aussi bien consister en une première puis une deuxième' opération, le groupe de deux opérations étant recommencé six fois, avec des positions de mémoire choisies dans l'ordre 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5. En ce qui concerne la deuxième opération, elle utilise comme multiplicateur, la première fois : aO, puis la seconde fois : a1 et ainsi de suite jusqu'à a5. A l'issue de la première étape du cycle itératif on retrouve donc dans les six positions de mémoire a0.Q197, a0.Qj71 a1.Q1971 a2.Q197..., a5. Q197 Une seconde étape commence alors avec l'introduction du symbole Q196 à l'entrée 16. Au cours des six premières opérations de la seconde étape, on place donc a0. Q197 + Q196, al..Qi97 +Q196,... a5.Q197 +Q196 dans la mémoire, puis au cours des six deuxièmes opérations on multiplie par ao, a1,...a5. A chaque étape un nouveau symbole est introduit à l'entrée 16, puis il est ajouté aux contenus de la mémoire, les sommes étant ensuite multipliées chacune par une des six racines. Lors de la dernière étape du cycle, dans laquelle le coefficient Qo est utilisé, seules. les six premières opérations sont réalisées. Alors la mémoire contient les six syndromes. Chaque groupe de deux opérations est terminé en deux temps d'horloge, ce qui permet de réaliser l'essentiel du cyle itératif en 197 x 6 x 2 temps d'horloge. Le même circuit selon le schéma de la figure 4 permet, à partir des syndromes, contenus dans le registre 17, de détecter, trouver et corriger les erreurs conformément à l'algorithme de correction mentionné plus haut. A cet effet la table d'opérations 180 contient, outre les six tables de multiplication déjà mentionnées, les dix tables de résultats d'opérations suivants, Q représentant toujours un symbole amené à l'entrée 25 de la table * Q x a8s où aes est la 85e puissance de ai log(Q) t antilog(Q) tels que définis dans le corps de Galois t les trois solutions (S1, S2, S3) de l'équation x3 + 2 + Q = O * les deux solutions (R1, R2) de l'équation x2 + x + Q = 0 t racine carrée de Q * racine cubique de Q L'unité arithmétique 20 est en outre capable d'être court circuitée par rapport à l'une quelconque de ses deux entrées, et aussi d'ajouter une retenue, c'est-à-dire 00000001, de réaliser les opérations d'addition modulo 2 et de ET logique entre ses entrées, sur l'une desquelles on peut amener un symbole depuis l'extérieur, comme on l'a expliqué plus haut, via les éléments 16, 26, 180 (en tant que multiplieur par 1), et 28. Il est alors aisé de vérifier qu'on peut, au moyen de ce circuit, réaliser la séquence d'opérations suivante qui est à la base de l'algorithme de correction log(Ri) Ri + Rj Ri + retenue antilog(Ri) - > j, Ri + Rj - > j, O - > i, D + Ri i, Ri x a0 (puis a1, a2 as, ass) - > j Ri + O x j, Ri + 255 - > i, Ri - retenue 4 i, Ri 4 R1(Ri) - > 4 j, R2(RV) - > j, Ri - Rj | j, racine carrée de Ri 4 j, racine cubique de Ri 4 j, s1(Ri) x j S2(Ri) 4 j S3(Ri) 4 j Chaque opération étant indiquée à gauche de la flèche, où Ri et Rj représentent le contenu de positions i ou j respectivement du registre 17, et conduisant à l'écriture du résultat de l'opération dans la position Ri ou Rj indiquée à droite de la flèche. Entrée Registre 5 Ni " N2 6 6 c.lsl C190 Csa Cia, CI10 Cisi Cisa Cias C190 Ct91 C187 Ciao Cia, Ci,o C191 CtlS C1(17 C1)1 C119 C190 C191 Cllf \/CtllS C107 C188 C189 C190 C191 iiC Cisr ICies C16 C187 C188 C19 C190 C191 A AC191 A.C1s1 Cias Cita6 C187 C188 ' Cias Cisi B B.C191 +C1 90 + Cia, B.Cîsî A.C1s1 Ces C186 Cria7 Ciao C191 C C.Ct91 +Cias +Ciso + Ciao C.C151 B.C191 A.C191 C185 Ciaa C187 C191 D D.C151 +cita +citas +C1SO + C187 D.C191 C.C191 B.C151 A.C191 C105 Cias Cisi E E.C191 +C1S7 +C188 +C189 +C190 I i +C186 E.Cisl D.C191 C.Ci91 B.Cîsî A.Cis( C185 Ctst F F.Cisi +C186 +C187 +C1s8 +C189 +C190 o .+C18S C1.* F,C191 E.C191 D.C191 C.C191 B.C191 A.C191 ~ +C18s +C1ss +C1s7 +C188 +C1ss +C190 C183 C1si F.C191 E-C191 D-C191 C-C191 B.C191 a.c, 9, A A.A.C1g1 +C185 +C1S6 +Ct87 +Cl88 +Ct8s +C190 +AZcssO +B.C191 +c 1s9 TABDEAU A REVENDICATIONS 1. Dispositif pour fabriquer un message codé selon un code de Reed-Solomon en déterminant k symboles de redondance à partir des symboles à p bits d'un message à transmettre, et des coefficients à p bits d'un polynome générateur de degré k, comprenant - une mémoire vive de k symboles, c'est-à-dire comportant k positions pouvant contenir chacune p bits - un additionneur à deux entrées fournissant à sa sortie la somme modulo 2 des deux mots de p bits présents sur ses entrées, - une première mémoire d'un symbole, c'est-à-dire dont la capacité est de p bits - un multiplieur fournissant à sa sortie le produit d'un mot de p bits présent sur une entrée, par un des coefficients du polynome générateur. - une deuxième mémoire d'un symbole, caractérisé en ce que la mémoire vive de k symboles est un registre à décalage à k positions1 dont l'entrée est reliée à l'entrée du dispositif, et dont la sortie est reliée à une des deux entrées de l'additionneur et également à la première é- moire dont la sortie est reliée à l'entrée du multiplieur, la sortie de ce dernier étant reliée à l'autre entrée de l'additionneur dont la sortie est reliée à l'entrée de la deuxième mémoire, la sortie de cette dernière étant rebouclée sur l'entrée du registre à décalage à k positions,en ce que, dans une première phase d'initialisation, des moyens de commande de séquence font entrer les k premiers symboles de degré le plus élevé du message dans les k positions du registre à décalage, en ce que ces moyens commandent ensuite une séquence itérative dans laquelle ils font d'abord entrer un symbole suivant du message dans le registre dont le contenu de la dernière position passe donc dans la première mémoire, puis commandent-en- suite la multiplication dans le multiplieur par successivement les k coefficients du polynome générateur en activant entre chaque multiplication la deuxième mémoire puis le registre à décalage, qui reçoit alors en entrée le contenu de la deuxième mémoire, cette séquence itérative étant répétée jusqu'à l'introduction du dernier symbole de message, suivi encore de k zéros, les k symboles de redondance cherchés se trouvant à la fin dans les k positions du registre à décalage. 2. Dispositif selon la revendication 1( caractérisé en ce qu'il est muni d'un deuxième registre à décalage en parallèle avec le premier, et de moyens pour sélectionner l'un ou l'autre de ces registres, de façon à pouvoir mettre en oeuvre le processus de calcul de la redondance dans l'un des registres pendant qu'on lit le résultat d'un calcul précédent dans l'autre registre. 3. Dispositif pour calculer les syndromes d'un message codé selon un code de Reed-Solomon C(n,m), basé sur un polynome générateur de degré k = n-m et composé de symboles à p bits présentés tour à tour à l'entrée du dispositif, comprenant un additionneur à deux entrées chacune pour un mot de p bits, dont une des entrées est reliée à la sortie d'un multiplieur fournissant à sa sortie le produit d'un mot de p bits présenté à son entrée par successivement chacune des racines du polynome générateur, une mémoire vive organisée par mots de p bits, son entrée étant reliée à la sortie de l'additionneur, et à l'entrée du dispositif, caractérisé en ce que l'entrée du dispositif est reliée à l'autre entrée de l'additionneur, la mémoire contient au moins k mots, et sa sortie est reliée à l'entrée du multiplieur, et en ce que des moyens. de commande de séquence font entrer dans une phase d'initialisation le premier symbole du message, de degré le plus élevé, présenté à l'entrée du système, dans k positions de la mémoire, l'entrée de celle-ci étant donc reliée à l'entrée du dispositif, puis commandent un cycle itératif dans lequel' l'entrée de la mémoire est constatent reliée à la sortie de l'additionneur et dans chacune des étapes duquel un nouveau symbole du message est introduit et maintenu à l'entrée du dispositif, c'est-à-dire aussi à une des entrées de l'additionneur, puis une première position de la mémoire est lue, son contenu multiplié par une des racines du polynome générateur, et la valeur de sortie de l'additionneur mise dans la mémoire, puis la même séquence est engendrée avec une deuxième position de mémoire et une deuxième racine du polynome générateur, et ainsi de suite pour les k positions avec les k racines, l'étape suivante du cycle itératif cl entant ensuite avec l'introduction d'un nouveau symbole du message à l'entrée du dispositif, suivi des k séquences de multiplication, addition1 et enregistrement, et ainsi de suite jusqu'au dernier symbole du message, les k positions de la mémoire contenant alors chacune un syndrome. 4. Dispositif pour calculer les syndromes d'un message codé selon un code de Reed-Solomon C(n,m, basé sur un polynome générateur de degré k = n-m et composé de symboles à p bits présentés tour à tour à l'entrée du dispositif, comprenant un additionneur à deux entrées chacune pour un mot de p bits, dont une des entrées est reliée à la sortie d'un multiplieur fournissant à sa sortie le produit d'un mot de p bits présenté à son entrée par successivement chacune des racines du polynome générateur, une mémoire vive organisée par mots de p bits, son entrée étant reliée à la sortie de l'additionneur, et sa sortie étant reliée.à l'autre entrée de l'additionneur, caractérisé en ce que des moyens sont prévus pour relier l'entrée du multiplieur soit à l'entrée du dispositif, soit à la sortie de la mémoire, en ce que le multiplieur peut en outre être neutralisé, c'est-à-dire fournir en sortie un mot identique à celui présenté en entrée, et l'additionneur peut en outre être court-circuité pour fournir en sortie un mot identique à celui présenté sur son entrée reliée à la sortie du multiplieur, et en ce que des moyens de commande de séquence font entrer, dans une phase d'initialisation, des zéros dans k positions de la mémoire, puis commandent un cycle itératif dont chaque étape correspond à la présentation d'un nouveau symbole du message sur l'entrée du dispositif, suivie d'une première opération et, sauf pour la dernière étape, d'une deuxième opération, exécutées chacune k fois, la même position de mémoire étant utilisée aussi bien en lecture qu'en écriture pour les deux opérations, mais une position différente étant utilisée pour chacune des k fois, associée chaque fois dans le multiplieur à une des k racines du polynome générateur, la première opération consistant en la liaison de l'entrée du multiplieur avec l'entrée du dispositif, la neutralisation du multiplieur1 la réalisation d'une addition et l'enregistrement de son résultat dans la mémoire, la deuxième opération consistant en la liaison de l'entrée du multiplieur avec la sortie de la mémoire, la mise en court-circuit de l'additionneur, la réalisation d'une multiplication et l'enregistrement de son résultat dans la mémoire, l'exécution complète de ce cycle itératif, jusqu'à la présentation et le traitement du dernier symbole de degré le plus faible du message, fournissant un syndrome dans chacune des k positions de la mémoire. 5. Dispositif selon la revendication 4, caractérisé ce que l'ensemble de ses constituants, à l'exception du multiplieur, est-réalisée sous forme d'un micro-processeur et d'un contrôleur de programme en circuits intégrés. 6. Dispositif selon la revendication 5; caractérisé en ce qu'il est réalisé à l'aide d'un microprocesseur en tranches.