-
Diese Anmeldung beansprucht den Vorzug der am 25. Juni 2019 beim Patent- und Markenamt der Vereinigten Staaten eingereichten US-Patentanmeldung Nummer
16/452240 , deren Offenbarung hierin in ihrer Gesamtheit durch Verweis miteingebunden ist.
-
TECHNISCHES GEBIET
-
Die vorliegende Offenbarung bezieht sich auf eine Fehlerkorrektur-Codierung und genauer auf ein generalisiertes verkettetes Fehlerkorrektur-Codierschema, welches Lokalität hat.
-
DISKUSSION DES STANDES DER TECHNIK
-
Fehlerkorrektur-Codierschemata wurden als ein Weg entwickelt, um eine genaue digitale Kommunikation über einen rauschigen Kanal sicherzustellen. Demnach kann, wenn der rauschige Kanal verursachen kann, dass übertragene Daten fehlen oder während der Übertragung geändert werden, eine Fehlerkorrektur-Codierung verwendet werden, um eine genaue Decodierung sicherzustellen, auch wo einige Daten fehlen oder geändert sind.
-
In jüngerer Zeit wurde eine Fehlerkorrektur-Codierung verwendet, um Daten innerhalb einer Speichervorrichtung zu speichern. Wenn es ebenso eine Wahrscheinlichkeit gibt, dass Daten, welche innerhalb Speicherzellen gespeichert sind, fehlen oder vor einem Gelesen-werden geändert werden können, kann eine Fehlerkorrektur-Codierung verwendet werden, um eine genaue Speicherung von Daten von innerhalb einer Speichervorrichtung sicherzustellen.
-
Ein gebräuchliches Schema für eine Fehlerkorrektur-Codierung sind Reed-Solomon(RC)-Codes. Gemäß dieser Herangehensweise wird ein Block von Daten als ein Satz von Elementen, welche als Symbol bekannt sind, repräsentiert. Eine Anzahl von Prüfsymbolen wird den Daten hinzugefügt, sodass unkorrekte oder fehlende Symbole bei einem Decodieren der Daten korrigiert werden können.
-
Ein anderes gebräuchliches Schema für eine Fehlerkorrektur-Codierung sind Low-Density Parity-Check(LDPC)-Codes. Gemäß dieser Herangehensweise werden Paritätsprüfsymbole zu den Daten hinzugefügt. Diese Paritätsprüfsymbole können unter Verwendung eines dünn besetzten bipartiten Graphen (engl. sparse bipartite graph) konstruiert werden.
-
In Fehlerkorrektur-Codeschemata wie den obigen werden die Daten- und Prüfsymbole zusammen in Ketten beziehungsweise Zeichenketten gruppiert, welche als Codeworte bekannt sind. Beim Decodieren muss im Allgemeinen ein gesamtes Codewort empfangen werden bevor irgendwelche der Daten darin decodiert werden können. Dies erzeugt zwei Kompromisse. Gemäß dem ersten Kompromiss kann ein Verwenden einer größeren Anzahl von Prüfsymbolen eine genaue Decodierung auch in dem Fall von mehreren Fehlern erlauben, ein Verwenden einer kleineren Anzahl von Prüfsymbolen aber kann weniger Aufwand erlauben und es demnach erlauben, mehr codierte Daten innerhalb einer Speichervorrichtung einer festen Größe zu speichern und kann ebenso eine schnellere Decodierung erlauben. Gemäß dem zweiten Kompromiss müssen, während längere Codeworte weniger Aufwand benötigen können, wodurch es erlaubt wird, dass mehr codierte Daten innerhalb einer Speichervorrichtung gespeichert werden, mehr Daten empfangen werden, bevor Daten decodiert werden können, was zu einer erhöhten Latenz beim Lesen von Daten von Speichervorrichtungen führt. Im Gegensatz dazu kann ein Verwenden kürzerer Codeworte die Latenz verringern, kann aber ebenso den Aufwand erhöhen, wodurch erlaubt wird, dass weniger Daten in eine Speichervorrichtung gespeichert werden und/oder mehr Berechnungsressourcen benötigt werden, um die Decodierung durchzuführen.
-
KURZFASSUNG
-
Ein Verfahren zum Speichern von Daten innerhalb einer Speichervorrichtung weist ein Empfangen von Daten, welche zu speichern sind, auf. Die empfangenen Daten werden codiert. Die codierten Daten werden innerhalb der Speichervorrichtung gespeichert. Ein Codieren der empfangenen Daten weist ein Codieren der Daten in zwei oder mehr Unter-Codeworte auf. Jedes der zwei oder mehreren Unter-Codeworte weist eine Mehrzahl von äußeren Codeworten auf. Zwei oder mehr der Mehrzahl von äußeren Codeworten werden gruppiert, um ein größeres Codewort zu bilden, welches größer ist als jedes der Mehrzahl von äußeren Codeworten, und das größere Codewort wird konstruiert, um Fehler und/oder Löschungen zu korrigieren, welche durch die Mehrzahl von äußeren Codeworten individuell nicht korrigierbar sind.
-
Ein Verfahren zum Abrufen von Daten innerhalb einer Speichervorrichtung weist ein Lesen von gespeicherten Daten aus einer Speichervorrichtung auf. Die gelesenen Daten werden decodiert. Das Decodieren der gelesenen Daten weist ein individuelles Decodieren von Unter-Codeworten der gelesenen Daten auf. Wenn ein Unter-Codewort der gelesenen Daten nicht decodiert werden kann, weist ein Decodieren der gelesenen Daten ein Decodieren einer Mehrzahl von äußeren Codeworten auf, von welchen jedes zwei oder mehr Unter-Codeworte aufweist, welche das Unter-Codewort aufweisen, welches nicht individuell codiert werden konnte.
-
Ein Verfahren zum Speichern von Daten innerhalb einer Speichervorrichtung weist ein Empfangen von Daten, welche zu speichern sind auf. Die empfangenen Daten werden codiert. Die codierten Daten werden innerhalb der Speichervorrichtung gespeichert. Ein Codieren der empfangenen Daten weist ein Codieren der Daten in eine Mehrzahl von Unter-Codeworten innerhalb einer ersten Schicht des Codierens auf, ein Gruppieren der Mehrzahl von Unter-Codeworten in eine Mehrzahl von äußeren Codeworten innerhalb einer zweiten Schicht des Codierens, und ein Gruppieren der Mehrzahl von äußeren Codeworten in wenigstens ein größeres Codewort, welches größer ist als jedes der Mehrzahl von äußeren Codeworten.
-
Figurenliste
-
Eine vollständigere Anerkennung der vorliegenden Offenbarung und vieler der dazugehörigen Aspekte davon wird leicht erhalten werden, wenn dieselbe besser durch eine Bezugnahme auf die folgende detaillierte Beschreibung verstanden wird, wenn sie in Verbindung mit den beigefügten Zeichnungen betrachtet wird, in welchen:
- 1 ein schematisches Diagramm ist, welches Datengruppierungen in Übereinstimmung mit beispielhaften Ausführungsformen der vorliegenden Erfindung veranschaulicht;
- 2 ein schematisches Diagramm ist, welches eine Herangehensweise für Datengruppierungen in Übereinstimmung mit beispielhaften Ausführungsformen der vorliegenden Erfindung veranschaulicht;
- 3 ein Flussdiagramm ist, welches eine Herangehensweise zum Codieren und Decodieren von Daten in Übereinstimmung mit beispielhaften Ausführungsformen der vorliegenden Erfindung veranschaulicht;
- 4 ein Blockschaltbild eines Speichersystems ist, auf welches ein Speicher gemäß einigen Ausführungsformen des vorliegenden erfinderischen Konzepts angewandt wird; und
- 5 ein Beispiel eines Computersystems zeigt, welches in der Lage ist, das Verfahren und die Vorrichtung gemäß Ausführungsformen der vorliegenden Offenbarung zu implementieren.
-
DETAILLIERTE BESCHREIBUNG DER ZEICHNUNGEN
-
Beim Beschreiben beispielhafter Ausführungsformen der vorliegenden Offenbarung, welche in den Zeichnungen veranschaulicht sind, wird eine spezifische Terminologie zum Zweck der Klarheit eingesetzt. Die vorliegende Offenbarung ist jedoch nicht beabsichtigt, auf die spezifische Terminologie, welche so ausgewählt ist, beschränkt zu sein und es muss verstanden werden, dass jedes spezifische Element alle technischen Äquivalente, welche in einer ähnlichen Art und Weise arbeiten, einschließt.
-
Beispielhafte Ausführungsformen der vorliegenden Erfindung sehen Herangehensweisen zum Codieren von Daten für eine Übertragung über einen rauschigen Kanal oder zur Speicherung und zum Abrufen zu und von einer Speichervorrichtung vor, welche zu derselben Zeit die Vorteile eines Codierens kürzerer Codeworte unter Verwendung wenigerer Prüfsymbole wie beispielsweise eine geringere Latenz erlaubt, aber ebenso die Vorteile des Codierens größerer Codeworte unter Verwendung mehrerer Prüfsymbole wie beispielsweise eine höhere Datengenauigkeit und die Fähigkeit, mehr Fehlern Rechnung zu tragen, erlaubt. Gemäß diesen Herangehensweisen können Daten in kürzere Codeworte oder Unter-Codeworte mit relativ wenigeren Prüfcodeworten codiert werden und Gruppen dieser kürzeren Codeworte oder Unter-Codeworte können in ein größeres Codewort oder eine Codewortgruppe kombiniert werden, welche(s) zusätzliche Prüfsymbole aufweist. Ein Decodieren kann dann auf den kürzeren Codeworten oder Unter-Codeworten, welche weniger Prüfsymbole haben, im größten Ausmaß, welches möglich ist, durchgeführt werden, und wo ein Decodieren nicht erfolgreich ist, beispielsweise aufgrund übermäßiger Fehler, für welche es unzureichend Prüfsymbole zur Korrektur gibt, kann ein Decodieren wiederum auf dem größeren Codewort oder der Codewortgruppe bei seinem/ihrem vollständigen Empfang durchgeführt werden.
-
Wenn hierin verwendet kann auf die Gruppierungen von Symbolen in kleineren Codeworten hierin Bezug genommen werden als Unter-Codeworte während auf die Gruppierungen von Symbolen in größeren Codeworten hierin Bezug genommen werden kann als gruppierte Codeworte. Demnach können Daten in Unter-Codeworte, welche lokal durch den Empfang des gesamten Unter-Codeworts decodiert werden können, codiert werden und dann kann eine Gruppe von Unter-Codeworten als gruppierte Codeworte kombiniert werden, deren Daten bei dem Empfang der gesamten gruppierten Codeworte decodiert werden können, sollte es nicht möglich sein, die Daten nur basierend auf den Unter-Codeworten zu decodieren, wie es der Fall sein kann, wo es zu viele Fehler in dem Unter-Codewort für ein genaues Decodieren gibt. Demnach können am häufigsten Daten decodiert werden, wenn jedes Unter-Codewort in seiner Gesamtheit empfangen wird, wodurch die Latenz verringert wird. Wo aber Daten eines bestimmten Unter-Codeworts nicht decodiert werden können, können die Daten bei dem Empfang des gesamten gruppierten Codewortes decodiert werden, wo durch eine hinzugefügte Ebene von Datengenauigkeit vorgesehen wird.
-
Darüber hinaus können beispielhafte Ausführungsformen der vorliegenden Erfindung ferner Sätze von gruppierten Codeworten in Codewort-Supergruppen gruppieren. Demnach können, wenn Daten von entweder dem Unter-Codewort oder dem gruppierten Codewort nicht genau decodiert werden können, diese Daten bei dem Empfang der Codewort-Supergruppe decodiert werden. Auf jeder Ebene können mehrere Prüfsymbole gegenwärtig sein, sodass die Chancen zum genauen Decodieren der Daten auf jeder Ebene zunehmen. Es muss ferner verstanden werden, dass die Codewort-Supergruppen selbst in eine Gruppierung der nächsten Ebene mit zusätzlichen Prüfsymbolen gruppiert werden können, wenn erwünscht, sodass in dem Fall, dass die Daten der Codewort-Supergruppe nicht genau decodiert werden können, die Daten von der nächsten Ebene der Gruppierung decodiert werden können. In der Theorie kann eine beliebige Anzahl von Gruppierungen der nächsten Ebene verwendet werden. Beispielsweise können zwei, drei, vier, fünf, sechs oder mehr Ebenen von Gruppierungen verwendet werden. Für den Zweck des Vorsehens einer vereinfachten Erklärung werden jedoch beispielhafte Ausführungsformen der vorliegenden Erfindung hierin in Einheiten von Daten, welche als Unter-Codeworte codiert sind, Unter-Codeworte, welche als gruppierte Codeworte gruppiert sind und gruppierte Codeworte, welche als Codewort-Supergruppen codiert sind, beschrieben werden, wobei ein oder mehrere Prüfsymbole bei jeder Gruppierung hinzugefügt werden. Dieses Konzept ist in 1 gezeigt, welche ein schematisches Diagramm ist, welches Datengruppierungen in Übereinstimmung mit beispielhaften Ausführungsformen der vorliegenden Erfindung veranschaulicht.
-
Wie durch 1 gesehen werden kann, können die Daten als Datensymbole 11 codiert werden und es kann mehrere Datensymbole 11 zusammen mit einer Anzahl von Prüfsymbolen 12 innerhalb eines Unter-Codeworts 13 geben. Es kann eine Anzahl von Unter-Codeworten 13 zusammen mit einer Anzahl von Prüfsymbolen 12 innerhalb eines gruppierten Codeworts 14 geben. Demnach ist jedes Unter-Codewort ein Symbol innerhalb des gruppierten Codeworts 14.
-
Es kann auch eine Anzahl von gruppierten Codeworten 14 zusammen mit einer Anzahl von Prüfsymbolen 12 innerhalb einer Codewort-Supergruppe 15 geben. Demnach ist jedes gruppierte Codewort 14 ein Symbol innerhalb der Codewort-Supergruppe 15. Demnach kann es eine beliebige Anzahl von Codewort-Supergruppen 15 geben, die so konfiguriert sind.
-
Jedes beliebige geeignete Codierschema kann verwendet werden, um die Daten in Datensymbole zu codieren. Beispielsweise kann Reed-Solomon (RS) verwendet werden oder es kann Bose-Chaudhuri-Hocquenghem (BCH) verwendet werden. Demnach kann, da eine BCH-Codierung verwendet werden kann, um die Daten in Unter-Codeworte zu codieren, BCH ebenso wieder verwendet werden, um die Unter-Codewort in gruppierte Codeworte zu Codieren und um die gruppierten Codeworte in Codewort-Supergruppen zu codieren.
-
Gemäß einer anderen beispielhaften Ausführungsform der vorliegenden Erfindung können Daten mit der Fähigkeit codiert werden, entweder lokal oder generell zu decodieren, wie obenstehend beschrieben ist, durch ein Codieren von Daten in Übereinstimmung mit einer Reed-Solomon (RS)-Codierung oder einigen anderen ähnlichen Codiertechniken und dann ein Gruppieren mehrerer RS-Codes von Daten zusammen mit einem oder mehreren zusätzlichen RS-Codes zur Redundanz und dann ein Konstruieren einer einzelnen Paritätsprüfmatrix für den Satz von Daten-RS-Codes und redundanten RS-Codes. Diese Herangehensweise kann aus 2 gesehen werden, welche ein schematisches Diagramm ist, welches eine Herangehensweise für Datengruppierungen in Übereinstimmung mit beispielhaften Ausführungsformen der vorliegenden Erfindung veranschaulicht.
-
Wie aus 2 gesehen werden kann, können die Daten als ein Satz von primären Daten-RS-Codes 21 codiert werden, und ein oder mehrere redundante RS-Codes 22 können zusammen mit diesen primären Daten-RS-Codes 21 gruppiert werden, sodass eine einzelne Paritätsprüfmatrix 23 davon konstruiert werden kann. Auf diesem Wege können die Daten auf der RS-Code-Ebene, welche eine lokale Ebene ist, decodiert werden, und wenn Daten davon nicht genau decodiert werden können, können, bei dem Empfang des gesamten Satzes von RS-Codes (primäre Daten und redundante Daten) zusammen mit der Paritätsprüfmatrix die Daten, welche auf der lokalen Ebene nicht decodierbar sein konnten, unter Verwendung der redundanten Daten-RS-Codes und der Paritätsprüfmatrix decodiert werden.
-
3 ist ein Flussdiagramm, welches eine Herangehensweise zum Codieren und Decodieren von Daten in Übereinstimmung mit beispielhaften Ausführungsformen der vorliegenden Erfindung veranschaulicht. Daten können zuerst empfangen werden (Schritt S31). Die empfangenen Daten können dann in Übereinstimmung mit den verschachtelten Arten und weisen, welche obenstehend beschrieben sind, codiert werden (Schritt S32). Die codierten Daten können dann in einer Speichervorrichtung gespeichert werden (Schritt S33). Zu einem späteren Punkt kann der Abruf der Daten, welche in der Speichervorrichtung gespeichert sind, beginnen. Als Teil dieses Abrufs kann ein erster Satz von Symbolen abgerufen werden (Schritt S34). Wenn der erste Satz von Symbolen ausschließlich basierend auf der Information des ersten Satzes von Symbolen decodiert werden kann (Ja, Schritt S35), dann können die Daten davon decodiert werden, ohne darauf zu warten, dass die gesamte Gruppe von Sätzen von Symbolen abgerufen wird (Schritt S36) und dann kann der nächste Satz von Symbolen in einer ähnlichen Art und Weise abgerufen und decodiert werden. Wenn jedoch der erste Satz von Symbolen nicht ausschließlich basierend auf der Information des ersten Satzes von Symbolen decodiert werden kann (Nein, Schritt S35), dann kann eine Gruppe von Symbolsätzen einschließlich des ersten Satzes von Symbolen abgerufen werden (Schritt S37). Dann können der erste Satz von Symbolen und die anderen Sätze von Symbolen der Gruppe von Symbolen basierend auf der Information der Gruppe von Symbolen decodiert werden, nachdem die gesamte Gruppe von Symbolen abgerufen wurde (Schritt S38). Danach können zusätzliche Daten in derselben Art und Weise abgerufen und decodiert werden.
-
Wie obenstehend beschrieben ist, können beispielhafte Ausführungsformen der vorliegenden Offenbarung Daten, welche in einem Speichersystem zu speichern sind, codieren und können dann Daten, welche von dem Speichersystem abgerufen werden, decodieren. 4 ist ein Blockschaltbild eines Speichersystems, auf welches ein Speicher gemäß einigen Ausführungsformen des vorliegenden erfinderischen Konzepts angewandt wird. Bezug nehmend auf 4 weist das Speichersystem den Speichercontroller 400 und eine nichtflüchtige Speichervorrichtung 410 auf.
-
Die nichtflüchtige Speichervorrichtung 410 kann sein, ist jedoch nicht beschränkt auf eine Flashspeichervorrichtung, eine NAND-Flashspeichervorrichtung, ein Phasen-übergangs-RAM (PRAM), ein ferroelektrischer RAM (FRAM), ein magnetischer RAM (MRAM) etc. Gemäß wenigstens einer beispielhaften Ausführungsform der erfinderischen Konzepte kann die nichtflüchtige Speichervorrichtung 410 eine Mehrzahl von NAND-Flashspeichervorrichtungen aufweisen. Die nichtflüchtige Speichervorrichtung 410 kann eine planare Struktur oder eine dreidimensionale (3D)-Speicherzellstruktur mit einem Stapel von Speicherzellen haben.
-
Die nichtflüchtige Speichervorrichtung 410 kann eine Speicherzellanordnung 415, einen X-Decoder 420, einen Spannungserzeuger 414, einen I/O-Puffer 417, einen Seitenpuffer 416 und eine Steuerlogik 412 haben, von welchen jedes als eine oder mehrere Schaltungen implementiert sein kann. Die nichtflüchtige Speichervorrichtung 410 kann ebenso eine Eingabe-/Ausgabe (I/O)-Kontaktstelle 411 aufweisen.
-
Die Speicherzellanordnung 415 weist eine Mehrzahl von Wortleitungen und eine Mehrzahl von Bitleitungen auf. Jede Speicherzelle der Speicherzellanordnung 415 kann als eine nicht flüchtige Speicherzelle implementiert sein. Beispielsweise kann jede Speicherzelle der Speicherzellanordnung 415 beispielsweise ein Floating Gate oder eine Ladungsspeicherschicht wie beispielsweise eine Ladungseinfangschicht haben.
-
Die Speicherzellanordnung 415 kann eine Mehrzahl von Blöcken und eine Mehrzahl von Seiten aufweisen. Jeder Block weist eine Mehrzahl von Seiten auf. Beispielsweise kann ein erster Block 418 eine erste Mehrzahl von Seiten 1-N aufweisen, während ein zweiter Block 419 eine zweite Mehrzahl von Seiten 1-N aufweisen kann, wobei N eine ganze Zahl größer als 1 ist. Eine Seite kann eine Einheit von Programmier- und Leseoperationen sein, und ein Block kann eine Einheit einer Löschoperation sein.
-
Die Steuerlogik 412 steuert den Gesamtbetrieb der nichtflüchtigen Speichervorrichtung 410. Wenn sie einen Befehl CMD von dem Speichercontroller 400 empfängt, interpretiert die Steuerlogik 412 den Befehl CMD und steuert die nichtflüchtige Speichervorrichtung 410, um eine Operation (beispielsweise eine Programmieroperation, eine Leseoperation, eine Lesewiederversuchsoperation oder eine Löschoperation) gemäß dem interpretierten Befehl CMD durchzuführen.
-
Der X-Decoder 420 wird durch die Steuerlogik 412 gesteuert und treibt wenigstens eine der Wortleitungen in der Speicherzellanordnung 415 gemäß einer Zeilenadresse.
-
Der Spannungserzeuger 414 wird durch die Steuerlogik 412 gesteuert, um eine oder mehrere Spannungen, welche für eine Programmieroperation, eine Leseoperation oder eine Löschoperation benötigt werden, zu erzeugen, und um die erzeugten Spannungen für eine oder mehrere Zeilen, welche durch den X-Decoder 420 ausgewählt sind, vorzusehen.
-
Der Seitenpuffer 416 wird durch die Steuerlogik 412 gesteuert und arbeitet als ein Leseverstärker oder ein Schreibtreiber gemäß einem Betriebsmodus (beispielsweise eine Leseoperation oder eine Programmieroperation).
-
Die I/O-Kontaktstelle 411 und der I/O-Puffer 417 können als I/O-Pfade von Daten, welche zwischen einer externen Vorrichtung, beispielsweise dem Speichercontroller 400 oder einem Host und der nichtflüchtigen Speichervorrichtung 410 ausgetauscht werden, dienen.
-
Der Speichercontroller 400 kann einen Mikroprozessor 401, einen Nur-Lese-Speicher (ROM) 403, einen Direktzugriffsspeicher (RAM) 402, einen Codierer 404, einen Decoder 405, eine Speicherschnittstelle 406 und einen Bus 407 aufweisen. Die Elemente 401 bis 406 des Speichercontrollers 400 können elektrisch miteinander über den Bus 407 verbunden sein.
-
Der Mikroprozessor 401 steuert den Gesamtbetrieb des Speichersystems, welches den Speichercontroller 400 aufweist. Der Mikroprozessor 401 ist eine Schaltung, welche andere Elemente durch ein Erzeugen von Steuersignalen steuert. Wenn dem Speichersystem Leistung zugeführt wird, betreibt beziehungsweise treibt der Mikroprozessor 401 Firmware (beispielsweise in dem ROM 403 gespeichert) zum Betreiben des Speichersystems auf dem RAM 402, wodurch der Gesamtbetrieb des Speichersystems gesteuert wird. Gemäß wenigstens einer beispielhaften Ausführungsform der erfinderischen Konzepte kann der Mikroprozessor 401 ebenso Instruktionen zum Steuern von Operationen anderer Elemente des Speichercontrollers 400 einschließlich beispielsweise einiger oder aller des ROM 403, des RAM 402, des Codierers 404, des Decoders 405, der Speicherschnittstelle 406 und eines Busses 407 ausgeben. Gemäß wenigstens einer beispielhaften Ausführungsform des erfinderischen Konzepts können beliebige Operationen, welche hierin als durch den Speichercontroller 400 durchgeführt beschrieben werden, durch oder unter der Steuerung des Mikroprozessors 401 durchgeführt werden. Gemäß wenigstens einer beispielhaften Ausführungsform des erfinderischen Konzepts können beliebige Operationen, welche hierin als durch den Speichercontroller 410 durchgeführt beschrieben werden, durch oder unter der Steuerung des Mikroprozessors 401 durchgeführt werden, welcher Instruktionen ausführt, welche den Operationen entsprechen und in Programmcode (beispielsweise in dem ROM 403 gespeichert) enthalten sind.
-
Während ein Treiber-Firmwarecode des Speichersystems in dem ROM 403 gespeichert ist, ist eine oder sind mehrere beispielhafte Ausführungsformen der erfinderischen Konzepte nicht darauf beschränkt. Der Firmwarecode kann ebenso in einem Abschnitt der nichtflüchtigen Speichervorrichtung 410 gespeichert werden. Demnach kann die Steuerung oder Intervention des Mikroprozessors 401 nicht nur die direkte Steuerung des Mikroprozessors 401, sondern auch die Intervention von Firmware, welche Software ist, die durch den Mikroprozessor 401 betrieben wird, umfassen.
-
Der RAM 402, welcher ein Speicher ist, welcher als ein Puffer dient, kann einen anfänglichen Befehl, Daten und verschiedene Variablen, welche von einem Host oder dem Mikroprozessor 401 zugeführt werden, oder Daten, welche von der nichtflüchtigen Speichervorrichtung 410 ausgegeben werden, speichern. Der RAM 402 kann Daten und verschiedene Parameter und Variablen, welche eingegeben werden zu und ausgegeben werden von der nichtflüchtigen Speichervorrichtung 410 speichern.
-
Die Speicherschnittstelle 116 kann als eine Schnittstelle zwischen dem Speichercontroller 1000 und der nichtflüchtigen Speichervorrichtung 2000 dienen. Die Speicherschnittstelle 116 ist mit der I/O-Kontaktstelle 127 der nichtflüchtigen Speichervorrichtung 2000 verbunden und kann Daten mit der I/O-Kontaktstelle 127 austauschen. Zusätzlich kann die Speicherschnittstelle 116 einen Befehl, welcher für die nichtflüchtige Speichervorrichtung 2000 geeignet ist, erzeugen und den erzeugten Befehl für die I/O-Kontaktstelle 127 der nichtflüchtigen Speichervorrichtung 2000 vorsehen. Die Speicherschnittstelle 116 sieht einen Befehl, welcher durch die nichtflüchtige Speichervorrichtung 2000 auszuführen ist, und eine Adresse ADD der nichtflüchtigen Speichervorrichtung 2000 vor.
-
Gemäß wenigstens einer beispielhaften Ausführungsform des erfinderischen Konzepts kann der Decoder 405 ein Fehler korrigierender Code (ECC = Error Correcting Code = Fehler korrigierender Code)-Decoder sein, welcher konfiguriert ist, um Daten in der Art und Weise, welche obenstehend beschrieben ist, zu decodieren, und der Codierer 404 kann ein ECC-Codierer sein, welcher konfiguriert ist, um Daten in der Art und Weise, welche obenstehend beschrieben ist, zu codieren. Gemäß wenigstens einer beispielhaften Ausführungsform des erfinderischen Konzepts führen der Decoder 405 und der Codierer 404 Fehlerbitkorrekturen in der Art und Weise, welche obenstehend beschrieben ist, durch. Der Codierer 404 kann Daten, welche mit einem oder mehreren Paritäts- und/oder Redundanzbits hinzugefügt werden, durch ein Durchführen von Fehlerkorrektur-Codierung auf Daten bevor die Daten für die nichtflüchtige Speichervorrichtung 410 vorgesehen werden, erzeugen. Das eine oder die mehreren Paritäts- und/oder Redundanzbits kann (können) in der nichtflüchtigen Speichervorrichtung 410 gespeichert werden.
-
Der Decoder 405 kann eine Fehlerkorrektur-Decodierung auf Ausgabedaten durchführen, bestimmen, ob die Fehlerkorrektur-Decodierung erfolgreich ist, basierend auf dem Ergebnis der Fehlerkorrektur-Decodierung und ein Instruktionssignal basierend auf dem Bestimmungsergebnis ausgeben. Gelesene Daten können zu dem Decoder 405 übertragen werden, und der Decoder 405 kann Fehlerbits der Daten unter Verwendung des einen oder der mehreren Paritäts- und/oder Redundanzbits korrigieren. Wenn die Anzahl von Fehlerbits eine Grenze von Fehlerbits überschreitet, welche korrigiert werden kann, kann der Decoder 405 gemäß einer höheren Ebene von Datenorganisation wie im Detail obenstehend beschrieben, decodieren. In einer beispielhaften Ausführungsform können der Codierer 404 und der Decoder 405 eine Fehlerkorrektur unter Verwendung einer Variation von Bose-Chaudhuri-Hocquenghem (BCH) durchführen, welche angepasst wurde, um zu arbeiten wie im Detail obenstehend beschrieben ist.
-
Beispielhafte Ausführungsformen der vorliegenden Erfindung können auf eine Variation von BCH, bekannt als Super-Bose-Chaudhuri-Hocquenghem (SBCH), angewandt werden. SBCH ist ein algebraischer Multiebenen-Code, welcher aus einigen kurzen binären Bose-Chaudhuri-Hocquenghem(BCH)-Codes und nichtbinären Reed- Solomon (RS)-Codes besteht. Wie entgegengesetzt zu dem Nachrichten passierenden Decodieralgorithmus von Low-Density Parity-Check (LDPC)-Codes, welcher ein iteratives Austauschen großer Mengen von weicher Information beziehungsweise Softinformation zwischen Variable und Prüfknoten benötigt, ist der Decodieralgorithmus für SBCH vollständig algebraisch unter Verwendung von algebraischen Standarddecodiermodi für die kurze Komponente BCH und RS-Codes. Aus diesem Grund ist der Leistungsverbrauch eines SBCH-Decoders beträchtlich kleiner als derjenige des entsprechenden LDPC-Decoders.
-
Gemäß SBCH-Schemata:
- ■ CL ⊂ CL-1 ⊂ ··· ⊂ C0 - binäre Codes der Länge n
- ■ RS1 ⊂ RS2 ⊂ ··· ⊂ RSL- Reed-Solomon (RS)-Codes der Länge nrows
- ■ Der SBCH-Code verbunden mit den obigen Codes:
- alle binären Matrizen
derart, dass:
- • Für alle i, ci := (cij)j∈C0
- • Für alle
(hier sind
die sogenannten „Delta-Syndromes“)
-
Gemäß beispielhaften Ausführungsformen der vorliegenden Offenbarung „kleben“ die RS-Codes die Zeilen eines Codeworts. Um die RS-Codes geeignet in dem Decodierprozess zu verwenden, wird auf das gesamte empfangene Wort zugegriffen. Wie jedoch obenstehend diskutiert ist, können beispielhafte Ausführungsformen der vorliegenden Erfindung ein teilweises Decodieren ermöglichen. Hier nimmt die Framefehlerrate (FER) ab, wenn auf zunehmend große Datenblöcke des empfangenen Worts zugegriffen wird.
-
Gemäß beispielhaften Ausführungsformen der vorliegenden Offenbarung kann ein teilweises Decodieren mit Lokalität ermöglicht werden. Beispielsweise kann, wenn eine Blocklänge gleich 4 KBytes ist, das Folgende ermöglicht werden:
- - Decodieren jedes 1 KByte („¼-Block“) mit PER ≈ 10-3.
- - Decodieren des vollständigen 4 KByte-Blocks mit der gewöhnlichen FER ≈ 1-11.
- - Im Falle, dass das Dekodieren eines ¼-Blocks fehlschlägt: Lies den gesamten Block (4 KByte).
-
Auf diesem Wege kann die Latenz mit hoher Wahrscheinlichkeit wesentlich verringert werden. Dies kann, wie obenstehend beschrieben ist durch ein zusammen-„kleben“ der Zeilen eines SBCH-Wortes durch den externen RS-Code implementiert werden. Um Lokalität zu erlauben, können die RS-Codes durch Codes mit Lokalität ersetzt werden. Lokalität kann ermöglichen, dass jede Gruppe von Zeilen „lokal geklebt“ wird. Demnach können die verschiedenen Worte in einer Gruppe von Zeilen ohne ein Verwenden von Zeilen, die nicht in der Gruppe sind, unter Verwendung der Lokalitätseigenschaft der lokalen Codes, welche die RS-Codes ersetzen, „einander helfen“. Getrennte Gruppen von Zeilen sind jedoch nach wie vor durch die globalen Abhängigkeiten der lokalen Codes verbunden. Demnach kann, in dem Fall, in dem eine lokale Gruppe fehlschlägt, ein erfolgreiches Decodieren durch ein Zugreifen auf alle Zeilen durchgeführt werden.
-
Die beispielhaften Ausführungsformen der vorliegenden Erfindung, welche im Detail obenstehend beschrieben sind, können als in verschiedene mögliche Ausführungsformen fallend angesehen werden. Ausführungsformen A1 und A2 zwei sind hierin als Beispiele vorgesehen. Diese zwei Herangehensweisen zeigen beispielhaft zwei optionale Algorithmen, welche verwendet werden können, um die vorliegende Erfindung zu implementieren.
-
Gemäß der A1-Herangehensweise, seien q hier eine Primzahlpotenz und α
1,α
2, ... ,α
n distinkte Nicht-Null-Elemente von F = GF(q) und seien v
1, v
2, ... , v
n Nicht-Null-Elemente von K (welche nicht distinkt sein müssen). Ein generalisierter Read-Solomon (kurz GRS)-Code über F ist ein linearer [n, k, d]-Code C über F mit einer Paritätsprüfmatrix
wobei V=diag(v
1,......,v
n) und H wie in RS obenstehend definiert ist:
-
Der resultierende Code ist MDS mit einem minimalen Abstand d = n - k + 1. Nimm die ganze Zahl r und setze
ist der resultierende GRS-Code bezeichnet durch GRS
n,k,r. Er hat die folgende Prüfmatrix
-
Code-Definition: Als Nächstes wird ein linearer Code C* durch ein Bestimmen positiver ganzzahliger Parameter q, s≥1, n
1,....,n
s, b, c, bestimmt derart, dass N= n
1+....+n
s<q und durch α
1,α
2, ... ,α
N distinkte Nicht-Null-Elemente von F. Setze N
0=0 und für 1≤i≤s stelle ein:: N
i=n
1+....+n
i. Nimm zur Kenntnis, dass N
s=N. die Elemente von C* sind in F
N. Definiere für 1≤i≤s:
und definiere:
Nimm zur Kenntnis H* ist die Prüfmatrix von RS auf F
N, welche a+b-Fehler korrigieren kann.
Definiere als Näcstes für x=[x
1,.....,x
N] T∈F
N:
Hier ist C* wie folgt definiert, für x=[x
1,.....,x
N] T∈F
N gilt, dass x∈C*, falls für 1≤i≤s
Nimm zur Kenntnis, dass für v=[v
1,.....,v
N]
T EF
N gilt, dass:
Es folgt, dass, wenn x∈C* dann H
(1)·x=0 und H
(2)·x=0 und demnach H*·x=0◆
-
Decodieren: Es sei x=[x1,.....,xN] T∈C* das übertragene Wort und y=[y1,.....,yN]T∈FN das empfangene Wort. Der Decoder startet durch ein Anwenden des Standard-RS-Decodierverfahrens auf jedes Unter-Intervall y[i]. Er kann eine beliebige Kombination von i Fehlern und j Löschungen korrigieren derart, dass 2i+j≤b bei jedem Unter-Intervall y[i]. Wenn dies getan ist, werden einige der Unter-Intervalle von allen Fehlern befreit sein. Nenne das resultierende Wort z=[z1,.....,zN] T∈FN. Da H*·x=0, gilt es, dass der RS-Decoder nun auf z angewandt werden kann, um eine beliebige Kombination von i verbleibenden Fehlern und j verbleibenden Löschungen zu korrigieren derart, dass 2i+j≤b+c. Dies ist beispielsweise effektiv wenn alle bis auf ein Unter-Wort in der ersten Runde decodiert werden und in dem einen undecodierten Wort die Anzahl von Fehlern b+c nicht überschreitet.
-
Wie obenstehend erwähnt ist, wird in der A2-Ausführungsform die Gruppierung von RSt ein GCCRS-Codewort. Das Folgende ist eine Beschreibung der GCCRS-Familie von Codes. In dieser Familie von Codes wird RS sowohl als innerer als auch als äußerer Code benutzt.
-
Hier ist GCC
RS ein linearer Code C über F=GF(q), bestimmt durch die folgenden Parameter: q ein Primzahlpotenz, positive ganze Zahlen T, J, m und eine Ganzzahlsequenz J=R(1)≥R(2)≥.....≥R(T)=0 und T Prüfmatrizen H
1,....,H
T∈F
m×N. C entwickelt sich aus internen Codes C
J⊆C
J-1⊆....⊆C
1, wobei
-
Alternativ wird die Bedingung von in Ct befindlich derart angegeben, dass die ersten t Syndrome von x w.r.t. (H1,....,HT) gleich Null sind. Oftmals ist in der Praxis Ct BCH, welcher t Fehler korrigieren kann oder RS, welcher t/2 Fehler korrigieren kann. Ein Codewort c∈C is gegeben durch c=[c1 T,....,cJ T]T, wobei cj∈C1 und wt= [c1·Ht,.....,cJ·Ht] in RS(qm,J,J-R(t)) ist. Das heißt, dass wt ein RS-Wort über das Erstreckungsfeld K=GF(qm) der Länge J und der Dimension J-R(t) ist. Dieser RS-Code kann eine beliebige Kombination von i Fehlern und J Löschungen korrigieren derart, dass 2i+j≤R(t). Anmerkend, dass wt gleich R(t) K-Symbole der Redundanz hat, was typischerweise m.R(t) Redundanzsymbole des Codes C benötigt. Demnach ist die Gesamtredundanz m·Σ1≤t≤TR(t) Symbole von F.
-
Demnach gruppieren beispielhafte Ausführungsformen der vorliegenden Erfindung einige GCCRS-Worte C'1,.....,C'L derart zusammen, dass jedes von diesen in einer hohen Wahrscheinlichkeit in einer Stand-Alone-Art und Weise decodiert werden kann. Durch Hinzufügen einiger zusätzlicher Redundanz zu der gesamten Gruppe wird jedoch ein größeres Codewort, welches C'1,.....,C'L aufweist, mit einer höheren Wahrscheinlichkeit des Decodiererfolgs gebildet. Die hinzugefügte Redundanz kann einige Informationssymbole der besagten Komponenten-Codeworte ersetzen.
-
Das vorliegende Decodierschema startet mit einem separaten Decodieren jedes individuellen GCC-Codeworts C'i. In dem Fall, dass einige der GCC-Worte in der Gruppe nicht decodiert werden können, wird für t=1:T der Standard-RS-Decoder auf das oben erwähnte t RS-Codewort jedes C'i, hier wt,i genannt (siehe wt obenstehend) angewandt. In dem Fall, dass das Dekodieren für ein beliebiges wt,i (für i∈[L]) fehlschlägt, wird ein Decodierschema, welches durch den lokalen RS unterstützt wird, verwendet. Beispielsweise kann jede der obigen zwei Herangehensweisen wie obenstehend erläutert in einem Versuch, das Decodieren der Gruppe von RS-Worten {wt,i}1≤i≤L zu vollenden, verwendet werden.
-
In einer anderen Ausführungsform tragen, wenn das Decodieren einiger der Komponenten-GCC-Worte in der ersten Runde fehlgeschlagen ist, dann die decodierten Worte mit der Hilfe der hinzugefügten Redundanz, welche durch die Erfindung vorgeschrieben ist, zu einer zweiten Runde des separaten Decodierens jedes Komponenten-Codeworts von der Gruppe C'1,.....,C'L bei, welche in der ersten Runde nicht decodiert wurden, bei.
-
Die vorliegende Erfindung ist auf Fehlerkorrektur-Codes (ECC) basiert. In der Technologie von ECC gibt es eine betonende finite ganze Zahl r = 2,3, ... und ein finites algebraisches Feld F derart, dass jedes Symbol F gleich r Bits aufweist. Ein [n k] linearer Code C ist mit einer k'n Paritätsprüfmatrix verbunden, deren Einträge in F sind. Hier sind n und k positive ganze Zahlen (n größer als k), welche Parameter des Codes C sind, n ist die Codelänge in Symbolen und k ist die Codedimension. Ein Codewort in C ist ein Vektor von n Symbolen von F, deren Produkt mit der zugeordneten Paritätsprüfmatrix Null ist.
-
Zum Zweck der Einfachheit würde ein Wort hier einen beliebigen Vektor von n Symbolen von F bedeuten. Ein Syndrome eines gegebenen Wortes bedeutet ein Skalarprodukt des besagten Wortes mit einer Zeile der Paritätsprüfmatrix. Das erste Syndrome eines gegebenen Wortes ist ein Skalarprodukt des Wortes mit der ersten Zeile der Paritätsprüfmatrix. Das zweite Syndrome eines gegebenen Wortes ist ein Skalarprodukt des Wortes mit der zweiten Zeile etc. Wenn der Decoder mehrere Syndrome kennt, kann er mehrere Fehler korrigieren.
-
Die essenzielle Idee von GCC-Codes ist, dass einige kleine Codeworte (beispielsweise aus BCH-Code), welche die gleiche Paritätsprüfmatrix gemeinsam verwenden, zusammen gruppiert werden, wobei jedes ebenso ein Unter-Wort genannt wird. Sie werden in einer solchen Art und Weise gruppiert, dass, wenn das erste Syndrome von jedem Unter-Wort gesammelt wird, ein Codewort in RS gebildet wird. Das Codewort kann RS1 genannt werden. Dasselbe gilt, wenn das zweite Syndrome von jedem dieser Worte gesammelt wird - diese Sammlung wird RS2 genannt, etc. In der Praxis ist RS1 normalerweise das Nullwort und die Coderate dieser RS-Worte nimmt zu.
- (i) Der GCC-Codierprozess wird durch die Tatsache ermöglicht, dass jedes Syndrome jedes kleinen Wortes dazu gemacht werden kann, gleich einem willkürlichen vorgeschriebenen Symbol zu sein, und zwar durch ein Investieren von r Bits von Redundanz für es.
- (ii) Wie hierin beschrieben ist die GCC-Idee einen Schritt weiter verbessert. Einige GCC-Worte werden zusammen gruppiert und nutzen (i) zum Bilden einer zusätzlichen Struktur: für t = 1, 2, 3, ... ergibt ein Kaskadieren der RSt-Worte von jedem der GCC-Codeworte ein größeres Codewort. Dieses Verfahren hat den Vorteil, dass in dem unwahrscheinlichen Ereignis des undecodierbaren individuellen GCC-Wortes seine Kollaboration mit den anderen GCC-Worten in der Gruppe in den meisten Fälle eine erfolgreiche zweite Runde des Decodierens ermöglicht.
-
Beispiel für (ii). In dem folgenden vereinfachten Beispiel gibt es zwei GCC-Worte, von welchen jedes drei kleine Unter-Codeworte und drei Ebenen von Syndromen aufweist.
-
(1) Syndrome verbunden mit GCC_Wort_1:
-
(2) Syndrome verbunden mit GCC_Wort_2:
-
In diesem Beispiel:
-
Und
und zusätzlich kann das Ergebnis, wenn diese zwei RS-Worte kaskadiert werden, sein:
- [syndrome(1,2,1), syndrome(1,2,2), syndrome(1,2,3), syndrome(2,2,1), syndrome(2,2,2), syndrome(2,2,3)] welches ebenso ein Codewort ist. Ähnlich
und wenn diese zwei RS-Worte kaskadiert werden, kann das Ergebnis sein:
- [syndrome(1,3,1), syndrome(1,3,2), syndrome(1,3,3), syndrome(2,3,1), syndrome(2,3,2), syndrome(2,3, welches ebenso ein Codewort ist.
-
Es sei erwähnt, dass herkömmlicherweise in technologischen Implementierungen jedes GCC-Wort eine größere Anzahl von Unter-Codeworten und Syndromen aufweist. Demnach ist hinsichtlich aller Parameter dieses simplifizierende Beispiel nur zur Veranschaulichung.
-
Teil (ii) kapselt den Hauptanspruch der Erfindung. Zwei Ausführungsformen A1 & A2 werden untenstehend beschrieben.
-
(iii) In A1 wird die obige Gruppierung von RSt ein größeres RS-Wort und in A2 wird die Gruppierung von RSt ein GCCRS-Codewort, dessen Idee hierin beschrieben ist.
-
5 zeigt ein Beispiel eines Computersystems, welches ein Verfahren und ein System der vorliegenden Offenbarung implementieren kann. Das System und das Verfahren der vorliegenden Offenbarung können in der Form einer Softwareanwendung implementiert sein, welche auf einem Computersystem läuft, beispielsweise einem Mainframe, einem Personalcomputer (PC), einem handgeführten Computer, einem Server etc. Die Softwareanwendung kann auf Aufzeichnungsmedien lokal zugreifbar durch das Computersystem und zugreifbar über eine festverdrahtete oder drahtlose Verbindung mit einem Netzwerk, beispielsweise einem Lokalbereichsnetzwerk oder dem Internet gespeichert sein.
-
Das Computersystem, auf welches allgemein als System 1000 Bezug genommen wird, kann beispielsweise eine zentrale Verarbeitungseinheit (CPU) 1001, einen Direktzugriffsspeicher (RAM) 1004, eine Druckerschnittstelle 1010, eine Anzeigeeinheit 1011, einen Lokalbereichsnetzwerk (LAN)-Datenübertragungscontroller 1005, eine LAN-Schnittstelle 1006, einen Netzwerkcontroller 1003, einen internen Bus 1002 und eine oder mehrere Eingabevorrichtungen 1009, beispielsweise eine Tastatur, Maus etc. haben. Wie gezeigt kann das System 1000 in einer Datenspeichervorrichtung, beispielsweise einer Festplatte 1008 über eine Verbindung (Link) 1007 verbunden sein.
-
Beispielhafte Ausführungsformen, welche hierin beschrieben sind, sind veranschaulichend und viele Variationen können eingeführt werden, ohne von dem Gedanken der Offenbarung oder von dem Umfang der beigefügten Ansprüche abzuweichen. Beispielsweise können Elemente und/oder Merkmale von unterschiedlichen beispielhaften Ausführungsformen miteinander kombiniert werden und/oder füreinander innerhalb des Umfangs dieser Offenbarung und der beigefügten Ansprüche ersetzt werden.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-