DE112011101116T5 - Two-Level BCH-Codes für Solid-State-Speichereinheiten - Google Patents

Two-Level BCH-Codes für Solid-State-Speichereinheiten Download PDF

Info

Publication number
DE112011101116T5
DE112011101116T5 DE112011101116T DE112011101116T DE112011101116T5 DE 112011101116 T5 DE112011101116 T5 DE 112011101116T5 DE 112011101116 T DE112011101116 T DE 112011101116T DE 112011101116 T DE112011101116 T DE 112011101116T DE 112011101116 T5 DE112011101116 T5 DE 112011101116T5
Authority
DE
Germany
Prior art keywords
codewords
code
bch
level
bch code
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.)
Granted
Application number
DE112011101116T
Other languages
English (en)
Other versions
DE112011101116B4 (de
Inventor
Evangelos S. Eleftheriou
Roy D. Cideciyan
Thomas Mittelholzer
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112011101116T5 publication Critical patent/DE112011101116T5/de
Application granted granted Critical
Publication of DE112011101116B4 publication Critical patent/DE112011101116B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • 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/1072Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2942Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes wherein a block of parity bits is computed only from combined information bits or only from parity bits, e.g. a second block of parity bits is computed from a first block of parity bits obtained by systematic encoding of a block of information bits, or a block of parity bits is obtained by an XOR combination of sub-blocks of information bits

Abstract

Es werden Verfahren und Vorrichtungen für das Codieren von Eingangsdaten zum Aufzeichnen im s-Level-Speicher (2) einer Solid-State-Speichereinheit (1) bereitgestellt, wobei s ≥ 2. Eingabedatenwörter werden in Gruppen mit M Eingabedatenwörtern in Übereinstimmung mit dem ersten und dem zweiten BCH-Code codiert, um für jede Gruppe einen Satz mit M ersten Codewörtern des ersten BCH-Codes zu erzeugen. Der Satz mit M ersten Codewörtern wird so erzeugt, dass zumindest eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt und wobei dieser zweite BCH-Code ein Subcode des ersten BCH-Codes ist. Die Sätze von M ersten Codewörtern werden dann im s-Level-Speicher aufgezeichnet (2). Wenn jedes der ersten und zweiten Codewörter N q-äre Symbole umfasst, bei denen q = pk, k ist eine positive ganze Zahl und p ist eine Primzahl, kann das q-äre Codealphabet auf den s-Level-Speicher (2) abgestimmt werden, indem sichergestellt wird, dass q und s die u-te beziehungsweise v-te Potenz einer gemeinsamen Basis r sind, wobei u und v positive ganze Zahlen sind und k ≥ u, wobei p(k/u)v = s.

Description

  • Die vorliegende Erfindung bezieht sich allgemein auf die Datencodierung in Solid-State-Speichereinheiten (SSDs). Es werden Verfahren und Vorrichtungen für die Codierung von Daten und die Aufzeichnung der codierten Daten in s-Level-Solid-State-Speichern bereitgestellt, bei denen s ≥ 2 die Anzahl verschiedener Werte (values) oder Zustände (levels) darstellt, die von der Speichergrundeinheit oder der ”Zelle” des Solid-State-Speichers angenommen werden können.
  • Eine Solid-State-Speichereinheit ist ein Speicher, der elektronische Schalttechnik, üblicherweise in integrierten Schaltkreisen, für die Datenspeicherung anstelle von herkömmlichen magnetischen oder optischen Medien wie Platten und Bänder benutzt. Durch Solid-State-Speichereinheiten wie zum Beispiel Flash-Speicher erfährt das Gebiet der Datenspeicherung derzeit eine wahre Revolution. Da diese Einheiten keine beweglichen Teile aufweisen, sind sie robuster als herkömmliche Speichereinheiten, und sie bieten eine außergewöhnliche Bandbreite, beträchtliche Einsparungen bei der Leistungsaufnahme und wahlfreie I/O-Leistung (Eingabe/Ausgabe), die um ganze Größenordnungen besser ist als diejenige von Festplattenlaufwerken (HDDs).
  • Herkömmliche Speichervorrichtungen wie zum Beispiel HDDs zeichnen Binärdaten auf. Das bedeutet, dass die Speichergrundeinheit in diesen Einheiten nur ein Bit der Daten speichert. Flüchtige Solid-State-Speichertechnologien wie zum Beispiel DRAMs (Dynamic Random Access Memories) zeichnen auch Binärdaten auf, und die Speichergrundzelle in solchen Speichern kann nur zwei Zustände annehmen (s = 2) und zeichnet daher nur Binärwerte auf. Bei anderen Typen von SSDs können die Speicherzellen jedoch mehr als zwei Zustände annehmen (s > 2). Zum Beispiel lassen Flash-Speicher und Phase Change Memory (PCM), zwei wichtige nichtflüchtige Speichertechnologien, Aufzeichnungen in mehreren Zuständen zu. Zum Beispiel können NOR-Flash-Speicher 4 Zustände, d. h. 2 Bits pro Zelle, aufzeichnen. Derzeit sind Multi-level Cell (MLC) NAND Flash-Speicherchips erhältlich, die 4 Datenbits pro einzelner Flash-Zelle unter Einsatz der 43-nm-Prozesstechnologie speichern können. Es wird erwartet, dass die PCM Technologie die Flash-Speichertechnologien ersetzt, wenn Prozesstechnologien unter 10 nm erforderlich sind. Wenn im Moment auch die handelsüblichen PCM-Chips nur ein Bit pro Zelle speichern, ist doch das Speichern von 4 Bits pro Zelle in PCM-Chips im Experiment vorgeführt worden.
  • Aufgrund des Erfolges von Solid-State-Speichern wie zum Beispiel Flash und PCM in Verbraucherprodukten wie Digitalkameras und Musikabspielgeräte werden diese Speichertechnologien jetzt auch für das Speichern im Unternehmensbereich ins Auge gefasst. Der Fehlerleistung, die bei Datenspeichereinheiten immer ein Hauptproblem ist, kommt immer mehr Bedeutung zu, wenn diese Technologien in den Unternehmensbereich vordringen. Während herkömmliche Speichervorrichtungen wie HDDs einen ECC-(error correction code = Fehlerkorrekturcode)Aufwand von ca. 10% bis 15% haben, beträgt er in handelsüblichen Flash-Speichern nur 2,5% bis 5%. In diesen Einheiten ist daher Effizienz kritisch für die EC-Codierung.
  • Bei den SSDs sind die Speicher in Speicherzonen oder Blöcken organisiert, die jeweils einen Satz Speicherplätze enthalten, in die Daten geschrieben werden können. Die EC-Codierung in SSDs wird durchgeführt, indem im Zustand der Schreibeinheit Redundanz hinzugefügt wird, d. h. in jeder Datenschreibadresse. Ein Flash-Speicher enthält zum Beispiel Datenschreibadressen, die als ”Seiten” bekannt sind. Jede Seite enthält eine Vielzahl von Sektoren, jedoch werden Schreibvorgänge normalerweise auf der Grundlage von Seiten durchgeführt. Ein EC-Code wird für die Eingabedaten berechnet, die auf jede Flash-Seite oder jeden Sektor in einer Seite geschrieben werden, und der EC-Code wird auf dieser Seite oder in diesem Sektor mit den Eingabedaten aufgezeichnet. Dieses Codieren ermöglicht das Beheben von Fehlern innerhalb der einzelnen Datenseiten. Lineare Codes wie RS-Codes (Reed-Solomon) und BCH-Codes (Bose-Chaudhuri-Hocquenghem) sind für dieses sogenannte ”One-level” EC-Codieren eingesetzt worden. „Lange” One-Level Codes, bei denen das Codieren auf der Grundlage einer Seite (d. h. ein Codewort pro Seite) durchgeführt wird, nutzen die vorhandene Seitenredundanz bestmöglich und zeigen daher die beste Fehlerleistung, die Implementierung dieser Schemas ist aber extrem komplex und geht bei großer Seitengröße und gewünschter starker Fehlerkorrekturfähigkeit mit einer hohen Leistungsaufnahme einher. Die Komplexität in Verbindung mit diesen Codes hängt von der Größe des endlichen Körpers ab (der Galoiskörper (GF)), in dem das arithmetische Codieren und Decodieren durchgeführt wird. (Im nachstehenden Text ist der Satz aller n-Tupel mit Elementen vom Galoiskörper mit q Elementen, z. B. mit GF (q) gekennzeichnet, ein Vektorraum, der mit GF(q)N)gekennzeichnet wird. Zum Beispiel sind lange One-Level-Codes für zwei verschiedene Seitengrößen mit einer Belegung von 2 KiB und 4 KiB ausgelegt worden. Es wurde angenommen, dass der verfügbare ECC-Aufwand (Redundanz) der langen One-Level-Codes mit Belegungen von 2 KiB und 4 KiB 56 Byte beziehungsweise 120 Byte betrug. Der beste 2 KiB One-Level RS-Code (dabei sind 2 KiB die Seitengröße) kann bis zu 20 wahlfrei gewählte 11-Bit-Symbole pro Seite korrigieren, erfordert aber eine GF(211)-Arithmetik sowohl zum Codieren als auch zum Decodieren. Der beste 4 KiB One-Level RS-Code kann bis zu 40 nach dem Zufallsprinzip gewählte 12-Bit-Symbole in einer Seite korrigieren, erfordert aber eine GF(212)-Arithmetik zum Codieren und zum Decodieren. Ferner erfordert der beste 2 KiB One-Level BCH-Code, der bis zu 29 nach dem Zufallsprinzip gewählte Bits pro Seite korrigieren kann, eine GF(2)-Arithmetik zum Codieren aber eine GF(215)-Arithmetik zum Decodieren. Der beste 4 KiB One-Level BCH-Code, der bis zu 60 nach dem Zufallsprinzip gewählte Bits pro Seite korrigieren kann, erfordert eine GF(2)-Arithmetik zum Codieren aber eine GF(216)-Arithmetik zum Decodieren. Aufgrund der übermäßigen Komplexität dieser langen Codes werden in der Praxis ”kurze” One-Level-Codes eingesetzt, die mehrere kürzere Codewörter in einer einzigen Seite enthalten, und damit wird die Fehlerleistung der Zweckmäßigkeit der Implementierung geopfert.
  • In der US-Patentschrift Nr. 7 047 478 B2 wird ein One-Level-Codiersystem für Multi-Level-Zellspeicherplatz offengelegt, bei dem der Betriebsmodus schaltbar ist zwischen einem Modus, in dem alle verfügbaren Speicherzustände benutzt werden und einem Modus, in dem nicht alle Zustände benutzt werden. Um dies zu bewerkstelligen, verwendet das Codierungsschema ein q-äres Alphabet (d. h. die Codewörter werden aus Symbolen gebildet, die q verschiedene Werte annehmen können) wobei q gleich der Anzahl der verfügbaren Zustände s der Multi-Level-Zellen ist.
  • Wie in "Integrated Interleaving – A Novel ECC Architecture," von M. Hassner, et al., IEEE Trans. an Magn., Bd. 37, Nr. 2, S. 773 bis 775, Mar. 2001, und in den US-Patentschriften Nr. 5 946 328 , 5 942 005 und 7 231 578 B2 beschrieben ist, sind in HDDs Two-Level-Codierschemas mit Einsatz von verschachtelten RS-Codes verwendet worden. Diese Systeme beruhen auf den generellen verketteten RS-Codes, die zum Beispiel beschrieben sind in: E. L. Blokhund V. V. Zyablov, "Generalized concatenated codes," Plenum Publishing Corporation, S. 218 bis 222, 1976 (übersetzt von Problemy Peredachi Informatsii, Bd. 10, Nr. 3, S. 45–50, Juli-Sept., 1974); und J. Maucher et al., "On the Equivalence of Generalized Concatenated Codes and Generalized Error Location Codes" IEEE Trans. an Information Theory, Bd. 46, Nr. 2, März 2000. Das oben angeführte Two-Level RS-Codierschema von Hassner et al. benutzt erste und zweite RS-Codes, mit C1 bzw. C2 gekennzeichnet, wobei der zweite RS-Code ein Subcode des ersten RS-Codes ist. Ein Satz von M ersten (C1) Codewörtern wird so erzeugt, dass eine lineare Kombination dieser M Codewörter ein zweites (C2) Codewort ist. Insbesondere sind eine Anzahl B ≥ 1 von gewichteten Summen der M C1 Codewörter im vorgenannten Satz jeweils C2 Codewörter des zweiten RS-Codes. Die Gewichtungskoeffizienten für diese gewichteten Summen werden von einer Vandermonde-Matrix definiert. Außerdem unterliegt das Codierschema der Begrenzung M < q, d. h., die Anzahl von C1 Codewörtern M im vorgenannten Satz ist geringer als die Gesamtanzahl der Elemente q des Galois-Körpers. Zum Beispiel gilt im Fall von binären linearen Codes über GF(q = 2) die Bedingung M < 2 für integrierte verschachtelte Codes, d. h. M = 1, und somit enthält die von Hassner et al. definierte Familie der integrierten verschachtelten Codes keine binären Two-Level-Codes. Die Benutzung von mehreren über einen Sektor verschachtelten RS-Codewörtern in diesem Schema erhöht die Robustheit gegen Burst-Fehler im HDD Kanal. RS-Codes sind dafür gut geeignet und werden im Allgemein bevorzugt. Dies kann teilweise auf die einfache Leistungsbewertung zurückzuführen sein, da die Gewichtsverteilungen von RS-Codes bekannt sind. Auch die Komplexität der Implementierung erweist sich als günstig im Vergleich mit BCH-Codes wie oben dargestellt, denn insbesondere das Decodieren ist bei RS-Codes erheblich weniger komplex.
  • Das Two-Level RS-Codieren ist auch für DRAMs eingesetzt worden, wie in "Reliable Memories with Subline Accesses", Junsheng Han et al., ISIT2007, Nizza, Frankreich, 24. Juni bis 29. Juni, S. 2531 bis 2535, und in der US-Patentanmeldung Nr. 2008/0168329 A1 erörtert wird. Das Two-Level RS-Codieren beruht auf dem oben angeführten integrierten Verschachtelungsschema von Hassner et al., obwohl Codeauslegungsdetails und Decodieralgorithmen nicht spezifiziert sind.
  • Bei einer Ausführungsform eines Aspekts der vorliegenden Erfindung wird ein Verfahren für die Aufzeichnung von Eingabedaten in den s-Level-Speicher einer Solid-State-Speichereinheit mit s ≥ 2 bereitgestellt. Das Verfahren umfasst:
    Codieren von Eingabedatenwörtern in Gruppen mit M Eingabedatenwörtern in Übereinstimmung mit dem ersten und dem zweiten BCH-Code, um für jede Gruppe einen Satz mit M ersten Codewörtern des ersten BCH-Codes zu erzeugen, so dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt, wobei der zweite BCH-Code ein Subcode des ersten BCH-Codes ist; und
    Aufzeichnung der Sätze der M ersten Codewörter in den s-Level-Speicher.
  • Anders als bei der üblichen Verwendung von RS-Codes wie oben besprochen verwenden Verfahren des Ausführungsbeispiels der vorliegenden Erfindung BCH-Codes zum Two-Level-Codieren in s-Level-Speichereinheiten. Ausführungsbeispiele der vorliegenden Erfindung beruhen teilweise auf der Erkenntnis, dass BCH-Codes besonders gut für die Korrektur der Fehlermuster in SSD Speicherkanälen geeignet sind. Außerdem kann mit der Verwendung eines Two-Level-BCH-Codierschemas der Vorteil der Fehlerleistung genutzt und gleichzeitig die Auswirkung der Komplexität des Decoders minimiert werden. Eine gute Fehlerratenleistung kann in der Tat erreicht werden, ohne dass die Komplexität der Implementierung wesentlich vergrößert wird. Mit der Verwendung von BCH-Codes können trotz der bestehenden Nachteile beim Two-Level-Codieren in SSDs hoch effiziente Fehlerkorrektursysteme mit niedriger Komplexität bei der Implementierung und geringer Leistungsaufnahme erzielt werden. Ferner können, wie weiter unten besprochen wird, die Merkmale des BCH-Codes leicht darauf abgestimmt werden, damit sie der Anzahl der s-Levels der SSD Zellen und der Fehlerstruktur des SSD Kanals entsprechen. Insgesamt gesehen können daher Aufzeichnungsverfahren, die die Erfindung ausmachen, praktische und leistungsfähige Systeme für das zuverlässige Speichern von Daten in s-Level Solid-State-Speichern bereitstellen.
  • Im Allgemeinen können Eingabedatenwörter, die codiert werden sollen, eine Vielzahl von Datensymbolen umfassen, und bei den Datensymbolen kann es sich um Symbole mit einem Bit (d. h. binäre) oder mit mehreren Bits handeln. In bevorzugten Ausführungsformen der Erfindung umfasst sowohl das erste als auch das zweite Codewort eine Vielzahl (mit N gekennzeichnet) von q-ären Symbolen, wobei q = pk, k ist eine positive ganze Zahl, und p ist eine Primzahl. Außerdem ist in besonders bevorzugten Ausführungsformen das q-äre Alphabet des Two-Level-BCH-Codes für den besonders leistungsfähigen Betrieb auf die Anzahl s-Level des Solid-State-Speichers abgestimmt. Dies wird mit der Benutzung eines Codes erreicht, bei dem q und s u-te bzw. v-te Potenzen einer gemeinsamen Basis r sind, und dabei sind u und v positive ganze Zahlen und k ≥ u. Dies gewährleistet, dass das q-äre Codealphabet zum s-ären Speicher gemäß der Bedingung p( k/u)v = s ”passt”. Wenn sichergestellt wird, dass der Code diese Auflage des „passenden Alphabets” erfüllt, können die q-ären Codewortsymbole einfach und effizient für die Aufzeichnung im s-Level-Speicher in ein s-äres Alphabet umgesetzt werden und stellen einen hocheffizienten Betrieb sowie eine Flexibilität bei der Wahl des Codes bereit. Da insbesondere q und s in manchen Fällen gleich sein könnten, werden weiter unten bevorzugte Ausführungsformen ausführlich dargestellt, in denen q ≠ s. Da die die Erfindung verkörpernden Verfahren darüber hinaus für binäre (s = 2) Solid-State-Speicher eingesetzt werden können, stellen bevorzugte Ausführungsformen einen flexiblen und effizienten Betrieb von Multi-Level-Solid-State-Speichern (s > 2) bereit.
  • In besonders bevorzugten Ausführungsbeispielen wird jeder Satz von M ersten Codewörtern an einer jeweiligen Schreibadresse des Solid-State-Speichers aufgezeichnet. In einem Flash-Speicher zum Beispiel enthält jede Seite einen einzigen Satz von M ersten Codewörtern. Es kann jedoch bei manchen Ausführungsformen wünschenswert sein, eine Vielzahl von Sätzen von M ersten Codewörtern in jeder Schreibadresse aufzuzeichnen, zum Beispiel ein Satz pro Sektor einer Flash-Seite. Es sind auch Ausführungsformenvorstellbar, bei denen jeder Satz von M ersten Codewörtern in einer Vielzahl von Schreibadressen des Solid-State-Speichers aufgezeichnet wird.
  • Gemäß einer Ausführungsform eines anderen Aspekts der Erfindung wird ein Computerprogramm bereitgestellt, das Programmcodemittel dazu umfasst, dass ein Computer ein Verfahren gemäß dem ersten Aspekt der Erfindung durchführt. Es versteht sich, dass der Begriff „Computer” im allgemeinsten Sinn verwendet wird und jegliche Einheit, Komponente oder ein System einschließt, die fähig zur Datenverarbeitung sind, um ein Computerprogramm zu implementieren. Außerdem kann ein Computerprogramm, das die Erfindung verkörpert, ein unabhängiges Programm darstellen, oder es kann ein Element eines größeren Programms sein, und es kann zum Beispiel auf einem computerlesbaren Medium wie zum Beispiel einer Platte oder einer elektronische Übermittlung zum Laden in einen Computer dargeboten werden. Das Programmcodemittel des Computerprogramms kann jeglichen Ausdruck in jeglicher Sprache, beliebigem Code oder Notation eines Satzes von Anweisungen umfassen, die dazu beabsichtigt sind, dass ein Computer das betreffende Verfahren durchführt, und zwar entweder direkt oder nach allein der (a) Umsetzung in eine andere Sprache, Code oder Notation oder/und (b) Wiedergabe in einer anderen materiellen Form.
  • Eine Ausführungsform eines dritten Aspekts der Erfindung stellt eine Solid-State-Speichereinheit bereit, die Folgendes umfasst:
    Einen s-Level-Solid-State-Speicher, bei dem s ≥ 2; und
    einen Two-Level-BCH-Codierer für das Codieren von Eingabedatenwörtern in Gruppen mit M Eingabedatenwörtern in Übereinstimmung mit dem ersten und dem zweiten zu erzeugenden BCH-Code, für jede Gruppe einen Satz von M ersten Codewörtern des ersten BCH-Codes, so dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt, wobei der zweite BCH-Code ein Subcode des ersten BCH-Codes ist;
    wobei die Einheit so eingerichtet ist, dass sie die Sätze von M ersten Codewörtern im s-Level-Speicher aufzeichnet.
  • Ein Ausführungsform eines vierten Aspekts der Erfindung stellt eine Codiervorrichtung für das Codieren von Eingabedaten bereit, die in der s-Level-Solid-State-Speichereinheit aufgezeichnet werden sollen, bei der s ≥ 2. Die Codiervorrichtung umfasst:
    Einen Two-Level-BCH-Codierer für das Codieren von Eingabedatenwörtern in Gruppen von M Eingabedatenwörtern in Übereinstimmung mit dem ersten und dem zweiten zu erzeugenden BCH-Code, für jede Gruppe einen Satz von M ersten Codewörtern des ersten BCH-Codes, so dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt, wobei der zweite BCH-Code ein Subcode des ersten BCH-Codes ist, wobei sowohl das erste als auch das zweite der Codewörter N q-äre Symbole umfasst, bei denen q ≠ s, q = pk, k ist eine positive-ganze Zahl, und p ist eine Primzahl, bei denen q und s u-te bzw. v-te Potenzen einer gemeinsamen Basis r sind, und dabei sind u und v positive ganze Zahlen und k ≥ u, dabei ist p(k/u)v = s; und
    einen Symbolumsetzer für die Umsetzung der q-ären Symbole jedes ersten Codeworts in ein s-äres Alphabet für die Aufzeichnung im s-Level-Speicher.
  • Wenn hier im Allgemeinen Merkmale mit Bezugnahme auf eine Ausführungsform eines Aspekts der Erfindung beschrieben werden, können entsprechende Merkmale in Ausführungsformen eines anderen Aspekts der Erfindung bereitgestellt werden.
  • Nachfolgend wird beispielhaft eine bevorzugtes Ausführungsform der Erfindung unter Bezugnahme auf die begleitenden Figuren beschrieben, die Folgendes zeigen:
  • 1 ist ein schematisches Blockschaubild einer s-Level Solid-State-Speichereinheit, die die Erfindung verkörpert;
  • 2 zeigt ein erstes Two-Level-Codierschema für den Einsatz in der Einheit der 1;
  • 3 zeigt ein zweites Two-Level-Codierschema für den Einsatz in der Einheit der 1;
  • 1 ist eine vereinfachte schematische Darstellung einer Solid-State-Speichereinheit, hier eine Flash-Speichereinheit 1, mit den Hauptelementen, die zu dem zu beschreibenden Codiersystem dazugehören. Die Einheit 1 beinhaltet einen s-Level-Flash-Speicher 2 zum Speichern in integrierten Arrays von Flash-Speicherzellen, wobei jede Zelle s ≥ 2 verschiedene Speicherzustände annehmen kann. Der Flash-Speicher 2 wird hier in dieser Figur zwar nur als ein einziger Block gezeigt, er kann aber generell jede gewünschte Konfiguration von Flash-Speichereinheiten umfassen, die zum Beispiel von einem einzigen Chip oder Blockschnitt bis zu einer Vielzahl von Speicherbänken reichen, die jeweils mehrere Packs mit Speicherchips enthalten. Die Einheit 1 weist eine Codiervorrichtung auf, die in verallgemeinerter Form so dargestellt wird, dass sie einen Two-Level-BCH-Codierer 3 enthält und einen Symbolumsetzer 4, der von der gestrichelten Linie in der Figur umgeben ist. Der Symbolumsetzer 4 umfasst einen Umsetzer 5 für q-är zu r-är und eine Channel-Mapping-Einheit 6. Die entsprechende Decodiervorrichtung der Einheit 1 wird in der Figur allgemein als Decoder 7 angegeben.
  • Im Allgemeinen könnte die Funktionalität des BCH-Codierers 3, des Symbolumsetzers 4 und des Decoders 7 in Hardware, Software oder in einer Kombination davon implementiert werden. Zum Beispiel könnte der Codiervorgang im BCH-Codierer 3 vollständig oder teilweise von Software durchgeführt werden, die einen Prozessor der Codiervorrichtung so konfiguriert, dass das unten ausführlich dargestellte Codierschema implementiert wird. Dem Fachmann wird nach der Beschreibung eine solche geeignete Software bekannt sein. Jedoch wird aus Gründen der Betriebsgeschwindigkeit der Einsatz von verdrahteten Logikschaltkreisen allgemein für die möglichst weitgehende Implementierung der Funktionalität bevorzugt. Außerdem könnte der Codierprozess im Allgemeinen durch systematisches Codieren implementiert werden (wenn die Eingabedaten in den Codierprozess durch das Codieren unverändert bleiben, ein Paritätscode zu den nichtcodierten Symbolen jedoch hinzugefügt wird, um das Ausgabe-Codewort zu erhalten), oder durch nichtsystematisches Codieren (wenn die Eingabedaten in den Codierprozess durch das Codieren in das Ausgabecodewort eingebettet werden). Zwecks Einfachheit der Implementierung des Codierers (und des entsprechenden Decoders) wird jedoch das systematische Codieren bevorzugt. Geeignete Implementierungen der Codier- und der Decodiervorrichtung der Einheit 1 werden dem Fachmann nach dieser Beschreibung ohne Weiteres geläufig sein.
  • Beim Betrieb der Einheit 1 werden die im Flash-Speicher 2 zu speichernden Eingabedaten für den BCH-Codierer 3 bereitgestellt. Die Eingabedaten umfassen eine Aufeinanderfolge von Eingabedatenwörtern, diese werden vom BCH-Codierer 3 mit einem weiter unten beschriebenen Two-Level-BCH Codierschema in Gruppen mit M Eingabedatenwörtern codiert. Für jede Gruppe mit M Eingabedatenwörtern (die Wörter mit verschiedenen Anzahlen von Datensymbolen umfassen können, wie weiter unten beschrieben wird), gibt der BCH-Codierer 3 einen Satz von M q-ären Symbolcodewörtern aus (d. h. ein einziges Symbol dieser Codewörter kann q mögliche Werte haben), wobei q = pk, k ist eine positive ganze Zahl, und p ist eine Primzahl. Je nach der Beziehung zwischen q und s funktioniert der Symbolumsetzer 4 wie weiter unten beschrieben, um die q-ären Symbolcodewörter in ein s-äres Alphabet für die Aufzeichnung umzusetzen. Die s-ären Symbolcodewörter werden dann im Flash-Speicher 2 aufgezeichnet, wobei jede Flash-Zelle ein s-äres Symbol eines Codeworts speichert. Bei dieser Ausführungsform stellt jede Seite des Flash-Speichers ausreichend Speicherplatz für einen einzelnen Satz von M s-ären Codewörtern bereit, wobei jeder Satz von M s-ären Codewörtern in einer jeweiligen Flash-Seite gespeichert wird. Wenn dann später eine Seite aus dem Flash-Speicher 2 gelesen wird, führt der Decoder 7 den zur Codiervorrichtung 3, 4 umgekehrten Vorgang durch, um die s-ären Codewörter zu decodieren, und er implementiert die Fehlerentdeckung und die Wiederherstellung auf allgemein bekannte Weise. Damit werden die ursprünglichen Eingabedatenwörter wiederhergestellt und vom Decoder 7 als Ausgabedaten bereitgestellt.
  • Nun wird die Funktion des BCH-Codierers 3 ausführlicher dargestellt. Jede für den Codierer 3 bereitgestellte Gruppe von M Eingabedatenwörtern besteht aus (M – P)K1-Symbol Datenwörtern aus dem Vektorraum GF(q)K 1 und PK2-Symbol Datenwörtern aus dem Vektorraum GF(q)K 2. Der Codierer 3 ordnet die (M – P)K1-Symbol Datenwörter den jeweiligen N-Symbol ersten Codewörtern in Übereinstimmung mit einem ersten BCH-Code zu. Dieser erste BCH-Code besteht aus einem vordefinierten Satz von N-Tupeln aus dem Vektorraum GF(q)N. Somit ordnet der Code die eingegebenen q-är-Symbol Datenwörter den q-är-Symbol ersten Codewörtern auf einer Eins-zu-Eins-Basis zu, wobei N – K1 Paritätssymbole in jedem der (M – P) ersten Codewörter einen ersten Teil der Redundanz bereitstellen, die für den ECC-Prozess notwendig ist. Ferner ordnet der Codierer 3 die verbleibenden PK2-Symbol Datenwörter den jeweiligen N-Symbol zweiten Codewörtern in Übereinstimmung mit einem zweiten BCH-Code zu. Dieser zweite BCH-Code besteht aus einem weiteren vordefinierten Satz von N-Tupeln aus dem Vektorraum GF(q)N und ist ein Subcode des ersten BCH-Codes, d. h., der Satz aller zweiten Codewörter ist ein Teilsatz des Satzes aller ersten Codewörter. Somit ordnet der zweite Code die eingegebenen q-är-Symbol Datenwörter dem q-är-Symbol zweiten Codewörtern (die auch erste Codewörter sind) auf einer Eins-zu-Eins-Grundlage zu, wobei N – K2 Paritätssymbole in jedem der P Codewörter einen zweiten Teil der Redundanz bereitstellen, die für den ECC-Prozess notwendig ist. Somit erzeugt der Codierer einen ursprünglichen Satz von M Codewörtern. Dann wird ein letzter Satz von M Codewörtern erhalten, indem die P zweiten Codewörter im ursprünglichen Satz durch P veränderte (erste) Codewörter ersetzt werden, in dem das i-te Symbol (wobei i = 1 bis N) jedes veränderten Codeworts eine bestimmte lineare Kombination der i-ten Symbole der M Codewörter im ursprünglichen Satz ist. Diese veränderten Codewörter werden so erzeugt, dass der letzte Satz von M ersten Codewörtern durch den zweiten BCH-Code zwingend belegt wird. Spezifisch ist zumindest eine vorbestimmte lineare Kombination des Satzes von M ersten Codewörtern ein Codewort des zweiten BCH-Codes. Somit erzeugt der resultierende Satz von M ersten Codewörtern, wenn er nach einer oder mehreren vorbestimmten linearen Kombinationen kombiniert wird, ein oder mehrere zweite Codewörter des zweiten BCH-Codes.
  • Vorstehend wird ein Beispiel einer Implementierung für das Two-Level-Codierschema im Codierer 3 beschrieben, es sind aber verschiedene Two-Level-Codeaufbauten im Codierer 3 vorstellbar. Gemäß den Ausführungsformen der Erfindung wird jede Gruppe von M Eingabedatenwörtern in Übereinstimmung mit den ersten und den zweiten BCH-Codes codiert, um einen Satz von M ersten. Codewörtern des ersten BCH-Codes so zu erzeugen, dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt und dieser zweite Code ein Subcode des ersten BCH-Codes ist. Ein einfaches Beispiel ist schematisch in 2 dargestellt. Die ersten und die zweiten Codewörter sind durch die beiden unterschiedlichen rechteckigen Blöcke oben in der Figur dargestellt. Die zweiten Codewörter wie auch die ersten Codewörter bestehen jeweils aus N q-ären Symbolen wie angegeben. Bei einer gegebenen Gruppe von M Eingabedatenwörtern ordnet der resultierende Satz von M ersten Codewörtern bei Verkettung in einer definierten Reihenfolge effektiv ein Two-Level-Codewort des gesamten Two-Level-BCH-Codes zu, wie in der Mitte der Figur gezeigt ist. Dieses Two-Level-Codewort erfüllt die unten in der Figur dargestellte Bedingung. Diese besteht darin, dass die Summe (Symbol-für-Symbol) der M ersten Codewörter ein Codewort des zweiten BCH-Codes erzeugt.
  • Ein weiteres Beispiel eines Two-Level-Codierschemas ist in 3 dargestellt. In diesem Fall erzeugt jede einer Vielzahl von linearen Kombinationen der M ersten Codewörter ein Codewort des zweiten BCH-Codes. Insbesondere ist bei einem definierten Verkettungsbefehl jede einer Vielzahl von gewichteten Summen der M ersten Codewörter ein jeweiliges zweites Codewort. Dies wird in verallgemeinerter Form von der Bedingung unten in der Figur dargestellt, wobei ”*” die Multiplikation kennzeichnet. Insbesondere werden zweite Codewörter von P gewichteten Summen der M Codewörter erhalten, wobei die Gewichtungskoeffizienten für diese gewichteten Summen durch ein Paritätsprüfmuster definiert werden, das einem dritten linearen Code entspricht, wie nachstehend beschrieben wird.
  • Diese Klasse von Two-Level-BCH-Codes C über dem endlichen Körper GF(q) beruht auf der Definition von drei Codes C1 und C2 und C* über dem endlichen Körper GF(q), wobei q eine Potenz einer Primzahl ist. Der Code C1 ist der erste BCH-Code [N, K1, d(C1)] mit minimaler Entfernung d(C1), die vom (N – K1) × N Paritätsprüfmuster H1 definiert wird. Der zweite Code C2 ist der zweite BCH-Code [N, K2, d(C2)] mit minimaler Entfernung d(C2). Dies ist ein Subcode des ersten Codes C1 und wird vom (N – K2) × N Paritätsprüfmuster
    Figure 00130001
    definiert, wobei Ha ein (K1 – K2) × N Paritätsprüfmuster ist, das die Auflagen der Paritätsprüfung darstellt, die der C2 Code zusätzlich zu den Auflagen H1 der Paritätsprüfung erfüllen muss. Es sei H* = [h*i,j] ein vollständiges Paritätsprüfmuster über GF(q) der Größe P × M, das einen linearen [M, K*, d(C*)] Code der Dimension K* = M – P und mit minimaler Entfernung d(C*) ist. Der gesamte Two-Level-Code C der Länge MN, der aus dem linearen Code C* mit dem Paritätsprüfmuster H* = [h*i,j] und den Codes C1 und C2 erzielt wird, wobei C2 ⊂ C1, wird vom nachstehenden Paritätsprüfmuster definiert,
    Figure 00130002
    Blockmuster der Größe [(N – K1)M + (K1 – K2)P] × [MN] ist, das auch durch Hb = [h*i,jHa] auf der Grundlage dessen charakterisiert werden kann, dass eine einfache Darstellung des (i, j)-ten Subblocks von Hb benutzt wird. Die Musterelemente h*i,j geben hier die Gewichtungskoeffizienten für die gewichteten Summen in 3 an. Es kann gezeigt werden, dass der resultierende Two-Level-Code C der Länge MN die Dimension K*K1 + PK2 und minimale Entfernung hat: d(C) = min{d(C*)d(C1), d(C2)}.
  • Es ist klar, dass zahlreiche Two-Level-BCH-Codes nach den Codierarchitekturen der 2 und 3 aufgebaut werden können, und insbesondere die Codes C1 und C2 und C* können nach den Parametern von Einzelsystemen gewählt werden. Zum Beispiel können spezifische Codes gewählt werden, und dies auf der Grundlage der Anzahl von s-Levels des s-ären Speichers und der Leistungserfordernisse eines gegebenen Systems. Zur Verbesserung der Leistungsfähigkeit und Vereinfachung der Implementierung wird jedoch in bevorzugten Ausführungsbeispielen der Einheit 1 der BCH-Code so gewählt, dass: q = pk = ru, wobei k ≥ u; und (1) s = rv. (2) wobei u und v positive ganze Zahlen sind. In anderen Worten, q und s sind die u-te beziehungsweise v-te Potenz einer gemeinsamen Basis r. Dies führt zu der Bedingung: p(k/u)V = s, die hier als Auflage des ”übereinstimmenden Alphabets” gilt. Die Erfüllung dieser Auflage stellt sicher, dass das q-äre Alphabet des Two-Level-BCH-Codes mit dem s-ären Speicher zwecks effizientestem Betrieb der Einheit übereinstimmt. Insbesondere wird Flexibilität bei der Wahl der Codierung bereitgestellt und gleichzeitig sichergestellt, dass der q-äre Code im Symbolumsetzer 4 einfach und effizient zu einem s-ären Alphabet umgesetzt werden kann. Somit beschränken sich Codierschemas nicht auf diejenigen, bei denen q = s, sondern sie können so ausgewählt werden, dass sie zu besten Ergebnissen für die besonderen s-Level-Speichermerkmale führen. Beim Betrieb der Vorrichtung 1, wobei s ≠ q, werden die q-är Symbol Codewörter zu r-är Symbol Codewörtern umgesetzt, und zwar durch den q-är zu r-är Umsetzer 5, wobei rv = s ist, wie oben definiert. Wenn hier v > 1, (d. h. r ≠ s), können die r-är Symbole den s Speicherkanälen des Speichers 2 in der Kanalzuordnungseinheit 6 zugeordnet werden. Insbesondere werden aufeinanderfolgende Sätze von v r-är Symbolen jedes r-är Eingabecodeworts den jeweiligen entsprechenden Zuständen des s-Level-Speichers in Übereinstimmung mit einem vorbestimmten Zuordnungsschema zugeordnet, das alle möglichen Werte von v r-är Symbolen den anderen der s-Levels zuordnet. Die Kanalzuordnung kann hier auf jede beliebige Weise durchgeführt werden, indem zum Beispiel ein bekanntes Gray Zuordnungsschema benutzt wird, das zu den Fehlermerkmalen des s-ären Speichers passt, wie sich für den Fachmann zeigt. Jeder Satz von v r-ären Eingabesymbolen entspricht somit einem s-ären Symbol am Ausgang der Kanalzuordnungseinheit 6 und wird als der entsprechende Zustand in einer jeweiligen s-ären Zelle des Speichers 2 aufgezeichnet.
  • In Ausführungsbeispielen, bei denen u = 1 wobei q = r, ist eine Umsetzung von q-är zu r-är natürlich nicht notwendig, und der Umsetzer 5 kann weggelassen oder übergangen werden. Wenn jedoch r ≠ s angenommen wird, kann die Kanalzuordnung immer noch wie oben durchgeführt werden, hier für Sätze von v q-ären Symbolen. Ebenso kann in der Ausführungsform, bei der r = s ist, die Kanalzuordnungseinheit 6 weggelassen oder übergangen werden. Im Allgemeinen kann daher der Symbolumsetzer 4 eine oder beide Umsetzungen von q-är zu r-är und die Kanalzuordnung nach den besonderen Parametern des Speichersystems vornehmen. Es wird darauf hingewiesen, dass die beschriebene Two-Level-Codiertechnik auch für Systeme eingesetzt werden kann, in denen q = s, und in diesem Fall kann der Symbolumsetzer 4 insgesamt weggelassen oder umgangen werden.
  • Das obige System bietet zwar außergewöhnliche Flexibilität bei der Wahl der Codierung, es werden aber nachstehend zwei besonders interessante Familien von Codierschemas für den Einsatz in der Speichereinheit 1 beschrieben.
  • Die erste Familie Codierschemas zeichnet sich durch r = s > 2 aus und ist besonders nützlich, wenn der Speicherkanal als ein s-äres Kanalmodell mit unabhängigen s-ären Symbolfehlern beschrieben werden kann. Die zweite Familie Codierschemas zeichnet sich durch r = 2 und k = u aus und ist besonders nützlich, wenn die Verkettung der Kanalzuordnungseinheit, des Speicherkanals, des Rückleseprozesses und der umgekehrten Kanalzuordnung im Decoder 7 mit einem binären Kanal mit unabhängigen Bitfehlern beschrieben werden kann. Der unabhängige Bitfehlerkanal ist ein gutes Modell für nichtflüchtige s-Level-Speicher, wenn Gray-Codierung als Kanalzuordnung benutzt wird und Fehler im nichtflüchtigen Speicherkanal dazu führen, dass ein Kanalzustand irrtümlicherweise als ein anschließender Kanalzustand gelesen wird. In diesem Fall ist q = 2k, r = 2 und s = 2v. Für einen. unabhängigen Bitfehlerkanal wäre es gut, ein Two-Level binäres BCH-Codierschema zu wählen, bei dem q = 2, d. h., p = 2 und k = 1 ist. Es kann jedoch vorteilhaft sein, aus Gründen der Implementierung und/oder Fehlerratenleistung einen Code über GF(q), q > 2 zu nutzen, wobei die Arithmetik des endlichen Körpers in GF(q = 2k), k > 1 durchgeführt wird.
  • Nun werden zwei spezifische Beispiele von Two-Level-Codes für Flash-Speicher detailliert beschrieben. Derzeit enthält eine typische Seite im Flash-Speicher 4 KiB Benutzerdaten. Ferner wird angenommen, dass die verfügbare ECC Redundanz pro Seite 224 Byte beträgt. Wenn ein Binärcode benutzt wird, muss die Codelänge MN 34560 (in Bit) betragen, und die Dimension des Codes muss zumindest 32768 (in Bit) betragen. Es werden zwei binäre Two-Level-Codes mit Länge 34560 = M × N = 9 × 3840 konstruiert auf der Grundlage von Länge-3840 binäre BCH-Codes mit Decodieralgorithmen über GF(212).
  • Im ersten Beispiel wird der binäre Two-Level-Code C von einem ersten binären BCH-Code C1 mit Parametern [N = 3840, K1 = 3660, d1 = 31] konstruiert, ein zweiter binärer BCH-Code C2 mit den Parametern [N = 3840, K2 = 3492, d2 = 59], und der Einzelparitätsprüfcode C* mit Länge M = 9, Dimension K* = 8 und d(C*) = 2. Der resultierende Two-Level-Code hat die Dimension 32772 und kann daher 4 KiB Nutzerdaten aufnehmen. Ferner kann d(C) = 59, d. h. der Code, bis zu 29 Fehlern korrigieren.
  • Im zweiten Beispiel wird der binäre Two-Level-Code C von einem ersten binären BCH-Code C1 mit Parametern [N = 3840, K1 = 3732, d1 = 19] konstruiert, ein zweiter binärer BCH-Code C2 mit den Parametern [N = 3840, K2 = 3528, d2 = 53], und der gekürzte Hamming Code C* mit Länge M = 9, Dimension K* = 5 und d(C*) = 3. Der resultierende Two-Level-Code hat die Dimension 32772 und kann daher 4 KiB Nutzerdaten aufnehmen. Ferner kann d(C) = 53, d. h. der Code, bis zu 26 Fehler korrigieren.
  • Diese binären Two-Level-Code-Beispiele über GF(2) sollten mit dem binären BCH-Code mit den Parametern [34560, 32768, 225] verglichen werden. Dieser lange BCH-Code kann bis zu 112 Fehler korrigieren, aber sein Decodieralgorithmus funktioniert im breiten GF(216) Körper, der derzeit für SSD Speicheranwendungen unpraktisch ist.
  • Ein anderer Vergleich des oben beschriebenen Two-Level-Codes wird mit einem 9-Wege-Verschachtelungsungsschema eines binären One-Level-BCH-Codes mit den Parametern [3840, 3648, 33] angestellt, der bis zu 16 Fehler korrigieren kann. Der Decoder für jeden der 9 verschachtelten BCH-Codes funktioniert über GF(212). Obwohl die Two-Level-Codes Decoder haben, die über den gleichen GF(212) Körper funktionieren, können sie im Vergleich zum einfachen 9-Wege-Verschachtelungsschema substanziell mehr Fehler korrigieren.
  • Der Einsatz von Two-Level-BCH-Codes mit übereinstimmendem Alphabet für die Seitencodierung im s-Level Flash wie oben beschrieben kann sehr leistungsfähiges Codieren für Fehlerkorrektur bereitstellen. BCH-Codes sind besonders für die Fehlermerkmale von s-Level-Solid-State-Speicher geeignet wie nichtflüchtige Flash-Speicher und PCM-Speicher, wobei beidem Speichermedium unabhängige Symbolfehlern auftreten können, bei denen Symbole in aktuellen nichtflüchtigen Speicherprodukten die Länge von 1 Bit bis 4 Bit haben. Außerdem kann die verbesserte Fehlerleistung mit minimaler Auswirkung auf die Komplexität der Implementierung und die Leistungsaufnahme haben. Daher kann mit Einsatz des beschriebenen Systems eine außergewöhnliche Gesamtleistung erzielt werden.
  • Es ist natürlich klar, dass an den beschriebenen beispielhaften Ausführungsformen viele Änderungen und Veränderungen vorgenommen werden können, ohne den Rahmen der Erfindung zu verlassen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 7047478 B2 [0006]
    • US 5946328 [0007]
    • US 5942005 [0007]
    • US 7231578 B2 [0007]
  • Zitierte Nicht-Patentliteratur
    • ”Integrated Interleaving – A Novel ECC Architecture,” von M. Hassner, et al., IEEE Trans. an Magn., Bd. 37, Nr. 2, S. 773 bis 775, Mar. 2001 [0007]
    • E. L. Blokhund V. V. Zyablov, ”Generalized concatenated codes,” Plenum Publishing Corporation, S. 218 bis 222, 1976 [0007]
    • Problemy Peredachi Informatsii, Bd. 10, Nr. 3, S. 45–50, Juli-Sept., 1974 [0007]
    • J. Maucher et al., ”On the Equivalence of Generalized Concatenated Codes and Generalized Error Location Codes” IEEE Trans. an Information Theory, Bd. 46, Nr. 2, März 2000 [0007]
    • ”Reliable Memories with Subline Accesses”, Junsheng Han et al., ISIT2007, Nizza, Frankreich, 24. Juni bis 29. Juni, S. 2531 bis 2535 [0008]
    • Hassner et al. [0008]

Claims (15)

  1. Verfahren zum Aufzeichnen von Eingabedaten in den s-Level-Speicher (2) einer Solid-State-Speichereinheit (1), wobei s ≥ 2 ist und das Verfahren Folgendes umfasst: Codieren von Eingabedatenwörtern in Gruppen mit M Eingabedatenwörtern in Übereinstimmung mit einem ersten und einem zweiten BCH-Code, um für jede Gruppe einen Satz mit M ersten Codewörtern des ersten BCH-Codes zu erzeugen, so dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt, wobei der zweite BCH-Code ein Subcode des ersten BCH-Codes ist; und Aufzeichnen der Sätze der M ersten Codewörter im s-Level-Speicher (2).
  2. Verfahren nach Anspruch 1, wobei die Summe der M ersten Codewörter in dem Satz das zweite Codewort ist.
  3. Verfahren nach Anspruch 1 oder Anspruch 2, wobei jede einer Vielzahl von gewichteten Summen der M ersten Codewörter in dem Satz ein jeweiliges zweites Codewort ist, und wobei Gewichtungskoeffizienten für die Vielzahl von gewichteten Summen durch ein Paritätsprüfmuster definiert werden, das einem dritten linearen Code entspricht.
  4. Verfahren nach einem beliebigen der vorstehenden Ansprüche, wobei: jedes der ersten und der zweiten Codewörter N q-äre Symbole umfasst, wobei q = pk, k ist eine positive ganze Zahl, und p ist eine Primzahl; und q und s sind u-te beziehungsweise v-te Potenzen einer gemeinsamen Basis r, wobei u und v positive ganze Zahlen sind und k ≥ u, und p(k/u)v = s.
  5. Verfahren nach Anspruch 4, wobei s ≠ q.
  6. Verfahren nach Anspruch 5, wobei das Verfahren das Umsetzen jedes q-ären ersten Codeworts in ein r-äres erstes Codewort beinhaltet, bevor sie im s-Level-Speicher (2) aufgezeichnet werden.
  7. Verfahren nach Anspruch 6, wobei r ≠ s, wobei das Verfahren die Zuordnung von aufeinanderfolgenden Sätzen von v r-ären Symbolen von jedem r-ären ersten Codewort zu jeweiligen entsprechenden Zuständen des s-Level-Speichers (2) in Übereinstimmung mit einem vorbestimmten Zuordnungsschema beinhaltet sowie das Aufzeichnen jedes Satzes von v r-ären Symbolen als der entsprechende Zustand im s-Level-Speicher (2).
  8. Verfahren nach Anspruch 5, wobei q = r ≠ s, wobei das Verfahren die Zuordnung von aufeinanderfolgenden Sätzen von v q-ären Symbolen von jedem q-ären ersten Codewort zu jeweiligen entsprechenden Zuständen des s-Level-Speichers (2) in Übereinstimmung mit einem vorbestimmten Zuordnungsschema beinhaltet sowie das Aufzeichnen jedes Satzes von v q-ären Symbolen als der entsprechende Zustand im s-Level-Speicher (2).
  9. Verfahren nach einem beliebigen der vorstehenden Ansprüche 1 bis 6, wobei r = s > 2.
  10. Verfahren nach einem beliebigen der vorstehenden Ansprüche 1 bis 8, wobei r = 2 und k = u.
  11. Verfahren nach einem beliebigen der vorstehenden Ansprüche, wobei s > 2.
  12. Verfahren nach einem beliebigen der vorstehenden Ansprüche, das die Aufzeichnung jedes der Sätze von M ersten Codewörtern in einer jeweiligen Schreibadresse des Solid-State-Speichers (2) beinhaltet.
  13. Computerprogramm, das Programmcodemittel umfasst, um einen Computer zu veranlassen, ein Verfahren nach einem beliebigen der vorstehenden Ansprüche durchführt.
  14. Codiervorrichtung zum Codieren von Eingabedaten für die Aufzeichnung im s-Level-Speicher (2) einer Solid-State-Speichervorrichtung (1), wobei s ≥ 2, und die Codiervorrichtung Folgendes umfasst: einen Two-Level-BCH-Codierer (3) zum Codieren von Eingabedatenwörtern in Gruppen mit M Eingabedatenwörtern in Übereinstimmung mit dem ersten und dem zweiten BCH-Code, um für jede Gruppe einen Satz mit M ersten Codewörtern des ersten BCH-Codes zu erzeugen, so dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt, wobei der zweite BCH-Code ein Subcode des ersten BCH-Codes ist, wobei jedes der ersten und der zweiten Codewörter N q-äre Symbole umfasst, wobei q ≠ s, q = pk, k ist eine positive ganze Zahl, und p ist eine Primzahl, und wobei q und s u-te beziehungsweise v-te Potenzen einer gemeinsamen Basis r sind, wobei u und v positive ganze Zahlen sind und k ≥ u, wobei p(k/u)v = s; und einen Symbolumsetzer (4) für das Umsetzen der q-ären Symbole von jedem ersten Codewort zu einem s-ären Alphabet zum Aufzeichnen im s-Level-Speicher (2).
  15. Solid-State-Speichereinheit (1), die Folgendes umfasst: s-Level-Solid-State-Speicher (2), wobei s ≥ 2; und einen Two-Level-BCH-Codierer(3) zum Codieren von Eingabedatenwörtern in Gruppen mit M Eingabedatenwörtern in Übereinstimmung mit dem ersten und dem zweiten BCH-Code, um für jede Gruppe einen Satz mit M ersten Codewörtern des ersten BCH-Codes zu erzeugen, so dass eine vorbestimmte lineare Kombination der M ersten Codewörter ein zweites Codewort des zweiten BCH-Codes erzeugt, wobei der zweite BCH-Code ein Subcode des ersten BCH-Codes ist; wobei die Einheit (1) geeignet ist, die Sätze von M ersten Codewörtern im s-Level-Speicher (2) aufzuzeichnen.
DE112011101116.4T 2010-03-30 2011-03-23 Two-Level BCH-Codes für Solid-State-Speichereinheiten Active DE112011101116B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP10158438 2010-03-30
EP101584381 2010-03-30
PCT/IB2011/051219 WO2011121490A1 (en) 2010-03-30 2011-03-23 Two -level bch codes for solid state storage devices

Publications (2)

Publication Number Publication Date
DE112011101116T5 true DE112011101116T5 (de) 2013-01-10
DE112011101116B4 DE112011101116B4 (de) 2017-09-21

Family

ID=44235962

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011101116.4T Active DE112011101116B4 (de) 2010-03-30 2011-03-23 Two-Level BCH-Codes für Solid-State-Speichereinheiten

Country Status (6)

Country Link
US (1) US8930798B2 (de)
JP (1) JP5723967B2 (de)
CN (1) CN102823141B (de)
DE (1) DE112011101116B4 (de)
GB (1) GB2492708B (de)
WO (1) WO2011121490A1 (de)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2813078A4 (de) * 2012-02-06 2015-09-30 Nokia Technologies Oy Verfahren zur kodierung und vorrichtung
KR20140114516A (ko) * 2013-03-15 2014-09-29 삼성전자주식회사 메모리 컨트롤러 및 이의 동작 방법
RU2013128346A (ru) * 2013-06-20 2014-12-27 ИЭмСи КОРПОРЕЙШН Кодирование данных для системы хранения данных на основе обобщенных каскадных кодов
US9219503B2 (en) * 2013-10-16 2015-12-22 Avago Technologies General Ip (Singapore) Pte. Ltd. Systems and methods for multi-algorithm concatenation encoding and decoding
GB2525430B (en) 2014-04-25 2016-07-13 Ibm Error-correction encoding and decoding
US9524207B2 (en) * 2014-09-02 2016-12-20 Micron Technology, Inc. Lee metric error correcting code
US9710199B2 (en) 2014-11-07 2017-07-18 International Business Machines Corporation Non-volatile memory data storage with low read amplification
US10162700B2 (en) 2014-12-23 2018-12-25 International Business Machines Corporation Workload-adaptive data packing algorithm
US9647694B2 (en) 2014-12-28 2017-05-09 International Business Machines Corporation Diagonal anti-diagonal memory structure
US9712190B2 (en) 2015-09-24 2017-07-18 International Business Machines Corporation Data packing for compression-enabled storage systems
US9870285B2 (en) 2015-11-18 2018-01-16 International Business Machines Corporation Selectively de-straddling data pages in non-volatile memory
US10333555B2 (en) 2016-07-28 2019-06-25 Micron Technology, Inc. Apparatuses and methods for interleaved BCH codes
US10275309B2 (en) 2017-04-26 2019-04-30 Western Digital Technologies, Inc. Multi-layer integrated zone partition system error correction
CN109857340B (zh) * 2019-01-14 2022-05-06 普联技术有限公司 Nor flash中文件的存储和读取方法、装置及存储介质
US11184021B2 (en) 2019-03-15 2021-11-23 Samsung Electronics Co., Ltd. Using predicates in conditional transcoder for column store
US10871910B1 (en) * 2019-09-27 2020-12-22 Western Digital Technologies, Inc. Non-volatile memory with selective interleaved coding based on block reliability
US11694761B2 (en) 2021-09-17 2023-07-04 Nxp B.V. Method to increase the usable word width of a memory providing an error correction scheme

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5942005A (en) 1997-04-08 1999-08-24 International Business Machines Corporation Method and means for computationally efficient error and erasure correction in linear cyclic codes
US5946328A (en) 1997-11-17 1999-08-31 International Business Machines Corporation Method and means for efficient error detection and correction in long byte strings using integrated interleaved Reed-Solomon codewords
US7047478B2 (en) 2000-11-07 2006-05-16 Stmicroelectronics S.R.L. Multipurpose method for constructing an error-control code for multilevel memory cells operating with a variable number of storage levels, and multipurpose error-control method using said error-control code
US7231578B2 (en) 2004-04-02 2007-06-12 Hitachi Global Storage Technologies Netherlands B.V. Techniques for detecting and correcting errors using multiple interleave erasure pointers

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275965B1 (en) * 1997-11-17 2001-08-14 International Business Machines Corporation Method and apparatus for efficient error detection and correction in long byte strings using generalized, integrated, interleaved reed-solomon codewords
KR100535291B1 (ko) * 1998-01-21 2005-12-09 소니 가부시끼 가이샤 엔코딩 방법 및 메모리 장치
JPH11212876A (ja) * 1998-01-21 1999-08-06 Sony Corp 符号化方法およびそれを利用したメモリ装置
US7844877B2 (en) 2005-11-15 2010-11-30 Ramot At Tel Aviv University Ltd. Method and device for multi phase error-correction
TWM314385U (en) * 2006-10-23 2007-06-21 Genesys Logic Inc Apparatus for inspecting and correcting encoding random error of BCH
US7895502B2 (en) 2007-01-04 2011-02-22 International Business Machines Corporation Error control coding methods for memories with subline accesses
CN101779379B (zh) * 2007-08-08 2014-03-12 马维尔国际贸易有限公司 使用通用级联码(gcc)进行编码和解码
US8136020B2 (en) * 2007-09-19 2012-03-13 Altera Canada Co. Forward error correction CODEC
CN101227194B (zh) 2008-01-22 2010-06-16 炬力集成电路设计有限公司 用于并行bch编码的电路、编码器及方法
US8266495B2 (en) * 2008-02-20 2012-09-11 Marvell World Trade Ltd. Systems and methods for performing concatenated error correction
US8656263B2 (en) * 2010-05-28 2014-02-18 Stec, Inc. Trellis-coded modulation in a multi-level cell flash memory device

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5942005A (en) 1997-04-08 1999-08-24 International Business Machines Corporation Method and means for computationally efficient error and erasure correction in linear cyclic codes
US5946328A (en) 1997-11-17 1999-08-31 International Business Machines Corporation Method and means for efficient error detection and correction in long byte strings using integrated interleaved Reed-Solomon codewords
US7047478B2 (en) 2000-11-07 2006-05-16 Stmicroelectronics S.R.L. Multipurpose method for constructing an error-control code for multilevel memory cells operating with a variable number of storage levels, and multipurpose error-control method using said error-control code
US7231578B2 (en) 2004-04-02 2007-06-12 Hitachi Global Storage Technologies Netherlands B.V. Techniques for detecting and correcting errors using multiple interleave erasure pointers

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
"Integrated Interleaving - A Novel ECC Architecture," von M. Hassner, et al., IEEE Trans. an Magn., Bd. 37, Nr. 2, S. 773 bis 775, Mar. 2001
"Reliable Memories with Subline Accesses", Junsheng Han et al., ISIT2007, Nizza, Frankreich, 24. Juni bis 29. Juni, S. 2531 bis 2535
E. L. Blokhund V. V. Zyablov, "Generalized concatenated codes," Plenum Publishing Corporation, S. 218 bis 222, 1976
Hassner et al.
J. Maucher et al., "On the Equivalence of Generalized Concatenated Codes and Generalized Error Location Codes" IEEE Trans. an Information Theory, Bd. 46, Nr. 2, März 2000
Problemy Peredachi Informatsii, Bd. 10, Nr. 3, S. 45-50, Juli-Sept., 1974

Also Published As

Publication number Publication date
JP5723967B2 (ja) 2015-05-27
CN102823141A (zh) 2012-12-12
GB201219123D0 (en) 2012-12-05
JP2013524609A (ja) 2013-06-17
WO2011121490A1 (en) 2011-10-06
US8930798B2 (en) 2015-01-06
GB2492708A (en) 2013-01-09
DE112011101116B4 (de) 2017-09-21
GB2492708B (en) 2017-01-25
CN102823141B (zh) 2015-09-16
US20130013974A1 (en) 2013-01-10

Similar Documents

Publication Publication Date Title
DE112011101116B4 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
DE112010004863B4 (de) Datenverwaltung in Festkörperspeichersystemen
DE69932962T2 (de) Kodierungsverfahren und Speicheranordnung
DE102015201384B4 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
KR101438072B1 (ko) 소거 없는 플래시 메모리의 다중 프로그래밍
DE112012000385B4 (de) Korrigieren von Auslöschungen in Speicher-Arrays
US8281214B2 (en) Programmable quasi-cyclic low-density parity check (QC LDPC) encoder for read channel
DE102008003113A1 (de) ECC-Steuereinheit, Speichersystem und Verfahren zur Korrektur eines Fehlers
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
US20140331083A1 (en) Polar codes for efficient encoding and decoding in redundant disk arrays
DE102011085602B4 (de) Vorrichtung und Verfahren zum Korrigieren zumindest eines Bitfehlers in einer codierten Bitsequenz
DE112014005810B4 (de) anagement der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle
EP2218003B1 (de) Korrektur von fehlern in einem speicherarray
DE112011100371T5 (de) Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts
DE102013016147A1 (de) Skalierbare Reparaturblockfehlerkorrektur für mehrere sequenzielle Datenblöcke in einem magnetischen Datenspeichergerät
JP2013524609A5 (de)
DE112011100199B4 (de) Integrierter Daten- und Kopfdatenschutz für Bandlaufwerke
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
US10090860B2 (en) Memory system using integrated parallel interleaved concatenation
DE112019000167T5 (de) Anpassbare Lesewiederholungsreihenfolge basierend auf einem Decodierungserfolgstrend
CN108762978B (zh) 一种局部部分重复循环码的分组构造方法
Hou et al. Multi-layer transformed MDS codes with optimal repair access and low sub-packetization
DE102019119753A9 (de) Generalisiertes verkettetes Fehlerkorrektur-Codierschema mit Lokalität
DE102021106721A1 (de) Schnelles durch-steuerung-kopieren
DE102016104012A1 (de) Verarbeitung eines Datenworts

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R084 Declaration of willingness to licence