-
GEBIET DER OFFENBARUNG
-
Die vorliegende Offenbarung betrifft Datenspeichersysteme und ganz besonders Techniken zum Codieren und Decodieren unter Verwendung eines kombinatorischen Zahlensystems.
-
HINTERGRUND
-
Viele Datenkommunikationssysteme verwenden Fehlerkorrekturcodierer und -decodierer, um Fehler in Daten zu erkennen und zu korrigieren. Ein Datenkommunikationssystem kann beispielsweise statistische Fehler korrigieren, die mit einer Rate von etwa 1 × 10–4 erzeugt werden. Um gegen eine Fehlerrate von etwa 1 × 10–4 zu schützen, erzeugt ein Fehlerkorrekturcodierer codierte Bits mit etwa 10% mehr Bits als seine Eingangsbits.
-
Ein Phasenwechselspeicher (phase change memory, PCM) ist eine Klasse nichtflüchtiger Speicher. PCM-Geräte haben gegenüber einem traditionellen nichtflüchtigen Flash-Speicher viele Vorteile. PCM-Geräte können jedoch eine hohe Anzahl von Fehlern erzeugen, die von einem Leistungsabfall induziert werden. Ein PCM-Gerät kann beispielsweise Fehler mit einer Rate von 1 × 10–2 oder höher erzeugen.
-
An den Grenzen der Dauerhaftigkeit wird die Fehlerrate in nichtflüchtigen Speichergeräten vom Leistungsabfall beherrscht. Zu Fehlern, die von einem Leistungsabfall verursacht werden, zählen Haftfehler, die andere Eigenschaften und Statistiken haben als die statistischen Fehler, die in Datenkommunikationssystemen üblich sind.
-
KURZE DARSTELLUNG
-
Gemäß einigen Ausführungsformen weist ein Datenspeichersystem eine Speicherschaltung mit Speicherzellen und eine Steuerschaltung auf. Die Steuerschaltung ist dazu bedienbar, Datenbits zu empfangen, die zur Speicherung in den Speicherzellen bereitgestellt werden. Eine Teilmenge der Speicherzellen hat vorherbestimmte Haftfehler. Die Steuerschaltung ist dazu bedienbar, einen Binomialkoeffizienten für jeden der vorherbestimmten Haftfehler auf Basis einer Bitposition eines entsprechenden der vorherbestimmten Haftfehler in den Speicherzellen zu errechnen. Die Steuerschaltung ist dazu bedienbar, die Binomialkoeffizienten zu addieren, um unter Verwendung eines kombinatorischen Zahlensystems eine codierte Zahl zu erzeugen. Die Steuerschaltung ist dazu bedienbar, eine erste Menge redundanter Bits zu erzeugen, die die codierte Zahl anzeigen. Die erste Menge redundanter Bits wird dazu verwendet, Bits zu decodieren, die aus den Speicherzellen gelesen wurden, um die Datenbits wiederherzustellen.
-
Verschiedene Gegenstände, Merkmale und Vorteile der vorliegenden Erfindung werden bei Berücksichtigung der folgenden ausführlichen Beschreibung und der begleitenden Zeichnungen offenbar werden.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 stellt ein Beispiel eines Datenspeichersystems gemäß einer Ausführungsform der vorliegenden Erfindung dar.
-
2 ist ein Ablaufschema, das Beispiele von Arbeitsschritten zum Erzeugen redundanter Bits zum Korrigieren von Fehlern, die von Speicherzellen in einer Speicherschaltung mit Haftfehlern verursacht wurden, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
-
3 ist ein Ablaufschema, das Beispiele von Arbeitsschritten zum Verwenden redundanter Bits, um Fehler in Datenbits zu korrigieren, die von Haftfehlern in Speicherzellen einer Speicherschaltung verursacht werden, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
-
4 ist ein Ablaufschema, das Beispiele von Arbeitsschritten, die von einem Decodierer verwendet werden, um die Bitpositionen vorherbestimmter Haftfehler in den Speicherzellen unter Verwendung der codierten Zahl, die von einer Teilmenge der redundanten Bits angezeigt wird, zu bestimmen, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
-
5 stellt Beispiele von Datenbits und Speicherzellen, die mit den hierin beschriebenen Codier- und Decodiertechniken verwendet werden können, gemäß einer Ausführungsform der vorliegenden Erfindung dar.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Gemäß einigen hierin beschriebenen Ausführungsformen werden während eines Schreibvorgangs Datenbits zur Speicherung in Speicherzellen einer Speicherschaltung bereitgestellt. Ein Codierer erzeugt redundante Bits für die Datenbits auf Basis vorherbestimmter Haftfehler in den Speicherzellen. Die Datenbits werden dann in den Speicherzellen gespeichert. Nachdem die Datenbits während eines Lesevorgangs aus den Speicherzellen gelesen wurden, verwendet ein Decodierer die redundanten Bits dazu, Fehler in den Datenbits zu korrigieren, die von den vorherbestimmten Haftfehlern verursacht werden. Die Speicherschaltung kann beispielsweise eine Phasenwechselspeicherschaltung (die z. B. Chalkogenidglas verwendet) oder eine andere Art von Speicherschaltung sein, die Haftfehler hat. Wie hierin beschriebene Datenbits können beispielsweise benutzererzeugte Bits, Softwarecode darstellende Bits und beliebige andere digitale Werte beinhalten.
-
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 logisch hohen digitalen Wert speichern und eine Speicherzelle mit einem Haftfehlerwert von 0 kann nur einen logisch niedrigen digitalen Wert speichern. Folglich kann nur ein logisch hoher digitaler Wert aus einer Speicherzelle mit einem Haftfehlerwert von 1 (d. h. haftend bei 1) gelesen werden und nur ein logisch niedriger digitaler Wert kann aus einer Speicherzelle mit einem Haftfehlerwert von 0 (d. h. haftend bei 0) gelesen werden. Speicherzellen mit Haftfehlern haben im Allgemeinen Haftfehler, die im Zeitablauf stabil sind.
-
Wenn einige der Speicherzellen in der Speicherschaltung Haftfehler haben, werden die digitalen Werte der Haftfehler und die Adressen der Speicherzellen mit den Haftfehlern vor dem Codiervorgang bestimmt und dem Codierer bereitgestellt. Der Codierer erzeugt die redundanten Bits unter Verwendung der digitalen Werte und adressiert diese vorherbestimmten Haftfehler. Die Datenbits werden in den Speicherzellen der Speicherschaltung gespeichert. Die redundanten Bits können in derselben Speicherschaltung wie die Datenbits oder in einer anderen Speicherschaltung gespeichert werden.
-
Anschließend werden die Datenbits und die redundanten Bits aus dem Speicher gelesen und einem Decodierer bereitgestellt. Der Decodierer korrigiert Fehler in den Datenbits, die von den vorherbestimmten Haftfehlern verursacht wurden, unter Verwendung der redundanten Bits. Der Decodierer bewirkt, dass die Datenbits frei von Fehlern sind, die von den vorherbestimmten Haftfehlern in den Speicherzellen verursacht wurden.
-
Die hierin beschriebenen Techniken sind direkt auf Multi-Level-Speicherzellen anwendbar. Multi-Level-Speicherzellen können mehr als ein Bit pro Speicherzelle speichern. Wenn beispielsweise eine Speicherzelle 2 Bits hält und sie hängen bleibt, werden die Werte dieser zwei Bits festgelegt und sie können als zwei separate Haftfehlerorte behandelt werden. Da der Ort eines der Haftfehler bekannt ist, ist auch der Ort des anderen Haftfehlers bekannt. Infolgedessen können bei der gleichen Haftfehlerrate weniger redundante Bits für Multi-Level-Speicherzellen erzeugt werden als die redundanten Bits, die für Single-Level-Speicherzellen erzeugt werden. Eine Single-Level-Speicherzelle speichert nur ein Bit pro Speicherzelle. Die Anzahl redundanter Bits kann kleiner sein, beispielsweise um einen Faktor, der der Anzahl von Bits pro Speicherzelle entspricht.
-
1 stellt ein Beispiel eines Datenspeichersystems 100 gemäß einer Ausführungsform der vorliegenden Erfindung dar. Das Datenspeichersystem 100 weist eine Steuerschaltung 101, eine Speicherschaltung 102 und eine Speicherschaltung 103 auf. Die Steuerschaltung 101 kann beispielsweise eine Speichercontrollerschaltung, eine Prozessorschaltung oder eine beliebige andere Art von Steuerschaltung sein, die redundante Bits zur Speicherung in den Speicherschaltungen 102–103 erzeugt. Die Steuerschaltung 101 kann den Speicherschaltungen 102–103 Datenbits bereitstellen und Datenbits von diesen empfangen. Die Datenbits werden in einem der oder beiden Speicherschaltungen 102–103 gespeichert. Die redundanten Bits können in einer der oder beiden Speicherschaltungen 102–103 gespeichert werden. Die Datenbits und die redundanten Bits werden zwischen der Steuerschaltung 101 und den Speicherschaltungen 102–103 durch einen oder mehrere On-Chip- oder externe Busse oder durch andere Arten von Signalleitungen übertragen. Die Steuerschaltung 101, die Speicherschaltung 102 und die Speicherschaltung 103 können sich in derselben integrierten Schaltung oder in separaten integrierten Schaltungen befinden. Folglich kann das System 100 ein einziges integriertes Schaltungsbauelement sein, das die Schaltungen 101–103 aufweist. Alternativ dazu kann das System 100 drei separate integrierte Schaltungsbauelemente 101–103 aufweisen.
-
2 ist ein Ablaufschema, das Beispiele von Arbeitsschritten zum Erzeugen redundanter Bits zum Korrigieren von Fehlern, die von Speicherzellen in einer Speicherschaltung mit Haftfehlern verursacht wurden, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt. Jede der Speicherzellen in der Speicherschaltung speichert mindestens einen digitalen Wert. Eine oder mehrere der Speicherzellen hat bzw. haben einen Haftfehler. Die Adressen der Speicherzellen mit Haftfehlern und die digitalen Werte der Haftfehler werden vor dem Durchführen der Arbeitsschritte von 2 bestimmt und werden einem Codierer bereitgestellt. Es können beispielsweise wiederholte Lese- und Schreibvorgänge durchgeführt werden, um zu bestimmen, welche Speicherzellen Fehler aufweisen, die mit einem Haftfehlerverhalten im Einklang stehen, um eine Menge vorherbestimmter Haftfehler zu erzeugen. Die Arbeitsschritte von 2 können beispielsweise von einem Codierer (z. B. Firmware) in der Steuerschaltung 101 durchgeführt werden.
-
Im Arbeitsschritt 201 empfängt der Codierer eine k Anzahl von Datenbits, die zur Speicherung in der Speicherschaltung bereitgestellt werden. k ist eine positive ganze Zahl. Eine Menge von Speicherzellen in der Speicherschaltung wird zum Speichern der Datenbits identifiziert. Die zum Speichern der Datenbits identifizierten Speicherzellen sind in der Regel eine Teilmenge der Gesamtanzahl von Speicherzellen in der Speicherschaltung. Die zum Speichern der Datenbits identifizierten Speicherzellen können beispielsweise einer Seite von Speicherzellen in der Speicherschaltung entsprechen. Jedes der Datenbits wird zur Speicherung in einer entsprechenden Speicherzelle der Speicherschaltung bereitgestellt. Eines oder mehrere der Datenbits wird bzw. werden zur Speicherung in einer entsprechenden Speicherzelle bereitgestellt, die einen vorherbestimmten Haftfehler hat.
-
Im Arbeitsschritt 202 errechnet der Codierer einen Binomialkoeffizienten für jeden der vorherbestimmten Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen. Die Bitpositionen der vorherbestimmten Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen werden als c1, c2, ... cs bezeichnet, wobei s die Anzahl vorherbestimmter Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen ist. Die Bitpositionen c1, c2, ... cs sind streng zunehmende positive ganze Zahlen, so dass 0 ≤ c1 < c2 < ... < cs.
-
In einer Ausführungsform, in der die Datenbits zur Speicherung in einer hohen Anzahl von Speicherzellen bereitgestellt werden, entspricht (oder entspricht ungefähr) die Anzahl s der Anzahl von Datenbits k multipliziert mit der Bitfehlerrate α von Haftfehlern in den Speicherzellen (d. h. s = α × k = αk). In dieser Ausführungsform, wenn die Anzahl vorherbestimmter Haftfehler kleiner als s = αk ist, behandelt der Codierer einige der Speicherzellen, die keine Haftfehler haben, als wenn sie vorherbestimmte Haftfehler hätten, mit willkürlichen Haftfehlerwerten, so dass die Gesamtanzahl von Speicherzellen, die von dem Codierer behandelt werden, als wenn sie vorherbestimmte Haftfehler hätten, s entspricht. Bei Single-Level-Speicherzellen entspricht die Anzahl k ebenfalls der Anzahl der zum Speichern der Datenbits identifizierten Speicherzellen.
-
Der Binomialkoeffizient, den der Codierer im Arbeitsschritt 202 für jeden vorherbestimmten Haftfehler berechnet, entspricht ( n / j), wobei n eine ganze Zahl ist, die der Bitposition c1, c2, ... cs des entsprechenden vorherbestimmten Haftfehlers in den Speicherzellen entspricht, und j ein Index ist, der den entsprechenden vorherbestimmten Haftfehler eindeutig identifiziert. Der Index j ist eine positive ganze Zahl, die sich fortlaufend von 1 zu s ändert, um jeden der vorherbestimmten Haftfehler eindeutig zu identifizieren, und j ≤ n. Der Binomialkoeffizient ( n / j), entspricht der Anzahl von Kombinationen von j Elementen, die aus einer Menge von n Elementen ausgewählt werden können. Der Binomialkoeffizient ( n / j), entspricht der Anzahl von j-Kombinationen in einer Menge mit n Elementen, wobei die Reihenfolge von j Elementen in jeder der j-Kombinationen keine Rolle spielt und es keine Wiederholungen von mehr als einem der j Elemente in jeder der j-Kombinationen gibt. Folglich ist jede Kombination eine Art und Weise, mit der j Elemente aus einer Menge von n Elementen ausgewählt werden können, wobei die Reihenfolge außer Acht gelassen wird. Techniken zum Berechnen des Binomialkoeffizienten für jeden vorherbestimmten Haftfehler in den Speicherzellen werden durch die in der folgenden Gleichung (1) gezeigten Formeln bereitgestellt, wobei j ≤ n.
-
-
Der Codierer berechnet einen Binomialkoeffizienten für jeden positiven ganzen Zahlenwert von j von 1 bis s unter Verwendung der Bitposition n des entsprechenden vorherbestimmten Haftfehlers, um s Binomialkoeffizienten zu erzeugen. Die s Binomialkoeffizienten für die s vorherbestimmten Haftfehler in den Speicherzellen der Speicherschaltung, die zum Speichern der Datenbits identifiziert wurden, kann wie in Gleichung (2) gezeigt geschrieben werden.
-
-
Ein kombinatorisches Zahlensystem, das auch als Combinadics bezeichnet wird, für eine beliebige positive ganze Zahl s ist eine Entsprechung zwischen einer Menge von Anzahlen und s-Kombinationen der Menge von Anzahlen, die als die streng zunehmende Abfolge von Anzahlen 0 ≤ c1 < c2 < ... < cs dargestellt wird. Gemäß einer Ausführungsform wird ein kombinatorisches Zahlensystem dazu verwendet, die Bitpositionen der vorherbestimmten Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen anzuzeigen. In dieser Ausführungsform ist das kombinatorische Zahlensystem eine bijektive Abbildung der ( k / s), Kombinationen auf der numerischen Sequenz [[0, ( k / s), – 1]], wobei k die Anzahl von Datenbits ist und s die Anzahl vorherbestimmter Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen ist. Alle möglichen Bitpositionen vorherbestimmter Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen können unter Verwendung dieser bijektiven Abbildung exakt abgebildet werden.
-
Eine s-Kombination einer Menge S ist eine Teilmenge von S mit s verschiedenen Elementen. Ein kombinatorisches Zahlensystem stellt eine Darstellung, jeweils durch eine einzige Zahl, aller möglichen s-Kombinationen einer Menge S von k Elementen bereit. Bei Auswahl von {0, 1, ..., k – 1} als eine derartige Menge für ein beliebiges k kann es eingerichtet werden, dass die Darstellung einer gegebenen s-Kombination C von dem Wert von k unabhängig ist (obwohl k ausreichend groß sein muss). Die Berücksichtigung von C als eine Teilmenge einer größeren Menge durch Erhöhen von k ändert die Zahl, die C darstellt, nicht.
-
Die Anzahl N, die in dem kombinatorischen Zahlensystem vom Grad s mit einer s-Kombination C assoziiert ist, ist die Anzahl von s-Kombinationen, die in der gegebenen Ordnung streng weniger als C sind. Diese Anzahl N kann aus C = {c
s, ..., c
2, c
1} bei c
s > > C
2 > c
1 wie folgt berechnet werden. Aus der Definition der Ordnung folgt, dass es für jede s-Kombination S, die streng weniger als C ist, einen eindeutigen Index i gibt, so dass c
i aus S fehlt, während c
s, ..., c
i+1 in S vorliegen, und kein anderer Wert, der größer als c
i ist, in S vorliegt. Folglich können jene s-Kombinationen S entsprechend den möglichen Werten 1, 2, ..., s von i gruppiert werden und jede Gruppe wird separat gezählt. Für einen gegebenen Wert von i werden c
s, ..., c
i+1 in S eingebunden und die restlichen i Elemente von S werden aus den nicht negativen ganzen Zahlen ausgewählt, die streng niedriger als c
i sind. Jede derartige Auswahl führt zu s-Kombinationen S, die streng weniger als C sind. Die Anzahl möglicher Auswahlen ist
wobei es sich um die Anzahl von Kombinationen in Gruppe i handelt. Die Gesamtanzahl N von s-Kombinationen, die streng weniger als C sind, entspricht dann
Dies ist der Index (der bei 0 beginnt) von C in der geordneten Liste von s-Kombinationen.
-
Im Arbeitsschritt 203 berechnet der Codierer eine codierte Zahl N, indem er die s Binomialkoeffizienten in Gleichung (2) unter Verwendung eines kombinatorischen Zahlensystems addiert, wie in Gleichung (3) gezeigt. In Gleichung (3) sind c1, c2, c3, ... cs die Bitpositionen der s vorherbestimmten Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen.
-
-
Folglich entspricht die codierte Zahl N der Summe der s Binomialkoeffizienten für die vorherbestimmten Haftfehler in den zum Speichern der Datenbits identifizierten Speicherzellen. Im Arbeitsschritt 203 erzeugt der Codierer eine binäre Darstellung der codierten Zahl N als eine erste Menge redundanter Bits für die in den Speicherzellen zu speichernden Datenbits.
-
Im Arbeitsschritt 204 erzeugt der Codierer s redundante Bits, die anzeigen, welche der Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert werden sollen, dieselben digitalen Werte wie ihre entsprechenden vorherbestimmten Haftfehler haben und welche der Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert werden sollen, andere digitale Werte als ihre entsprechenden vorherbestimmten Haftfehler haben. Als ein Beispiel können die s redundanten Bits, die im Arbeitsschritt 204 erzeugt werden, eine 0 in ihrer i-ten Bitposition haben, wenn der i-te Haftfehler mit dem digitalen Wert des in dieser Speicherzelle zu speichernden Datenbits übereinstimmt, und eine 1 in ihrer i-ten Bitposition haben, wenn der i-te Haftfehler nicht mit dem digitalen Wert des in dieser Speicherzelle zu speichernden Datenbits übereinstimmt.
-
In der Ausführungsform von 2 erzeugt der Codierer eine Menge von redundanten Bits, die die codierte Zahl N anzeigen, die aus Gleichung (3) berechnet wurde, und eine andere Menge von redundanten Bits, die anzeigen, welche der Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert werden sollen, mit den digitalen Werten entsprechender jener Haftfehler übereinstimmen. Die folgende Gleichung (4) zeigt die Anzahl redundanter Bits R an, die der Codierer in den Arbeitsschritten 203–204 erzeugt, wobei s = αk. Die folgenden Gleichungen (5) und (6) zeigen die maximale Anzahl redundanter Bits R an, die der Codierer in den Arbeitsschritten 203–204 erzeugt. R = αk + log2(Σ αk / i=0( k / i)) (4) R ≤ αk + H(α)k ≈ k(α – αlog2(α) – (1 – α)log2(1 – α)) (5) R ≤ s + slog2(α–1) + s / ln(2) ≤ (1 + 1 / ln(2))s + slog2(α–1) (6)
-
Die Datenbits werden in den zum Speichern der Datenbits identifizierten Speicherzellen gespeichert. Die Datenbits werden während eines Schreibvorgangs vor, während oder nach den Arbeitsschritten von 2 in den Speicherzellen gespeichert. Die redundanten Bits werden in einem Speicher gespeichert und mit den Datenbits assoziiert. Die redundanten Bits können in derselben Speicherschaltung wie die Datenbits oder in einer anderen Speicherschaltung gespeichert werden. Während eines Lesevorgangs, der auf die Datenbits aus den Speicherzellen zugreift, werden die redundanten Bits aus dem Speicher gelesen und dazu verwendet, Fehler in den Datenbits zu korrigieren, die von den vorherbestimmten Haftfehlern in den Speicherzellen verursacht werden.
-
3 ist ein Ablaufschema, das Beispiele von Arbeitsschritten zum Verwenden redundanter Bits, um Fehler in Datenbits zu korrigieren, die von Haftfehlern in Speicherzellen einer Speicherschaltung verursacht werden, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt. Die Datenbits werden während eines Lesevorgangs aus den Speicherzellen der Speicherschaltung gelesen und einem Decodierer bereitgestellt. Redundante Bits, die mit den Datenbits assoziiert sind, werden aus dem Speicher gelesen und dem Decodierer bereitgestellt. Die redundanten Bits werden durch den Codierer unter Verwendung der Arbeitsschritte von 2 erzeugt und werden mit den Datenbits assoziiert. Der Decodierer korrigiert Fehler in den Datenbits, die von den vorherbestimmten Haftfehlern in den Speicherzellen verursacht werden, unter Verwendung der redundanten Bits, die mit den Datenbits assoziiert sind.
-
Im Arbeitsschritt 301 empfängt der Decodierer k Datenbits, die während eines Lesevorgangs aus den Speicherzellen gelesen werden. Der Decodierer empfängt außerdem während des Lesevorgangs redundante Bits. Die redundanten Bits werden aus derselben Speicherschaltung wie die Datenbits oder aus einer anderen Speicherschaltung gelesen.
-
Im Arbeitsschritt 302 identifiziert der Decodierer eine Teilmenge der redundanten Bits als die codierte Zahl N anzeigend und eine andere Teilmenge der redundanten Bits als anzeigend, welche der ursprünglichen Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert wurden, mit den digitalen Werten entsprechender jener Haftfehler übereinstimmten. Als ein Beispiel kann der Codierer bewirken, dass die ersten s redundanten Bits anzeigt, welche der ursprünglichen Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert wurden, mit den digitalen Werten entsprechender jener Haftfehler übereinstimmten, und die restlichen redundanten Bits die codierte Zahl N anzeigen. In diesem Beispiel verwendet der Decodierer die ersten s redundanten Bits, um anzuzeigen, welche der ursprünglichen Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert wurden, mit den digitalen Werten entsprechender jener Haftfehler übereinstimmten, und die restlichen redundanten Bits als den binären Wert der codierten Zahl N. In diesem Beispiel empfängt oder speichert der Decodierer die Bitfehlerrate α und berechnet s unter Verwendung der Gleichung s = αk.
-
Im Arbeitsschritt 303 bestimmt der Decodierer die Bitposition jedes der vorherbestimmten Haftfehler in den Speicherzellen unter Verwendung der codierten Zahl N, die von einer Teilmenge der redundanten Bits angezeigt wird. N entspricht der Summe der s Binomialkoeffizienten für die vorherbestimmten Haftfehler in den Speicherzellen, die die Datenbits speicherten, wie oben beschrieben und in Gleichung (3) gezeigt. Der Decodierer kann beispielsweise die Bitpositionen der vorherbestimmten Haftfehler unter Verwendung der codierten Zahl N bestimmen, wie im Folgenden in Bezug auf 4 beschrieben.
-
Im Arbeitsschritt 304 stellt der Decodierer die digitalen Werte der Datenbits, die aus den Speicherzellen gelesen wurden, unter Verwendung der Bitpositionen der vorherbestimmten Haftfehler, die im Arbeitsschritt 303 erzeugt wurden, und der restlichen redundanten Bits ein, um korrigierte Datenbits zu erzeugen. Die restlichen redundanten Bits zeigen an, welche der ursprünglichen Datenbits, die in Speicherzellen mit vorherbestimmten Haftfehlern gespeichert wurden, mit den digitalen Werten entsprechender jener Haftfehler übereinstimmten. Der Decodierer kann die digitalen Werte eines oder mehrerer der Datenbits, die aus den Speicherzellen mit vorherbestimmten Haftfehlern gelesen wurden, auf Basis der digitalen Werte der restlichen redundanten Bits einstellen.
-
Als ein Beispiel haben die restlichen redundanten Bits eine 0 in ihrer i-ten Bitposition, wenn der i-te vorherbestimmte Haftfehler mit dem digitalen Wert des ursprünglichen Datenbits, das in dieser Speicherzelle gespeichert wurde, übereinstimmt, und eine 1 in ihrer i-ten Bitposition, wenn der i-te vorherbestimmte Haftfehler nicht mit dem digitalen Wert des ursprünglichen Datenbits, das in dieser Speicherzelle gespeichert wurde, übereinstimmt. Der Decodierer bestimmt, welche der Datenbits aus Speicherzellen mit vorherbestimmten Haftfehlern gelesen wurden, auf Basis des Ergebnisses des Arbeitsschritts 303. Der Decodierer invertiert jedes der Datenbits, die aus einer Speicherzelle mit einem vorherbestimmten Haftfehler gelesen wurden, wenn ein entsprechendes der restlichen redundanten Bits anzeigt, dass das ursprüngliche Datenbit, das in dieser Speicherzelle gespeichert wurde, nicht mit dem digitalen Wert des Haftfehlers dieser Speicherzelle übereinstimmt, um ein entsprechendes der korrigierten Datenbits zu erzeugen. Der Decodierer invertiert die restlichen Datenbits, die aus den Speicherzellen gelesen wurden, nicht, um entsprechende der korrigierten Datenbits zu erzeugen.
-
4 ist ein Ablaufschema, das Beispiele von Arbeitsschritten, die von einem Decodierer verwendet werden, um die Bitpositionen vorherbestimmter Haftfehler in Speicherzellen unter Verwendung der codierten Zahl N, die von einer Teilmenge von redundanten Bits angezeigt wird, zu bestimmen, gemäß einer Ausführungsform der vorliegenden Erfindung darstellt. In der Ausführungsform von
4 ist j ein variabler Index, der einer positiven ganzen Zahl entspricht, und M ist ein variabler Parameter, der einer positiven ganzen Zahl entspricht. Im Arbeitsschritt
401 entspricht Index j der Anzahl von Haftfehlern s und Parameter M entspricht der codierten Zahl N, die von der Teilmenge der redundanten Bits angezeigt wird, die im Arbeitsschritt
302 identifiziert wurde. Der Decodierer findet die j-Kombination, die der codierten Zahl N entspricht. Die kleinste Kombination mit c
j als ihr größtes Element ist
Folglich ist c
j die größte positive ganze Zahl, so dass
Im Arbeitsschritt
401, in Anbetracht einer ganzen Zahl
0 ≤ N ≤ ( k / s), findet der Decodierer das C
j-Maximum, so dass
wobei M der codierten Zahl N in dem kombinatorischen Zahlensystem entspricht. Der Decodierer wählt den Wert c
j als die Bitposition eines ersten vorherbestimmten Haftfehlers in den Speicherzellen aus.
-
Wenn j > 1, bilden die restlichen Elemente der j-Kombination die j – 1 Kombination, die der Anzahl
in dem kombinatorischen Zahlensystem vom Grad j – 1 entspricht. Der Decodierer findet die restlichen Elemente der j-Kombination durch Wiederholen derselben Arbeitsschritte unter Verwendung von
und j – 1 anstelle von M bzw. j. Insbesondere findet der Decodierer im Arbeitsschritt
402 das c
j-1-Maximum, so dass
In der ersten Iteration des Arbeitsschritts
402 entspricht Index j s und Parameter M entspricht der codierten Zahl N. Der Decodierer wählt den Wert c
j-1 als die Bitposition eines zweiten vorherbestimmten Haftfehlers in den Speicherzellen aus.
-
Der Decodierer bestimmt dann in dem Entscheidungsarbeitsschritt
403, ob j > 2. Wenn im Arbeitsschritt
403 j = 2 ist, endet der Decodiervorgang. Wenn im Arbeitsschritt
403 j > 2 ist, subtrahiert der Decodierer im Arbeitsschritt
404 1 von j (d. h. j = j – 1), um einen neuen Wert von Index j für die nächste Iteration der Arbeitsschritte
402–
404 zu erzeugen. Der Decodierer dekrementiert in jeder Iteration des Arbeitsschritts
404 den Wert von j um 1. Der Decodierer subtrahiert außerdem im Arbeitsschritt
404 von M, um einen neuen Wert des Parameters M für die nächste Iteration der Arbeitsschritte
402–
404 zu erzeugen
Der Decodierer wiederholt dann die Arbeitsschritte
402–
403 unter Verwendung der neuen Werte von j und M, die im Arbeitsschritt
404 berechnet wurden, um die Bitposition des nächsten vorherbestimmten Haftfehlers in den Speicherzellen zu bestimmen. Der Decodierer fährt damit fort, Iterationen der Arbeitsschritte
402–
404 durchzuführen, um jede der Bitpositionen c
1, c
2, c
s-1, c
s der s vorherbestimmten Haftfehler in den Speicherzellen zu bestimmen, aus denen die Datenbits gelesen wurden.
-
5 stellt Beispiele von Datenbits und Speicherzellen, die mit den hierin beschriebenen Codier- und Decodiertechniken verwendet werden können, gemäß einer Ausführungsform der vorliegenden Erfindung dar. Die in 5 gezeigten und in Bezug auf diese beschriebenen Werte sind lediglich Beispiele, die zum Zwecke der Veranschaulichung bereitgestellt werden und nicht einschränkend sein sollen.
-
5 stellt 25 Single-Level-Speicherzellen in einer Speicherschaltung in den Bitpositionen 0–24 dar. Die 25 Speicherzellen sind zur einfacheren Veranschaulichung in 5 als Kästchen gezeigt. 5 stellt außerdem eine beispielhafte Menge von 25 Datenbits in den Bitpositionen 0–24 dar. Die in 5 gezeigten 25 Datenbits sind zur Speicherung in den 25 Speicherzellen bereitgestellt. Jedes der Datenbits wird zur Speicherung in einer entsprechenden Speicherzelle mit der gleichen Bitposition wie jenes Datenbit bereitgestellt. Beispielsweise wird das in 5 dargestellte Datenbit in der Bitposition 0, das sich am weitesten links befindet, zur Speicherung in der entsprechenden in 5 gezeigten Speicherzelle in der Bitposition 0, die sich am weitesten links befindet, bereitgestellt.
-
Einige der in 5 gezeigten Speicherzellen haben Haftfehler. Die Speicherzellen mit 0-Haftfehlern sind in 5 durch S0 identifiziert. Die Speicherzellen in den Bitpositionen 3, 6 und 17 haben 0-Haftfehler. Die Speicherzellen mit 1-Haftfehlern sind in 5 durch S1 identifiziert. Die Speicherzellen in den Bitpositionen 8 und 13 haben 1-Haftfehler.
-
Im Arbeitsschritt 202 errechnet der Codierer einen Binomialkoeffizienten für jeden der Haftfehler in den Bitpositionen 3, 6, 8, 13 und 17 in den in 5 gezeigten Speicherzellen. Die 5 Binomialkoeffizienten für die 5 Haftfehler in den Speicherzellen von 5 sind ( 3 / 1), ( 6 / 2), ( 8 / 3), ( 13 / 4), und ( 17 / 5), die den Zahlen 3, 15, 56, 715 bzw. 6188 entsprechen.
-
Im Arbeitsschritt 203 berechnet der Codierer eine codierte Zahl N, die den Bitpositionen 3, 6, 8, 13 und 17 der 5 Haftfehler in den Speicherzellen entspricht, indem er die im Arbeitsschritt 202 berechneten 5 Binomialkoeffizienten addiert. Die codierte Zahl N entspricht in diesem Beispiel 6977. Der Codierer erzeugt dann eine Menge redundanter Bits, die den binären Wert 6977 anzeigen.
-
Im Arbeitsschritt 204 erzeugt der Codierer eine Menge von 5 redundanten Bits, die anzeigen, welche der Datenbits, die in Speicherzellen mit Haftfehlern gespeichert werden sollen, dieselben digitalen Werte wie ihre entsprechenden Haftfehler haben und welche der Datenbits, die in Speicherzellen mit Haftfehlern gespeichert werden sollen, andere digitale Werte als ihre entsprechenden Haftfehler haben. Im Arbeitsschritt 204 bestimmt der Codierer, dass die Datenbits in den Bitpositionen 3 und 13 dieselben digitalen Werte wie ihre entsprechenden Haftfehler haben und die Datenbits in den Bitpositionen 6, 8 und 17 andere digitale Werte als ihre entsprechenden Haftfehler haben.
-
Der Codierer erzeugt eine Menge von 5 redundanten Bits, die 01101 entspricht. Jede 0 in der i-ten Bitposition dieser Menge von redundanten Bits zeigt an, dass der i-te Haftfehler mit dem digitalen Wert des in dieser Speicherzelle zu speichernden Datenbits übereinstimmt. Jede 1 in der i-ten Bitposition dieser Menge von redundanten Bits zeigt an, dass der i-te Haftfehler nicht mit dem digitalen Wert des in dieser Speicherzelle zu speichernden Datenbits übereinstimmt. Die redundanten Bits 01101 entsprechen den Haftfehlern der in 5 gezeigten Speicherzellen in den Bitpositionen 3, 6, 8, 13 bzw. 17.
-
Nachdem die Datenbits während eines Lesevorgangs aus den Speicherzellen gelesen wurden, werden die Datenbits und die redundanten Bits einem Decodierer bereitgestellt. Im Arbeitsschritt 302 identifiziert der Decodierer eine Teilmenge der redundanten Bits als die codierte Zahl N anzeigend. Der Decodierer identifiziert außerdem eine andere Teilmenge der redundanten Bits als anzeigend, welche der ursprünglichen Datenbits in Speicherzellen mit Haftfehlern gespeichert wurden, die mit den digitalen Werten entsprechender jener Haftfehler übereinstimmten.
-
Im Arbeitsschritt
303 decodiert der Decodierer die codierte Zahl N unter Verwendung der Arbeitsschritte von
4. Anfangs entspricht Index j in diesem Beispiel 5. Im Arbeitsschritt
401 bestimmt der Decodierer den maximalen Wert von c
5, so dass
Folglich bestimmt der Decodierer, dass c
5 17 entspricht. Im Arbeitsschritt
402 bestimmt der Decodierer den maximalen Wert von c
4, so dass
Folglich bestimmt der Decodierer, dass c
4 13 entspricht.
-
Nach dem Dekrementieren des Werts von j um 1 in der ersten Iteration des Arbeitsschritts
404, was bewirkt, dass j 4 entspricht, bestimmt der Decodierer den maximalen Wert von c
3, so dass
in der zweiten Iteration des Arbeitsschritts
402. Folglich bestimmt der Decodierer, dass c
3 8 entspricht. Nach dem Dekrementieren des Werts von j um 1 in der zweiten Iteration des Arbeitsschritts
404, was bewirkt, dass j 3 entspricht, bestimmt der Decodierer den maximalen Wert von c
2, so dass
in der dritten Iteration des Arbeitsschritts
402. Folglich bestimmt der Decodierer, dass c
2 6 entspricht. Nach dem Dekrementieren des Werts von j um 1 in der dritten Iteration des Arbeitsschritts
404, was bewirkt, dass j 2 entspricht, bestimmt der Decodierer den maximalen Wert von c
1, so dass
in der vierten Iteration des Arbeitsschritts
402. Folglich bestimmt der Decodierer, dass c
1 3 entspricht. Index j entspricht 2 in der nächsten Iteration des Arbeitsschritts
403 und der Decodiervorgang endet dann. Der Decodierer bestimmt, dass die Bitpositionen der Haftfehler c
5, c
4, c
3, c
2 und c
1 17, 13, 8, 6 bzw. 3 sind.
-
Ausführungsformen der vorliegenden Erfindung können beispielsweise unter Verwendung eines oder einer Kombination von Hardware, Software und eines computerlesbaren Mediums, das Programmbefehle enthält, implementiert werden. Ausführungsformen der vorliegenden Erfindung können als Programmcode verkörpert werden, der auf einem nicht vergänglichen computerlesbaren Medium gespeichert ist und der auf einem Computer ausgeführt werden kann. Durch Ausführungsformen der vorliegenden Erfindung implementierte Software und Ergebnisse der vorliegenden Erfindung können auf einem computerlesbaren Medium gespeichert werden, wie einem Halbleiterspeicher, einem Phasenwechselspeicher, einem Festplattenlaufwerk, einer Compact-Disk (CD), einer Digital-Video-Disk (DVD) oder anderen Medien. Ergebnisse der vorliegenden Erfindung können zu verschiedenen Zwecken verwendet werden, wie von einem Prozessor ausgeführt oder verarbeitet werden, einem Benutzer angezeigt werden, in einem Signal über ein Netz übertragen werden usw. Ausführungsformen der vorliegende Erfindung können auch als eine computerlesbare Programmcodeeinheit verkörpert werden, die auf einem nicht vergänglichen computerlesbaren Medium gespeichert ist, um zu bewirken, dass eine Reihe von Computersystemen, die über ein Netz verbunden sind, sich auf eine verteilte Datenverarbeitung auswirkt.
-
Die vorstehende Beschreibung der beispielhaften Ausführungsformen der vorliegenden Erfindung wurde zum Zwecke der Veranschaulichung und Beschreibung dargelegt. Die vorstehende Beschreibung soll nicht erschöpfend sein oder die vorliegende Erfindung auf die hierin offenbarten Beispiele beschränken. In einigen Fällen können Merkmale der vorliegenden Erfindung ohne eine entsprechende Verwendung anderer Merkmale wie dargelegt genutzt werden. Viele Modifizierungen, Austausche und Variationen sind angesichts der obigen Lehren möglich, ohne vom Schutzumfang der vorliegenden Erfindung abzuweichen.