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 fehlerkorrekturInfo
- 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
Links
- 238000012937 correction Methods 0.000 title claims description 37
- 238000000034 method Methods 0.000 title claims description 37
- 208000011580 syndromic disease Diseases 0.000 claims description 75
- 238000004364 calculation method Methods 0.000 claims description 33
- 239000013598 vector Substances 0.000 claims description 21
- 230000008859 change Effects 0.000 claims description 13
- 238000011156 evaluation Methods 0.000 claims description 5
- 230000001965 increasing effect Effects 0.000 claims description 3
- 230000008878 coupling Effects 0.000 claims 6
- 238000010168 coupling process Methods 0.000 claims 6
- 238000005859 coupling reaction Methods 0.000 claims 6
- 241000269627 Amphiuma means Species 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 26
- 238000013500 data storage Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 3
- 230000001939 inductive effect Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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 αi, -34 < i < 34, verwendet wird, worin α 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 α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 α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).
- g(x) = (x + α&supmin;³²) (x + α³²) ... (x + α³³) 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
- 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αi-Symbole, von denen eines mit 48 bezeichnet ist, zeigen eine Galois- Feld-Multiplikation mit αi an, was einem Erhöhen des Exponenten eines Eingabesymbols um i äquivalent ist, z.B. αj * αi = α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α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 α&supmin;³² abgeleitet werden, indem man α&supmin;³³ nimmt und es mit α¹ multipliziert (-33 + 1 = -32). Multiplizieren mit α¹ 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 α¹ 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 α&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 α&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 α&sup4;&sup6;², was dann in ein Schieberegister SY(0) geschoben wird. Ein Multiplexer 208 isoliert das α&sup4;&sup6;² Signal von den Registern 202 und richtet den GF x α&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 α&sup4;&sup6;² und α&sup5;&sup4;&sup4; ist. Jedes Änderungssyndrom im Register SY(K) ist daher das GF-Produkt des Syndromwerts von dem S'(K)-Register, multipliziert mit (α&sup4;&sup6;²) (α&sup5;&sup4;&sup4;)n-1. Die xα&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 α&sup4;&sup6;²- und α&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 α-n eines Eingabesymbols α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 α32n x α-33n ist α-n. Um dies zu erreichen, wird ein 10-Bit-Symbol αn in ein α³²-.XOR.-Netzwerk 400 mit Biteingaben Ii und Bitausgaben Oi eingegeben, wie unten dargestellt ist: Tabelle 4
- Jedes repräsentiert ein .XOR. Der Wert α32n wird mit αn multipliziert, um α33n zu erhalten. Weil α33n Elemente eines Unterkörpers GF(2&sup5;) von GF(2¹&sup0;) sind, gibt es für jedes α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 α33n (d.h. alle α-33n) ausgibt. Oi sind die Ausgabebits eines α-33n-Netzwerks, die aus den Eingabebits Ii kombiniert sind. Die Eingabebits sind die 10 Bits des Symbols α33n, und die Ausgabebits sind die 10 Bits des Symbols α33n, und die Ausgabebits sind die 10 Bits des Symbols α-33n. Tabelle 5
- Die letzte Operation, um α ν zu invertieren, besteht darin, α32n mit α-33n zu multiplizieren, um gemäß der früher präsentierten Gleichung 5 α-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:
- 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(α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 α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(αi)x α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 αm von Fig. 14 repräsentiert wird, durch NUungerade, was durch ein Symbol αn von Fig. 14 repräsentiert wird. Der resultierende Korrekturvektor ist daher:
- YI = W(αi) (α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α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αi- Multiplizierer der vorliegenden Erfindung zu implementieren, ist es notwendig, ein .XOR.-Netzwerk aufzubauen, wie z.B. den in Fig. 16 gezeigten α&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 α&supmin;³³.
- Die Größe dieser Art eines .XOR.-Netzwerks ist beträchtlich, wobei 59 .XOR.-Gatter für den α&supmin;³³-Multiplizierer von Fig. 16 und 60 .XOR.-Gatter für den α&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 αi x αj = αi+j. Zum Beispiel kann α&supmin;³² durch Multiplizieren von α&supmin;³³ mit α¹ erzeugt werden. Ein gegebener α-Multiplizierer kann daher aus Produkten einfacherer Multiplizierer konstruiert werden. Die Schaltung von Fig. 18 zeigt eine α¹-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 α²-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 α-Multiplizierers, α&supmin;³³ oder α³&sup0;, und eines einfachen Multiplizierers, a¹ oder α², 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 α&supmin;³³- und ein α¹- Multiplizierer eine Ausgabe, die aus dem Eingabesymbol [SYMBOL A] mal α&supmin;³³ und ebenfalls mal α&supmin;³² besteht, für eine Nettoeinsparung von 59 .XOR.-Gattern oder eines α&supmin;³²-Multiplizierer-Netzwerks. Wie in Fig. 20b gezeigt ist, werden ähnlich die Werte von [SYMBOL B] x α³&sup0; und [SYMBOL B] x α³² eines α³&sup0;-Multiplizierers und einer Verschiebung-2-Schaltung erzeugt, wodurch ein α³²-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, α&supmin;³¹ und α&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 α&supmin;³¹, und die Inhalte des S(-33)- Registers 708 lauten [(vorherige S(-33)-Registerinhalte) + (Datensymbol von der Platte 26)] x α&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, α&supmin;³¹ und α&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 α&supmin;³&sup0;, und die Inhalte des S(-32)-Registers 706 lauten [(vorherige S(-32)-Registerinhalte) + (Datensymbol von der Platte)] x α&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 α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 α³&sup0;- und α²&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] α³&sup0;, und die Inhalte des NU(29)- Registers 771 lauten [vorherige NU(29)-Registerinhalte] x α²&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-α³&sup0;- und α²&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 α² 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 α³¹. 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 α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 α-Multiplizierer sind vorgesehen; die ungeraden α-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 α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(αi), NUgerade(α ) und W(αi), entsprechend
jedem empfangenen Datensymbol, während dieses Symbol
vom Puffer freigegeben wird, wo αi einer
Codewortstelle entspricht und NUgerade(αi) und NUungerade(αi) die Summen
der geraden bzw. ungeraden Terme des bei αi
berechneten Fehlerlokalisierer-Polynoms sind; und
B. Einrichtung (522, 524) zum gleichzeitigen Auswerten
eines Ausdrucks NUungerade(αi) + NUgerade(α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
αi verbunden sind, wofür der Ausdruck NUungerade(αi) + NUgerade(α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 α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α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 α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 α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 α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 α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(αi), NUgerade(αi)
und W(αi), entsprechend jedem empfangenen Datensymbol,
während dieses Symbol vom Puffer freigegeben wird, wo
αi einer Codewortstelle entspricht und NUgerade(αi) und
NUungerade(αi) die Summen der geraden bzw. ungeraden
Terme des bei αi berechneten Fehlerlokalisierer-Polynoms
sind; und
b. gleichzeitiges Auswerten eines Ausdrucks NUungerade(αi) +
NUgerade(α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 αi
verbunden sind, wofür der Ausdruck NUungerade(αi)+NUgerade(α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 α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.
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)
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)
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 |
-
1988
- 1988-08-23 SG SG1996004948A patent/SG64886A1/en unknown
- 1988-08-23 DE DE3856035T patent/DE3856035T2/de not_active Expired - Fee Related
- 1988-08-23 WO PCT/US1988/002898 patent/WO1989002123A1/en active IP Right Grant
- 1988-08-23 EP EP88908530A patent/EP0329775B1/de not_active Expired - Lifetime
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 |