DE3856035T2 - Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur - Google Patents

Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur

Info

Publication number
DE3856035T2
DE3856035T2 DE3856035T DE3856035T DE3856035T2 DE 3856035 T2 DE3856035 T2 DE 3856035T2 DE 3856035 T DE3856035 T DE 3856035T DE 3856035 T DE3856035 T DE 3856035T DE 3856035 T2 DE3856035 T2 DE 3856035T2
Authority
DE
Germany
Prior art keywords
output signal
error
galois field
predetermined time
time interval
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE3856035T
Other languages
English (en)
Other versions
DE3856035D1 (de
Inventor
Pak Hui
Michael Riggle
Lih-Jyh Weng
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Quantum Corp
Original Assignee
Quantum Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Quantum Corp filed Critical Quantum Corp
Publication of DE3856035D1 publication Critical patent/DE3856035D1/de
Application granted granted Critical
Publication of DE3856035T2 publication Critical patent/DE3856035T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials

Landscapes

  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Description

    ALLGEMEINER STAND DER TECHNIK I. GEBIET DER ERFINDUNG
  • Diese Erfindung bezieht sich auf die Verwendung einer VLSI-Architektur für große Bandbreite, eine Ausführung mit geringer Warte- bzw. Latenzzeit der Codier-, Decodier- und Fehlerkorrekturfunktionen nach Reed-Solomon, die eine große Zahl von Symbolfehlern in binären digitalen Daten korrigieren können.
  • II. BESCHREIBUNG DER VERWANDTEN TECHNIK
  • Elektronische Kommunikations- und Datenverarbeitungssysteme übertragen, empfangen und speichern elektromagnetische Signale, die binäre "Nullen" und "Einsen" repräsentieren. Während einer Datenübertragung entlang Datenkanälen oder während des Prozesses eines Speicherns von Daten auf verschiedenen magnetischen, optischen oder anderen Speichermedien und Wiedergewinnens von Daten von diesen können fehlerhafte Datenwerte auftreten. Diese Fehler können die Folge eines elektromagnetischen Rauschens auf dem Datenkanal oder von Defekten in den Speichermedien sein. Isolierte Einzelbit-Zufallsfehler und zusammenhängende Multibit- "Bursts" von Fehlern können erkannt und korrigiert werden, wobei ein System verwendet wird, das äußerst zuverlässig ist, d.h. eines, das nicht viele Fehler in den korrigierten Daten erzeugt. Die fehlerhaften Daten müssen eher zumindest erkannt und als fehlerhaft gekennzeichnet werden, als daß auf sie reagiert wird.
  • Im Gegensatz zu Datenkommunikationssystemen, die den Aufwand eines erneuten Übertragens von Daten treiben, bis eine fehlerfreie Übertragung stattfindet, werden auf magnetischen, optischen oder anderen Speichermedien gespeicherte fehlerhafte Daten permanent verloren, es sei denn, sie können korrigiert werden. Durch Codieren von Daten vor einer Speicherung oder Übertragung und Decodieren nach einem Empfang oder einer Wiedergewinnung können Fehler festgestellt und korrigiert werden, bevor die Daten fur eine spätere Verwendung freigegeben werden. Reed-Solomon-Codes sind für die Typen unabhängiger und burstartiger Fehler effektiv, die man auf magnetischen Speichermedien erfährt. Informationen über ein Codieren, Decodieren und Reed-Solomon-Codes insbesondere kann man in "Error Correcting Codes" von Peterson und Weldon, The MIT Press, zweite Auflage (1972) und verschiedenen anderen Texten finden.
  • Für Systeme zur Speicherung und Wiedergewinnung von Binärdaten beginnt eine Fehlerkorrektur, bevor Daten auf dem geeigneten Medium gespeichert werden, das hier als eine Magnetplatte angesehen wird. Zuerst werden die Daten unter Verwendung eines (N,K)-Reed-Solomon-Codeworts mit N m-Bitsymbolen codiert, bestehend aus K Datensymbolen und N-K Fehlerkorrekturcode-(ECC)-Symbolen (engl. Error Correction Code symbols). Die ECC-Symbole sind redundant und liefern die Informationen, die notwendig sind, um fehlerhafte Datensymbole zu erkennen und maximal T = (N-K)/2 Datensymbole zu rekonstruieren.
  • Ein Symbol ist eine Folge von m Bits, z.B. 6 oder 10. Der Datenstrom binärer Ziffern, die zur Speicherung auf einem Plattensektor bestimmt sind, besteht gewöhnlich aus einer Folge von 8, 16 oder 32 Bitworten und muß in eine Folge von Datensymbolen umgewandelt werden. Die N Symbole des Codeworts sind für die Koeffizienten eines Polynoms in x vom Grad N-1 repräsentativ, das durch a(x) dargestellt wird, worin Grad(a) = N-1 ist. ECC-Symbole werden derart erzeugt, daß jedes Codewort durch ein Generatorpolynom, g(x), mit N-K aufeinanderfolgenden Wurzeln in dem Galois- Feld GF(2m) gerade teilbar ist, und wo jedes ECC-Symbol ein Element αi von GF(2m) ist. Das Generatorpolynom g(x) wird basierend auf dem Umfang und der Komplexität des Fehlerkorrekturschemas gewählt, d.h. wie viele Feststellungs- und Korrektursymbole erwünscht sind. In einem (N,K)-Code gilt Grad(g) = N-K. Falls d(x) ein Polynom in x vom Grad K- 1 mit K Datensymbolen di als Koeffizienten ist, ist dann das Codewort a(x):
  • a(x) = d(x) * x(N-K) + e(x)
  • wo
  • e(x) = Rest von [d(x) * x(N-K)/g(x)].
  • Die Koeffizienten von e(x) sind die ECC-Symbole ei. Dieser Prozeß eines Teilens des Datensymbolpolynoms d(x) durch das Generatorpolynom g(x) stellt sicher, daß jedes gespeicherte Codewort a(x) durch g(x) gerade teilbar ist. Falls ein wiedergewonnenes Codewort y(x) fehlerfrei ist, ist y(x) gleich a(x) und durch g(x) gerade teilbar. Falls y(x) durch g(x) nicht gerade teilbar ist, wird dann angenommen, daß das Codewort einen Fehlervektor p(x) enthält, der lokalisiert und korrigiert werden muß, worin y(x) = a(x) + p(x) gilt.
  • Die Faktoren eines Fehlerlokalisierer-Polynoms NU(x) und Fehlerauswerter-Polynoms W(x) lokalisieren die fehlerhaften Datensymbole innerhalb des Codeworts und geben die Werte an, welche, wenn sie Modulo 2 zu den empfangenen Symbolen addiert werden, die korrekten Symbole liefern. Die Terme von NU(x) werden unter Verwendung des Berlekamp- Massey-Algorithmus aus den Fehlersyndromen Si berechnet, die durch Teilen von y(x) durch die Faktoren von g(x) erhalten werden. Falls ein Syndrom nicht Null ist, ist dann ein Teil des Codeworts fehlerhaft (engl. in error). Der lokalisierte Fehler wird durch Berechnen der Wurzeln des Fehlerlokalisierer-Polynoms NU(x) gefunden, und dann kann das korrekte Datensymbol durch Finden des Wertes von W(x) unter Verwendung der Syndrome und NU(x) gefunden werden. Das Finden der Wurzeln in einer digitalen Umgebung verwendet typischerweise einen Suchalgorithmus von Chien. Ein Reed- Solomon-Codier-Decodiersystem, das das Verfahren eines Generatorpolynoms, einer Syndromberechnung und einer Auswertung der Fehlerlokalisierer- und Fehlerauswerter-Polynome verwendet, ist in dem US-Patent Nr. 4,413,339 von Riggle et al. beschrieben.
  • Wegen der vielen Berechnungen, die in Software oder iterativ in Hardware durchgeführt werden, und der Notwendigkeit, die NU(x)- und W(x)-Polynome und alle Wurzeln von NU(x) zu berechnen und W(x) auszuwerten, bevor fehlerhafte Datensymbole korrigiert werden, leiden Decodierer nach dem Stand der Technik an einem oder mehreren der Nachteile einer großen Latenzzeit, kleinen Bandbreite und hoher Kosten, besonders wenn man auf viele Datenfehler trifft. Die Raten behebbarer Fehler für Platten sind daher wegen der geringen Verarbeitungsgeschwindigkeit oder der Kosten der Decodierer auf etwa 1 x 10-6 begrenzt. Schnellere Reed-Solomon- Systeme, die ebenfalls billig sind, haben den Nachteil, daß sie auf ein Korrigieren von maximal nur etwa 4 Symbolen pro Sektor beschränkt sind, was die tolerierbaren Raten behebbarer Fehler für Datenspeichervorrichtungen begrenzt. Über Kreuz verschaltete Reed-Solomon-Decodierer haben eine mäßige Bandbreite und können große Zahlen von Symbolfehlern korrigieren; sie führen aber einen übermäßigen Speicheraufwand für Plattensysteme mit kurzen Plattenblöcken ein, wodurch die auf dem Plattenlaufwerk zugelassene Nettodatendichte reduziert wird. Dies macht einen der Hauptzwecke zum Implementieren des ECC-Systems zunichte, der darin besteht, eine Datenspeicherung mit hoher Dichte auf Plattenlaufwerken zusammen mit den inhärent hohen Datenfehlerraten zu erlauben, die sich aus einer Datenspeicherung mit erhöhter Dichte ergeben.
  • EP-0 114 938 beschreibt ein Fehlerfeststellungs- und -korrektursystem gemäß dem Oberbegriff des Anspruchs 1.
  • Eine Aufgabe dieser Erfindung besteht darin, höhere Raten behebbarer Bitfehler auf sektorisierten Datenspeichervorrichtungen zu korrigieren, während annehmbar niedrige Raten nicht behebbarer Bitfehler geliefert werden.
  • Eine andere Aufgabe dieser Erfindung ist, eine Implementierung mit großer Bandbreite und geringer Latenzzeit der Reed-Solomon-Fehlerkorrekturfunktion zu liefern, wo eine große Zahl von Symbolfehlern mit einem minimalen Datenspeicheraufwand innerhalb eines Standardplattenblocks korrigiert wird.
  • Eine weitere Aufgabe dieser Erfindung besteht darin, Pipeline- und Ablaufsteuerungsprozesse zum Ausführen der Berlekamp-Massey-, Weng- und modifizierten Chien-Algorithmen zu implementieren und neuartige Algorithmen zum Berechnen des Grads des Fehlerstellenpolynoms und seiner Steuerung über den Berlekamp-Massey-Algorithmus zu schaffen, so daß die Reed-Solomon-Fehlerkorrekturfunktion in Echtzeit in Hardware implementiert werden kann.
  • Zusätzliche Aufgaben und Vorteile der Erfindung werden in der Beschreibung dargelegt, welche folgt, und werden zum Teil aus der Beschreibung offenkundig sein oder können durch praktische Anwendung der Erfindung gelernt werden. Die Aufgaben und Vorteile der Erfindung können durch Instrumentierung und Kombinationen realisiert und erhalten werden, die besonders in den beigefügten Ansprüchen herausgestellt sind.
  • Verwandte Anmeldungen
  • US-Patentanmeldung Nr. 050,725, entsprechend EP-0 318 547, mit dem Titel "Real-Time BCH Error Correction Code Decoding Mechanism" von Lih-Jyh Weng, eingereicht am 15. Mai 1987 und dem gleichen Rechtsnachfolger wie die vorliegende Erfindung übertragen.
  • US-Patentanmeldung Nr. 067,712, entsprechend EP-0 328 637, mit dem Titel "Apparatus for Computing Multiplicative Inverses in Data Encoding and Decoding Devices" von Lih-Jyh Weng, eingereicht am 26. Juni 1987 und dem gleichen Rechtsnachfolger wie die vorliegende Erfindung übertragen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung ist in den Ansprüchen 1 und 13 dargelegt.
  • Die beigefügten Zeichnungen, die in die Beschreibung eingearbeitet sind und einen Teil von ihr bilden, veranschaulichen eine bevorzugte Ausführungsform der Erfindung und dienen zusammen mit der oben gegebenen allgemeinen Beschreibung und der im folgenden gegebenen ausführlichen Beschreibung der bevorzugten Ausführungsform dazu, die Grundlagen der Erfindung zu erläutern.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Fig. 1 ist ein schematisches Blockdiagramm, das die Gesamtstruktur einer integrierten Schaltung zeigt, welche eine bevorzugte Ausführungsform der vorliegenden Erfindung bildet;
  • Fig. 2 ist ein schematisches Schaltungsdiagramm, das die Hauptschritte zeigt, die durch den ECC-Generator der Schaltung von Fig. 1 ausgeführt werden;
  • Fig. 3 ist ein Flußdiagramm des Decodierprozesses, der durch den Syndromcomputer, den Fehlerlokalisierer-NU(X)- und Fehlerauswerter-W(x)-Computer und die Computerschaltungen für den Faktor NU(x), die Auswertung W(x) und Korrekturvektor YI von Fig. 1 durchgeführt wird;
  • Fig. 4 ist ein schematisches Schaltungsdiagramm der Syndrom-Berechnungsschaltung, eines Teils des Syndromcomputerblocks 16 der Schaltung von Fig. 1 und eines Teils von Schritt 102 des Flußdiagramms von Fig. 3;
  • Fig. 5 ist ein schematisches Schaltungsdiagramm eines Teils der Änderungssyndrom-Berechnungsschaltung, eines anderen Teils des Syndrom-Berechnungsblocks 16 der Schaltung von Fig. 1 und eines Teils des Schritts 102 des Flußdiagramms von Fig. 3;
  • Fig. 6 ist ein Flußdiagramm der Berechnung des Fehlerlokalisierer-Polynoms NU(x), Schritts 104 von Fig. 3 und eines Teils der Berechnungsschaltung 18 für den Fehlerlokalisierer NU(x) und Fehlerauswerter W(x) von Fig. 1;
  • Fig. 7 ist ein schematisches Schaltungsdiagramm der Ausführung des Algorithmus von Berlekamp, wie im Flußdiagramm von Fig. 6 gezeigt ist;
  • Fig. 8 ist ein schematisches Schaltungsdiagramm des verbleibenden Teils der Ausführung des Algorithmus von Berlekamp, wie im Flußdiagramm von Fig. 6 gezeigt ist;
  • Fig. 9 ist ein schematisches Schaltungsdiagramm eines kombinatorischen Invers-Rechners für ein Galois-Feld, der die Schaltung 364 von Fig. 7 ist;
  • Fig. 10 ist ein schematisches Schaltungsdiagramm der Schaltung, die das Fehlerauswerter-Polynom W(x) berechnet, nämlich Schritt 106 von Fig. 3;
  • Fig. 11 ist ein schematisches Schaltungsdiagramm der Schaltung, die den Wert des Fehlerlokalisierer-Polynoms NU(x) in Echtzeit für jedes Symbol des Codeworts berechnet, nämlich die Schritte 108, 110 und 112 von Fig. 3;
  • Fig. 12 ist ein schematisches Schaltungsdiagramm der Schaltung, die den Wert des Fehlerauswerter-Polynoms W(x) in Echtzeit für jedes Symbol des Codeworts berechnet, nämlich Schritt 114 von Fig. 3;
  • Fig. 13 ist ein schematisches Schaltungsdiagramm der Schaltung, die die Fehlerstellen und Korrekturvektoren von Codewortsymbolen in Echtzeit berechnet, mit den Schaltungen der Fig. 11 und 12 und ebenfalls die Schritte 116, 118 und 120 von Fig. 3 einschließend.
  • Fig. 14 ist ein schematisches Schaltungsdiagramm des Galois-Feld-Teilungsrechners, der die Schaltung 524 von Fig. 13 ist;
  • Fig. 15 ist ein Zeitsteuerungsdiagramm, das die Zeitzuordnungen für Berechnungen und Datenübertragungen in der Schaltung der vorliegenden Erfindung zeigt;
  • Fig. 16 ist ein schematisches Schaltungsdiagramm eines .XOR.-Netzwerks, das als ein GF-α&supmin;³³ -Multiplizierer arbeitet;
  • Fig. 17 ist ein schematisches Schaltungsdiagramm eines .XOR.-Netzwerks, das als ein GF-α&supmin;³² -Multiplizierer arbeitet;
  • Fig. 18 ist ein schematisches Schaltungsdiagramm eines .XOR.-Netzwerks, das als eine Verschiebung-1-Schaltung bekannt ist, die die Funktion eines GF-α¹ -Multiplizierers ausführt;
  • Fig. 19 ist ein schematisches Schaltungsdiagramm eines .XOR.-Netzwerks, das als eine Verschiebung-2-Schaltung bekannt ist&sub1; die die Funktion eines GF-α² -Multiplizierers ausführt;
  • Fig. 20A ist ein schematisches Schaltungsdiagramm einer Schaltung, um [SYMBOL A] x α&supmin;³³ und [SYMBOL A] x α&supmin;³² zu berechnen, wobei der α&supmin;³³-Multiplizierer von Fig. 16 und der α¹-Multiplizierer von Fig. 18 verwendet werden;
  • Fig. 20B ist ein schematisches Schaltungsdiagramm einer Schaltung, um [SYMBOL B] x α³&sup0; und [SYMBOL B] x α³² unter Verwendung eines α³&sup0;-Multiplizierers und der Verschiebung- 2-Schaltung von Fig. 19 zu berechnen;
  • Fig. 21 ist ein schematisches Schaltungsdiagramm einer bevorzugten Ausführungsform der Syndrom-Berechnungsschaltung von Fig. 4, wobei die Verschiebung-1-Schaltung von Fig. 18 verwendet wird, um annähernd eine Hälfte der Multipliziererschaltungsanordnung zu beseitigen;
  • Fig. 22A ist eine zweite bevorzugte Ausführungsform der NUgerade-Schaltung von Fig. 13, wobei die Verschiebung-2- Schaltung von Fig. 19 verwendet wird;
  • Fig. 22B ist ein schematisches Schaltungsdiagramm einer zweiten bevorzugten Ausführungsform der NUungerade-Schaltung von Fig. 13, wobei die Verschiebung-2-Schaltung von Fig. 19 verwendet wird;
  • Fig. 23 ist ein schematisches Schaltungsdiagramm einer zweiten bevorzugten Ausführungsform des Computers für das Fehlerauswerter-Polynom W(x) von Fig. 12, wobei die Verschiebung-1-Schaltung von Fig. 18 verwendet wird.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
  • Nun wird ausführlich auf die vorliegende bevorzugte Ausführungsform der Erfindung, wie in den beigefügten Zeichnungen veranschaulicht, Bezug genommen.
  • Die vorliegende bevorzugte Ausführungsform der einen Reed-Solomon-Fehler feststellenden und korrigierenden Schaltung ist in Figur 1 in Blockdiagrammform dargestellt und als ganzes mit der Ziffer 10 bezeichnet. Wie hierin dargestellt ist, akzeptiert die Schaltung 10 Binärdaten von einem Datenbus 28 eines (nicht dargestellten) Datenverarbeitungssystems und wandelt diese Datenbits in K m-Bit- Datensymbole di um, worin i = 1 bis K gilt. Die Datensymbole di werden gleichzeitig an einen Fehlerkorrekturcode- (ECC)-Generator 14 und eine Datenspeicherplatte 26 durch einen Multiplexer 15 gesendet.
  • Gemäß der Erfindung ist eine Codiereinrichtung zum Codieren der Datensymbole in mehrere erste Reed-Solomon-Codeworte a(x) und Senden der ersten Codeworte zu dem fehlerinduzierenden Medium vorgesehen. Wie darin dargestellt ist, erzeugt der ECC-Generator 14 N-K ECC-Symbole ei, worin i = 0 bis N-K-1 gilt, wobei ein Generatorpolynom g(x) mit Wurzeln &alpha;i, -34 < i < 34, verwendet wird, worin &alpha; ein Grundelement des Galois-Feldes GF(2m) ist. N repräsentiert die Länge des Codeworts und ist eine ganze Zahl < 2m . Die N-K ECC-Symbole ei werden durch den Multiplexer 15 an die K Datensymbole di angefügt, um ein N-Symbol-Reed-Solomon-(N,K)- Codewort a(x) zu erzeugen, das aus N Symbolen ai besteht, die auf der Datenspeicherplatte 26 gespeichert werden. Ein Nachrichtenkopffeld ist ebenfalls für jedes Codewort vorgesehen, das eine Trennung zwischen Codeworten liefert, und andere Speicherfunktionen, und wird nicht ausführlich beschrieben. Die Speichervorrichtung 26 ist ein Beispiel, das ein fehlerinduzierendes Medium enthält, wo Fehler erzeugt werden können, während Daten gerade gespeichert und wiedergewonnen werden.
  • Fehler können an den Symbolen eines Codeworts a(x) auftreten, wenn es auf der Speichervorrichtung 26 gespeichert oder von dieser wiedergewonnen wird. Wenn es von der Platte gelesen wird, wird das Codewort a(x) als y(x) bezeichnet, weil es fehlerhafte Symbole enthalten kann. Wo keine Fehler vorhanden sind, ist y(x) gleich a(x) oder äquivalent p(x) = 0.
  • Gemäß der Erfindung ist eine Puffereinrichtung zum Empfangen, von dem fehlerinduzierenden Medium, mehrerer wiedergewonnener Codeworte y(x) vorgesehen, die gleich den ersten Codeworten sind, in denen Fehler induziert worden sind, und zum ausreichend langen Halten jedes der wiedergewonnen Codeworte, um Fehlerstellen und -werte zu berechnen, vorzugsweise nicht länger als die Zeit, die benötigt wird, um Fehlerstellen und -werte zu berechnen. Wie hierin dargestellt ist, werden von der Datenspeicherplatte 26 gelesene Datensymbole in einem Datenpuffer 22 gehalten. Die Erfindung enthält ferner eine Decodierereinrichtung, um aus den wiedergewonnenen Codeworten mehrere Fehlerstellen und Korrekturvektoren in Echtzeit zu berechnen, während jedes Symbol des wiedergewonnenen Codeworts die Puffereinrichtung verläßt. Wie hierin dargestellt ist, berechnet die Decodiereinrichtung, die einen Syndromcomputer 16, einen Fehlerlokalisierer- und Fehlerauswerter-Computer 18 und einen Fehlerkorrekturvektor-Computer 20 enthält, die Fehlerstelle und den Korrekturvektor für Datensymbole, die im Puffer 22 gehalten werden.
  • Wie hierin dargestellt ist, beginnt der Syndromcomputer 16, Syndrome zu berechnen, während die Codewortsymbole für die Datenspeichervorrichtung 26 gelesen werden. Der Fehlerlokalisierer- und Fehlerauswerter-Computer 18 berechnet das Fehlerlokalisierer-Polynom NU(x) durch Lösen des Berlekamp- Massay-Algorithmus, wobei im Syndromcomputer 16 berechnete Syndrome verwendet werden. Die Terme des Fehlerauswerter- Polynoms W(x) werden ebenfalls im Computer 18 unter Verwendung der Werte von NU(x) und der Syndrome vom Syndromcomputer 16 berechnet.
  • Gemäß der Erfindung ist eine Korrektureinrichtung vorgesehen, die auf die Fehlerstellen und Korrekturvektoren zum Korrigieren fehlerhafter Datensymbole anspricht, während sie die Puffereinrichtung verlassen. Wie hierin dargestellt ist, berechnet der Computer 20, während jedes Datensymbol d'i vom Puffer 22 freigegeben wird, ein Fehlerlokalisierer-Polynom NU(x), wobei ein modifizierter Chien-Suchalgorithmus verwendet wird, und wertet ein Fehlerauswerter- Polynom W(x) aus, um einen Korrekturvektor YI zu berechnen, der durch eine .XOR.-Schaltung 24 einer Exklusiv-ODER- Operation unterzogen wird, wobei das Datensymbol vom Puffer 22 freigegeben wird. Datensymbole des decodierten Codeworts werden durch einen Wandler 27 in 16-Bit-Datenworte umgewandelt und an den Bitdatenbus 28 der Datenverarbeitungsvorrichtung 16 zurückgegeben.
  • Das "Pipeline-Verfahren" oder die Hochgeschwindigkeitsberechnung von Fehlerwerten und -stellen in Echtzeit, während Daten vom Puffer 22 freigegeben werden, ist ein Hauptfaktor beim Erreichen der geringen Latenzzeit oder geringen Haltezeit, was gestattet, daß die Schaltung der vorliegenden Erfindung eine große Bandbreite erreicht.
  • Verwendet man eine VLSI-Logik, um eine einen Reed- Solomon-Fehler korrigierende Funktion auszuführen, erreicht die Schaltung der bevorzugten Ausführungsform eine annehmbar geringe Fehlerrate für decodierte Daten für sektorisierte Datenspeichervorrichtungen, wie z.B. Magnetplatten, Magnetbänder und optische Platten, mit hohen inhärenten Fehlerraten. Die Schaltung liefert eine große Bandbreite von annähernd 70 Megabits pro Sekunde und eine geringe Latenzzeit von etwa 144 Mikrosekunden bei einer Spitzenbandbreite, wobei eine Standardplattensektorgröße von 480 Symbolen verwendet wird, wo bis zu 32 Zehn-Bit-Symbole korrigiert werden müssen, was einen Aufwand von 670 ECC-Bits verlangt.
  • Vorzugsweise, und wie in Fig. 1 gezeigt, werden für eine Speicherung auf der Magnetplatte 26 bestimmte Binärdatenbits von einem (nicht dargestellten) Datenverarbeitungssystem über einen 16-Bit-Datenbus 28 empfangen. Die Binärdaten, welche aus sowohl Informationsworten als auch Fehlerfeststellcode-(EDC)-Worten (engl. Error Detecting Code words) bestehen, werden im Wandler 12 in eine Folge von K Symbolen umgewandelt, wo jedes Symbol m Bits lang ist. In der bevorzugten Ausführungsform ist jedes Symbol 10 Bits lang, und K kann aus 48 bis 941 Datensymbolen ausgewählt werden. Die 10-Bit-Symbole werden aus Datenworten und EDC- Worten zusammengesetzt, wobei jedes Wort 16 Bits lang ist. Die 16-Bit-Worte werden in Symbole umgewandelt, bis alle Datenworte und EDC-Worte in durch di repräsentierte 10-Bit- Datensymbole umgewandelt worden sind. Genug Füllbits werden addiert, um komplette Symbole zu liefern. Datensymbole di werden sowohl an die Speicherplatte 26 als auch den ECC- Generator 14 gesendet.
  • Wie hierin dargestellt ist, enthält die Codierereinrichtung einen ECC-Generator 14. ECC-Symbole ei, die verwendet werden, um Fehler in den Datensymbolen di festzustellen und zu korrigieren, werden unter Verwendung eines Generatorpolynoms g(x) durch den ECC-Generator 14 berechnet. Der gewählte Fehlerkorrekturcode ist ein symmetrischer Reed-Solomon-Code über dem Galois-Feld GF(2¹&sup0;), das durch das Grundpolynom x¹&sup0; + x³ + 1 erzeugt wird. Für den Reed- Solomon-Code der bevorzugten Ausführungsform ist das Generatorpolynom g(x) als: Gleichung I
  • definiert, worin &alpha;i Elemente von GF(2¹&sup0;) sind. GF(2¹&sup0;) enthält 1.023 Elemente; daher kann ein Codewort aus N = 1.023 Symbolen erzeugt werden. Codeworte in der bevorzugten Ausführungsform sind durch den Entwurf der integrierten Schaltung 10 von Fig. 1 auf N = 115 bis 1.008 Symbole begrenzt. Das Generatorpolynom g(x) ist gewählt, um 67 ECC-Symbole zu erzeugen; daher beträgt N-K 67, was genügt, um bis zu 32 fehlerhafte Symbole (engl. in error) pro Sektor oder Codewort zu korrigieren, eine 100 %-Wahrscheinlichkeit zu liefern, daß alle Fehler bis zu 35 Fehler pro Sektor festgestellt werden, und eine hohe Wahrscheinlichkeit eines Feststellens aller Fehler zu liefern, die mehr als 35 pro Sektor zählen. Das Polynom g(x) ist so definiert, daß, wenn es in seine einzelnen Terme entwickelt wird, symmetrische Koeffizienten hat, so daß die Galois-Feld-Multipliziererschaltungen, die unten mathematisch definiert werden, um einen Faktor 2 reduziert werden können, d.h. jeder &alpha;i-Term erscheint zweimal in g(x) als ein Koeffizient einer verschiedenen Potenz von x. Gleichungen 2 und 3 sind Entwicklungen von Gleichung 1. Gleichung 3 zeigt die einzelnen Terme von g(x).
  • Gleichung 2
  • g(x) = (x + &alpha;&supmin;³²) (x + &alpha;³²) ... (x + &alpha;³³) Gleichung 3
  • Fig. 2 zeigt die Schaltung, die vom ECC-Generator 14 verwendet wird, um die 67 ECC-Symbole ei durch Teilen von d(x) * xN-K durch g(x) zu erzeugen, worin d(x) ein Polynom vom Grad K-1 mit Koeffizienten gleich di ist. Das Codewort a(x) ist mathematisch ein Polynom mit Koeffizienten ai und besteht aus den an die Datensymbole di angefügten 67 ECC- Symbolen ei. Man beachte, daß in den Beispielen, die folgen, genau 413 Datensymbole gewählt sind. Syndrommodifizierer, auf die später verwiesen wird, stützen sich auf diese Wahl von 413 Datensymbolen. Falls man a(x) als ein Polynom vom Grad N-1 in x mit den Symbolen ai als Koeffizienten betrachtet, gilt dann
  • Gleichung 4
  • a(x) * xN-K = aN-1xN-1 +aN-2xN-2 ... + a&sub1;xN-K+1 + a&sub0;xN-K.
  • Die Koeffizienten der ersten K Terme sind di, und die Koeffizienten der letzten N-K oder 67 Terme des Polynoms sind ei. Die ECC-Symbole werden durch Teilen von d(x) * xN-K durch g(x) erzeugt, wie durch die Schaltung von Fig. 2 dargestellt ist, was auf ein Teilen des ankommenden Datenstroms di durch g(x) hinausläuft. Die Schaltung 14 enthält 67 mit E(0), E(1) ... E(66) bezeichnete Schieberegister, von denen jedes vorzugsweise ein 10-Bit-Parallelschieberegister ist, wobei die Zahl in Klammern die Potenz von x ist, die durch dieses Register dargestellt wird. Der Datenstrom von 413 Datensymbolen wird in den ECC-Generator 14 gelesen, während die Datensymbole an die Platte 26 zur Speicherung gesendet werden. Der Modus des Generators 14 wird dann gewechselt, indem sowohl das Datengatter 42 als auch das Rückkopplungsgatter 44 blockiert werden, um ECC Symbole aus der Schaltung 14 zu übertragen, die an die Datensymbole angefügt werden sollen. Ein Blockieren des Rückkopplungsgatters löscht auch den ECC-Generator für die nächsten Daten des Sektors. Die -Symbole, von denen eines in Fig. 2 mit 46 bezeichnet ist, zeigen eine parallele .XOR.- oder Modulo-2-Addierfunktion an. Die x&alpha;i-Symbole, von denen eines mit 48 bezeichnet ist, zeigen eine Galois- Feld-Multiplikation mit &alpha;i an, was einem Erhöhen des Exponenten eines Eingabesymbols um i äquivalent ist, z.B. &alpha;j * &alpha;i = &alpha;i+j, worin i+j Modulo 1.023 berechnet wird. Alle GF- Multiplikationsoperationen werden Modulo dem Grundpolynom x¹&sup0; + x³ + 1 durchgeführt.
  • Eine Multiplikation an dem Galois-Feld ist folgendermaßen definiert. Falls p und q zwei beliebige 10-Bit-Symbole sind, wo jedes Bit p0, p1, ... p9 und q0, q1, ... q9 ist, ist dann die GF-Multiplikationsfunktion definiert als: Gleichung 5
  • Die Koeffizienten der verbleibenden Terme (x&sup7; bis x&sup0;) sind die normalen Produkte der Polynome, Modulo x¹&sup0;+x³+1. Weil die Elemente von p und q binäre Ziffern sind, sind Koeffizienten der Form pi(qj+qk) pi.UND.(qj .XOR. qk) äquivalent und können in Hardware auf normale Weise berechnet werden. Jedes Produkt ist ein .UND., und jede Addition in Klammern ist eine Modulo-2-Addition oder .XOR.-Operation.
  • Weil der Reed-Solomon-Code zyklisch ist, wird ein 67- Symbol-"Nebenklasse-Vorspann" (engl. coset leader) mit den 67 ECC-Symbolen einer .XOR.-Operation unterzogen, während sie aus der Schaltung 14 verschoben werden. Der Nebenklasse-Vorspann verhindert, daß die Decodierstelle der Schaltung 10 falsch interpretiert und ein Sektor akzeptiert wird, der falsch verschoben worden ist. Eine Verschiebung von Bits, die mit dem Nebenklasse-Vorspann einer .XOR.- Operation unterzogen worden sind, veranlaßt die Schaltung 10, alle Daten in diesem Sektor als > 32 Fehler enthaltend zu interpretieren. Während der im folgenden diskutierten Datenleseoperation werden die 67 ECC-Symbole, wie sie vom Plattensektor gelesen werden, wieder mit den gleichen Symbolen des Nebenklasse-Vorspanns einer .XOR.-Operation unterzogen, wobei sie von den ECC-Symbolen entfernt werden und keinen Effekt auf die weiteren Berechnungen haben, es sei denn, die Symbole würden verschoben, und dann werden übermäßige Fehler gemäß dem normalen Funktionieren der Decodierschaltung erzeugt.
  • Der Nebenklasse-Vorspann wird auf normale Weise auf die ECC-Symbole in einer .XOR.-Operation angewandt. Die 67 Nebenklasse-Vorspannsymbole der vorliegenden Erfindung werden aus einem Codewort eines Reed-Solomon-Codes ausgewählt, das den Reed-Solomon-Code der vorliegenden Erfindung als Untermenge enthält. Wie durch Experimentieren bestimmt, darf das Codewort, aus dem der Nebenklasse-Vorspann ausgewählt ist, nicht mehr als 67 von Null verschiedene Symbole aufweisen. Es gibt kein bekanntes Verfahren zum Auswählen eines optimalen Nebenklasse-Vorspanns, aber der Nebenklasse-Vorspann der bevorzugten Ausführungsform, dargestellt in Tabelle 1, wird auf 33 oder mehr Fehler hinauslaufen, falls die Symbole des Codeworts um bis zu 100 Bits verschoben sind. Beginnend mit dem letzten Symbol lauten die Nebenklasse- Vorspannsymbole in oktaler Schreibweise: TABELLE 1
  • Nachdem durch den Plattennutzer ein sich ändernder Betrag der Datenspeicherungszeit bestimmt ist, wird ein Codewort y(x) von der Platte 26 gelesen. Wegen möglicher Fehler in den Codewortsymbolen wird nun a(x) durch y(x) repräsentiert. Falls in y(x) keine Fehler vorliegen, gilt dann a(x) = y(x). Das Flußdiagramm von Fig. 3 zeigt die Sequenz von Ereignissen, die durch den Decodiererteil der Schaltung 10 durchgeführt werden, der eine Syndromerzeugungseinrichtung enthält, Schritt 102, die Einrichtung zum Berechnen eines Fehlerlokalisierer-Polynoms NU(x), Schritt 104, und eines Fehlerauswerter-Polynoms W(x), Schritt 106, und eine Einrichtung zum gleichzeitigen Berechnen des Wertes des Fehlerlokalisierer-Polynoms NU(x), Schritte 108, 110 und 112, und des Wertes des Fehlerauswerter-Polynoms W(x), Schritt 114, und eine Einrichtung zum Korrigieren fehlerhafter Symbole im Codewort y(x) in fehlerfreie Symbole ai in Echtzeit, während jede Wurzel von NU(x) und jeder Wert von W(x) berechnet wird, Schritte 116, 118, 120 und 122. In Fig. 3 repräsentiert N die Codelänge in Symbolen, und I repräsentiert die Symbolnummer.
  • Der Syndromcomputer 16 von Fig. 1 erzeugt Syndrome Si, Schritt 102 von Fig. 3, welche die Koeffizienten eines Polynoms S(x) sind. Fig. 4 zeigt die Schaltung, die verwendet wird, um S(x) gleichzeitig zu berechnen, während die Symbole des Codeworts y(x) von einem Sektor der Platte 26 gelesen werden. Die durch die Schaltung von Fig. 4 ausgeführte Berechnung lautet: Gleichung 6
  • Die Berechnung wird durch eine Galois-Feld-Multiplizierereinrichtung durchgeführt, die aus einem Array bzw. Feld von 10 Bit breiten Registern besteht, bezeichnet mit S&sub3;&sub3; bis S&submin;&sub3;&sub3;, GF-Multiplizierern, Addierern und .UND.-Gattern, von denen jedes ein S-Computer ist. Wie in Fig. 2 bezeichnen x&alpha;i-Symbole eine GF-Multiplikationsoperation, und 0 Symbole geben eine Modulo-2-Addition oder .XOR.-Operation an. Ein Moduswechsel findet durch Desaktivieren bzw. Sperren (engl. deasserting) des Rückkopplungsgatters 150 statt, nachdem 479 Symbole in alle 67 S-Computer übertragen worden sind, an welchem Punkt alle 67 .UND.-Gatter, von denen eines als 152 identifiziert ist, blockiert sind und das 480. Symbol gleichzeitig in die 67 S-Computer eingegeben wird. Ein Blockieren des Rückkopplungsgatters 150 löscht alle S- Computer in Vorbereitung für ein Berechnen von Syndromen für den nächsten Sektor.
  • In einer zweiten bevorzugten Ausführungsform wurde eine wesentliche Reduzierung der Hardware erreicht, indem man die Galois-Feld-Multiplizierereinrichtungen des Syndromcomputers von Fig. 4 auf einem halben Symboltakt (70 ns) arbeiten ließ, selbst wenn er Eingabesymbole bei der Hälfte dieser Rate akzeptiert. Dies erlaubt Hardwareeinsparungen, weil jeder Multiplizierer in einer vollen Symbolperiode zweimal verwendet werden kann, um zwei Teilsyndrome zu erzeugen; daher müssen nur 34 der 67 Alpha-Multiplizierer eingebaut sein. Jeder benachbarte Multiplizierer hat einen Bezug zu einer einfachen Funktion. Als Beispiel kann &alpha;&supmin;³² abgeleitet werden, indem man &alpha;&supmin;³³ nimmt und es mit &alpha;¹ multipliziert (-33 + 1 = -32). Multiplizieren mit &alpha;¹ ist einem einmaligen Verschieben und einer XOR-Operation von Bit 9 mit Bit 2 äquivalent.
  • Ist ein 10-Bit-Symbol 9 8 7 6 5 4 3 2 1 0 gegeben, würde dieses mit &alpha;¹ multiplizierte Symbol 8 7 6 5 4 3 9.XOR.2 1 0 9 werden. Dies ist eine viel einfacher und kleiner einzurichtende Funktion als ein &alpha;&supmin;³²-Multiplizierer. Alle geradzahlig numerierten Alpha-Multiplizierer im Syndromcomputer werden auf diese Weise aus den ungeradzahlig numerierten Alpha-Multiplizierern abgeleitet. Dieses gleiche Verfahren zur Reduzierung von Hardware wird ebenfalls im YI- Computer 20 von Fig. 1 verwendet und wird im folgenden ausführlicher diskutiert.
  • Die 67 Syndromwerte Si werden als nächstes zu den S'(K)-Registern einer Änderungssyndromschaltung 200 von Fig. 5 geleitet. Mit Ausnahme des Syndromwerts S&sub3;&sub3; werden Syndromwerte durch Multiplexer eingegeben, von denen einer durch die Ziffer 204 identifiziert ist. Dies gibt die S- Berechnungsschaltung von Fig. 4 frei, um Syndrome für das nächste zu lesende Codewort zu berechnen. Die Schaltung 200 ist ebenfalls Teil des Syndromgenerators 16 von Fig. 1. Die Änderungssyndromfunktion verkürzt die Codesymbole von GF(2¹&sup0;) von maximal 1.023 Symbolen auf die 480 Symbole, die im Beispiel verwendet werden, und speichert die Änderungssyndrome für den verkürzten Code in den SY-Registern 210 von Fig. 5. Die Änderungssyndromberechnung beginnt mit einer Breitseiten- bzw. Querladung (engl. broadside load) der 67 Symbole S(K) in S'(K)-Register, die mit S'(-33) bis S'(33) bezeichnet sind. Das Register 202 wird gleichzeitig gelöscht und mit dem Wert von &alpha;&sup4;&sup6;² geladen, der gleich 0001010101 ist. Multiplexer sind mit S'(K)-Registern und dem nächst höheren S'(K-1)-Register verbunden. Die erste Multiplikation, die im GF-Multiplizierer 206 stattfindet, ist S(-33) x &alpha;&sup4;&sup6;², was dann in ein Schieberegister SY(0) geschoben wird. Ein Multiplexer 208 isoliert das &alpha;&sup4;&sup6;² Signal von den Registern 202 und richtet den GF x &alpha;&sup5;&sup4;&sup4; - Multiplizierer so aus, daß, wenn das Syndrom S(-32) in das Register S'(-33) geschoben wird, es dann mit den Inhalten des Registers 202 multipliziert wird, was das GF-Produkt aus &alpha;&sup4;&sup6;² und &alpha;&sup5;&sup4;&sup4; ist. Jedes Änderungssyndrom im Register SY(K) ist daher das GF-Produkt des Syndromwerts von dem S'(K)-Register, multipliziert mit (&alpha;&sup4;&sup6;²) (&alpha;&sup5;&sup4;&sup4;)n-1. Die x&alpha;&sup5;&sup4;&sup4;- Funktion ist die gleiche durch Gleichung 5 definierte GF- Multiplikation, kann aber durch die folgenden .XOR.-Operationen ausgeführt werden, worin Oi die Ausgabebits eines 10-Bit-Symbols sind und Ii die Eingabebits sind. Tabelle 2
  • Die &alpha;&sup4;&sup6;²- und &alpha;&sup5;&sup4;&sup4;-Multiplizierer der Schaltung 200 sind in der Schaltung der bevorzugten Ausführungsform programmierbar und müssen geändert werden, falls die Codewortlänge von 480 Symbolen geändert wird.
  • Die Einrichtung zum Erzeugen des NU(x)-Fehlerlokalisierer-Polynoms ist in Fig. 1 als Schaltung 18 dargestellt. Änderungssyndrome, SY(K), werden nun verwendet, um NU(x) zu berechnen, wobei der Berlekamp-Massey-Algorithmus, wie von Weng modifiziert, und ein Datenflußverfahren verwendet werden, wie von Riggle vorgeschlagen wurde, um die Verarbeitungsgeschwindigkeit zu erhöhen, Schritt 104 von Fig. 3, und was als das Flußdiagramm von Fig. 6 vollständiger dargestellt ist.
  • Das Flußdiagramm von Fig. 6 zeigt die einzelnen Schritte, die während der Berechnung von NU(x) durchgeführt werden. Fig. 6 ist durch Taktzyklen oder -zustände, die im folgenden ausführlicher beschrieben werden, in Abschnitte unterteilt, um Operationen zu zeigen, die gleichzeitig durchgeführt werden. Der Klarheit halber sind in einem Abschnitt des Diagramms berechnete Größen für andere Kästen im Diagramm verfügbar gemacht; Verbindungslinien sind aber nicht dargestellt.
  • Die Anfangsbedingungen für Fig. 6 sind in Schritt 252 dargestellt. Die Größe D in Schritt 252 ist der ganzzahlige Wert der Codedistanz N-K+1 = 68. Die in Schritt 260 berechnete Größe Y ist als 0 definiert, wenn DU = 0 gilt. Eine (nicht dargestellte) Zustandsmaschine steuert die Prozeßschritte, die 67mal wiederholt werden. Ebenfalls auf Fig. 7 verweisend verbinden während des Zustands 1 (nicht dargestellte) Multiplexer einen 32 Symbole breiten GF-Multiplizierer 350 mit 32 SY-Registern 210 (SY(1)-SY(32)) und 32 NU-Registern 352. Das GF-Produkt wird wie durch Gleichung 5 definiert auf den NU- und SY-Registern ausgeführt. Dies schließt Schritt 254 von Fig. 6 ab. Das Produkt X(I) von Fig. 6 wird zu (nicht dargestellten) Nicht-Schieberegistern verschoben und wird in baumartiger Weise mit SY(0) durch die &spplus;T-Funktion 354 von Fig. 7 einer Exklusiv-ODER-Operation unterzogen, bis ein Einzelbitsymbol DU zum 10-Bit-Bus 356 erscheint. Dies schließt den Schritt 256 von Fig. 6 ab. Die +T-Funktion ist die verkettete .XOR.-Summe aller Eingaben. Falls es n Eingaben Ij gibt, lautet dann die Ausgabe O = I&sub0; I&sub1; ... In. Für eine maximale Geschwindigkeit der .XOR.-Operationen wird eine Baumstruktur wie unten dargestellt verwendet. Tabelle 3
  • Während des Zustands 1 wird ein einzelnes 10-Bit-Symbol in DU-Register 358 getaktet und wird während des Zustands 2 zur Ausgabestufe der Register 358 getaktet. Wie in Schritt 258 von Fig. 6 dargestellt ist, wird gleichzeitig das Zählregister 360 von Fig. 6, das eine Zählervariable LLMR enthält, um 1 erniedrigt und hinsichtlich der Bedingung geprüft, ob sie kleiner als 0 ist. Falls sie kleiner als 0 ist, wird das Gatter 362 freigegeben. Wie in Schritt 260 von Fig. 6 dargestellt ist, wird während des Zustands 2 der Wert von DU im Schieberegister 358 von Fig. 7 zur Ausgabe geschoben und wird verwendet, um (1) einen neuen Wert von Y und einen Inversionsprozeß 364 von Fig. 7, im folgenden beschrieben, zu berechnen, (2) einen neuen Wert von Q = DU P zu berechnen, Schritt 262 von Fig. 6, durchgeführt durch den GF-Multiplizierer 366 von Fig. 7, und (3) hinsichtlich DU = 0 zu testen, der logische Test 368 von Fig. 7 und Schritt 264 von Fig. 6. Falls DU = 0 und LLMR < 0 gelten, wird dann EN über das Gatter 362 als eine Marke gesetzt. Die Inversionsoperation 364 wird gemäß einer Prozedur durchgeführt, die von Lih-Jyh Weng entwickelt wurde, und ist in Fig. 8 dargestellt.
  • Die GF-Inversschaltung 364 von Fig. 7 ist in Fig. 9 ausführlicher dargestellt. Die Schaltung von Fig. 9 berechnet das inverse &alpha;-n eines Eingabesymbols &alpha;n durch Erhöhen des Eingabesymbols zur 32. Potenz und Multiplizieren von diesem mit dem Eingabesymbol, das zur -33. Potenz erniedrigt wurde. Das Ergebnis von &alpha;32n x &alpha;-33n ist &alpha;-n. Um dies zu erreichen, wird ein 10-Bit-Symbol &alpha;n in ein &alpha;³²-.XOR.-Netzwerk 400 mit Biteingaben Ii und Bitausgaben Oi eingegeben, wie unten dargestellt ist: Tabelle 4
  • Jedes repräsentiert ein .XOR. Der Wert &alpha;32n wird mit &alpha;n multipliziert, um &alpha;33n zu erhalten. Weil &alpha;33n Elemente eines Unterkörpers GF(2&sup5;) von GF(2¹&sup0;) sind, gibt es für jedes &alpha;33n nur 31 mögliche Werte ungleich Null. Verwendet man 5 ausgewählte der 10 verfügbaren Bits (I&sub0;, I&sub1;, I&sub2;, I&sub3;, I&sub5;), ist es möglich, ein logisches Netzwerk, wie durch Tabelle 5 unten definiert ist, zu konstruieren, das die 31 Inversen von &alpha;33n (d.h. alle &alpha;-33n) ausgibt. Oi sind die Ausgabebits eines &alpha;-33n-Netzwerks, die aus den Eingabebits Ii kombiniert sind. Die Eingabebits sind die 10 Bits des Symbols &alpha;33n, und die Ausgabebits sind die 10 Bits des Symbols &alpha;33n, und die Ausgabebits sind die 10 Bits des Symbols &alpha;-33n. Tabelle 5
  • Die letzte Operation, um &alpha; &nu; zu invertieren, besteht darin, &alpha;32n mit &alpha;-33n zu multiplizieren, um gemäß der früher präsentierten Gleichung 5 &alpha;-n zu erhalten.
  • Falls EN gesetzt ist, hat während des Zustands 3 LLMR sein Vorzeichenbit ergänzt, Schritt 268 von Fig. 6, sind NR-Eingabeinhalte durch NU-Inhalte ersetzt, Schritt 270, und der Wert von P ist durch den Wert von Y ersetzt. Falls EN nicht gesetzt ist, wird dann NR nach oben (zu Termen höherer Ordnung) geschoben. Ebenfalls während des Zustands 3 werden NU-Eingabeinhalte durch die NU-Ausgaben ersetzt, die mit NR Q einer .XOR.-Operation unterzogen werden, Schritt 274 von Fig. 6, und SY-Register werden nach oben geschoben, Schritt 266. Wenn dies abgeschlossen worden ist, ist eine von 67 Schleifen abgeschlossen worden, wie durch R in Schritt 276 von Fig. 6 gezählt wird. Während der 67. Schleife wird die SY-Registerverschiebung weggelassen, um auf die W(x)-Berechnung vorzubereiten. Ein Test von LLMR wird während jeder Schleife durchgeführt, um sicherzustellen, daß LLMR < 0 ist. Falls dies nicht der Fall ist, liegen dann mehr als 32 = T Fehler im Codewort vor, und der Sektor ist nicht korrigierbar. Nachdem alle 67 Schritte ausgeführt worden sind, sind die letzten NU(I) Koeffizienten des Fehlerlokalisierer-Polynoms NU(x) für 0 < I < (T+1) und NU(0) = 1.
  • Die Schaltung 448 von Fig. 10 enthält eine Einrichtung zum Berechnen des Fehlerauswerter-Polynoms W(x). Wie hierin dargestellt ist, weist die Einrichtung zum Berechnen der Werte des Fehlerauswerter-Polynoms W(x) w Register 450, Register 210 für ein Änderungssyndrom 54, Fehlerlokalisierer- Polynom-NU-Register 352, einen Multiplizierer 350 und einen Baum-Addierer 354 auf, der die in Fig. 3 gezeigte Prozedur ausführt, einschließlich speziell des Schritts 106. Der Einfachheit halber ist in Schritt 106 die Berechnung in einer inversen Form dargestellt. Die Koeffizienten von W'(x) sind die Koeffizienten von W(x) nur in umgekehrter Reihenfolge. Zur Veranschaulichung:
  • Gleichung 7
  • Falls
  • p(x) = p&sub0; + p&sub1;x + p&sub2;x² + ... pkxk
  • lautet dann p'(x) = pk + pk-1x + pk-2x² + ... p&sub0;xk.
  • Das gleiche gilt für S'(x) und NU'(x). Der Modus des NU(x)- Computers ändert sich in einen W(x)-Computermodus, der in Fig. 10 dargestellt ist. (Nicht dargestellte) Multiplexer sind eingestellt, um NU-Register 352 und SY-Register 210 mit dem GF-Multiplizierer 350 zu verbinden, und führen die Berechnung von W(x) über eine .XOR.-Funktion 354 in Baumform aus. Der 10-Bit-Bus 356 ist mit dem Register W(31) von W(I)-Schieberegistern 450 verbunden.
  • Beginnend mit einem neuen Zustand 1 werden die Produkte von SY und NU durch den GF-Multiplizierer 350 multipliziert und durch die Vorrichtung 354 einer .XOR.-Operation in Baumform unterzogen, welche beiden Operationen oben beschrieben worden sind. Ein einzelnes 10-Bit-Symbol wird vom Bus 356 in ein Register W(31) eingegeben. Während des Zustands 2 werden die Inhalte aller W(I)-Register über 32 10- Bit-Symbolbusse 452 (die W-Werte herunterschiebend) eingegeben, und alle SY(I)-Werte werden zu SY(I+1) geschoben (die SY(I)-Werte hochschiebend). Die Zustände 1 und 2 werden wiederholt, bis 32 Zyklen abgeschlossen worden sind. Die Inhalte der W(I)-Register 450 enthalten die Koeffizienten des Fehlerauswerter-Polynoms W(x), und die NU(I)- Register 352 enthalten die Koeffizienten des Fehlerlokalisierer-Polynoms NU(x). NU(I)- und W(I)-Werte werden dann zu den nächsten Funktionen übertragen, Schritte 108, 110, 112 und 114 von Fig. 3. Die Register 210, 352 und 450 sind zweifellos in Vorbereitung auf ein Berechnen von NU(x) und W(x) für das nächste Codewort.
  • Die Schaltungen von Fig. 13 liefern die Einrichtung zum gleichzeitigen Lösen des Fehlerlokalisierer-Polynoms NU(x), um den entsprechenden Fehlerwert von NU(x) und W(x) zu erhalten und um fehlerhafte Symbole im Codewort y(x) in fehlerfreie Symbole ai zu korrigieren, falls jedes Symbol aus dem Puffer 22 von Fig. 1 geschoben wird, was die Schritte einschließt: (1) Lösen jedes Terms von NU(x), Summieren der Terme mit ungerader und gerader Potenz in NUungerade(x) bzw. NUgerade(x), Schritt 108 von Fig. 3, (2) gleichzeitiges Auswerten von W(x) und (3) Korrigieren von Fehlern in y(x), wie durch die Fehlerstellen und Fehlerwerte angegeben, die aus den berechneten Werten von NUungerade(x) und W(x) abgeleitet wurden. Um ein Korrektursymbol oder einen Korrekturvektor YI zu erzeugen, der ein Koeffizient ungleich Null von p(x) für ein gegebenes Codewortsymbol ist, wertet die Fehlerwert-Berechnungsschaltung 20 von Fig. 1 die 32 Symbolwerte von NU(x) plus der Koeffizient niedrigster Ordnung von NU(x), der immer 1 ist, und die 32 Symbolwerte von W(x) für jedes Codewortsymbol innerhalb des Sektors in Echtzeit zur gleichen Zeit aus, während das entsprechende Symbol aus dem Puffer 22 von Fig. 1 geschoben wird. Die Ergebnisse dieser Auswertungen werden dann manipuliert, um das tatsächliche Korrekturpolynom p(x) zu erzeugen.
  • Um Fehlerstellen zu bestimmen, ist die übliche Praxis, eine Chien-Suche zu verwenden, wo alle möglichen legitimen Werte von x getestet werden, um die Wurzeln von NU(x) zu finden. Gestützt auf diese Wurzeln werden die fehlerhaften Symbole identifiziert, wird W(x) ausgewertet und y(x) später korrigiert. Das Standardverfahren erfordert jedoch mehr Latenzzeit als die vorliegende Erfindung. Um den Vorteil einer geringen Latenzzeit zu liefern, ist die Chien-Suche modifiziert, um eine gleichzeitige Auswertung von W(x) zu gestatten, wird der Datenfluß im Pipelineverfahren durchgeführt und werden fehlerhafte Symbole in Echtzeit identifiziert und korrigiert, während sie den Puffer 22 von Fig. 1 auf ihrem Weg zum Datenverarbeitungsbus 28 verlassen. Dies erfordert eine Chien-Suche, wie durch die vorliegende Erfindung modifiziert, um den Wert von NU(x) und W(x) zu berechnen, während jedes Symbol den Puffer 22 verläßt, woraufhin eine Entscheidung bezüglich der Frage getroffen wird, ob das Symbol inkorrekt ist. Falls das Symbol inkorrekt ist, ändert der Koeffizient ungleich Null in p(x), der aus NU(x) und W(x) berechnet wurde, das fehlerhafte Symbol in der .XOR.-Schaltung 24.
  • Die Schaltung 480 von Fig. 11, die aus mehreren Galois- Feld-Multiplizierereinrichtungen besteht, die jeweils ein 10-Bit-Schieberegister und ein Galois-Feld-Multiplizierernetzwerk enthalten, wertet NU(&alpha;i) aus, während jedes Codesymbol zeitlich festgelegt ist, um den Puffer 22 von Fig. 1 zu verlassen, wo i die Nummer des den Puffer 22 von Fig. 1 verlassenden Symbols ist. Während jedes Taktzyklus werden die Inhalte jedes NU-Registers NU&sub1; bis NU&sub3;&sub2; durch den mit dem Register verbundenen GF-Multiplizierer multipliziert, wodurch während jedes Taktzyklus auf eine Wurzel &alpha;i von NU getestet wird. Die Inhalte jedes NU-Registers der Schaltung 480 werden durch dessen entsprechenden GF-Multiplizierer einmal für jedes entsprechende Datensymbol multipliziert. Die Werte von NU für die geraden Potenzen von x und die Werte von NU für die ungeraden Potenzen von x werden getrennt summiert, und auf diese wird als NUgerade und NUungerade verwiesen. Dies schließt die Schritte 110 und 112 von Fig. 3 ab. NUungerade wird für nachfolgende Fehlerwertberechnungen benötigt. Gleichzeitig mit den NU(x)-Berechnungen wird auch W(x) durch eine Schaltung 500 von Fig. 12 einmal für jedes den Puffer 22 verlassene Symbol ausgewertet. Insbesondere berechnet die Schaltung 500 von Fig. 12 W(&alpha;i)x &alpha;34i für jedes Symbol entsprechend Schritt 116 von Fig. 3.
  • Betrachtet man Fig. 13, ist die Schaltung 480 die gleiche Schaltung, wie in Fig. 11 gezeigt, und die Schaltung 500 ist die gleiche Schaltung, wie in Fig. 12 gezeigt. Ein Summierer 520 berechnet NU(x) als die Summe aus NUungerade und NUgerade. Falls NU(x) = 1 gilt, weist dann das i. Symbol des den Puffer 22 verlassenden Codeworts einen Fehler auf (engl. in error), und ein Gatter 522 gibt einen Eingang der Gatter 528 und 530 frei, entsprechend dem Schritt 120 von Fig. 3. Gleichzeitig und ohne Rücksicht darauf, ob das i. Symbol korrekt ist oder nicht, berechnet eine Teilerschaltung 524 den korrekten Wert oder den Korrekturvektor des i. Codewortsymbols. Dieser ist als YI in Schritt 116 von Fig. 3 dargestellt und wird im folgenden ausführlicher diskutiert. Ebenfalls gleichzeitig prüft das logische Gatter 526 auf NUungerade = 0. Falls es Null ist und NUgerade = 1 gilt, setzt dann das Gatter 528 eine Systemmarke, die dem Datenverarbeitungssystem 28 von Fig. 1 anzeigt, daß die decodierte Ausgabe der Schaltung 10 fehlerhaft ist. Die Entscheidung über die fehlerhaften Daten werden dem Datenverarbeitungssystem überlassen. Falls NUungerade = 0 gilt, wird auch der Korrekturvektor YI nicht zur .XOR.-Schaltung 24 über ein Gatter geleitet, weil das Gatter 530 von Fig. 13 offen verriegelt sein wird. Dies entspricht dem Schritt 118 von Fig. 3. Eine während NUungerade = 0 gefundene Fehlerstelle gibt eine Fehlfunktion des Decodierprozesses an.
  • Die Teilerschaltung 524 von Fig. 13, die in Fig. 14 ausführlicher dargestellt ist, arbeitet in ähnlicher Weise wie die GF-Inversschaltung von Fig. 9 außer, daß ein zweiter Eingang und ein dritter Multiplizierer hinzugefügt worden sind. Der Teiler 524 berechnet den Korrekturvektor YI, Schritt 116 von Fig. 3, durch Teilen von Z aus Schritt 114, was durch ein Symbol &alpha;m von Fig. 14 repräsentiert wird, durch NUungerade, was durch ein Symbol &alpha;n von Fig. 14 repräsentiert wird. Der resultierende Korrekturvektor ist daher:
  • Gleichung 8:
  • YI = W(&alpha;i) (&alpha;34i) / NUungerade
  • Dies schließt den Schritt 116 von Fig. 3 ab.
  • Die Schaltung 24 von Fig. 1 ändert fehlerhafte Codewortsymbole durch eine .XOR.-Verarbeitung des Datenstroms vom Puffer 22 mit den Korrekturvektoren, Schritt 122 von Fig. 3. Wenn ein Symbol nicht fehlerhaft ist, ist das Gatter 530 von Fig. 13 offen, und der Korrekturvektor ist Null; daher läßt die .XOR.-Schaltung 24 das Datensymbol ungeändert. Der Pufferdatenstrom muß mit der Berechnung von Fehlerwerten so synchronisiert sein, daß die Korrekturvektoren zu den korrekten Datensymbolen passen.
  • Die Pufferschaltung 22 von Fig. 1 ist eine große First- In-First-Out-Speichereinheit für Daten, die von einem Plattendatenport 26 gelesen werden, und liefert Daten an eine Änderungsschaltung 24 annähernd 2 Sektorzeiten nach einem Dateneintrag in den Puffer. In der bevorzugten Ausführungsform sind die Eingabesymbole in ein Schieberegister einmal für jede Symbollesezeit verriegelt, wobei ein 30-Bit-Wort erzeugt wird. Jede Gruppe aus 3 eingeschobenen bzw. rückgeschalteten (engl. shifted in) Symbolen wird in ein Halteregister geschrieben, dann später in den Puffer übertragen, wo die Gruppe bis zum Ende der Zwei-Sektor-Verzögerungszeit bleibt, woraufhin die Gruppe der 3 Symbole durch ein Leseschieberegister empfangen und an die Datenänderungsfunktion 24 von Fig. 3, jeweils ein Symbol, gesendet wird.
  • Die durch die Decodierschaltungsanordnung durchgeführte letzte Funktion ist eine Umwandlung der geänderten 10-Bit- Symbole in 16-Bit-Datenworte und EDC-Worte durch den Wandlser 27 von Fig. 1. Bits 0-9 des ersten Datenworts sind Bits 0-9 des ersten Symbols. Bits 10-15 des zweiten Datenworts sind Bits 0-5 des zweiten Symbols. Die Umwandlung setzt sich für alle Datenworte so fort, daß Bits 0-7 des Symbols 413 Bits 8-15 des letzten Datenwortes sind und Bits 8 und 9 des 413. Symbols gelöscht werden.
  • Beim Beschreiben der Operation der Schaltung 10 von Fig. 1 wird auf Fig. 15 verwiesen, welche die Zeitzuordnungen für Hauptdatenverschiebungen und Berechnungen zeigt, die durch die Codier- und Decodierschaltungen durchgeführt werden. Der Datenfluß zwischen Abschnitten der Schaltung 10 ist unidirektional, d.h. es gibt keine Flußsteuerung (engl. handshaking). Jeder Abschnitt ist bereit, neue Daten zu akzeptieren, wenn der vorherige Abschnitt bereit ist, sie zu liefern. Der Chip manipuliert Daten synchron mit einer Einzeltaktquelle. Die Zykluszeit des Taktes in der bevorzugten Ausführungsform beträgt nominell 70 ns, was eine halbe Symbolzeit ist. Eine volle Symbolzeit in der bevorzugten Ausführungsform beträgt 140 ns.
  • Ein Decodieren beginnt mit Datensymbolen, die gerade von der Datenspeichervorrichtung 26 in den Puffer 22 und Syndromcomputer 16 von Fig. 1 gelesen werden, Zeitschlitze 600 bzw. 602 von Fig. 15. ECC-Symbole beim Zeitschlitz 604 werden ebenfalls in den Syndromcomputer 16 gelesen. Der Puffer 22 hält Daten, die während des Zeitschlitzes 600 gelesen wurden, für annähernd zwei Sektorzeiten und gibt die Daten bis zum Zeitschlitz 606 nicht frei. Während Daten im Zeitschlitz 602 gerade in den Syndromcomputer 16 von Fig. 1 gelesen werden, beginnt der Syndromcomputer, Daten während des Zeitschlitzes 608 zu verarbeiten. Nach einer Syndrom- und Änderungssyndromberechnung werden das Fehlerauswerter- Polynom W und Fehlerlokalisierer-Polynom NU während der Zeitschlitze 610 und 612 berechnet und werden verwendet, um Korrekturvektoren YI beim Zeitschlitz 614 zu berechnen, während Datensymbole gerade vom Puffer 22 im Zeitschlitz 606 freigegeben werden.
  • Nachdem die Syndromberechnung während des Zeitschlitzes 608 abgeschlossen ist, ist nun der Syndromcomputer 16 bereit, Berechnungen an dem nächsten Codewort beim Zeitschlitz 616 vorzunehmen, wobei Syndrome für diese Daten während des Zeitschlitzes 618 berechnet werden und Fehlerauswerter- und Fehlerlokalisierer-Polynome während der Zeitschlitze 620 bzw. 622 berechnet werden. Korrekturvektoren während des Zeitschlitzes 624 werden für die Daten des Zeitschlitzes 616 berechnet, während sie vom Puffer 22 während des Zeitschlitzes 626 freigegeben werden.
  • Dieses Zeitsteuerungsdiagramm zeigt deutlich die Pipelineverarbeitung, die durch die verbesserten Algorithmen und Schaltungen der vorliegenden Erfindung möglich gemacht wird.
  • In einer zweiten bevorzugten Ausführungsform werden Einsparungen in der Hardware in den Exklusiv-ODER-(.XOR.)- Netzwerken vorgenommen, die verwendet werden, um die GF- x&alpha;i-Multiplikationen zu implementieren, dargestellt in Fig. 4 für den Syndromcomputer, Fig. 12 oder Fig. 13 für den Computer des Fehlerauswerter-Polynoms W(x) und Fig. 11 oder Fig. 13 für die Computer für NUungerade und NUgerade. Um die z&alpha;i- Multiplizierer der vorliegenden Erfindung zu implementieren, ist es notwendig, ein .XOR.-Netzwerk aufzubauen, wie z.B. den in Fig. 16 gezeigten &alpha;&supmin;³³-Multiplizierer. Die - Symbole sind .XOR.-Gatter. Die Eingabe ist ein 10-Bit- Symbol [SYMBOL A], und die Ausgabe ist ein 10-Bit-Symbol [SYMBOL A] x &alpha;&supmin;³³.
  • Die Größe dieser Art eines .XOR.-Netzwerks ist beträchtlich, wobei 59 .XOR.-Gatter für den &alpha;&supmin;³³-Multiplizierer von Fig. 16 und 60 .XOR.-Gatter für den &alpha;&supmin;³²-Multiplizierer von Fig. 17 erforderlich sind. Diese großen .XOR.- Netzwerke sind bei der VLSI-Ebene kompliziert zu implementieren; daher ist es schwierig, viele von diesen in einer kleinen integrierten Schaltung auf Siliziumbasis aufzubauen. Die zweite bevorzugte Ausführungsform der vorliegenden Erfindung liefert eine verbesserte Galois-Feld-Multiplizierereinrichtung, welche die Zahl und Komplexität dieser GF- Multipliziererschaltungen reduziert.
  • Beim Galois-Feld gilt &alpha;i x &alpha;j = &alpha;i+j. Zum Beispiel kann &alpha;&supmin;³² durch Multiplizieren von &alpha;&supmin;³³ mit &alpha;¹ erzeugt werden. Ein gegebener &alpha;-Multiplizierer kann daher aus Produkten einfacherer Multiplizierer konstruiert werden. Die Schaltung von Fig. 18 zeigt eine &alpha;¹-Multipliziererschaltung oder Verschiebung-1-Schaltung, die ein .XOR.-Gatter verwendet, um eine Modulo-2-Addition durchzuführen (Bit 9 .XOR. Bit 2), um das Ausgabebit 3 zu erzeugen, und auch einige kreuzgeschaltete Eingangs- und Ausgangsleitungen verwendet, um Bits auszutauschen, um die gewünschte Ausgabe zu liefern. Die Schaltung von Fig. 19 zeigt eine &alpha;²-Multipliziererschaltung oder Verschiebung-2-Schaltung, die aus zwei .XOR.-Gattern und kreuzgeschalteten Eingängen und Ausgängen besteht, um die gewünschte Ausgabe zu erzeugen. Die Schaltungen von Fig. 20a und 20b zeigen, wie das Produkt eines komplexen &alpha;-Multiplizierers, &alpha;&supmin;³³ oder &alpha;³&sup0;, und eines einfachen Multiplizierers, a¹ oder &alpha;², eine Ausgabe erzeugen kann, die gewöhnlich zwei komplexe Multiplizierer erfordern würde, wodurch die Komplexität der Schaltung erheblich reduziert wird. In Fig. 20a erzeugen ein &alpha;&supmin;³³- und ein &alpha;¹- Multiplizierer eine Ausgabe, die aus dem Eingabesymbol [SYMBOL A] mal &alpha;&supmin;³³ und ebenfalls mal &alpha;&supmin;³² besteht, für eine Nettoeinsparung von 59 .XOR.-Gattern oder eines &alpha;&supmin;³²-Multiplizierer-Netzwerks. Wie in Fig. 20b gezeigt ist, werden ähnlich die Werte von [SYMBOL B] x &alpha;³&sup0; und [SYMBOL B] x &alpha;³² eines &alpha;³&sup0;-Multiplizierers und einer Verschiebung-2-Schaltung erzeugt, wodurch ein &alpha;³²-Multiplizierer eliminiert ist.
  • Die Anwendung dieses Verfahrens auf die GF-Multiplizierereinrichtung für die vorliegende Erfindung eliminiert beinahe die Hälfte der komplexen .XOR.-Netzwerke, die durch den Syndromcomputer und die Fehlerstellen- und Fehlerauswerter-Computer verlangt werden. Fig. 21 zeigt den Syndromcomputer von Fig. 4, konfiguriert gemäß der zweiten bevorzugten Ausführungsform, um das Verfahren zum Reduzieren der Komplexität der GF-Multiplizierer auszunutzen. Um die Zeichnungen zu vereinfachen, sind nur die S(-30)- bis S(-33)-Register und zugehörige GF-Multiplizierer und Multiplexer (MUXs) dargestellt und beschrieben; wobei sich der Rest wiederholt. Die Funktion der Syndromcomputer ist hierin oben schon beschrieben worden. Nur die Anwendung der Verfahren zur Reduzierung der Hardware der GF-Multiplizierereinrichtungen auf den Syndromcomputer wird nun diskutiert.
  • Der Syndromcomputer 16 von Fig. 1 verarbeitet annähernd alle 140 ns (ein voller Symboltakt) in beiden bevorzugten Ausführungsformen ein Symbol durch die Syndrom-Berechnungsschaltung von Fig. 4 oder Fig. 21. In der zweiten bevorzugten Ausführungsform der Syndromcomputerschaltung, wie in Fig. 21 gezeigt ist, besteht die Syndromcomputerschaltung aus mehreren Galois-Feld-Multiplizierereinrichtungen, die jeweils zwei 10-Bit-Register, die mit einem Modulo-2-Addierer durch einen 2-zu-1-Multiplexer gekoppelt sind, ein Halteregister, ein komplexes GF-Multiplizierer-.XOR.-Netzwerk und einen einfachen Verschiebung-1-Multiplexer aufweisen.
  • Bevor der Syndromcomputer 16 beginnt, Berechnungen vorzunehmen, werden alle S-Register 702, 704, 706 und 708 von Fig. 21 durch ein Signal auf einer Rückstelleitung 738 gelöscht. Während des ersten halben Symboltaktes oder annähernd 70 ns werden die 2-zu-1-Multiplexer (2-zu-1-MUXs) 710 und 712 freigegeben, um zu erlauben, daß die Inhalte in ungeradzahlig numerierten S-Registern S(-33), S(-31) etc., ihre Inhalte durch eine GF-Addition in den Addieren 714 und 716 zu den 10-Bit-Datensymbolen von der Platte 26 von Fig. 1 Modulo-2 addieren. Die resultierenden Summen werden in Halteregistern 718 und 720 gespeichert. Die Inhalte der Halteregister werden als nächstes durch die GF-Multiplizierer, &alpha;&supmin;³¹ und &alpha;&supmin;³³, 722 und 724, multipliziert, und das resultierende Produkt wird in S(-31)- und S(-33)-Register 704 und 708 geladen. Die Inhalte des S(-31)-Registers 704 lauten [(vorherige S(-31)-Registerinhalte) + (Datensymbol von der Platte 26)] x &alpha;&supmin;³¹, und die Inhalte des S(-33)- Registers 708 lauten [(vorherige S(-33)-Registerinhalte) + (Datensymbol von der Platte 26)] x &alpha;&supmin;³³.
  • Im nächsten halben Symboltakt von annähernd 70 ns werden die 2-zu-1-MUXs 710 und 712 freigegeben, um die Inhalte in den geradzahlig numerierten S-Registern 702 und 706 auszuwählen, von denen in Fig. 21 nur zwei dargestellt sind, und die Inhalte der geradzahlig numerierten S-Register zu dem gleichen 10-Bit-Symbol, das auf dem Daten-Eingabebus von der Platte 26 vorhanden ist, in den Addierern 714 und 716 zu addieren. Das Ergebnis wird in den Halteregistern 718 und 720 gespeichert. Die Inhalte in den Halteregistern 718 und 720 werden wieder durch die GF-Multiplizierer, &alpha;&supmin;³¹ und &alpha;&supmin;³³, 722 bzw. 724, von Fig. 21 multipliziert, die Ausgabeworte werden als nächstes durch die Verschiebung-1- Schaltungen 726 und 728 multipliziert, und die Ergebnisse werden in Registern 702 und 706 gespeichert. Die Inhalte des S(-30)-Registers 702 lauten [(vorherige S(-30)-Registerinhalte) + (Datensymbol von der Platte 26)] x &alpha;&supmin;³&sup0;, und die Inhalte des S(-32)-Registers 706 lauten [(vorherige S(-32)-Registerinhalte) + (Datensymbol von der Platte)] x &alpha;&supmin;³². Diese Additions- und Multiplikationsberechnung wird für das nächste, von der Platte wiedergewonnene 10-Bit-Datensymbol wiederholt.
  • In der ersten bevorzugten Ausführungsform des Syndromcomputers wird ein Ausgabewert von S von dem Ausgang jedes Addierers geliefert, der mit jedem S-Register verbunden ist, wie in Fig. 4 gezeigt ist. In der zweiten bevorzugten Ausführungsform liefert eine Ausgangsleitung, z.B. 730 von Fig. 21, die Ausgabe für zwei S-Register 706, 708. Ein Wert von S wird bei jedem halben Symboltakt an den Multiplexer 732 ausgegeben, der das Symbol über Leitungen 734 und 738 an dessen jeweiliges S'-Register von Fig. 5 leitet.
  • Die Fig. 22a und 22b zeigen die Computerschaltung 480 für das Fehlerlokalisierer-Polynom NU(x) von Fig. 11 oder Fig. 13 zum Berechnen NUungerade und NUgerade, konfiguriert gemäß der zweiten bevorzugten Ausführungsform, um das Verfahren zum Reduzieren der Komplexität der GF-Multiplizierer auszunutzen. Fig. 22a und 22b zeigen nur kleine Teile des Computers, um die Implementierung des Verfahrens zu veranschaulichen. Die Schaltungen der Fig. 22a und 22b führen die gleichen Funktionen wie die äquivalenten Schaltungen 480 von Fig. 11 oder Fig. 13 in der ersten bevorzugten Ausführungsform aus; daher wird die Funktion dieser Schaltungen nicht weiter diskutiert. Nur die Anwendung der Verfahren zum Reduzieren der Hardware an GF-Multiplizierern auf den Fehlerlokalisierer-Computer wird nun diskutiert.
  • In der zweiten bevorzugten Ausführungsform, wie in Fig. 22a und 22b gezeigt ist, besteht der NUgerade- und NUungerade- Computer aus mehreren Galois-Feld-Multiplizierereinrichtungen, die jeweils zwei 10-Bit-Schieberegister, die mit einem Halteregister durch einen 2-zu-1-Multiplexer gekoppelt sind, ein komplexes GF-Multiplizierer-.XOR.-Netzwerk und einen einfachen Verschiebung-2-Multiplizierer zum wiederholten Multiplizieren der Inhalte des Schieberegisters mit einem Wert von &alpha;i aufweisen. Bevor die NU-Rechner beginnen, Berechnungen durchzuführen, wird ein Satz von 10- Bit-Symbolwerten in alle geradzahlig numerierten NU-Register 750, 752 (nur zwei von diesen sind repräsentativ bezeichnet) und alle ungeradzahlig numerierten NU-Register 771, 773 (nur zwei von diesen sind repräsentativ bezeichnet) von einer (nicht dargestellten) Verbindung mit dem Bus 456 geladen. Während des ersten halben Symboltaktes von annähernd 70 ns werden die 2-zu-1-MUXs 754, 775 freigegeben, um die Inhalte der NU(30)- und NU(29)-Register 750 und 771 in die Halteregister 756 bzw. 777 zu kopieren. Die Inhalte der Halteregister 756, 777 werden dann durch &alpha;³&sup0;- und &alpha;²&sup9;- GF-Multiplizierer 758, 779 multipliziert. Die Ausgaben der GF-Multiplizierer 758, 779 werden in die entsprechenden NU(30)- und NU(29)-Register 750, 771 zurückgeladen. Die Inhalte des NU(30)-Registers 750 sind nun gleich [vorherige NU(30)-Registerinhalte] &alpha;³&sup0;, und die Inhalte des NU(29)- Registers 771 lauten [vorherige NU(29)-Registerinhalte] x &alpha;²&sup9;.
  • Während des nächsten halben Symboltaktes werden die 2- zu-1-MUXs 754, 775 freigegeben, um die Inhalte in den NU(32)- und NU(31)-Registern 752, 773 in ihre jeweiligen Halteregister 756, 777 zu kopieren. Die Inhalte der Halteregister werden als nächstes durch die gleichen GF-&alpha;³&sup0;- und &alpha;²&sup9;-Multiplizierer 758, 779 multipliziert. Die Ausgabewerte der GF-Multiplizierer 758, 779 werden in die entsprechenden NU(32)- und NU(31)-Register 752, 773 zurückgeladen, nachdem sie mit &alpha;² in den jeweiligen Verschiebung-2-Schaltungen 762, 783 multipliziert sind. Die Inhalte des NU(32)-Registers 752 sind nun gleich [vorherige NU(32)-Registerinhalte] x &alpha;³¹. Dieser Prozeß wird wieder im nächsten Symboltakt wiederholt.
  • Fig. 23 zeigt die Computerschaltung 500 für das Fehlerauswerter-Polynom W(x) von Fig. 12 oder Fig. 13, konfiguriert gemäß der zweiten bevorzugten Ausführungsform, um das Verfahren zum Reduzieren der Komplexität der GF-Multiplizierer auszunutzen. Fig. 23 zeigt nur einen kleinen Teil des Computers, um die Implementierung des Verfahrens zu veranschaulichen. Die Schaltung von Fig. 23 führt die gleichen Funktionen wie die äquivalente Schaltung 500 von Fig. 12 oder Fig. 13 in der ersten bevorzugten Ausführungsform aus; daher wird die Funktion dieser Schaltung nicht weiter diskutiert. Nur die Anwendung der Verfahren zum Reduzieren der Hardware an GF-Multiplizierern auf den Fehlerauswerter- Computer wird nun diskutiert.
  • Die Fehlerauswerter-Schaltung 800 besteht aus mehreren Galois-Feld-Multiplizierereinrichtungen der gleichen Form wie die NUungerade- und NUgerade-Schaltungen der Fig. 22a und 22b zum wiederholten Multiplizieren der Inhalte der NU-Register mit &alpha;i, und funktioniert in ähnlicher Weise. Gerade Werte von W() werden während eines halben Symboltaktes in den geraden W-Registern berechnet und gespeichert, und ungerade Werte werden während des nächsten halben Symboltaktes in den ungeraden W-Registern berechnet und gespeichert. Nur geradzahlig numerierte &alpha;-Multiplizierer sind vorgesehen; die ungeraden &alpha;-Multiplizierer werden durch die Verschiebung-1-Schaltung bereitgestellt.
  • Weil während jedes halben Symboltaktes nur eine Hälfte der W-Werte berechnet und im Baum-Addierer 802 summiert wird, speichert und addiert ein Akkumulator 804 die geraden und ungeraden Ausgaben des Addierers 802, um den vollen Wert von W() für eine Berechnung des Korrekturvektors, wie in Fig. 13 gezeigt, zu liefern.
  • Durch Anwenden des Verfahrens der zweiten bevorzugten Ausführungsform auf den Syndromcomputer werden vielmehr nur 34 komplexe GF-Multiplizierer-.XOR.-Netzwerke statt den 67 benötigt, die erforderlich sind, um den Algorithmus in Hardware in der ersten bevorzugten Ausführungsform zu implementieren. Desgleichen verringert dieses Verfahren den Bedarf von .XOR.-Netzwerken in den NUgerade-, NUungerade- und W- Computern von 64 auf 32.
  • Zusätzliche Vorteile und Modifikationen fallen dem Fachmann ohne weiteres ein. Die Erfindung in ihren weiteren Aspekten ist daher nicht auf die spezifischen Einzelheiten, das repräsentative Gerät und die veranschaulichenden Beispiele beschränkt, die gezeigt und beschrieben wurden. Demgemäß können von solchen Einzelheiten Abweichungen vorgenommen werden, ohne vom Umfang des allgemeinen erfinderischen Konzepts der Anmelder abzuweichen, wie es in den beigefügten Ansprüchen definiert ist.

Claims (22)

1. Gerät zum Feststellen und Korrigieren von Fehlern in Binärdatensymbolen, die unter Verwendung eines Reed-Solomon- Fehlerkorrekturcodes codiert worden sind, um Reed-Solomon- Codeworte zu erzeugen, worin jedes Codewort in sich eine gewählte Anzahl Datensymbole enthält, wobei das Gerät umfaßt:
A. Puffereinrichtung (22) zum Empfangen zumindest eines Codeworts mit der gewählten Anzahl Datensymbole und Freigeben jedes der empfangenen Datensymbole nach einer vorgewählten Zeitspanne;
B. Decodierereinrichtung (16, 18 und 20), um für jedes empfangene Codewort Fehlerstellen und Fehlerwerte zu berechnen durch (i) Bestimmen einer Fehlerlokalisierer-Gleichung und Finden von Wurzeln der Fehlerlokalisierer-Gleichung, wobei die Wurzeln Fehlerstellen entsprechen, und (ii) Bestimmen zugeordneter Fehlerwerte und
C. Korrigiereinrichtung (22 und 24), die auf die berechneten Fehlerstellen und Fehlerwerte anspricht, zum Korrigieren jedes der empfangenen Datensymbole mit einem Fehler bei Freigabe des Symbols von der Puffereinrichtung,
wobei die Decodierereinrichtung ferner gekennzeichnet ist als:
mehrere Galois-Feld-Multiplizierereinrichtungen enthaltend zum wiederholten Multiplizieren von mit den empfangenen Codeworten verbundenen Signalen mit &alpha;i, wobei jede der Galois-Feld-Multiplizierereinrichtungen aufweist:
1. einen Multiplexer (710, 754 oder 775) zum Durchlassen eines ersten Eingangssignals während eines ersten vorbestimmten Zeitintervalls und eines zweiten Eingangssignals während eines zweiten vorbestimmten Zeitintervalls, um ein erstes Ausgangssignal zu erhalten;
2. einen ersten Galois-Feld-Multiplizierer (722, 758 oder 779) zum Multiplizieren des ersten Ausgangssignals mit einem ersten vorbestimmten Wert, um ein zweites Ausgangssignal zu erzeugen;
3. ein erstes Register (704, 750 oder 771), das gekoppelt ist, um während des ersten vorbestimmten Zeitintervalls das erste Eingangssignal an den Multiplexer zu liefern und das resultierende zweite Ausgangssignal zu speichern;
4. einen zweiten Galois-Feld-Multiplizierer (726, 762 oder 783) zum Multiplizieren des zweiten Ausgangssignals mit einem zweiten vorbestimmten Wert, um ein drittes Ausgangssignal zu erzeugen; und
5. ein zweites Register (702, 752 oder 773), das gekoppelt ist, um während des zweiten vorbestimmten Zeitintervalls das zweite Eingangssignal an den Multiplexer zu liefern und das resultierende dritte Ausgangssignal zu speichern;
worin die Decodierereinrichtung zu einer vorbestimmten Zeit die Inhalte von gewählten Registern des ersten und zweiten Registers kombiniert und die Kombinationen beim Bestimmen der Fehlerstellen und zugeordneten Fehlerwerte verwendet.
2. Gerät nach Anspruch 1, bei dem die Decodierereinrichtung ferner eine Berechnungseinrichtung zum Berechnen von Syndromen Si für jedes der empfangenen Codeworte enthält, während die Codewort-Datensymbole empfangen werden, wobei die Berechnungseinrichtung umfaßt:
i. mehrere S-Computer zum Erzeugen der Koeffizienten Si eines Syndrom-Polynoms S(x); und
ii. einen Änderungssyndromrechner (200) zum Ändern der Koeffizienten von S(X), um einem verkürzten Code zu entsprechen.
3. Gerät nach Anspruch 2, bei dem die Decodierereinrichtung eine Einrichtung enthält, um gleichzeitig aus den geänderten Koeffizienten die Werte eines Fehlerlokalisierer-Polynoms NU(x), das mit der Fehlerlokalisierer-Gleichung verbunden ist, und eines Fehlerauswerter-Polynoms W(x) für jedes der empfangenen Datensymbole zu berechnen, worin:
NU(x)S(x) = W(x) modulo xt
gilt, S(x) ein Polynom in x mit Koeffizienten in Si ist und t die Anzahl der Fehler ist, die der Reed-Solomon-Code korrigieren kann.
4. Gerät nach Anspruch 3, bei dem die Decodierereinrichtung ferner enthält:
A. Einrichtung (480, 500) zum gleichzeitigen Auswerten von NUungerade(&alpha;i), NUgerade(&alpha; ) und W(&alpha;i), entsprechend jedem empfangenen Datensymbol, während dieses Symbol vom Puffer freigegeben wird, wo &alpha;i einer Codewortstelle entspricht und NUgerade(&alpha;i) und NUungerade(&alpha;i) die Summen der geraden bzw. ungeraden Terme des bei &alpha;i berechneten Fehlerlokalisierer-Polynoms sind; und
B. Einrichtung (522, 524) zum gleichzeitigen Auswerten eines Ausdrucks NUungerade(&alpha;i) + NUgerade(&alpha;i) und Berechnen eines Korrekturvektors YI, entsprechend jedem der empfangenen Datensymbole, worin gilt:
wobei die Korrigiereinrichtung Fehler durch Kombinieren von YI mit jedem der empfangenen Datensymbole korrigiert, die mit &alpha;i verbunden sind, wofür der Ausdruck NUungerade(&alpha;i) + NUgerade(&alpha;i) gleich einem vorbestimmten Wert ist.
5. Gerät nach Anspruch 2, bei dem jeder S-Computer eine Galois-Feld-Multiplizierereinrichtung zum wiederholten Multiplizieren von mit den Syndromen verbundenen Eingangssignalen mit &alpha;i enthält, wobei die Multiplizierereinrichtung aufweist:
a. eine logische UND-Schaltung (152), die auf ein Rückkopplungssignal und ein Eingangssignal anspricht, um ein erstes Ausgangssignal zu liefern;
b. einen Galois-Feld-Multiplizierer (x&alpha;i), der auf das erste Ausgangssignal anspricht, zum Multiplizieren des ersten Ausgangssignals mit einem vorbestimmten Wert zu einer vorbestimmten Zeit, um ein zweites Ausgangssignal zu erhalten;
c. ein Speicherregister (Si) zum Speichern des zweiten Ausgangssignals; und
d. einen Galois-Feld-Addierer zum Addieren des gespeicherten zweiten Ausgangssignals zu einem Datensignal und Liefern der Summe als das Eingangssignal an die logische UND-Schaltung (152).
6. Gerät nach Anspruch 2, bei dem jeder S-Computer eine Galois-Feld-Multiplizierereinrichtung zum wiederholten Multiplizieren eines Signals mit &alpha;i enthält, wobei die Galois- Feld-Multiplizierereinrichtung aufweist:
A. einen Multiplexer (710) zum Durchlassen eines ersten Eingangssignals während eines ersten vorbestimmten Zeitintervalls und eines zweiten Eingangssignals während eines zweiten vorbestimmten Zeitintervalls, um ein erstes Ausgangssignal zu erhalten;
B. eine Modulo-2-Addierereinrichtung (714) zum Addieren des ersten Ausgangssignals zu einem Datensignal, um ein zweites Ausgangssignal zu erhalten;
C. einen ersten Galois-Feld-Multiplizierer (722) zum Multiplizieren des zweiten Ausgangssignals mit einem ersten vorbestimmten Wert, um ein drittes Ausgangssignal zu erzeugen;
D. ein erstes Register (704), das gekoppelt ist, um während des ersten vorbestimmten Zeitintervalls das erste Eingangssignal an den Multiplexer zu liefern und das dritte Ausgangssignal zu speichern;
E. einen zweiten Galois-Feld-Multiplizierer (726) zum Multiplizieren des dritten Ausgangssignals mit einem zweiten vorbestimmten Wert, um ein viertes Ausgangssignal zu erzeugen; und
F. ein zweites Register (702), das gekoppelt ist, um während des zweiten vorbestimmten Zeitintervalls das zweite Eingangssignal an den Multiplexer zu liefern und das vierte Ausgangssignal zu speichern;
worin nach einer vorbestimmten Anzahl von Wiederholungen die Inhalte des ersten und zweiten Registers den Koeffizienten Si des Syndrom-Polynoms S(x) entsprechen.
7. Gerät nach Anspruch 3, bei dem die Einrichtung (480) zum Berechnen der Werte des Fehlerlokalisierer-Polynoms NU(x) eine Galois-Feld-Multiplizierereinrichtung zum wiederholten Multiplizieren von mit Koeffizienten von NU(x) verbundenen Signalen mit &alpha;i enthält, wobei die Multiplizierereinrichtung aufweist:
A. eine Speichereinrichtung mit einem Eingangsport und einem Ausgangsport, wobei der Eingangsport ein Eingangssignal zur Speicherung empfängt und der Ausgangsport das gespeicherte Signal als ein Ausgangssignal liefert; und
B. einen Galois-Feld-Multiplizierer, um das Eingangssignal durch Multiplizieren des Ausgangssignals mit einem vorbestimmten Wert rekursiv zu erzeugen.
8. Gerät nach Anspruch 3, bei dem die Einrichtung (500) zum Berechnen der Werte eines Fehlerauswerter-Polynoms W(x) mehrere Galois-Feld-Multiplizierereinrichtungen zum wiederholten Multiplizieren von mit Koeffizienten von W(x) verbundenen Signalen mit &alpha;i enthält, wobei jede der Galois-Feld- Multiplizierereinrichtungen aufweist:
A. eine Speichereinrichtung mit einem Eingangsport und einem Ausgangsport, wobei der Eingangsport ein Eingangssignal zur Speicherung empfängt und der Ausgangsport das gespeicherte Signal als ein Ausgangssignal liefert; und
B. einen Galois-Feld-Multiplizierer, um das Eingangssignal durch Galois-Feld-Multiplizieren des Ausgangssignals zu einer vorbestimmten Zeit rekursiv zu erzeugen.
9. Gerät nach Anspruch 1, bei dem das erste und zweite Register nach einer vorbestimmten Anzahl von Wiederholungen Signale enthalten, die Koeffizienten Si eines Syndrom-Polynoms S(x) zugeordnet sind.
10. Gerät nach Anspruch 9, bei dem der Decodierer ferner einen Galois-Feld-Addierer (714) zum Addieren eines Datensignals zur Ausgabe des Multiplexers (710) enthält, um das erste Ausgangssignal zu erzeugen.
11. System nach Anspruch 1, bei dem das erste und zweite Register nach einer vorbestimmten Anzahl von Wiederholungen Signale enthalten, die Koeffizienten eines Fehlerauswerter- Polynoms W(x) zugeordnet sind.
12. System nach Anspruch 1, bei dem das erste und zweite Register nach einer vorbestimmten Anzahl von Wiederholungen Signale enthalten, die Koeffizienten eines Fehlerauswerter- Polynoms NU(x) zugeordnet sind.
13. Verfahren zum Feststellen und Korrigieren von Fehlern in Binärdatensymbolen, die unter Verwendung eines Reed- Solomon-Fehlerkorrekturcodes codiert worden sind, um Reed- Solomon-Codeworte zu erzeugen, worin jedes Codewort in sich eine gewählte Anzahl Datensymbole enthält, wobei das Verfahren die Schritte aufweist:
A. Empfangen zumindest eines Codeworts mit der gewählten Anzahl Datensymbole und Halten jedes der empfangenen Datensymbole in einem Puffer während einer vorgewählten Zeitspanne;
B. Berechnen von Fehlerstellen und Fehlerwerten für jedes empfangene Codewort durch (i) Bestimmen einer Fehlerlokalisierer-Gleichung und Finden von Wurzeln der Fehlerlokalisierer-Gleichung, wobei die Wurzeln Fehlerstellen entsprechen, und (ii) Bestimmen zugeordneter Fehlerwerte;
C. Freigeben jedes der empfangenen Datensymbole vom Puffer nach der vorgewählten Zeitspanne; und
D. Korrigieren, als Antwort auf die berechneten Fehlerstellen und zugeordneten Fehlerwerte, jedes der empfangenen Datensymbole mit einem Fehler, wenn das Symbol vom Puffer freigegeben wird,
worin der Berechnungsschritt ferner gekennzeichnet ist durch wiederholtes Galois-Feld-Multiplizieren von mit den empfangenen Codeworten verbundenen Signalen mit &alpha;i, indem die Schritte ausgeführt werden:
1. Durchlassen, in einem Multiplexer, eines ersten Eingangssignals während eines ersten vorbestimmten Zeitintervalls und eines zweiten Eingangssignals während eines zweiten vorbestimmten Zeitintervalls, um ein erstes Ausgangssignal zu erhalten;
2. Multiplizieren, in einem Galois-Feld-Multiplizierer, des ersten Ausgangssignals mit einem ersten vorbestimmten Wert, um ein zweites Ausgangssignal zu erzeugen;
3. Speichern, in einem ersten Register, des zweiten Ausgangssignals während des ersten vorbestimmten Zeitintervalls;
4. Multiplizieren, in einem Galois-Feld-Multiplizierer, des zweiten Ausgangssignals mit einem zweiten vorbestimmten Wert, um ein drittes Ausgangssignal zu erzeugen;
5. Speichern, in einem zweiten Register, des dritten Ausgangssignals während des zweiten vorbestimmten Zeitintervalls;
6. Koppeln des gespeicherten zweiten Ausgangssignals mit dem Multiplexer während des ersten vorbestimmten Zeitintervalls;
7. Koppeln des gespeicherten dritten Ausgangssignals mit dem Multiplexer während des zweiten vorbestimmten Zeitintervalls; und
8. Multiplizieren, zu vorbestimmten Zeiten, der Inhalte von gewählten Registern des ersten und zweiten Registers, um Fehlerstellen und Fehlerwerte zu bestimmen, entsprechend den empfangenen Codeworten.
14. Verfahren nach Anspruch 13, bei dem der Schritt zum Berechnen der Fehlerstellen und der Fehlerwerte umfaßt:
a. Berechnen von Syndromen Si für jedes der empfangenen Codeworte, während die Codewort-Datensymbole empfangen werden;
b. gleichzeitiges Berechnen der Werte eines Fehlerlokalisierer-Polynoms NU(x) und eines Fehlerauswerter-Polynoms W(x) für jedes der empfangenen Codeworte, wo:
NU(x)S(x) = W(x) modulo xt
gilt, S(x) ein Polynom in x mit Koeffizienten Si ist, t die Anzahl der Fehler ist, die der Reed-Solomon-Code korrigieren kann, und NU(x) mit der Fehlerlokalisierer-Gleichung verbunden ist.
15. Verfahren nach Anspruch 13, bei dem der Schritt zum Berechnen von Fehlerstellen und Fehlerwerten die Schritte einschließt:
a. gleichzeitiges Auswerten von NUungerade(&alpha;i), NUgerade(&alpha;i) und W(&alpha;i), entsprechend jedem empfangenen Datensymbol, während dieses Symbol vom Puffer freigegeben wird, wo &alpha;i einer Codewortstelle entspricht und NUgerade(&alpha;i) und NUungerade(&alpha;i) die Summen der geraden bzw. ungeraden Terme des bei &alpha;i berechneten Fehlerlokalisierer-Polynoms sind; und
b. gleichzeitiges Auswerten eines Ausdrucks NUungerade(&alpha;i) + NUgerade(&alpha;i) und Berechnen eines Korrekturvektors YI, entsprechend jedem der empfangenen Datensymbole, worin gilt:
wobei die Fehler durch Kombinieren von YI mit jedem der empfangenen Datensymbole korrigiert werden, die mit einem &alpha;i verbunden sind, wofür der Ausdruck NUungerade(&alpha;i)+NUgerade(&alpha;i) gleich einem vorbestimmten Wert ist.
16. Verfahren nach Anspruch 14, bei dem der Schritt zum Berechnen von Syndromen umfaßt:
a. Erzeugen der Koeffizienten Si eines Syndrom-Polynoms S(x) in mehreren S-Computern; und
b. Ändern der Koeffizienten von S(x), um einem verkürzten Code zu entsprechen, über ein Galois-Feld (2m).
17. Verfahren nach Anspruch 16, bei dem der Schritt zum Erzeugen der Koeffizienten des Syndrom-Polynoms S(x) umfaßt:
a. Liefern eines ersten Ausgangssignals von einer logischen UND-Schaltung, die auf ein Rückkopplungssignal und ein Eingangssignal anspricht;
b. Multiplizieren, in einem Galois-Feld-Multiplizierer, des ersten Ausgangssignals mit einem vorbestimmten Wert zu einer vorbestimmten Zeit, um ein zweites Ausgangssignal zu erhalten;
c. Speichern des zweiten Ausgangssignals in einem Speicherregister; und
d. Addieren des gespeicherten zweiten Ausgangssignals zu einem Datensignal in einem Modulo-2-Addierer und Liefern der Summe als das Eingangssignal an die logische UND-Schaltung.
18. Verfahren nach Anspruch 16, bei dem der Schritt zum Erzeugen von Koeffizienten Si des Syndrom-Polynoms S(x) die Schritte einschließt:
i. Durchlassen, in einem Multiplexer, eines ersten Eingangssignals während eines ersten vorbestimmten Zeitintervalls und eines zweiten Eingangssignals während eines zweiten vorbestimmten Zeitintervalls, um ein erstes Ausgangssignal zu erhalten;
ii. Addieren des ersten Ausgangssignals zu einem Datensignal in einem Modulo-2-Addierer, um ein zweites Ausgangssignal zu erhalten;
iii. Multiplizieren, in einem Galois-Feld-Multiplizierer, des zweiten Ausgangssignals mit einem ersten vorbestimmten Wert, um ein drittes Ausgangssignal zu erzeugen;
iv. Speichern des dritten Ausgangssignals während des ersten vorbestimmten Zeitintervalls in einem ersten Register;
v. Galois-Feld-Multiplizieren, in einem Galois-Feld- Multiplizierer, des dritten Ausgangssignals mit einem zweiten vorbestimmten Wert, um ein viertes Ausgangssignal zu erzeugen;
vi. Speichern des vierten Ausgangssignals während des zweiten vorbestimmten Zeitintervalls in einem zweiten Register;
vii. Koppeln des gespeicherten dritten Ausgangssignals mit dem Multiplexer während des ersten vorbestimmten Zeitintervalls;
viii. Koppeln des gespeicherten vierten Ausgangssignals mit dem Multiplexer während des zweiten vorbestimmten Zeitintervalls; und
ix. Wiederholen der Schritte i-viii eine vorbestimmte Anzahl von Malen;
worin das erste und zweite Register nach der vorbestimmten Anzahl von Wiederholungen Signale enthalten, die den Syndrom-Koeffizienten Si zugeordnet sind.
19. Verfahren nach Anspruch 13, bei dem der Schritt zum Berechnen des Wertes eines Fehlerauswerter-Polynoms W(x) ein Galois-Feld-Multiplizieren einschließt, welches umfaßt:
A. Speichern eines Eingangssignals in einer Speichereinrichtung mit einem Eingangsport zum Empfangen von Eingangssignalen und einem Ausgangsport zum Liefern gespeicherter Eingangssignale als Ausgangssignale; und
B. rekursives Multiplizieren der Ausgangssignale durch einen Galois-Feld-Multiplizierer, um die Eingangssignale zu erzeugen.
20. Verfahren nach Anspruch 13, bei dem der Schritt zum Berechnen des Wertes eines Fehlerauswerter-Polynoms W(x) ein Galois-Feld-Multiplizieren von mit einem empfangenen Codewort verbundenen Signalen mit &alpha;i einschließt, und ein Galois-Feld- Multiplizieren die Schritte umfaßt:
i. Durchlassen, in einem Multiplexer, eines ersten Eingangssignals während eines ersten vorbestimmten Zeitintervalls und eines zweiten Eingangssignals während eines zweiten vorbestimmten Zeitintervalls, um ein erstes Ausgangssignal zu erhalten;
ii. Multiplizieren, in einem Galois-Feld-Multiplizierer, des ersten Ausgangssignals mit einem ersten vorbestimmten Wert, um ein zweites Ausgangssignal zu erzeugen;
iii. Speichern des zweiten Ausgangssignals während des ersten vorbestimmten Zeitintervalls in einem ersten Register;
iv. Multiplizieren, in einem Galois-Feld-Multiplizierer, des zweiten Ausgangssignals mit einem zweiten vorbestimmten Wert, um ein viertes Ausgangssignal zu erzeugen;
v. Speichern des vierten Ausgangssignals während des zweiten vorbestimmten Zeitintervalls in einem zweiten Register;
vi. Koppeln des gespeicherten dritten Ausgangssignals mit dem Multiplexer während des ersten vorbestimmten Zeitintervalls;
vii. Koppeln des gespeicherten vierten Ausgangssignals mit dem Multiplexer während des zweiten vorbestimmten Zeitintervalls; und
viii. Wiederholen der Schritte i-vii eine vorbestimmte Anzahl von Malen;
worin nach einer vorbestimmten Anzahl von Wiederholungen das erste und zweite Register Signale enthalten, die den Koeffizienten des Fehlerauswerter-Polynoms zugeordnet sind.
21. Gerät nach Anspruch 1, bei dem die Decodierereinrichtung (16, 18, 20) ferner enthält:
A. eine Einrichtung zum Wiedergewinnen von Codeworten,
B. eine Einrichtung (16) zum Decodieren von Codeworten und Bestimmen entsprechender Syndrome;
C. eine Einrichtung (18) zum Bestimmen der Fehlerlokalisierer-Gleichung basierend auf den Syndromen; und
D. eine Fehlerauswertungseinrichtung (18) zum Finden der Wurzeln der Fehlerlokalisierer-Gleichung und der Fehlerwerte, die den Fehlerstellen zugeordnet sind,
E. wobei die Einrichtung zum Bestimmen der Fehlerlokalisierer-Gleichung in einer vorbestimmten Anzahl von Iterationen die Fehlerlokalisierer-Gleichung iterativ bestimmt und umfaßt:
i. eine Einrichtung zum Bestimmen einer vorläufigen Fehlerlokalisierer-Gleichung basierend auf den Syndromen,
ii. eine Einrichtung zum iterativen Fortschreiben der vorläufigen Fehlerlokalisierer-Gleichung nach einer gegebenen Iteration, falls der Wert einer bestimmten Variable innerhalb eines vorbestimmten Wertebereichs liegt, und
iii. eine Einrichtung zum Fortschreiben des Wertes der bestimmten Variable in jeder Iteration durch Erhöhen bzw. Inkrementieren der Variable, wobei die Einrichtung das Vorzeichen der bestimmten Variable ändert, falls eine zweite bestimmte Variable einen vorbestimmten Wert hat.
22. Decodierer nach Anspruch 21, bei dem die Einrichtung zum Fortschreiben der vorläufigen Fehlerstellengleichung das Berlekamp-Massey-Verfahren verwendet, um einen nächsten Wert für die vorläufige Fehlerlokalisierer-Gleichung zu bestimmen.
DE3856035T 1987-08-24 1988-08-23 Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur Expired - Fee Related DE3856035T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US8837887A 1987-08-24 1987-08-24
US13620687A 1987-12-21 1987-12-21
PCT/US1988/002898 WO1989002123A1 (en) 1987-08-24 1988-08-23 High bandwidth reed-solomon encoding, decoding and error correcting circuit

Publications (2)

Publication Number Publication Date
DE3856035D1 DE3856035D1 (de) 1997-11-06
DE3856035T2 true DE3856035T2 (de) 1998-02-26

Family

ID=26778593

Family Applications (1)

Application Number Title Priority Date Filing Date
DE3856035T Expired - Fee Related DE3856035T2 (de) 1987-08-24 1988-08-23 Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur

Country Status (4)

Country Link
EP (1) EP0329775B1 (de)
DE (1) DE3856035T2 (de)
SG (1) SG64886A1 (de)
WO (1) WO1989002123A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04315332A (ja) * 1991-04-15 1992-11-06 Hitachi Ltd 誤り訂正装置
DE4140018A1 (de) * 1991-12-04 1993-06-09 Bts Broadcast Television Systems Gmbh, 6100 Darmstadt, De Verfahren und schaltungsanordnung zum decodieren von rs-codierten datensignalen
US5414719A (en) * 1992-04-24 1995-05-09 Sharp Kabushiki Kaisha Operating circuit for galois field
JPH08106733A (ja) * 1994-10-07 1996-04-23 Hitachi Ltd 情報記憶媒体利用システム
US6012839A (en) * 1995-06-30 2000-01-11 Quantum Corporation Method and apparatus to protect data within a disk drive buffer
WO1999045911A2 (en) * 1998-03-12 1999-09-16 Tiernan Communications, Inc. Universal reed-solomon coder-decoder
GB2372680B (en) * 2001-02-27 2003-02-19 3Com Corp Calculation and transmission of error check codes
US7693927B2 (en) 2003-08-25 2010-04-06 Jennic Limited Data processing system and method
CN115632662B (zh) * 2022-12-20 2023-04-11 苏州联讯仪器股份有限公司 一种rs译码中的伴随式计算方法、装置、设备及介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3668631A (en) * 1969-02-13 1972-06-06 Ibm Error detection and correction system with statistically optimized data recovery
US4099160A (en) * 1976-07-15 1978-07-04 International Business Machines Corporation Error location apparatus and methods
US4410989A (en) * 1980-12-11 1983-10-18 Cyclotomics, Inc. Bit serial encoder
US4413339A (en) * 1981-06-24 1983-11-01 Digital Equipment Corporation Multiple error detecting and correcting system employing Reed-Solomon codes
US4494234A (en) * 1982-12-29 1985-01-15 International Business Machines Corporation On-the-fly multibyte error correcting system
US4584686A (en) * 1983-12-22 1986-04-22 Optical Storage International Reed-Solomon error correction apparatus
US4866716A (en) * 1987-05-15 1989-09-12 Digital Equipment Corporation Real-time BCH error correction code decoding mechanism
CA1314996C (en) * 1987-06-22 1993-03-23 Norihisa Shirota Method and apparatus for decoding reed-solomon code

Also Published As

Publication number Publication date
WO1989002123A1 (en) 1989-03-09
DE3856035D1 (de) 1997-11-06
EP0329775A4 (en) 1991-09-25
SG64886A1 (en) 1999-05-25
EP0329775B1 (de) 1997-10-01
EP0329775A1 (de) 1989-08-30

Similar Documents

Publication Publication Date Title
DE3879493T2 (de) Verfahren und geraet zur fehlerkorrektur.
US5107503A (en) High bandwidth reed-solomon encoding, decoding and error correcting circuit
DE69919199T2 (de) Vorwärtsfehlerkorrektur
DE3854939T2 (de) Bch-fehlerkorrekturkode-dekodierungsverfahren in echtzeitbetrieb
DE3382661T2 (de) Korrektur von fehlerbuendeln in datengruppen.
EP0154538B1 (de) Paritäts- und Syndromgenerator zur Fehler-Erkennung und -Korrektur in digitalen Übertragungssystemen
DE69834542T2 (de) Hardwareoptimierter reed-solomon-decoder zur decodierung grosser datenblöcke
DE19509728B4 (de) Verfahren zum Codieren von Informationssymbolen, fehlerkorrigierender Decodierer, fehlerkorrigierende Vorrichtung zum Codieren und Decodieren sowie Decodierverfahren
DE3784459T2 (de) Arithmetische und logische einheit fuer elemente von galois-feldern.
JP3046988B2 (ja) データストリームのフレーム同期検出方法及び装置
DE3852423T2 (de) Kodierverfahren und Kodierer mit Reed-Solomon Fehlerkorrekturcode.
DE3787900T2 (de) Verfahren und Gerät zur Erzeugung von Prüfungs-Byten zur Fehlerdetektion für einen Datenblock.
DE3855101T2 (de) Anordnung zur sofortigen Fehlerkorrektur
EP0545498B1 (de) Verfahren und Schaltungsanordnung zum Decodieren von RS-codierten Datensignalen
US8843810B2 (en) Method and apparatus for performing a CRC check
DE3750526T2 (de) Dekodierer.
DE3856035T2 (de) Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur
DE602005000251T2 (de) Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder
DE10105626B4 (de) Verfahren und System zur Berechnung von zyklischem Blockprüfungscode und Verfahren zum Erkennen eines Fehlers
DE60309857T2 (de) Methode zur dekodierung von reed-solomon kodes mittels feinentscheidung
DE3404417A1 (de) Codierer-pruefschaltungsanordnung
DE3852648T2 (de) Hypersystolischer reed-solomon-encoder.
DE4105860A1 (de) Schaltungsanordnung zum erkennen und korrigieren von fehlern in datenworten
US11552732B2 (en) Polar coding system and parallel computation method for polar coding system
DE3751958T2 (de) Fehlerkorrekturgerät

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee