Error correction decoder comprising an erasure correcting Reed-Solomon decoder and a CRC decoder
37 claims: 37 independent, 0 dependent
- 1A decoder to correct errors in data, comprising:a plurality of cells, each cell configured to generate a partial syndrome based on data blocks and one or more redundancy blocks, and to generate a partial error value based on the partial syndrome and a portion of an inverse of an error location matrix that identifies locations of any data blocks having errors;anda summation logic connected to the plurality of cells, the summation logic configured to generate an error value based on the partial error values generated by the plurality of cells, wherein the error value corrects errors in one of the data blocks. 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;undeiner 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. Décodeur pour corriger des erreurs dans des données, comprenant : une pluralité de cellules, chaque cellule étant configurée pour générer un syndrome partiel sur la base de blocs de données et d'un ou plusieurs blocs de redondance, et pour générer une valeur d'erreur partielle basée sur le syndrome partiel et une partie d'un inverse d'une matrice de localisation d'erreurs qui identifie les emplacements de n'importe quels blocs de données ayant des erreurs ;etune logique de sommation reliée à la pluralité de cellules, la logique de sommation étant configurée pour générer une valeur d'erreur basée sur les valeurs d'erreur partielle générées par la pluralité de cellules, dans laquelle la valeur d'erreur corrige des erreurs dans un des blocs de données.
- 2Decodierer gemäß Anspruch 1, bei dem die Anzahl von Zellen in der Mehrzahl von Zellen gleich der Anzahl von Redundanzblöcken ist. Décodeur selon la revendication 1, dans lequel le nombre de cellules dans la pluralité de cellules est égal au nombre de blocs de redondance. The decoder of claim 1, wherein the number of cells in the plurality of cells is equal to the number of redundancy blocks.
- 3Decodierer gemäß Anspruch 1, bei dem jede Zelle umfasst:eine Eingangslogik;eine erste Warteschlange, die mit der Eingangslogik verbunden ist;undeinen Multiplizierer, der mit der Eingangslogik und der ersten Warteschlange verbunden ist. Décodeur selon la revendication 1, dans lequel chaque cellule comprend : une logique d'entrée ;une première file d'attente reliée à la logique d'entrée ;etun multiplicateur relié à la logique d'entrée et à la première file d'attente. The decoder of claim 1, wherein each cell includes: an input logic;a first queue connected to the input logic;anda multiplier connected to the input logic and the first queue.
- 4Decodierer gemäß Anspruch 1, bei dem jede Zelle in einem Lesemodus arbeitet, um das Teilsyndrom zu erzeugen. Décodeur selon la revendication 1, dans lequel chaque cellule fonctionne en mode lecture pour générer le syndrome partiel. The decoder of claim 1, wherein each cell operates in a read mode to generate the partial syndrome.
- 5Decodierer 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. Décodeur selon la revendication 4, dans lequel quand une cellule fonctionne en mode lecture, la logique d'entrée de la cellule est définie pour recevoir des entrées provenant du multiplicateur et une mémoire tampon de données qui contient les blocs de données et un ou plusieurs blocs de redondance. The decoder of claim 4, wherein when a cell operates in a read mode, the input logic of the cell is set to receive inputs from the multiplier and a data buffer that holds the data blocks and one or more redundancy blocks.
- 6Decodierer 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. Décodeur selon la revendication 5, dans lequel la logique d'entrée génère une somme des entrées provenant du multiplicateur et de la mémoire tampon de données, et dans lequel la somme est stockée dans la première file d'attente. The decoder of claim 5, wherein the input logic generates a sum of the inputs from the multiplier and the data buffer, and wherein the sum is stored in the first queue.
- 7Decodierer 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. Décodeur selon la revendication 6, dans lequel la logique d'entrée comprend une porte OU exclusif (XOR) avec des entrées reliées à la mémoire tampon de données et le multiplicateur et une sortie reliée à la première file d'attente pour générer la somme. The decoder of claim 6, wherein the input logic includes an exclusive-or (XOR) gate with inputs connected to the data buffer and the multiplier and an output connected to the first queue to generate the sum.
- 8Decodierer 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. Décodeur selon la revendication 6, dans lequel quand la cellule fonctionne en mode lecture, le multiplicateur est défini pour recevoir une racine d'un polynôme générateur et la somme à partir de la première file d'attente. The decoder of claim 6, wherein when the cell operates in the read mode, the multiplier is set to receive a root of a generator polynomial and the sum from the first queue.
- 9Decodierer 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. Décodeur selon la revendication 8, dans lequel le multiplicateur est un multiplicateur de champs de Galois qui exécute une multiplication des champs de Galois entre la racine d'un polynôme de générateur et la somme. The decoder of claim 8, wherein the multiplier is a Galois Field multiplier that performs a Galois Field multiplication between the root of a generator polynomial and the sum.
- 10Decodierer 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. Décodeur selon la revendication 9, dans lequel le multiplicateur comprend une pluralité de multiplicateurs de champs de Galois pour exécuter des multiplications de champs de Galois parallèles, multiples, entre la racine d'un polynôme de générateur et la somme. The decoder of claim 9, wherein the multiplier comprises a plurality of Galois Field multipliers to perform multiple, parallel Galois Field multiplications between the root of a generator polynomial and the sum.
- 11Decodierer 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. Décodeur selon la revendication 8, dans lequel chaque cellule dans la pluralité de cellules est définie pour recevoir une racine différente d'un polynôme générateur pour générer des syndromes partiels différents. The decoder of claim 8, wherein each cell in the plurality of cells is set to receive a different root of a generator polynomial to generate different partial syndromes.
- 12Decodierer gemäß Anspruch 8, bei dem die Wurzel eines Generatorpolynoms eine fest verdrahtete Konstante oder ein durch Firmware eingestelltes Register ist. Décodeur selon la revendication 8, dans lequel la racine d'un polynôme générateur est une constante câblée ou un registre défini par microprogramme. The decoder of claim 8, wherein the root of a generator polynomial is a hardwired constant or a register set by firmware.
- 13Decodierer gemäß Anspruch 8, ferner mit:einer zweiten Warteschlange, die die Wurzel eines Generatorpolynoms hält;undeinem 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. Décodeur selon la revendication 8, comprenant en outre : une deuxième file d'attente qui contient la racine d'un polynôme générateur ;etun multiplexeur ayant une entrée reliée à la deuxième file d'attente et une sortie reliée au multiplicateur, dans lequel le multiplexeur est relié à la deuxième file d'attente du multiplicateur quand la cellule fonctionne en mode lecture. The decoder of claim 8, further comprising: a second queue that holds the root of a generator polynomial;anda multiplexer having an input connected to the second queue and an output connected to the multiplier, wherein the multiplexer is set to connected the second queue to the multiplier when the cell operates in the read mode.
- 14Decodierer gemäß Anspruch 4, bei dem jede Zelle in einem Schreibmodus arbeitet, um den Teilfehlerwert zu erzeugen. Décodeur selon la revendication 4, dans lequel chaque cellule fonctionne en mode écriture pour générer la valeur d'erreur partielle. The decoder of claim 4, wherein each cell operates in a write mode to generate the partial error value.
- 15Decodierer 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. Décodeur selon la revendication 14, dans lequel quand une cellule fonctionne en mode écriture, la logique d'entrée de la cellule est définie pour recevoir des entrées provenant de la file d'attente qui contient le syndrome partiel généré par la cellule pendant le mode lecture. The decoder of claim 14, wherein when a cell operates in a write mode, the input logic of the cell is set to receive inputs from the queue that holds the partial syndrome generated by the cell during the read mode.
- 16Decodierer 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. Décodeur selon la revendication 15, dans lequel le multiplicateur est un multiplicateur de champs de Galois qui exécute une multiplication de champs de Galois entre le syndrome partiel et l'élément de la partie de l'inverse de la matrice de localisation d'erreurs. The decoder of claim 15, wherein the multiplier is a Galois Field multiplier that performs a Galois Field multiplication between the partial syndrome and the element of the portion of the inverse of the error location matrix.
- 17Decodierer 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. Décodeur selon la revendication 16, dans lequel le multiplicateur comprend une pluralité de multiplicateurs de champs de Galois pour exécuter des multiplications de champs de Galois multiples, parallèles, entre le syndrome partiel et l'élément de la partie de l'inverse de la matrice de localisation d'erreurs. The decoder of claim 16, wherein the multiplier comprises a plurality of Galois Field multipliers to perform multiple, parallel Galois Field multiplications between the partial syndrome and the element of the portion of the inverse of the error location matrix.
- 18Decodierer 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. Décodeur selon la revendication 14, dans lequel chaque cellule dans la pluralité de cellules est définie pour recevoir une partie différente de la matrice de localisation d'erreurs pour générer des valeurs d'erreur partielle différentes. The decoder of claim 14, wherein each cell in the plurality of cells is set to receive a different portion of the error location matrix to generate different partial error values.
- 19Decodierer gemäß Anspruch 14, ferner mit:einer dritten Warteschlange, die den Abschnitt der Fehlerpositionsmatrix hält;undeinem 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. Décodeur selon la revendication, 14, comprenant en outre : une troisième file d'attente qui contient la partie de la matrice de localisation d'erreurs ;etun multiplexeur ayant une entrée reliée à la troisième file d'attente et une sortie reliée au multiplicateur, dans lequel le multiplexeur est défini pour connecter la troisième file d'attente au multiplicateur quand la cellule fonctionne en mode écriture. The decoder of claim 14, further comprising: a third queue that holds the portion of the error location matrix;anda multiplexer having an input connected to the third queue and an output connected to the multiplier, wherein the multiplexer is set to connect the third queue to the multiplier when the cell operates in the write mode.
- 20Decodierer gemäß Anspruch 1, bei dem die Summationslogik ein Array von XOR-Gattern umfasst. Décodeur selon la revendication 1, dans lequel la logique de sommation comprend un réseau de portes OU exclusif. The decoder of claim 1, wherein the summation logic includes an array of XOR gates.
- 21Decodierer gemäß Anspruch 1, bei dem die Inverse der Fehlerpositionsmatrix durch Firmware oder Hardware erzeugt wird. Décodeur selon la revendication 1, dans lequel l'inverse de la matrice de localisation d'erreurs est généré par microprogramme ou matériel. The decoder of claim 1, wherein the inverse of the error location matrix is generated by firmware or hardware.
- 22A data storage device comprising the decoder of any one of claims 1 to 21 , wherein the data blocks and one or more redundancy blocks are retrieved from a storage medium and held in a data buffer in the data storage device. 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. Dispositif de stockage de données comprenant le décodeur de l'une quelconque des revendications 1 à 21, dans lequel les blocs de données et un ou plusieurs blocs de redondance sont récupérés d'un support de stockage et contenus dans une mémoire tampon de données dans le dispositif de stockage de données.
- 23A data storage device configured to correct errors in data retrieved from a storage medium, comprising:a data buffer configured to hold data blocks and one or more redundancy blocks retrieved from the storage medium;anda decoder, according to any one of claims 1 to 21, connected to the data buffer, the plurality of cells of the decoder configured to access the data blocks and one or more redundancy blocks held in the data buffer. 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;undeinem 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. Dispositif de stockage de données configuré pour corriger des erreurs dans des données récupérées provenant d'un support de stockage comprenant : une mémoire tampon de données configurée pour contenir des blocs de données et un ou plusieurs blocs de redondance récupérés du support de stockage ;etun décodeur, selon l'une quelconque des revendications 1 à 21, relié à la mémoire tampon de données, la pluralité des cellules du décodeur étant configurées pour accéder aux blocs de données et un ou plusieurs blocs de redondance contenus dans la mémoire tampon de données.
- 24A method of correcting errors in data, comprising:receiving data blocks and one or more redundancy blocks;generating an inverse of an error location matrix with locations of any received data blocks with errors;generating a plurality of partial syndromes in a plurality of cells of a decoder, wherein each one of the plurality of partial syndromes are generated in each one of the plurality of cells based on the received data blocks and one or more redundancy blocks;generating a plurality of partial error values in the plurality of cells, wherein each one of the plurality of partial error values are generated in each one of the plurality of cells based on a partial syndrome and a portion of the inverse of the error location matrix;andgenerating an error value based on the plurality of partial error values generated by the plurality of cells. Procédé de correction d'erreurs dans des données, comprenant : la réception de blocs de données et d'un ou plusieurs blocs de redondance ;la génération d'un inverse d'une matrice de localisation d'erreurs avec les emplacements de tout bloc de données reçu avec des erreurs ;la génération d'une pluralité de syndromes partiels dans une pluralité de cellules d'un décodeur, où chacun de la pluralité de syndromes partiels est généré dans chacune de la pluralité de cellules sur la base des blocs de données reçus et un ou plusieurs blocs de redondance ;la génération d'une pluralité de valeurs d'erreur partielle dans la pluralité de cellules, où chacune de la pluralité de valeurs d'erreur partielle est générée dans chacune de la pluralité de cellules sur la base d'un syndrome partiel et d'une partie de l'inverse de la matrice de localisation d'erreurs ;etla production d'une valeur d'erreur basée sur la pluralité de valeurs d'erreur partielle générées par la pluralité de cellules. 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;undErzeugen eines Fehlerwerts basierend auf der Mehrzahl von Teilfehlerwerten, die durch die Mehrzahl von Zellen erzeugt werden.
- 25Procédé selon la revendication 24, dans lequel les blocs de données reçus et un ou plusieurs blocs de redondance sont contenus dans une mémoire tampon de données, et dans lequel la production d'une pluralité de syndromes partiels comprend :dans chacune de la pluralité de cellules : a) la lecture de données à partir de la mémoire tampon de données ;b) la production d'une somme des données lues à partir de la mémoire tampon de données avec une sortie d'un multiplicateur ;c) la mise en mémoire de la somme ;d) la multiplication de la somme par une racine d'un polynôme générateur ;ete) la réitération des étapes a) à d) pour traiter tous les blocs de données et un ou plusieurs blocs de redondance contenus dans la mémoire tampon de données, où la somme est le syndrome partiel quand tous les blocs de données et un ou plusieurs blocs de redondance contenus dans la mémoire tampon de données ont été traités. The method of claim 24, wherein the received data blocks and one or more redundancy blocks are held in a data buffer, and wherein generating a plurality of partial syndromes comprises: in each of the plurality cells: a) reading data from the data buffer;b) generating a sum of the data read from the data buffer with an output from a multiplier;c) storing the sum;d) multiplying the sum with a root of a generator polynomial;ande) iterating steps a) to d) to process all the data blocks and one or more redundancy blocks held in the data buffer, wherein the sum is the partial syndrome when all the data blocks and one or more redundancy blocks held in the data buffer have been processed. 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;unde) 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.
- 26Procédé selon la revendication 25, dans lequel le nombre d'itérations des étapes a) à d) selon la revendication 25 est égal au nombre de blocs de données et de blocs de redondance contenus dans la mémoire tampon de données. The method of claim 25, wherein the number of iterations of steps a) to d) of claim 25 is equal to the number of data blocks and redundancy blocks held in the data buffer. 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.
- 27Procédé selon la revendication 25, dans lequel dans la réitération de l'étape a), quand les données doivent être lues à partir d'un bloc de données ayant des erreurs, il y a lecture de tous les zéros plutôt que des données à partir du bloc de données ayant des erreurs. The method of claim 25, wherein in iterating step a), when data is to be read from a data block having errors, reading all zeros rather than the data from the data block having errors. 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.
- 28Procédé selon la revendication 25, dans lequel la multiplication de la somme par une racine d'un polynôme générateur comprend :l'exécution de multiplications de champs de Galois parallèles, multiples, entre la racine d'un polynôme générateur et la somme en utilisant une pluralité de multiplicateurs de champs de Galois. The method of claim 25, wherein multiplying the sum with a root of a generator polynomial comprises: performing multiple, parallel Galois Field multiplications between the root of a generator polynomial and the sum using a plurality of Galois Field multipliers. 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.
- 29Procédé selon la revendication 25, dans lequel la génération d'une pluralité de valeurs d'erreur partielle comprend :après que les étapes a) à e) de la revendication 25 sont achevées, dans chacune de la pluralité de cellules : f) la multiplication du syndrome partiel par un élément de la partie de l'inverse de la matrice de localisation d'erreurs pour générer une valeur d'erreur partielle ;etg) l'envoi de la valeur d'erreur partielle à additionner avec les valeurs d'erreur partielle générées par chacune de la pluralité de cellules. The method of claim 25, wherein generating a plurality of partial error values comprises: after steps a) to e) of claim 25 are completed, in each of the plurality cells:f) multiplying the partial syndrome with an element of the portion of the inverse of the error location matrix to generate a partial error value;andg) sending the partial error value to be summed with the partial error values generated by each of the plurality of cells. 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;undg) Senden des Teilfehlerwerts, um mit den durch jede der Mehrzahl von Zellen erzeugten Teilfehlerwerten summiert zu werden.
- 30Procédé selon la revendication 29, comprenant en outre :h) la sommation des valeurs d'erreur partielle générées par chacune de la pluralité de cellules pour générer une valeur d'erreur ;eti) l'écriture de la valeur d'erreur dans la mémoire tampon de données pour corriger un bloc de données ayant des erreurs. The method of claim 29, further comprising: h) summing the partial error values generated by each of the plurality of cells to generate an error value;andi) writing the error value to the data buffer to correct a data block having errors. Verfahren gemäß Anspruch 29, ferner mit: h) Summieren der Teilfehlerwerte, die durch jede der Mehrzahl von Zellen erzeugt wurden, um einen Fehlerwert zu erzeugen;undi) Schreiben des Fehlerwerts in den Datenpuffer, um einen Datenblock mit Fehlern zu korrigieren.
- 31Procédé selon la revendication 30, comprenant en outre :j) la répétition des étapes f) et g) de la revendication 29 et des étapes h) et i) de la revendication 30 pour corriger un autre bloc de données ayant des erreurs. The method of claim 30, further comprising: j) repeating steps f) and g) of claim 29 and steps h) and i) of claim 30 to correct another data block having errors. 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.
- 32Procédé selon la revendication 31, dans lequel le nombre d'itérations des étapes f) à g) de la revendication 29 et des étapes h) et i) de la revendication 30 est égal au nombre de blocs de données ayant des erreurs. The method of claim 31, wherein the number of iterations of steps f) to g) of claim 29 and steps h) and i) of claim 30 is equal to the number of data blocks having errors. 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.
- 33Procédé selon la revendication 31, dans lequel le nombre d'itérations des étapes f) à g) de la revendication 29 et des étapes h) et i) de la revendication 30 est égal au nombre des blocs de redondance contenus dans la mémoire tampon de données. The method of claim 31, wherein the number of iterations of steps f) to g) of claim 29 and steps h) and i) of claim 30 is equal to the number of redundancy blocks held in the data buffer. 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.
- 34Procédé selon la revendication 31, dans lequel la somme est effacée et les étapes a) à e) de la revendication 25, les étapes f) et g) de la revendication 29, les étapes h) et i) de la revendication 30 et l'étape j) de la revendication 31 sont répétées pour traiter une autre partie des blocs de données et un ou plusieurs blocs de redondance contenus la mémoire tampon de données. The method of claim 31, wherein the sum is cleared and steps a) to e) of claim 25, steps f) and g) of claim 29, steps h) and i) of claim 30, and step j) of claim 31 are repeated to process another portion of the data blocks and one or more redundancy blocks held in the data buffer. 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.
- 35Procédé selon la revendication 29, dans lequel la multiplication du syndrome partiel par un élément de la partie de l'inverse de la matrice de localisation d'erreurs comprend :l'exécution de multiplications de champs de Galois parallèles, multiples, entre le syndrome partiel et l'élément de la partie de l'inverse de la matrice de localisation d'erreurs en utilisant une pluralité de multiplicateurs de champs de Galois. The method of claim 29, wherein multiplying the partial syndrome with an element of the portion of the inverse of the error location matrix comprises: performing multiple, parallel Galois Field multiplications between the partial syndrome and the element of the portion of the inverse of the error location matrix using a plurality of Galois Field multipliers. 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.
- 36Procédé selon la revendication 24, dans lequel la réception des blocs de données et d'un ou plusieurs blocs de redondance comprend la récupération de blocs de données et d'un ou plusieurs blocs de redondance à partir d'un support de stockage d'un dispositif de stockage de données. The method of claim 24, wherein receiving data blocks and one or more redundancy blocks comprises retrieving data blocks and one or more redundancy blocks from a storage medium of a data storage device. 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.
- 37Procédé selon la revendication 24, dans lequel l'inverse de la matrice de localisation d'erreurs est généré par microprogramme ou matériel. The method of claim 24, wherein the inverse of the error location matrix is generated by firmware or hardware. Verfahren gemäß Anspruch 24, bei dem die Inverse der Fehlerpositionsmatrix durch Firmware oder Hardware erzeugt wird.
Independent claims37
81 paragraphs in 4 sections, as filed
BACKGROUND
1. Field of the Invention
The present application generally relates to error correction of data using error correction codes (e.g., Bose-Chaudhuri-Hocquenghem (BCH), Reed Solomon codes, and the like), and more particularly to an error correction decoder using cells with partial syndrome generation.
2. Related Art
Error correction of data may be used in various applications, such as data storage devices, telecommunication systems, and the like. For example, in a data storage device, data is stored by writing the data to a storage medium in the storage device. The stored data can be later retrieved from the storage device by reading the data from the storage medium. However, for a number of reasons, an error may exist in the data retrieved from the storage device, meaning that the stored data cannot be retrieved or is different from the data originally stored on the storage medium. For example, a portion of the stored data on the storage medium may degenerate over time such that the portion of the stored data cannot be properly read at a later time.
Conventional error correction techniques include generating or encoding one or more redundancy blocks for data, which can be used in a decoding process to correct errors in the data. Typically the decoding process is performed using specialized hardware, which tends to be complicated and difficult to modify. The IEEE publication "Variable Shortened-and-Punctured Reed-Solomon Codes for Packet Loss Protection", Youshi Xu, Tingting Zhan, 03.09.2002, IEEE Transactions on Broadcasting, discloses a method of erasure-only decoding of Reed-Solomon codes using the steps of calculating a syndrome vector using a basic cell, inverting an "error location matrix" which is a Vandermonde Matrix and multiplying said matrix by said vector using n-k parallel cells.
SUMMARY
In one exemplary embodiment, a decoder to correct errors in data includes a plurality of cells. Each cell generates a partial syndrome based on data blocks and one or more redundancy blocks. Each cell generates a partial error value based on a portion of an inverse of an error location matrix that identifies locations of any data blocks having errors. A summation logic connected to the plurality of cells generates an error value based on the partial error values generated by the plurality of cells. The error value corrects errors in a data block having errors.
BRIEF DESCRIPTION OF THE FIGURES
Fig. 1 depicts an exemplary host terminal connected to an exemplary storage device;
Fig. 2 depicts an exemplary entity having a set of data blocks, redundancy blocks, and cyclic redundancy checking codes;
Fig. 3 depicts portions of the exemplary entity of Fig. 2;
Fig. 4 depicts an exemplary decoder;
Fig. 5 depicts an exemplary cell of the exemplary decoder depicted in Fig. 4;
Fig. 6 depicts an exemplary read process performed by the exemplary cell depicted in Fig. 5;
Fig. 7 depicts a portion of the exemplary cell depicted in Fig. 5;
Fig. 8 depicts an exemplary write process performed by the exemplary cell depicted in Fig. 5, and
Fig. 9 depicts another portion of the exemplary cell depicted in Fig. 5.
DETAILED DESCRIPTION
The following description sets forth numerous specific configurations, parameters, and the like. It should be recognized, however, that such description is not intended as a limitation on the scope of the present invention, but is instead provided to provide a better description of exemplary embodiments.
For the sake of example, error correction of data in a storage device is described below. It should be recognized, however, that error correction can be used in various applications, including telecommunications.
With reference to Fig. 1, a host terminal 102 is depicted connected to a storage device 104. Host computer 102 can be any type of computer, such as a personal computer, a workstation, a server, and the like. Storage device 104 can be any type of storage drive, such as a tape drive, a hard drive, and the like. It should be recognized that host terminal 102 can be connected to any number of storage devices 104, and any number of host terminals 102 can be connected to one or more storage devices 104.
With continued reference to Fig. 1, in one exemplary embodiment, storage device 104 is configured to detect and correct errors in data stored in storage device 104. More specifically, when data stored in storage device 104 is retrieved, storage device 104 is configured to use redundancy blocks, which are also referred to as error correction code (ECC) redundancy blocks, to correct errors in the retrieved data, such as if the retrieved data is different from the data that was originally stored in storage device 104 or if the stored data cannot be retrieved. Additionally, inner codes, such as cyclic redundancy checking (CRC) codes, can be used to detect errors in the retrieved data. However, it should be recognized that error correction codes, such as Reed-Solomon codes, can be used to detect as well as correct errors.
In the embodiment depicted in Fig. 1, storage device 104 includes a storage medium 106, a channel and read/write head 108, a processor 110, and an error detection/correction unit 112. In storage device 104, data is stored in storage medium 106. Read/write head 108 reads and/or writes data to storage medium 106. Processor 110 controls the operation of storage device 104, including the operation of channel and read/write head 108. As will be described in greater detail below, error detection/correction unit 112 detects and corrects errors in data stored in storage medium 106.
In the present exemplary embodiment, error detection/correction unit 112 includes a data buffer 114, a redundancy block encoder/decoder 116, and an inner code encoder/decoder 118. When data is to be stored on storage medium 106, data is received from host terminal 102 and written to data buffer 114. Redundancy block encoder/decoder 116 generates redundancy blocks for data in data buffer 114. Inner code encoder/decoder 118 generates inner codes (e.g., CRC codes, Reed-Solomon codes, and the like) for data in data buffer 114. Read/write head 108 then writes the data and the generated redundancy blocks and inner codes to storage medium 106.
When data is to be read from storage medium 106, read/write head 108 reads data, redundancy blocks, and inner codes from storage medium 106 to data buffer 114. As will be described in greater detail below, any errors in the data read from storage medium 106 are detected and corrected using the inner codes and redundancy blocks. The data may then be transferred to host terminal 102.
In the present exemplary embodiment, data is transferred between host terminal 102 and storage device 104 in data records, which are stored in a buffer. The data records are divided into data blocks of a predetermined length, such as two kBytes, four kBytes, six kBytes, and the like. It should be recognized, however, that data blocks of various lengths may be used.
After data blocks are retrieved from storage medium 106, retrieved data blocks having errors are detected, where an error in a retrieved data block indicates that the data in the retrieved data block cannot be read or is different than the data in the data block when the data block was originally stored in storage medium 106. For example, CRC codes can be used to detect when the data in the retrieved data block is different from the data in the data block when the data was originally stored in storage medium 106. More specifically, prior to storing a data block in storage medium 106, a CRC code is generated for the data block and stored with the data block in storage medium 106. When the data block is later retrieved, a new CRC code is generated for the retrieved data block. The new CRC code is then compared to the CRC code retrieved from storage medium 106, which corresponds to the retrieved data block and was originally generated for the retrieved data block before storing the retrieved data block in storage medium 106. If the new CRC code and the retrieved CRC code differ, then an error is detected for that data block. It should be recognized, however, that various types of error detection codes, including Reed-Solomon codes, may be used.
In the present exemplary embodiment, an error location matrix identifies the location of any data retrieved from the storage medium having errors. For example, an exemplary error location matrix can be expressed as: <maths id="math0001" num=""><math display="block"><mfenced open="[" close="]"><mtable><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>X</mi><mn>0</mn></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><msup><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msup><mn>0</mn></msub></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>X</mi><mn>1</mn></msub></mtd><mtd /><mtd><msub><msup><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msup><mn>1</mn></msub></mtd></mtr><mtr><mtd><mo>⋮</mo></mtd><mtd /><mtd><mo>⋱</mo></mtd><mtd><mo>⋮</mo></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><msup><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msup><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>,</mo></math><img file="EP1589665B1_D0001.tif" /></maths> where X is the location of an error and ρ is the total number of data blocks and redundancy blocks in error.
In the present exemplary embodiment, the inverse of the error location matrix is generated. For example, the inverse of the exemplary error location matrix in the above example can be expressed as follows: <maths id="math0002" num=""><math display="block"><mfenced open="[" close="]"><mtable><mtr><mtd><msub><mi>U</mi><mrow><mn>0</mn><mo>,</mo><mn>0</mn></mrow></msub></mtd><mtd><msub><mi>U</mi><mrow><mn>1</mn><mo>,</mo><mn>0</mn></mrow></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><mi>U</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn><mo>,</mo><mn>0</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>U</mi><mrow><mn>0</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>U</mi><mrow><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd /><mtd><msub><mi>U</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>⋮</mo></mtd><mtd /><mtd><mo>⋱</mo></mtd><mtd><mo>⋮</mo></mtd></mtr><mtr><mtd><msub><mi>U</mi><mrow><mn>0</mn><mo>,</mo><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>U</mi><mrow><mn>1</mn><mo>,</mo><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><mi>U</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn><mo>,</mo><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>.</mo></math><img file="EP1589665B1_D0002.tif" /></maths> Note that the error location matrix is a Vandermonde matrix, which in general requires O(ρ<sup>2</sup>) operations to compute the inverse, in comparison to general matrix inversions, which requires O(ρ<sup>3</sup>) operations. A row in a Vandermonde matrix consists of a constant value raised to incrementing powers, starting at zero. The inverse of the error location matrix can by generated by firmware or hardware using various matrix inversion techniques.
In the present exemplary embodiment, redundancy blocks are used to correct errors in the retrieved data blocks. More specifically, prior to storing data blocks in storage medium 106, redundancy blocks are generated based on the data blocks, and stored with the data blocks in storage medium 106. When the data blocks are later retrieved, data blocks identified as having errors are corrected using the redundancy blocks.
In the present exemplary embodiment, redundancy blocks are Bose-Chaudhuri-Hocquenghem (BCH) codes, and more particularly Reed-Soloman codes. For a more detailed description of Reed-Solomon codes, see Peterson & Weldon, Error Correcting Codes, 2d Edition, MIT Press, 1972, which is incorporated in its entirety herein by reference. It should be recognized, however, that various types of error correction codes may be used.
In the present exemplary embodiment, a set of data blocks, a set of redundancy blocks, and a set of redundancy symbols of an inner code are read and written together as a group referred to as an "entity." For example, with reference to Fig. 2, an entity 202 is depicted having 16 data blocks 204, four redundancy blocks 206, and 20 redundancy symbols of an inner code 208. It should be recognized, however, that entity 202 can include various numbers of data blocks 204, redundancy blocks 206, and redundancy symbols of an inner code 208. For example, entity 202 can include 32 data blocks 204 and eight redundancy blocks 206, 112 data blocks 204 and 16 redundancy blocks 206, and the like. Additionally, redundancy symbols of an inner code 208 can both detect and correct error within a data block 204 or redundancy block 206.
Fig. 2 depicts the form in which entity 202 can be stored in data buffer 114 (Fig. 1). It should be recognized, however that entity 202 need not exist physically in the form depicted in Fig. 2. It should also be recognized that data in entity 202, and more particularly the data in a data block 204, need not correspond to a single file. Instead, in the present exemplary embodiment, data received from host terminal 102 (Fig. 1) is interleaved. As such, the data in a particular data block 204 can correspond to portions of separate files received from host terminal 102 (Fig. 1).
Fig. 2 also depicts logical relationships between data blocks 204, redundancy blocks 206, and redundancy symbols of an inner code 208 of entity 202. With reference to Fig. 3, portions of entity 202 are shown in greater detail to more clearly illustrate the logical relationships between data blocks 204, redundancy blocks 206, and redundancy symbols of an inner code 208.
In Fig. 3, redundancy symbols of an inner code 208 are depicted as being CRC codes. It should be recognized, however, that various types of error detection or error correction codes can be used, such as Reed-Solomon codes.
In the present exemplary embodiment, redundancy symbols of an inner code 208 corresponds to a data block 204 or redundancy block 206 and is used to detect an error in data block 204 or redundancy block 206. For example, CRC code CRC<sub>19</sub> corresponds to data block D<sub>19</sub> of entity 202. Thus, to detect an error in data block D<sub>19</sub>, after retrieving data block D<sub>19</sub> from storage medium 106 (Fig. 1), a new CRC code CRC<sub>19</sub>' is generated for retrieved data block D<sub>19</sub>. The new CRC code CRC<sub>19</sub>' is then compared to the CRC code retrieved from storage medium 106 (Fig. 1) corresponding to retrieved data block D<sub>19</sub> (i.e., CRC code CRC<sub>19</sub>). If the new CRC code CRC<sub>19</sub><sup>,</sup> and the retrieved CRC code CRC<sub>19</sub> differ, then an error is detected for data block D<sub>19</sub>.
In the present exemplary embodiment, the number of redundancy blocks determines the maximum number of data blocks that can be corrected. Thus, in the example depicted in Fig. 2, a total of four redundancy blocks 206 may be used to correct a maximum of four data blocks 204 in error.
In the present exemplary embodiment, each redundancy block 204 is generated based on the data in all of the data blocks of entity 202. For example, redundancy blocks E<sub>0</sub>, E<sub>1</sub>, E<sub>2</sub>, and E<sub>3</sub> are each generated based on the data in data blocks D<sub>4</sub>, D<sub>2</sub>, ..., and D<sub>19</sub>. As described above, with reference to Fig. 1, redundancy blocks can be generated by redundancy block encoder/decoder 116. As also described above, redundancy blocks are initially generated for data received from host terminal 102. The generated redundancy blocks and the received data are then stored in storage medium 106.
With reference again to Fig. 3, although redundancy blocks E<sub>0</sub>, E<sub>1</sub>, E<sub>2</sub>, and E<sub>3</sub> are generated based on the same set of data (i.e., data blocks 204 of entity 202), each redundancy block 206 is unique as to each other. More specifically, in the present embodiment, redundancy blocks E<sub>0</sub>, E<sub>1</sub>, E<sub>2</sub>, and E<sub>3</sub> are Bose-Chaudhuri-Hocquenghem (BCH) codes, and more particularly Reed-Solomon codes.
With reference to Fig. 1, in the present exemplary embodiment, redundancy block encoder/decoder 116 operates as an encoder to generate redundancy blocks to be stored with data blocks in storage medium 106. Redundancy block encoder/decoder 116 operates as a decoder to correct errors in data blocks retrieved from storage medium 106. It should be recognized, however, that redundancy block encoder/decoder 116 can be implemented as separate components (i.e., an encoder component and a decoder component) in storage device 104.
With reference now to Fig. 4, an exemplary decoder 400 to correct errors in data blocks retrieved from a storage medium is depicted. As noted above, decoder 400 can be implemented as an integrated part of redundancy block encoder/decoder 116 (Fig. 1) or as a separate component within storage device 104 (Fig. 1).
As depicted in Fig. 4, decoder 400 includes a plurality of cells 402 and a summation logic 404 connected to the plurality of cells 402. Each cell 402 generates a partial syndrome based on the data blocks and redundancy blocks retrieved from the storage medium. Each cell 402 also generates a partial error value based on a portion of the inverse of an error location matrix that identifies the locations of any data blocks retrieved from the storage medium having errors. As described above, the inverse of the error location matrix can be generated by firmware or hardware. Summation logic 404 generates an error value, which corrects errors in a data block retrieved from the storage medium, based on the partial error values generated by plurality of cells 402.
With reference to Fig. 1, as described above, data blocks and redundancy blocks retrieved from storage medium 106 are held in data buffer 114. More particularly, with reference to Fig. 2, in one exemplary embodiment, data blocks 204 and redundancy blocks 206 can be stored in data buffer 114 (Fig. 1) in the form of entity 202.
With reference again to Fig. 4, in the present exemplary embodiment, plurality of cells 402 are connected to data buffer 114 (Fig. 1) through lines 406. Each cell 402 receives as an input a portion of entity 202 (Fig. 2) stored in data buffer 114 (Fig. 1). More particularly, each cell 402 reads in portions of entity 202 (Fig. 2) in cache bursts.
With reference to Fig. 2, in the present exemplary embodiment, each cache burst is a portion of a single data block 204 or redundancy block 206. Additionally, in the present exemplary embodiment, portions of data blocks 204 and redundancy blocks 206 are read in a raster pattern.
For example, assume that each cache burst is 32 bytes long. The first 32 bytes of the first data block 204 is read in a first cache burst. The first 32 bytes of each of the next 15 data blocks 204 and four redundancy blocks 206 of entity 202 are then read in 19 subsequent cache bursts. After the first 32 bytes of the last redundancy block 206 is read, the second subsequent 32 bytes of the first data block 204 is read, and then the second subsequent 32 bytes of each of the next 15 data blocks 204 and four redundancy blocks 206 of entity 202 are read. In this manner, data blocks 204 and redundancy blocks 206 of entity 202 are read in cache bursts in a raster pattern in 32 byte portions. It should be recognized, however, that the size of the cache burst can vary, and data blocks 204 and redundancy blocks 206 can be read in various patterns. For example, each cache burst can be 64 bytes rather than 32 bytes.
In the present exemplary embodiment, a portion of each data block 204 and redundancy block 206 in entity 202 can be logically grouped as a code word 210. For example, the first portions of each data block 204 and redundancy block 206 can be logically grouped as a first code word 210, which corresponds to the first column in Fig. 2. The second byte of each data block 204 and redundancy block 206 can be logically grouped as a second code word 210, which corresponds to the second column in Fig. 2.
In the present exemplary embodiment, code word 210 is one byte wide. Thus, if data blocks 204 and redundancy blocks 206 are 2 kBytes long, then data blocks 204 and redundancy blocks 206 in entity 202 can be logically grouped into 2,000 separate, individual code words 210. Additionally, if data blocks 204 and redundancy blocks 206 are read using a cache burst of 32 bytes, which corresponds to 16 long words of 32 bits each, then portions of 32 code words 210 are read at a time.
With reference again to Fig. 4, in the present exemplary embodiment, the number of cells 402 in decoder 400 corresponds to the number of redundancy blocks 206 (Fig. 2) in entity 202, which in turn corresponds to the maximum number of data blocks 204 that can be corrected. Thus, decoder 400 can be modified based on the maximum number of data blocks 204 to be corrected. For example, when a maximum of four data blocks 204 are to be corrected, decoder 400 is modified to include four cells 402. Similarly, when a maximum of 16 or 32 data blocks 204 are to be corrected, decoder 400 is modified to include 16 or 32 cells 402.
With reference now to Fig. 5, an exemplary cell 402 is depicted. In the present exemplary embodiment, each cell 402 includes an input logic 502, a queue 504, a multiplier 506, a multiplexer 508, and queues 510 and 512.
As described above, each cell 402 generates a partial syndrome based on data blocks and one or more redundancy blocks retrieved from the storage medium. With reference to Fig. 6, an exemplary read process 600 of generating a partial syndrome in cell 400 (Fig. 4) is depicted.
In 602, cell 402 (Fig. 4) is set to a read mode. With reference to Fig. 5, in the present exemplary embodiment, input logic 502 is set to receive inputs from line 406, which is connected to data buffer 114 (Fig. 1), and feedback line 514, which is connected to the output of multiplier 506. More particularly, with reference to Fig. 7, multiplexer 702 is set to receive input from an XOR gate 704 connected to line 406 and feedback line 514. With reference to Fig. 5, multiplier 506 is set to receive inputs from queue 504, which holds intermediate results generated by input logic 502, and queue 510, which holds a root of a generator polynomial. More particularly, multiplexer 508 with inputs connected to queues 510 and 512 is set to receive input from queue 510.
With reference to Fig. 6, in 604, cell 402 (Fig. 4) reads data from data buffer 114 (Fig. 1). In the present exemplary embodiment, cell 402 (Fig. 4) reads in a portion of a data block or a redundancy block from entity 202 (Fig. 2) stored in data buffer 114 (Fig. 1) as a cache burst.
For example, data can be read from data buffer 114 (Fig. 1) in a cache burst of 32 bytes, which corresponds to 16 long words. With reference to Fig. 5, line 406 and feedback line 514 are 32 bits wide, which allows cell 402 to process 32 bits (one long word) at a time. It should be recognized, however, that lines 406 and feedback line 514 can be any size, and cell 402 can process any number of bits at a time.
In 606, the data read from data buffer 114 (Fig. 1) is summed with the output from multiplier 506 (Fig. 5). With reference to Fig. 5, in the present exemplary embodiment, input logic 502 performs an exclusive-OR (XOR) operation on a cache burst read from entity 202 (Fig. 2) through line 406 and the output of multiplier 506 through feedback line 514. As described above, with reference to Fig. 7, input logic 502 includes XOR gate 704, which can perform the XOR operation. It should be recognized, however, that input logic 502 can include various components, including various types and numbers of logic gates, to sum the data read from data buffer 114 (Fig. 1) with the output from multipliers 504 (Fig. 5).
With reference to Fig. 6, in 608, the sum of the data read from data buffer 114 (Fig. 1) and the output from multiplier 506 (Fig. 5) is stored as an intermediate result. With reference to Fig. 5, in the present exemplary embodiment, the intermediate result generated by input logic 502 is stored in queue 504.
In the present exemplary embodiment, the size and number of entries in queue 504 is determined based on the size of the cache burst used to read data from data buffer 114 (Fig. 1) and the size of line 406 and feedback line 514. For example, if data is read from data buffer 114 (Fig. 1) in a cache burst of 32 bytes, which corresponds to 16 long words, and line 516 and feedback line 514 are 32 bits wide, then each long word in the cache burst is summed with the output from multiplier 506 and stored as an entry in queue 504. Thus, in this example, queue 504 includes eight entries with each entry 32 bits long. If the size of the cache burst is changed, then the size of queue 504 can also be changed. For example, if the cache burst is 64 bytes long, then queue 504 can include 16 entries with each entry 32 bits long.
With reference to Fig. 6, in 610, the intermediate result is multiplied with a root of a generator polynomial. With reference to Fig. 5, in the present exemplary embodiment, multiplier 506 is a Galois Field Multiplier that performs a Galois Field multiplication between the intermediate result stored in queue 504 and a root of a generator polynomial stored in queue 510.
In the present exemplary embodiment, multiplier 506 performs multiple, parallel Galois Field multiplications. For example, if each entry of queue 504 is 32 bits long, the 32 bits of data from an entry of queue 504 can be formatted as four parallel eight bit Galois Field elements. Multiplier 506 can then perform four parallel eight-by-eight Galois Field multiplications between the 32 bit long entry from queue 504 and an eight bit root of a generator polynomial from queue 510.
With reference to Fig. 6, in 612, if all of the data blocks and redundancy blocks of entity 202 (Fig. 2) have not been processed, loop 604 to 612 is iterated to process the next data block or redundancy block. In the present exemplary embodiment, if the next data block to be processed was determined to have errors, then in 604 all zeros are read rather than reading a cache burst from data buffer 114 (Fig. 1). If all of the data blocks and redundancy blocks have been processed, read process 600 terminates at 614.
In the present exemplary embodiment, the number of iterations of loop 604 to 612 corresponds to the number of data blocks and redundancy blocks in entity 202 (Fig. 2). For example, with reference to Fig. 3, assume that portions of entity 202 are read in cache bursts of 32 bytes in length. In a first iteration of loop 604 to 612 (Fig. 6), a first cache burst containing the first 32 bytes of data block D<sub>19</sub> is read and processed. In a second iteration of loop 604 to 612 (Fig. 6), a second cache burst containing the first 32 bytes of data block D<sub>18</sub> is read and processed. Assume that data block D<sub>4</sub> was identified as having errors. Thus, in a 16<sup>th</sup> iteration of loop 604 to 612 (Fig. 6), all zeros are read and processed rather than reading in a cache burst from data block D<sub>4</sub>. In this example, loop 604 to 612 (Fig. 6) is iterated 20 times to process all 16 data blocks and four redundancy blocks.
With reference to Fig. 5, note that in the first iteration of loop 604 to 612 (Fig. 6), the result of the sum of the first cache burst and the output of the multiplier 506 is the data read in the first cache burst because queue 504 is empty and the output of multiplier 506 is zero. In the second iteration, queue 504 holds the data read in the first cache burst, and the output of multiplier 506 is the data read in the first cache burst multiplied by a root of a generator polynomial. Thus, the result of the sum of the second cache burst and the output of the multiplier 506 is the sum of the data read in the second cache burst and the result of multiplying the data read in the first cache burst by a root of a generator polynomial. This result is then stored in queue 504 as the new intermediate result. When read process 600 is terminated in 614 (Fig. 6) after all of the data blocks and redundancy blocks have been processed, the final result stored in queue 504 of each cell 402 is the partial syndrome for each cell 402.
With reference again to Fig. 4, in the present exemplary embodiment, each cell 402 uses a different root of a generator polynomial. Thus, different partial syndromes are generated in each of the plurality of cells 402.
More particularly, each cell 402 uses a root of a generator polynomial of α<sup><i>n</i></sup>, where <i>n</i> is the sequence number of the cell. For example, if there are ρ cells 402, then cells 402 can be assigned sequence numbers from zero to (ρ-1) (i.e., cell 402(0), cell 402(1), cell 402(2), ..., cell 402 (ρ-1)). In this example, cell 402(0) uses α<sup><i>0</i></sup>, cell 402(1) uses α<sup><i>1</i></sup>, cell 402(2) uses α<sup><i>2</i></sup>, ..., and cell 402(ρ-1) uses α<sup>(<i>ρ-1</i>)</sup>. The root of a generator polynomial can be a hardwired constant, or a register set by firmware.
While the root of a generator polynomial of the plurality of cells 402 need to be sequential, the sequence can start at any number. For example, each cell 402 can use a root of a generator polynomial of α<sup><i>n</i>+<i>1</i></sup>, where <i>n</i> is the sequence number of the cell and / is a fixed constant for each cell 402.
Because each cell 402 uses a different root of a generator polynomial, after process 600 (Fig. 6) is terminated, when all of the data blocks and redundancy blocks in entity 202 (Fig. 2) have been processed, different partial syndromes have been generated by each cell 402 and stored in the queues 504 of cells 402. For example, if there are ρ cells 402 and cells 402 are assigned sequence numbers from zero to (ρ-1) (i.e., cell 402(0), cell 402(1), cell 402(2), ..., cell 402 (ρ-1)), cell 402(0) generates partial syndrome S<sub>0</sub>, cell 402(1) generates partial syndrome S<sub>1</sub>, ..., and cell 402(ρ-1) generates partial syndrome S<sub>(ρ-1)</sub>.
After read process 600 (Fig. 6) has been terminated, each cell 402 generates a partial error value based on the generated partial syndrome and a portion of the inverse of the error location matrix. With reference to Fig. 8, an exemplary write process 800 of generating a partial error value in cell 402 (Fig. 4) is depicted.
In 802, cell 402 (Fig. 4) is set to a write mode. With reference to Fig. 5, in the present exemplary embodiment, input logic 502 is set to receive inputs from feedback line 516, which is connected to queue 504, which holds the partial syndrome generated in cell 400 during the previous read process. More particularly, with reference to Fig. 7, multiplexer 702 is set to receive input from feedback line 516. With reference to Fig. 5, multiplier 506 is set to receive inputs from queue 504 and queue 512, which holds a portion of the inverse of the error location matrix. More particularly, multiplexer 508 with inputs connected to queues 510 and 512 is set to receive input from queue 512.
As described above, an error location matrix identifies the locations of any data blocks retrieved from the storage medium having errors. For example, an exemplary error location matrix can be expressed as: <maths id="math0003" num=""><math display="block"><mfenced open="[" close="]"><mtable><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>X</mi><mn>0</mn></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><msup><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msup><mn>0</mn></msub></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>X</mi><mn>1</mn></msub></mtd><mtd /><mtd><msub><msup><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msup><mn>1</mn></msub></mtd></mtr><mtr><mtd><mo>⋮</mo></mtd><mtd /><mtd><mo>⋱</mo></mtd><mtd><mo>⋮</mo></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><msub><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><msup><mi>X</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msup><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>,</mo></math><img file="EP1589665B1_D0003.tif" /></maths> where X is the location of an error and ρ is the total number of data blocks and redundancy blocks in error. The inverse of the error location matrix can be expressed as follows: <maths id="math0004" num=""><math display="block"><mfenced open="[" close="]"><mtable><mtr><mtd><msub><mi>U</mi><mrow><mn>0</mn><mo>,</mo><mn>0</mn></mrow></msub></mtd><mtd><msub><mi>U</mi><mrow><mn>1</mn><mo>,</mo><mn>0</mn></mrow></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><mi>U</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn><mo>,</mo><mn>0</mn></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>U</mi><mrow><mn>0</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>U</mi><mrow><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd /><mtd><msub><mi>U</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><mo>⋮</mo></mtd><mtd /><mtd><mo>⋱</mo></mtd><mtd><mo>⋮</mo></mtd></mtr><mtr><mtd><msub><mi>U</mi><mrow><mn>0</mn><mo>,</mo><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>U</mi><mrow><mn>1</mn><mo>,</mo><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd><mtd><mo>…</mo></mtd><mtd><msub><mi>U</mi><mrow><mi>ρ</mi><mo>−</mo><mn>1</mn><mo>,</mo><mi>ρ</mi><mo>−</mo><mn>1</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>.</mo></math><img file="EP1589665B1_D0004.tif" /></maths> As also described above, in the present exemplary embodiment, the inverse of the error location matrix can be generated by firmware or hardware.
In the present exemplary embodiment, each cell 402 uses a different portion of the inverse of the error location matrix. For example, with reference to Fig. 4, if there ρ cells 402 assigned sequence numbers from zero to (ρ-1) (i.e., cell 402(0), cell 402(1), cell 402(2), ..., cell 402 (ρ-1)), cell 402(0) uses the first row of the inverse of the error location matrix (i.e., U<sub>0,0</sub>, U<sub>1,0</sub>, ..., U<sub>ρ-<i>1</i>,0</sub>), cell 402(1) uses the second row of the inverse of the error location matrix (i.e., U<sub>0,1</sub>, U<sub>1,1</sub>, ..., U<sub>ρ-<i>1</i>,1</sub>), ..., and cell 402(ρ-1) uses the (ρ-1) row of the inverse of the error location matrix (i.e., U<sub>0,ρ-<i>1</i></sub>, U<sub>1,ρ-<i>1</i></sub>, ..., U<sub>ρ-<i>1,ρ-1</i></sub>).
With reference to Fig. 5, in 804 (Fig. 8), multiplier 506 generates a partial error value by multiplying the partial syndrome, which is held in queue 504, with an element of the portion of the inverse of the error location matrix, which is held in queue 512. For example, with reference to Fig. 4, assume again that there are ρ cells 402 assigned sequence numbers from zero to (ρ-1) (i.e., cell 402(0), cell 402(1), cell 402(2), ..., cell 402 (ρ-1)). In cell 402(0), a first partial error value y<sub>0</sub>(0) can be generated by multiplying partial syndrome S<sub>0</sub> with the first element from the first row of the inverse of the error location matrix U<sub>0,0</sub>. In cell 402(1), a second partial error value y<sub>0</sub>(1) can be generated by multiplying partial syndrome S<sub>1</sub> with the first element from the second row of the inverse of the error location matrix U<sub>0,1</sub>. In cell 402(ρ-1), a (ρ-1) partial error value y<sub>0</sub>(ρ-1) can be generated by multiplying partial syndrome S<sub>(ρ-1)</sub> with the first element from the (<i>ρ-1</i>) row of the inverse of the error location matrix U<sub>0,ρ-1</sub>.
With reference to Fig. 8, in 806, the partial error value generated by cell 402 (Fig. 4) is sent to summation logic 404 (Fig. 4). With reference to Fig. 4, in the example described above, the partial error values y<sub>0</sub>(0), y<sub>0</sub>(1), ..., and y<sub>0</sub>(ρ-1) generated by cells 402(0), 402(1), ..., and 402(ρ-1) are sent to summation logic 404.
To generate an error value, summation logic 404 sums the partial error values generated by cells 402. In the example described above, a first error value Y<sub>0</sub> is generated by summing the partial error values y<sub>0</sub>(0), y<sub>0</sub>(1), ..., and y<sub>0</sub>(<i>ρ</i>-1) generated by cells 402(0), 402(1), ..., and 402(ρ-1).
With reference to Fig. 9, in the present exemplary embodiment, summation logic 404 can include an array of XOR gates 902 that computes the Galois Field sum of the outputs of cells 402 (Fig. 4). It should be recognized, however, that summation logic 404 can include various components, including various types and numbers of logic components, to compute the Galois Field sum of the outputs of cells 402 (Fig. 4).
The generated error value can then be written to data buffer 114 (Fig. 1) to correct the data in the location corresponding to the elements of a portion of the inverse of the error location matrix used to generate the partial error values in cells 402. With reference to Fig. 4, in the example described above, partial error values y<sub>0</sub>(0), y<sub>0</sub>(1), ..., and y<sub>0</sub>(ρ-1) are generated in cells 402(0), 402(1), ..., and 402(ρ-1) using elements U<sub>0,0</sub>, U<sub>0,1</sub>, ..., and U<sub>0,ρ-1</sub>, of a portion of the inverse of the error location matrix. With reference to Fig. 3, assume for the sake of example that these elements correspond to a portion of data block D<sub>4</sub>. Error value Y<sub>0</sub> can then be written to data buffer 114 (Fig. 1) to correct the portion of data block D<sub>4</sub>.
With reference to Fig. 4, when the size of the cache burst is greater than the amount of data processed at a time by cell 402, during write process 800 (Fig. 8), cell 402 cycles through the cache burst to process the entire cache burst. For example, as described above, cells 402 can receive data from data buffer 114 (Fig. 1) in a cache burst of 32 bytes and process one long word of the cache burst at a time. As also described above, queue 504 (Fig. 5) can include eight entries that are each 32 bits (one long word) in length. Thus, in the example above of using element U<sub>0,0</sub> to generate partial error value y<sub>0</sub>(0) in cell 402(0), multiplier 506 in cell 402(0) multiplies each entry in queue 504 (Fig. 5) with element U<sub>0,0</sub> to produce eight sets of partial error value y<sub>0</sub>(0). Similarly, eight sets of partial error values y<sub>0</sub>(1), ..., and y<sub>0</sub>(ρ-1) are generated in cells 402(1),..., and 402(<i>ρ</i>-1) using elements U<sub>0,1</sub>, ..., and U<sub>0,ρ-1</sub>.
Summation logic 404 also generates eight sets of error values Y<sub>0</sub>, which are then written as a cache burst back to data buffer 114 (Fig. 1). For example, with reference to Fig. 3, assume elements U<sub>0,0</sub>, U<sub>0,1</sub>, ..., and U<sub>0,ρ-1</sub> correspond to the first 32 bytes of data block D<sub>4</sub>, which corresponds to the first 32 code words of data block D<sub>4</sub>, the eights sets of error values Y<sub>0</sub> are written to the correct the first 32 bytes of data block D<sub>4</sub>.
With reference to Fig. 5, write process 800 (Fig. 8) can then be iterated to generate another set of partial error values, which can be summed to generate another error value, which can then be used to correct a portion of another data block with errors. For example, in a second iteration, a second set of partial error values are generated and summed to generate a second error value.
More particularly, with reference to Fig. 4, in the second iteration of 804 (Fig. 8), in cell 402(0), a first partial error value y<sub>1</sub>(0) can be generated by multiplying partial syndrome S<sub>0</sub> with the second element from the first row of the inverse of the error location matrix U<sub>1,0</sub>. In cell 402(1), a second partial error value y<sub>1</sub> (1) can be generated by multiplying partial syndrome S<sub>1</sub> with the second element from the second row of the inverse of the error location matrix U<sub>1,1</sub>. In cell 402(ρ-1), a (ρ-1) partial error value y<sub>0</sub>(ρ-1) can be generated by multiplying partial syndrome S<sub>(ρ-1)</sub> with the second element from the (ρ-1) row of the inverse of the error location matrix U<sub>1,ρ-1</sub>
In the second iteration of 806 (Fig. 8), the second set of partial error values y<sub>1</sub>(0), y<sub>1</sub>(1), ..., and y<sub>1</sub>(ρ-1) generated by cells 402(0), 402(1), ..., and 402(ρ-1) are sent to summation logic 404. A second error value Y<sub>1</sub> is then generated by summing the partial error values y<sub>1</sub>(0), y<sub>1</sub>(1), ..., and y<sub>1</sub>(ρ-1).
By iterating write process 800 (Fig. 8) and summing the generated sets of partial error values, error values can be generated to correct portions the data blocks identified as having error. The number of times write process 800 (Fig. 8) is iterated and the number of error values generated can be determined based on the number of data blocks identified as having errors (i.e., ρ). Alternatively, the number of times write process 800 (Fig. 8) is iterated and the number of error values generated can be set to the maximum number of data blocks that can be corrected, which corresponds to the number of redundancy blocks in entity 202 (Fig. 2).
After write process 800 (Fig. 8) has been completed, read process 600 (Fig. 6) can be iterated again to process another portion of the data blocks and redundancy blocks stored in data buffer 114 (Fig. 1), and then write process 800 (Fig. 8) can be iterated again to correct errors in another portion of the data blocks having errors. In the present exemplary embodiment, before iterating read process 600 (Fig. 6) again, queue 504 (Fig. 5) is cleared.
For example, with reference to Fig. 3, assume that portions of entity 202 are read in cache burst of 32 bytes in length. Read process 600 (Fig. 6) is iterated to read and process the first 32 bytes of each data block 204 and each redundancy block 206 to generate partial syndromes. Write process 800 (Fig. 8) is then iterated to generate error values and correct errors in the first 32 bytes of any data blocks 204 having errors. Queue 504 (Fig. 5) is cleared, then read process 600 (Fig. 6) is iterated again to read and process the second 32 bytes of each data block 204 and each redundancy block 206 to generate another set of partial syndromes. Write process 800 (Fig. 8) is then iterated again to generate error values and correct errors in the second 32 byte of any data blocks 204 having errors. In this manner, all the portions of each data block 204 and redundancy block 206 are read and processed using read process 600 (Fig. 6), and all the portions of any data block having errors is corrected using write process 800 (Fig. 8).
Although exemplary embodiments have been described, various modifications can be made without departing from the spirit and/or scope of the present invention. For example, with reference to Fig. 4, although decoder 4 has been described in connection with a storage device, ft should be recognized that decoder 4 can be used in connection with various devices and in various applications where data is received through a channel that introduces error, such as part of a telecommunication system. Therefore, the present invention should not be construed as being limited to the specific forms shown in the drawings and described above.
Contents4
10 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10
5 priority claims, no other members on record
Priority claims5
| Document | Office | Kind | Date |
|---|---|---|---|
| 782990 | United States of America | – | |
| 78299004 | United States of America | A | |
| 78299004 | United States of America | A | |
| 782990 | – | – | – |
| US20040782990 | – | – | – |
17 legal events, as 2 offices reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | Office | |
|---|---|---|---|
| Lapsed in a contracting state [announced via postgrant information from national office to epo]LapsedPG25 | PG25 | EP | |
| Gb: european patent ceased through non-payment of renewal feeCeasedGBPC | GBPC | EP | |
| Lapsed in a contracting state [announced via postgrant information from national office to epo]LapsedPG25 | PG25 | EP | |
| No opposition filedOpposition26N | 26N | EP | |
| No opposition filed within time limitOppositionORIGINAL CODE: 0009261PLBE | PLBE | EP | |
| Information on the status of an ep patent application or granted ep patentGrantedSTATUS: NO OPPOSITION FILED WITHIN TIME LIMITSTAA | STAA | EP | |
| Corresponds to:REF | REF | EP | |
| Designated contracting statesAK | AK | EP | |
| European patent grantedGrantedFG4D | FG4D | GB | |
| (expected) grantORIGINAL CODE: 0009210GRAA | GRAA | EP | |
| Grant fee paidORIGINAL CODE: EPIDOSNIGR3GRAS | GRAS | EP | |
| Designation fees paidAKX | AKX | EP | |
| Request for examination filed17P | 17P | EP | |
| Despatch of communication of intention to grant a patentORIGINAL CODE: EPIDOSNIGR1GRAP | GRAP | EP | |
| Designated contracting statesAK | AK | EP | |
| Request for extension of the european patentAX | AX | EP | |
| Public reference made under article 153(3) epc to a published international application that has entered the european phaseORIGINAL CODE: 0009012PUAI | PUAI | EP |
Numbers
- Publication
- 1589665
- Publication, DOCDB
- 1589665
- Publication, EPODOC
- EP1589665
- Application
- 5250926
- Application, DOCDB
- 05250926
- Application, EPODOC
- EP20050250926
Titles3
- German
- Dekoder zur Fehlerkorrektur mit einem Reed-Solomon Dekoder zur Erasure-Korrektur und einem CRC Dekoder
- English
- Error correction decoder comprising an erasure correcting Reed-Solomon decoder and a CRC decoder
- French
- Décodeur à correction d'erreurs comprenant un décodeur de Reed-Solomon à décodage d'effacements et un décodeur CRC
Classification
- CPC, 6
- H03M13/616
- H03M13/1515
- H03M13/29
- H03M13/2915
- H03M13/373
- H03M13/6561
- IPC, 5
- H03M13 15
- H03M13 29
- G06F11 10
- G06F12 16
- G11B20 18
Designated states2
- Contracting states, 2
- Germany
- United Kingdom
