-
GEBIET DER OFFENBARUNG
-
Die vorliegende Erfindung betrifft Datenspeichersysteme und insbesondere Techniken zum Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern (stuck-at faults).
-
HINTERGRUND
-
Bei zahlreichen Datenübertragungssystemen werden Fehlerkorrektur-Codierer und -Decodierer zum Erkennen und Korrigieren von Fehlern in Daten verwendet. Ein Datenübertragungssystem kann beispielsweise Zufallsfehler korrigieren, die mit einer Häufigkeit von etwa 1 × 10-4 erzeugt werden. Als Vorkehrung gegen eine Fehlerhäufigkeit von etwa 1 × 10-4 erzeugt ein Fehlerkorrektur-Codierer codierte Bits, deren Anzahl etwa 10 % höher als die Anzahl seiner Eingangsbits ist.
-
Bei Phasenwechselspeichern (PCM) (phase change memory, PCM) handelt es sich um eine Klasse nicht flüchtiger Speicher. PCM-Vorrichtungen verfügen gegenüber herkömmlichem nicht flüchtigen Flash-Speichern über zahlreiche Vorteile. PCM-Vorrichtungen können jedoch eine große Anzahl von Fehlern erzeugen, die durch Qualitätsverlust verursacht werden. Beispielsweise kann eine PCM-Vorrichtung Fehler mit einer Häufigkeit von 1 × 10-2 oder größer erzeugen.
-
An der Ermüdungsgrenze wird die Fehlerhäufigkeit bei nicht flüchtigen Speichervorrichtungen durch Qualitätsverlust bestimmt. Zu den durch Qualitätsverlust verursachten Fehlern zählen Haftfehler, deren Statistiken sich von denen für die Zufallsfehler unterscheiden, die bei Datenübertragungssystemen häufig vorkommen.
-
Die
US 7,533,321 B1 beschreibt ein Verfahren zum Handhaben eines festsitzenden Bits in einem Verzeichnis eines Cache-Speichers durch Definieren mehrerer binärer Kodierungen, um einen defekten Cache-Status anzuzeigen, Erfassen eines Fehlers in einem in einem Mitglied des Verzeichnisses gespeicherten Tag (wobei das Tag mindestens ein Adressfeld, ein Statusfeld und ein Fehlerkorrekturfeld beinhaltet), Bestimmen, dass der Fehler einem festsitzenden Bit des Verzeichniselements zugeordnet ist, und Schreiben neuer Zustandsinformationen an das Verzeichniselement, das aus einer der binären Kodierungen ausgewählt ist, basierend auf einer Feldposition des festsitzenden Bits innerhalb des Verzeichniselements. Die mehreren binären Kodierungen können eine erste binäre Kodierung beinhalten, wenn sich das festsitzende Bit im Adressfeld befindet, eine zweite binäre Kodierung, wenn sich das festsitzende Bit im Statusfeld befindet, und eine dritte binäre Kodierung, wenn sich das festsitzende Bit im Fehlerkorrekturfeld befindet.
-
Die
US 2013/0 332 799 A1 beschreibt Systeme und Verfahren, die das Speichern und Abrufen von Daten in/aus dem Speicher mit permanenten Fehlern erleichtern. Permanente „festsitzende“ Fehler, die einzelnen Bits zugeordnet sind, stören Schreiboperationen. Ein Speicher-Bit mit dem Fehler SA-0 speichert nicht den Wert „1“, während ein Speicher-Bit mit dem Fehler SA-1 nicht den Wert „0“ speichert. Daher können gespeicherte Daten, die sich auf einem oder mehreren Bits mit einem permanenten Fehler befinden, bei einem späteren Abruf durch einen Lesevorgang von den ursprünglich geschriebenen Daten abweichen.
-
Die
US 8,352,839 B2 beschreibt das Kodieren von Daten in einen eingeschränkten Speicher unter Verwendung eines Verfahrens zum Schreiben von Daten, das das Empfangen von Schreibdaten, die in ein Schreibwort kodiert werden sollen, das Empfangen von Einschränkungen für Symbolwerte, die dem Schreibwort zugeordnet sind, das Kodieren der Schreibdaten in das Schreibwort und das Schreiben des Schreibworts in einen Speicher beinhaltet. Die Codierung beinhaltet: Darstellen der Schreibdaten und der Einschränkungen als erstes lineares System in einem ersten Feld einer ersten Größe, Einbetten des ersten linearen Systems in ein zweites lineares System in einem zweiten Feld einer zweiten Größe, wobei die zweite Größe größer als die erste Größe ist, Lösen des zweiten linearen Systems in dem zweiten Feld, was zu einer Lösung führt; und Zusammenfassen der Lösung in das erste Feld, was zu dem Schreibwort führt, wobei das Schreibwort die Einschränkungen der Symbolwerte erfüllt, die dem Schreibwort zugeordnet sind.
-
KURZDARSTELLUNG
-
Eine Aufgabe der Erfindung mag darin gesehen werden, Datenspeichersysteme sowie Verfahren für Datenspeichersysteme bereitzustellen, bei denen das Codieren und Decodieren von Daten derart angepasst ist, um eine Speicherung von Daten in Speicherzellen mit Haftfehlern bereitzustellen.
-
Demgemäß werden zur Lösung dieser Aufgabe Datenspeichersysteme sowie Verfahren für Datenspeichersysteme gemäß den unabhängigen Ansprüchen bereitgestellt. Bevorzugte Ausgestaltungen ergeben sich aus den abhängigen Ansprüchen.
-
Verschiedene Aufgaben, Merkmale und Vorteile der vorliegenden Erfindung werden beim Lesen bzw. Betrachten der folgenden ausführlichen Beschreibung und der begleitenden Zeichnungen ersichtlich.
-
Figurenliste
-
- Die 1 veranschaulicht ein Beispiel für ein Datenspeichersystem gemäß einer Ausführungsform der vorliegenden Erfindung.
- Die 2 ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Datenbits und redundanter Bits zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern veranschaulicht.
- Die 3 ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für detailliertere Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Datenbits und redundanter Bits zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern veranschaulicht.
- Die 4 ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Decodieren der codierten Datenbits veranschaulicht, die durch die Operationen der 2 und/oder der 3 erzeugt wurden, um die Datenbits mithilfe der redundanten Bits zu regenerieren.
- Die 5A bis 5E veranschaulichen gemäß Ausführungsformen der vorliegenden Erfindung Beispiele dafür, wie die Codieroperationen der 3 mithilfe beispielhafter Codiermatrizen auf eine beispielhafte Menge von Datenbits angewendet werden können.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Gemäß einigen hier beschriebenen Ausführungsformen codiert ein Codierer Eingangs-Datenbits, um codierte Datenbits und redundante Bits zu erzeugen. Die von dem Codierer erzeugten codierten Datenbits werden in Speicherzellen einer Speicherschaltung gespeichert. Mithilfe der codierten Datenbits werden für Speicherzellen in der Speicherschaltung, die Haftfehler aufweisen, Anpassungen vorgenommen. Bei der Speicherschaltung kann es sich beispielsweise um eine Phasenwechsel-Speicherschaltung (z. B. eine, bei der Chalkogenidglas verwendet wird) oder eine andere Art von Speicherschaltung mit Haftfehlern handeln.
-
Eine Speicherzelle mit einem Haftfehler ist eine Speicherzelle, die nur einen einzigen digitalen Wert speichern kann. Eine Speicherzelle mit einem Haftfehlerwert von 1 kann nur einen digitalen Wert speichern, der logisch „high“ ist, und eine Speicherzelle mit einem Haftfehlerwert von 0 kann nur einen digitalen Wert speichern, der logisch „low“ ist. Daher kann aus einer Speicherzelle mit einem Haftfehlerwert von 1 (d. h. Haftfehler an 1) nur ein digitaler Wert gelesen werden, der logisch „high“ ist, und aus einer Speicherzelle mit einem Haftfehlerwert von 0 (d. h. Haftfehler an 0) kann nur ein digitaler Wert gelesen werden, der logisch „low“ ist. Speicherzellen mit Haftfehlern weisen im Allgemeinen Haftfehlerwerte auf, die im Lauf der Zeit stabil bleiben.
-
Wenn einige der Speicherzellen in der Speicherschaltung Haftfehler aufweisen, werden die digitalen Werte der Haftfehler und die Adressen der Speicherzellen mit den Haftfehlern vor dem Codierprozess ermittelt und für den Codierer bereitgestellt. Der Codierer erzeugt die codierten Datenbits und die redundanten Bits mithilfe der digitalen Werte und Adressen der Haftfehler. Die codierten Datenbits werden in den Speicherzellen der Speicherschaltung gespeichert. Die redundanten Bits können in derselben Speicherschaltung wie die codierten Datenbits oder in einer anderen Speicherschaltung gespeichert werden.
-
Anschließend werden die codierten Datenbits und die redundanten Bits aus dem Speicher gelesen und für einen Decodierer bereitgestellt. Der Decodierer decodiert die codierten Datenbits mithilfe der redundanten Bits, um die Datenbits zu regenerieren. Die von dem Decodierer regenerierten Datenbits enthalten keine von den bekannten Haftfehlern in der Speicherschaltung verursachten Fehler.
-
Die hier beschriebenen Techniken lassen sich direkt auf Multi-Level-Speicherzellen anwenden. In Multi-Level-Speicherzellen können mehr als ein Bit pro Speicherzelle gespeichert werden. Wenn eine Speicherzelle beispielsweise 2 Bits enthält und Haftfehler auftreten, werden die Werte dieser zwei Bits fixiert und können als zwei getrennte Haftfehler-Positionen behandelt werden. Da die Position von einem der Haftfehler bekannt ist, ist auch die Position des anderen Haftfehlers bekannt. Demzufolge können bei derselben Haftfehler-Häufigkeit für Multi-Level-Speicherzellen weniger redundante Bits erzeugt werden, als redundante Bits für Single-Level-Speicherzellen erzeugt werden. Die Anzahl redundanter Bits kann beispielsweise um einen Faktor geringer sein, der gleich der Anzahl von Bits pro Speicherzelle ist.
-
Die 1 veranschaulicht ein Beispiel für ein Datenspeichersystem 100 gemäß einer Ausführungsform der vorliegenden Erfindung. Das Datenspeichersystem 100 enthält eine Steuerschaltung 101, eine Speicherschaltung 102 und eine Speicherschaltung 103. Bei der Steuerschaltung 101 kann es sich beispielsweise um eine Speicher-Controller-Schaltung, eine Prozessorschaltung oder jede andere Art von Steuerschaltung handeln, die Datenbits zum Speichern in den Speicherschaltungen 102 bis 103 codiert und/oder decodiert. Die Steuerschaltung 101 stellt codierte Datenbits für die Speicherschaltungen 102 bis 103 bereit und empfängt codierte Datenbits von diesen. Die codierten Datenbits werden in einer der Speicherschaltungen 102 bis 103 oder in beiden gespeichert. Die redundanten Bits können in einer der Speicherschaltungen 102 bis 103 oder in beiden gespeichert werden. Die codierten Datenbits und die redundanten Bits werden zwischen der Steuerschaltung 101 und den Speicherschaltungen 102 bis 103 mithilfe eines oder mehrerer On-Chip- oder externer Busse oder mithilfe anderer Arten von Signalleitungen übermittelt. Die Steuerschaltung 101, die Speicherschaltung 102 und die Speicherschaltung 103 können sich in derselben integrierten Schaltung oder in getrennten integrierten Schaltungen befinden. Daher kann es sich bei dem System 100 um eine einzige integrierte Schaltungsvorrichtung handeln, die die Schaltungen 101 bis 103 enthält. Alternativ kann das System 100 drei getrennte integrierte Schaltungsvorrichtungen 101 bis 103 enthalten.
-
Die 2 ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Datenbits und redundanter Bits zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern in einer Speicherschaltung veranschaulicht. In jeder der Speicherzellen in der Speicherschaltung ist mindestens ein digitaler Wert gespeichert. Die codierten Datenbits werden in den Speicherzellen in der Speicherschaltung gespeichert. Eine oder mehrere der Speicherzellen weisen einen Haftfehler auf. Die Adressen der Speicherzellen mit Haftfehlern und die digitalen Werte der Haftfehler sind vor dem Ausführen der Operationen der 2 bekannt und werden für einen Codierer bereitgestellt. Beispielsweise können wiederholte Lese- und Schreiboperationen ausgeführt werden, um zu ermitteln, welche Speicherzellen Fehler aufweisen, die mit dem Verhalten von Haftfehlern übereinstimmen. Die durch die Operationen der 2 erzeugten Datenbits werden anstelle der ursprünglichen Datenbits in den Speicherzellen gespeichert. Die Operationen der 2 können beispielsweise von einem Codierer in der Steuerschaltung 101 ausgeführt werden.
-
Anfangs empfängt der Codierer Datenbits, die zum Speichern in den Speicherzellen der Speicherschaltung bereitgestellt werden. Jedes der Datenbits wird zum Speichern in einer entsprechenden Speicherzelle der Speicherschaltung bereitgestellt. Eines oder mehrere der Datenbits werden zum Speichern in einer entsprechenden Speicherzelle bereitgestellt, die einen bekannten Haftfehler aufweist.
-
Bei der Operation 201 empfängt der Codierer eine erste Matrix. Jede Zeile der ersten Matrix entspricht einem einzigartigen Datenbit. Bei der Operation 202 erzeugt der Codierer eine zweite Matrix, die nur diejenigen Zeilen der ersten Matrix aufweist, die den Datenbits entsprechen, die zum Speichern in den Speicherzellen mit Haftfehlern bereitgestellt werden. Bei der Operation 203 erzeugt der Codierer eine dritte Matrix mit linear unabhängigen Spalten der zweiten Matrix. Bei der Operation 204 codiert der Codierer mithilfe der dritten Matrix die Datenbits, um codierte Datenbits und redundante Bits zu erzeugen.
-
Die digitalen Werte der Datenbits, die nicht mit ihren entsprechenden Haftfehlern übereinstimmen, werden invertiert, um entsprechende codierte Datenbits zu erzeugen. Die digitalen Werte der Datenbits, die mit ihren entsprechenden Haftfehlern übereinstimmen, werden nicht invertiert, um entsprechende codierte Datenbits zu erzeugen. Gemäß verschiedenen Ausführungsformen können die redundanten Bits Indexbits in einem Index enthalten, wie nachfolgend beschrieben wird.
-
Anschließend werden die codierten Datenbits in ihren entsprechenden Speicherzellen in der Speicherschaltung gespeichert. Die redundanten Bits werden ebenfalls in dem Speicher gespeichert. Die codierten Datenbits und die redundanten Bits können in derselben Speicherschaltung oder in verschiedenen Speicherschaltungen gespeichert werden. Beispielsweise können die codierten Datenbits in der Speicherschaltung 102 gespeichert werden, und die redundanten Bits können in der Speicherschaltung 103 gespeichert werden.
-
Die 3 ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für detailliertere Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Datenbits und redundanter Bits zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern veranschaulicht. Die codierten Datenbits werden in den Speicherzellen einer Speicherschaltung gespeichert. Eine oder mehrere der Speicherzellen weisen Haftfehler auf. Die Adressen der Speicherzellen mit Haftfehlern und die digitalen Werte der Haftfehler sind vor dem Ausführen der in der 3 gezeigten Operationen bekannt und werden für einen Codierer bereitgestellt. Die durch die Operationen der 3 erzeugten Datenbits werden anstelle der Eingangs-Datenbits in den Speicherzellen gespeichert. Die Operationen der 3 können beispielsweise von der Steuerschaltung 101 ausgeführt werden.
-
Zu Anfang werden Datenbits zum Speichern in Speicherzellen einer Speicherschaltung bereitgestellt. Jedes der Datenbits wird zum Speichern in einer entsprechenden Speicherzelle der Speicherschaltung bereitgestellt. Eine Teilmenge der Datenbits wird zum Speichern in entsprechenden Speicherzellen mit bekannten Haftfehlern bereitgestellt. Die Teilmenge kann ein oder mehrere Datenbits enthalten.
-
Vor dem Prozess des Codierens der Datenbits wird eine Matrix M mit einer eigenen Zeile für jedes der Datenbits erzeugt. Jede Zeile der Matrix M entspricht einem einzigartigen Datenbit. Für eine Anzahl von k Datenbits, die zum Speichern in Speicherzellen mit einer Anzahl von s Haftfehlern bereitgestellt werden, weist die Matrix M eine Anzahl von k Zeilen auf, und jede Teilmenge einer Anzahl von s Zeilen der Matrix M ist linear unabhängig, wobei s eine positive Ganzzahl ist, die kleiner als die positive Ganzzahl k ist. Die Matrix M kann zum Codieren der Datenbits verwendet werden, um codierte Datenbits zu erzeugen, die in einer Anzahl von k Speicherzellen gespeichert werden, wobei die Anzahl s der Haftfehler sich an beliebigen Positionen in den Speicherzellen befindet.
-
Ein Beispiel: Die Matrix M kann mithilfe eines Blockcodes wie beispielsweise einem Paritätsprüfcode erzeugt werden. Gemäß einem konkreteren Beispiel wird die Matrix M erzeugt, indem man die transponierte Paritätsprüfmatrix eines BCH-Codes nimmt, wobei sich BCH auf Bose Chaudhuri Hocquenghem bezieht. Für eine Anzahl von k Datenbits, die zum Speichern in Speicherzellen mit einer Anzahl von s Haftfehlern (wobei s < k) bereitgestellt werden, kann ein BCH-Code mit einer Blockgröße gleich k wie folgt erzeugt werden: Sind m > 2 und t < 2m-1 gegeben, kann ein BCH-Code so erzeugt werden, dass die Blocklänge n = 2m-1, die Anzahl der Paritätsprüfbits kleiner oder gleich m × t ist, und der minimale Abstand mindestens 2t + 1 beträgt, was außerdem bedeutet, dass alle 2t Spalten der Paritätsprüfmatrix linear unabhängig sind. Daher wird ein BCH-Code mit der Blocklänge k = 2log 2 (k+1)-1 (daher ist m = log2(k+1)) und einem minimalen Abstand s+1 (daher ist 2t+1=s+1, und daher ist t = s/2) erzeugt. Die sich ergebende Paritätsprüfmatrix Mp des BCH-Codes mit den Parametern n = k und t = s/2 weist höchstens m × t = (s/2) log2(k + 1) Zeilen und k Spalten auf, mit der Eigenschaft, dass jede Teilmenge von 2t = s Spalten linear unabhängig ist. Der Einfachheit halber wird log2k anstelle von log2(k + 1) verwendet. Die transponierte Paritätsprüfmatrix MP ist die Matrix M. Daher ist bei diesem Beispiel die Matrix M die transponierte Paritätsprüfmatrix MP. Die vorstehend beschriebene Anzahl der Paritätsprüfbits entspricht der Anzahl der Zeilen in der Paritätsprüfmatrix Mp und wird daher zu der Anzahl der Spalten in der transponierten Matrix M.
-
Die 3 veranschaulicht die Operationen 301 bis 309. Bei der Operation 301 wählt der Codierer eine Anzahl s von Zeilen der Matrix M aus, die den zum Speichern in Speicherzellen mit Haftfehlern bereitgestellten Datenbits entsprechen, um eine Matrix MS zu erzeugen. Die bei der Operation 301 verwendete Matrix M ist eine Matrix, die wie vorstehend beschrieben aus einer Paritätsprüfmatrix eines BCH-Codes oder mithilfe eines beliebigen Verfahrens erzeugt wird, durch das sichergestellt wird, dass alle s Zeilen der Matrix M linear unabhängig sind. Jede Zeile der Matrix M, die einem der zum Speichern in einer Speicherzelle mit einem Haftfehler bereitgestellten Datenbits entspricht, wird als eine Zeile der Matrix MS einbezogen. Die Zeilen der Matrix M, die zum Speichern in Speicherzellen ohne bekannte Haftfehler bereitgestellten Datenbits entsprechen, werden nicht in die Matrix MS einbezogen. Daher weist die Matrix MS eine Anzahl s von Zeilen und eine Anzahl (s log2(k+1))/2 von Spalten auf, wenn ein BCH-Code verwendet wird. Die Matrix MS hat vollen Rang, da die s Zeilen der Matrix MS aufgrund der Konstruktion garantiert linear unabhängig sind.
-
Bei der Operation 302 wählt der Codierer eine Anzahl s von Spalten der Matrix MS aus, die linear unabhängig sind, um eine quadratische Matrix M'S zu erzeugen, die vollständig invertierbar ist. Jede der Spalten der Matrix MS ist durch eine einzigartige Spaltennummer gekennzeichnet. Die Spaltennummern der s Spalten der Matrix MS, die bei der Operation 302 ausgewählt werden, um die quadratische Matrix M'S zu erzeugen, werden als die Spaltennummern b1, b2, ... bS bezeichnet. Der Codierer bewirkt, dass die Matrix M'S nur die Anzahl s von Spalten der Matrix Ms aufweist, die durch die Spaltennummern b1, b2, ... bS angezeigt werden. Die bei der Operation 302 erzeugte quadratische Matrix M's weist eine Anzahl s von Zeilen und eine Anzahl s von Spalten auf. Außerdem hat die Matrix M'S vollen Rang mit linear unabhängigen Spalten, und daher ist die Matrix M'S vollständig invertierbar. Bei einer Ausführungsform verwendet der Codierer die reduzierte Zeilenstufenform der Matrix MS, um die quadratische Matrix M'S zu erzeugen. Das Umwandeln von MS in Zeilenstufenform wird mithilfe einer Folge von Zeilenoperationen ausgeführt.
-
Eine Teilmenge der Datenbits wird zum Speichern in entsprechenden Speicherzellen mit bekannten Haftfehlern bereitgestellt. Der Codierer vergleicht die Teilmenge der Datenbits mit den digitalen Werten ihrer entsprechenden Haftfehler, um zu ermitteln, welche der Datenbits in der Teilmenge dieselben digitalen Werte wie ihre entsprechenden Haftfehler aufweisen, und welche der Datenbits in der Teilmenge andere digitale Werte als ihre entsprechenden Haftfehler aufweisen. Bei der Operation 303 in der 3 erzeugt der Codierer einen Vektor U, der die Datenbits in der Teilmenge, die dieselben digitalen Werte wie ihre entsprechenden Haftfehler aufweisen, und die Datenbits in der Teilmenge, die andere digitale Werte als ihre entsprechenden Haftfehler aufweisen, kennzeichnet. Der Vektor U ist ein 1 × s-Vektor mit einer Anzahl s von Werten. Der Vektor U hat eine 0 an seiner i-ten Position, wenn der i-te Haftfehler mit dem digitalen Wert seines entsprechenden Datenbits übereinstimmt, und eine 1 an seiner i-ten Position, wenn der i-te Haftfehler nicht mit dem digitalen Wert seines entsprechenden Datenbits übereinstimmt.
-
Bei der Operation 304 erzeugt der Codierer einen Vektor V durch Lösen der Gleichung M'S × V = U. Diese Gleichung hat eine Lösung, da die Matrix M'S vollständig invertierbar ist. Der Codierer invertiert die Matrix M'S und multipliziert anschließend die Inverse der Matrix M'S mit dem bei der Operation 303 erzeugten Vektor U, um den Vektor V zu erzeugen. Der Vektor V ist ein s × 1-Vektor mit einer Anzahl von s Werten.
-
Bei der Operation 305 erzeugt der Codierer Indexbits, die den Vektor V und die Spalten der Matrix Ms anzeigen, die bei der Operation 302 ausgewählt wurden, um die Matrix M's zu erzeugen. Die Indexbits sind redundante Bits. Die Indexbits werden als ein Index bereitgestellt, der den bei der Operation 308 erzeugten Datenbits zugehörig ist. Die Indexbits werden von einem Decodierer zum Decodieren der codierten Datenbits zwecks Regenerierens der Datenbits verwendet.
-
Bei einer Ausführungsform der Operation
305 erzeugt der Codierer eine einzigartige Binärzahl, um jede der s Spaltennummern b
1, b
2, ... b
S der Matrix M
S zu kennzeichnen, die bei der Operation
302 ausgewählt wurden, um die Matrix M'
S zu erzeugen. Diese Binärzahlen werden als eine erste Teilmenge der bei der Operation
305 erzeugten Indexbits bereitgestellt. Daher kennzeichnet bei dieser Ausführungsform die erste Teilmenge der Indexbits jede der Spaltennummern b
1, b
2, ... b
S der Matrix M
S, die bei der Operation
302 ausgewählt wurden, um die Matrix M'
S zu erzeugen. Die Anzahl der Indexbits, die zum Anzeigen der Binärzahlen verwendet werden, die die Spaltennummern b
1, b
2, ... b
S der Matrix M
S kennzeichnen, die zum Erzeugen der Matrix M'
S verwendet werden, wird nachfolgend in der Gleichung (1) gezeigt.
-
Die Gleichung (1) ist gleich weniger Indexbits als ein Index, in dem die genauen Bitpositionen einer Anzahl s von Haftfehlern aus k Bitpositionen verzeichnet sind, sofern (s log2k)/2 < k.
-
Bei der Operation
305 erzeugt der Codierer außerdem eine Anzahl s von Indexbits, die die Werte des Vektors V anzeigen. Die Anzahl s von Indexbits, die die Werte des Vektors V anzeigen, ist eine zweite Teilmenge der bei der Operation
305 erzeugten Indexbits. Die Gesamtzahl der bei der Operation
305 erzeugten Indexbits wird nachfolgend in der Gleichung (2) gezeigt.
-
Gemäß einer weiteren Ausführungsform der Operation 305 erzeugt der Codierer eine einzigartige Binärzahl, um jede der ((s log2k)/2 - s) Spaltennummern der Matrix Ms zu kennzeichnen, die bei der Operation 302 nicht ausgewählt wurden, um die Matrix M'S zu erzeugen. Diese Binärzahlen werden als die erste Teilmenge der bei der Operation 305 erzeugten Indexbits bereitgestellt. Bei dieser Ausführungsform kennzeichnet die erste Teilmenge der Indexbits jede der Spaltennummern der Matrix MS, die bei der Operation 302 nicht ausgewählt wurden, um die Matrix M'S zu erzeugen. Ein Decodierer leitet die Spalten der Matrix MS, die zum Erzeugen der Matrix M'S ausgewählt wurden, auf der Grundlage der Binärzahlen in dem Index ab, die die Spaltennummern der Matrix MS anzeigen, die nicht zum Erzeugen der Matrix M'S ausgewählt wurden. Bei dieser Ausführungsform erzeugt der Codierer außerdem eine Anzahl s von Indexbits, die die Werte des Vektors V bei der Operation 305 anzeigen.
-
Nur der Vektor V in den Indexbits hängt davon ab, ob die Datenbits in der Teilmenge mit den digitalen Werten ihrer entsprechenden Haftfehler übereinstimmen. Die verbleibenden Indexbits hängen allein von den Positionen der Haftfehler in den entsprechenden Speicherzellen ab. Nur eine Anzahl s der Indexbits ändert sich beim Codieren unterschiedlicher Mengen von Datenbits für dieselben Speicherzellen. Die verbleibenden Indexbits bleiben beim Codieren unterschiedlicher Mengen von Datenbits für dieselben Speicherzellen gleich.
-
Jede der Spalten der Matrix M ist durch eine einzigartige Spaltennummer gekennzeichnet. Die Spalten der Matrix M sind durch dieselben Spaltennummern gekennzeichnet wie die entsprechenden Spalten der Matrix Ms. Bei der Operation 306 erzeugt der Codierer eine Teilmatrix G der Matrix M durch Auswählen einer Anzahl s von Spalten aus der Matrix M mit denselben Spaltennummern b1, b2, ... bS, die aus der Matrix MS ausgewählt wurden, um bei der Operation 302 die Matrix M'S zu erzeugen. Die Teilmatrix G weist eine Anzahl k von Zeilen und eine Anzahl s von Spalten auf. Der Codierer bewirkt, dass die Teilmatrix G die Anzahl s von Spalten aus der Matrix M mit den Spaltennummern b1, b2, ... bS aufweist, die aus der Matrix MS ausgewählt wurden, um bei der Operation 302 die Matrix M'S zu erzeugen.
-
Bei der Operation 307 berechnet der Codierer einen Vektor W, der gleich der Teilmatrix G mal dem Vektor V ist (d. h.: W = G × V). Der Vektor W ist ein k × 1-Vektor mit k Werten, wobei k die Anzahl der Datenbits ist. Bei der Operation 308 wendet der Codierer den Vektor W auf die Datenbits an, um codierte Datenbits zu erzeugen. Bei der Operation 308 erzeugt der Codierer die codierten Datenbits durch Invertieren jedes i-ten Datenbits, das einen entsprechenden i-ten Wert gleich 1 in dem Vektor W aufweist, und durch Nichtinvertieren jedes i-ten Datenbits, das einen entsprechenden i-ten Wert gleich 0 in dem Vektor W aufweist. Da M'S × V = U ist, weist die Teilmenge der codierten Datenbits, die zum Speichern in Speicherzellen mit Haftfehlern bereitgestellt werden, dieselben digitalen Werte wie ihre entsprechenden Haftfehler auf. Bei der Operation 309 stellt der Codierer die codierten Datenbits zum Speichern in den entsprechenden Speicherzellen der Speicherschaltung bereit.
-
Einige der in der 3 gezeigten und vorstehend mit Bezug auf diese beschriebenen Operationen können in einer anderen als der in 3 gezeigten Reihenfolge ausgeführt werden. Beispielsweise kann die Operation 306 vor den Operationen 304 bis 305 ausgeführt werden.
-
Die 4 ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Decodieren der codierten Datenbits veranschaulicht, die durch die Operationen der 2 und/oder der 3 erzeugt wurden, um die Datenbits mithilfe der redundanten Bits zu regenerieren. Zu Anfang werden die codierten Datenbits aus den Speicherzellen der Speicherschaltung gelesen. Die codierten Datenbits und die Indexbits (d. h. die redundanten Bits) werden anschließend für einen Decodierer in einer Steuerschaltung wie beispielsweise der Steuerschaltung 101 bereitgestellt.
-
Bei der Operation 401 empfängt der Decodierer die Matrix M. Die Matrix M bei der Operation 401 ist dieselbe Matrix M, die bei den Operationen der 3 zum Erzeugen der codierten Datenbits verwendet wurde. Jede Teilmenge einer Anzahl s von Zeilen der Matrix M ist linear unabhängig. Bei der Operation 402 erzeugt der Decodierer eine Teilmatrix G der Matrix M mit Spalten aus der Matrix M, die auf der Grundlage einer ersten Teilmenge der Indexbits ausgewählt werden.
-
Wie vorstehend mit Bezug auf die erste Ausführungsform der Operation 305 in der 3 erörtert, kennzeichnet eine erste Teilmenge der Indexbits jede der s Spaltennummern b1, b2, ... bS der Matrix MS, die bei der Operation 302 ausgewählt wurden, um die Matrix M'S zu erzeugen. Wie vorstehend mit Bezug auf die zweite Ausführungsform der Operation 305 in der 3 erörtert, kennzeichnet die erste Teilmenge der Indexbits jede der Spaltennummern der Matrix MS, die bei der Operation 302 nicht zum Erzeugen der Matrix M'S ausgewählt wurden.
-
Bei der ersten Ausführungsform der Operation 305 bewirkt der Decodierer, dass die Teilmatrix G die Anzahl s von Spalten aus der Matrix M mit den Spaltennummern b1, b2, ... bS aufweist, die bei der Operation 305 von der ersten Teilmenge der Indexbits angezeigt werden. Bei der zweiten Ausführungsform der Operation 305 bewirkt der Decodierer, dass die Teilmatrix G die Anzahl s von Spalten aus der Matrix M mit den Spaltennummern b1, b2, ... bS aufweist, die bei der Operation 503 nicht von der ersten Teilmenge der Indexbits angezeigt werden. Die Teilmatrix G weist eine Anzahl k von Zeilen und eine Anzahl s von Spalten auf.
-
Wie vorstehend mit Bezug auf die Operation 305 in der 3 erörtert, zeigt eine zweite Teilmenge der Indexbits eine Anzahl s von Werten eines Vektors V an. Die zweite Teilmenge von Indexbits weist eine Anzahl s von Bits auf. Bei der Operation 403 erzeugt der Decodierer den Vektor V aus der zweiten Teilmenge der Indexbits. Bei der Operation 404 erzeugt der Decodierer einen Vektor W auf der Grundlage des Vektors V und der Matrix G. Der Decodierer berechnet den Vektor W durch Lösen der Gleichung W = G × V.
-
Bei der Operation 405 wendet der Decodierer den Vektor W auf die codierten Datenbits an, um die Datenbits zu regenerieren. Bei der Operation 405 regeneriert der Decodierer die Datenbits durch Invertieren jedes i-ten codierten Datenbits, das einen entsprechenden i-ten Wert gleich 1 in dem Vektor W aufweist, und durch Nichtinvertieren jedes i-ten codierten Datenbits, das einen entsprechenden i-ten Wert gleich 0 in dem Vektor W aufweist.
-
Die 5A bis 5E veranschaulichen gemäß Ausführungsformen der vorliegenden Erfindung Beispiele dafür, wie die Codieroperationen der 3 mithilfe beispielhafter Codiermatrizen auf eine beispielhafte Menge von Datenbits angewendet werden können. Die 5A veranschaulicht eine beispielhafte Menge von acht Datenbits, deren Bitpositionen von 0 bis 7 nummeriert sind. Die acht Datenbits werden zum Speichern in acht entsprechenden Speicherzellen einer Speicherschaltung bereitgestellt, wie in der 5A gezeigt wird. Die Speicherzellen, die den Bitpositionen 2, 4 und 7 entsprechen, weisen Haftfehler auf. Die Speicherzellen an den Bitpositionen 2 und 4 weisen Haftfehler an 0 (stuck-at 0) auf, wie durch „H0“ in der 5A gezeigt wird, und die Speicherzelle an der Bitposition 7 weist einen Haftfehler an 1 (stuck-at 1) auf, wie durch „H1“ in der 5A gezeigt wird.
-
Die 5B veranschaulicht 4 beispielhafte Codiermatrizen M, MS, M'S und G. Die Matrix M in dem Beispiel aus der 5B weist 8 Zeilen und 4 Spalten auf. Die acht Zeilen der Matrix M werden in der 5B als die Zeilen 0 bis 7 bezeichnet. Jede der 8 Zeilen der Matrix M entspricht einem anderen der 8 Datenbits. Da die acht Datenbits zum Speichern in Speicherzellen mit drei Haftfehlern an den entsprechenden Bitpositionen 2, 4 und 7 bereitgestellt werden, bewirkt der Codierer, dass die Matrix MS nur die Zeilen 2, 4 und 7 der Matrix M aufweist, die bei der Operation 301 den Speicherzellen mit den Haftfehlern entsprechen. Die anderen Zeilen der Matrix M werden nicht zu der Matrix MS hinzugefügt. Die Matrix MS weist drei Zeilen und vier Spalten auf. Die vier Spalten in jeder der Matrizen M und MS sind die Spalten 0, 1, 2 und 3, die in der 5B als Binärzahlen ausgedrückt als die Spaltennummern 00, 01, 10 und 11 bezeichnet werden.
-
Die Spalten der Matrix MS, die durch die Spaltennummern 11, 10 und 00 angezeigt werden, sind linear unabhängig. Die Spaltennummer 01 ist eine lineare Kombination der Spaltennummern 11 und 00. Daher bewirkt der Decodierer, dass die Matrix M'S die drei Spalten der Matrix MS mit den Spaltennummern 11, 10 und 00 aufweist, wie in der 5B gezeigt wird. Die Spaltennummern 11, 10 und 00 der Matrix MS und der Matrix M'S sind die Spaltennummern b1, b2 und b3, die bei der Operation 302 ausgewählt werden. Die quadratische Matrix M'S weist drei Zeilen und drei Spalten auf. Die Spaltennummer 01 der Matrix MS wird nicht zu der Matrix M'S hinzugefügt.
-
Bei der Operation 306 erzeugt der Codierer wie vorstehend beschrieben die Teilmatrix G der Matrix M. Die Teilmatrix G weist alle acht Zeilen der Matrix M auf, aber die Teilmatrix G weist nur die drei Spalten der Matrix M mit den Spaltennummern 11, 10 und 00 auf, wie in der 5B gezeigt wird. Die Teilmatrix G weist nur die Spalten der Matrix M mit denselben Spaltennummern 11, 10 und 00 (d. h. b1, b2 und b3) auf, die bei der Operation 302 aus der Matrix MS ausgewählt wurden, um die Matrix M'S zu erzeugen.
-
Bei der Operation 303 erzeugt der Codierer wie vorstehend beschrieben den Vektor U. Da der Haftfehler der Speicherzelle, die der Bitposition 2 entspricht, denselben digitalen Wert wie das Datenbit an der Position 2 aufweist, wie in der 5A gezeigt wird, ist der erste Wert des Vektors U 0, wie in der 5C gezeigt wird. Da die Haftfehler der Speicherzellen, die den Bitpositionen 4 und 7 entsprechen, andere digitale Werte als die Datenbits an den Bitpositionen 4 und 7 aufweisen, wie in der 5A gezeigt wird, sind der zweite und der dritte Wert des Vektors U 1, wie in der 5C gezeigt wird.
-
Die 5C veranschaulicht ein Beispiel dafür, dass der Codierer die Operation 304 ausführt, um durch Lösen der Gleichung M'S × V = U einen Vektor V zu erzeugen. Der Codierer invertiert die Matrix M'S und multipliziert anschließend die Inverse der Matrix M'S mit dem Vektor U, um den Vektor V zu erzeugen. Der Vektor V ist in dem Beispiel aus der 5C ein 3 × 1-Vektor.
-
Die 5D veranschaulicht ein Beispiel dafür, dass der Codierer die Operation 307 ausführt, um durch Lösen der Gleichung W = G × V einen Vektor W zu erzeugen. In dem Beispiel aus der 5D ist der Vektor W ein 1 × 8-Vektor mit acht Werten. Nachdem der Codierer den Vektor W berechnet hat, wendet der Codierer den Vektor W auf die Datenbits an, um die in der 5E gezeigten codierten Datenbits zu erzeugen. Der Codierer kann den Vektor W beispielsweise auf die Datenbits anwenden, indem er eine Modulo-2-Addition an jedem Paar aus einem i-ten Wert des Vektors W und einem entsprechenden i-ten Datenbit ausführt, um die codierten Datenbits zu erzeugen.
-
Die 5E veranschaulicht außerdem Indexbits für die codierten Datenbits. Die ersten beiden Indexbits zeigen die Spaltennummer 01 der Spalte der Matrix Ms an, die nicht in die Matrix M'S übertragen wurde, wie es vorstehend mit Bezug auf die zweite Ausführungsform der Operation 305 beschrieben wurde. Der Decodierer leitet die drei Spalten der Matrix MS, die zum Erzeugen der Matrix M's verwendet wurden, auf der Grundlage der ersten zwei Indexbits ab, die die Spaltennummer 01 der Spalte der Matrix MS anzeigen, die bei der Operation 302 nicht in die Matrix M'S übertragen wurde. Die nächsten 3 Indexbits zeigen die Werte 101 des Vektors V an.
-
Gemäß einer weiteren Ausführungsform kann die Anzahl von Indexbits in dem Index verringert werden, wenn die Anzahl k der Datenbits sehr groß ist. Diese Ausführungsform wird als eine asymptotische Verbesserung (asymptotic improvement) bezeichnet. Bei dieser Ausführungsform wird ein Block von Datenbits zum Speichern in entsprechenden Speicherzellen einer Speicherschaltung bereitgestellt. Für einen Parameter t, wobei t eine positive Ganzzahl ist, wird der Block von Datenbits in eine Anzahl s/t von Teilblöcken unterteilt, wobei s die Anzahl von Haftfehlern in den entsprechenden Speicherzellen der Speicherschaltung ist. Jeder der Teilblöcke von Datenbits entspricht einem Teilblock der Speicherzellen. Jeder der Teilblöcke der Speicherzellen weist genau dieselbe Anzahl t von Speicherzellen mit Haftfehlern auf Seien a1, a2, ... , as/t die Anzahlen von Datenbits in der Anzahl s/t von Teilblöcken der Datenbits. Jeder der Teilblöcke kann eine andere Anzahl von Datenbits aufweisen. Alternativ können einige oder alle der Teilblöcke dieselbe Anzahl von Datenbits aufweisen.
-
Um die Anzahlen von Datenbits a
1, a
2, ... , a
s/t in den Teilblöcken zu speichern, erzeugt ein Codierer eine Anzahl von Indexbits, die gleich
ist, wobei k die Gesamtzahl von Datenbits in dem Block von Datenbits ist. Bei jedem dieser Teilblöcke von Datenbits verwendet der Codierer das vorstehend mit Bezug auf die
3 beschriebene linearalgebraische Verfahren, mit dessen Hilfe in dem Index eine Anzahl von Indexbits gleich 2t + t log
2log
2a
i erzeugt wird. Die Gesamtzahl der von dem Codierer bei dieser Ausführungsform erzeugten Indexbits wird in der Gleichung (3) gezeigt.
-
Die Funktion log
2 log
2 × ist eine konkave Funktion. Die Gleichung (3) hat ihren Maximalwert, wenn alle der ai's in der Gleichung (3) gleich sind, so dass jeder der Teilblöcke dieselbe Anzahl von Bits aufweist. Die nachfolgende Gleichung (4) zeigt die Gesamtzahl der von dem Codierer bei dieser Ausführungsform erzeugten Indexbits, wenn jeder der Teilblöcke dieselbe Anzahl von Bits aufweist.
-
Die Anzahl von Indexbits in dem Index bei dieser Ausführungsform kann im Hinblick auf den Parameter t minimiert werden. Wenn q = k/s ist, wird durch t = (log
2 q)
2 die Anzahl von Indexbits in dem Index bei dieser Ausführungsform minimiert. Für diesen Wert von t wird die Gesamtzahl von Indexbits in dem Index nachfolgend in der Gleichung (5) gezeigt.
-
Der zweite Term der Gleichung (5) lautet etwa s log
2 log
2 q. Jeder der verbleibenden Terme der Gleichung (5) ist kleiner als s, wenn q > 3 ist. Daher lässt sich die Gleichung (5) vereinfachen, wie nachfolgend in der Gleichung (6) gezeigt wird. Die nachfolgende Gleichung (6) zeigt die maximale Anzahl von Indexbits gemäß dieser Näherung.
-
Ausführungsformen der vorliegenden Erfindung können beispielsweise mithilfe von Hardware, Software oder einem Programmanweisungen enthaltenden computerlesbaren Medium oder einer Kombination von diesen realisiert werden. Ausführungsformen der vorliegenden Erfindung können als Programmcode ausgeführt sein, der auf einem nicht flüchtigen computerlesbaren Medium gespeichert ist, das auf einem Computer ausgeführt werden kann. Mithilfe von Ausführungsformen der vorliegenden Erfindung realisierte Software sowie Ergebnisse der vorliegenden Erfindung können auf einem computerlesbaren Medium wie beispielsweise Halbleiterspeicher, Phasenwechselspeicher, Festplattenspeicher, Compact Disc (CD), digitale Videoplatte (digital video disc, DVD) oder anderen Medien gespeichert werden. Ergebnisse der vorliegenden Erfindung können zu verschiedenen Zwecken verwendet werden, wie beispielsweise zum Ausführen oder Verarbeiten durch einen Prozessor, zum Anzeigen für einen Benutzer, zum Übertragen in einem Signal über ein Netzwerk usw. Ausführungsformen der vorliegenden Erfindung können außerdem als eine computerlesbare Programmcode-Einheit ausgeführt sein, die auf einem nicht flüchtigen computerlesbaren Medium gespeichert ist, um eine Anzahl von über ein Netzwerk miteinander verbundenen Computersystemen dazu zu veranlassen, eine verteilte Bearbeitung durchzuführen.
-
Die vorstehende Beschreibung der beispielhaften Ausführungsformen der vorliegenden Erfindung wird zum Zweck der Veranschaulichung und Beschreibung vorgelegt. Die vorstehende Beschreibung soll weder vollständig sein, noch die vorliegende Erfindung auf die hier offenbarten Beispiele beschränken. In einigen Fällen können Merkmale der vorliegenden Erfindung ohne eine entsprechende Verwendung anderer dargelegter Merkmale genutzt werden. Zahlreiche Abänderungen, Ersetzungen und Abwandlungen sind angesichts der vorstehend beschriebenen Lehren möglich, ohne vom Schutzumfang der vorliegenden Erfindung abzuweichen.