-
GEBIET DER OFFENBARUNG
-
Die vorliegende Erfindung betrifft Datenspeichersysteme und insbesondere Techniken zum Codieren und Decodieren redundanter Bits 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. Speichersysteme werden häufig als ein Datenübertragungssystem mit einer Verzögerung modelliert, wobei Daten während einer Schreiboperation übertragen und Daten während einer Leseoperation empfangen werden. Bei einem Speichersystem können Zufallsfehler bis zu einer Häufigkeit von etwa 1 × 10-4 mit einem akzeptablem Aufwand korrigiert werden. Als Vorkehrung gegen eine Fehlerhäufigkeit von etwa 1 × 10-4, kann ein Fehlerkorrektur-Codierer codierte Bits erzeugen, deren Anzahl etwa 10 % höher als die Anzahl seiner Eingangsbits ist.
-
Bei Phasenwechselspeicher (phase change memory, PCM) handelt es sich um eine Klasse nicht flüchtigen Halbleiterspeichers. PCM-Vorrichtungen verfügen gegenüber herkömmlichem nicht flüchtigem Flash-Speicher über zahlreiche Vorteile. PCM-Vorrichtungen können jedoch eine große Anzahl von Fehlern erzeugen, die durch Schreibzyklus-Qualitätsverlust (writing cycle degradation) verursacht werden. Beispielsweise kann eine PCM-Vorrichtung Fehler mit einer Häufigkeit von 1 × 10-2 oder größer erzeugen, wenn sie Millionen von Zyklen oder das Zehnfache davon durchläuft.
-
An der Ermüdungsgrenze wird die Fehlerhäufigkeit bei nicht flüchtigen Speichervorrichtungen durch Schreibzyklus-Qualitätsverlust bestimmt, nicht durch Zufallsfehler. Zu den durch Qualitätsverlust verursachten Fehlern zählen Haftfehler und instabile Bits. Die Statistiken für diese beiden Fehlerarten unterscheiden sich von denen für die Zufallsfehler, die üblicherweise bei Datenübertragungssystemen und entsprechenden Fehlerkorrekturansätzen angenommen werden.
-
US 2012/0131418 A1 beschreibt eine Speichervorrichtung mit einem Schreibgerät, das Datenbits, Prüfbits auf Fehlerkorrekturen und Overheadbits in einen Speicher schreibt, wobei jedes Bit des/der Overheadbit(s) jeder Gruppe von Bitgruppen entspricht, die mindestens ein Bit der Datenbits und/oder der Prüfbits beinhaltet, wobei jedes Bit des/der Overheadbit(s) anzeigt, ob die entsprechende Bitgruppe invertiert wurde, eine Leseeinheit, die die Datenbits, die Prüfbits, und das/die Overhead-Bit(e) aus dem Speicher liest, eine Korrektureinheit, die einen Fehler in den Datenbits und dem/den aus dem Speicher gelesenen Overhead-Bit(s) korrigiert, basierend auf den Prüfbits, und eine Invertereinheit, die die in der dem Overhead-Bit entsprechenden Bitgruppe enthaltenen Datenbits invertiert und die invertierten Datenbits als aus dem Speicher gelesene Daten ausgibt, wenn das fehlerkorrigierte Overhead-Bit anzeigt, dass die Invertierung durchgeführt wurde.
-
KURZDARSTELLUNG
-
Gemäß einigen Ausführungsformen verfügt ein Datenspeichersystem über eine Speicherschaltung mit Speicherzellen und eine Steuerschaltung, die Datenbits empfängt, die zum Speichern in den Speicherzellen bereitgestellt werden. Die Steuerschaltung codiert die Datenbits, um eine erste Menge redundanter Bits und codierter Datenbits zu erzeugen, so dass die zum Speichern in einer ersten Teilmenge der Speicherzellen mit ersten Haftfehlern ausgewählten codierten Datenbits digitale Werte entsprechender erster Haftfehler aufweisen. Die Steuerschaltung codiert die erste Menge redundanter Bits, um eine zweite Menge redundanter Bits zu erzeugen. Die Steuerschaltung führt Logikfunktionen an der zweiten Menge redundanter Bits und den codierten Datenbits aus, um eine dritte Menge redundanter Bits zu erzeugen, so dass die redundanten Bits in der dritten Menge redundanter Bits, die zum Speichern in einer zweiten Teilmenge der Speicherzellen mit zweiten Haftfehlern ausgewählt werden, digitale Werte entsprechender zweiter Haftfehler aufweisen.
-
Gemäß weiteren Ausführungsformen verfügt ein Datenspeichersystem über eine Speicherschaltung mit Speicherzellen und eine Steuerschaltung, die aus den Speicherzellen gelesene codierte Bits empfängt. Mithilfe der codierten Bits werden Anpassungen für Haftfehler in den Speicherzellen vorgenommen. Die Steuerschaltung führt bitweise Logikfunktionen an ersten Mengen der codierten Bits aus, um erste Zwischenbits zu erzeugen. Die Steuerschaltung führt die bitweisen Logikfunktionen an zweiten Mengen der codierten Bits aus, um zweite Zwischenbits zu erzeugen. Jede der zweiten Mengen weist mehr Bits auf als jede der ersten Mengen. Die Steuerschaltung decodiert die zweiten Zwischenbits mithilfe der ersten Zwischenbits, um erste decodierte Bits zu erzeugen. Die Steuerschaltung decodiert eine erste Teilmenge der codierten Bits mithilfe der ersten decodierten Bits, um decodierte Datenbits zu erzeugen.
-
Verschiedene Aufgaben, Merkmale und Vorteile der vorliegenden Erfindung werden beim Ansehen 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 2A ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Datenbits und codierter redundanter Bits zum Speichern in Speicherzellen einer Speicherschaltung veranschaulicht.
- Die 2B ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Decodieren von aus Speicherzellen einer Speicherschaltung gelesenen codierten Bits zwecks Erzeugens decodierter Datenbits veranschaulicht.
- Die 3A bis 3B veranschaulichen gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Bits, mit deren Hilfe Anpassungen für Haftfehler in Speicherzellen vorgenommen werden.
- Die 4 veranschaulicht gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Decodieren codierter Bits zwecks Regenerierens von Datenbits.
- Die 5A bis 51 veranschaulichen Beispiele für die Codieroperationen gemäß Ausführungsformen der vorliegenden Erfindung, die in den 3A bis 3B gezeigt und mit Bezug auf diese beschrieben werden.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Gemäß einigen Ausführungsformen werden Datenbits zum Speichern in Speicherzellen einer Speicherschaltung bereitgestellt. Eine oder mehrere der Speicherzellen der Speicherschaltung können Haftfehler enthalten. Ein Codierer codiert die Datenbits, um codierte Datenbits und redundante Bits zu erzeugen. Wenn die redundanten Bits Speicherzellen der Speicherschaltung mit Haftfehlern entsprechen, codiert der Codierer die redundanten Bits, um codierte redundante Bits zu erzeugen. Die codierten Datenbits und die codierten redundanten Bits werden in den Speicherzellen der Speicherschaltung gespeichert. Mithilfe der codierten Datenbits und der codierten redundanten Bits werden für die 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 um 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 Haftfehler 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 codierten redundanten Bits mithilfe der digitalen Werte und Adressen der Haftfehler. Die codierten Datenbits und die codierten redundanten Bits werden in den Speicherzellen der Speicherschaltung gespeichert.
-
Anschließend werden die codierten Datenbits und die codierten redundanten Bits aus den Speicherzellen gelesen und für einen Decodierer bereitgestellt. Der Decodierer decodiert die codierten redundanten Bits und decodiert dann die codierten Datenbits mithilfe der decodierten 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 kann 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 um jede andere Art von Steuerschaltung handeln, die Datenbits zum Speichern in den Speicherschaltungen 102 bis 103 codiert und/oder decodiert. Die Steuerschaltung 101 stellt die codierten Datenbits und die codierten redundanten Bits für eine der Speicherschaltungen 102 bis 103 oder für beide bereit. Die codierten Datenbits und die codierten redundanten Bits werden in einer der Speicherschaltungen 102 bis 103 oder in beiden gespeichert. Während einer Leseoperation werden die codierten Datenbits und die codierten redundanten Bits aus der Speicherschaltung gelesen und für die Steuerschaltung 101 bereitgestellt. Die codierten Datenbits und die codierten 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 verschiedenen 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 2A ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Datenbits und codierter redundanter Bits zum Speichern in Speicherzellen einer Speicherschaltung veranschaulicht. In jeder der Speicherzellen in der Speicherschaltung ist mindestens ein digitaler Wert gespeichert. Eine oder mehrere der Speicherzellen weisen einen Haftfehler auf. Die durch die Operationen der 2A erzeugten codierten Datenbits und die codierten redundanten Bits werden anstelle der Datenbits in den Speicherzellen gespeichert. Die Operationen der 2A können beispielsweise von einem Codierer in der Steuerschaltung 101 ausgeführt werden.
-
Anfangs empfängt ein 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. Die Adressen der Speicherzellen mit Haftfehlern und die digitalen Werte der Haftfehler werden vor dem Ausführen der Operationen der 2A für den Codierer bereitgestellt.
-
Bei der Operation 201 codiert der Codierer die Datenbits, um eine erste Menge redundanter Bits und codierter Datenbits zu erzeugen, so dass jedes der in einer der Speicherzellen mit einem Haftfehler zu speichernden codierten Datenbits einen digitalen Wert dieses Haftfehlers aufweist. Bei der Operation 202 codiert der Codierer die erste Menge redundanter Bits, um eine zweite Menge redundanter Bits zu erzeugen.
-
Bei der Operation 203 führt der Codierer Logikfunktionen an der zweiten Menge redundanter Bits und den codierten Datenbits aus, um eine dritte Menge redundanter Bits zu erzeugen, so dass jedes in einer der Speicherzellen mit einem Haftfehler zu speichernde redundante Bit in der dritten Menge redundanter Bits einen digitalen Wert dieses Haftfehlers aufweist. Die codierten Datenbits und die dritte Menge redundanter Bits werden mindestens in einer Teilmenge der Speicherzellen gespeichert.
-
Die 2B ist ein Ablaufplan, der gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Decodieren von aus Speicherzellen einer Speicherschaltung gelesenen codierten Bits zwecks Erzeugens decodierter Datenbits veranschaulicht. In jeder der Speicherzellen in der Speicherschaltung ist mindestens ein digitaler Wert gespeichert. Eine oder mehrere der Speicherzellen weisen einen Haftfehler auf. Die Operationen der 2B können beispielsweise von einem Decodierer in der Steuerschaltung 101 ausgeführt werden. Die Adressen der Speicherzellen mit Haftfehlern und die digitalen Werte der Haftfehler sind dem Decodierer vor dem Ausführen der Operationen der 2B nicht bekannt.
-
Bei der Operation 211 empfängt der Decodierer aus den Speicherzellen gelesene codierte Bits. Mithilfe der codierten Bits werden Anpassungen für Haftfehler in den Speicherzellen vorgenommen. Bei der Operation 212 führt der Decodierer bitweise Logikfunktionen an ersten Mengen der codierten Bits aus, um erste Zwischenbits zu erzeugen. Bei der Operation 213 führt der Decodierer die bitweisen Logikfunktionen an zweiten Mengen der codierten Bits aus, um zweite Zwischenbits zu erzeugen. Jede der zweiten Mengen weist mehr Bits auf als jede der ersten Mengen. Bei der Operation 214 decodiert der Decodierer die zweiten Zwischenbits mithilfe der ersten Zwischenbits, um erste decodierte Bits zu erzeugen. Bei der Operation 215 decodiert der Decodierer eine erste Teilmenge der codierten Bits mithilfe der ersten decodierten Bits, um die decodierten Datenbits zu erzeugen.
-
Die 3A bis 3B veranschaulichen gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Codieren von Datenbits zwecks Erzeugens codierter Bits, mit deren Hilfe Anpassungen für Haftfehler in Speicherzellen vorgenommen werden. Die Adressen der Speicherzellen mit Haftfehlern und die digitalen Werte der Haftfehler werden vor dem Ausführen der Operationen aus den 3A bis 3B für den Codierer bereitgestellt. Die codierten Bits werden in den Speicherzellen gespeichert. Die in Speicherzellen mit Haftfehlern gespeicherten codierten Bits weisen dieselben digitalen Werte wie die Haftfehler der entsprechenden Speicherzellen auf.
-
Der hier erörterte Codierer kann beispielsweise mithilfe der Steuerschaltung
101 realisiert werden. Bei dem Codierer wird eine Codiertechnik verwendet, mit deren Hilfe sich digitale Werte der Datenbits anpassen lassen, die nicht den digitalen Werten der Haftfehler der entsprechenden Speicherzellen entsprechen, um codierte Datenbits und redundante Bits zu erzeugen. Die redundanten Bits werden von einem Decodierer zum Decodieren der codierten Datenbits zwecks Regenerierens der Datenbits verwendet, wie im Folgenden erörtert wird. Beispiele für Codiertechniken, mit deren Hilfe sich codierte Datenbits und redundante Bits zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern erzeugen lassen, sowie Techniken zum Decodieren der codierten Datenbits mithilfe der redundanten Bits werden in den gemeinsam zugeteilten US-Patentanmeldungen
US 2013/0124942 A1 und
US 2013/0124943 A1 offenbart, die beide am 10. Oktober 2012 eingereicht wurden, . Gemäß einigen Ausführungsformen können die in diesen Patentanmeldungen offenbarten Codier- und Decodiertechniken mit den hier dargelegten Techniken verwendet werden, wie im Folgenden erörtert wird.
-
Bei der Operation 301 empfängt ein Codierer Datenbits, die zum Speichern in einem Block Bi der Speicherzellen bereitgestellt werden, der über ausreichend Speicherzellen zum Speichern von codierten Datenbits und redundanten Bits verfügt, die gemäß hier beschriebenen Techniken erzeugt werden. Der Parameter „i“ ist eine positive Ganzzahl, die bei der Operation 301 gleich 1 ist. Daher ist bei der Operation 301 der Block Bi gleich dem Block B1. Bei der Operation 302 teilt der Codierer den Block Bi von Speicherzellen in eine Anzahl von „b“ Segmenten, von denen jedes über dieselbe Anzahl von Speicherzellen verfügt. Der Parameter „b“ ist eine positive Ganzzahl auf der Grundlage des Verhältnisses zwischen der Anzahl D von Datenbits und der Anzahl R von redundanten Bits, die von dem Codierer für die Datenbits mithilfe der gewählten Codiertechnik erzeugt werden. Ein Beispiel: b ≤ D/R. Bei der ersten Iteration der Operationen 302 bis 303 ist der Block Bi der Block B1.
-
Bei der Operation 303 wählt der Codierer das Segment mit der kleinsten Anzahl von Haftfehlern in dem Block Bi aus der Anzahl „b“ der bei der Operation 302 erzeugten Segmente als Block Bi+1. Bei der Operation 303 erzeugt der Codierer außerdem log2b-Bits, um die Position des Blocks Bi+1 in dem Block Bi anzuzeigen. Wenn zwei oder mehr Segmente des Blocks Bi die kleinste Anzahl von Haftfehlern aufweisen, wählt der Codierer bei der Operation 303 eines dieser Segmente. Bei der ersten Iteration der Operation 303 wählt der Codierer das Segment mit der kleinsten Anzahl von Haftfehlern in dem Block B1 als den Block B2 aus.
-
Bei der Entscheidungsoperation 304 ermittelt der Codierer, ob der Block Bi+1 einen oder null Haftfehler aufweist. Wenn der Block Bi+1 einen oder null Haftfehler aufweist, schreitet der Prozess aus den 3A bis 3B zu der Operation 306 fort. Wenn der Block Bi+1 mehr als einen Haftfehler aufweist, schreitet der Prozess aus den 3A bis 3B zu der Operation 305 fort. Bei der Operation 305 addiert der Codierer 1 zu dem Parameter i. Anschließend wiederholt der Codierer die Operationen 302 bis 304. Bei der zweiten Iteration der Operationen 302 bis 304 ist der Block B1 der Block B2, und der Block Bi+1 ist der Block B3. Der Codierer fährt damit fort, Iterationen der Operationen 302 bis 305 auszuführen, bis der Block Bi+1 nur einen oder null Haftfehler aufweist. Dieser Prozess endet spätestens, wenn die Anzahl von Bits in dem Block Bi+1 gleich dem Inversen der Haftfehler-Bit-Fehlerhäufigkeit bei den Datenbits ist. Der Codierer erzeugt bei den Operationen 302 bis 305 einen oder mehrere Blöcke zum Speichern redundanter Bits, die von einem Decodierer zum Decodieren der codierten Datenbits verwendet werden, wie im Folgenden beschrieben wird.
-
Bei der Operation
306 codiert der Codierer die Datenbits, um Indexbits für den größten Block B
1 und codierte Datenbits zum Speichern in Speicherzellen des größten Blocks B
1 zu erzeugen, und zwar mithilfe einer Codiertechnik, die bewirkt, dass mithilfe der codierten Datenbits Anpassungen für jegliche Haftfehler in den Speicherzellen des Blocks B
1 vorgenommen werden. Die bei der Operation
306 verwendete Codiertechnik kann beispielsweise eine der in den
US-Patentanmeldungen 13/649007 und
13/649072 offenbarten Codiertechniken sein. Die Indexbits sind redundante Bits, die von einem Decodierer zum Decodieren der codierten Datenbits zwecks Regenerierens der Datenbits verwendet werden. Nach der Operation
306 schreitet der Prozess zu der Operation
309 fort. Die Operationen
309 bis
316 werden in der
3B gezeigt.
-
Bei der Operation 309 setzt der Codierer den Parameter i auf 1 zurück. Bei der Operation 310 erzeugt der Codierer virtuelle Haftfehlerwerte für den Block Bi+1 durch Ausführen bitweiser XOR-Funktionen an den Haftfehlerwerten in dem Block Bi+1 und den entsprechenden in dem Block Bi zu speichernden codierten Bits. Eine bitweise XOR-Funktion ist eine Logikfunktion, bei der zwei Bitmuster gleicher Länge genommen werden und die logisch exklusive ODER-Operation (logical exclusive OR operation) an jedem Paar einander entsprechender Bits ausgeführt wird. Das Ergebnis ist bei jeder Position nur dann 1, wenn das erste Bit 1 ist, oder wenn das zweite Bit 1 ist. Das Ergebnis ist 0, wenn beide Bits 0 sind, oder wenn beide Bits 1 sind. Bei der ersten Iteration der Operation 310 sind die in dem Block Bi zu speichernden codierten Bits die bei der Operation 306 erzeugten codierten Datenbits.
-
Ein nicht einschränkendes Beispiel für die Operation 310: i ist gleich 1, der Block B2 verfügt über 8 Speicherzellen, und die dritte und siebte Speicherzelle in dem Block B2 weisen Haftfehler auf. Bei diesem Beispiel wird eine XOR-Funktion an dem Haftfehlerwert der dritten Speicherzelle in dem Block B2 und jedem entsprechenden dritten codierten Datenbit in jeder Menge von 8 Bits in den in dem Block B1 zu speichernden codierten Datenbits ausgeführt, die bei der Operation 306 erzeugt wurden, um einen ersten virtuellen Haftfehlerwert zu erzeugen. Außerdem wird eine XOR-Funktion an dem Haftfehlerwert der siebten Speicherzelle in dem Block B2 und jedem entsprechenden siebten codierten Datenbit in jeder Menge von 8 Bits in den in dem Block B1 zu speichernden codierten Datenbits ausgeführt, die bei der Operation 306 erzeugt werden, um einen zweiten virtuellen Haftfehlerwert zu erzeugen.
-
Bei der Operation 311 codiert der Codierer die log2b-Bits, die die Position des Blocks Bi+1 in dem Block Bi anzeigen, und die Indexbits für den Block Bi, um codierte Bits zu erzeugen, die mit entsprechenden virtuellen Haftfehlerwerten für den Block Bi+1 und mit Index-Bits für den Block Bi+1 übereinstimmen, und zwar mithilfe einer Codiertechnik, die Anpassungen für Speicherzellen mit Haftfehlern vornimmt. Die bei der Operation 311 verwendete Codiertechnik kann beispielsweise dieselbe Codiertechnik wie die bei der Operation 306 verwendete sein. Die bei der Operation 311 erzeugten codierten Bits stimmen mit den entsprechenden virtuellen Haftfehlern für den Block Bi+1 überein, die bei der Operation 310 erzeugt werden.
-
Bei der Operation 312 führt der Codierer bitweise XOR-Funktionen an den in den Speicherzellen der Blöcke B1 bis Bi zu speichernden Bits und den codierten Bits für den Block Bi+1 aus, um Bits zum Speichern in den Speicherzellen des Blocks Bi+1 zu erzeugen. Bei der ersten Iteration der Operation 312 sind die in den Speicherzellen der Blöcke B1 bis Bi zu speichernden Bits die bei der Operation 306 erzeugten codierten Datenbits. Bei den nachfolgenden Iterationen der Operation 312 sind die in den Speicherzellen der Blöcke B1 bis Bi zu speichernden Bits die bei allen vorangehenden Iterationen der Operation 312 erzeugten Bits sowie die bei der Operation 306 erzeugten codierten Datenbits. Bei jeder Iteration der Operation 312 werden die codierten Bits für den Block Bi+1 bei der vorangehenden Iteration der Operation 311 erzeugt.
-
Bei der Operation 312 werden die in den Speicherzellen des Blocks Bi zu speichernden Bits in Mengen Si von Bits unterteilt, so dass die Anzahl der Bits in jeder der Mengen Si gleich der Anzahl der Speicherzellen in dem Block Bi+1 ist. Dann wird eine bitweise XOR-Funktion an zwei der Mengen Si von Bits ausgeführt, um ein erstes XOR-Ergebnis zu erzeugen. Wenn mehr als zwei der Mengen Si von Bits vorhanden sind, wird eine bitweise XOR-Funktion an dem ersten XOR-Ergebnis und einer dritten Menge Si von Bits ausgeführt, um ein zweites XOR-Ergebnis zu erzeugen. Es werden weiterhin bitweise XOR-Funktionen an dem zuvor erzeugten XOR-Ergebnis und an jeder weiteren Menge Si von Bits ausgeführt, um das nächste XOR-Ergebnis zu erzeugen, bis keine weiteren Mengen Si von Bits mehr vorhanden sind.
-
Eine abschließende bitweise XOR-Funktion wird dann bei der Operation 312 an dem letzten XOR-Ergebnis, das aus den Mengen Si von Bits erzeugt wurde, und an den codierten Bits für den Block Bi+1 ausgeführt, um Bits zum Speichern in entsprechenden Speicherzellen des Blocks Bi+1 zu erzeugen. Die abschließende bitweise XOR-Funktion wird bei der Operation 312 nicht an Bits ausgeführt, die den Bitpositionen des Blocks Bi+2 entsprechen. Zum Zeitpunkt der Operation 312 wurden noch keine Bits zum Speichern in den Speicherzellen des Blocks Bi+2 erzeugt. Das abschließende XOR-Ergebnis der abschließenden bitweisen XOR-Funktion der Operation 312 enthält die in entsprechenden Speicherzellen des Blocks Bi+1 zu speichernden Bits sowie die Bits, die den Bitpositionen des Blocks Bi+2 in dem letzten XOR-Ergebnis entsprechen, das aus den Mengen Si von Bits erzeugt wurde. Das abschließende XOR-Ergebnis der abschließenden bitweisen XOR-Funktion der letzten Iteration der Operation 312 wird bei der Operation 315 verwendet, wie im Folgenden beschrieben wird.
-
Bei der Entscheidungsoperation 313 ermittelt der Codierer, ob der Block Bi+2 der kleinste Block von Speicherzellen ist, der bei den Iterationen der Operationen 302 bis 305 erzeugt wurde. Wenn der Block Bi+2 nicht der kleinste Block von Speicherzellen ist, der bei den Iterationen der Operationen 302 bis 305 erzeugt wurde, schreitet der Codierer zu der Operation 314 fort. Bei der Operation 314 addiert der Codierer 1 zu dem Parameter i. Anschließend führt der Codierer eine weitere Iteration der Operationen 310 bis 313 aus. Der Codierer fährt mit dem Ausführen von Iterationen der Operationen 310 bis 314 fort, bis der Block Bi+2 gleich dem kleinsten Block von Speicherzellen ist, der bei den Iterationen der Operationen 302 bis 305 erzeugt wurde.
-
Wenn der Block Bi+2 der kleinste Block von Speicherzellen ist, der bei den Iterationen der Operationen 302 bis 305 bei der Operation 313 erzeugt wurde, schreitet der Codierer zu der Operation 315 fort. Bei der Operation 315 führt der Codierer bitweise XOR-Logikfunktionen an Mengen von b Bits des abschließenden, bei der letzten Iteration der Operation 312 erzeugten XOR-Ergebnisses und den log2b-Bits, die die Position des Blocks Bi+2 in dem Block Bi+1 anzeigen, in Verbindung mit den Indexbits für den Block Bi+1 aus, um Bits zum Speichern in Speicherzellen des Blocks Bi+2 zu erzeugen.
-
Bei der Operation 315 werden Bits des bei der letzten Iteration der Operation 312 erzeugten abschließenden XOR-Ergebnisses in Mengen SF von Bits unterteilt, so dass die Anzahl von Bits in jeder der Mengen SF gleich b ist. Anschließend wird eine bitweise XOR-Funktion an zwei der Mengen SF von Bits ausgeführt, um ein erstes XOR-Ergebnis zu erzeugen. Wenn mehr als zwei der Mengen SF von Bits vorhanden sind, wird eine bitweise XOR-Funktion an dem ersten XOR-Ergebnis und einer dritten Menge SF von Bits ausgeführt, um ein zweites XOR-Ergebnis zu erzeugen. Es werden weiterhin bitweise XOR-Funktionen an dem zuvor erzeugten XOR-Ergebnis und an jeder weiteren Menge SF von Bits ausgeführt, um das nächste XOR-Ergebnis zu erzeugen, bis keine weiteren Mengen SF von Bits mehr vorhanden sind. Anschließend wird bei der Operation 315 eine abschließende bitweise XOR-Funktion an dem letzten XOR-Ergebnis ausgeführt, das aus den Mengen SF von Bits und den log2b-Bits, die die Position des Blocks Bi+2 in dem Block Bi+1 anzeigen, in Verbindung mit den Indexbits für den Block Bi+1 erzeugt wurde, um Bits zum Speichern in Speicherzellen des Blocks Bi+2 zu erzeugen.
-
Wenn der Block Bi+2 einen Haftfehler aufweist, muss jedes in der den Haftfehler aufweisenden Speicherzelle von Block Bi+2 gespeicherte Bit mit dem digitalen Wert dieses Haftfehlers übereinstimmen. Wenn der Block Bi+2 p Bits und genau einen Haftfehler enthält, kann eine Anzahl von p-1 Bits wie folgt gespeichert werden. Das erste Bit ist dazu bestimmt, anzuzeigen, ob die verbleibenden p-1 Bits invertiert werden sollten oder nicht. Wenn das erste Bit einen digitalen Wert von 0 aufweist, werden die verbleibenden p-1 Bits so gelesen, wie sie sind. Wenn das erste Bit einen digitalen Wert von 1 aufweist, werden die verbleibenden p-1 Bits invertiert. Der Haftfehler kann sich an der ersten Bitposition oder an einer der verbleibenden p-1 Bitpositionen des Blocks Bi+2 befinden. Wenn sich der Haftfehler an der ersten Bitposition befindet, zeigt sein Wert an, wie die Daten in den verbleibenden p-1 Bits gespeichert werden (d. h.: invertiert oder nicht). Wenn sich der Haftfehler an einer der verbleibenden p-1 Bitpositionen an einer anderen als der ersten befindet, wird der Haftfehlerwert geprüft, um zu ermitteln, ob er denselben digitalen Wert aufweist, wie das Datenbit, das an dieser Bitposition gespeichert werden sollte. Wenn er denselben digitalen Wert aufweist, wird das erste Bit auf 0 gesetzt, und die Daten werden so wie bei den verbleibenden p-1 Bitpositionen geschrieben. Wenn er den umgekehrten digitalen Wert aufweist, wird das erste Bit auf 1 gesetzt, und die invertierten Werte der Datenbits werden an den verbleibenden p-1 Bitpositionen gespeichert.
-
Bei der Operation 316 werden die bei den Operationen 306 erzeugten codierten Datenbits, die bei jeder Iteration der Operation 312 erzeugten Bits und die bei der Operation 315 erzeugten Bits in den entsprechenden Speicherzellen der Speicherschaltung gespeichert.
-
Die 4 veranschaulicht gemäß einer Ausführungsform der vorliegenden Erfindung Beispiele für Operationen zum Decodieren codierter Bits zwecks Regenerierens von Datenbits. Codierte Bits werden aus den Speicherzellen der Speicherschaltung gelesen und für einen Decodierer bereitgestellt. Der Decodierer kann beispielsweise mithilfe der Steuerschaltung 101 realisiert werden.
-
Zu Anfang empfängt der Decodierer codierte Bits aus Speicherzellen einer Speicherschaltung. Bei der Operation 401 unterteilt der Decodierer die codierten Bits in Mengen SD, so dass jede der Mengen SD eine Anzahl „b“ von Bits aufweist, die gemäß ihren Bitpositionen aufeinander folgen. Der Wert des Parameters „b“ ist derselbe, der beim Codieren verwendet wurde, um die codierten Bits zu erzeugen. Der Parameter „b“ wird vor dem Decodieren der codierten Bits für den Decodierer bereitgestellt. Anschließend führt der Decodierer bitweise XOR-Funktionen an den Mengen SD von Bits aus, um bei der Operation 401 ein XOR-Ergebnis mit b Bits zu erzeugen.
-
Bei der Operation 402 zeigt der Parameter „n“ die Nummer Bn des kleinsten Blocks von Speicherzellen an, der bei den Iterationen der Operationen 302 bis 305 erzeugt wurde. Bei der Operation 402 erkennt der Decodierer die Position des kleinsten Blocks Bn in dem Block Bn-i auf der Grundlage der ersten log2b Bits in dem XOR-Ergebnis der Operation 401. Die verbleibenden Bits in dem XOR-Ergebnis der Operation 401 sind Indexbits für den Block Bn-1.
-
Bei der Operation 403 führt der Decodierer bitweise XOR-Funktionen an aus den Speicherzellen empfangenen Mengen von bj+1 codierten Bits aus, um ein XOR-Ergebnis zu erzeugen. Bei der Operation 403 unterteilt der Decodierer die codierten Bits in Mengen SG, so dass jede der Mengen SG eine Anzahl bj+1 von Bits aufweist, die gemäß ihren Bitpositionen aufeinander folgen. Anschließend führt der Decodierer bitweise XOR-Funktionen an den Mengen SG von Bits aus, um das XOR-Ergebnis mit bj+1 Bits zu erzeugen. Bei der ersten Iteration der Operationen 403 ist der Parameter j gleich 1.
-
Bei der Operation
404 verwendet der Decodierer die Indexbits für den Block B
n-i zum Decodieren des XOR-Ergebnisses der Operation
403 unter Ausschluss der Bits, die Bitpositionen des Blocks B
n in dem Block B
n-i entsprechen, um mithilfe einer Decodiertechnik decodierte Bits des Blocks B
n-i zu erzeugen. Bei der ersten Iteration der Operation
404 werden die Indexbits für den Block B
n-i in der Operation
402 und die Bitpositionen des Blocks B
n in dem Block B
n-i in der Operation
402 erkannt. Bei späteren Iterationen der Operation
404 werden die Indexbits für den Block B
n-i bei den vorangehenden Iterationen der Operationen
404 bis
405 erzeugt und erkannt, und die Bitpositionen des Blocks B
n in dem Block B
n-i werden bei der vorangehenden Iteration der Operation
405 erkannt. Mithilfe der bei der Operation
404 verwendeten Decodiertechnik wird das Umgekehrte der bei der Codiertechnik der Operation
311 verwendeten Codieroperationen ausgeführt, die Anpassungen für jegliche Haftfehler in den Speicherzellen vornimmt. Die bei der Operation
404 verwendete Decodiertechnik kann beispielsweise eine der in den US-Patentanmeldungen
US 2013/0124942 A1 und
US 2013/0124943 A1 offenbarten Decodiertechniken sein.
-
Bei der Operation 405 erkennt der Decodierer die Position (und die entsprechenden Bitpositionen) des Blocks Bn-i in dem Block Bn-2 auf der Grundlage der ersten log2b-Bits in den decodierten Bits des Blocks Bn-1, die bei der vorangehenden Iteration der Operation 404 erzeugt wurden. Die verbleibenden decodierten Bits des Blocks Bn-1, die bei der vorangehenden Iteration der Operation 404 erzeugt wurden, sind Indexbits für den Block Bn-2.
-
Bei der Entscheidungsoperation 406 ermittelt der Decodierer, ob der Block Bn-2 alle aus den Speicherzellen gelesenen codierten Bits enthält. Wenn der Block Bn-2 nicht alle der aus den Speicherzellen gelesenen codierten Bits enthält, schreitet der Decodierer zu der Operation 407 fort. Bei der Operation 407 subtrahiert der Decodierer 1 von dem Parameter n und addiert 1 zu dem Parameter j. Anschließend führt der Decodierer eine zweite Iteration der Operationen 403 bis 406 aus. Der Decodierer fährt mit dem Ausführen von Iterationen der Operationen 403 bis 407 fort, bis der Block Bn-2 gleich dem größten Block B1 ist.
-
Wenn der Block Bn-2 bei der Entscheidungsoperation 406 alle aus den Speicherzellen gelesenen codierten Bits enthält (d. h., der Block n-2 ist gleich dem größten Block B1), schreitet der Decodierer zu der Operation 408 fort. Bei der Operation 408 verwendet der Decodierer die verbleibenden decodierten Bits des Blocks B2 als Indexbits zum Decodieren der codierten Datenbits in dem Block B1, um die Datenbits mithilfe einer Decodiertechnik zu regenerieren. Bei der Operation 408 werden die verbleibenden decodierten Bits des Blocks B2 bei der vorangehenden Iteration der Operation 405 erzeugt, und die codierten Datenbits in dem Block B1 sind die verbleibenden codierten Bits in dem Block B1, die noch nicht decodiert wurden. Mithilfe der bei der Operation 408 verwendeten Decodiertechnik wird das Umgekehrte der bei der Codiertechnik der Operation 306 verwendeten Codieroperationen ausgeführt. Die bei der Operation 408 verwendete Decodiertechnik kann dieselbe Decodiertechnik wie die bei der Operation 404 verwendete sein.
-
Die 5A bis 51 veranschaulichen gemäß Ausführungsformen der vorliegenden Erfindung Beispiele für die Codieroperationen, die vorstehend mit Bezug auf die 3A bis 3B beschrieben und in diesen gezeigt wurden. Die hier mit Bezug auf die 5A bis 51 gezeigten und beschriebenen Beispiele werden lediglich zu Veranschaulichungszwecken offenbart und sollen nicht einschränkend sein.
-
Die 5A bis 5B veranschaulichen eine beispielhafte Menge von 64 Speicherzellen. Die 64 Speicherzellen werden in den 5A bis 5B als 64 Kästen gezeigt. 15 der 64 in den 5A bis 5B gezeigten Speicherzellen weisen Haftfehler auf. Die vertikalen Linien über den Kästen in der 5A grenzen Segmente mit 4, 8 und 16 Speicherzellen ab. Die mit einer 0 beschrifteten Speicherzellen weisen einen Haftfehler an 0 auf, und die mit einer 1 beschrifteten Speicherzellen weisen einen Haftfehler an 1 auf. Neun der in den 5A bis 5B gezeigten Speicherzellen weisen Haftfehler an 1 auf, und sechs der in den 5A bis 5B gezeigten Speicherzellen weisen Haftfehler an 0 auf
-
Die 5B veranschaulicht ein Beispiel dafür, wie die 64 Speicherzellen während der in der 3A gezeigten Codieroperationen 302 bis 305 in drei Blöcke B1, B2 und B3 unterteilt werden können. Der größte Block B1 enthält alle 64 Speicherzellen. Der Block B1 enthält den Block B2 und die drei Teilblöcke B1A, B1B und B1C, die über jeweils 16 Speicherzellen verfügen. Der Block B2 enthält den Block B3 mit 4 Speicherzellen. Der Block B2 weist drei Speicherzellen mit Haftfehlern auf. Der Block B3 weist keine Haftfehler auf.
-
Die 5C veranschaulicht digitale Werte von 48 Datenbits, die zum Speichern in den in der 5A gezeigten Speicherzellen bereitgestellt werden. Die Speicherzellen des Blocks B2 sind für das Speichern redundanter Bits gemäß den hier mit Bezug auf die 3A bis 3B beschriebenen Techniken reserviert. Daher werden die in der 5C gezeigten 48 Datenbits zum Speichern in den 48 entsprechenden Speicherzellen in den Teilblöcken B1A, B1B und B1C bereitgestellt.
-
Bei der Operation 306 codiert der Codierer die 48 Datenbits, um 48 codierte Datenbits und 10 Indexbits zu erzeugen, wie beispielsweise in der 5D gezeigt. Die in der 5D gezeigten 48 codierten Datenbits und 10 Indexbits sind Zufallswerte, die als Beispiel angeführt und nicht mithilfe irgendeiner bestimmten Codiertechnik erzeugt werden. Jedes der 48 codierten Datenbits wird in einer entsprechenden Speicherzelle der 48 Speicherzellen der Teilblöcke B1A-B1C gespeichert, die sich in der 5D direkt über diesem codierten Datenbit befindet. Die codierten Datenbits, die in der 5D jeweils durch ein H angezeigt werden, weisen dieselben digitalen Werte auf, wie die Haftfehler der ihnen entsprechenden Speicherzellen der Teilblöcke B1A-B1C. Daher können die in der 5D gezeigten 48 codierten Datenbits in den 48 Speicherzellen der Teilblöcke B1A bis B1C gespeichert und aus den 48 Speicherzellen der Teilblöcke B1A bis B1C gelesen werden, ohne dass durch die 12 bekannten Haftfehler in diesen 48 Speicherzellen verursachte Fehler auftreten.
-
In den Beispielen aus den 5A bis 51 ist b gleich 4 und log2b ist gleich 2. 5D zeigt außerdem die digitalen Werte von 2 binären Positionsbits 10 (d.h. als Dezimalzahl gleich 3), die die Position des Blocks B2 als das dritte Segment von 16 Bits in dem Block B1 anzeigen. Die 2 Positionsbits des Blocks B2 werden bei der Operation 303 erzeugt.
-
Die 5E veranschaulicht ein Beispiel dafür, wie gemäß der Operation 310 virtuelle Haftfehler erzeugt werden können. Wie in der 5E gezeigt, werden XOR-Logikfunktionen an dem Haftfehlerwert von 0 der dritten Speicherzelle in dem Block B2, dem in dem Teilblock B1A zu speichernden dritten codierten Datenbit 0, dem in dem Teilblock B1B zu speichernden dritten codierten Datenbit 1 und dem in dem Teilblock B1C zu speichernden dritten codierten Datenbit 0 ausgeführt (wie durch die gestrichelten Linien mit den langen Strichen gezeigt), um einen virtuellen Haftfehlerwert von 1 zu erzeugen. XOR-Logikfunktionen werden an dem Haftfehlerwert von 1 der zehnten Speicherzelle in dem Block B2, dem in dem Teilblock B1A zu speichernden zehnten codierten Datenbit 0, dem in dem Teilblock B1B zu speichernden zehnten codierten Datenbit 1 und dem in dem Teilblock B1C zu speichernden zehnten codierten Datenbit 0 ausgeführt (wie durch die gestrichelten Linien mit den kurzen Strichen gezeigt), um einen virtuellen Haftfehlerwert von 0 zu erzeugen. XOR-Logikfunktionen werden außerdem an dem Haftfehlerwert von 0 der zwölften Speicherzelle in dem Block B2, dem in dem Teilblock B1A zu speichernden zwölften codierten Datenbit, dem in dem Teilblock B1B zu speichernden zwölften codierten Datenbit und dem in dem Teilblock B1C zu speichernden zwölften codierten Datenbit ausgeführt (nicht durch gestrichelte Linien gezeigt), um einen virtuellen Haftfehlerwert von 0 zu erzeugen.
-
Bei der Operation 311 werden die Positionsbits für den Block B2 und die Indexbits für den Block B1 auf der Grundlage der drei virtuellen Haftfehlerwerte codiert, um codierte Bits für den Block B2 und Indexbits für den Block B2 zu erzeugen, wie in der 5F gezeigt wird. Die drei codierten Bits für den Block B2, die sich in der 5F jeweils unter einem „V“ befinden, stimmen mit den bei der Operation 310 erzeugten drei entsprechenden virtuellen Haftfehlerwerten überein. Die in der 5F gezeigten 12 codierten Bits und 2 Indexbits für den Block B2 sind Zufallswerte, die als Beispiel angeführt und nicht mithilfe irgendeiner bestimmten Codiertechnik erzeugt werden.
-
Bei der Operation 312 werden bitweise XOR-Logikfunktionen an den in den Speicherzellen der Teilblöcke B1A bis B1C zu speichernden codierten Datenbits und den bei der Operation 311 erzeugten codierten Bits für den Block B2 ausgeführt, um Bits zum Speichern in den Speicherzellen des Blocks B2 zu erzeugen, wie in der 5G gezeigt wird.
-
Insbesondere werden in dem Beispiel aus der 5G bei der Operation 312 drei bitweise XOR-Logikfunktionen ausgeführt. Die erste bitweise XOR-Logikfunktion wird an den 16 in den Speicherzellen des Teilblocks B1A zu speichernden codierten Datenbits und den in den Speicherzellen des Teilblocks B1B zu speichernden 16 codierten Datenbits ausgeführt, um ein erstes 16-Bit-Zwischenergebnis zu erzeugen. Die zweite bitweise XOR-Logikfunktion wird an dem ersten 16-Bit-Zwischenergebnis und den in den Speicherzellen des Teilblocks B1C zu speichernden 16 codierten Datenbits ausgeführt, um ein zweites 16-Bit-Zwischenergebnis zu erzeugen. Die dritte bitweise XOR-Logikfunktion wird an 12 Bits des zweiten 16-Bit-Zwischenergebnisses und den entsprechenden 12 codierten Bits für den Block B2 ausgeführt, die bei der Operation 311 erzeugt wurden, um 12 Bits zum Speichern in den Speicherzellen des Blocks B2 zu erzeugen, wie in der 5G gezeigt wird.
-
Das 1. bis 4. und 9. bis 16. Bit des in der 5G gezeigten 16-Bit-XOR-Ergebnisses sind 12 Bits zum Speichern in der entsprechenden 1. bis 4. und 9. bis 16. Speicherzelle des Blocks B2. Das 3., 10. und 12. Bit des in der 5G gezeigten XOR-Ergebnisses stimmen überein mit den entsprechenden Haftfehlerwerten der 3., 10. und 12. Speicherzelle des Blocks B2, die in der 5B gezeigt werden.
-
Das 5. bis 8. Bit des in der 5G gezeigten XOR-Ergebnisses sind das 5. bis 8. Bit des zweiten 16-Bit-Zwischenergebnisses der bei der Operation 312 ausgeführten zweiten bitweisen XOR-Logikfunktion. Das 5. bis 8. Bit des zweiten 16-Bit-Zwischenergebnisses der bei der Operation 312 ausgeführten zweiten bitweisen XOR-Logikfunktion werden in der dritten bitweisen XOR-Logikfunktion bei der Operation 312 nicht verwendet.
-
Bei der Operation 315 werden bitweise XOR-Logikfunktionen an den XOR-Ergebnissen der Operation 312 und den log2b-Bits, die die Position des Blocks B3 in dem Block B2 anzeigen, in Verbindung mit den Indexbits für den Block B2 ausgeführt, um Bits zum Speichern in den Speicherzellen des Blocks B3 zu erzeugen, wie in der 5H gezeigt wird. Insbesondere werden in dem Beispiel aus der 5H bei der Operation 315 vier bitweise XOR-Logikfunktionen ausgeführt. Jede der vier bitweisen XOR-Logikfunktionen wird an zwei Mengen von 4 Bits ausgeführt.
-
Die erste bitweise XOR-Logikfunktion wird an dem 1. bis 4. Bit des in der 5G gezeigten 16-Bit-XOR-Ergebnisses und dem 5. bis 8. Bit des in der 5G gezeigten 16-Bit-XOR-Ergebnisses ausgeführt, um ein erstes 4-Bit-Zwischenergebnis zu erzeugen. Die zweite bitweise XOR-Logikfunktion wird an dem ersten 4-Bit-Zwischenergebnis der Operation 315 und dem 9. bis 12. Bit des in der 5G gezeigten 16-Bit-XOR-Ergebnisses ausgeführt, um ein zweites 4-Bit-Zwischenergebnis zu erzeugen. Die dritte bitweise XOR-Logikfunktion wird an dem zweiten 4-Bit-Zwischenergebnis der Operation 315 und dem 13. bis 16. Bit des in der 5G gezeigten 16-Bit-XOR-Ergebnisses ausgeführt, um 4 Bits zum Speichern in den Speicherzellen des Blocks B3 zu erzeugen, wie in der 5H gezeigt wird.
-
Bei den Beispielen aus den 5A bis 5I ist der Block B3 der kleinste Block. Daher werden keine weiteren Iterationen der Operationen 310 bis 314 ausgeführt. Bei der Operation 316 werden die bei der Operation 306 erzeugten codierten Datenbits in den entsprechenden Speicherzellen der Teilblöcke B1A bis B1C gespeichert, wie in der 51 gezeigt wird. Bei der Operation 316 werden außerdem die 12 Bits, die bei der Operation 312 zum Speichern in dem Block B2 erzeugt wurden, in den entsprechenden Speicherzellen des Blocks B2 gespeichert, und die 4 Bits, die bei der Operation 315 zum Speichern in dem Block B3 erzeugt wurden, werden in den entsprechenden Speicherzellen des Blocks B3 gespeichert, wie in der 51 gezeigt wird. Jede der in der 51 gezeigten Speicherzellen, die in der Speicherzelle mit einer 1 oder 0 beschriftet ist, weist einen Haftfehler mit dem in der Beschriftung angegebenen Wert auf, wie es vorstehend mit Bezug auf die 5A beschrieben wurde. Jedes der in einer Speicherzelle mit einem Haftfehler zu speichernden Bits weist denselben digitalen Wert wie dieser Haftfehler auf, wie in der 51 gezeigt wird. Die Decodieroperationen 401 bis 408 aus der 4 können auf die Beispiele aus den 5A bis 51 angewendet werden, indem die Schritte des Codierprozesses umgekehrt ausgeführt werden.
-
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, Festplattenspeicher, Compact Disc (CD), digitale Video-Disc (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 auf einem night flüchtigen computerlesbaren Medium gespeicherte computerlesbare Programmcode-Einheit ausgeführt sein, um eine Anzahl von über ein Netzwerk miteinander verbundenen Computersystemen dazu zu veranlassen, eine verteilte Bearbeitung zu bewirken.