DE602005000251T2 - Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder - Google Patents

Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder Download PDF

Info

Publication number
DE602005000251T2
DE602005000251T2 DE602005000251T DE602005000251T DE602005000251T2 DE 602005000251 T2 DE602005000251 T2 DE 602005000251T2 DE 602005000251 T DE602005000251 T DE 602005000251T DE 602005000251 T DE602005000251 T DE 602005000251T DE 602005000251 T2 DE602005000251 T2 DE 602005000251T2
Authority
DE
Germany
Prior art keywords
data
blocks
partial
cell
cells
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE602005000251T
Other languages
English (en)
Other versions
DE602005000251D1 (de
Inventor
Matt Ball
Justin Koller
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Quantum Corp
Original Assignee
Quantum Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Quantum Corp filed Critical Quantum Corp
Publication of DE602005000251D1 publication Critical patent/DE602005000251D1/de
Application granted granted Critical
Publication of DE602005000251T2 publication Critical patent/DE602005000251T2/de
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/616Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • H03M13/2909Product codes
    • H03M13/2915Product codes with an error detection code in one dimension
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6561Parallelized implementations

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Algebra (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Description

  • HINTERGRUND
  • 1. Gebiet der Erfindung
  • Die vorliegende Anmeldung bezieht sich im Allgemeinen auf die Fehlerkorrektur von Daten mit Fehlerkorrekturcodes (z.B. Bose-Chaudhuri-Hocquenghem (BCH), Reed-Solomon-Codes und dgl.) und insbesondere auf einen Fehlerkorrektur-Decodierer, der Zellen mit Teilsyndromerzeugung verwendet.
  • 2. Stand der Technik
  • Die Fehlerkorrektur von Daten kann bei verschiedenen Anwendungen, wie beispielsweise Datenspeichervorrichtungen, Telekommunikationssystemen und dgl., verwendet werden. Beispielsweise werden bei einer Datenspeichervorrichtung Daten durch Schreiben der Daten in ein Speichermedium in der Speichervorrichtung gespeichert. Die gespeicherten Daten können später von der Speichervorrichtung durch Lesen der Daten von dem Speichermedium wiederhergestellt werden. Aus einer Anzahl von Gründen kann jedoch ein Fehler in den von der Speichervorrichtung wiederhergestellten Daten existieren, was bedeutet, dass die gespeicherten Daten nicht wiederhergestellt werden können oder sich von den Daten unterscheiden, die ursprünglich auf dem Speichermedium gespeichert wurden. Beispielsweise kann sich ein Abschnitt der gespeicherten Daten auf dem Speichermedium mit der Zeit verschlechtern, so dass der Abschnitt der gespeicherten Daten nicht ordnungsgemäß zu einer späteren Zeit gelesen werden kann.
  • Herkömmliche Fehlerkorrekturtechniken umfassen das Erzeugen oder Codieren von einem oder mehreren Redundanzblöcken für Daten, die bei einem Decodierprozess verwendet werden können, um Fehler in den Daten zu korrigieren. Typischerweise wird der Decodierprozess mit spezialisierter Hardware durchgeführt, die dazu neigt, kompliziert und schwierig zu modifizieren zu sein.
  • Die IEEE-Veröffentlichung "Variable Shortened-and-Punctured Reed-Solomon Codes for Packet Loss Protection", Youshi Xu, Tingting Zhan, 03.09.2002, IEEE Transactions on Broadcasting, offenbart ein Verfahren eines Nur-Lösch-Decodierens (erasure-only decoding) von Reed-Solomon-Codes mit den Schritten des Berechnens eines Syndromvektors mit einer Grundzelle, Invertieren einer "Fehlerpositionsmatrix", die eine Vandermonde-Matrix ist, und Multiplizieren der Matrix durch den Vektor mit n-k parallelen Zellen.
  • ZUSAMMENFASSUNG
  • Bei einer beispielhaften Ausführungsform umfasst ein Decodierer, um Fehler in Daten zu korrigieren, eine Mehrzahl von Zellen. Jede Zelle erzeugt ein Teilsyndrom basierend auf Datenblöcken und einem oder mehreren Redundanzblöcken. Jede Zelle erzeugt einen Teilfehlerwert basierend auf einem Abschnitt der Inversen einer Fehlerpositionsmatrix, die Positionen aller Datenblöcke kennzeichnet, die Fehler aufweisen. Eine mit der Mehrzahl von Zellen verbundene Summationslogik erzeugt einen Fehlerwert basierend auf den durch die Mehrzahl von Zellen erzeugten Teilfehlerwerten. Der Fehlerwert korrigiert Fehler in einem Datenblock mit Fehlern.
  • KURZE BESCHREIBUNG DER FIGUREN
  • 1 stellt ein beispielhaftes Host-Terminal dar, das mit einer beispielhaften Speichervorrichtung verbunden ist;
  • 2 stellt eine beispielhafte Einheit dar, die einen Satz von Datenblöcken, Redundanzblöcken und zyklischen Redundanzprüfcodes umfasst;
  • 3 stellt Abschnitte der beispielhaften Einheit von 2 dar;
  • 4 stellt einen beispielhaften Decodierer dar;
  • 5 stellt eine beispielhafte Zelle des in 4 dargestellten beispielhaften Decodierers dar;
  • 6 stellt einen beispielhaften Leseprozess dar, der durch die in 5 dargestellte beispielhafte Zelle durchgeführt wird;
  • 7 stellt einen Abschnitt der in 5 dargestellten beispielhaften Zelle dar;
  • 8 stellt einen beispielhaften Schreibprozess dar, der durch die in 5 dargestellte beispielhafte Zelle durchgeführt wird, und
  • 9 stellt einen weiteren Abschnitt der in 5 dargestellten beispielhaften Zelle dar.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die folgende Beschreibung stellt zahlreiche spezifische Konfigurationen, Parameter und dgl. vor. Es ist jedoch ersichtlich, dass diese Beschreibung nicht als eine Begrenzung des Schutzumfangs der Erfindung bestimmt ist, sondern stattdessen vorgesehen ist, um eine bessere Beschreibung beispielhafter Ausführungsformen zu liefern.
  • Beispielsweise wird eine Fehlerkorrektur von Daten einer Speichervorrichtung nachstehend beschrieben. Es ist jedoch ersichtlich, dass eine Fehlerkorrektur bei verschiedenen Anwendungen, einschl. Telekommunikation, verwendet werden kann.
  • In 1 wird ein Host-Terminal 102 dargestellt, das mit einer Speichervorrichtung 104 verbunden ist. Der Host-Computer 102 kann jede Art von Computer, wie beispielsweise ein Personalcomputer, eine Workstation, ein Server und dgl. sein. Die Speichervorrichtung 104 kann jede Art von Speicherlaufwerk, wie beispielsweise ein Bandlaufwerk, ein Festplattenlaufwerk und dgl. sein. Es ist ersichtlich, dass das Host-Terminal 102 mit einer beliebigen Anzahl von Speichervorrichtungen 104 verbunden sein kann, und eine beliebige Anzahl von Host-Terminals 102 mit einer oder mehreren Speichervorrichtungen 104 verbunden sein kann.
  • Weiterhin mit Bezug auf 1 ist bei einer beispielhaften Ausführungsform die Speichervorrichtung 104 konfiguriert, um Fehler bei in der Speichervorrichtung 104 gespeicherten Daten zu erfassen und zu korrigieren. Genauer gesagt ist, wenn die in der Speichervorrichtung 104 gespeicherte Daten wiederhergestellt werden, die Speichervorrichtung 104 konfiguriert, um Redundanzblöcke zu verwenden, die ebenfalls als Fehlerkorrekturcode-Redundanzblöcke (ECC-Redundanzblöcke) bezeichnet werden, um Fehler in den wiederhergestellten Daten zu korrigieren, wie beispielsweise, wenn sich die wiederhergestellten Daten von den Daten unterscheiden, die ursprünglich in der Speichervorrichtung 104 gespeichert wurden, oder wenn die gespeicherten Daten nicht wiederhergestellt werden können. Außerdem können innere Codes, wie beispielsweise zyklische Redundanzprüfcodes (CRC-Codes) verwendet werden, um Fehler in den wiederhergestellten Daten zu erfassen. Es ist jedoch ersichtlich, dass Fehlerkorrekturcodes, wie beispielsweise Reed-Solomon-Codes, verwendet werden können, um Fehler zu erfassen sowie auch zu korrigieren.
  • Bei der in 1 dargestellten Ausführungsform umfasst die Speichervorrichtung 104 ein Speichermedium 106, einen Kanal und Lese/Schreibkopf 108, einen Prozessor 110 und eine Fehlererfassung/Korrektureinheit 112. In der Speichervorrichtung 104 werden Daten in dem Speichermedium 106 gespeichert. Der Lese/Schreibkopf 108 liest und/oder schreibt Daten in das Speichermedium 106. Der Prozessor 110 steuert den Betrieb der Speichervorrichtung 104, einschließlich des Betriebs des Kanals und des Lese/Schreibkopfs 108. Wie nachstehend ausführlicher beschrieben wird, erfasst und korrigiert die Fehlererfassung/Korrektureinheit 112 Fehler in den in dem Speichermedium 106 gespeicherten Daten.
  • Bei der vorliegenden beispielhaften Ausführungsform umfasst die Fehlererfassung/Korrektureinheit 112 einen Datenpuffer 114, einen Redundanzblockcodierer/-decodierer 116 und einen Codierer/Decodierer für einen inneren Code 118. Wenn Daten auf dem Speichermedium 106 zu speichern sind, werden Daten von dem Host-Terminal 102 empfangen und in den Datenpuffer 114 geschrieben. Der Redundanzblockcodierer/-decodierer 116 erzeugt Redundanzblöcke für Daten in dem Datenpuffer 114. Der Codierer/Decodierer für einen inneren Code 118 erzeugt innere Codes (z.B. CRC-Codes, Reed-Solomon-Codes und dgl.) für Daten in dem Datenpuffer 114. Der Lese/Schreibkopf 108 schreibt dann die Daten und die erzeugten Redundanzblöcke und inneren Codes in das Speichermedium 106.
  • Wenn Daten von dem Speichermedium 106 zu lesen sind, liest der Lese/Schreibkopf 108 Daten, Redundanzblöcke und innere Codes von dem Speichermedium 106 in den Datenpuffer 114. Wie nachstehend ausführlicher beschrieben wird, werden alle Fehler in den von dem Speichermedium 106 gelesenen Daten mit den inneren Codes und Redundanzblöcken erfasst und korrigiert. Die Daten können dann zu dem Host-Terminal 102 transferiert werden.
  • Bei der vorliegenden beispielhaften Ausführungsform werden Daten zwischen dem Host-Terminal 102 und der Speichervorrichtung 104 in Datensätzen transferiert, die in einem Puffer gespeichert sind. Die Datensätze werden in Datenblöcke einer vorbestimmten Länge, wie beispielsweise zwei kByte, vier kByte, sechs kByte und dgl. aufgeteilt. Es ist jedoch ersichtlich, dass Datenblöcke verschiedener Längen verwendet werden können.
  • Nachdem die Datenblöcke von dem Speichermedium 106 wiederhergestellt sind, werden die wiederhergestellten Datenblöcke mit Fehlern erfasst, wobei ein Fehler in einem wiederhergestellten Datenblock angibt, dass die Daten in dem wiederhergestellten Datenblock nicht gelesen werden können oder sich von den Daten in dem Datenblock unterscheiden, wie sie in dem Datenblock ursprünglich in dem Speichermedium 106 gespeichert wurden. Beispielsweise können CRC-Codes verwendet werden, um zu erfassen, wenn sich die Daten in dem wiederhergestellten Datenblock von den Daten in dem Datenblock unterscheiden, als die Daten ursprünglich in dem Speichermedium 106 gespeichert wurden. Genauer gesagt wird vor dem Speichern eines Datenblocks in einem Speichermedium 106 ein CRC-Code für den Datenblock erzeugt und mit dem Datenblock in dem Speichermedium 106 gespeichert. Wenn der Datenblock später wiederhergestellt wird, wird ein neuer CRC-Code für den wiederhergestellten Datenblock erzeugt. Der neue CRC-Code wird dann mit dem von dem Speichermedium 106 wiederhergestellten CRC-Code verglichen, der dem wiederhergestellten Datenblock entspricht und ursprünglich für den wiederhergestellten Datenblock erzeugt wurde, bevor der wiederhergestellte Datenblock in dem Speichermedium 106 gespeichert wurde. Wenn sich der neue CRC-Code und der wiederhergestellte CRC-Code unterscheiden, dann wird ein Fehler für diesen Datenblock erfasst. Es ist jedoch ersichtlich, dass verschiedene Arten von Fehlererfassungscodes, einschließlich Reed-Solomon-Codes, verwendet werden können.
  • Bei der vorliegenden beispielhaften Ausführungsform gekennzeichnet eine Fehlerpositionsmatrix die Position aller Daten, die von dem Speichermedium mit Fehlern wiederhergestellt wurden. Beispielsweise kann eine beispielhafte Fehlerpositionsmatrix ausgedrückt werden als:
    Figure 00070001
    wobei X die Position eines Fehlers und ρ die Gesamtzahl von fehlerhaften Datenblöcken und Redundanzblöcken ist.
  • Bei der vorliegenden beispielhaften Ausführungsform wird die Inverse der Fehlerpositionsmatrix erzeugt. Beispielsweise kann die Inverse der beispielhaften Fehlerpositionsmatrix bei dem obigen Beispiel wie folgt ausgedrückt werden:
    Figure 00070002
  • Es sei bemerkt, dass die Fehlerpositionsmatrix eine Vandermonde-Matrix ist, die im Allgemeinen O(ρ2) Operationen erfordert, um die Inverse zu berechnen, verglichen mit allgemeinen Matrixinversionen, die O(ρ3) Operationen erfordern. Eine Zeile in der Vandermonde-Matrix besteht aus einem konstanten Wert hoch inkrementierender Potenzen beginnend mit Null. Die Inverse der Fehlerpositionsmatrix kann durch Firmware oder Hardware mit verschiedenen Matrix-Inversionsverfahren erzeugt werden.
  • Bei der vorliegenden beispielhaften Ausführungsform werden Redundanzblöcke verwendet, um Fehler in den wiederhergestellten Datenblöcken zu korrigieren. Genauer gesagt werden vor dem Speichern von Datenblöcken in dem Speichermedium 106 Redundanzblöcke basierend auf Datenblöcken erzeugt und mit den Datenblöcken in dem Speichermedium 106 gespeichert. Wenn die Datenblöcke später wiederhergestellt werden, werden Datenblöcke, die als fehlerhaft gekennzeichnet sind, mit den Redundanzblöcken korrigiert.
  • Bei der vorliegenden beispielhaften Ausführungsform sind Redundanzblöcke Bose-Chaudhuri-Hocquenghem-Codes (BCH-Codes), und insbesondere Reed-Solomon-Codes. Für eine ausführlichere Beschreibung von Reed-Solomon-Codes sh. Peterson & Weldon, Error Correcting Codes, 2te Auflage, MIT-Press 1972, die in ihrer Gesamtheit hier durch Bezug aufgenommen ist. Es ist jedoch ersichtlich, dass verschiedene Arten von Fehlerkorrekturcodes verwendet werden können.
  • Bei der vorliegenden beispielhaften Ausführungsform werden ein Satz von Datenblöcken, ein Satz von Redundanzblöcken und ein Satz von Redundanzsymbolen eines inneren Codes zusammen als eine Gruppe gelesen und geschrieben, die als eine "Entität" bzw. „Einheit" bezeichnet wird. Beispielsweise wird in 2 eine Entität 202 mit 16 Datenblöcken 204, 4 Redundanzblöcken 206 und 20 Redundanzsymbolen eines inneren Codes 208 dargestellt. Es ist jedoch ersichtlich, dass die Entität 202 verschiedene Anzahlen von Datenblöcken 204, Redundanzblöcken 206 und Redundanzsymbole eines inneren Codes 208 umfassen kann. Die Entität 202 kann beispielsweise 32 Datenblöcke 204 und 8 Redundanzblöcke 206, 112 Datenblöcke 204 und 16 Redundanzblöcke 206 und dgl. aufweisen. Außerdem können Redundanzsymbole eines inneren Codes 208 Fehler in einem Datenblock 204 oder einem Redundanzblock 206 sowohl erfassen als auch korrigieren.
  • 2 stellt die Form dar, in der die Entität 202 in einem Datenpuffer 114 (1) gespeichert werden kann. Es ist jedoch ersichtlich, dass die Entität 202 in der in 2 dargestellten Form nicht physikalisch existieren muß. Es ist ebenfalls ersichtlich, dass Daten in der Entität 202, und genauer gesagt die Daten in einem Datenblock 204, nicht einer einzelnen Datei entsprechen müssen. Stattdessen werden bei der vorliegenden beispielhaften Ausführungsform von dem Host-Terminal 102 (1) empfangene Daten verschachtelt. Als solche können die Daten in einem bestimmten Datenblock 204 Abschnitten von getrennten Dateien entsprechen, die von dem Host-Terminal 102 (1) empfangen wurden.
  • 2 stellt ebenfalls logische Beziehungen zwischen den Datenblöcken 204, Redundanzblöcken 206 und Redundanzsymbolen eines inneren Codes 208 der Entität 202 dar. In 3 werden Abschnitte der Entität 202 detaillierter gezeigt, um die logischen Beziehungen zwischen Datenblöcken 204, Redundanzblöcken 206 und Redundanzsymbolen eines inneren Codes 208 klarer zu veranschaulichen.
  • In 3 werden Redundanzsymbole eines inneren Codes 208 als CRC-Codes dargestellt. Es ist jedoch ersichtlich, dass verschiedene Arten von Fehlererfassungs- oder Fehlerkorrekturcodes, wie beispielsweise Reed-Solomon-Codes, verwendet werden können.
  • Bei der vorliegenden beispielhaften Ausführungsform entsprechen Redundanzsymbole eines inneren Codes 208 einem Datenblock 204 oder Redundanzblock 208, und werden verwendet, um einen Fehler in dem Datenblock 204 oder Redundanzblock 206 zu erfassen. Beispielsweise entspricht ein CRC-Code CRC19 dem Datenblock D19 der Entität 202. Somit wird, um einen Fehler in dem Datenblock D19 zu erfassen, nachdem der Datenblock D19 von dem Speichermedium 106 (1) wiederhergestellt wurde, ein neuer CRC-Code CRC19' für den wiederhergestellten Datenblock D19 erzeugt. Der neue CRC-Code CRC19' wird dann mit den von dem Speichermedium 106 wiederhergestellten CRC-Code verglichen (1), der dem wiederhergestellten Datenblock D19 (d.h. CRC-Code CRC19) entspricht. Wenn sich der neue CRC-Code CRC19' und der wiederhergestellte CRC-Code CRC19 unterscheiden, dann wird ein Fehler für den Datenblock D19 erfasst.
  • Bei der vorliegenden beispielhaften Ausführungsform bestimmt die Anzahl von Redundanzblöcken die maximale Anzahl von Datenblöcken, die korrigiert werden können. Somit kann bei dem in 2 dargestellten Beispiel eine Gesamtzahl von vier Redundanzblöcken 206 verwendet werden, um ein Maximum von vier fehlerhaften Datenblöcken 204 zu korrigieren.
  • Bei der vorliegenden beispielhaften Ausführungsform wird jeder Redundanzblock 204 jeweils basierend auf den Daten in allen Datenblöcken der Entität 202 erzeugt. Beispielsweise werden Redundanzblöcke in E0, E1, E2 und E3 basierend auf den Datenblöcken D4, D2, ..., und D19 erzeugt. Wie oben mit Bezug auf 1 beschrieben ist, können Redundanzblöcke durch den Redundanzblockcodierer/-decodierer 116 erzeugt werden. Wie oben ebenfalls beschrieben ist, werden Redundanzblöcke anfangs für von dem Host-Terminal 102 empfangene Daten erzeugt. Die erzeugten Redundanzblöcke und die empfangenen Daten werden dann in dem Speichermedium 106 gespeichert.
  • Mit erneutem Bezug auf 3 ist, obwohl die Redundanzblöcke E0, E1, E2 und E3 basierend auf dem gleichen Datensatz (d.h. Datenblöcke 204 der Entität 202) erzeugt werden, jeder Redundanzblock 206 zueinander eindeutig. Genauer gesagt sind bei der vorliegenden Ausführungsform die Redundanzblöcke E0, E1, E2 und E3 Bose-Chaudhuri-Hocquenghem-Codes (BCH-Codes) und genauer gesagt Reed-Solomon-Codes.
  • In 1 arbeitet bei der vorliegenden beispielhaften Ausführungsform der Redundanzblockcodierer/-decodierer 116 als ein Codierer, um Redundanzblöcke zu erzeugen, die mit Datenblöcken in dem Speichermedium 106 zu speichern sind. Der Redundanzblockcodierer/-decodierer 116 arbeitet als ein Decodierer, um Fehler in Datenblöcken zu korrigieren, die von dem Speichermedium 106 wiederhergestellt werden. Es ist jedoch ersichtlich, dass der Redundanzblockcodierer/-decodierer 116 als getrennte Komponenten (z.B. eine Codiererkomponente und eine Decodiererkomponente) in der Speichervorrichtung 106 implementiert werden können.
  • In 4 wird ein beispielhafter Decodierer 400 dargestellt, um Fehler in Datenblöcken zu korrigieren, die von einem Speichermedium wiederhergestellt wurden. Wie oben angemerkt ist, kann der Decodierer 400 als ein integriertes Teil des Redundanzblockcodierers/-decodierers 116 (1) oder als eine getrennte Komponente in der Speichervorrichtung 104 (1) implementiert sein.
  • Wie in 4 dargestellt ist, umfasst der Decodierer 400 eine Mehrzahl von Zellen 402 und eine Summationslogik 404, die mit der Mehrzahl von Zellen 402 verbunden ist. Jede Zelle 402 erzeugt ein Teilsyndrom basierend auf den von dem Speichermedium wiederhergestellten Datenblöcken und Redundanzblöcken. Jede Zelle 402 erzeugt ebenfalls einen Teilfehlerwert basierend auf einem Abschnitt der Inversen einer Fehlerpositionsmatrix, die die Positionen aller von dem Speichermedium wiederhergestellten Datenblöcke kennzeichnet, die Fehler aufweisen. Wie oben beschrieben ist, kann die Inverse der Fehlerpositionsmatrix durch Firmware oder Hardware erzeugt werden. Die Summationslogik 404 erzeugt einen Fehlerwert, der Fehler in einem von dem Speichermedium wiederhergestellten Datenblock basierend auf den durch die Mehrzahl von Zellen 402 erzeugten Teilfehlerwerten korrigiert.
  • In 1 werden, wie oben beschrieben ist, von dem Speichermedium 106 wiederhergestellte Datenblöcke und Redundanzblöcke in dem Datenpuffer 114 gehalten. Genauer gesagt können in 2 bei einer beispielhaften Ausführungsform Datenblöcke 204 und Redundanzblöcke 206 in dem Datenpuffer 114 (1) in der Form der Entität 202 gespeichert werden.
  • In 4 wiederum werden bei der vorliegenden beispielhaften Ausführungsform die Mehrzahl von Zellen 402 mit dem Datenpuffer 114 (1) durch Leitungen 406 verbunden. Jede Zelle 402 empfängt als eine Eingabe einen Abschnitt der in dem Datenpuffer 114 (1) gespeicherten Entität 202 (2). Genauer gesagt liest jede Zelle 402 Abschnitte der Entität 202 (2) in Cache-Bursts ein.
  • In 2 ist bei der vorliegenden beispielhaften Ausführungsform jeder Cache-Burst ein Abschnitt eines einzelnen Datenblocks 204 oder Redundanzblocks 206. Außerdem werden bei der vorliegenden beispielhaften Ausführungsform Abschnitte der Datenblöcke 204 und der Redundanzblöcke 206 in einem Rastermuster gelesen.
  • Es sei beispielsweise angenommen, dass jeder Cache-Burst 32 Byte lang ist. Die ersten 32 Byte des ersten Datenblocks 204 werden in einem ersten Cache-Burst gelesen. Die ersten 32 Byte jedes der nächsten 15 Datenblöcke 204 und vier Redundanzblöcke 206 der Entität 202 werden dann in 19 anschließende Cache-Bursts gelesen. Nachdem die ersten 32 Byte des letzten Redundanzblocks 206 gelesen sind, werden die zweiten anschließenden 32 Byte des ersten Datenblocks 204 gelesen, und dann werden die zweiten anschließenden 32 Byte jedes der nächsten 15 Datenblöcke 204 und vier Redundanzblöcke 206 der Entität 202 gelesen. Auf diese Art und Weise werden Datenblöcke 204 und Redundanzblöcke 206 der Entität 202 in Cache-Bursts in einem Rastermuster in 32-Byte-Abschnitten gelesen. Es ist jedoch ersichtlich, dass die Größe des Cache-Burst variieren kann, und Datenblöcke 204 und Redundanzblöcke 206 in verschiedenen Mustern gelesen werden können. Beispielsweise kann jeder Cache-Burst 64 Byte und nicht 32 Byte sein.
  • Bei der vorliegenden beispielhaften Ausführungsform kann ein Abschnitt jedes Datenblocks 204 und Redundanzblocks 206 in der Entität 202 als ein Codewort 210 logisch gruppiert werden. Beispielsweise können die ersten Abschnitte jedes Datenblocks 204 und Redundanzblocks 206 als ein erstes Codewort 210 logisch gruppiert werden, das der ersten Spalte in 2 entspricht. Das zweite Byte jedes Datenblocks 204 und Redundanzblocks 206 kann als ein zweites Codewort 210 logisch gruppiert werden, das der zweiten Spalte in 2 entspricht.
  • Bei der vorliegenden beispielhaften Ausführungsform ist das Codewort 210 ein Bit breit. Somit können dann, wenn Datenblöcke 204 und Redundanzblöcke 206 2kByte lang sind, die Datenblöcke 204 und Redundanzblöcke 206 in der Entität 202 in 2000 getrennte einzelne Codewörter 210 logisch gruppiert werden. Außerdem werden dann, wenn Datenblöcke 204 und Redundanzblöcke 206 mit einem Cache-Burst von 32 Byte gelesen werden, der jeweils 16 langen Wörtern von 32 Bit entspricht, Abschnitte von 32 Codewörter 210 jeweils gelesen.
  • In 4 wiederum entspricht bei der vorliegenden beispielhaften Ausführungsform die Anzahl von Zellen 402 in dem Decodierer 400 der Anzahl von Redundanzblöcken 206 (2) in der Entität 202, was seinerseits der maximalen Anzahl von Datenblöcken 204 entspricht, die korrigiert werden können. Somit kann der Decodierer 400 basierend auf der maximalen Anzahl von zu korrigierenden Datenblöcken 204 modifiziert werden. Wenn beispielsweise ein Maximum von vier Datenblöcken 204 zu korrigieren ist, wird der Decodierer 400 modifiziert, um vier Zellen 402 aufzuweisen. Auf ähnliche Weise wird, wenn ein Maximum von 16 oder 32 Datenblöcken 204 zu korrigieren ist, der Decodierer 400 modifiziert, um 16 oder 32 Zellen 402 aufzuweisen.
  • In 5 wird eine beispielhafte Zelle 402 dargestellt. Bei der vorliegenden beispielhaften Ausführungsform umfasst jede Zelle 402 eine Eingangslogik 502, eine Warteschlange 504, einen Multiplizierer 506, einen Multiplexer 508 und Warteschlangen 510 und 512.
  • Wie oben beschrieben ist, erzeugt jede Zelle 402 ein Teilsyndrom basierend auf Datenblöcken und einem oder mehreren Redundanzblöcken, die von dem Speichermedium wiederhergestellt werden. In 6 wird ein beispielhafter Leseprozess 600 zum Erzeugen eines Teilsyndroms in der Zelle 400 (4) dargestellt.
  • Bei 602 wird die Zelle 402 (4) in einen Lesemodus eingestellt. In 5 wird bei der vorliegenden beispielhaften Ausführungsform die Eingangslogik 502 eingestellt, um Eingaben von der Leitung 406, die mit dem Datenpuffer 114 (1) verbunden ist, und der Rückkopplungsleitung 514, die mit dem Ausgang des Multiplizierers 506 verbunden ist, zu empfangen. Genauer gesagt wird in 7 der Multiplexer 702 eingestellt, um eine Eingabe von einem Exklusiv-ODER-Gatter 704 zu empfangen, das mit der Leitung 406 und der Rückkopplungsleitung 514 verbunden ist. In 5 wird der Multiplizierer 506 eingestellt, um Eingaben von der Warteschlange 504, die durch die Eingangslogik 502 erzeugten Zwischenergebnisse hält, und von der Warteschlange 510, die eine Wurzel eines Generatorpolynoms hält, zu empfangen. Genauer gesagt wird der Multiplexer 508 mit Eingängen, die mit Warteschlangen 510 und 512 verbunden sind, eingestellt, um eine Eingabe von der Warteschlange 510 zu empfangen.
  • In 6 liest bei 604 die Zelle 402 (4) Daten von dem Datenpuffer 114 (1). Bei der vorliegenden beispielhaften Ausführungsform liest die Zelle 402 (4) einen Abschnitt eines Datenblocks oder eines Redundanzblocks von der Entität 202 (2), die in dem Datenpuffer 114 gespeichert ist (1), als einen Cache-Burst ein.
  • Beispielsweise können Daten von dem Datenpuffer 114 (1) in einem Cache-Burst von 32 Byte gelesen werden, die 16 langen Wörtern entsprechen. In 5 ist die Leitung 406 und die Rückkopplungsleitung 514 32 Bit breit, was der Zelle 402 ermöglicht, jeweils 32 Bit (ein langes Wort) zu verarbeiten. Es ist jedoch ersichtlich, dass Leitungen 406 und die Rückkopplungsleitung 514 von einer beliebigen Größe sein können und die Zelle 402 eine beliebige Anzahl von Bits auf einmal verarbeiten kann.
  • Bei 606 werden die von dem Datenpuffer 114 (1) gelesenen Daten mit der Ausgabe von dem Multiplizierer 506 (5) summiert. In 5 führt bei der vorliegenden beispielhaften Ausführungsform die Eingangslogik 502 eine Exklusiv-ODER-Operation (XOR-Operation) an einem von der Entität 202 (2) gelesenen Cash-Burst durch die Leitung 406 und den Ausgang des Multiplexers 506 durch die Rückkopplungsleitung 514 durch. Wie oben in 7 beschrieben ist, umfasst die Eingangslogik 502 das XOR-Gatter 704, das die XOR-Operation durchführen kann. Es sollte jedoch ersichtlich sein, dass die Eingangslogik 502 verschiedene Komponenten umfassen kann, einschließlich verschiedene Arten und Anzahlen von Logikgattern, um die von dem Datenpuffer 114 gelesenen Daten (1) mit der Ausgabe von den Multiplizierern 504 (5) zu summieren.
  • In 6 wird bei 608 die Summe der von dem Datenpuffer 114 (1) gelesenen Daten und die Ausgabe von dem Multiplizierer 506 (5) als ein Zwischenergebnis gespeichert. In 4 wird bei der vorliegenden beispielhaften Ausführungsform das durch die Eingangslogik 502 erzeugte Zwischenergebnis in der Warteschlange 504 gespeichert.
  • Bei der vorliegenden beispielhaften Ausführungsform wird die Größe und die Anzahl von Einträgen in der Warteschlange 504 basierend auf der Größe des Cache-Burst, der verwendet wird, um Daten von dem Datenpuffer 114 (1) zu lesen, und der Größe der Leitung 406 und der Rückkopplungsleitung 514 bestimmt. Wenn Daten beispielsweise von dem Datenpuffer 114 (1) in einem Cache-Burst von 32 Byte gelesen werden, der 16 langen Wörtern entspricht, und die Leitung 516 und die Rückkopplungsleitung 514 gleich 32 Bit breit sind, dann wird jedes lange Wort in dem Cache-Burst mit der Ausgabe von dem Multiplizierer 506 summiert und als ein Eintrag in der Warteschlange 504 gespeichert. Somit umfasst bei diesem Beispiel die Warteschlange 504 acht Einträge, wobei jeder Eintrag 32 Bit lang ist. Wenn die Größe des Cache-Burst geändert wird, dann kann die Größe der Warteschlange 504 ebenfalls geändert werden. Wenn der Cache-Burst beispielsweise 64 Byte lang ist, dann kann die Warteschlange 504 gleich 16 Einträge aufweisen, wobei jeder Eintrag 32 Bit lang ist.
  • In 6 wird bei 610 das Zwischenergebnis mit einer Wurzel eines Generatorpolynoms multipliziert. In 5 ist bei der vorliegenden beispielhaften Ausführungsform der Multiplizierer 506 ein Galois-Feld-Multiplizierer, der eine Galois-Feld-Multiplikation zwischen dem in der Warteschlange 504 gespeicherten Zwischenergebnis und einer Wurzel eines in der Warteschlange 504 gespeicherten Generatorpolynoms durchführt.
  • Bei der vorliegenden beispielhaften Ausführungsform führt der Multiplizierer 506 mehrere parallele Galois-Feld-Multiplikationen durch. Wenn jeder Eintrag der Warteschlage 504 beispielsweise 32 Bit lang ist, dann können die 32 Datenbit von einem Eintrag der Warteschlange 504 als vier parallele acht Bit Galois-Feld-Elemente formatiert werden. Der Multiplizierer 506 kann dann vier parallele acht-mal-acht Galois-Feld-Multiplikationen zwischen dem 32 Bit langen Eintrag von der Warteschlange 504 und einer acht Bit Wurzel eines Generatorpolynoms von der Warteschlange 510 durchführen.
  • In 6 wird bei 612, wenn nicht alle Datenblöcke und Redundanzblöcke der Entität 202 (2) verarbeitet wurden, die Schleife 604 bis 612 iteriert, um den nächsten Datenblock oder Redundanzblock zu verarbeiten. Bei der vorliegenden beispielhaften Ausführungsform werden dann, wenn bestimmt wurde, dass der nächste zu verarbeitende Datenblock Fehler aufweist, bei 604 nur Nullen gelesen, anstatt einen Cache-Burst von dem Datenpuffer 114 (1) zu lesen. Wenn alle Datenblöcke und Redundanzblöcke verarbeitet wurden, endet der Leseprozess 600 bei 614.
  • Bei der vorliegenden beispielhaften Ausführungsform entspricht die Anzahl von Iterationen der Schleife 604 bis 612 der Anzahl von Datenblöcken und Redundanzblöcken in der Entität 202 (2). Es sei beispielsweise mit Bezug auf 3 angenommen, dass Abschnitte der Entität 202 in Cache-Bursts mit einer Länge von 32 Byte gelesen werden. Bei einer ersten Iteration der Schleife 604 bis 612 (6) wird ein erster Cache-Burst, der die ersten 32 Byte des Datenblocks D19 enthält, gelesen und verarbeitet. Bei einer zweiten Iteration der Schleife 604 bis 612 (6) wird ein zweiter Cache-Burst, der die ersten 32 Byte des Datenblocks D18 enthält, gelesen und verarbeitet. Es sei angenommen, dass der Datenblock D4 mit Fehlern gekennzeichnet wurde. Dann werden bei der 16ten Iteration der Schleife 604 bis 612 (6) nur Nullen gelesen und verarbeitet, statt einen Cache-Burst von dem Datenblock D4 einzulesen. Bei diesem Beispiel wird die Schleife 604 bis 612 (6) 20 mal iteriert, um alle 16 Datenblöcke und vier Redundanzblöcke zu verarbeiten.
  • In 5 sei bemerkt, dass bei der ersten Iteration der Schleife 604 bis 612 (6) das Ergebnis der Summe des ersten Cache-Burst und der Ausgabe des Multiplizierers 506 die Daten sind, die bei dem ersten Cache-Burst gelesen wurden, weil die Warteschlange 504 leer und die Ausgabe des Multiplizierers 506 Null ist. Bei der zweiten Iteration hält die Warteschlange 504 die bei dem ersten Cache-Burst gelesenen Daten, und die Ausgabe des Multiplizierers 506 sind die Daten, die bei dem ersten Cache-Burst gelesen wurden, multipliziert mit einer Wurzel eines Generatorpolynoms. Somit ist das Ergebnis der Summe des zweiten Cache-Bursts und der Ausgabe des Multiplizierers 506 die Summe der Daten, die bei dem zweiten Cache-Burst gelesen wurden, und das Ergebnis des Multiplizierers der bei dem ersten Cache-Burst gelesenen Daten mit einer Wurzel eines Generatorpolynoms. Dieses Ergebnis wird dann in der Warteschlange 504 als das neue Zwischenergebnis gespeichert. Wenn der Leseprozess 604 bei 614 (6) beendet wird, nachdem alle Datenblöcke und Redundanzblöcke verarbeitet wurden, ist das in der Warteschlange 504 jeder Zelle 402 gespeicherte Endergebnis das Teilsyndrom für jede Zelle 402.
  • In 4 wiederum verwendet bei der vorliegenden beispielhaften Ausführungsform jede Zelle 402 eine unterschiedliche Wurzel eines Generatorpolynoms. Somit werden die unterschiedlichen Teilsyndrome in jeder der Mehrzahl von Zellen 402 erzeugt.
  • Genauer gesagt verwendet jede Zelle 402 eine Wurzel eines Generatorpolynoms von αn, wobei n die Sequenznummer der Zelle ist. Wenn es beispielsweise ρ Zellen 402 gibt, dann können den Zellen 402 Sequenznummern von Null bis (ρ-1) zugewiesen werden (d.h. Zelle 402(0), Zelle 402(1), Zelle 402(2), ..., Zelle 402(ρ-1)). Die Zelle 402(0) verwendet α0, die Zelle 402(1) verwendet α1, die Zelle 402(2) verwendet α2, ..., und die Zelle 402(ρ-1) verwendet α(ρ-1) bei diesem Beispiel. Die Wurzel eines Generatorpolynoms kann eine fest verdrahtete Konstante oder ein durch Firmware eingestelltes Register sein.
  • Während die Wurzeln eines Generatorpolynoms für die Mehrzahl von Zellen 402 sequenziell sein müssen, kann die Sequenz bei irgendeiner Nummer starten. Beispielsweise kann jede Zelle 402 eine Wurzel eines Generatorpolynoms von αn+1 verwenden, wobei n die Sequenznummer der Zelle und 1 eine feste Konstante für jede Zelle 402 ist.
  • Weil jede Zelle 402 eine unterschiedliche Wurzel eines Generatorpolynoms verwendet, wurden, nachdem der Prozess 600 (6) beendet ist, wenn alle Datenblöcke und Redundanzblöcke in der Entität 202 (2) bearbeitet wurden, unterschiedliche Teilsyndrome durch jede Zelle 402 erzeugt und in den Warteschlangen 504 der Zellen 402 gespeichert. Wenn es beispielsweise ρ Zellen 402 gibt und Zellen 402 Sequenznummern von Null bis (ρ-1) zugewiesen werden (d.h. Zelle 402(0), Zelle 402(1), Zelle 402(2), ..., Zelle 402(ρ-1)), erzeugt die Zelle 402(0) das Teilsyndrome S0, die Zelle 402(1) das Teilsyndrome S1, ..., und die Zelle 402(ρ-1) das Teilsyndrom S(ρ-1).
  • Nachdem der Leseprozess 600 (6) beendet wurde, erzeugt jede Zelle 402 einen Teilfehlerwert basierend auf dem erzeugten Teilsyndrom und einem Abschnitt der Inversen der Fehlerpositionsmatrix. Mit Bezug auf 8 wird ein beispielhafter Schreibprozess 800 zum Erzeugen eines Teilfehlerwerts in der Zelle 402 (4) dargestellt.
  • Bei 802 wird die Zelle 402 (4) in einem Schreibmodus eingestellt. In 5 wird bei der vorliegenden beispielhaften Ausführungsform die Eingangslogik 502 eingestellt, um Eingaben von der Rückkopplungsleitung 516 zu empfangen, die mit der Warteschlange 504 verbunden ist, die das in der Zelle 402 während des vorhergehenden Leseprozesses erzeugte Teilsyndrom hält. Genauer gesagt wird in 7 der Multiplexer 702 eingestellt, um eine Eingabe von der Rückkopplungsleitung 516 zu empfangen. In 5 wird der Multiplizierer 506 eingestellt, um Eingaben von der Warteschlange 504 und der Warteschlange 512, die einen Abschnitt der Inversen der Fehlerpositionsmatrix hält, zu empfangen. Genauer gesagt wird der Multiplexer 508 mit Eingängen, die mit Warteschlangen 510 und 512 verbunden sind, eingestellt, um eine Eingabe von der Warteschlange 512 zu empfangen.
  • Wie oben beschrieben ist, kennzeichnet eine Fehlerpositionsmatrix die Positionen aller Datenblöcke, die von dem Speichermedium mit Fehlern wiederhergestellt wurden. Beispielsweise kann eine beispielhafte Fehlerpositionsmatrix ausgedrückt werden als:
    Figure 00200001
    wobei X die Position eines Fehlers und ρ die Gesamtzahl von fehlerhaften Datenblöcken und Redundanzblöcken ist. Die Inverse der Fehlerpositionsmatrix kann wie folgt ausgedrückt werden:
    Figure 00210001
  • Wie oben ebenfalls beschrieben ist, kann bei der vorliegenden beispielhaften Ausführungsform die Inverse der Fehlerpositionsmatrix durch Firmware oder Hardware erzeugt werden.
  • Bei der vorliegenden beispielhaften Ausführungsform verwendet jede Zelle 402 einen unterschiedlichen Abschnitt der Inversen der Fehlerpositionsmatrix. Beispielsweise verwendet in 4, wenn es ρ Zellen 402 gibt, denen Sequenznummern von Null bis (ρ-1) zugewiesen sind (d.h. Zelle 402(0), Zelle 402(1), Zelle 402(2), ..., Zelle 402(ρ-1)), die Zelle 402(0) die erste Zeile der Inversen der Fehlerpositionsmatrix (d.h. U0,0, U1,0, ..., Uρ-1,0), die Zelle 402(1) die zweite Zeile der Inversen der Fehlerpositionsmatrix (d.h. U0,1, U1,1, ..., Uρ-1,1) und die Zelle 402(ρ-1) die (ρ-1)-Zeile der Inversen der Fehlerpositionsmatrix (d.h. U0,ρ-1, U1,ρ-1, ..., Uρ-1,ρ-1).
  • In 5 erzeugt bei 804 (8) der Multiplizierer 506 einen Teilfehlerwert durch Multiplizieren des Teilsyndroms, das in der Warteschlange 504 gehalten wird, mit einem Element des Abschnitts der Inversen der Fehlerpositionsmatrix, das in der Warteschlange 512 gehalten wird. Beispielsweise sei wiederum in 4 angenommen, dass es ρ Zellen 402 gibt, denen Sequenznummern von 0 bis (ρ-1) zugewiesen sind (d.h. Zelle 402(0), Zelle 402(1), Zelle 402(2), ..., Zelle 402(ρ-1)). In der Zelle 402(0) kann ein erster Teilfehlerwert y0(0) durch Multiplizieren des Teilsyndroms So mit dem ersten Element von der ersten Zeile der Inversen der Fehlerpositionsmatrix U0,0 erzeugt werden. Bei der Zelle 402(1) kann ein zweiter Teilfehlerwert y0(1) durch Multiplizieren des Teilsyndroms S1 mit dem ersten Element von der zweiten Zeile der Inversen der Fehlerpositionsmatrix U0,1 erzeugt werden. In der Zelle 402(ρ-1), kann ein (ρ-1)-Teilfehlerwert y0(ρ-1) durch Multiplizieren des Teilsyndroms S(ρ-1) mit dem ersten Element von der (ρ-1)-Zeile der Inversen der Fehlerpositionsmatrix U0,ρ-1 erzeugt werden.
  • In 8 wird bei 806 der durch die Zelle 402 (4) erzeugte Teilfehlerwert zu der Summationslogik 404 (4) gesendet. In 4 werden bei dem oben beschriebenen Beispiel die durch Zellen 402(0), 402(1), ..., und 402(ρ-1) erzeugten Teilfehlerwerte y0(0), y0(1), ..., und y0(ρ-1) zu der Summationslogik 404 gesendet.
  • Um einen Fehlerwert zu erzeugen, summiert die Summationslogik 404 die durch die Zellen 402 erzeugten Teilfehlerwerte. Bei dem oben beschriebenen Beispiel wird ein erster Fehlerwert Y0 durch Summieren der Teilfehlerwerte y0(0), y0(1), .., und y0(ρ-1) erzeugt, die durch die Zellen 402(0), 402(1), ..., und 402(ρ-1) erzeugt wurden.
  • In 9 kann bei der vorliegenden beispielhaften Ausführungsform die Summationslogik 404 ein Array von XOR-Gattern 902 umfassen, das die Galois-Feld-Summe der Ausgaben der Zellen 402 (4) berechnet. Es ist jedoch ersichtlich, dass die Summationslogik 404 verschiedene Komponenten, einschließlich verschiedene Arten und Anzahlen von Logikkomponenten umfassen kann, um die Galois-Feld-Summe der Ausgaben der Zellen 402 (4) zu berechnen.
  • Der erzeugte Fehlerwert kann dann in den Datenpuffer 114 (1) geschrieben werden, um die Daten in der Position zu korrigieren, die den Elementen eines Abschnitts der Inversen der Fehlerpositionsmatrix entspricht, die verwendet werden, um die Teilfehlerwerte in den Zellen 402 zu erzeugen. In 4 werden bei dem oben beschriebenen Beispiel Teilfehlerwerte y0(0), yo(1), ..., und y0(ρ-1) in Zellen 402(0), 402(1), ..., und 402(ρ-1) mit den Elementen U0,0, U0,1, ..., und U0,ρ-1 eines Abschnitts der Inversen der Fehlerpositionsmatrix erzeugt. In 3 sei beispielsweise angenommen, dass diese Elemente einem Abschnitt des Datenblocks D4 entsprechen. Der Fehlerwert Y0 kann dann in den Datenpuffer 114 (1) geschrieben werden, um den Abschnitt des Datenblocks D4 zu korrigieren.
  • In 4 durchläuft, wenn die Größe des Cache-Burst größer als die Datenmenge ist, die zu einer Zeit durch die Zelle 402 verarbeitet wird, während des Schreibprozesses 800 (8) die Zelle 402 zyklisch durch den Cache-Burst, um den gesamten Cache-Burst zu verarbeiten. Beispielsweise können, wie oben beschrieben ist, die Zellen 402 Daten von dem Datenpuffer 114 (1) in einem Cache-Burst von 32 Byte empfangen und jeweils ein langes Wort des Cache-Burst verarbeiten. Wie ebenfalls oben beschrieben ist, kann die Warteschlange 504 (5) acht Einträge aufweisen, die jeweils 32 Bit (ein langes Wort) lang sind. Somit multipliziert bei dem obigen Beispiel, bei dem das Element U0,0 verwendet wird, um einen Teilfehlerwert y0(0) in der Zelle 402(0) zu erzeugen, der Multiplizierer 506 in der Zelle 402(0) jeden Eintrag in der Warteschlange 504 (5) mit dem Element U0,0, um acht Sätze von Teilfehlerwerten y0(0) zu erzeugen. Auf ähnliche Weise werden acht Sätze von Teilfehlerwerten y0(1), ..., und y0(ρ-1) in Zellen 402(1), ..., und 402(ρ-1) mit Elementen U0,1, ..., und U0,ρ-1 erzeugt.
  • Die Summationslogik 404 erzeugt ebenfalls acht Sätze von Fehlerwerten Y0, die dann wieder als ein Cache-Burst in den Datenpuffer 114 (1) geschrieben werden. Wenn beispielsweise in 3 angenommen wird, dass Elemente U0,0, U0,1, ..., und U0,ρ-1 den ersten 32 Byte des Datenblocks D4 entsprechen, was den ersten 32 Codewörtern des Datenblocks D4 entspricht, werden die acht Sätze von Fehlerwerten Y0 geschrieben, um die ersten 32 Byte des Datenblocks D4 zu korrigieren.
  • In 5 kann der Schreibprozess 800 (8) dann iteriert werden, um einen weiteren Satz von Teilfehlerwerten zu erzeugen, die dann summiert werden können, um einen weiteren Fehlerwert zu erzeugen, der dann verwendet werden kann, um einen Abschnitt eines anderen fehlerhaften Datenblocks zu korrigieren. Beispielsweise werden bei einer zweiten Iteration ein zweiter Satz von Teilfehlerwerten erzeugt und summiert, um einen zweiten Fehlerwert zu erzeugen.
  • Genauer gesagt kann in 4 bei der zweiten Iteration von 804 (8) bei der Zelle 402(0) ein erster Teilfehlerwert y1(0) durch Multiplizieren des Teilsyndroms S0 mit dem zweiten Element von der ersten Zeile der Inversen der Fehlerpositionsmatrix U1,0 erzeugt werden. Bei der Zelle 402(1) kann ein zweiter Teilfehlerwert y1(1) durch Multiplizieren des Teilsyndroms S1 mit dem zweiten Element von der zweiten Zeile der Inversen der Fehlerpositionsmatrix U1,1 erzeugt werden. Bei der Zelle 402(ρ-1) kann ein (ρ-1)-Teilfehlerwert y0(ρ-1) durch Multiplizieren des Teilsyndroms S(ρ-1) mit dem zweiten Element von der (ρ-1)-Zeile der Inversen der Fehlerpositionsmatrix U1,ρ-1 erzeugt werden.
  • Bei der zweiten Iteration von 806 (8) werden der zweite Satz von Teilfehlerwerten y1(0), y1(1), ..., und y1(ρ-1), die durch die Zellen 402(0), 402(1), ..., und 402(ρ-1) erzeugt wurden, zu der Summationslogik 404 gesendet. Ein zweiter Fehlerwert Y1 wird dann durch Summieren der Teilfehlerwerte y1(0), y1(1), ..., und y1(ρ-1) erzeugt.
  • Durch Iterieren des Schreibprozesses 800 (8) und Summieren der erzeugten Sätze von Teilfehlerwerten können Fehlerwerte erzeugt werden, um Abschnitte der Datenblöcke zu korrigieren, die mit Fehlern gekennzeichnet wurden. Die Anzahl von Malen, die der Schreibprozess 800 (8) iteriert wird, und die Anzahl von Fehlerwerten, die erzeugt wurden, können basierend auf der Anzahl von Datenblöcken bestimmt werden, die als fehlerhaft gekennzeichnet wurden (d.h. ρ). Alternativ wird die Anzahl von Malen, die der Schreibprozess 800 (8) iteriert wird, und die Anzahl von Fehlerwerten, die erzeugt werden, auf die maximale Anzahl von Datenblöcken eingestellt werden, die korrigiert werden können, die der Anzahl von Redundanzblöcken in der Entität 202 (2) entspricht.
  • Nachdem der Schreibprozess 800 (8) abgeschlossen wurde, kann der Leseprozess 600 (6) erneut iteriert werden, um einen weiteren Abschnitt der Datenblöcke und Redundanzblöcke, die in dem Datenpuffer 114 (1) gespeichert sind, zu verarbeiten, und dann kann der Schreibprozess 800 (8) erneut iteriert werden, um Fehler in einem anderen Abschnitt der Datenblöcke mit Fehlern zu korrigieren. Bei der vorliegenden beispielhaften Ausführungsform wird, bevor der Leseprozess 600 (6) erneut iteriert wird, die Warteschlange 504 (5) gelöscht.
  • Beispielsweise sei in 3 angenommen, dass Abschnitte der Entität 202 in einem Cache-Burst von 32 Byte Länge gelesen werden. Der Leseprozess 600 (6) wird iteriert, um die ersten 32 Byte jedes Datenblocks 204 und jedes Redundanzblocks 206 zu lesen und zu verarbeiten, um Teilsyndrome zu erzeugen. Der Schreibprozess 800 (8) wird dann iteriert, um Fehlerwerte zu erzeugen und Fehler in den ersten 32 Byte jedes Datenblocks 204 zu korrigieren, der Fehler aufweist. Die Warteschlange 504 (5) wird gelöscht, dann wird der Leseprozess 600 (6) erneut iteriert, um die zweiten 32 Byte jedes Datenblocks 204 und jedes Redundanzblocks 208 zu lesen und zu verarbeiten, um einen weiteren Satz von Teilsyndromen zu erzeugen. Der Schreibprozess 800 (8) wird dann erneut iteriert, um Fehlerwerte zu erzeugen und Fehler in den zweiten 32 Byte jedes Datenblocks 204 zu korrigieren, der Fehler aufweist. Auf diese Art und Weise werden alle Abschnitte jedes Datenblocks 204 und Redundanzblocks 206 mit dem Leseprozess 600 (6) gelesen und verarbeitet, und alle Abschnitte jedes Datenblocks, der Fehler aufweist, wird mit dem Schreibprozess 800 (8) korrigiert.
  • Obwohl beispielhafte Ausführungsformen beschrieben wurden, können verschiedene Modifikationen durchgeführt werden ohne von dem Geist und/oder Schutzumfangs der Erfindung abzuweichen. Beispielsweise ist in 4 ersichtlich, dass, obwohl der Decodierer 4 in Verbindung mit einer Speichervorrichtung beschrieben wurde, der Decodierer 4 in Verbindung mit verschiedenen Vorrichtungen und bei verschiedenen Anwendungen verwendet werden kann, bei denen Daten durch einen Kanal empfangen werden, der Fehler einführt, wie beispielsweise als ein Teil eines Telekommunikationssystems. Daher sollte die Erfindung nicht so verstanden werden, dass sie auf die in den Zeichnungen und oben beschriebenen speziellen Formen beschränkt ist.

Claims (37)

  1. Decodierer zur Fehlerkorrektur in Daten, mit: einer Mehrzahl von Zellen, wobei jede Zelle konfiguriert ist, um ein Teilsyndrom basierend auf Datenblöcken und einem oder mehreren Redundanzblöcken zu erzeugen, und um einen Teilfehlerwert basierend auf dem Teilsyndrom und einen Abschnitt einer Inversen einer Fehlerpositionsmatrix, die Positionen von allen Datenblöcken identifiziert, die Fehler aufweisen, zu erzeugen; und einer Summationslogik, die mit der Mehrzahl von Zellen verbunden ist, wobei die Summationslogik konfiguriert ist, um einen Fehlerwert basierend auf den durch die Mehrzahl von Zellen erzeugten Teilfehlerwerten zu erzeugen, wobei der Fehlerwert Fehler in einem der Datenblöcke korrigiert.
  2. Decodierer gemäß Anspruch 1, bei dem die Anzahl von Zellen in der Mehrzahl von Zellen gleich der Anzahl von Redundanzblöcken ist.
  3. Decodierer gemäß Anspruch 1, bei dem jede Zelle umfasst: eine Eingangslogik; eine erste Warteschlange, die mit der Eingangslogik verbunden ist; und einen Multiplizierer, der mit der Eingangslogik und der ersten Warteschlange verbunden ist.
  4. Decodierer gemäß Anspruch 1, bei dem jede Zelle in einem Lesemodus arbeitet, um das Teilsyndrom zu erzeugen.
  5. Decodierer gemäß Anspruch 4, bei dem, wenn eine Zelle in einem Lesemodus arbeitet, die Eingangslogik der Zelle eingestellt ist, um Eingänge von dem Multiplizierer und einem Datenpuffer, der die Datenblöcke und einen oder mehrere Redundanzblöcke hält, zu empfangen.
  6. Decodierer gemäß Anspruch 5, bei dem die Eingangslogik eine Summe der Eingänge von dem Multiplizierer und dem Datenpuffer erzeugt, und wobei die Summe in der ersten Warteschlange gespeichert wird.
  7. Decodierer gemäß Anspruch 6, bei dem die Eingangslogik ein Exklusiv-ODER-Gatter (XOR-Gatter) mit Eingängen, die mit dem Datenpuffer und dem Multiplizierer verbunden sind, und einem Ausgang, der mit der ersten Warteschlange verbunden ist, um die Summe zu erzeugen, umfasst.
  8. Decodierer gemäß Anspruch 6, bei dem, wenn die Zelle in dem Lesemodus arbeitet, der Multiplizierer eingestellt ist, um eine Wurzel eines Generatorpolynoms und die Summe von der ersten Warteschlange zu empfangen.
  9. Decodierer gemäß Anspruch 8, bei dem der Multiplizierer ein Galois-Feld-Multiplizierer ist, der eine Galois-Feld-Multiplikation zwischen der Wurzel eines Generatorpolynoms und der Summe durchführt.
  10. Decodierer gemäß Anspruch 9, bei dem der Multiplizierer eine Mehrzahl von Galois-Feld-Multiplizierern umfasst, um mehrere parallele Galois-Feld-Multiplikationen zwischen der Wurzel eines Generatorpolynoms und der Summe durchzuführen.
  11. Decodierer gemäß Anspruch 8, bei dem jede Zelle in der Mehrzahl von Zellen eingestellt ist, um eine unterschiedliche Wurzel eines Generatorpolynoms zu empfangen, um unterschiedliche Teilsyndrome zu erzeugen.
  12. Decodierer gemäß Anspruch 8, bei dem die Wurzel eines Generatorpolynoms eine fest verdrahtete Konstante oder ein durch Firmware eingestelltes Register ist.
  13. Decodierer gemäß Anspruch 8, ferner mit: einer zweiten Warteschlange, die die Wurzel eines Generatorpolynoms hält; und einem Multiplexer mit einem mit der zweiten Warteschlange verbundenen Eingang und einem mit dem Multiplizierer verbundenen Ausgang, wobei der Multiplexer eingestellt ist, um die zweite Warteschlange mit dem Multiplizierer zu verbinden, wenn die Zelle im Lesemodus arbeitet.
  14. Decodierer gemäß Anspruch 4, bei dem jede Zelle in einem Schreibmodus arbeitet, um den Teilfehlerwert zu erzeugen.
  15. Decodierer gemäß Anspruch 14, bei dem, wenn eine Zelle in einem Schreibmodus arbeitet, die Eingangslogik der Zelle eingestellt ist, um Eingänge von der Warteschlange zu empfangen, die das durch die Zelle während des Lesemodus erzeugte Teilsyndrom hält.
  16. Decodierer gemäß Anspruch 15, bei dem der Multiplizierer ein Galois-Feld-Multiplizierer ist, der eine Galois-Feld-Multiplikation zwischen dem Teilsyndrom und dem Element des Abschnitts der Inversen der Fehlerpositionsmatrix durchführt.
  17. Decodierer gemäß Anspruch 16, bei dem der Multiplizierer eine Mehrzahl von Galois-Feld-Multiplizierern umfasst, um mehrere parallele Galois-Feld-Multiplikationen zwischen dem Teilsyndrom und dem Element des Abschnitts der Inversen der Fehlerpositionsmatrix durchzuführen.
  18. Decodierer gemäß Anspruch 14, bei dem jede Zelle in der Mehrzahl von Zellen eingestellt ist, um einen unterschiedlichen Abschnitt der Fehlerpositionsmatrix zu empfangen, um unterschiedliche Teilfehlerwerte zu erzeugen.
  19. Decodierer gemäß Anspruch 14, ferner mit: einer dritten Warteschlange, die den Abschnitt der Fehlerpositionsmatrix hält; und einem Multiplexer mit einem mit der dritten Warteschlange verbundenen Eingang und einem mit dem Multiplizierer verbundenen Ausgang, wobei der Multiplexer eingestellt ist, um die dritte Warteschlange mit dem Multiplizierer zu verbinden, wenn die Zelle im Schreibmodus arbeitet.
  20. Decodierer gemäß Anspruch 1, bei dem die Summationslogik ein Array von XOR-Gattern umfasst.
  21. Decodierer gemäß Anspruch 1, bei dem die Inverse der Fehlerpositionsmatrix durch Firmware oder Hardware erzeugt wird.
  22. Datenspeichervorrichtung mit dem Decodierer gemäß einem der Ansprüche 1 bis 21, bei der die Datenblöcke und ein oder mehrere Redundanzblock/-blöcke von einem Speichermedium wieder hergestellt und in einem Datenpuffer in der Datenspeichervorrichtung gehalten werden.
  23. Datenspeichervorrichtung, die konfiguriert ist, um Fehler in Daten zu korrigieren, die von einem Speichermedium wieder hergestellt werden, mit: einem Datenpuffer, der konfiguriert ist, um Datenblöcke und einen oder mehrere Redundanzblöcke zu halten, die von dem Speichermedium wieder hergestellt werden; und einem Decodierer gemäß einem der Ansprüche 1 bis 21, der mit dem Datenpuffer verbunden ist, wobei die Mehrzahl von Zellen des Decodierers konfiguriert sind, um auf die Datenblöcke und einen oder mehrere Redundanzblöcke zuzugreifen, die in dem Datenpuffer gehalten werden.
  24. Verfahren zum Korrigieren von Fehlern in Daten, mit: Empfangen von Datenblöcken und einem oder mehreren Redundanzblöcken; Erzeugen einer Inversen einer Fehlerpositionsmatrix mit Positionen von empfangenen Datenblöcken mit Fehlern; Erzeugen einer Mehrzahl von Teilsyndromen in einer Mehrzahl von Zellen eines Decodierers, wobei jedes der Mehrzahl von Teilsyndromen in jeder der Mehrzahl von Zellen basierend auf den empfangenen Datenblöcken und einem oder mehreren Redundanzblöcken erzeugt werden; Erzeugen einer Mehrzahl von Teilfehlerwerten in der Mehrzahl von Zellen, wobei jeder der Mehrzahl von Teilfehlerwerten in jeder der Mehrzahl von Zellen basierend auf einem Teilsyndrom und einem Abschnitt der Inversen der Fehlerpositionsmatrix erzeugt wird; und Erzeugen eines Fehlerwerts basierend auf der Mehrzahl von Teilfehlerwerten, die durch die Mehrzahl von Zellen erzeugt werden.
  25. Verfahren gemäß Anspruch 24, bei dem die empfangenen Datenblöcke und ein oder mehrere Redundanzblock/-blöcke in einem Datenpuffer gehalten werden, und wobei das Erzeugen einer Mehrzahl von Teilsyndromen umfasst: in jeder der Mehrzahl von Zellen: a) Lesen von Daten aus dem Datenpuffer; b) Erzeugen einer Summe der aus dem Datenpuffer gelesenen Daten mit einer Ausgabe von einem Multiplizierer; c) Speichern der Summe; d) Multiplizieren der Summe mit einer Wurzel eines Generatorpolynoms; und e) Iterieren der Schritte a) bis d), um alle Datenblöcke und den einen oder die mehreren Redundanzblock/-blöcke zu verarbeiten, die in dem Datenpuffer gehalten werden, wobei die Summe das Teilsyndrom ist, wenn alle Datenblöcke und der eine oder die mehreren Redundanzblock/-blöcke, die in dem Datenpuffer gehalten werden, verarbeitet wurden.
  26. Verfahren gemäß Anspruch 25, bei dem die Anzahl von Iterationen von Schritten a) bis d) gemäß Anspruch 25 gleich der Anzahl von Datenblöcken und Redundanzblöcken ist, die in dem Datenpuffer gehalten werden.
  27. Verfahren gemäß Anspruch 25, bei dem bei dem Iterationsschritt a), wenn Daten aus einem Datenblock mit Fehlern zu lesen sind, alle Nullen anstatt der Daten von dem Datenblock mit Fehlern gelesen werden.
  28. Verfahren gemäß Anspruch 25, bei dem das Multiplizieren der Summe mit einer Wurzel eines Generatorpolynoms umfasst: Durchführen mehrerer paralleler Galois-Feld-Multiplikationen zwischen der Wurzel eines Generatorpolynoms und der Summe mit einer Mehrzahl von Galois-Feld-Multiplizierern.
  29. Verfahren gemäß Anspruch 25, bei dem das Erzeugen einer Mehrzahl von Teilfehlerwerten umfasst: nachdem die Schritte a) bis e) gemäß Anspruch 25 abgeschlossen sind, in jeder der Mehrzahl von Zellen: f) Multiplizieren des Teilsyndroms mit einem Element des Abschnitts der Inversen der Fehlerpositionsmatrix, um einen Teilfehlerwert zu erzeugen; und g) Senden des Teilfehlerwerts, um mit den durch jede der Mehrzahl von Zellen erzeugten Teilfehlerwerten summiert zu werden.
  30. Verfahren gemäß Anspruch 29, ferner mit: h) Summieren der Teilfehlerwerte, die durch jede der Mehrzahl von Zellen erzeugt wurden, um einen Fehlerwert zu erzeugen; und i) Schreiben des Fehlerwerts in den Datenpuffer, um einen Datenblock mit Fehlern zu korrigieren.
  31. Verfahren gemäß Anspruch 30, ferner mit: j) Wiederholen der Schritte f) und g) gemäß Anspruch 29 und der Schritte h) und i) gemäß Anspruch 30, um einen weiteren Datenblock mit Fehlern zu korrigieren.
  32. Verfahren gemäß Anspruch 31, bei dem die Anzahl von Iterationen von Schritten f) bis g) gemäß Anspruch 29 und Schritten h) und i) gemäß Anspruch 30 gleich der Anzahl von Datenblöcken mit Fehlern ist.
  33. Verfahren gemäß Anspruch 31, bei dem die Anzahl von Iterationen von Schritten f) bis g) gemäß Anspruch 29 und Schritten h) und i) gemäß Anspruch 30 gleich der Anzahl von in dem Datenpuffer gehaltenen Redundanzblöcken ist.
  34. Verfahren gemäß Anspruch 31, bei dem die Summe gelöscht wird und Schritte a) bis e) gemäß Anspruch 25, Schritte f) und g) gemäß Anspruch 29, Schritte h) und i) gemäß Anspruch 30 und Schritt j) gemäß Anspruch 31 wiederholt werden, um einen anderen Abschnitt der Datenblöcke und einen oder mehrere Redundanzblock/-blöcke zu verarbeiten, die in dem Datenpuffer gehalten werden.
  35. Verfahren gemäß Anspruch 29, bei dem das Multiplizieren des Teilsyndroms mit einem Element des Abschnitts der Inversen der Fehlerpositionsmatrix umfasst: Durchführen mehrerer paralleler Galois-Feld-Multiplikationen zwischen dem Teilsyndrom und dem Element des Abschnitts der Inversen der Fehlerpositionsmatrix mit einer Mehrzahl von Galois-Feld-Multiplizierern.
  36. Verfahren gemäß Anspruch 24, bei dem das Empfangen von Datenblöcken und einem oder mehreren Redundanzblöcken ein Wiederherstellen von Datenblöcken und von einem oder mehreren Redundanzblock/-blöcken aus einem Speichermedium einer Datenspeichervorrichtung umfasst.
  37. Verfahren gemäß Anspruch 24, bei dem die Inverse der Fehlerpositionsmatrix durch Firmware oder Hardware erzeugt wird.
DE602005000251T 2004-02-19 2005-02-18 Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder Expired - Fee Related DE602005000251T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US782990 2004-02-19
US10/782,990 US7228490B2 (en) 2004-02-19 2004-02-19 Error correction decoder using cells with partial syndrome generation

Publications (2)

Publication Number Publication Date
DE602005000251D1 DE602005000251D1 (de) 2006-12-28
DE602005000251T2 true DE602005000251T2 (de) 2007-06-14

Family

ID=34861115

Family Applications (1)

Application Number Title Priority Date Filing Date
DE602005000251T Expired - Fee Related DE602005000251T2 (de) 2004-02-19 2005-02-18 Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder

Country Status (4)

Country Link
US (1) US7228490B2 (de)
EP (1) EP1589665B1 (de)
JP (1) JP4733403B2 (de)
DE (1) DE602005000251T2 (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7431585B2 (en) * 2002-01-24 2008-10-07 Applied Materials, Inc. Apparatus and method for heating substrates
US7426678B1 (en) 2004-07-20 2008-09-16 Xilinx, Inc. Error checking parity and syndrome of a block of data with relocated parity bits
US7694208B2 (en) * 2005-12-20 2010-04-06 Quantum Corporation Error correction algorithm using interleaved parity check and Reed-Solomon code
KR100833600B1 (ko) * 2006-08-25 2008-05-30 삼성전자주식회사 에러 정정 회로, 그 방법 및 상기 회로를 구비하는 반도체메모리 장치
US8271857B2 (en) * 2008-05-13 2012-09-18 International Business Machines Corporation Correcting errors in longitudinal position (LPOS) words
US9179362B2 (en) * 2011-08-25 2015-11-03 Texas Instruments Incorporated Systems and methods for networking coding using Reed-Solomon codes
US10181864B2 (en) 2016-02-26 2019-01-15 Altera Corporation Methods and apparatus for performing reed-solomon encoding
JP7400514B2 (ja) * 2020-02-07 2023-12-19 Tdk株式会社 メモリコントローラ及びフラッシュメモリシステム

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4646303A (en) * 1983-10-05 1987-02-24 Nippon Gakki Seizo Kabushiki Kaisha Data error detection and correction circuit
JPH0812612B2 (ja) * 1983-10-31 1996-02-07 株式会社日立製作所 誤り訂正方法及び装置
JPH0770177B2 (ja) * 1984-01-25 1995-07-31 株式会社日立製作所 ディジタル信号再生装置
NL8400630A (nl) * 1984-02-29 1985-09-16 Philips Nv Decodeerinrichting voor een stroom van codesymbolen die woordsgewijze beschermd zijn door een dubbele reed-solomon-code met een minimum hamming-afstand van 5 over de codesymbolen en een verbladeringsmechanisme tussen de beide codes, alsmede speler voorzien van zo een decodeerinrichting.
US4777635A (en) * 1986-08-08 1988-10-11 Data Systems Technology Corp. Reed-Solomon code encoder and syndrome generator circuit
FR2605769B1 (fr) * 1986-10-22 1988-12-09 Thomson Csf Operateur polynomial dans les corps de galois et processeur de traitement de signal numerique comportant un tel operateur
US5325373A (en) * 1986-12-22 1994-06-28 Canon Kabushiki Kaisha Apparatus for encoding and decoding reed-solomon code
JPS63193723A (ja) * 1987-02-06 1988-08-11 Sony Corp リ−ドソロモン符号の復号方法
US5136592A (en) * 1989-06-28 1992-08-04 Digital Equipment Corporation Error detection and correction system for long burst errors
US5430739A (en) * 1990-03-27 1995-07-04 National Science Council Real-time Reed-Solomon decoder
JP2919633B2 (ja) * 1991-05-10 1999-07-12 三井化学株式会社 プロピレンの部分酸化物の製造方法
JP2662472B2 (ja) * 1991-06-13 1997-10-15 シャープ株式会社 誤り訂正処理用シンドローム演算回路
US5285455A (en) * 1992-02-03 1994-02-08 Lsi Logic Corporation Serial data encoder
US5471485A (en) * 1992-11-24 1995-11-28 Lsi Logic Corporation Reed-solomon decoder using discrete time delay in power sum computation
US5444719A (en) * 1993-01-26 1995-08-22 International Business Machines Corporation Adjustable error-correction composite Reed-Solomon encoder/syndrome generator
US5383204A (en) * 1993-06-29 1995-01-17 Mitsubishi Semiconductor America, Inc. Parallel encoding apparatus and method implementing cyclic redundancy check and Reed-Solomon codes
US5771244A (en) * 1994-03-09 1998-06-23 University Of Southern California Universal Reed-Solomon coder/encoder
FR2721774B1 (fr) * 1994-06-27 1996-09-06 Sgs Thomson Microelectronics Décodeur reed-solomon.
US5555250A (en) * 1994-10-14 1996-09-10 Compaq Computer Corporation Data error detection and correction system
JP2963018B2 (ja) * 1994-11-08 1999-10-12 旭化成マイクロシステム株式会社 リード・ソロモン誤り訂正符号復号化回路
EP0783752B1 (de) * 1995-07-19 2002-11-27 Koninklijke Philips Electronics N.V. Reversibles mehrspurmagnetbandspeichersystem mit mehrfachrahmenfehlerschutzeinrichtung
US5719884A (en) * 1995-07-27 1998-02-17 Hewlett-Packard Company Error correction method and apparatus based on two-dimensional code array with reduced redundancy
US5889792A (en) * 1996-10-01 1999-03-30 Intel Corporation Method and apparatus for generating syndromes associated with a block of data that employs re-encoding the block of data
GB9622539D0 (en) * 1996-10-30 1997-01-08 Discovision Ass Galois field multiplier for reed-solomon decoder
US5948117A (en) * 1997-01-23 1999-09-07 Quantum Corporation Modified Reed-Solomon error correction system using (W+i+1)-bit representations of symbols of GF(2w+i)
US5901158A (en) * 1997-04-22 1999-05-04 Quantum Corporation Error correction encoder/decoder
JP3850511B2 (ja) * 1997-05-07 2006-11-29 日本テキサス・インスツルメンツ株式会社 リードソロモン復号装置
JPH10322226A (ja) * 1997-05-14 1998-12-04 Texas Instr Japan Ltd リードソロモン復号方法
US5889793A (en) * 1997-06-27 1999-03-30 Integrated Device Technology, Inc. Methods and apparatus for error correction
JPH1131977A (ja) * 1997-07-10 1999-02-02 Sony Corp 誤り訂正符号演算器
KR100256250B1 (ko) * 1997-08-30 2000-05-15 김영환 직렬화된 리드 솔리몬 복호장치
US6041431A (en) * 1997-09-19 2000-03-21 Adapter, Inc. Method and apparatus for performing error correction code operations
JPH11196006A (ja) * 1997-12-26 1999-07-21 Nec Corp 並列処理シンドロ−ム計算回路及びリ−ド・ソロモン複合化回路
US6327690B1 (en) * 1999-02-04 2001-12-04 Intel Corporation Integrated reed-solomon error correction code encoder and syndrome generator
US6347389B1 (en) * 1999-03-23 2002-02-12 Storage Technology Corporation Pipelined high speed reed-solomon error/erasure decoder
US6341362B1 (en) * 1999-04-22 2002-01-22 Vlsi Technology, Inc. Extended symbol Galois field error correcting device
JP3502583B2 (ja) * 1999-10-25 2004-03-02 松下電器産業株式会社 誤り訂正方法および誤り訂正装置
US6651208B1 (en) * 2000-04-04 2003-11-18 Mosel Vitelic Corporation Method and system for multiple column syndrome generation
GB0031436D0 (en) * 2000-12-22 2001-02-07 Koninkl Philips Electronics Nv Method and apparatus for data reproduction
JP3954803B2 (ja) * 2001-03-22 2007-08-08 三洋電機株式会社 エラー訂正装置
JP3879082B2 (ja) * 2002-05-31 2007-02-07 財団法人理工学振興会 バイト誤り訂正・検出装置

Also Published As

Publication number Publication date
EP1589665A1 (de) 2005-10-26
DE602005000251D1 (de) 2006-12-28
JP4733403B2 (ja) 2011-07-27
US7228490B2 (en) 2007-06-05
JP2005293557A (ja) 2005-10-20
US20050188293A1 (en) 2005-08-25
EP1589665B1 (de) 2006-11-15

Similar Documents

Publication Publication Date Title
DE602005000251T2 (de) Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder
DE3486408T2 (de) Verfahren und Vorrichtung zur Dekodierung eines fehlerkorrigierenden Kodes.
DE69919199T2 (de) Vorwärtsfehlerkorrektur
DE10133595B4 (de) Pufferschaltung, Speicherzugriffsverfahren und Reed-Solomon-Decoder
DE69626130T2 (de) Datenintegritätscode und querüberprüfender code mit logischer blockadresse
DE3854393T2 (de) Verfahren und gerät zur fehlerkorrektur mit mehrfachdurchlauf für produktkode.
DE3852474T2 (de) Nachschlagetabellen verwendende Fehlerkorrektur.
EP0545498B1 (de) Verfahren und Schaltungsanordnung zum Decodieren von RS-codierten Datensignalen
KR100906474B1 (ko) 저밀도 부가정보 발생용 매트릭스를 이용한 에러 정정방법 및그 장치
DE3787900T2 (de) Verfahren und Gerät zur Erzeugung von Prüfungs-Byten zur Fehlerdetektion für einen Datenblock.
DE112012000385T5 (de) Korrigieren von Auslöschungen in Speicher-Arrays
DE68921855T2 (de) Korrektur von Burst- und Zufallsfehlern.
US8843810B2 (en) Method and apparatus for performing a CRC check
DE10105626B4 (de) Verfahren und System zur Berechnung von zyklischem Blockprüfungscode und Verfahren zum Erkennen eines Fehlers
DE4105860C2 (de) Schaltungsanordnung zum Erkennen und Korrigieren von Fehlern in Datenworten
DE602004008150T2 (de) Datenfehlerkorrektur mittels Redundanzblöcke
DE69837784T2 (de) Verbessertes fünf-fehler-korrektursystem
WO2017185681A1 (zh) 一种gel码字结构编码和译码的方法、装置及相关设备
DE3856035T2 (de) Schaltung mit grosser bandbreite und verfahren zur reed-solomon-kodierung, dekodierung und fehlerkorrektur
US7228467B2 (en) Correcting data having more data blocks with errors than redundancy blocks
DE102015111729A1 (de) Verfahren und decoder zum bestimmen eines fehlervektors für ein datenwort gemäss einem reed-muller-code
DE102015121646B4 (de) Fehlerkorrektur
DE102021123727B4 (de) Bytefehlerkorrektur
DE102022111624B4 (de) Fehlerkorrektur mit schneller Syndromberechnung
Boyd et al. Recovery of unknown constraint length and generator polynomials for linear convolutional encoders

Legal Events

Date Code Title Description
8328 Change in the person/name/address of the agent

Representative=s name: HENKEL, FEILER & HAENZEL, 80333 MUENCHEN

8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee