DE102013016681B4 - Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern - Google Patents

Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern Download PDF

Info

Publication number
DE102013016681B4
DE102013016681B4 DE102013016681.0A DE102013016681A DE102013016681B4 DE 102013016681 B4 DE102013016681 B4 DE 102013016681B4 DE 102013016681 A DE102013016681 A DE 102013016681A DE 102013016681 B4 DE102013016681 B4 DE 102013016681B4
Authority
DE
Germany
Prior art keywords
matrix
control circuit
vector
data bits
bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102013016681.0A
Other languages
English (en)
Other versions
DE102013016681A1 (de
Inventor
Robert Eugeniu Mateescu
Cyril Guyot
Zvonimir Bandic
Luiz Franca-Neto
Qingbo Wang
Hessam Mahdavifar
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE102013016681A1 publication Critical patent/DE102013016681A1/de
Application granted granted Critical
Publication of DE102013016681B4 publication Critical patent/DE102013016681B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/14Implementation of control logic, e.g. test mode decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/02Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using elements whose operation depends upon chemical change
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD

Abstract

Datenspeichersystem, das umfasst:eine Speicherschaltung mit Speicherzellen undeine Steuerschaltung, die in der Lage ist, Datenbits zu empfangen, die zum Speichern in den Speicherzellen bereitgestellt werden,wobei die Steuerschaltung in der Lage ist, eine erste Matrix zu empfangen, wobei jede Zeile der ersten Matrix einem einzigartigen Datenbit entspricht, wobei die Steuerschaltung in der Lage ist, eine zweite Matrix zu erzeugen, die nur diejenigen Zeilen der ersten Matrix aufweist, die den Datenbits entsprechen, die zum Speichern in einer Teilmenge der Speicherzellen mit Haftfehlern bereitgestellt werden, wobei die Steuerschaltung in der Lage ist, eine dritte Matrix mit linear unabhängigen Spalten der zweiten Matrix zu erzeugen, undwobei die Steuerschaltung in der Lage ist, die Datenbits zu codieren, um mithilfe der dritten Matrix codierte Datenbits und redundante Bits zu erzeugen.

Description

  • 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 b1, b2, ... bS der Matrix MS 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 b1, b2, ... bS der Matrix MS, 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 b1, b2, ... bS der Matrix MS kennzeichnen, die zum Erzeugen der Matrix M'S verwendet werden, wird nachfolgend in der Gleichung (1) gezeigt. 2 s + s  log 2 s  log 2 k 2 s = s + s  log 2  log 2   k
    Figure DE102013016681B4_0001
  • 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. G e s a m t z a h l   v o n   I n d e x b i t s = 2 s + s  log 2  log 2   k
    Figure DE102013016681B4_0002
  • 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 a1, a2, ... , as/t in den Teilblöcken zu speichern, erzeugt ein Codierer eine Anzahl von Indexbits, die gleich 2 s t + s t log 2 ( k t s )
    Figure DE102013016681B4_0003
    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 log2log2ai erzeugt wird. Die Gesamtzahl der von dem Codierer bei dieser Ausführungsform erzeugten Indexbits wird in der Gleichung (3) gezeigt. A n z a h l  d e r   I n d e x b i t s   =   2 s + t ( g / t i = 1 log 2  log 2   a i )  
    Figure DE102013016681B4_0004
  • Die Funktion log2 log2 × 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. A n z a h l  d e r   I n d e x b i t s   =   2 s + s  log 2  log 2   k t s + 2 s t + s t log 2   k t s
    Figure DE102013016681B4_0005
  • 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 = (log2 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. A n z a h l  d e r   I n d e x b i t s   = 2 s + s  log 2  log 2 ( q  log 2 2 q ) + 2 log 2 2 q + 2 log 2 2 q × log 2 ( q  log 2 2 q )
    Figure DE102013016681B4_0006
  • Der zweite Term der Gleichung (5) lautet etwa s log2 log2 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. A n z a h l  d e r   I n d e x b i t s = 3 s + s  log 2  log 2  q
    Figure DE102013016681B4_0007
  • 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.

Claims (21)

  1. Datenspeichersystem, das umfasst: eine Speicherschaltung mit Speicherzellen und eine Steuerschaltung, die in der Lage ist, Datenbits zu empfangen, die zum Speichern in den Speicherzellen bereitgestellt werden, wobei die Steuerschaltung in der Lage ist, eine erste Matrix zu empfangen, wobei jede Zeile der ersten Matrix einem einzigartigen Datenbit entspricht, wobei die Steuerschaltung in der Lage ist, eine zweite Matrix zu erzeugen, die nur diejenigen Zeilen der ersten Matrix aufweist, die den Datenbits entsprechen, die zum Speichern in einer Teilmenge der Speicherzellen mit Haftfehlern bereitgestellt werden, wobei die Steuerschaltung in der Lage ist, eine dritte Matrix mit linear unabhängigen Spalten der zweiten Matrix zu erzeugen, und wobei die Steuerschaltung in der Lage ist, die Datenbits zu codieren, um mithilfe der dritten Matrix codierte Datenbits und redundante Bits zu erzeugen.
  2. Datenspeichersystem nach Anspruch 1, wobei die Steuerschaltung in der Lage ist, jedes der zum Speichern in einer entsprechenden Speicherzelle mit einem Haftfehler bereitgestellten Datenbits mit einem Wert des Haftfehlers zu vergleichen, und wobei die Steuerschaltung in der Lage ist, einen ersten Vektor zu erzeugen, der jedes der Datenbits kennzeichnet, das einen anderen Wert als den Wert des Haftfehlers der entsprechenden Speicherzelle aufweist, und der jedes der Datenbits kennzeichnet, das denselben digitalen Wert wie den Wert des Haftfehlers der entsprechenden Speicherzelle aufweist.
  3. Datenspeichersystem nach Anspruch 2, wobei die Steuerschaltung in der Lage ist, die dritte Matrix zu invertieren, um eine vierte Matrix zu erzeugen, wobei die Steuerschaltung in der Lage ist, die vierte Matrix mit dem ersten Vektor zu multiplizieren, um einen zweiten Vektor zu erzeugen, und wobei die Speicherschaltung in der Lage ist, die codierten Datenbits in den Speicherzellen zu speichern.
  4. Datenspeichersystem nach Anspruch 3, wobei die Steuerschaltung in der Lage ist, zu bewirken, dass die redundanten Bits den zweiten Vektor und die linear unabhängigen Spalten der zweiten Matrix anzeigen, die sich in der dritten Matrix befinden.
  5. Datenspeichersystem nach Anspruch 3, wobei die linear unabhängigen Spalten der zweiten Matrix, die sich in der dritten Matrix befinden, Spaltennummern aufweisen, und wobei die Steuerschaltung in der Lage ist, eine fünfte Matrix nur mit denjenigen Spalten aus der ersten Matrix zu erzeugen, die dieselben Spaltennummern aufweisen, wie die linear unabhängigen Spalten der zweiten Matrix, die sich in der dritten Matrix befinden.
  6. Datenspeichersystem nach Anspruch 5, wobei die Steuerschaltung in der Lage ist, die fünfte Matrix mit dem zweiten Vektor zu multiplizieren, um einen dritten Vektor zu erzeugen, und wobei die Steuerschaltung in der Lage ist, den dritten Vektor auf die Datenbits anzuwenden, um die codierten Datenbits zu erzeugen.
  7. Datenspeichersystem nach Anspruch 1, wobei die Speicherschaltung eine Anzahl s von Speicherzellen mit Haftfehlern umfasst, und wobei jede Teilmenge einer Anzahl s von Zeilen der ersten Matrix linear unabhängig ist.
  8. Datenspeichersystem nach Anspruch 1, wobei die erste Matrix durch Transponieren einer Paritätsprüfmatrix eines BCH-Codes erzeugt wird.
  9. Datenspeichersystem, das umfasst: eine Speicherschaltung mit Speicherzellen und eine Steuerschaltung, die in der Lage ist, aus den Speicherzellen gelesene codierte Datenbits zu empfangen, wobei die Steuerschaltung in der Lage ist, redundante Bits zu empfangen, wobei die Steuerschaltung in der Lage ist, eine erste Matrix zu empfangen, wobei die Steuerschaltung in der Lage ist, eine zweite Matrix zu erzeugen, die eine Teilmenge von Spalten aus der ersten Matrix aufweist, die auf der Grundlage einer ersten Teilmenge der redundanten Bits ausgewählt werden, wobei die Steuerschaltung in der Lage ist, einen ersten Vektor auf der Grundlage einer zweiten Teilmenge der redundanten Bits zu erzeugen, wobei die Steuerschaltung in der Lage ist, einen zweiten Vektor auf der Grundlage des ersten Vektors und der zweiten Matrix zu erzeugen, und wobei die Steuerschaltung in der Lage ist, den zweiten Vektor auf die codierten Datenbits anzuwenden, um Datenbits zu erzeugen.
  10. Datenspeichersystem nach Anspruch 9, wobei die Steuerschaltung in der Lage ist, den zweiten Vektor durch Multiplizieren des ersten Vektors mit der zweiten Matrix zu erzeugen.
  11. Datenspeichersystem nach Anspruch 10, wobei die Steuerschaltung in der Lage ist, mithilfe von Modulo-2-Addition jedes der codierten Datenbits zu einem entsprechenden Wert des zweiten Vektors zu addieren, um ein entsprechendes Datenbit zu erzeugen, und wobei die erste Matrix durch Transponieren einer Paritätsprüfmatrix eines BCH-Codes erzeugt wird.
  12. Datenspeichersystem nach Anspruch 9, wobei sich die Steuerschaltung und die Speicherschaltung in einer integrierten Schaltung befinden.
  13. Datenspeichersystem nach Anspruch 9, wobei sich die Steuerschaltung in einer ersten integrierten Schaltung befindet, und wobei sich die Speicherschaltung in einer zweiten integrierten Schaltung befindet.
  14. Verfahren für ein Datenspeichersystem, wobei das Verfahren umfasst: Empfangen von Datenbits, die zum Speichern in Speicherzellen einer Speicherschaltung bereitgestellt werden; Empfangen einer ersten Matrix, wobei jede Zeile der ersten Matrix einem anderen Datenbit entspricht; Erzeugen einer zweiten Matrix mithilfe einer Steuerschaltung, wobei die zweite Matrix nur diejenigen Zeilen der ersten Matrix aufweist, die den Datenbits entsprechen, die zum Speichern in einer Teilmenge der Speicherzellen mit Haftfehlern bereitgestellt werden; Erzeugen einer dritten Matrix mit linear unabhängigen Spalten der zweiten Matrix mithilfe der Steuerschaltung und Codieren der Datenbits auf der Grundlage der dritten Matrix und mithilfe der Steuerschaltung, um codierte Datenbits und redundante Bits zu erzeugen.
  15. Verfahren nach Anspruch 14, das außerdem umfasst: Vergleichen jedes der zum Speichern in einer entsprechenden Speicherzelle mit einem Haftfehler bereitgestellten Datenbits mithilfe der Steuerschaltung mit einem Wert des Haftfehlers und Erzeugen eines ersten Vektors mithilfe der Steuerschaltung, der jedes der Datenbits kennzeichnet, das einen anderen Wert als den Wert des Haftfehlers der entsprechenden Speicherzelle aufweist, und der jedes der Datenbits kennzeichnet, das denselben Wert wie den Wert des Haftfehlers der entsprechenden Speicherzelle aufweist.
  16. Verfahren nach Anspruch 15, das außerdem umfasst: Invertieren der dritten Matrix mithilfe der Steuerschaltung, um eine vierte Matrix zu erzeugen; Multiplizieren der vierten Matrix mit dem ersten Vektor mithilfe der Steuerschaltung, um einen zweiten Vektor zu erzeugen.
  17. Verfahren nach Anspruch 16, wobei das Codieren der Datenbits auf der Grundlage der dritten Matrix und mithilfe der Steuerschaltung, um codierte Datenbits und redundante Bits zu erzeugen, außerdem das Veranlassen des Anzeigens des zweiten Vektors und der linear unabhängigen Spalten der zweiten Matrix, die sich in der dritten Matrix befinden, mithilfe der redundanten Bits umfasst.
  18. Verfahren nach Anspruch 16, wobei die linear unabhängigen Spalten der zweiten Matrix, die sich in der dritten Matrix befinden, Spaltennummern aufweisen und das Verfahren außerdem umfasst: Erzeugen einer fünften Matrix mithilfe der Steuerschaltung, mit einer Teilmenge von Spalten aus der ersten Matrix, die dieselben Spaltennummern aufweisen, wie die linear unabhängigen Spalten der zweiten Matrix, die sich in der dritten Matrix befinden.
  19. Datenspeichersystem nach Anspruch 18, das außerdem umfasst: Multiplizieren der fünften Matrix mit dem zweiten Vektor mithilfe der Steuerschaltung, um einen dritten Vektor zu erzeugen, und wobei das Codieren der Datenbits auf der Grundlage der dritten Matrix und mithilfe der Steuerschaltung, um codierte Datenbits und redundante Bits zu erzeugen, außerdem das Anwenden des dritten Vektors auf die Datenbits umfasst, um die codierten Datenbits zu erzeugen.
  20. Verfahren für ein Datenspeichersystem, wobei das Verfahren umfasst: Empfangen von codierten, aus den Speicherzellen einer Speicherschaltung gelesenen Datenbits; Empfangen von redundanten Bits; Empfangen einer ersten Matrix; Erzeugen einer zweiten Matrix mithilfe einer Steuerschaltung, wobei die zweite Matrix eine Teilmenge von Spalten aus der ersten Matrix aufweist, die auf der Grundlage einer ersten Teilmenge der redundanten Bits ausgewählt werden; Erzeugen eines ersten Vektors auf der Grundlage einer zweiten Teilmenge der redundanten Bits mithilfe der Steuerschaltung; Erzeugen eines zweiten Vektors auf der Grundlage des ersten Vektors und der zweiten Matrix mithilfe der Steuerschaltung und Anwenden des zweiten Vektors auf die codierten Datenbits mithilfe der Steuerschaltung, um Datenbits zu erzeugen.
  21. Verfahren nach Anspruch 20, wobei das Erzeugen eines zweiten Vektors auf der Grundlage des ersten Vektors und der zweiten Matrix außerdem das Erzeugen des zweiten Vektors durch Multiplizieren des ersten Vektors mit der zweiten Matrix umfasst.
DE102013016681.0A 2012-10-10 2013-10-08 Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern Active DE102013016681B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/649,098 2012-10-10
US13/649,098 US9274884B2 (en) 2012-10-10 2012-10-10 Encoding and decoding data to accommodate memory cells having stuck-at faults

Publications (2)

Publication Number Publication Date
DE102013016681A1 DE102013016681A1 (de) 2014-04-10
DE102013016681B4 true DE102013016681B4 (de) 2019-12-05

Family

ID=49630277

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013016681.0A Active DE102013016681B4 (de) 2012-10-10 2013-10-08 Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern

Country Status (5)

Country Link
US (1) US9274884B2 (de)
JP (1) JP5805727B2 (de)
KR (1) KR101637065B1 (de)
DE (1) DE102013016681B4 (de)
GB (1) GB2507413B (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104658608B (zh) * 2013-11-22 2018-03-06 华为技术有限公司 存储设备的写入方法及写入装置
KR102098247B1 (ko) * 2013-11-25 2020-04-08 삼성전자 주식회사 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치
JP5918884B1 (ja) * 2015-05-12 2016-05-18 日本電信電話株式会社 復号装置、復号方法、およびプログラム
KR102565005B1 (ko) 2016-08-04 2023-08-07 에스케이하이닉스 주식회사 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템
DE102016225081A1 (de) * 2016-12-15 2018-06-21 Robert Bosch Gmbh Vorrichtung und Verfahren zum Bestimmen der Pinpoint-Fähigkeit möglicher Fehler einer oder mehrerer Komponenten
US10818359B2 (en) 2018-12-21 2020-10-27 Micron Technology, Inc. Apparatuses and methods for organizing data in a memory device
KR20200126178A (ko) 2019-04-29 2020-11-06 삼성전자주식회사 메모리 컨트롤러, 이를 포함하는 메모리 시스템 및 메모리 컨트롤러의 동작 방법
KR102384918B1 (ko) * 2020-07-29 2022-04-11 국방과학연구소 통신 파라미터 추정 장치 및 그 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7533321B2 (en) 2005-09-13 2009-05-12 International Business Machines Corporation Fault tolerant encoding of directory states for stuck bits
US8352839B2 (en) 2010-06-11 2013-01-08 International Business Machines Corporation Encoding data into constrained memory
US20130332799A1 (en) 2012-06-06 2013-12-12 University Of Pittsburgh Of The Commonwealth Systems Of Higher Education Recursively determined invertible set approach to correct multiple stuck-at faults in rewritable memory

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3949208A (en) 1974-12-31 1976-04-06 International Business Machines Corporation Apparatus for detecting and correcting errors in an encoded memory word
JPH06202963A (ja) * 1992-12-28 1994-07-22 Fujitsu Ltd メモリ故障検出回路
JPH09204365A (ja) * 1996-01-24 1997-08-05 Sony Corp メモリ検査符号発生回路
JP3452725B2 (ja) * 1996-06-11 2003-09-29 日本放送協会 トレリス軟判定誤り訂正回路およびトレリス変分調整方法
US6868022B2 (en) 2003-03-28 2005-03-15 Matrix Semiconductor, Inc. Redundant memory structure using bad bit pointers
US7069494B2 (en) * 2003-04-17 2006-06-27 International Business Machines Corporation Application of special ECC matrix for solving stuck bit faults in an ECC protected mechanism
US6839275B2 (en) 2003-06-04 2005-01-04 Hewlett-Packard Development Company, L.P. Memory system having control circuit configured to receive data, provide encoded received data to match a fault pattern in the array of memory cells
KR100713206B1 (ko) 2006-07-21 2007-05-02 연세대학교 산학협력단 다중고착 고장 진단을 위한 매칭 방법
KR20080102902A (ko) * 2007-05-22 2008-11-26 삼성전자주식회사 가변 부호화율을 가지는 ldpc 부호 설계 방법, 장치 및그 정보 저장 매체
US8144037B2 (en) 2007-07-12 2012-03-27 Intellectual Ventures Fund 44 Llc Blocking for combinatorial coding/decoding for electrical computers and digital data processing systems
CN102057438A (zh) 2008-06-11 2011-05-11 Nxp股份有限公司 相变存储器装置和控制方法
US8331168B2 (en) 2009-04-30 2012-12-11 International Business Machines Corporation Increased capacity heterogeneous storage elements
US8412987B2 (en) 2009-06-30 2013-04-02 Micron Technology, Inc. Non-volatile memory to store memory remap information
US8255742B2 (en) 2009-11-18 2012-08-28 Microsoft Corporation Dynamically replicated memory
US8839053B2 (en) 2010-05-27 2014-09-16 Microsoft Corporation Error correcting pointers for non-volatile storage
US8634235B2 (en) 2010-06-25 2014-01-21 Macronix International Co., Ltd. Phase change memory coding
US8996955B2 (en) * 2011-11-16 2015-03-31 HGST Netherlands B.V. Techniques for storing data in stuck and unstable memory cells

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7533321B2 (en) 2005-09-13 2009-05-12 International Business Machines Corporation Fault tolerant encoding of directory states for stuck bits
US8352839B2 (en) 2010-06-11 2013-01-08 International Business Machines Corporation Encoding data into constrained memory
US20130332799A1 (en) 2012-06-06 2013-12-12 University Of Pittsburgh Of The Commonwealth Systems Of Higher Education Recursively determined invertible set approach to correct multiple stuck-at faults in rewritable memory

Also Published As

Publication number Publication date
GB201317683D0 (en) 2013-11-20
JP2014078945A (ja) 2014-05-01
US20140101516A1 (en) 2014-04-10
KR101637065B1 (ko) 2016-07-06
US9274884B2 (en) 2016-03-01
JP5805727B2 (ja) 2015-11-04
GB2507413A (en) 2014-04-30
GB2507413B (en) 2014-12-10
DE102013016681A1 (de) 2014-04-10
KR20140046386A (ko) 2014-04-18

Similar Documents

Publication Publication Date Title
DE102013016681B4 (de) Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern
DE102013020712B4 (de) Techniken zum Speichern von Bits in Speicherzellen mit Hängenbleiben-auf-0-oder-1-Fehlern
DE112011100371B4 (de) Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts
DE102013215055B4 (de) Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
DE112012006014B4 (de) Verteilte Codewortteile
DE112012002843B4 (de) Anpassungsfähige Mehrbit-Fehlerkorrektur in Speichern mit begrenzter Lebensdauer
DE102015113414B4 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
DE102015201384A1 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
DE2328869A1 (de) Verfahren zur pruefung eines digitalen speichersystems sowie zur durchfuehrung dieses verfahrens dienendes selbstpruefendes digitales speichersystem
DE102015215401B4 (de) Speichervorrichtung und Verfahren zum Korrigieren einer gespeicherten Bitfolge
DE102007038114A1 (de) Fehlerkorrekturschaltung, Halbleiterspeicherelement und Fehlerkorrekturverfahren
DE112014002870T5 (de) Kombinations-Fehler- und Löschdecodierung für Produktcodes
DE69814465T2 (de) Verfahren und gerät zur datenspeicherung auf magnetischen medien, die fehlerkorrekturkodes enthalten
DE112020004922T5 (de) Speicherungsvorrichtung mit erhöhter beständigkeit
DE102007007546A1 (de) Fehlerkorrekturcode-Striping
DE112016002305T5 (de) Reduktion der Schreibverstärkung in einem Objektspeicher
DE102016107285B4 (de) Verfahren zur verwendung einer speichervorrichtung, speichervorrichtung und speichervorrichtungsanordnung
DE112020003961T5 (de) Vorhersagende speicherverwaltung
DE102020120211A1 (de) Polarer neuronaler Netzwerk-Decodierer für Speichervorrichtungen
DE102015102774A1 (de) Verfahren und vorrichtung zur verarbeitung eines löschzählers
DE102013016694B4 (de) Codieren und Decodieren redundanter Bits zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern
DE102019119753A9 (de) Generalisiertes verkettetes Fehlerkorrektur-Codierschema mit Lokalität
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE102013020713A1 (de) Techniken zum Codieren und Decodieren unter Verwendung eines kombinatorischen Zahlensystems

Legal Events

Date Code Title Description
R082 Change of representative

Representative=s name: MEWBURN ELLIS LLP, DE

R012 Request for examination validly filed
R016 Response to examination communication
R081 Change of applicant/patentee

Owner name: WESTERN DIGITAL TECHNOLOGIES, INC. (N.D.GES.D., US

Free format text: FORMER OWNER: HGST NETHERLANDS B.V., AMSTERDAM, NL

R082 Change of representative

Representative=s name: MEWBURN ELLIS LLP, DE

R018 Grant decision by examination section/examining division
R020 Patent grant now final