DE112011100371B4 - Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts - Google Patents

Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts Download PDF

Info

Publication number
DE112011100371B4
DE112011100371B4 DE112011100371.4T DE112011100371T DE112011100371B4 DE 112011100371 B4 DE112011100371 B4 DE 112011100371B4 DE 112011100371 T DE112011100371 T DE 112011100371T DE 112011100371 B4 DE112011100371 B4 DE 112011100371B4
Authority
DE
Germany
Prior art keywords
code word
character
errors
decoded
decoding
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
DE112011100371.4T
Other languages
English (en)
Other versions
DE112011100371T5 (de
Inventor
Roy D. Cideciyan
Ilias Iliadis
Roman A. Pletka
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 DE112011100371T5 publication Critical patent/DE112011100371T5/de
Application granted granted Critical
Publication of DE112011100371B4 publication Critical patent/DE112011100371B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Abstract

Verfahren zum Decodieren eines Codeworts (W), das von einem Flash-Speicher (26), der mehrere Multilevel-Flash-Speicherzellen (28) umfasst, empfangen wird, wobei jede derartige Multilevel-Flash-Speicherzelle (28) ein Zeichen (Si) des Codeworts (W) speichert, und wobei ein ECC-Decodierer (22) zum Decodieren des Codeworts (W) in ein decodiertes Codewort (D) eingerichtet ist, wobei der ECC-Decodierer (22) entworfen ist, um eine maximale Anzahl (t) von Fehlern zu korrigieren, wobei das Verfahren die folgenden Schritte umfasst:- in einem Fehlerprüfschritt (44) Bestimmen der Anzahl (e) von Fehlern in dem Codewort (W),- wenn die Anzahl (e) von Fehlern größer ist als die maximale Anzahl (t) von Fehlern, die der ECC-Decodierer (22) korrigieren kann:o Ausführen■ eines ersten Zeichenmodifikationsschritts (32'), der ein erstes modifiziertes Codewort (W') erzeugt, durch Anheben des Werts eines Zeichens (Si) auf den nächsthöheren Wertpegel, und/oder■ eines zweiten Zeichenmodifikationsschritts (32''), der ein zweites modifiziertes Codewort (W'') erzeugt, durch Absenken des Werts eines Zeichens (Si) auf den nächstniedrigeren Wertpegel,o in einem Analyseschritt (50) Berechnen der Korrekturwirkung des wenigstens einen Zeichenmodifikationsschritts (32', 32''),o in einem Rückgabeschritt (41) Festlegen■ des decodierten Codeworts (D) anhand der Korrekturwirkung,■ oder einer Löschung des Codeworts (W), wobei der Analyseschritt (50) Folgendes umfasst:- in einem Decodierschritt (33) Decodieren der modifizierten Codewörter (W', W'') und für alle decodierten modifizierten Codewörter (D', D'') Zählen der Häufigkeit (x(D)) des Vorkommens der decodierten modifizierten Codewörter (D', D''), und- in einem Folgeschritt (40) Bestimmen, ob es genau ein decodiertes modifiziertes Codewort (D', D'') gibt, dessen Häufigkeit (x(D)) des Vorkommens um eins größer ist als die maximale Anzahl (t) von Fehlern, wobei die decodierten modifizierten Codewörter (D', D'') in Hash-Werte umgesetzt werden, die gemeinsam mit der Häufigkeit (x(D)) des Vorkommens der decodierten modifizierten Codewörter (D', D'') in eine Kandidaten-Hash-Abbildung (H) eingegeben werden.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Erfindung bezieht sich auf ein Verfahren und eine Vorrichtung zum Decodieren eines Codeworts. Sie bezieht sich insbesondere auf ein Verfahren zur Datenfehlerkorrektur eines Codeworts, das unter Verwendung eines Fehlerkorrekturcodes erzeugt wurde.
  • HINTERGRUND DER ERFINDUNG
  • Unabhängig vom Hersteller des Flash-Speichers weisen Flash-Speicher eine nicht vernachlässigbare Roh-Bitfehlerrate auf. Frühere Forschungsaktivitäten haben die Gründe dieser Roh-Bitfehler, zu denen Programmstörungen infolge von Tunneln und der Injektion heißer Elektronen, Effekten des Rauschens auf Quantenebene, unerwartetem Tunneln, Datenhaltung (Daten-Retention) infolge von spannungsinduzierten Leckströmen (SILC) und Lesestörungen sowie durch Detrapping induzierte Speicherung gehören, untersucht und identifiziert. Fehlerkorrekturcodes (ECC) werden eingesetzt, um eine bessere Zuverlässigkeit zu erreichen. Reed-Solomon (RS)- oder Bose-Chaudhuri-Hocquenghem (BCH)-Codes können für diesen Zweck verwendet werden. Einige Hardware-Hersteller empfehlen ausdrücklich die Verwendung eines 4-Bit-ECC.
  • ECCs werden durch die Anzahl von Fehlern (t_c), die sie korrigieren können, sowie durch die Anzahl von Fehlern (t_d), die sie detektieren können, gekennzeichnet, wobei t_c ≤ t_d.
  • Wenn es vorkommt, dass in einem Datenblock mehr Fehler vorhanden sind als detektiert werden können, besteht ein höheres Risiko einer Falschkorrektur. Die Wahrscheinlichkeit, dass mehr Fehler auftreten als detektiert werden können, kann durch eine entsprechende Auswahl von Parametern des ECC verringert werden.
  • Ein ECC-Decodierer empfängt ein codiertes Codewort und berechnet daraus einen Wert, der angibt, ob das codierte Codewort einen oder mehrere Fehler umfasst. Nach dieser Berechnung kann der ECC-Decodierer versuchen, das Codewort zu decodieren. Das Ergebnis der Decodierung eines fehlerbehafteten Codeworts kann lauten:
    • - das korrekte Codewort wird decodiert,
    • - ein als Löschung bezeichnetes Decodierungs-Fehlerereignis, das Codewort konnte z.B. nicht korrigiert werden, oder
    • - eine Falschkorrektur mit dem Ergebnis eines inkorrekten Codeworts.
  • Ein ECC für eine bestimmte Anwendung wird entworfen, um die Wahrscheinlichkeit von Falschkorrekturen auf einen annehmbaren Pegel zu verringern. Dabei ist es besser, eine Löschung zu detektieren als eine Falschkorrektur auszuführen. Im Fall von Löschungen können höhere ECCs wie C2-Codes wie etwa RAID verwendet werden, um diese Fälle zu detektieren und wiederherzustellen.
  • Die Veröffentlichung "Bit Error Rate in NAND Flash Memories" von N. Mielke, T. Marquart, N. Wu, J. Kessenich, H. Belgal, E. Schares, F. Trivedi, E. Goodness und L. R. Nevill in IEEE 46th International Reliability Physics Symposium, Phoenix, 2008 enthält eine Untersuchung von Fehlermustern in Flash-Speichern basierend auf Multilevel-Zellen (MLC). Die Ergebnisse aus der Analyse von vier Typen von MLC-basierten NAND-Flash-Speichervorrichtungen zeigen drei Typen von Fehlern, und zwar Schreibfehler, die bewirken, dass Zellen mit einer höheren Schwellenwertspannung als vorgesehen programmiert werden, Speicherfehler infolge des Verlusts von Elektronen an dem schwebenden Gate und Lesestörungsfehler infolge einer bestimmten Spannung, die an nicht ausgewählte Wortleitungen in dem Block angelegt wird. Diese Fehlertypen verursachen Bitfehler in dem Sinn, dass die Schwellenwertspannung um einen Pegel nach oben oder unten verschoben wird.
  • In dem Artikel „Apparatus for improving Data Access Reliability of Flash Memory“ von Jen-Wei Hsieh, Tei-Wei Kuo, Hsiang-Chi Hsieh, US-Patentanmeldung US2007/0266298A 1, Nov. 2007 wird ein Verfahren vorgeschlagen, das den exakten Wert der Schwellenwertspannung verwendet, um anzuzeigen, ob die gemessene Spannung in einem vernünftigen Bereich liegt. Wenn das nicht der Fall ist, wird die Zelle, die gelesen wird, als verdächtig markiert. Diese Information kann dann bei der ECC-Decodierung verwendet werden, um anzugeben, wo der Fehler liegt, und um somit die Zuverlässigkeit des Datenzugriffs zu verbessern. Dieses Verfahren sollte auf einem Flash-Chip direkt integriert werden, da ein Zugriff auf den exakten Wert der Schwellenwertspannung erforderlich ist. Wenn die gemessene Schwellenwertspannung mit einem inkorrekten Pegel genau übereinstimmt, kann dieses Verfahren den Fehlerort nicht detektieren.
  • US5475693 ist auf einen Prozess zur Fehlerverwaltung für Flash-EEPROM-Speicherarrays gerichtet. Es beschreibt ein Verfahren zum Verwenden einer Schaltungsanordnung zur Fehlerdetektion und -korrektur, um Fehler zu detektieren und zu korrigieren, die in Daten auftreten können, die in einem Format mit mehreren Bits pro Zelle in einem Flash-EEPROM-Speicherarray gespeichert sind, bevor diese Fehler die Genauigkeit von Daten, die durch dieses Flash-EEPROM-Speicherarray bereitgestellt werden, beeinflussen können. Dieses Verfahren umfasst das Detektieren von Fehlern, die in einem Sektor eines Array, das gelesen wird, vorhanden sind, das Beenden des Detektionsprozesses, wenn keine Fehler detektiert werden, das Korrigieren der Fehler, wenn weniger als eine erste Anzahl von Fehlern detektiert werden, das erneute Versuchen der Detektion von Fehlern in dem Sektor eines Array, wenn mehr als die erste Anzahl von Fehlern detektiert werden, das Korrigieren der Fehler nach dem erneuten Versuchen, wenn weniger als eine zweite Anzahl von Fehlern, die größer als die erste Anzahl von Fehlern ist, detektiert wird, das Markieren des Blocks des Array als fraglich, wenn mehr als die zweite Anzahl von Fehlern, jedoch weniger als eine dritte Anzahl von Fehlern - die die größte Anzahl ist, die der Fehlerdetektionsprozess korrigieren kann - detektiert wird; und anschließend das Korrigieren der Fehler, die detektiert werden. Das Verfahren versucht mehr als eine vorgegebene Anzahl von Fehlern durch das erneute Versuchen zu beseitigen, einschließlich des erneuten Versuchens bei einer geringeren Lesegeschwindigkeit. Wenn der erneute Versuch misslingt und der Block zuvor als fraglich markiert wurde, wird er dauerhaft aus dem Dienst entfernt. Das Verfahren beruht lediglich auf dem verwendeten ECC. In einer besonderen Ausführungsform detektiert der ECC sechs Fehler und kann bis zu fünf Fehler korrigieren. Demzufolge wird ein Block mit mehr als fünf Fehlern sofort als schlecht markiert.
  • US6209113 richtet sich auf ein Verfahren und eine Vorrichtung zum Ausführen einer Fehlerkorrektur an Daten, die von einem mehrstufigen Speicher gelesen werden. Gemäß einer Ausführungsform wird eine Zelle in einer Speichervorrichtung gelesen, um eine Lesespannung zu erzeugen, die durch einen Zustand der Zelle festgelegt ist, und anhand der Lesespannung wird ein codiertes Signal aus einer geordneten Folge von codierten Signalen ausgewählt, wobei jedes codierte Signal einem Feld von Bits entspricht und benachbarte codierte Signale entsprechenden Feldern von Bits entsprechen, die sich lediglich in einem einzigen Bit unterscheiden. Das ausgewählte codierte Signal wird decodiert, um ein Feld von unkorrigierten Bits und ein Feld von Syndrom-Bits, die jeden Fehler in den unkorrigierten Bits anzeigen, zu erzeugen. Die Syndrom-Bits werden decodiert, um Korrekturbits zum Korrigieren des Fehlers zu erzeugen, und die unkorrigierten Bits werden mit den Korrekturbits verknüpft, um ein Feld von korrigierten Bits zu erzeugen. Das Verfahren enthält die Schritte Codieren von Daten, die von jedem Speicherelement des Array gelesen werden, Detektieren eines Fehlers in den codierten Daten von einem Speicherelement und Korrigieren des Fehlers durch Ändern einer ausgewählten Anzahl von Bits der codierten Daten. Dieses Verfahren verwendet die Gray-Codierung, sodass es in einer Zelle lediglich ein fehlerhaftes Bit geben kann. Deswegen muss der Decodierer, der verwendet wird, pro Zelle lediglich eine kleine Anzahl von Bits, vorzugsweise ein Bit korrigieren anstelle von möglicherweise allen Bits in der Zelle, wodurch sich der Umfang von ECC-Daten, die zu speichern sind, verringert. Das Verfahren führt eine Fehlerkorrektur aus, indem zuerst decodiert wird und anschließend die Korrektur nur dann akzeptiert wird, wenn der Fehler das eine Bit pro Zeichen ändert. Dieses Verfahren ermöglicht nicht, mehr Fehler zu korrigieren als der ECC-Decodierer korrigieren kann.
  • US2008/0168319 ist auf eine Steuereinheit des Fehlerkorrekturcodes für eine Flash-Speichervorrichtung gerichtet. Eine ECC-Steuereinheit für eine Flash-Speichervorrichtung speichert M-Bit Daten, wobei M eine positive ganze Zahl gleich oder größer als 2 ist, und enthält einen ECC-Codierer und einen ECC-Decodierer. Der ECC-Codierer erzeugt erste ECC-Daten als Eingabedaten, die in der Flash-Speichervorrichtung gespeichert werden sollen, unter Verwendung eines ersten Fehlerkorrekturschemas und erzeugt zweite ECC-Daten als die Eingabedaten unter Verwendung eines zweiten Fehlerkorrekturschemas. Die Eingabedaten, die ersten ECC-Daten und die zweiten ECC-Daten werden in der Flash-Speichervorrichtung gespeichert. Der ECC-Decodierer berechnet die Anzahl von Fehlern in den Daten, die von der Flash-Speichervorrichtung gelesen werden, und korrigiert die Fehler in den gelesenen Daten selektiv anhand der Anzahl der Fehler unter Verwendung der ersten ECC-Daten oder der zweiten ECC-Daten. Das Verfahren verwendet zwei Fehlerkorrekturschemen. Eines der Schemen ist vorzugsweise schneller, korrigiert jedoch weniger Fehler als das andere. In Abhängigkeit von der Anzahl der detektierten Fehler wird eines der Schemen verwendet, um den Fehler zu korrigieren. Das Schema erfordert, die redundanten Bits für beide Korrekturschemen zu speichern und vergrößert somit den Umfang von redundanten Informationen beträchtlich, ohne dass es in der Lage ist, mehr Fehler zu korrigieren.
  • US7450425 ist auf ein Verfahren zur Verringerung von Lesefehlern einer nichtflüchtigen Speicherzelle gerichtet. Eine Ausführungsform enthält das Ausführen einer ersten Leseoperation, das Verwenden eines anfänglichen Lesepotenzials, um einen Zustand einer ausgewählten Speicherzelle in einer Folge von nichtflüchtigen Speicherzellen zu bestimmen. Dieses Verfahren enthält das Bestimmen, ob ein Zustand der ausgewählten Speicherzelle ein inkorrekter Zustand ist, durch das Ausführen einer ersten Prüfung unter Verwendung einer Datenprüftechnik, und wenn der inkorrekte Zustand festgestellt wird, das Ausführen einer Anzahl nachfolgender Leseoperationen unter Verwendung von Lesepotenzialen, die sich schrittweise zu einem höheren und niedrigeren Lesepotenzial verändern, zu einem bestimmten Zählerstand von Leseoperationen. In verschiedenen Ausführungsformen kann außerdem ein ECC-Prüfdurchlauf erfolgen, wenn die Daten, die gelesen werden, eine Anzahl von fehlerhaften Bits enthalten, die durch den ECC-Decodierer korrigiert werden können. Die Schwellenwertanzahl von Bits, die durch einen ECC-Decodierer korrigiert werden können, kann von der bestimmten ECC-Technik, die verwendet wird, abhängen. Einige ECC-Techniken können Einbitfehler korrigieren, während andere Zweibitfehler oder andere höhere Anzahlen von Bitfehlern korrigieren können. In Fällen, bei denen die Lesedaten weniger als die Schwellenwertanzahl von Zellen, die durch den ECC-Decodierer korrigiert werden können, enthalten, kann der ECC-Decodierer die fehlerhaften Bits vor dem Bereitstellen der Lesedaten an eine Steuereinheit korrigieren. Wenn von einer Flash-Zelle gelesen wird, wird eine geeignete Spannung an das Steuer-Gate und den Drain angelegt. Der Vergleich des Drain-Source-Stroms, der die Schwellenwertspannung der Zelle als eine Funktion eines Referenzstroms angibt, ermöglicht den Zustand der Speicherzelle zu bestimmen. Das Verfahren variiert den Referenzstrom in dem Fall, wenn die Daten unter Verwendung des ECC-Decodierers nicht wiederhergestellt werden konnten, und führt nachfolgende Leseoperation an der gleichen Zelle aus. Der Vorgang wird wiederholt, bis der ECC-Decodierer die Daten tatsächlich wiederherstellen kann oder eine gegebene Anzahl von Schritten erfolglos versucht worden sind. In diesem zuletzt genannten Fall wird ein Lesefehler zurückgegeben. Dieses Verfahren nutzt das analoge Schwellenwert-Spannungssignal in dem Flash-Speicherchip. Ein Hersteller der Festkörperspeicher-Steuereinheit hat jedoch möglicherweise keinen Zugriff auf das Schwellenwert-Spannungssignal. Außerdem führt das Verfahren eine Verzögerung und eine Komplexität durch das Anwenden einer Anzahl von zusätzlichen Leseoperationen mit Schritten der variierten Spannung in jeder Richtung in Bezug auf ein einzelnes Lesepotenzial ein. Dieses Verfahren führt außerdem die Wahrscheinlichkeit von leseinduzierten Fehlern ein.
  • US6839875 ist auf ein Verfahren und eine Vorrichtung zum Ausführen einer Fehlerkorrektur an Daten, die von einem mehrstufigen Speicher gelesen werden, gerichtet. Das Verfahren zum Ausführen einer Fehlerkorrektur an Daten, die von einem mehrstufigen Speicherarray gelesen werden, funktioniert durch Codieren von Daten, die von jedem Speicherelement des Array gelesen werden, Detektieren eines Fehlers in codierten Daten von einem Speicherelement und Korrigieren des Fehlers durch Ändern von X Bits der codierten Daten (vorzugsweise X = 1) und ein mehrstufiges Speichersystem zum Ausführen des Verfahrens. Das System ist vorzugsweise eine Schaltung, in der jedes Speicherelement eine Flash-Speicherzelle ist. Ein Datenbit wird von jeder Speicherzelle durch Zuweisen eines Signals mit einem Signalwert in einem Wertebereich, wobei der Wertebereich Teil einer Folge von nicht überlappenden Werteunterbereichen ist, gelesen. Das Verfahren umfasst außerdem das Codieren des Spannungssignals in eine Folge von codierten Signalen, wobei jedes der codierten Signale eine eindeutige geordnete Menge von Binärbits repräsentiert; und das Ausführen einer Fehlerdetektion und -korrektur an dem codierten Signal, um Fehler in dem codierten Signal zu detektieren und um korrigierbare Fehler in dem codierten Signal zu korrigieren.
  • US2009/0055706 ist auf ein Verfahren und eine Vorrichtung zur Flash-Speicher-Fehlerkorrektur gerichtet. In der Flash-Speichervorrichtung umfasst ein Speicherarray einen Hauptbereich für die Datenspeicherung und einen Ersatzbereich für die Speicherung von Paritätswerten, die den gespeicherten Daten zugeordnet sind. Eine Löschtabelle hält eine Löschliste, die Adressen von Defekten in dem Speicherarray angibt, wo keine Datenspeicherung zur Verfügung steht. Ein Prozessor führt eine Fehlerkorrektur an den gespeicherten Daten anhand der Paritätswerte und der Löschliste aus, um eine korrigierte Ausgabe auszugeben. Eine Flash-Speichervorrichtung umfasst ein Speicherarray, das einen Hauptbereich zur Datenspeicherung und einen Ersatzbereich zur Speicherung von Paritätswerten, die den gespeicherten Daten zugeordnet sind, aufweist; eine Löschtabelle, die eine Löschliste von Defekten in dem Speicherarray pflegt, wo der Datenspeicherinhalt möglicherweise nicht korrekt ist; einen Prozessor, der eine Fehlerkorrektur an den gespeicherten Daten anhand der Paritätswerte und der Löschliste ausführt, um eine korrigierte Ausgabe auszugeben. Es ist ein Fehlerkorrekturverfahren für eine Flash-Speichervorrichtung beschrieben, bei dem die Flash-Speichervorrichtung ein Speicherarray umfasst, das einen Hauptbereich zur Datenspeicherung und einen Ersatzbereich zum Speichern von Paritätswerten, die den gespeicherten Daten zugeordnet sind, umfasst; das Fehlerkorrekturverfahren umfasst das Erstellen einer Löschliste zum Führen von Defekten in dem Speicherarray, wo der Datenspeicherinhalt möglicherweise nicht korrekt ist; das Ausführen einer Fehlerkorrektur an den gespeicherten Daten auf der Grundlage der Paritätswerte und der Löschliste, um eine korrigierte Ausgabe auszugeben. Gemäß der Fehlerkorrekturtheorie ist die Fähigkeit zur Wiederherstellung von Daten größer, wenn spezifische Adressen in dem Speicherarray bekannte Defekte sind. Die Idee besteht darin, eine Löschtabelle einzuführen, die Adressen von Defekten speichert, um mehr Fehler zu tolerieren. Die Löschtabelle kann in der Herstellungsstufe erstellt werden. Neue defektbehaftete Adressen werden automatisch hinzugefügt, wenn sie während des Vorgangs der Fehlerkorrektur detektiert werden. Wenn alle Fehlerstellen bekannt sind, korrigiert das Verfahren Fehler bis zu der Menge von Fehlern, die durch den verwendeten ECC-Decodierer detektiert werden können. Dabei wird zusätzlicher Speicherplatz benötigt, um die Löschtabelle zu halten.
  • US05864569 ist auf ein Verfahren und eine Vorrichtung zum Ausführen einer Fehlerkorrektur an Daten, die von einem mehrstufigen Speicher gelesen werden, gerichtet. Dieses Verfahren verwendet die Idee des Bitumschaltens in einem MLC-Flash, erfordert jedoch, dass die Information in einer Zelle gespeichert wird, die nach Gray codiert ist. Es wird des Weiteren angenommen, dass das fehlerhafte Zeichen bekannt ist.
  • Die US 2009 / 0 292 972 A1 betrifft eine Fehlerkorrekturvorrichtung, ein Verfahren dafür und eine Speichervorrichtung, die die Vorrichtung enthält. Die Fehlerkorrekturvorrichtung umfasst: eine Ermittlungseinheit, die so konfiguriert ist, dass sie ermittelt, ob eine Anzahl von Fehlern in einem Lesewort, das aus einer mehrstufigen Zelle (MLC) gelesen und extrahiert wird, in einem Fehlerkorrekturfähigkeitsbereich existiert; eine Lesespannungs-Steuereinheit, die so konfiguriert ist, dass sie eine an die MLC angelegte Lesespannung entweder erhöht oder verringert, wenn die Anzahl von Fehlern in dem Lesewort außerhalb des Fehlerkorrekturfähigkeitsbereichs liegt; und eine Codewort-Ermittlungseinheit, die so konfiguriert ist, dass sie einen Bitfehler auf Grundlage der Erhöhung oder Verringerung der Lesespannung analysiert und auf Grundlage eines ausgewählten Lesefehlermusters ein Codewort auswählt, das dem analysierten Bitfehler entspricht. Dadurch kann es unter Umständen möglich sein, einen Lesefehler effizient zu korrigieren, der auftritt, wenn die Daten des Speichergeräts über einen langen Zeitraum beibehalten werden.
  • Es ist deswegen eine Herausforderung, ein Verfahren zur Korrektur von Datenfehlern bereitzustellen, das die Nachteile der bekannten Verfahren zur Korrektur von Datenfehlern überwindet.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Der Erfindung liegt die Aufgabe zu Grunde ein Verfahren, eine Vorrichtung und ein Computerprogrammprodukt zum Decodieren eines Codeworts mit verbesserter Datenfehlerkorrektur zu schaffen, wobei das Codewort von einem Flash-Speicher mit mehreren Multilevel-Flash-Speicherzellen empfangen wird.
  • Die der Erfindung zugrunde liegende Aufgabe wird durch die Merkmale der unabhängigen Patentansprüche gelöst. Bevorzugte Ausführungsformen der Erfindung sind in den abhängigen Patentansprüchen angegeben.
  • In einem Beispiel wird ein Verfahren zum Decodieren eines Codeworts, das von einem Flash-Speicher empfangen wird, vorgeschlagen. Der Flash-Speicher umfasst mehrere Multilevel-Flash-Speicherzellen, wobei jede derartige Multilevel-Flash-Speicherzelle ein Zeichen des Codeworts speichert. Ein ECC-Decodierer ist zum Decodieren des Codeworts zu einem decodierten Codewort eingerichtet und ist zum Korrigieren einer maximalen Anzahl von Fehlern entworfen. Das Verfahren umfasst einen Fehlerprüfschritt zum Bestimmen der Anzahl von Fehlern in dem Codewort. Wenn die Anzahl der Fehler größer als die maximale Anzahl von Fehlern ist, die der ECC-Decodierer korrigieren kann, werden ein erster Zeichenmodifikationsschritt und/oder ein zweiter Zeichenmodifikationsschritt ausgeführt. In dem ersten Zeichenmodifikationsschritt wird ein erstes modifiziertes Codewort durch Vergrößern des Wertes des Zeichens auf den nächsthöheren Wertpegel erzeugt und in dem zweiten Zeichenmodifikationsschritt wird ein zweites modifiziertes Codewort durch Verringern des Werts eines Zeichens (Si) auf den nächstniedrigeren Wertpegel erzeugt. In einem Analyseschritt wird die korrigierende Wirkung der Zeichenmodifikationsschritte berechnet und in einem Rückgabeschritt wird das decodierte Codewort anhand der korrigierenden Wirkung bestimmt.
  • Das vorgeschlagene beispielhafte Decodierverfahren kann einen zusätzlichen Fehler zu den Fehlern, die der verwendete ECC-Decodierer beheben kann, beheben. Daher kann das vorgeschlagene Verfahren in Verbindung mit einem ECC-Decodierer mit einer ursprünglichen Fehlerkorrekturmöglichkeit von t verwendet werden, um eine Anzahl von t + 1 Fehlern zu korrigieren. Das vorgeschlagene Decodierverfahren nutzt die Kenntnis über mögliche Fehlermuster in Flash-Speichern mit Multilevel-Zellen (MLC). Die Modifikation der Zeichen auf einen der benachbarten Werte dieser Zeichen hat zwei vorteilhafte Wirkungen. Einerseits verringert sie die Anzahl von modifizierten Codewörtern, die geprüft werden müssen, wenn sie zu dem korrekten decodierten modifizierten Codewort führen, und andererseits verringert sie die Anzahl von decodierten modifizierten Codewörtern, die zulässig, jedoch nicht korrekt sind. Die erste Wirkung verringert hauptsächlich den Berechnungsaufwand, während die zweite Wirkung des Weiteren die Wahrscheinlichkeit eines Decodierfehlers vermindert.
  • In einem anderen Beispiel wird für ein empfangenes Codewort jedes Zeichen um den Gleichwert eines Pegels der Schwellenwertspannung (V_T) nach oben verschoben, um ein erstes modifiziertes Codewort zu bilden, wenn ein derartiges Codewort existiert, und um den Gleichwert eines Pegels der Schwellenwertspannung (V_T) nach unten verschoben, um ein zweites modifiziertes Codewort zu bilden, wenn ein derartiges Codewort existiert. Die dadurch erhaltenen modifizierten Codewörter werden mit dem ECC-Decodierer decodiert, was decodierte modifizierte Codewörter zur Folge hat, die auch als mögliche decodierte Codewörter bezeichnet werden. Die Häufigkeit des Vorkommens von jedem möglichen decodierten Codewort wird gezählt. Für ein empfangenes Codewort mit t + 1 Fehlern, werden sich genau t + 1 Fälle des Vorkommens des korrekten möglichen decodierten Codeworts ergeben. Wenn es genau ein mögliches decodiertes Codewort mit t + 1 Fällen des Vorkommens gibt, dann ist dieses das korrekte Codewort. Gibt es mehr als ein mögliches decodiertes Codewort mit t + 1 Fällen des Vorkommens, kann das Decodierverfahren den Fehler nicht korrigieren und wird eine Löschung des Codeworts zurückgeben. Die zugrunde liegende Begründung besteht darin, dass durch das Decodierverfahren ein empfangenes Codewort W, das t + 1 Fehler aufweist, modifiziert wird, um einen Fehler mehr, eine gleiche Anzahl von Fehlern oder einen Fehler weniger zu erhalten. Durch die Verminderung der Anzahl von Fehlern um 1 wird das modifizierte Codewort lediglich t Fehler aufweisen und kann korrigiert und zu dem korrekten codierten Datenwort decodiert werden. Da das empfangene Codewort t + 1 Fehler aufweist, wird dieser Effekt genau t + 1 Mal auftreten. Wenn es mehr als ein modifiziertes Codewort gibt, das diesen Effekt zeigt, gibt es eine Situation, dass der Decodierer nicht entscheiden kann, welches der modifizierten Codewörter das korrekte Codewort ist, und kann keine fundierte Korrektur und Decodierung ausführen. Das kann vorkommen, wenn das empfangene Codewort in einem Gebiet landet, in dem sein Abstand zu dem korrekten codierten Datenwort genau gleich dem Abstand zu einem anderen zulässigen codierten Datenwort ist.
  • Das vorgeschlagene beispielhafte Decodierverfahren schafft die folgenden Vorteile: Erstens kann es einen zusätzlichen Fehler über der Anzahl von Fehlern, die der verwendete ECC-Decodierer ursprünglich beheben kann, beheben. Somit kann das vorgeschlagene Decodierverfahren in Verbindung mit einem ECC-Decodierer mit einer Fehlerkorrekturkapazität t verwendet werden, um t + 1 Fehler zu korrigieren. Das erfolgt auf Kosten eines bestimmten zusätzlichen Rechenaufwands, der mit der Anzahl von Zeichen in einem Codewort linear wächst. Dieser zusätzliche Rechenaufwand tritt lediglich in dem seltenen Fall auf, wenn genau t + 1 Fehler behoben werden. Wenn weniger als t + 1 Fehler vorhanden sind, führt das Decodierverfahren überhaupt keinen zusätzlichen Rechenaufwand (Overhead) ein. Das ermöglicht, das vorgeschlagene Decodierverfahren online in einer Flash-Speicher-Steuereinheit zu verwenden. Dieses Decodierverfahren könnte außerdem offline in einer Betriebsart zur Datenwiederherstellung ausgeführt werden.
  • Zum Erzeugen des Codeworts kann zum Beispiel ein ECC-Codierer verwendet werden, der Korrekturinformationen, d.h. Paritätsinformationen gemeinsam mit dem Datenwort bereitstellt, wodurch t + 1 Fehler detektiert werden können, während in dem Codewort t Fehler korrigiert werden können. Eine bekannte Praxis besteht darin, einen ECC-Decodierer einzurichten, der theoretisch in der Lage ist, t Fehler zu korrigieren, in der Realität jedoch lediglich die Fähigkeit zum Korrigieren von t - 1, t - 2 oder weniger Fehler nutzt. Das hat den Vorteil, die Robustheit des ECC-Decodierers zu verbessern, indem die Wahrscheinlichkeit einer Falschkorrektur vermindert wird, während gleichzeitig eine einfachere und damit schnellere Logik für den ECC-Decodierer verwendet wird.
  • Es kann z.B. ein Reed-Solomon (RS)-Code verwendet werden, der eine Korrektur von t Fehlern und eine Detektion von t + 1 Fehlern ermöglicht. Der ECC-Decodierer kann außerdem aufgebaut sein, um lediglich t - 1 Fehler zu korrigieren, während er trotzdem in der Lage ist, t + 1 Fehler zu detektieren.
  • Somit kann dieses beispielhafte Decodierverfahren in Verbindung mit einem ECC-Decodierer verwendet werden, der lediglich t - 1 Fehler korrigiert, während er trotzdem in der Lage ist, t Fehler zu korrigieren. Dadurch ermöglicht das vorgeschlagene Decodierverfahren, einen einfacheren ECC-Decodierer zu verwenden, der die Daten schneller decodiert, wenn bis zu t - 1 Fehler auftreten, und trotzdem in der Lage ist, t Fehler in dem Datenblock zu korrigieren. Der Nachteil des Decodierverfahrens besteht darin, dass dann, wenn das Decodierverfahren verwendet wird, um genau t Fehler zu korrigieren, ein höherer Rechenaufwand auftritt, um die Daten wiederherzustellen. Es wird trotzdem eingeschätzt, dass dieses Ereignis verhältnismäßig selten eintritt, und wenn das geschieht, wird die zusätzliche Verzögerung als annehmbar betrachtet.
  • In einem anderen Beispiel des Verfahrens wird der erste Zeichenmodifikationsschritt weggelassen, wenn der Wert des Zeichens auf dem höchsten Pegel ist, auf den die Multilevel-Flash-Speicherzelle programmiert werden kann. Eine Vergrößerung des Zeichenwerts über den höchsten Pegel hinaus, auf den der zugrunde liegende Multilevel-Flash-Speicher programmiert werden kann, würde bedeuten, einen unmöglichen Wert dieser Zelle anzunehmen. Da dieser Wert unmöglich ist, ist die Berechnung, die mit diesem Pegel verbunden ist, nicht erforderlich. Deswegen wird für diesen Fall das Weglassen dieses Schritts zu einer Verminderung der Komplexität des Verfahrens führen.
  • In einem weiteren Beispiel des Decodierverfahrens wird der zweite Zeichenmodifikationsschritt weggelassen, wenn der Wert des Zeichens auf dem niedrigsten Pegel ist, auf den die Multilevel-Flash-Speicherzelle programmiert werden kann. Eine Verminderung des Zeichenwerts unter den niedrigsten Pegel, auf den der zugrunde liegende Multilevel-Flash-Speicher programmiert werden kann, würde bedeuten, einen unmöglichen Wert dieser Zelle anzunehmen. Da dieser Wert unmöglich ist, ist die Berechnung, die mit diesem Pegel verbunden ist, nicht erforderlich. Deswegen wird für diesen Fall das Weglassen dieses Schritts zu einer Verminderung der Komplexität des Verfahrens führen.
  • In einem weiteren Beispiel des Decodierverfahrens wird der wenigstens eine Zeichenmodifikationsschritt mit einem anderen Zeichen wiederholt. Durch das Ausführen eines oder mehrerer Zeichenmodifikationsschritte für ein Zeichen prüft das Decodierverfahren, ob diese Modifikation zu einer Korrekturwirkung führt. Dadurch ist die Wahrscheinlichkeit, einen Fehler zu korrigieren, der durch den ECC-Decodierer nicht korrigiert werden konnte, größer. Wenn jedoch das Zeichen, an dem der wenigstens eine Zeichenmodifikationsschritt ausgeführt wurde, nicht der Ort des Fehlers ist, ist es vorteilhaft, die gleiche Art der Prüfung an einem oder mehreren weiteren Zeichen auszuführen.
  • In einem weiteren Beispiel des Decodierverfahrens wird, nachdem wenigstens einer der Zeichenmodifikationsschritte für ein Zeichen ausgeführt wurde, der Analyseschritt für das Zeichen ausgeführt. In dieser Ausführungsform wird der Analyseschritt nach den Zeichenmodifikationsschritten für ein Zeichen ausgeführt und es werden nicht zuerst alle Zeichenmodifikationsschritte und anschließend der Analyseschritt ausgeführt. Somit erhält jedes Zeichen seine eigene Menge aus Zeichenmodifikationsschritten und Analyseschritt. Auf diese Weise kann die Korrekturwirkung unmittelbar nach den Zeichenmodifikationsschritten für dieses Zeichen ermittelt werden. Das Decodierverfahren muss nicht für mehrere Zeichen ausgeführt werden, bevor es die Korrekturwirkung ermitteln und feststellen kann, für welches Zeichen die Korrekturwirkung erreicht wurde. Somit wird das Ausführen des Analyseschritts für jedes Zeichen zu einer schnelleren Einschätzung führen, wo der Fehler, nach dem gesucht wird, liegt. Dieses Decodierverfahren funktioniert in einer Ausführungsform besonders gut, bei der die Korrekturwirkung eines einzelnen Zeichens mit einer ausreichenden Wahrscheinlichkeit, dass das zugeordnete Codewort tatsächlich die korrekte Grundlage für das decodierte Codewort ist, verbunden ist. Das Betreiben eines ECC-Decodierers mit einer geringeren Fähigkeit als der Fähigkeit der vollständigen Fehlerkorrektur, d.h. mit der Fähigkeit, weniger als t Fehler zu korrigieren, wäre ein derartiges Beispiel. Dabei ist die Wahrscheinlichkeit einer Falschkorrektur auf einen Pegel vermindert, sodass ein Analyseschritt, der eine Verringerung der Anzahl von Fehlern bei dem modifizierten Zeichen bzw. dem modifizierten Codewort signalisiert, verwendet werden kann, um das Decodierverfahren für das Codewort zu beenden, wobei eine ausreichende Wahrscheinlichkeit angenommen wird, dass das Decodierverfahren das korrekte modifizierte Codewort gefunden hat. Bei anderen Einstellungen führt diese Ausführungsform zu einem kürzeren Prozess auf Kosten des Risikos einer Falschkorrektur. Die zusätzliche Logik zum Ausführen dieses Decodierverfahrens ist bedeutend kleiner als eine Logik für den ECC-Decodierer und der ECC-Decodierer muss nicht verändert werden.
  • In einem weiteren Beispiel des Decodierverfahrens wird der wenigstens eine Zeichenmodifikationsschritt für weitere Zeichen wiederholt, bis die Korrekturwirkung, die in dem Analyseschritt gefunden wird, angibt, dass das entsprechende modifizierte Codewort zu dem decodierten Codewort decodiert werden kann. In Übereinstimmung mit der Erläuterung des obigen Absatzes kann es sich als vorteilhaft erweisen, das Decodierverfahren anzuhalten, wenn der Analyseschritt ein korrektes modifiziertes Codewort signalisiert, da auf diese Weise die Ausführungsdauer des Decodierverfahrens verkürzt werden kann.
  • In einem weiteren Beispiel des Decodierverfahrens wird der Analyseschritt ausgeführt, nachdem der wenigstens eine Zeichenmodifikationsschritt für alle Zeichen ausgeführt wurde. Diese Ausführungsform erweist sich für ein Decodiersystem als nützlich, bei dem die Wahrscheinlichkeit einer Falschkorrektur als zu hoch betrachtet wird, um das laufende Decodierverfahren zu einem beliebigen Zeitpunkt anzuhalten. Dabei werden alle Zeichen geprüft und der Analyseschritt wird lediglich dann ausgeführt, wenn ein Zugriff auf die modifizierten Codewörter aller Zeichen vorhanden ist. Dadurch ist die Korrekturwahrscheinlichkeit größer. Dieses Decodierverfahren ist besonders nützlich, wenn ein ECC-Decodierer verwendet wird, der mit voller Kapazität betrieben wird, d.h. der in der Lage ist, t + 1 Fehler zu detektieren und t Fehler zu korrigieren.
  • In einem weiteren Beispiel des Decodierverfahrens wird der wenigstens eine Zeichenmodifikationsschritt wiederholt, wobei eine Verschiebung von einem Zeichen zu dem nächsten rechten Zeichen in dem Codewort erfolgt. Auf diese Weise arbeitet sich das Decodierverfahren selbst in logischer Reihenfolge durch ein Codewort, wodurch es leichter möglich ist zu verfolgen, auf welches Zeichen es bereits angewendet wurde.
  • In einem weiteren Beispiel des Decodierverfahrens wird die Reihenfolge der Zeichen, an denen der wenigstens eine Zeichenmodifikationsschritt ausgeführt wird, anhand einer Schätzung der Fehlerwahrscheinlichkeit der Zeichen ausgewählt. Dieser Schritt führt eine größere Komplexität gegenüber der oben beschriebenen, von links nach rechts arbeitenden Methode ein. Die Schätzung einer Fehlerwahrscheinlichkeit kann jedoch verwendet werden, um sich zuerst auf jene Zeichen zu konzentrieren, die mit größter Wahrscheinlichkeit fehlerhaft sind. In Kombination mit einer Einstellung, die den Prozess beendet, wenn die Korrekturwirkung für das entsprechende Zeichen und den Zeichenmodifikationsschritt bestätigt wurde, kann diese Einstellung zu einer Verkürzung des Verfahrens führen.
  • In einem weiteren Beispiel des Decodierverfahrens wird in einem Fehlertyp-Bestimmungsschritt der wahrscheinlichste Fehlertyp für Multilevel-Flash-Speicherzellen bestimmt und in Abhängigkeit hiervon erfolgt eine Auswahl, welcher der Zeichenmodifikationsschritte ausgeführt werden sollte. Dabei kann außerdem das Decodierverfahren vereinfacht werden, indem vorhergesagt wird, wo der Fehler höchstwahrscheinlich liegt. Wenn es z.B. vorhergesagt oder abgeschätzt werden kann, dass die Fehlerquelle ein Schreibfehler ist, ist der wahrscheinlichste Fehler eine Wertverschiebung des Zeichens zu einem höheren Wert. Somit führt das Ausführen lediglich des zweiten Zeichenmodifikationsschritts zu der halben Anzahl von Zeichenmodifikationsschritten, die ausgeführt werden, um mit ausreichender Wahrscheinlichkeit zum korrekten Codewort zu gelangen. Diese Verbesserung kann außerdem auf alle Zeichen angewendet werden, sodass für alle Zeichen lediglich der zweite Zeichenmodifikationsschritt ausgeführt wird, während der erste Zeichenmodifikationsschritt weggelassen wird. Der Analyseschritt wird natürlich trotzdem entweder für jedes Zeichen getrennt oder für mehrere oder sogar alle Zeichen in der Gruppe ausgeführt.
  • In einem weiteren Beispiel des Decodierverfahrens wird in einem Fehlertyp-Bestimmungsschritt der wahrscheinlichste Fehlertyp für Multilevel-Flash-Speicherzellen ermittelt und in Abhängigkeit davon erfolgt eine Auswahl, welcher der Zeichenmodifikationsschritte zuerst ausgeführt werden soll. Diese Verbesserung funktioniert ähnlich wie die oben erläuterte Verbesserung. Hier werden jedoch trotzdem beide Zeichenmodifikationsschritte ausgeführt, wobei lediglich ihre Reihenfolge in Abhängigkeit von dem Fehlertyp-Bestimmungsschritt vorgegeben wird. Da beide Zeichenmodifikationsschritte ausgeführt werden, ist die Wahrscheinlichkeit, das korrekte Codewort zu finden, größer, während gleichzeitig die positive Wirkung der Vergrößerung der Wahrscheinlichkeit des Findens des korrekten Codeworts zu einem früheren Zeitpunkt beibehalten wird und das Decodierverfahren zu einem früheren Zeitpunkt bei einem Gewinn der Ausführungsgeschwindigkeit des Decodierverfahrens angehalten werden kann.
  • In einem weiteren Beispiel des Decodierverfahrens umfasst der Analyseschritt in einem Decodierschritt das Berechnen der Anzahl von Fehlern in dem modifizierten Codewort und in einem Folgeschritt das Bestimmen, ob die berechnete Anzahl von Fehlern in dem modifizierten Codewort kleiner ist als die Anzahl von Fehlern in dem Codewort. Die Verringerung der berechneten Anzahl von Fehlern durch den Zeichenmodifikationsschritt ist ein Anzeichen, dass das Decodierverfahren das korrekte Codewort gefunden hat.
  • Bei einem ECC-Decodierer, der in einem Beispiel entworfen ist, um mit einer geringeren als der vollen Fehlerkorrekturkapazität betrieben zu werden, d.h., der in der Lage ist, weniger als t Fehler zu korrigieren, ist die Wahrscheinlichkeit einer Falschkorrektur auf einen Pegel reduziert, sodass ein Analyseschritt, der eine Verringerung der Anzahl von Fehlern bei dem modifizierten Zeichen bzw. dem modifizierten Codewort signalisiert, verwendet werden kann, um das Decodierverfahren für das Codewort zu beenden, wobei mit einer ausreichenden Wahrscheinlichkeit angenommen wird, dass das Decodierverfahren das korrekte modifizierte Codewort gefunden hat. Bei einem ECC-Decodierer, der t Fehler korrigieren kann, ist die Wirkung der Fehlerverminderung ein weniger zuverlässiger Faktor, da jedoch nach allen Zeichen in dem Codewort geprüft wurde, kann die Wirkung verwendet werden, um das eine modifizierte Codewort, das diese Wirkung aufweist, oder eines der modifizierten Codewörter, die diese Wirkung aufweisen, herauszusuchen. Das zuletzt genannte Decodierverfahren kann ein gezieltes Raten, ein zufälliges Aussuchen oder ein Aussuchen unter Verwendung anderer Informationsteile, die die Wahrscheinlichkeit eines korrekten Codeworts vergrößern, sein.
  • In einem weiteren Beispiel des Decodierverfahrens umfasst der Analyseschritt in einem Decodierschritt das Decodieren der modifizierten Codewörter und für alle decodierten Codewörter das Zählen der Häufigkeit des Vorkommens der decodierten modifizierten Codewörter und in einem Folgeschritt das Feststellen, ob es genau ein decodiertes modifiziertes Codewort gibt, dessen Häufigkeit des Vorkommens um eins größer ist als die maximale Anzahl von Fehlern, die durch den Decodierer korrigiert werden können. Bei dieser Verbesserung ist die Wahrscheinlichkeit eines korrekten Codeworts weiter vergrößert. Der Decodierschritt und der Folgeschritt können gemeinsam oder auch getrennt ausgeführt werden. Der Decodierschritt kann z.B. direkt nach dem Zeichenmodifikationsschritt oder den Zeichenmodifikationsschritten ausgeführt werden, wohingegen der Folgeschritt in einer bevorzugten Ausführungsform lediglich ausgeführt wird, nachdem alle Decodierschritte ausgeführt wurden, d.h. nachdem für alle decodierten modifizierten Codewörter die Häufigkeit des Vorkommens der decodierten modifizierten Codewörter gezählt wurde.
  • In noch einem weiteren Beispiel des Decodierverfahrens werden die decodierten modifizierten Codewörter in Hash-Werte umgesetzt, die gemeinsam mit der Häufigkeit des Vorkommens der decodierten modifizierten Codewörter in eine Kandidaten-Hash-Abbildung eingegeben werden. Diese Verbesserung ermöglicht eine schnellere und Platz sparende Handhabung, da anstelle der vollständigen decodierten modifizierten Codewörter lediglich ein kleinerer Hash-Wert gespeichert werden muss. Wenn die endgültige Wahl des Eintrags in die Kandidaten-Hash-Abbildung anhand der Häufigkeit des Vorkommens getroffen wird, kann das entsprechende decodierte modifizierte Codewort rekonstruiert werden. Diese Rekonstruktion kann z.B. einen zusätzlichen Informationsabschnitt verwenden, der in der Hash-Abbildung gespeichert ist, wie etwa Informationen darüber, welches Zeichen in welche Richtung modifiziert wurde, um zu dem entsprechenden modifizierten Codewort zu kommen. Da t + 1 derartige Operationen des empfangenen Codeworts zu einem derartigen modifizierten Codewort führen, könnte jede dieser Operationen verwendet werden.
  • In einem weiteren Beispiel des Decodierverfahrens umfasst der Rückgabeschritt das Bestimmen des korrekten decodierten Codeworts aus dem decodierten modifizierten Codewort, das in dem Folgeschritt verwendet wird, wenn der Folgeschritt ein positives Ergebnis erzielt. Ein positives Ergebnis ist ein Ergebnis, das anzeigt, dass ein decodiertes modifiziertes Codewort das korrekte decodierte Codewort ist, zu welchem das Codewort decodiert werden soll. In Abhängigkeit von dem Typ des Folgeschritts kann dies durch unterschiedliche Faktoren angezeigt werden, wie etwa dann, wenn die berechnete Anzahl von Fehlern in dem modifizierten Codewort kleiner als die Anzahl von Fehlern in dem empfangenen Codewort ist, oder falls es genau ein decodiertes modifiziertes Codewort gibt, dessen Häufigkeit des Vorkommens um eins größer ist als die maximale Anzahl von Fehlern, die durch den Decodierer korrigiert werden können.
  • In einem weiteren Beispiel des Decodierverfahrens umfasst der Rückgabeschritt das Festlegen einer Löschung des Codeworts in einem Löschschritt, wenn der Folgeschritt ein negatives Ergebnis erzielt. Ein negatives Ergebnis kann entweder das Fehlen eines positiven Ergebnisses sein oder mehrere positive Ergebnisse, die untereinander konkurrieren. Wenn es z.B. mehr als genau ein decodiertes modifiziertes Codewort gibt, dessen Häufigkeit des Auftretens um eins größer ist als die maximale Anzahl von Fehlern, die durch den Decodierer korrigiert werden können, die auch als mögliche Kandidaten bezeichnet werden, gibt es kein eindeutiges positives Ergebnis und es kann vorteilhaft sein, sich für eine Löschung anstelle einer Falschkorrektur mit einer Wahrscheinlichkeit von 1 - 1/(mögliche Kandidaten) zu entscheiden, wobei einer von ihnen willkürlich ausgewählt wird.
  • In einem weiteren Beispiel wird eine Decodiervorrichtung bereitgestellt. Die Decodiervorrichtung ist zum Decodieren eines Codeworts entworfen, das von einem Flash-Speicher empfangen wird, der mehrere Multilevel-Flash-Speicherzellen umfasst, wobei jede derartige Multilevel-Flash-Speicherzelle ein Zeichen des Codeworts speichert. Die Decodiervorrichtung umfasst ferner einen ECC-Decodierer, der zum Decodieren des Codeworts zu einem decodierten Codewort entworfen ist und der entworfen ist, eine maximale Anzahl von Fehlern zu korrigieren, einen Eingangsport zum Empfangen des Codeworts und eine Berechungseinheit, die zum Bestimmen der Anzahl von Fehlern in dem Codewort entworfen ist. Wenn die Anzahl von Fehlern größer ist als die maximale Anzahl von Fehlern, die der Decodierer korrigieren kann, ist die Berechungseinheit außerdem entworfen, um ein erstes modifiziertes Codewort durch Anheben des Werts des Zeichens auf den nächsthöheren Wertpegel zu erzeugen und um ein zweites modifiziertes Codeworts durch Absenken des Werts des Zeichens auf den nächstniedrigeren Wertpegel zu erzeugen. Die Berechungseinheit kann dann die Korrekturwirkung der Zeichenmodifikationsschritte berechnen und anhand der Korrekturwirkung das decodierte Codewort bestimmen. Die Decodiervorrichtung umfasst ferner einen Ausgangsport zum Ausgeben des decodierten Codeworts.
  • In einem weiteren Beispiel wird ein Computerprogrammprodukt präsentiert, das ein computerlesbares Medium umfasst, das Programmanweisungen enthält, die durch einen Prozessor ausgeführt werden können, um ein wie oben beschriebenes Decodierverfahren auszuführen.
  • Figurenliste
  • Die Erfindung und ihre Ausführungsformen lassen sich durch Bezugnahme auf die folgende genaue Beschreibung von gegenwärtig bevorzugten, jedoch trotzdem erläuternden Ausführungsformen gemäß der vorliegenden Erfindung in Zusammenschau mit den beigefügten Zeichnungen umfassender nachvollziehen.
  • Die Figuren erläutern Folgendes:
    • 1 einen Graphen, der die Wahrscheinlichkeitsdichte einer MLC-Zelle, die auf einem bestimmten Pegel x programmiert ist, als eine Funktion der Schwellenwertspannung (V_T) darstellt,
    • 2 einen Graphen, der den Einfluss der dominanten Typen von Schreibfehlern auf die Wahrscheinlichkeitsdichte und die Wirkung von Schreibfehlern, die die Schwellenwertspannung (V_T) auf höhere Pegel als vorgesehen verschieben, darstellt,
    • 3 einen Graphen, der die Wirkung von Haltefehlern darstellt, die dazu neigen, die Schwellenwertspannung (V_T) im Fehlerfall auf den nächstniedrigeren Pegel zu verschieben,
    • 4 einen Graphen, der die Wirkung von Lesestörungsfehlern darstellt, die dazu neigen, die Schwellenwertspannung (V_T) vom Pegel 0 zum Pegel 1 zu verschieben,
    • 5 ein Blockschaubild eines Computersystems mit einem Flash-Speicher,
    • 6 ein Blockschaubild eines Flash-Speicherarray mit einer Codierer/Decodierer-Schaltung,
    • 7 einen Ablaufplan der Verarbeitung eines empfangenen Codeworts mit t + 1 Fehlern,
    • 8 einen Ablaufplan zum Korrigieren eines Fehlers unter Verwendung eines Korrekturschemas eines angrenzenden Fehlers,
    • 9 eine Veranschaulichung eines Codierprozesses,
    • 10 eine Veranschaulichung eines Decodierprozesses.
  • GENAUE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
  • 1 stellt einen Graphen dar, der die Wahrscheinlichkeitsdichte einer Multilevel-Zelle (MLC), die auf einem bestimmten Pegel x programmiert ist, als eine Funktion der Schwellenwertspannung (V_T) zeigt. Ein auf einer Singlelevel-Zelle (SLC) basierender Flash-Speicher speichert ein Bit pro Zelle. In auf einer Multilevel-Zelle (MLC) basierten Flash-Speichern werden Daten dadurch gespeichert, dass die Schwellenwertspannung (V_T) einer Zelle auf mehr als zwei unterschiedliche Pegel x programmiert werden kann. In 1 gibt es vier Pegel, daher kann diese Zelle zwei Informationsbits speichern.
  • 2 stellt den Einfluss von dominanten Typen von Schreibfehlern auf die Wahrscheinlichkeitsdichte dar. Ein Schreibfehler verschiebt die Schwellenwertspannung (V_T) auf den nächsthöheren Pegel.
  • 3 stellt den Einfluss eines Haltefehlers auf die Wahrscheinlichkeitsdichte dar. Ein Haltefehler verschiebt die Schwellenwertspannung (V_T) auf den nächstniedrigeren Pegel.
  • 4 stellt den Einfluss eines Lesestörungsfehlers auf die Wahrscheinlichkeitsdichte dar. Ein Lesestörungsfehler verschiebt die Schwellenwertspannung (V_T) vom Pegel 0 auf Pegel 1. Andere Pegel sind nicht betroffen.
  • Fehlerquellen werden in drei Kategorien gruppiert:
    • - Schreibfehler werden dominiert durch Überprogrammierungs-Fehler, die bewirken, dass Zellen mit einer höheren Schwellenwertspannung (V_T) programmiert werden, wie in 2 dargestellt ist.
    • - Haltefehler hängen von der Anzahl von Programmier-/Lösch-Zyklen sowie von der Haltedauer ab und erfolgen meistens infolge eines Ladungsverlustes. Sie haben eine Verschiebung der Schwellenwertspannung (V_T) zu dem nächstniedrigeren Pegel zur Folge, wie in 3 gezeigt ist.
    • - Lesestörungsfehler bewirken, dass Zellen des Pegels 0 auf den nächsthöheren Pegel der Schwellenwertspannung (V_T) verschoben werden, wie in 4 ersichtlich ist.
  • Diese drei unterschiedlichen Fehlerquellen haben gemeinsam, dass sie den Wert der Schwellenwertspannung (V_T) zu einem benachbarten Pegel, d.h. zu dem nächsthöheren oder dem nächstniedrigeren Pegel der Schwellenwertspannung (V_T) verschieben. Verschiebungen zu anderen Pegeln sind theoretisch möglich, jedoch in der Praxis sehr unwahrscheinlich. Dieses Wissen wird in dem hier vorgeschlagenen Decodierverfahren verwendet, um einen zusätzlichen Fehler über der Anzahl von Fehlern, die ein ECC-Decodierer normalerweise korrigieren kann, zu korrigieren.
  • In 5 ist ein Blockschaubild eines beispielhaften digitalen Systems, das Flash-Speicherarrays verwendet, wie etwa ein Computersystem dargestellt. Ein derartiges System enthält eine zentrale Verarbeitungseinheit 13, die die verschiedenen Anweisungen ausführt, die bereitgestellt werden, um die Operationen des Systems zu steuern. Die zentrale Verarbeitungseinheit 13 ist mit einem Bus 10 verbunden, der eingerichtet ist, um Informationen zwischen den verschiedenen Komponenten des Systems zu befördern. Mit dem Bus 10 ist ein Hauptspeicher 11 verbunden, der gewöhnlich als DRAM aufgebaut ist, um Informationen während einer Periode zu speichern, in der Energie an das System geliefert wird. Mit dem Bus 10 sind außerdem verschiedene periphere Komponenten verbunden wie etwa ein Nur-Lese-Speicher 14, ein nichtflüchtiger Langzeit-Speicher 12 und Schaltungen wie etwa ein Bildspeicher 15, in den Daten geschrieben werden können, die an eine Ausgabevorrichtung wie etwa einen Monitor 16 zur Anzeige übertragen werden sollen. Anstelle des elektromechanischen Festplattenlaufwerks, das typischerweise für eine Langzeit-Speicherung verwendet wird, kann ein Flash-Speicherarray als Langzeit-Speicher 12 verwendet werden. Ein derartiges Flash-Speicherarray kann ein Einbit- oder ein Multilevel-Speichersystem umfassen und kann Schaltungen zum Steuern der Operation des Speicherarray, einschließlich aller Operationen, die mit dem Lesen, Programmieren (Schreiben) und Löschen des Speicherarray verbunden sind, enthalten.
  • 6 veranschaulicht in Form eines Blockschaubilds ein Speichersystem 12 wie etwa jenes, das in 5 dargestellt ist. Das Speichersystem 12 ist durch eine Schnittstelle 17 mit dem Bus 10 verbunden. Die Schnittstelle 17 stellt eine geeignete Schaltung zum Liefern von Signalen, die auf dem Bus 10 zugeführt werden, an einen Flash-Systembus 18 bereit. Der Flash-Systembus 18 überträgt Signale von der Schnittstelle 17. In einer Ausführungsform ist diese Logikschaltung 20 ein anwendungsspezifischer integrierter Schaltkreis (ASIC), der eine Logik zum Implementieren und Koordinieren der verschiedenen Operationen des Langzeit-Speichers, der auch als Speichersystem 12 bezeichnet wird, darstellt, wie etwa Lesen, Schreiben, Löschen und Bestimmen des Status der verschiedenen Abschnitte des Flash-Speicherarray. Die Logikschaltung 20 funktioniert als ein Befehlszentrum und steuert Operationen, die in einer Vielzahl von Flash-Chips 26 auftreten, über einen Flash-Bus 27, sodass diese Flash-Chips 26 gemeinsam als ein Langzeit-Flash-Speichersystem funktionieren. Die Flash-Chips 26 umfassen eine Mehrzahl von Multilevel-Flash-Speicherzellen 28. Eine Codiererschaltung 21, die auch als ein ECC-Codierer bezeichnet wird, und eine Decodierer- und Korrekturschaltung 22 sind in der Logikschaltung 20 enthalten. Diese Schaltungen 21 und 22 werden verwendet, um Fehlerdetektion und -korrektur zu realisieren. Die Logikschaltung 20 wird bei ihren Operationen durch einen Mikroprozessor 25 unterstützt, der über einen Mikroprozessorbus 19 mit einem Arbeitsspeicher 23 und einem Nur-Lese-Speicher 24 verbunden ist. Der Mikroprozessor 25, der Arbeitsspeicher 23 und der Nur-Lese-Speicher 24 funktionieren im Wesentlichen als ein Mehrzweck-Prozessor. Daten, die auf dem Flash-Systembus 18 ankommen, können in dem RAM 23 gepuffert werden und von dort über die Logikschaltung 20, die das Codieren der Daten gewährleistet, zu den Flash-Chips 26 übertragen werden. Der Nur-Lese-Speicher 24 wird in einer Ausführungsform verwendet, um einen Prozess zu speichern, der beim Steuern eines Abschnitts der Fehlerdetektions- und -korrekturoperation, die beim Ausführen des vorgeschlagenen Decodierverfahrens verwendet wird, genutzt wird.
  • In einer Ausführungsform enthält jedes Paar Flash-Speicherchips 26 32 Blöcke von Speichertransistoren. Jeder Chip 26 des Paars enthält eine Hälfte der Speichertransistoren der 32 Blöcke und eine Steuerschaltung, um u.a. Lese-, Schreib- und Löschoperationen in den einzelnen Speicherzellen der Blöcke in diesem Chippaar zu bewirken. Jedes Flash-Chippaar ist mit dem Flash-Bus 27 durch eine Befehls-Benutzerschnittstelle verbunden, die Befehlssignale von der Logikschaltung 20 des Systems an das Chippaar bereitstellt.
  • Ein Fehlerkorrekturcode (ECC) C weist eine Fehlerkorrekturfähigkeit t und eine Fehlerdetektionsfähigkeit s, wobei (t ≤ s), und einen minimalen Abstand d = s + t + 1 auf. Des Weiteren verwendet ein ECC-Codierer 21 den Fehlerkorrekturcode C zum Erzeugen von Codewörtern, um sie in einer MLC-Flash-Speichervorrichtung 12 wie jene, die in den 5 und 6 beschrieben ist, zu speichern. Ein ECC-Decodierer mit begrenztem Abstand korrigiert bis zu einer erkannten Anzahl e von Fehlern in diesen Codewörtern, die von der MLC-Flash-Speichervorrichtung 12 gelesen werden, wobei e < (t + 1). Somit ist der ECC-Decodierer eingerichtet, um eine maximale Anzahl t von Fehlern zu korrigieren.
  • Die folgende Nomenklatur wird verwendet: ein ursprüngliches Datenwort O wird durch einen Codierer codiert, um ein codiertes Datenwort W* zu bilden. Dies ist eine eindeutige Abbildungsoperation. Dieses codierte Datenwort W* umfasst das ursprüngliche Datenwort O gemeinsam mit Redundanz-Informationen und repräsentiert ein zulässiges codiertes Datenwort W*, da die Redundanz-Informationen von dem ursprünglichen Datenwort O ohne Fehler abgeleitet wurden. Das codierte Datenwort W* ist somit eine korrekte fehlerfreie Darstellung des ursprünglichen Datenworts O. Das codierte Datenwort W* wird außerdem als ein legales Datenwort bezeichnet, weil es keinen Fehler umfasst. Die Redundanz-Informationen sind mit dem ursprünglichen Datenwort O mathematisch verknüpft. Für ein legales Datenwort sind die Redundanz-Informationen in dem codierten Datenwort W* genau die Redundanz-Informationen, die sich aus dem zugrunde liegenden Codieralgorithmus ergeben.
  • Das codierte Datenwort W* wird im Speicher gespeichert und wenn aus irgendeinem Grund ein Fehler auftritt, wenn versucht wird, das codierte Datenwort W* zu lesen, wird stattdessen eine fehlerhafte Version hiervon gelesen, die das empfangene Codewort W ist, das eine Anzahl von e* Fehlern aufweist. Die Herausforderung besteht nunmehr darin, eine Möglichkeit zu finden, aus dem empfangenen Codewort W das codierte Datenwort W* und somit das ursprüngliche Datenwort O zu finden. Der Decodierer kann eine erkannte Anzahl von e Fehlern des empfangenen Codeworts W detektieren, wobei e ≤ e*. Der Schritt zum Berechnen des codierten Datenworts W* aus dem empfangenen Codewort W wird als Decodieren bezeichnet. Nachdem das korrekte codierte Datenwort W* erhalten wurde, kann daraus das ursprüngliche Datenwort O erzeugt werden, indem hiervon die Redundanzinformationen entfernt werden.
  • In einer bevorzugten Ausführungsform kann das vorgeschlagene Decodierverfahren t + 1 Fehler in einer MLC-Flash-Speichervorrichtung 12 gemäß dem folgenden bevorzugten Algorithmus korrigieren:
    • 1. Zeichenmodifikationsschritt: in dem empfangenen Codewort W wird ein Zeichen auf jeweils sein nächstes benachbartes Zeichen abgeändert, um ein oder zwei modifizierte Codewörter W', W'' zu bilden.
    • 2. Decodierschritt: Das resultierende modifizierte Codewort W', W'' wird unter Verwendung des ECC-Decodierers decodiert.
    • 3. Folgeschritt: Der ECC-Decodierer kann entweder nicht decodieren oder findet für das decodierte modifizierte Codewort D', D'' eine erkannte Anzahl von e', e'' Fehlern, die sich von der erkannten Anzahl e von Fehlern des empfangenen Codeworts unterscheidet.
    • 4'. Wenn weder e = 0 noch e < t+1, findet sich der Decodierer selbst in einer Situation, in der durch Schlussfolgerung gilt e > t. Dann werden bei einem ECC-Decodierer, der eine Korrekturfähigkeit von t aufweist, alle möglichen decodierten modifizierten Codewörter wie oben beschrieben unter Verwendung des Zeichenmodifikationsschritts und des Decodierschritts für alle Zeichen gebildet und ihre Häufigkeit des Auftretens wird gezählt. Am Ende wird, wenn es ein eindeutiges decodiertes modifiziertes Codewort gibt, das t + 1 Mal erhalten wird, dieses decodierte modifizierte Codewort als das decodierte Codewort erklärt, andernfalls wird das empfangene Codewort durch eine Löschung ersetzt.
    • 4''. Wenn e = t, bildet man mit einem ECC-Decodierer, der eine Korrekturfähigkeit von t - 1 hat, weiterhin modifizierte Codewörter und decodiert sie, bis der ECC-Decodierer ein Codewort findet, das sich in t - 1 Zeichen von dem modifizierten empfangenen Wort unterscheidet. In diesem Fall wird das decodierte Codewort, das diesem modifizierten empfangenen Codewort entspricht, als das korrigierte decodierte Cordwort erklärt.
  • In dem zuletzt genannten Fall wird jedes Vorkommen von decodierten Codewörtern gezählt.
  • In einer ersten speziellen bevorzugten Ausführungsform wird in diesem Beispiel ein Decodierer mit einer Fehlerkorrekturfähigkeit von t verwendet. Wenn der minimale Abstand des Codes d = 2t + 2 beträgt, kann der vorgeschlagene Algorithmus t + 1 Fehler korrigieren, obwohl der Fehlerkorrekturcode (ECC) C eine Fehlerkorrekturfähigkeit t aufweist. Wenn der minimale Abstand des Codes d = 2t + 1 beträgt, kann der vorgeschlagene Algorithmus t + 1 Fehler korrigieren, obwohl der Fehlerkorrekturcode (ECC) C eine Fehlerkorrekturfähigkeit t aufweist, wobei jedoch äußerst seltene Fälle einer Falschkorrektur auftreten können.
  • Ein ECC-Codierer mit einer Korrekturfähigkeit von t Fehlern wird verwendet, um ein Datenwort in ein Codewort zu codieren, das aus n Zeichen S jeweils der Größe m besteht, wobei m der Anzahl von Pegeln in einer MLC-Flash-Speichervorrichtung entspricht. Wenn ein ECC-Decodierer das Codewort nicht decodieren kann, gibt es höchstwahrscheinlich t + 1 Fehler und mit einer geringeren Wahrscheinlichkeit könnten mehr als t + 1 Fehler vorhanden sein. In solchen Fällen läuft die Datenwiederherstellung wie in 7 beschrieben ab.
  • 7 zeigt den Ablaufplan der Verarbeitung eines empfangenen codierten Codeworts W mit e = t + 1 Fehlern.
  • Das empfangene Codewort W wird in einem Empfangsschritt 30 von dem Flash-Speicher 26 empfangen. Ein Index i wird in einem Rückgabeschritt 31 auf einen Wert 1 gesetzt. Dieser Index i wird als Zeiger auf das entsprechende Zeichen Si verwendet. Jedes derartige Zeichen Si stellt die Information dar, die in einer entsprechenden Multilevel-Flash-Speicherzelle 28 gespeichert wird. Wenn der Index i auf 1 gesetzt ist, wird in zwei Zeichenmodifikationsschritten 32', 32'' das erste Zeichen S1, d.h. i = 1 in dem empfangenen codierten Codewort W ausgewählt und auf jeweils seine benachbarten Werte, d.h. einmal in dem ersten Zeichenmodifikationsschritt 32' auf den nächsthöheren Pegel der Schwellenwertspannung (V_T) und einmal in dem zweiten Zeichenmodifikationsschritt 32'' auf den nächstniedrigeren Pegel der Schwellenwertspannung (V_T) abgeändert. Das hat somit eine Menge von zwei modifizierten Codewörtern W', W'' zur Folge, wenn der Wert des ersten Zeichens S1 einer der mittleren Werte war, d.h. weder der niedrigste noch der höchste mögliche Wert. Es ergibt sich ein modifiziertes Codewort W' oder W'', wenn der Wert des ersten Zeichens S1 einer der beiden Grenzwerte, d.h. entweder der niedrigste oder der höchste mögliche Wertpegel, d.h. Wert war. In diesem Fall wird der höchste Wert nicht nach oben verschoben und lediglich der niedrigere benachbarte Wertpegel wird ausgewählt, um ein erstes modifiziertes Codewort W' zu bilden. In ähnlicher Weise wird der niedrigste Wert nicht nach unten verschoben und lediglich der höhere benachbarte Wertpegel wird ausgewählt, um ein zweites modifiziertes Codewort W'' zu bilden.
  • Anschließend folgt ein Analyseschritt 50. In diesem Analyseschritt 50 wird die Korrekturwirkung der Zeichenmodifikationsschritte 32', 32'' berechnet.
  • In dieser Ausführungsform umfasst der Analyseschritt 50 einen Decodierschritt 33, in dem die modifizierten Codewörter W', W'' mit dem ECC-Decodierer 22 decodiert werden, was eine entsprechende Anzahl von decodierten modifizierten Codewörtern D', D'' zur Folge hat. Diese decodierten modifizierten Codewörtern D', D'' repräsentieren den Versuch der Verwendung der Fehlerkorrekturinformationen in den modifizierten Codewörtern W', W'', um zu dem legalen codierten Datenwort W* zu gelangen. Wie oben erläutert, ist ein derartiges codiertes Datenwort W* legal, wenn die Redundanzinformationen mit den restlichen Informationen in dem codierten Datenwort W* mathematisch korrekt verknüpft sind.
  • Jedes der decodierten modifizierten Codewörter D', D'' wird anschließend in einem Hash-Abbildungsprozess wie folgt verarbeitet:
    • In einem Schritt 34 der Hash-Abbildungsprüfung wird eine Prüfung ausgeführt, ob das decodierte modifizierte Codewort D' oder D'' bereits in einer Kandidaten-Hash-Abbildung H, die auch einfach als Hash-Abbildung H bezeichnet wird, enthalten ist. Wenn das nicht der Fall ist, wird ein Eintrag für das decodierte modifizierte Codewort D' oder D'' in einem Abbildungs-Hinzufügungsschritt 35 hinzugefügt und die Häufigkeit des Vorkommens x(D) des decodierten modifizierten Codeworts D' oder D'' wird in einem Eintragschritt 36 auf den Wert 1 gesetzt. Wenn ein Eintrag für das decodierte modifizierte Codewort D' oder D'' bereits in der Kandidaten-Hash-Abbildung H enthalten ist, wird der Kandidaten-Hash-Abbildung H kein neuer Eintrag für das decodierte modifizierte Codewort D' oder D'' hinzugefügt, stattdessen wird jedoch seine Häufigkeit des Vorkommens x(D) in einem Inkrementierungsschritt 37 um 1 erhöht.
  • Wie der Name nahe legt, ist die Hash-Abbildung H vorzugsweise eine Abbildung, die Hash-Werte speichert. In einer bevorzugten Ausführungsform werden somit zum Erzeugen des Eintrags die decodierten modifizierten Codewörter D', D'' nicht unverändert in die Hash-Abbildung H eingegeben, sondern werden durch eine entsprechende Hash-Berechnungseinheit in Hash-Werte umgesetzt. Dadurch kann die Hash-Abbildung H, die im Wesentlichen eine Tabelle zum Speichern der decodierten modifizierten Codewörter D', D'' darstellt, in einer konstanten Zeit effektiver durchsucht werden und kleiner gemacht werden, da die Hash-Werte von Natur aus kleiner sind als die zugrunde liegenden decodierten modifizierten Codewörter D', D''. Außerdem wird für jedes decodierte modifizierte Codewort D', D'', das in der Hash-Abbildung H durch seinen Hash-Wert ersetzt wurde, die entsprechende Häufigkeit des Vorkommens x(D) in der Hash-Abbildung H gespeichert. Die Hash-Abbildung H kann außerdem eine Tabelle sein, die keine Hash-Einträge hält, d.h. jede Art von Tabelle, die verwendet wird, um die Ergebnisse des Analyseschritts 50 zu speichern, sei es in der ursprünglichen Form oder sei es in einer Form, die bereits eine bestimmte Berechnung ausführt wie das Verringern der Anzahl möglicher Einträge, die geeignet sind, die korrekten decodierten modifizierten Codewörter D' oder D'' zu werden. Es ist vorteilhaft, in der Hash-Abbildung H lediglich einen Eintrag pro decodiertes modifiziertes Codewort D' bzw. D'' zu haben.
  • Ein zusätzlicher optionaler Schritt kann vor dem Abbildungs-Prüfschritt 34 ausgeführt werden: Ein Nachbarschafts-Prüfschritt kann ausgeführt werden, der prüft, ob die modifizierten Codewörter W', W'' ein Fehlermuster umfassen, das zulässig ist, d.h. mit dem Grundgedanken der Verschiebung eines Zeichens zu einem benachbarten Wert konsistent ist. Ein Zeichen S der decodierten modifizierten Codewörter D', D'' ist in diesem Kontext nur dann zulässig, wenn es nicht mehr als 1 Pegel von dem Pegel des entsprechenden Zeichens S in dem empfangenen Codewort W entfernt ist. Mit anderen Worten, der Nachbarschafts-Prüfschritt prüft für jedes Zeichen S des decodierten modifizierten Codeworts D' oder D'', ob sein Wert nicht um mehr als 1 größer oder um mehr als 1 kleiner als der Wert des entsprechenden Zeichens S des empfangenen Codeworts W ist. Wenn dieses Kriterium nicht erfüllt ist, werden die decodierten modifizierten Codewörter D', D'' als nicht korrekt betrachtet und es ist somit keine weitere Verarbeitung erforderlich. Sie können verworfen werden. Auf diese Weise wird die Korrekturfähigkeit des vorgeschlagenen Decodierverfahrens weiter vergrößert, da jene Decodierschritte 33, die legale, jedoch nicht benachbarte decodierte modifizierte Codewörter D', D'' zur Folge haben, tatsächlich zu decodierten modifizierten Codewörtern D', D'' führen, die nicht korrekt sind. Das Herausnehmen dieser Ergebnisse, bevor der Schritt 34 der Hash-Abbildungsprüfung ausgeführt wird, verringert die Wahrscheinlichkeit einer Falschkorrektur und außerdem einer Löschung infolge von mehreren Hash-Abbildungseinträgen, deren Häufigkeit des Vorkommens x(D) t + 1 beträgt.
  • Die Verarbeitung der decodierten modifizierten Codewörter D', D'' wird null oder mehr Einträge für diese decodierten modifizierten Codewörter D', D'' zur Folge haben, die der Kandidaten-Hash-Abbildung H hinzugefügt werden oder ihre Häufigkeit des Vorkommens x(D) wird in dieser Kandidaten-Hash-Abbildung H aktualisiert, wenn sie dort bereits vorhanden sind. Deswegen sind alle decodierten modifizierten Codewörter D', D'' in der Kandidaten-Hash-Abbildung H verschieden. Die Kandidaten-Hash-Abbildung H hält entweder die decodierten modifizierten Codewörter D', D'' und die zugeordnete Häufigkeit des Vorkommens x(D) der decodierten modifizierten Codewörter D', D'' oder für jedes decodierte modifizierte Codewort D' oder D'' einen Hash-Wert des decodierten modifizierten Codeworts D', D'' gemeinsam mit der Position des Zeichens in dem empfangenen Codewort W und seinem Modifikationstyp (zunehmend oder abnehmend), der einen Zeichenmodifikationsschritt betrifft, der zu dem entsprechenden decodierten modifizierten Codewort D' oder D'' führt. Diese Informationen werden vorzugsweise für den Zeichenmodifikationsschritt gesammelt, der ausgeführt wurde, wenn der Eintrag für das decodierte modifizierte Codewort D', D'' in die Hash-Abbildung H das erste Mal erfolgt. Auf diese Weise kann das Decodierverfahren später aus diesen Informationen in der Hash-Abbildung H das korrekte decodierte Codewort D rekonstruieren. Die Kandidaten-Hash-Abbildung H kann von jedem Typ einer Datenstruktur sein, der ermöglicht, diese Daten zu suchen und zu verarbeiten.
  • Anschließend wird in einem Index-Inkrementierungsschritt 39 der Index i vergrößert und der Prozess, der den Zeichenmodifikationsschritt 32, den Decodierschritt 33 und den Prozess der Hash-Abbildung umfasst, wird wiederholt, bis alle Zeichen Si des empfangenen codierten Codeworts W verarbeitet wurden, d.h. bis i = n. Dieser Zustand wird durch einen Beendigungs-Prüfschritt 38 geprüft.
  • Nachdem alle decodierten modifizierten Codewörter D', D'', die durch Ausführen des Zeichenmodifikationsschritts 32' bzw. 32'' an allen Zeichen S erhalten wurden, verarbeitet wurden, wird in einem Folgeschritt 40 die Häufigkeit des Vorkommens x(D) jedes codierten modifizierten Codeworts D', D'' in der Kandidaten-Hash-Abbildung H geprüft. Genauer gesagt wird festgestellt, ob es genau ein decodiertes modifiziertes Codewort D', D'' gibt, dessen Häufigkeit x(D) des Vorkommens um eins größer ist als die maximale Anzahl t von Fehlern, die durch den Decodierer korrigiert werden können.
  • Das beendet den Analyseschritt 50, da dann die Korrekturwirkung bestimmt wurde. Wenn es genau ein KandidatenWort, d.h. decodiertes modifiziertes Codewort D' oder D'' gibt, das eine Häufigkeit des Vorkommens x(D' oder D'') = t + 1 aufweist, wird dieses decodierte modifizierte Codewort D' oder D'' in einem Rückgabeschritt 41 als das Codewort W* zurückgegeben. Das wird als ein positives Ergebnis des Folgeschritts 40 bezeichnet. Wenn das entsprechende decodierte modifizierte Codewort D' oder D'' in der Hash-Abbildung H in Form der Position und des Modifikationstyps des modifizierten Zeichens S gespeichert wurde, wird eine Decodieroperation ausgeführt, indem diese Informationen von der Hash-Abbildung H auf das empfangene codierte Codewort W angewendet werden, um das entsprechende decodierte modifizierte Codewort D' oder D'', das an dieser Stelle als das Codewort W* erklärt wird, zurückzugeben.
  • Wenn es andernfalls nicht genau ein Kandidatenwort d.h. decodiertes modifiziertes Codewort D' oder D'' gibt, das eine Häufigkeit des Vorkommens x(D' oder D'') = t + 1 aufweist, wird dieses als ein negatives Ergebnis des Folgeschritts 40 bezeichnet und in dem Rückgabeschritt 41 als solches ermittelt und somit wird in einem Löschschritt 42 eine Löschung des fraglichen Codeworts W zurückgegeben.
  • Die beschriebene Ausführungsform funktioniert besonders gut mit einem ECC-Decodierer 22, der entworfen ist, um mit voller Fehlerkorrekturfähigkeit betrieben zu werden, d.h. der in der Lage ist, eine Anzahl von t Fehlern zu korrigieren, wegen der Fähigkeit, Fälle zu eliminieren, bei denen mehrere decodierte Codewörter die gleiche Häufigkeit des Vorkommens von t + 1 aufweisen.
  • In 9 ist dargestellt, wie aus einem ursprünglichen Datenwort O über einen Codierschritt E ein codiertes Datenwort W* erzeugt wird. Das codierte Datenwort W* umfasst zusätzliche Redundanzinformationen, die für Fehlerdetektion und Fehlerkorrektur verwendet werden können. Die Anzahl und gegebenenfalls die Position der Redundanzinformationen in dem codierten Datenwort W* hängen von dem Typ des Fehlerkorrekturcodes und dem verwendeten Decodierer ab. In dem dargestellten Beispiel umfasst das ursprüngliche Datenwort O die Bits „abcdef“, während das codierte Datenwort W* zusätzliche Bits „x, y, z, g“ in der Form „xabycdezfg“ umfasst.
  • Für den Zweck des hier beschriebenen Decodierverfahrens kann das codierte Datenwort W* außerdem als eine Folge von Zeichen S1, S2, ...repräsentiert werden, wobei jedes Symbol S mehrere Werte aufweisen kann, die durch den Typ der verwendeten Speicherzelle bestimmt sind. In einer 4-Pegel-MLC-Flash-Speicherzelle kann z.B. ein Zeichen S einen der Werte 0, 1, 2, 3 aufweisen, somit können derartige Speicherzellen zwei Informationsbits speichern, wobei jedes Zeichen S zwei derartige Informationsbits repräsentiert. Das codierte Datenwort W* umfasst im Allgemeinen eine Anzahl von n Zeichen S, wobei jedes Zeichen S einen Wert von 0 bis zu m - 1 annehmen kann, wobei m - 1 der höchste Wert ist, auf den die MLC-Flash-Speicherzelle programmiert werden kann. In dem dargestellten Beispiel umfasst das codierte Datenwort W* fünf Zeichen S, während m = 4.
  • In 10 ist ein Decodierprozess dargestellt, der vorzugsweise durch eine Decodiervorrichtung ausgeführt werden kann. Bei einem Versuch, das codierte Datenwort W* von dem Flash-Speicher zu lesen, wird das empfangene Codewort W gelesen. Das empfangene Codewort W kann in der Decodiervorrichtung an einem Eingangsport empfangen werden. Der Decodierprozess versucht festzustellen, ob das empfangene Codewort W fehlerhaft ist, und wenn das der Fall ist, ob das empfangene Codewort W korrekt decodiert werden kann, um das codierte Datenwort W* zu erhalten. Zuerst wird das empfangene Codewort W verwendet, um den erkannten Fehlerzustand zu bestimmen. Dieser Schritt kann durch eine Berechnungseinheit, die Teil der Decodiervorrichtung ist, ausgeführt werden. Anhand dessen kann einer von mehreren Fällen eintreten:
    1. 1. Wenn keine Fehler angezeigt werden, d.h. die erkannte Anzahl e von Fehlern ist 0, gibt der Decodierer 22 das decodierte Datenwort aus.
    2. 2. Wenn mehr als null, jedoch weniger als t Fehler oder genau t Fehler angezeigt werden, d.h. 0 < e < t + 1, wird der Decodierer 22 verwendet, um die Fehler zu korrigieren und das decodierte Datenwort auszugeben.
    3. 3. Wenn weder Fall 1 noch Fall 2 auftritt, gibt es mehr als t Fehler. Dann kann das hier beschriebene Decodierverfahren verwendet werden, um zu versuchen, diese Fehler zu beheben.
  • In den oben genannten Fällen 1 und 2 ist es außerdem möglich, dass eine Falschkorrektur auftritt, und zwar dann, wenn die erkannte Anzahl e von Fehlern kleiner ist als t + 1, während die reale Anzahl von Fehlern e* tatsächlich größer als t + 1 ist.
  • In dem obigen Fall 3, d.h. e ≥ t + 1, wird das empfangene Codewort W modifiziert wie bereits oben beschrieben wurde: Das erste Zeichen S1 wird einmal um einen Spannungspegel angehoben und einmal um einen Spannungspegel abgesenkt wie in 10 unter a) gezeigt, wodurch die modifizierten Codewörter W' und W'' erhalten werden. Die modifizierten Codewörter W' und W'' werden dann decodiert. Für die erhaltenen Kandidaten-Codewörter D' und D'', d.h. decodierte modifizierte Codewörter D' und D'', erfolgen Einträge in die Kandidaten-Hash-Abbildung H gemeinsam mit einem Zählerwert für die Häufigkeit des Vorkommens x(D' oder D'') des entsprechenden Kandidaten-Codeworts D' oder D''.
  • Anschließend wird das zweite Zeichen S2 diesem Prozess unterzogen. Hier wird jedoch keine Absenkung erfolgen, da der Wert des zweiten Zeichens S2 bereits 0 ist, wie in 10 unter b) gezeigt. Deswegen ergibt sich hier lediglich ein Kandidaten-Codewort D''. Für das erhaltene Kandidaten-Codewort D'' erfolgt ein Eintrag in die Kandidaten-Hash-Abbildung H gemeinsam mit einem Zählerwert für die Häufigkeit des Vorkommens x(D'') des Kandidaten-Codeworts D''.
  • Wie in 10 unter c) angegeben, wird dieser Prozess für jedes nachfolgende Zeichen Si ausgeführt, bis das letzte Zeichen Sn, hier S5 erreicht wird. Kandidaten-Codewörter D' oder D'', die keinen vorhandenen Eintrag in der Kandidaten-Hash-Abbildung H aufweisen, werden in die Kandidaten-Hash-Abbildung H mit einer Häufigkeit des Vorkommens x(D) = 1 eingegeben. Für Kandidaten-Codewörter D' oder D'', die bereits einen Eintrag in der Kandidaten-Hash-Abbildung H aufweisen, da sie zuvor aufgetreten sind, wird die entsprechende Häufigkeit des Vorkommens x(D) immer dann erhöht, wenn sie auftreten.
  • Anschließend wird die Kandidaten-Hash-Abbildung H mit Einträgen für eine Anzahl von Kandidaten-Codewörtern D', D'' und ihren jeweiligen Häufigkeiten x(D'), x(D'') des Vorkommens aufgefüllt. Dann wird der Wert von t + 1 mit jeder Häufigkeit x(D'), x(D'') des Vorkommens verglichen. Wenn es genau ein Kandidaten-Codewort D' oder D'' gibt, wobei seine Häufigkeit des Vorkommens x(D') oder x(D'') genau t + 1 beträgt, hat der Decodierer 22 mit diesem Kandidaten-Codewort D' oder D'' das korrekte Datenwort für das codierte Datenwort W* gefunden.
  • Wie oben erläutert, kann die Decodiergenauigkeit weiter erhöht werden, indem lediglich jene Kandidaten-Codewörter D', D'' in die Kandidaten-Hash-Abbildung H eingetragen werden, die ein Nachbarschaftskriterium erfüllen. Dieses Kriterium besteht darin, dass der Wertunterschied zwischen jedem Zeichen S der Kandidaten-Codewörter D', D'' und dem entsprechenden Zeichen S des empfangenen Codeworts W nicht größer als 1 ist, d.h. |Si(W) - Si(D')| ≤ 1 für alle i bzw. |Si(W) - Si(D'')| ≤ 1 für alle i.
  • Die Berechungseinheit kann entworfen sein, um einen oder mehrere der Zeichenmodifikationsschritte 32', 32'', den Analyseschritt 50 und den Rückgabeschritt 41 auszuführen. Wenn sich ein decodiertes Codewort D' oder D'' aus dem Rückgabeschritt 41 ergibt, kann das decodierte Codewort D' oder D'' über einen Ausgabeport ausgegeben werden.
  • In einer speziellen zweiten bevorzugten Ausführungsform wird in diesem Beispiel ein Decodierer mit einer Fehlerkorrekturfähigkeit von t - 1 verwendet. Der minimale Abstand des Codes beträgt d = 2t + 1. In diesem Fall kann der beanspruchte Algorithmus t Fehler korrigieren. Während des normalen Betriebs werden bis zu (t - 1) Fehler durch den ECC-Decodierer 22 korrigiert, wobei sich Decodiergeschwindigkeit und Decodierkomplexität im Vergleich zu einem ECC-Decodierer, der bis zu t Fehler korrigiert, verbessern. Im Falle des Auftretens von t Fehlern kann der Algorithmus zum Korrigieren von t Fehlern verwendet werden. In diesem Fall ist der Algorithmus bei der korrekten Decodierung eines empfangenen Codeworts mit t Fehlern stets erfolgreich. Allgemeiner gesagt, während eines normalen Betriebs können durch den ECC-Decodierer bis zu (t - x) Fehler korrigiert werden, wobei 0 < x < t und x eine feste Zahl ist, die durch den Decodiererentwurf festgelegt ist. Bei t - x + 1 Fehlern kann das vorgeschlagene Decodierverfahren verwendet werden, um t - x + 1 Fehler zu korrigieren. In diesem Fall ist der Algorithmus bei der korrekten Decodierung eines empfangenen Codeworts mit t - x + 1 Fehlern stets erfolgreich.
  • 8 veranschaulicht eine alternative Ausführungsform der Korrektur eines Fehlers unter Verwendung des vorgeschlagenen Fehlerkorrekturschemas. Diese Ausführungsform stellt einen Vorteil dar, wenn der ECC-Decodierer 22 entworfen ist, um eine Anzahl von t Fehlern zu detektieren und eine Anzahl von t - 1 Fehlern zu korrigieren, d.h. das entspricht x = 1.
  • Ein empfangenes Codewort W umfasst eine Anzahl von n Zeichen S jeweils der Größe m, wobei m der Anzahl von programmierbaren Pegeln in einer Multilevel-Flash-Speicherzelle 28 einer MLC-Flash-Speichervorrichtung entspricht.
  • Das Codewort W wird in einem Empfangsschritt 30 von dem Flash-Speicher 26 empfangen. Ein Index i wird in einem Rückgabeschritt 31 auf einen Wert 1 gesetzt. Dieser Index i wird als der Zeiger auf das entsprechende Zeichen Si verwendet. Wenn der Index i auf 1 gesetzt ist, wird in einem ersten Zeichenmodifikationsschritt 32' und in einem zweiten Zeichenmodifikationsschritt 32'' das erste Zeichen S1 ausgewählt und jeweils auf seine benachbarten Werte d.h. den nächsthöheren bzw. den nächstniedrigeren Pegel der Schwellenwertspannung (V_T) abgeändert. Das hat eine Menge von einem oder zwei modifizierten Codewörtern W' und W'' zur Folge, wie bereits in Verbindung mit der ersten speziellen Ausführungsform beschrieben. Diese Menge wird genau ein modifiziertes Codewort W' oder W'' aufweisen, wenn der ursprüngliche Pegel des ersten Zeichens S1 entweder der höchste oder der niedrigste mögliche Wertpegel ist, oder zwei modifizierte Codewörter W' und W'' aufweisen, wenn er ein Wertpegel ist, der dazwischen liegt.
  • Für alle resultierenden modifizierten Codewörter W' und W'' wird in einem Decodierschritt 33 die Anzahl e', e'' von Fehlern, die in diesen modifizierten Codewörtern detektiert werden, berechnet. Diese Berechnung kann ausgeführt werden, indem ein regulärer Decodieralgorithmus ausgeführt wird, da in dem resultierenden decodierten modifizierten Codewort D' oder D'' die Information darüber enthalten ist, wie viele erkannte Fehler e' oder e'' das entsprechende decodierte modifizierte Codewort D' oder D'' aufweist.
  • Als Nächstes folgt ein Folgeschritt 40, in dem festgestellt wird, ob die berechnete Anzahl e', e'' von Fehlern in dem modifizierten Codewort W', W'' kleiner ist als die erkannte Anzahl e von Fehlern in dem Codewort W. Wenn die Anzahl e', e'' von Fehlern, die detektiert wurden, für ein decodiertes modifiziertes Codewort W' oder W'' von t auf t - 1 verringert wurde, wird deutlich, dass die Wahl des entsprechenden benachbarten Werts zu einer Verbesserung geführt hat und das korrekte decodierte Codewort, das dann als das codierte Datenwort W* erklärt wird, kann durch Decodieren dieses modifizierten Codeworts D' oder D'' in einem Rückgabeschritt 41 erhalten werden.
  • Wenn jedoch die Anzahl e', e'' von Fehlern, die detektiert wurden, im Vergleich mit der erkannten Anzahl e von Fehlern des empfangenen Codeworts W von t auf t + 1 zugenommen hat, oder die Anzahl e', e'' von Fehlern gleich geblieben ist, war die Wahl des benachbarten Wertpegels nicht korrekt und das Decodierverfahren wird mit dem nächsten Zeichen Si in dem empfangenen Codewort W fortgesetzt. Der Wert des Index i wird in dem Indexerhöhungsschritt 39 erhöht, um anschließend den Zeichenmodifikationsschritt 32 usw. zu wiederholen, jedoch diesmal mit dem nächsten Zeichen Si + 1.
  • Nachdem das korrekte decodierte Codewort D' oder D'' gefunden wurde, beendet der Algorithmus in dem Rückgabeschritt 41 die Verarbeitung. Das decodierte Codewort D' oder D'' wird als das Datenwort W* erklärt.
  • Der Algorithmus wird alternativ in einem Löschschritt 42 anhalten, nachdem er erfolglos versucht hat, Zeichen bis zu dem letzten Zeichen Sn und einschließlich dieses Zeichens in dem empfangenen Codewort W zu modifizieren.
  • Es gibt eine Vielzahl von Möglichkeiten, wie die Zeichen Si schrittweise durchgegangen werden, wenn die Zeichenmodifikationsschritte 32', 32'' wiederholt werden. Eine erste Möglichkeit besteht darin, von links nach rechts voranzuschreiten, eine zweite besteht darin, von rechts nach links voranzuschreiten. Beide Verfahren haben den Vorteil, dass sie durch die Verwendung eines binären Zeigers verhältnismäßig einfach zu implementieren sind. Der Aufwand zum Verfolgen, welches Zeichen Si gegenwärtig untersucht wird, d.h. mit den Zeichenmodifikationsschritten 32', 32'' verarbeitet wird, wird verhältnismäßig gering gehalten.
  • Eine Alternative besteht darin, eine größere Aufmerksamkeit darauf zu richten, welche Zeichen Si in welcher Reihenfolge ausgewählt werden. Es kann eine Schätzung über die Fehlerwahrscheinlichkeit der Zeichen Si gemacht werden. Bei dieser Schätzung kann festgestellt werden, welche der Zeichen Si am wahrscheinlichsten einen Fehler aufweisen. Dann kann eines von diesen Zeichen Si ausgewählt werden, das erste Zeichen Si zu sein, das den Zeichenmodifikationsschritten 32', 32'' unterzogen wird. Anschließend kann der Prozess entweder mit einer Verschiebung zu dem nächsten rechten Zeichen fortgesetzt werden oder das nächste Zeichen Si kann wieder eines von jenen sein, die eine höhere Fehlerwahrscheinlichkeit als andere Zeichen Si aufweisen. Insbesondere dann, wenn das hier beschriebene Decodierverfahren so eingerichtet ist, dass es endet, wenn der Analyseschritt 50 für das Zeichen Si, das gegenwärtig verarbeitet wird, ein positives Ergebnis erzielt, besteht bei dieser Auswahl von Zeichen Si eine größere Wahrscheinlichkeit, das Decodierverfahren früher zu beenden. Somit benötigt das Decodierverfahren weniger Zeit.
  • Eine weitere Möglichkeit zur Vereinfachung und auch zur Beschleunigung des Decodierverfahrens besteht darin, im Voraus zu bestimmen, welcher Fehlertyp der wahrscheinlichste ist, der bei dem empfangenen Codewort W auftritt. Da wie oben erläutert unterschiedliche Fehlertypen eine unterschiedliche Verteilung dahingehend aufweisen, welche Änderungen des Spannungspegels mit höherer Wahrscheinlichkeit auftreten, kann das Vorhandensein eines Konzepts, welcher dieser Fehlertypen vorhanden oder wahrscheinlich vorhanden ist, verwendet werden, um eine Auswahl zu treffen, welcher der Zeichenmodifikationsschritte 32', 32'' zuerst ausgeführt werden soll oder welche Zeichenmodifikationsschritte 32', 32'' überhaupt ausgeführt werden sollen. Bei einem Haltefehler ist z.B. die typische Änderung ein Abfall des Spannungspegels um einen Pegel. Somit würde eine Verschiebung des Werts des entsprechenden Zeichens Si auf den nächsthöheren Pegel diese Art von Fehler eliminieren und zu einem korrekten decodierten Codewort D' führen. Das Decodierverfahren kann somit beschleunigt werden, indem lediglich der erste Zeichenmodifikationsschritt 32' an den Zeichen Si ausgeführt wird. Wenn die Annahme bezüglich des Fehlertyps korrekt war, sollte das Decodierverfahren in der Lage sein, das Codewort W korrekt zu decodieren. Wenn der Rückgabeschritt 41 jedoch kein korrektes decodiertes Codewort D' zurückgibt, legt der Rückgabeschritt 41 stattdessen eine Löschung fest und das Decodierverfahren endet mit einer Löschung.
  • Um die Decodierwahrscheinlichkeit zu verbessern, kann das obige verbesserte Decodierverfahren nochmals verbessert werden, indem die Ausführung des zweiten Zeichenmodifikationsschritts 32'' für die Zeichen Si hinzugefügt wird. Eine bevorzugte Reihenfolge würde somit darin bestehen, zuerst alle erste Zeichenmodifikationsschritte 32' auszuführen, den Analyseschritt 50 an den resultierenden ersten modifizierten Codewörtern D' auszuführen, zu prüfen, ob dieser ein positives Ergebnis erzielt, und wenn das nicht der Fall ist, die zweiten Zeichenmodifikationsschritte 32'' auszuführen und anschließend den Analyseschritt 50 ein weiteres Mal auszuführen, wobei dieses Mal die Korrekturwirkung der zweiten Zeichenmodifikationsschritte 32'' berechnet wird. Dann hat das Decodierverfahren alle möglichen Zeichenmodifikationsschritte 32' und 32'' durchlaufen und gibt entweder ein decodiertes Codewort D' oder D'' zurück oder bewirkt eine Löschung.
  • Die beschriebene Ausführungsform funktioniert besonders gut bei einem ECC-Decodierer 22, der eingerichtet ist, bei einer geringeren als der vollen Fehlerkorrekturfähigkeit betrieben zu werden, d.h. der wegen der verringerten Wahrscheinlichkeit einer Falschkorrektur bei dieser Einstellung in der Lage ist, eine Fehleranzahl von e Fehlern zu korrigieren, die kleiner als t Fehler ist.
  • Dieser Algorithmus wird linear mit der Anzahl von Zeichen S in dem Codewort W skaliert. Im Allgemeinen müssen weniger als n modifizierte empfangene Codewörter W', W'' geprüft werden, da es ausreichend ist, das erste Auftreten eines Fehlers in dem empfangenen Codewort W zu finden. Somit beträgt die durchschnittliche Anzahl von Zeichen S, die geprüft werden müssen, etwa n/(t + 1) unter der Annahme, dass Fehler gleichmäßig verteilt sind.
  • Wenn des Weiteren die Werte der Zeichen in den Codewörtern W gleichmäßig verteilt sind, gibt es in einem MLC-Flash-Speicher mit 4 Pegeln eine Chance von 0,5, auf dem höchsten oder niedrigsten Pegel zu sein. Dieser Effekt verringert ebenfalls die Anzahl von modifizierten Codewörtern W' oder W'', die zu prüfen sind.
  • Der Algorithmus kann weiter verbessert werden, wenn der wahrscheinlichste Fehlertyp geschätzt werden kann, wie etwa wenn ein Schreibfehler bewirkt, dass sich die Schwellenwertspannung (V_T) um einen Pegel nach oben verschiebt. Wenn ein empfangenes Codewort W geprüft wird, unmittelbar nachdem es geschrieben wurde, und ein Fehler wird detektiert, dann ist das höchstwahrscheinlich auf einen Schreibfehler und nicht auf einen Haltefehler zurückzuführen. In diesem Fall kann das Decodierverfahren verbessert werden, indem es nicht nur auf lediglich einem benachbarten Pegel relativ zu dem Wert jedes Zeichens S ausgeführt wird. Bei einem Schreibfehler kann dann der erste Zeichenmodifikationsschritt 32' weggelassen werden. Das verringert die Anzahl von benachbarten Werten, die zu prüfen sind.
  • In einer weiteren bevorzugten Ausführungsform kann die Auswahl, ob ein Zeichenwertpegel nur anzuheben oder abzusenken ist, gemäß der Ausgabe einer Schätzeinrichtung erfolgen, die festlegt, welche Variante einer fehlerinduzierten Spannungspegeländerung wahrscheinlicher ist. Die Variante, die wahrscheinlicher ist, kann dann zuerst oder ausschließlich untersucht werden.
  • Die Anzahl von Pegeln in MLC-basierten Flash-Speichern kann sich zukünftig durch den technischen Forschritt vergrößern. Das vorgeschlagene Decodierverfahren wird bei derartigen MLCs vorteilhaft geeignet sein, wenn sich die Anzahl von modifizierten Codewörtern, die zu prüfen sind, für den gleichen Umfang von Daten bei einer ansteigenden Anzahl von Pegeln vermindert. Das Decodierverfahren kann bei RS, BCH und anderen Codes verwendet werden. Die Anzahl von durch den Decodierer korrigierbaren Fehlern kann verringert werden, um die Robustheit durch Verringerung der Wahrscheinlichkeit einer Falschkorrektur zu verbessern. Das Decodierverfahren kann in Verbindung mit einer Gray-Abbildung verwendet werden. Alle Ausführungsformen des hier beschriebenen Decodierverfahrens können teilweise oder als Ganzes kombiniert werden. Das vorgeschlagene Decodierverfahren ist nicht auf MLC-Flash-Speicher beschränkt, sondern kann auf andere Speichervorrichtungen angewendet werden, die ähnliche Voraussetzungen wie MLC-NAND-Flash-Speicher aufweisen.
  • Prüfungen an SLC-Flash-Speichern haben außerdem gezeigt, dass die Fehlerrate von Seiten auch von der Lage der Seite in dem Block abhängt. Zum Beispiel ist beobachtet worden, dass Seiten mit niedrigen Nummern eine bedeutend höhere Fehlerrate aufweisen als Seiten mit höheren Nummern. Diese Beobachtung ist abhängig von der tatsächlichen Technologie des Flash-Speicherchips, die verwendet wird, und kann von Hersteller zu Hersteller variieren. Wenn jedoch ein solcher Unterschied zwischen Stellen in einem Codewort beobachtet werden kann, wenn ein Chip analysiert und klassifiziert wird, kann das hier beschriebene Decodierverfahren vorzugsweise weiter verbessert werden, indem berücksichtigt wird, dass anstelle des linearen Durchlaufens von Zeichen, beginnend an dem ersten Zeichen, um die Zeichenmodifikationsschritte auszuführen, bei jenen Zeichen begonnen werden kann, die eine höhere Fehlerwahrscheinlichkeit aufweisen.
  • Das Decodierverfahren kann teilweise oder vollständig in Software oder Hardware oder einer Kombination hiervon implementiert sein. Das Decodierverfahren kann bei Implementierung in Hardware durch einen Decodierer ausgeführt werden. Das Decodierverfahren kann bei Implementierung in Software durch ein Computerprogrammprodukt ausgeführt werden. Das Computerprogrammprodukt kann auf einem computerlesbaren Medium vorgesehen sein, das Softwareanweisungen enthält, die durch einen Computer ausgeführt werden können, um die Schritte des Decodierverfahrens auszuführen. Das computerlesbare Medium kann z.B. ein CD-ROM, eine DVD, eine Flash-Speicherkarte, eine Festplatte oder ein anderes geeignetes computerlesbares Medium wie z.B. ein Speichermedium in einem Netzwerk sein.

Claims (16)

  1. Verfahren zum Decodieren eines Codeworts (W), das von einem Flash-Speicher (26), der mehrere Multilevel-Flash-Speicherzellen (28) umfasst, empfangen wird, wobei jede derartige Multilevel-Flash-Speicherzelle (28) ein Zeichen (Si) des Codeworts (W) speichert, und wobei ein ECC-Decodierer (22) zum Decodieren des Codeworts (W) in ein decodiertes Codewort (D) eingerichtet ist, wobei der ECC-Decodierer (22) entworfen ist, um eine maximale Anzahl (t) von Fehlern zu korrigieren, wobei das Verfahren die folgenden Schritte umfasst: - in einem Fehlerprüfschritt (44) Bestimmen der Anzahl (e) von Fehlern in dem Codewort (W), - wenn die Anzahl (e) von Fehlern größer ist als die maximale Anzahl (t) von Fehlern, die der ECC-Decodierer (22) korrigieren kann: o Ausführen ■ eines ersten Zeichenmodifikationsschritts (32'), der ein erstes modifiziertes Codewort (W') erzeugt, durch Anheben des Werts eines Zeichens (Si) auf den nächsthöheren Wertpegel, und/oder ■ eines zweiten Zeichenmodifikationsschritts (32''), der ein zweites modifiziertes Codewort (W'') erzeugt, durch Absenken des Werts eines Zeichens (Si) auf den nächstniedrigeren Wertpegel, o in einem Analyseschritt (50) Berechnen der Korrekturwirkung des wenigstens einen Zeichenmodifikationsschritts (32', 32''), o in einem Rückgabeschritt (41) Festlegen ■ des decodierten Codeworts (D) anhand der Korrekturwirkung, ■ oder einer Löschung des Codeworts (W), wobei der Analyseschritt (50) Folgendes umfasst: - in einem Decodierschritt (33) Decodieren der modifizierten Codewörter (W', W'') und für alle decodierten modifizierten Codewörter (D', D'') Zählen der Häufigkeit (x(D)) des Vorkommens der decodierten modifizierten Codewörter (D', D''), und - in einem Folgeschritt (40) Bestimmen, ob es genau ein decodiertes modifiziertes Codewort (D', D'') gibt, dessen Häufigkeit (x(D)) des Vorkommens um eins größer ist als die maximale Anzahl (t) von Fehlern, wobei die decodierten modifizierten Codewörter (D', D'') in Hash-Werte umgesetzt werden, die gemeinsam mit der Häufigkeit (x(D)) des Vorkommens der decodierten modifizierten Codewörter (D', D'') in eine Kandidaten-Hash-Abbildung (H) eingegeben werden.
  2. Verfahren nach Anspruch 1, wobei der erste Zeichenmodifikationsschritt (32') weggelassen wird, wenn der Wert des Zeichens (Si) auf dem höchsten Pegel ist, auf den die Multilevel-Flash-Speicherzelle (28) programmiert werden kann.
  3. Verfahren nach Anspruch 1 oder 2, wobei der zweite Zeichenmodifikationsschritt (32'') weggelassen wird, wenn der Wert des Zeichens (Si) auf dem niedrigsten Pegel ist, auf den die Multilevel-Flash-Speicherzelle (28) programmiert werden kann.
  4. Verfahren nach einem der vorhergehenden Ansprüche, wobei der wenigstens eine Zeichenmodifikationsschritt (32', 32'') bei einem anderen Zeichen (Si) wiederholt wird.
  5. Verfahren nach Anspruch 4, wobei, nachdem wenigstens einer der Zeichenmodifikationsschritte (32', 32'') für ein Zeichen (Si) ausgeführt wurde, der Analyseschritt (50) für das Zeichen (Si) ausgeführt wird.
  6. Verfahren nach Anspruch 4 oder 5, wobei der wenigstens eine Zeichenmodifikationsschritt (32', 32'') für andere Zeichen (Si) wiederholt wird, bis die in dem Analyseschritt (50) gefundene Korrekturwirkung angibt, dass das entsprechende modifizierte Codewort (W', W'') in das decodierte Codewort (D) decodiert werden kann.
  7. Verfahren nach Anspruch 4, wobei, nachdem der wenigstens eine Zeichenmodifikationsschritt (32', 32'') für alle Zeichen (Si) ausgeführt wurde, der Analyseschritt (50) ausgeführt wird.
  8. Verfahren nach einem der Ansprüche 4 bis 7, wobei der wenigstens eine Zeichenmodifikationsschritt (32', 32'') wiederholt wird, wobei eine Verschiebung von einem Zeichen (Si) zu dem nächsten rechten Zeichen (Si+1) in dem Codewort (W) erfolgt.
  9. Verfahren nach einem der Ansprüche 4 bis 7, wobei die Reihenfolge der Zeichen (Si), an denen der wenigstens eine Zeichenmodifikationsschritt (32', 32'') ausgeführt wird, anhand einer Schätzung der Fehlerwahrscheinlichkeit der Zeichen (Si) ausgewählt wird.
  10. Verfahren nach einem der vorhergehenden Ansprüche, wobei in einem Fehlertyp-Bestimmungsschritt der höchstwahrscheinliche Fehlertyp für die Multilevel-Flash-Speicherzellen (28) bestimmt wird und wobei in Abhängigkeit hiervon eine Auswahl erfolgt, welcher der Zeichenmodifikationsschritte (32', 32'') ausgeführt werden soll.
  11. Verfahren nach einem der vorhergehenden Ansprüche, wobei in einem Fehlertyp-Bestimmungsschritt der höchstwahrscheinliche Fehlertyp für die Multilevel-Flash-Speicherzellen (28) bestimmt wird und wobei in Abhängigkeit hiervon eine Auswahl erfolgt, welcher der Zeichenmodifikationsschritte (32', 32'') zuerst ausgeführt werden soll.
  12. Verfahren nach einem der vorhergehenden Ansprüche, wobei der Analyseschritt (50) Folgendes umfasst: - in einem Decodierschritt (33) Berechnen der Anzahl (e', e'') von Fehlern in dem modifizierten Codewort (W', W'') und - in einem Folgeschritt (40) Bestimmen, ob die berechnete Anzahl (e', e'') von Fehlern in dem modifizierten Codewort (W', W'') kleiner ist als die Anzahl (e) von Fehlern in dem Codewort (W).
  13. Verfahren nach einem der vorhergehenden Ansprüche, wobei der Rückgabeschritt (41) das Festlegen des korrekten decodierten Codeworts (D) aus dem decodierten modifizierten Codewort (D', D'') umfasst, das in dem Folgeschritt (40) verwendet wird, wenn der Folgeschritt (40) ein positives Ergebnis erzielt.
  14. Verfahren nach einem der vorhergehenden Ansprüche, wobei der Rückgabeschritt (41) das Festlegen einer Löschung des Codeworts (W) in einem Löschschritt (42) umfasst, wenn der Folgeschritt (40) ein negatives Ergebnis erzielt.
  15. Decodiervorrichtung zum Decodieren eines Codeworts (W), das von einem Flash-Speicher (26), der mehrere Multilevel-Flash-Speicherzellen (28) umfasst, empfangen wird, wobei jede derartige Multilevel-Flash-Speicherzelle (28) ein Zeichen (Si) des Codeworts (W) speichert, wobei die Decodiervorrichtung ferner einen ECC-Decodierer (22) umfasst, der zum Decodieren des Codeworts (W) in ein decodiertes Codewort (D) entworfen ist und zum Korrigieren einer maximalen Anzahl (t) von Fehlern entworfen ist, und Folgendes umfasst: - einen Eingangsport zum Empfangen des Codeworts (W), - eine Berechnungseinheit, die entworfen ist zum Bestimmen der Anzahl (e) von Fehlern in dem Codewort (W), und wenn die Anzahl (e) von Fehlern größer ist als die maximale Anzahl (t) von Fehlern, die der Decodierer (22) korrigieren kann, zum ◯ Ausführen ■ eines ersten Zeichenmodifikationsschritts (32') zum Erzeugen eines ersten modifizierten Codeworts (W') durch Anheben des Werts des Zeichens (Si) auf den nächsthöheren Wertpegel und/oder ■ eines zweiten Zeichenmodifikationsschritts (32'') zum Erzeugen eines zweiten modifizierten Codeworts (W'') durch Absenken des Werts des Zeichens (Si) auf den nächstniedrigeren Wertpegel, o in einem Analyseschritt (50) Berechnen der Korrekturwirkung der Zeichenmodifikationsschritte (32', 32''), ◯ in einem Rückgabeschritt (41) Festlegen ■ des decodierten Codeworts(D) anhand der Korrekturwirkung ■ oder einer Löschung des Codeworts, - einen Ausgangsport zum Ausgeben des decodierten Codeworts (D), wobei der Analyseschritt (50) Folgendes umfasst: - in einem Decodierschritt (33) Decodieren der modifizierten Codewörter (W', W'') und für alle decodierten modifizierten Codewörter (D', D'') Zählen der Häufigkeit (x(D)) des Vorkommens der decodierten modifizierten Codewörter (D', D''), und - in einem Folgeschritt (40) Bestimmen, ob es genau ein decodiertes modifiziertes Codewort (D', D'') gibt, dessen Häufigkeit (x(D)) des Vorkommens um eins größer ist als die maximale Anzahl (t) von Fehlern, wobei die decodierten modifizierten Codewörter (D', D'') in Hash-Werte umgesetzt werden, die gemeinsam mit der Häufigkeit (x(D)) des Vorkommens der decodierten modifizierten Codewörter (D', D'') in eine Kandidaten-Hash-Abbildung (H) eingegeben werden.
  16. Computerprogrammprodukt, das ein computerlesbares Medium umfasst, das Programmanweisungen enthält, die durch einen Prozessor ausgeführt werden können, um ein Verfahren nach einem der Ansprüche 1 bis 16 auszuführen.
DE112011100371.4T 2010-01-28 2011-01-27 Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts Active DE112011100371B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP10151942 2010-01-28
EP101519429 2010-01-28
PCT/IB2011/050355 WO2011092641A1 (en) 2010-01-28 2011-01-27 Method, device and computer program product for decoding a codeword

Publications (2)

Publication Number Publication Date
DE112011100371T5 DE112011100371T5 (de) 2013-01-24
DE112011100371B4 true DE112011100371B4 (de) 2020-11-19

Family

ID=43877168

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011100371.4T Active DE112011100371B4 (de) 2010-01-28 2011-01-27 Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts

Country Status (5)

Country Link
US (1) US8996958B2 (de)
CN (1) CN102741819B (de)
DE (1) DE112011100371B4 (de)
GB (1) GB2490461A (de)
WO (1) WO2011092641A1 (de)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201239893A (en) * 2011-03-25 2012-10-01 Silicon Motion Inc Method for enhancing data protection performance, and associated personal computer and storage medium
US8832524B2 (en) * 2011-09-22 2014-09-09 Violin Memory, Inc. System and method for correcting errors in data using a compound code
US9128869B2 (en) * 2011-09-29 2015-09-08 Micron Technology, Inc. Systems and methods involving managing a problematic memory cell
US9459955B2 (en) * 2012-05-24 2016-10-04 Sandisk Technologies Llc System and method to scramble data based on a scramble key
US9043674B2 (en) * 2012-12-26 2015-05-26 Intel Corporation Error detection and correction apparatus and method
TWI509624B (zh) * 2013-07-01 2015-11-21 Asolid Technology Co Ltd 快閃記憶體裝置、記憶體控制器及快閃記憶體的控制方法
US9128834B2 (en) * 2013-09-24 2015-09-08 International Business Machines Corporation Implementing memory module communications with a host processor in multiported memory configurations
US9768808B2 (en) * 2015-04-08 2017-09-19 Sandisk Technologies Llc Method for modifying device-specific variable error correction settings
US9639282B2 (en) 2015-05-20 2017-05-02 Sandisk Technologies Llc Variable bit encoding per NAND flash cell to improve device endurance and extend life of flash-based storage devices
US9606737B2 (en) 2015-05-20 2017-03-28 Sandisk Technologies Llc Variable bit encoding per NAND flash cell to extend life of flash-based storage devices and preserve over-provisioning
US10284232B2 (en) * 2015-10-28 2019-05-07 Pure Storage, Inc. Dynamic error processing in a storage device
US9792176B2 (en) * 2015-11-13 2017-10-17 Samsung Electronics Co., Ltd. Method and apparatus for encoding and decoding data in memory system
US10013179B2 (en) 2015-12-03 2018-07-03 Sandisk Technologies Llc Reading logical groups of data from physical locations in memory using headers
US9830084B2 (en) 2015-12-03 2017-11-28 Sandisk Technologies Llc Writing logical groups of data to physical locations in memory using headers
US10290353B2 (en) * 2016-09-06 2019-05-14 Western Digital Technologies, Inc. Error mitigation for 3D NAND flash memory
US10095417B1 (en) 2016-12-13 2018-10-09 EMC IP Holding Company LLC Method and system for improving flash storage read performance in partially programmed blocks
US10289550B1 (en) 2016-12-30 2019-05-14 EMC IP Holding Company LLC Method and system for dynamic write-back cache sizing in solid state memory storage
US10338983B2 (en) 2016-12-30 2019-07-02 EMC IP Holding Company LLC Method and system for online program/erase count estimation
US11069418B1 (en) * 2016-12-30 2021-07-20 EMC IP Holding Company LLC Method and system for offline program/erase count estimation
US10326473B2 (en) * 2017-04-13 2019-06-18 Sk Hynix Inc Symbol-based coding for NAND flash devices
US10403366B1 (en) 2017-04-28 2019-09-03 EMC IP Holding Company LLC Method and system for adapting solid state memory write parameters to satisfy performance goals based on degree of read errors
US10290331B1 (en) 2017-04-28 2019-05-14 EMC IP Holding Company LLC Method and system for modulating read operations to support error correction in solid state memory
CN107705817B (zh) * 2017-09-22 2020-09-08 山东存储之翼电子科技有限公司 利用闪存通道特性的解码方法、装置及数据存储系统
KR102511903B1 (ko) * 2018-02-26 2023-03-21 에스케이하이닉스 주식회사 고정된 에러정정능력의 에러정정코드 엔진을 이용하여 재구성할 수 있는 에러정정동작을 수행하는 메모리 시스템
US10749547B2 (en) * 2018-03-28 2020-08-18 Intel Corporation Error detector and/or corrector checker method and apparatus
US10951607B2 (en) * 2018-05-14 2021-03-16 GM Global Technology Operations LLC Authentication methods and systems
US11182244B2 (en) * 2018-10-16 2021-11-23 Micron Technology, Inc. Error correction management for a memory device
US11204829B2 (en) * 2019-03-26 2021-12-21 Innogrit Technologies Co., Ltd. Systems and methods for an ECC architecture with prioritized task queues
US11128314B2 (en) 2019-06-24 2021-09-21 SK Hynix Inc. Error characteristic estimation for NAND flash
KR102705065B1 (ko) * 2019-07-29 2024-09-09 에스케이하이닉스 주식회사 낮은 레이턴시를 갖는 에러정정코드 디코더
US11082062B2 (en) * 2019-09-17 2021-08-03 SK Hynix Inc. Hardware implementations of a quasi-cyclic syndrome decoder

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090292972A1 (en) * 2008-05-23 2009-11-26 Samsung Electronics Co., Ltd. Error correction apparatus, method thereof and memory device comprising the apparatus

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5475693A (en) 1994-12-27 1995-12-12 Intel Corporation Error management processes for flash EEPROM memory arrays
US6839875B2 (en) 1996-10-18 2005-01-04 Micron Technology, Inc. Method and apparatus for performing error correction on data read from a multistate memory
US5864569A (en) 1996-10-18 1999-01-26 Micron Technology, Inc. Method and apparatus for performing error correction on data read from a multistate memory
TWM304711U (en) 2006-04-26 2007-01-11 Genesys Logic Inc Flash memory data access reliability enhancing device
US7450425B2 (en) 2006-08-30 2008-11-11 Micron Technology, Inc. Non-volatile memory cell read failure reduction
KR100842680B1 (ko) 2007-01-08 2008-07-01 삼성전자주식회사 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템
US20090055706A1 (en) * 2007-08-21 2009-02-26 Mediatek Inc. Method and apparatus for flash memory error correction
US8120960B2 (en) * 2007-11-07 2012-02-21 Spansion Israel Ltd. Method and apparatus for accessing a non-volatile memory array comprising unidirectional current flowing multiplexers
US20090177943A1 (en) 2008-01-09 2009-07-09 Broadcom Corporation Error correction coding using soft information and interleaving
JP4672743B2 (ja) * 2008-03-01 2011-04-20 株式会社東芝 誤り訂正装置および誤り訂正方法
US8413012B2 (en) * 2009-05-18 2013-04-02 Allen LeRoy Limberg Burst-error correction methods and apparatuses for wireless digital communications systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090292972A1 (en) * 2008-05-23 2009-11-26 Samsung Electronics Co., Ltd. Error correction apparatus, method thereof and memory device comprising the apparatus

Also Published As

Publication number Publication date
GB2490461A (en) 2012-10-31
CN102741819A (zh) 2012-10-17
US20120290899A1 (en) 2012-11-15
DE112011100371T5 (de) 2013-01-24
US8996958B2 (en) 2015-03-31
WO2011092641A1 (en) 2011-08-04
CN102741819B (zh) 2016-02-10
GB201215112D0 (en) 2012-10-10

Similar Documents

Publication Publication Date Title
DE112011100371B4 (de) Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts
DE112011103295B4 (de) Decodieren in Solid-State-Speichereinheiten
DE10233642B4 (de) Fehlerkorrektur-Kodierung und -Dekodierung in einer Festkörper-Speicherungsvorrichtung
DE19782077B4 (de) Verfahren und Vorrichtung zum Korrigieren eines Mehrpegelzellenspeichers durch Verwendung fehlerlokalisierender Codes
DE102008003113B4 (de) ECC-Steuereinheit, Speichersystem und Verfahren zur Korrektur eines Fehlers
DE102015201384B4 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
DE112014004778B4 (de) Vorrichtung und Verfahren zum Verwalten von Chipgruppen
DE102017001420B4 (de) Redundanz von fehlerkorrekturcodierten daten in einem speichersystem
DE112014002870B4 (de) Kombinations-Fehler- und Löschdecodierung für Produktcodes
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
DE102013020712B4 (de) Techniken zum Speichern von Bits in Speicherzellen mit Hängenbleiben-auf-0-oder-1-Fehlern
DE112011101116B4 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
DE102005052698A1 (de) Verfahren zur Verarbeitung von nichtflüchtig gespeicherten Daten
DE102015215401B4 (de) Speichervorrichtung und Verfahren zum Korrigieren einer gespeicherten Bitfolge
DE102014103125A1 (de) Verfahren und Vorrichtung zum Optimieren des Log-Likelihood-Quotienten (LLR), die verwendet werden für eine nichtflüchtige Speichervorrichtung und zum Korrigieren von Fehlern in einer nichtflüchtigen Speichervorrichtung
DE112020006139T5 (de) Vor-lese-und lese-schwellenspannungsoptimierung
DE102007038114A1 (de) Fehlerkorrekturschaltung, Halbleiterspeicherelement und Fehlerkorrekturverfahren
DE102013016681B4 (de) Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern
DE102010037290A1 (de) Speichersysteme und Verfahren zur Erfassung einer Verteilung von instabilen Speicherzellen
DE112011101852B4 (de) Decodieren von LDPC-Code
DE112021004294T5 (de) Verfahren und einrichtung zum bestimmen, wann der tatsächliche verschleiss einer flash-speichervorrichtung von zuverlässigkeitszuständen für die flash-speichervorrichtung abweicht
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE102015113414A1 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE102018124836A1 (de) Neuartiger speicherbaustein
DE112022002131T5 (de) Ldpc-dekodierung mit trapped-block-management

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
R084 Declaration of willingness to licence
R020 Patent grant now final