-
HINTERGRUND
-
Flash-Speicher können aufgrund von Variationen in den Speicherzellen, die zum Zeitpunkt der Herstellung entstehen, oder aufgrund von Änderungen im Verhalten, wenn die Speicherzellen altern, zu Datenfehlern bei darin gespeicherten Daten führen. Fehlerkorrekturcodes können verwendet werden, um Datenfehler während Leseoperationen zu korrigieren. Beispielsweise können Paritätsprüfungscodes niedriger Dichte (LDPC) robuste Fehlerkorrekturfähigkeiten bereitstellen. Jedoch können LDPC-Algorithmus-Codes zu unerwünschter Latenz bei Leseoperationen beitragen.
-
ZUSAMMENFASSUNG
-
Nach Aspekten der vorliegenden Technologie wird ein maschinenimplementiertes Verfahren bereitgestellt, das das Bestimmen einer Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten und das Ausführen einer mehrstufigen Decodierungsoperation zum Decodieren von Rohdaten beinhaltet, die aus der Mehrzahl von Speicherzellen unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen gelesen werden. Decodierte Daten werden von der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation zurückgegeben, und die früheren Decodierdaten werden basierend auf Ergebnissen der mehrstufigen Decodierungsoperation aktualisiert.
-
Nach Aspekten der vorliegenden Technologie wird ein Datenspeichersystem bereitgestellt, das eine nichtflüchtiges Speichervorrichtung und eine Steuerung beinhaltet. Die Steuerung ist eingerichtet, um eine Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten zu bestimmen und eine mehrstufige Decodierungsoperation auszuführen, um Rohdaten zu decodieren, die aus der Mehrzahl von Speicherzellen, unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen gelesen werden. Jede Stufe der mehrstufigen Decodierungsoperation beinhaltet das Ausführen einer oder mehrerer Decodierungsoperationen zum Decodieren von Rohdaten, die unter Verwendung einer entsprechenden Lesepegelspannung aus der Sequenz der Mehrzahl von Lesepegelspannungen, die der Stufe entsprechen, aus der Mehrzahl von Speicherzellen gelesen werden. Die Stufen der mehrstufigen Decodierungsoperation werden sequenziell ausgeführt, bis eine der einen oder mehreren Decodierungsoperationen auf einer der Stufen die aus der Mehrzahl von Speicherzellen gelesenen Rohdaten erfolgreich decodiert. Decodierte Daten werden von der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation zurückgegeben, und die früheren Decodierdaten werden basierend auf Ergebnissen der mehrstufigen Decodierungsoperation aktualisiert.
-
Nach Aspekten der vorliegenden Technologie wird ein prozessorlesbares Medium mit ausführbaren Anweisungen codiert, die, wenn sie von einem Prozessor ausgeführt werden, ein Verfahren durchführen. Das Verfahren beinhaltet das Bestimmen einer Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten und das Ausführen einer mehrstufigen Decodierungsoperation zum Decodieren von Rohdaten, die aus der Mehrzahl von Speicherzellen unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen gelesen werden. Decodierte Daten werden von der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation zurückgegeben, und die früheren Decodierdaten werden basierend auf Ergebnissen der mehrstufigen Decodierungsoperation aktualisiert, indem ein Zählerwert erhöht wird, der einer Lesepegelspannung der Mehrzahl von Lesepegelspannungen entspricht, die zum Lesen der erfolgreich decodierten Rohdaten verwendet werden. Die Sequenz der Mehrzahl von Lesepegelspannungen wird basierend auf dem Zählerwert bestimmt.
-
Nach Aspekten der vorliegenden Technologie wird ein Datenspeichersystem bereitgestellt, das einen nichtflüchtigen Speicher und Mittel zum Bestimmen einer Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten beinhaltet. Das Datenspeichersystem beinhaltet weiterhin Mittel zum Ausführen einer mehrstufigen Decodierungsoperation zum Decodieren von Rohdaten, die aus der Mehrzahl von Speicherzellen gelesen werden, unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen und Mitteln zum Zurückgeben von decodierten Daten von der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation. Das Datenspeichersystem beinhaltet weiterhin Mittel zum Aktualisieren der früheren Decodierdaten basierend auf Ergebnissen der mehrstufigen Decodierungsoperation.
-
Es versteht sich, dass andere Konfigurationen der vorliegenden Offenbarung für den Fachmann aus der folgenden detaillierten Beschreibung leicht ersichtlich werden, wobei verschiedene Konfigurationen der vorliegenden Offenbarung zur Veranschaulichung gezeigt und beschrieben werden. Es ist einleuchtend, dass die vorliegende Offenbarung andere und unterschiedliche Konfigurationen ermöglicht, und ihre verschiedenen Details ermöglichen es, in verschiedenen anderen Beziehungen modifiziert zu werden, ohne dabei vom Umfang der vorliegenden Offenbarung abzuweichen. Dementsprechend sind die Zeichnungen und die detaillierte Beschreibung als veranschaulichend und nicht als einschränkend zu betrachten.
-
Figurenliste
-
- 1 ist ein Blockdiagramm, das beispielhafte Komponenten eines Datenspeichersystems nach Aspekten der vorliegenden Technologie zeigt.
- 2 zeigt eine beispielhafte Grafik bzw. ein Diagramm, die/das vier mögliche Zellenprogrammverteilungen in einem Mehrpegelzellen-Flash-Speicher nach Aspekten der vorliegenden Technologie veranschaulicht.
- 3 zeigt ein Flussdiagramm einer mehrstufigen Decodierungsoperation nach Aspekten der vorliegenden Technologie.
- 4 zeigt ein Flussdiagramm eines Prozesses zum Einstellen einer mehrstufigen Decodierungsoperation nach Aspekten der vorliegenden Technologie.
-
DETAILLIERTE BESCHREIBUNG
-
Die nachstehend dargelegte detaillierte Beschreibung ist als eine Beschreibung verschiedener Konfigurationen der vorliegenden Offenbarung gedacht und soll nicht die einzigen Konfigurationen darstellen, in denen die vorliegende Offenbarung in der Praxis umgesetzt werden kann. Die beigefügten Zeichnungen sind in dieses Dokument integriert und Bestandteil der detaillierten Beschreibung. Die detaillierte Beschreibung beinhaltet spezifische Details, um ein gründliches Verständnis der vorliegenden Offenbarung zu ermöglichen. Jedoch wird für Fachleute offensichtlich sein, dass die vorliegende Offenbarung ohne diese spezifischen Details in der Praxis umgesetzt werden kann. In einigen Fällen sind Strukturen und Komponenten in Blockdiagrammform gezeigt, um zu vermeiden, dass die Konzepte der vorliegenden Offenbarung unklar werden. Gleiche Komponenten sind zum leichteren Verständnis mit identischen Elementnummern gekennzeichnet.
-
Die LDPC-Decodierung kann sich einer mehrstufigen Decodierungsoperation bedienen, um Rohdaten zu decodieren, die aus einer Gruppe von Speicherzellen in einem nichtflüchtigen Speicher, wie einem NAND-Flash-Speicher, gelesen werden. Die Rohdaten, die in jeder Stufe der Decodierungsoperation verarbeitet werden, können aus den Speicherzellen unter Verwendung einer jeweiligen Lesepegelspannung aus einer Sequenz von verschiedenen Lesepegelspannungen gelesen werden. Jede Stufe kann eine harte Decodierungsoperation an den Rohdaten und/oder eine oder mehrere weiche Decodierungsoperationen an den Rohdaten ausführen. Die mehrstufige Decodierungsoperation kann jeweils eine Stufe in einer Sequenz ausführen, bis die aus den Speicherzellen gelesenen Rohdaten erfolgreich decodiert sind.
-
Speicherzellen in demselben Block, derselben Gruppe von Blöcken, demselben Modul oder derselben Modulcharge können gemeinsame Merkmale aufweisen, die zu Ähnlichkeiten bei Lesefehlern führen, die beim Lesen von Daten aus dem Block, der Gruppe von Blöcken, dem Modul oder der Modulcharge auftreten. Lesefehler, die beim Lesen von Daten aus Speicherzellen eines ähnlichen Lebensalters auftreten, können ebenfalls Ähnlichkeiten haben. Die vorliegende Technologie nutzt diese Ähnlichkeiten, um die mehrstufige Decodierungsoperation durch Verfolgen der Stufe und der entsprechenden Lesepegelspannung zu verbessern, bei der frühere Decodierungsoperationen die aus Speicherzellen gelesenen Rohdaten erfolgreich decodiert haben. Lesefehler, die in anderen ähnlich beschaffenen Speicherzellen auftreten, können unter Verwendung einer Sequenz von Lesepegelspannungen basierend auf früheren erfolgreichen Decodierungsoperationen, die die mehrstufige Decodierungsoperation verkürzen können, wiederhergestellt werden. Wie nachstehend detaillierter besprochen, modifiziert die vorliegende Technologie die mehrstufige Decodierungsoperation durch Bestimmen einer Sequenz von Lesepegelspannungen basierend auf früheren Decodierdaten, die anzeigen, welche Lesepegelspannungen verwendet wurden, um Rohdaten in früheren Lesevorgängen erfolgreich zu decodieren. Das Anordnen der Lesepegelspannungen in einer Sequenz basierend auf früheren erfolgreichen Leseoperationen ermöglicht es, dass Lesepegelspannungen mit einer höheren Wahrscheinlichkeit einer erfolgreichen Decodierung früher in der Sequenz angeordnet werden, während Lesepegelspannungen mit einer geringeren Wahrscheinlichkeit einer erfolgreichen Decodierung an eine weiter hinten liegende Stelle der Sequenz gerückt werden. Auf diese Weise wird die Sequenz von Lesepegelspannungen basierend auf Leseoperationen optimiert, wenn die Speicherzellen altern oder sich die Betriebsbedingungen verändern.
-
1 ist ein Blockdiagramm, das beispielhafte Komponenten eines Datenspeichersystems 100 nach Aspekten der vorliegenden Technologie zeigt. Das Datenspeichersystem 100 beinhaltet eine Steuerung 102, eine Paritätsprüf-Engine (LDPC) mit niedriger Dichte 104, ein Speichermedium 106 und ein Flash-Speichervorrichtungs-Array 108. Wie in 1 dargestellt, kann das Datenspeichersystem 100 mit einer Host-Vorrichtung 110 über eine Host-Schnittstelle 112 verbunden sein.
-
Die Steuerung 102 kann mehrere interne Komponenten, wie einen oder mehrere Prozessoren 103, einen Nur-Lese-Speicher, eine Flash-Komponentenschnittstelle (beispielsweise einen Multiplexer zum Verwalten von Befehls- und Datentransport entlang einer Verbindung zu dem Flash-Speichervorrichtungs-Array 108), eine E/A-Schnittstelle, eine Fehlerkorrekturschaltung und dergleichen, beinhalten. Der Prozessor 103 der Steuerung 102 kann den Betrieb der Komponenten in der Datenspeichersteuerung 102 überwachen und steuern. Der Prozessor 103 und/oder die Steuerung 102 kann ein Mehrkernprozessor, ein Allzweck-Mikroprozessor, ein Mikrocontroller, ein digitaler Signalprozessor (DSP), ein anwendungsspezifischer integrierter Schaltkreis (ASIC), ein programmierbarer Logikbaustein (PLD), eine Steuerung, ein Zustandsautomat, ein Logikgatter, diskrete Hardwarekomponenten oder eine Kombination der Vorstehenden sein. Eines oder mehrere Elemente der Steuerung 102 können in einem einzelnen Chip integriert sein. In anderen Aspekten können die Elemente in zwei oder mehr diskreten Komponenten implementiert sein.
-
Die Steuerung 102 kann eingerichtet sein, um Code oder Anweisungen auszuführen, um die hierin beschriebenen Operationen und Funktionen durchzuführen. Zum Beispiel kann die Steuerung 102 eingerichtet sein, um Operationen zum Verwalten von Anforderungsfluss- und Adressenabbildungen durchzuführen und um Berechnungen durchzuführen und Befehle zu erzeugen. Eine oder mehrere Sequenzen von Anweisungen können als Firmware in Speicher in der Steuerung 102 gespeichert sein. Eine oder mehrere Sequenzen von Anweisungen können gespeicherte Software sein, die von dem Speichermedium 106 und dem Flash-Speichervorrichtungs-Array 108 gelesen wird oder von der Host-Vorrichtung 110 empfangen wird (zum Beispiel über die Host-Schnittstelle 112). Speichermedium 106 und Flash-Speichervorrichtungs-Array 108 stellen Beispiele von maschinen- oder computerlesbaren Medien dar, auf denen Anweisungen/Code, die durch die Steuerung 102 ausführbar sind, gespeichert werden können. Die Begriffe maschinen- oder computerlesbare Medien können allgemein jedes materielle und nicht-flüchtige Medium oder jeden Datenträger bezeichnen, das/der verwendet wird, um Anweisungen an die Steuerung 102 bereitzustellen, einschließlich sowohl flüchtiger Medien, wie beispielsweise dynamischer Speicher, der für Speichermedien 102 oder für Puffer in der Steuerung 102 verwendet wird, als auch nichtflüchtige Medien, wie elektronische Medien, optische Medien und magnetische Medien. Die hierin beschriebenen Operationen und Funktionen können auch unter Verwendung zum Beispiel von logischen Schaltungen in Hardware oder einer Kombination von Hardware und Software/Firmware implementiert sein.
-
Nach einigen Aspekten stellt Speichermedium 106 flüchtigen Speicher dar, der zum temporären Speichern von Daten und Informationen verwendet wird, die dazu dienen, das Datenspeichersystem 100 zu verwalten. Nach Aspekten der vorliegenden Offenbarung ist das Speichermedium 106 ein Speicher mit wahlfreiem Zugriff (RAM), wie ein RAM mit doppelter Datenrate (DDR). Andere Typen von RAM können auch verwendet werden, um das Speichermedium 106 zu implementieren. Das Speichermedium 106 kann unter Verwendung eines einzelnen RAM-Moduls oder mehrerer RAM-Module implementiert werden. Während das Speichermedium 106 als von der Steuerung 102 verschieden dargestellt ist, versteht es sich, dass das Speichermedium 106 in die Steuerung 102 integriert sein kann, ohne vom Umfang der vorliegenden Offenbarung abzuweichen. Alternativ kann das Speichermedium 106 ein nichtflüchtiger Speicher sein, wie eine Magnetplatte, ein Flash-Speicher, ein Peripherie-SSD und dergleichen.
-
Die Hostschnittstelle 112 ist eingerichtet, um mit der Host-Vorrichtung 110 gekoppelt zu werden, um Daten von der Host-Vorrichtung 110 zu empfangen und Daten an diese zu senden. Die Host-Schnittstelle 112 kann sowohl elektrische als auch physische Verbindungen enthalten, um die Host-Vorrichtung 110 betriebsmäßig mit der Steuerung 102 zu koppeln. Die Host-Schnittstelle 112 ist eingerichtet, um Daten, Adressen und Steuersignale zwischen der Host-Vorrichtung 110 und der Steuerung 102 zu kommunizieren. Auf diese Weise ist die Steuerung 102 so eingerichtet, dass sie in Reaktion auf einen Schreibbefehl von der Hostvorrichtung 110 von der Hostvorrichtung 102 empfangene Daten im Flash-Speichervorrichtungs-Array 108 speichert und im Flash-Speichervorrichtungs-Array 108 gespeicherte Daten liest und die gelesenen Daten als Reaktion auf einen Lesebefehl von der Hostvorrichtung 110 über die Hostschnittstelle 112 an die Hostvorrichtung 110 überträgt.
-
Die Hostvorrichtung 110 stellt jede Vorrichtung dar, die eingerichtet ist, um mit dem Datenspeichersystem 110 gekoppelt zu werden und Daten in dem Datenspeichersystem 100 zu speichern. Die Hostvorrichtung 110 kann ein Rechensystem, wie ein Personalcomputer, ein Server, eine Workstation, ein Laptop-Computer, ein PDA, ein Smartphone und dergleichen, sein. Alternativ kann die Hostvorrichtung 110 eine elektronische Vorrichtung, wie eine Digitalkamera, ein digitaler Audioplayer, ein digitaler Videorecorder und dergleichen, sein.
-
Wie ferner in 1 dargestellt, können die Host-Vorrichtung 110 und das Datenspeichersystem 100 über einen Bus 114 miteinander kommunizieren. Der Bus 114 und die Schnittstelle 112 können geeignete Schnittstellenstandards verwenden, einschließlich, aber nicht beschränkt auf Serial Advanced Technology Attachment (SATA), Advanced Technology Attachment (ATA), Small Computer System Interface (SCSI), PCI-extended (PCI-X), Fibre Channel, Serial Attached SCSI (SAS), Secure Digital (SD), Embedded Multi-Media Card (EMMC), Universal Flash Storage (UFS) und Peripheral Component Interconnect Express (PCIe).
-
Das Datenspeichersystem 100 kann einen internen Systembus 115 beinhalten. Der Systembus 115 kann eine Kombination aus einem Steuerbus, Adressbus und Datenbus beinhalten und die Komponenten der Steuerung 102 (z. B. einen darin befindlichen Prozessor und/oder Speicher) mit anderen Komponenten des Datenspeichersystems 100 verbinden, einschließlich der Speicher-LDPC-Engine 104, des Speichermediums 106, des Flash-Speichervorrichtungs-Arrays 108 und der Host-Schnittstelle 112. Daten können zwischen den verschiedenen Komponenten über den Systembus 115 übertragen werden. Der Systembus 115 kann sich teilweise außerhalb und teilweise innerhalb der Steuerung 102 befinden.
-
Die Hostvorrichtung 110 und das Datenspeichersystem 100 können über eine verdrahtete oder drahtlose Verbindung miteinander kommunizieren und können lokal oder entfernt voneinander sein. Nach einem oder mehreren anderen Aspekten beinhaltet das Datenspeichersystem 100 (oder die Host-Schnittstelle 112) einen drahtlosen Transceiver, um das Host-Gerät 110 und das Datenspeichersystem 100 in drahtlose Kommunikation miteinander zu bringen.
-
Die Steuerung 102 kann eingerichtet sein, um Daten und/oder Speicherzugriffsbefehle von einem Speicherschnittstellenmodul 116 (z. B. einem Gerätetreiber) der Host-Vorrichtung 110 zu empfangen. Von der Speicherschnittstelle 116 kommunizierte Speicherzugriffsbefehle können von dem Host-System 110 ausgegebene Schreib- und Lesebefehle beinhalten. Lese- und Schreibbefehle können eine logische Adresse (z. B. logische Blockadressen oder LBAs) vorgeben, die verwendet wird, um auf Daten zuzugreifen, die in dem Datenspeichersystem 100 gespeichert sind. Die Steuerung 102 kann Befehle in dem Flash-Speichervorrichtungs-Array 108 als Reaktion auf Befehle ausführen, die von dem Speicherschnittstellenmodul 116 empfangen werden.
-
Das Flash-Speichervorrichtungs-Array 108 kann mehrere Flash-Speichervorrichtungen 118 enthalten. Eine Flash-Speichervorrichtung 118 stellt eien nichtflüchtige Speichervorrichtung zum Speichern von Daten dar. Nach Aspekten der vorliegenden Technologie enthält die Flash-Speichervorrichtung 118 beispielsweise einen NAND-Flash-Speicher. Jede Flash-Speichervorrichtung 118 kann einen einzelnen Flash-Speicherchip oder ein -Modul beinhalten, oder kann mehrere Flash-Speicherchips oder -Module beinhalten. Zum Beispiel können in einem Flash-Speichervorrichtungs-Array 108 einige der Flash Speichervorrichtungen 118 ein Flash-Modul aufweisen, während andere mehr als ein Flash-Modul aufweisen können. Die Flash-Speichervorrichtung 118 ist nicht auf irgendeine bestimmte Kapazität oder Konfiguration beschränkt. Zum Beispiel können die Anzahl physischer Blöcke, die Anzahl physischer Seiten pro physischem Block, die Anzahl von Sektoren pro physischer Seite und die Größe der Sektoren innerhalb des Umfangs der vorliegenden Technologie variieren.
-
Das Flash-Speichervorrichtungs-Array 108 kann in mehreren Kanälen angeordnet sein, wobei jeder Kanal eine oder mehrere Flash-Speichervorrichtungen 118 aufweist. Eine Flash-Speichervorrichtung 118 kann eine oder mehrere Flash-Speicherschnittstellen (nicht dargestellt) enthalten. Jede Flash-Speicherschnittstelle verbindet die Steuerung 102 über einen entsprechenden Kanal mit einer der Flash-Speichervorrichtungen. Jeder der Kanäle (nicht dargestellt) kann unter Verwendung von einem oder mehreren physischen E/A-Bussen implementiert werden, die zwischen einer der Flash-Speicherschnittstellen und der/den entsprechenden Flash-Vorrichtung(en) gekoppelt sind. Jeder Kanal ermöglicht der entsprechenden Flash-Speicherschnittstelle, Lese-, Schreib- und/oder Löschbefehle an die entsprechende Flash-Speichervorrichtung zu senden. Jede Flash-Speicherschnittstelle kann ein Register (z. B. First-In-First-Out- (FIFO) -Register) beinhalten, das Lese-, Schreib- und/oder Löschbefehle von der Steuerung 102 für die entsprechende Flash-Speichervorrichtung in einer Warteschlange anordnet. Obwohl der Begriff „Kanal“, wie vorstehend verwendet, sich auf den Bus bezieht, der zwischen einer Flash-Speicherschnittstelle und der entsprechenden Flash-Speichervorrichtung gekoppelt ist, kann sich der Begriff „Kanal“ auch auf die entsprechende Flash-Speichervorrichtung beziehen, die durch einen Bus (z. B. Systembus 115) adressierbar ist.
-
Die Flash-Speichervorrichtungen 118 können eine Standardschnittstellenspezifikation haben. Dieser Standard stellt sicher, dass Chips von mehreren Herstellern austauschbar (zumindest in einem hohen Maß) verwendet werden können. Die Schnittstelle der Flash-Speichervorrichtungen 118 kann verwendet werden, um auf interne Register 120 und einen internen Flash-Controller 122 zuzugreifen. Nach einigen Aspekten können die Register 120 Adress-, Befehls- und/oder Datenregister enthalten, die intern die notwendigen Daten zu und von einem NAND-Speicherzellen-Array 124 abrufen und ausgeben. Beispielsweise kann das Speicherzellen-Array 124 einen Einzelpegelzellenspeicher (SLC), einen Mehrpegelzellenspeicher (MLC), eine Dreipegelzellenspeichervorrichtung (TLC) usw. aufweisen, und in einigen Aspekten kann das Flash-Speichervorrichtungs-Array 108 eine oder mehrere Hybridspeichervorrichtungen aufweisen, die in einem oder mehreren von einem SLC-, MLC- oder TLC-Modus arbeiten können. Andere Typen von Flash-Speichern, wie beispielsweise ein 3D-NAND-Flash-Speicher, werden auch in der vorliegenden Technologie in Betracht gezogen.
-
Ein Datenregister (z. B. der Register 120) kann Daten beinhalten, die in dem Speicherzellen-Array 124 gespeichert werden sollen, oder Daten nach einem Abruf aus dem Speicherzellen-Array 124, und kann auch zur temporären Datenspeicherung verwendet werden und/oder wie ein Puffer wirken. Ein Adressenregister kann die Speicheradresse speichern, von der Daten an die Host-Vorrichtung 110 abgerufen werden, oder die Adresse, an die Daten gesendet und gespeichert werden. Nach einigen Aspekten ist ein Befehlsregister enthalten, um die Parität, die Unterbrechungssteuerung und dergleichen zu steuern. Nach einigen Aspekten ist die interne Flash-Steuerung 122 über ein Steuerregister zugänglich, um das allgemeine Verhalten der Flash-Speichervorrichtung 118 zu steuern. Der interne Flash-Controller 122 und/oder das Steuerregister können die Anzahl von Stoppbits, Wortlänge, Empfänger-Taktquelle steuern und können auch das Umschalten des Adressiermodus, der Paging-Steuerung, Coprozessorsteuerung und dergleichen steuern.
-
Die LDPC-Engine 104 stellt eine oder mehrere Komponenten dar, die eingerichtet sind, um Codewörter zu codieren und/oder zu decodieren, die in dem Flash-Speichervorrichtungs-Array 108 gespeichert und/oder aus diesem gelesen werden sollen. Die LDPC-Engine 104 kann einen Codierer und einen Decodierer einschließen. Der Decodierer kann einen harten Decodierer und einen Soft-Decision-ECC-Decodierer einschließen. Die LDPC-Engine 104 kann die von der Hostvorrichtung 100 empfangenen Daten in Codewörter codieren und Codewörter aus dem Flash-Speicher-Array 118 vor dem Senden der decodierten Daten an den Host decodieren. Bei einigen Implementierungen kann die LDPC-Engine 104 eine oder mehrere Speichervorrichtung(en) und/oder eine oder mehrere Prozessoreinheiten aufweisen, die verwendet werden, um eine Fehlerkorrektur durchzuführen (z. B. unter Verwendung von LDPC oder Turbocodes). Die LDPC-Engine 104 kann auch ein weiches Informationsmodul beinhalten, das Soft-Metrik-Eingaben für Codier- und Decodierungsoperationen bestimmt und/oder beibehält. Während die LDPC-Engine 104 als von der Steuerung 102 verschieden dargestellt ist, versteht es sich, dass die LDPC-Engine 104 in die Steuerung 102 integriert sein kann, ohne vom Umfang der vorliegenden Offenbarung abzuweichen.
-
2 zeigt eine beispielhafte Grafik ein Diagramm, die/das vier mögliche Zellenprogrammverteilungen in einem Mehrpegelzellen-(MLC) Flash-Speicher nach Aspekten der vorliegenden Technologie veranschaulicht. Wie dargestellt, können MLC-NAND-Zellen auf eine(n) von vier unterschiedlichen Zuständen oder Programmebenen L0, L1, L2 und L3 programmiert werden, was zwei logische Informationsbits pro Zelle ergibt: das höchstwertige Bit (MSB) und das niedrigstwertige Bit (LSB). Wenn Speicherzellen gelesen oder programmiert werden, können diese zwei Bits entsprechende MSB- und LSB-Seiten einer Wordline in einem Speicherblock bilden. Die Programmebenen L0 und L1 können einem logischen LSB-Bitwert von „eins“ entsprechen, und die Programmebenen L2 und L3 können einem logischen LSB-Bitwert von „null“ entsprechen. Obwohl in 2 nicht angegeben, können die Programmebenen L0 und L3 einem logischen MSB-Bitwert von „eins“ entsprechen, und die Programmebenen L1 und L2 können einem logischen MSB-Bitwert von „null“ entsprechen.
-
Um Rohdaten aus den Speicherzellen auszulesen, wird eine Lesepegelspannung an die Speicherzellen angelegt und Speicherzellen mit einer Schwellenspannung (Vt) auf oder unter der angelegten Lesepegelspannung, die sich daher aktivieren oder leiten, werden als Bestandteil einer Programmverteilung unter der Lesepegelspannung betrachtet; und solche Speicherzellen mit einer Schwellenspannung über der Lesepegelspannung, die sich daher nicht aktivieren oder leiten, werden als in einer Programmverteilung über der Lesepegelspannung befindlich betrachtet. Zum Beispiel zeigt 2 eine Lesepegelspannung C, die an eine Gruppe von Speicherzellen angelegt werden kann, um zu bestimmen, welche Zellen entweder auf der L0- oder L1- Programmebene entsprechend einem logischen LSB-Bitwert von „eins“ oder der L2- oder L3- Programmebene entsprechend einem logischen LSB-Bitwert von „null“ programmiert sind.
-
Wenn der Flash-Speicher zyklisch geschaltet (d. h. wiederholt programmiert und gelöscht) wird, ändern sich seine physischen Qualitäten. Beispielsweise kann das wiederholte Platzieren und Entfernen von Elektronen auf dem Floating-Gate während Programmierungs- bzw. Löschvorgängen bewirken, dass einige Elektronen in dem Floating-Gate der Vorrichtung eingefangen werden. Die Schwellenspannungen dieser Speicherzellen können schließlich Werte annehmen, die anders (höher oder niedriger) als erwartete Werte sind, was bewirkt, dass sich die Zellprogrammierungsverteilungen letztendlich zu überlappen beginnen und beim Lesen der Daten Lesefehler verursachen.
-
Um eine Wahrscheinlichkeit zu bestimmen, dass die Speicherzellen tatsächlich auf die beobachteten mutmaßlichen Programmebenen programmiert wurden (d. h. Rohdaten lesen), können mehrere Leseoperationen als Teil einer mehrstufigen Decodierungsoperation eingeleitet werden. Beispielsweise können die Speicherzellen auf einer ersten Stufe mit der Lesepegelspannung C, auf einer zweiten Stufe mit der Lesepegelspannung LL, auf einer dritten Stufe mit dem Lesepegel RR usw. gelesen werden. Die Sequenz von Lesepegelspannungen richtet mehrere Programmbereiche ein, die verwendet werden können, um die aus den Speicherzellen ausgelesenen Rohdatenwerte für weiche Decodierung zu kategorisieren, sofern das harte Decodieren der Rohdaten fehlschlägt.
-
Auf einer ersten Stufe der mehrstufigen Decodierungsoperation können zwei Programmbereiche definiert werden. Ein erster Programmbereich enthält Zellen mit einem programmierten Wert auf oder unter der Lesepegelspannung C und ein zweiter Programmbereich enthält Zellen mit einem programmierten Wert über der Lesepegelspannung C. Auf der zweiten Stufe der mehrstufigen Decodierungsoperation können drei Programmbereiche definiert werden, indem die Rohdaten, die unter Verwendung der Lesepegelspannung C gelesen werden, mit Rohdaten aggregiert werden, die unter Verwendung der Lesepegelspannung LL gelesen werden. Insbesondere kann ein erster Programmbereich Zellen mit einem programmierten Wert auf oder unter der Lesepegelspannung LL einschließen, ein zweiter Programmbereich kann Zellen mit einem programmierten Wert über der Lesepegelspannung LL und auf oder unter der Lesepegelspannung C einschließen, und ein dritter Programmbereich kann Zellen mit einem programmierten Wert über der Lesepegelspannung C einschließen. Jede nachfolgende Stufe in der mehrstufigen Decodierungsoperation aggregiert Rohdaten, die unter Verwendung der Lesepegelspannung entsprechend der Stufe gelesen werden, wobei die in den vorhergehenden Stufen zum Definieren von zusätzlichen Programmbereichen gelesenen Rohdaten den Bereichen von Programmwerten zwischen den verschiedenen Lesepegelspannungen entsprechen. Die vorliegende Technologie ist nicht auf die Anzahl der in 2 dargestellten Lesepegelspannungen oder auf die in 2 angegebene Lesereihenfolge zum Anlegen der Lesepegelspannungen auf die jeweiligen Stufen der mehrstufigen Decodierungsoperation beschränkt. Außerdem können ähnliche Sequenzen von Lesepegelspannungen zum Lesen der MSB-Bitwerte in den Bereichen zwischen den L0- und L1-Programmebenen und zwischen den L2- und L3-Programmebenen verwendet werden.
-
Nach Aspekten der vorliegenden Technologie können Konfidenzwerte den jeweiligen Programmbereichen oder „Bins“ zur Verwendung in weichen Decodierungsoperationen zugewiesen werden. Konfidenzwerte können Log-Likelihood-Verhältnisse (LLRs) beinhalten. In Anwendungen von Paritätsprüfungen niedriger Dichte (LDPC) kann ein binäres LLR den Logarithmus eines Verhältnisses zwischen der Wahrscheinlichkeit, dass ein Bit „0“ oder „1“ ist, einschließen. Ein positives LLR kann anzeigen, dass ein von der Speicherzelle gelesenes Signal wahrscheinlich ein 0-Bit sein kann, und ein negatives LLR kann anzeigen, dass das von der Speicherzelle gelesene Signal wahrscheinlich ein 1-Bit sein kann. In einigen Beispielen kann es wahrscheinlicher sein, dass ein Bitwert mit einem zugewiesenen LLR gleich fünf ein erster vorbestimmter Wert (z. B. binär „0“) ist als ein Bitwert, der ein zugewiesenes LLR gleich einem zweiten vorbestimmten Wert (z. B. binär „1“) ist. Ein Bitwert mit einem zugewiesenen LLR gleich Null kann mit gleicher Wahrscheinlichkeit einer von beiden vorbestimmten Werten sein. Ein LLR kann auch durch einen nicht binären Konfidenzvektor mit einer Gruppe von Komponentenwerten dargestellt werden.
-
Wie vorstehend vorgestellt, definiert jede Stufe des mehrstufigen Decodierprozesses einen Satz von Programmbereichen oder Bins. Jeder Satz von Programmbereichen oder Bins weist einen Satz von Konfidenzwerten (z. B. LLR-Werte) auf, die den jeweiligen Programmbereichen oder Bins des Satzes entsprechen. Diese Konfidenzwerte können als Decodierinformationen bezeichnet werden und können in jeweiligen Tabellen oder anderen Datenstrukturen gespeichert werden, die abgerufen werden, wenn weiche Decodierungsoperationen auf jeder der Stufen durchgeführt werden.
-
Nach verschiedenen Implementierungen kann die LDPC-Engine 104 bei Durchführung von Decodierungsoperationen unterschiedliche Sätze von Decodierinformationen und unterschiedliche Anordnungen der Sätze von Decodierinformationen für jede Decodierstufe verwenden. Weiterhin können unterschiedliche Sätze von Decodierinformationen basierend auf dem Alter eines jeweiligen Blocks (der jeweiligen Blöcke) der Speichervorrichtung verwendet werden. Zum Beispiel kann das Alter eines Blocks (von Blöcken) auf einer Anzahl von Programmier-/Löschzyklen in Verbindung mit dem Block basieren, und es kann eine andere Gruppe von Sätzen zum Decodieren von Informationen für jeden vorbestimmten Bereich der Programmier-/Löschzyklen (und/oder jedem gelesenen Pegel) geben. Nach Aspekten der vorliegenden Technologie kann jede Stufe der Decodierung mehrere Sätze von Decodierinformationen (z. B. drei) verwenden, wobei separate Soft-Decodierungsoperationen unter Verwendung entsprechender Sätze von Decodierinformationen durchgeführt werden.
-
3 zeigt ein Flussdiagramm einer mehrstufigen Decodierungsoperation nach Aspekten der vorliegenden Technologie. Die mehrstufige Decodierungsoperation kann als Reaktion auf einen Lesebefehl, der von dem Host-System 110 empfangen wird, oder als Reaktion auf eine interne Datenverwaltungsoperation, die durch die Steuerung 102 ausgeführt wird, initiiert werden. Beim Einleiten der mehrstufigen Decodierungsoperation wird eine Lesepegelspannung für die Flash-Speichervorrichtung 118, aus der angeforderte Daten auszulesen sind, nach einer Sequenz von Lesepegelspannungen eingestellt (Block 300). Anfangs kann die Lesepegelspannung auf die Lesepegelspannung C eingestellt werden. Die Lesepegelspannung kann durch Programmieren eines Registers in der Flash-Speichervorrichtung mit einem Wert entsprechend der Lesepegelspannung C eingestellt werden.
-
Nach Einstellen des Lesepegelspannungswerts werden Rohdaten aus einer Gruppe von Speicherzellen unter Verwendung der eingestellten Lesepegelspannung gelesen und die Rohdaten werden an einen harten Decodierer in der LDPC-Engine 104 weitergeleitet, um eine harte Decodierungsoperation an den Rohdaten auszuführen (Block 305). Wenn die harte Decodierungsoperation die Rohdaten erfolgreich decodiert hat (Block 310), werden die decodierten Daten an den anfordernden Prozess zurückgegeben (Block 315). Wenn die harte Decodierungsoperation nicht erfolgreich ist, werden weiche Decodierinformationen ausgewählt (Block 320) und die Rohdaten werden zusammen mit den weichen Decodierinformationen an einen Soft-Decision-Decodierer in der LDPC-Engine 104 weitergegeben, um unter Verwendung der Rohdaten und der ausgewählten Soft-Decodierinformationen eine weiche Decodierungsoperation auszuführen (Block 325).
-
Wenn die weiche Decodierungsoperation die Rohdaten erfolgreich decodiert hat (Block 330), werden die decodierten Daten an den anfordernden Prozess zurückgegeben (Block 315). Wenn die weiche Decodierungsoperation nicht erfolgreich ist, bestimmt der Prozess, ob ein weiterer weicher Schritt oder eine weiche Decodierungsoperation auf der aktuellen Stufe der mehrstufigen Decodierungsoperation verbleibt (Block 335). Nach Aspekten der vorliegenden Technologie kann jede Stufe der mehrstufigen Decodierungsoperation eine harte Decodierungsoperation und bis zu mehrere weiche Decodierungsoperationen beinhalten. Jede der weichen Decodierungsoperationen verwendet einen entsprechenden Satz von weichen Decodierinformationen, die der aktuellen Stufe entsprechen. Jeder Satz von weichen Decodierinformationen kann unter Verwendung von Test- oder Simulationsdaten basierend auf unterschiedlichen Bedingungen und Annahmen bestimmt oder berechnet werden. Wenn die weiche Decodierung unter Verwendung eines ersten Satzes von weichen Decodierinformationen nicht erfolgreich ist, kann die weiche Decodierungsoperation unter Verwendung derselben Rohdaten, jedoch mit einem zweiten ausgewählten Satz von weichen Decodierinformationen wiederholt werden (Block 320). Dieser Regelkreis von weichen Decodierungsoperationen kann wiederholt werden, bis entweder die Rohdaten erfolgreich decodiert sind oder alle Sätze von weichen Decodierinformationen, die der aktuellen Stufe zugeordnet sind, in weichen Decodierversuchen verwendet worden sind. Nach Aspekten der vorliegenden Technologie kann jede Stufe drei Sätze von weichen Decodierinformationen haben, mit denen eine weiche Decodierung von Rohdaten versucht wird. Jedoch kann die vorliegende Technologie unter Verwendung von mehr oder weniger als drei Sätzen von weichen Decodierinformationen für jede Stufe implementiert werden.
-
Wenn keine weichen Schritte oder weichen Decodierungsoperationen für die aktuelle Stufe verbleiben (Block 335), bestimmt die Operation, ob in der mehrstufigen Decodierungsoperation eine weitere Stufe verbleibt (Block 340). Die mehrstufige Decodierungsoperation kann bis zu sieben Stufen einschließen, entsprechend der Sequenz von sieben Lesepegelspannungen, die beispielsweise in 2 dargestellt sind. Wenn eine weitere Stufe in der Operation verbleibt, wird die nächste Lesepegelspannung in der Sequenz eingestellt (Block 300) und die vorstehend beschriebenen Stufenoperationen wiederholen sich. Dieser Regelkreis von harten und weichen Decodierungsoperationen wiederholt sich, bis entweder die Rohdaten erfolgreich decodiert und zum anfordernden Prozess zurückgegeben sind (Block 315) oder alle harten und weichen Decodierungsoperationen auf jeder der Stufen nicht erfolgreich sind. Wenn die Decodierung nicht erfolgreich ist, wird ein Lesefehler an den anfordernden Prozess zurückgegeben (Block 345).
-
4 zeigt ein Flussdiagramm einer dynamischen Anpassung einer mehrstufigen Decodierungsoperation nach Aspekten der vorliegenden Technologie. Analog zu dem vorstehend mit Bezug auf 3 beschriebenen Prozess kann die in 4 dargestellte Operation als Reaktion auf einen Lesebefehl, der von dem Host-System 110 empfangen wird, oder als Reaktion auf eine interne Datenverwaltungsoperation, die durch die Steuerung 102 ausgeführt wird, initiiert werden.
-
Nach Aspekten der vorliegenden Technologie wird eine Sequenz von Lesepegelspannungen basierend auf früheren Decodierdaten bestimmt (Block 400). Die früheren Decodierdaten enthalten Informationen darüber, welche Stufen und entsprechende Lesepegelspannungen beim Decodieren der Rohdaten erfolgreich waren, die von der Flash-Speichervorrichtung 118 während früherer Decodierungsoperationen gelesen wurden. Die früheren Decodierdaten können ein Array von Zählern entsprechend den Lesepegelspannungen aufweisen, wobei jeder Zähler einen Zählerwert enthält, der eine Anzahl von Decodierungsoperationen angibt, die unter Verwendung der jeweiligen Lesepegelspannung erfolgreich durchgeführt wurden. Zum Beispiel kann das Array von Zählern sieben Zähler aufweisen, die den sieben Lesepegelspannungen entsprechen, die in 2 dargestellt sind (z. B. C, LL, RR, L, R, LLL, RRR). Die in 2 angegebene Lesereihenfolge stellt eine Standardsequenz von Lesepegelspannungen dar, die zu Beginn der Lebensdauer für die DatenSpeichervorrichtung 100 oder einige andere Stufen der Initialisierung verwendet werden.
-
Um die Sequenz von Lesepegelspannungen zu bestimmen, kann die Steuerung 102 das Array von Zählern entsprechend den Zählerwerten in dem Array vom größten Wert zum kleinsten Wert sortieren oder ordnen. Das sortierte Array von Zählern gibt eine Reihenfolge der Lesepegelspannungen an, entsprechend der Lesepegelspannungen bei Decodierungsoperationen erfolgreicher waren. Zum Beispiel kann die Lesepegelspannung L den höchsten entsprechenden Zählerwert haben, gefolgt von Lesepegelspannungen RR, C , LL, R, LLL und RRR Dementsprechend wäre die bestimmte Sequenz von Lesepegelspannungen L, RR, C, LL, R, LLL und RRR, die anschließend in der mehrstufigen Decodierungsoperation angewendet wird, die vorstehend mit Bezug auf 2 beschrieben ist (Block 405). Beim Sortieren des Zählerarrays können Zähler, die den gleichen Zählerwert enthalten, in derselben Reihenfolge relativ zueinander verbleiben wie in der Standardsequenz von Lesepegelspannungen.
-
Nach Abschluss der mehrstufigen Decodierungsoperation werden die früheren Decodierdaten aktualisiert, um die Lesepegelspannung der Decodierstufe widerzuspiegeln, die die Rohdaten erfolgreich decodiert hat (Block 410). Beispielsweise wird der Zähler in dem Zählerfeld, der der auf der erfolgreichen Decodierstufe verwendeten Lesepegelspannung entspricht, um eins erhöht.
-
Das Sortieren oder Ordnen des Zählerarrays und das Bestimmen der Folge von Lesepegelspannungen basierend auf dem geordneten Zählerarray als Reaktion auf jeden Lesebefehl oder jede Verwaltungsoperation, die das Lesen von Daten beinhaltet, kann eine große Verarbeitungsbelastung für die Steuerung 102 darstellen und die Leistung der DatenSpeichervorrichtung 100 minimal beeinflussen. Nach Aspekten der vorliegenden Technologie kann das Bestimmen der Sequenz von Lesepegelspannungen nach Abschluss einer vorbestimmten Anzahl von Leseoperationen seit Durchführung der letzten Bestimmung durchgeführt werden. Zum Beispiel kann die Sequenz bestimmt werden, nachdem jeweils 256 Leseoperationen abgeschlossen sind (Block 415). Wenn die Anzahl von Leseoperationen seit dem letzten Bestimmen der Sequenz den Lese-Zählschwellenwert von 256 nicht erfüllt, wird die Mehrzustands-Decodierungsoperation unter Verwendung der zuletzt bestimmten Sequenz von Lesepegelspannungen durchgeführt (Block 415). Aufgrund der Verwendung von 256 Leseoperationen als Lese-Zählschwellenwert zum Bestimmen, wann die Bestimmung durchzuführen ist, kann das Zählerarray ein Datenbyte für jedes Element des Arrays aufweisen. Die vorliegende Technologie ist nicht auf diese Anzahl von Leseoperationen als Lese-Zählschwellenwert beschränkt und kann unter Verwendung anderer Zahlen implementiert werden, die ausgewählt oder programmiert werden können, um die Prozessorbelastung für diese Hintergrundoperation mit Prozessorbelastungen für andere Operationen, die durch die Steuerung 102 ausgeführt werden, auszugleichen.
-
Ein Zählerarray kann für das Flash-Speichervorrichtungs-Array 108 beibehalten werden. Alternativ kann ein Zählerarray für jeweilige Blöcke, Gruppen von Blöcken, Module, Gruppen von Modulen oder einzelne Flash-Speichervorrichtungen 118 beibehalten werden. Das Beibehalten getrennter Zählerarrays und das Bestimmen von Sequenzen von Lesepegelspannungen für die entsprechenden Blöcke, Gruppen von Blöcken, Module, Gruppen von Modulen, Flash-Speichervorrichtungen 118 usw. ermöglicht, dass sich die Sequenzen von Lesepegelspannungen besser an den Merkmalen und Bedingungen jedes Blocks, jeder Gruppe von Blöcken, jedes Moduls, jeder Gruppe von Modulen oder jeder Flash-Speichervorrichtung 118 ausrichten.
-
In den vorstehend behandelten Beispielen kann die bestimmte Sequenz von Lesepegelspannungen eine beliebige Reihenfolge der Lesepegelspannungen abhängig von den früheren Decodierdaten enthalten, die zum Bestimmen der Sequenz verwendet wurden. Die vorliegende Technologie ist nicht auf diese Konfiguration beschränkt. Nach anderen Aspekten der vorliegenden Technologie können die möglichen Folgen von Lesepegelspannungen auf verschiedene Reihenfolgen von Gruppen von Lesepegelspannungen oder vorbestimmten Sequenzen beschränkt werden, anstatt auf unterschiedliche Reihenfolgen der einzelnen Lesepegelspannungen. Zum Beispiel kann das Zählerarray zwei Zähler beinhalten: einen entsprechend der Gruppe von Lesepegelspannungen R, RR und RRR und einen zweiten entsprechend der Gruppe von Lesepegelspannungen L, LL und LLL. Mit dieser Konfiguration kann die bestimmte Sequenz von Lesepegelspannungen für die Mehrzustands-Decodierungsoperation zwischen den Lesepegelspannungen R-, RR- und RRR, die zuerst in der Sequenz verwendet werden, oder den Lesepegelspannungen L-, LL- und LLL, die zuerst basierend auf den Zählerwerten in den früheren Decodierdaten verwendet werden, umschalten. Andere Gruppierungen und Reihenfolgen innerhalb der Gruppierungen werden in der vorliegenden Technologie in Betracht gezogen.
-
Nach Aspekten der vorliegenden Technologie kann die mehrstufige Decodierungsoperation, die in 3 dargestellt ist, unter Verwendung der bestimmten Sequenz von Lesepegelspannungen ausgeführt werden. Jedoch kann die mehrstufige Decodierungsoperation auf andere Weisen entsprechend der bestimmten Sequenz von Lesepegelspannungen modifiziert werden. Beispielsweise können nur die harten Decodierungsoperationen unter Verwendung der bestimmten Sequenz von Lesepegelspannungen durchgeführt werden, während die weichen Decodierungsoperationen in der Standardreihenfolge ausgeführt werden können. Diese Konfiguration reduziert die Anzahl von Sätzen von Decodierinformationen, die für die Soft Decodierungsoperationen aufrecht erhalten und gespeichert werden. Die vor jeder der harten Decodierungsoperationen gelesenen Rohdaten können zur Verwendung in den späteren weichen Decodierungsoperationen gepuffert werden, um zu vermeiden, dass Daten unter Verwendung einer Lesepegelspannung, die bereits in der Operation verwendet wird, erneut gelesen werden müssen. Zum Beispiel können unter Verwendung der Sequenz L, RR, C, LL, R, LLL und RRR harte Decodierungsoperationen an gelesenen Rohdaten unter Verwendung der Lesespannungspegel L und RR durchgeführt werden, bevor zur Mehrzustands-Operation mit sowohl harten als auch weichen Decodierungsoperationen unter Verwendung der Standardsequenz C, LL, RR, L, R, LLL und RRR übergegangen wird, wenn keine der anfänglichen harten Decodierungsoperationen beim Decodieren der Rohdaten nicht erfolgreich ist. Wenn die mehrstufige Decodierungsoperation eine Stufe erreicht, die einer der frühen harten Decodierungsoperationen (z. B. L und RR) entspricht, würde die Operation direkt zum Regelkreis der weichen Decodierungsoperation übergehen, da zuvor die harte Decodierung unter Verwendung von Rohdaten, die auf den Lesepegeln L und RR gelesen wurden, versucht wurde. Die Rohdaten, die aus der früheren harten Decodierungsoperation gepuffert wurden, können für die weichen Decodierungsoperationen auf diesen Stufen verwendet werden, ohne dass die Rohdaten erneut gelesen zu werden brauchen.
-
Die vorstehende dynamische Anpassung der Sequenz von Lesepegelspannungen bewirkt die automatische Anpassung der Sequenz, wenn die Flash-Speichervorrichtungen altern und/oder sich die Betriebsbedingungen ändern. Das Anpassen der Sequenz von Lesepegelspannungen verringert potentiell die Anzahl von Stufen der mehrstufigen Decodierungsoperation, die vor dem erfolgreichen Decodieren von Rohdaten, die aus den Flash-Speichervorrichtungen gelesen werden, durchgeführt werden muss.
-
Nach Aspekten der vorliegenden Technologie wird ein maschinenimplementiertes Verfahren bereitgestellt, das das Bestimmen einer Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten und das Ausführen einer mehrstufigen Decodierungsoperation zum Decodieren von Rohdaten beinhaltet, die aus der Mehrzahl von Speicherzellen unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen gelesen werden. Das Verfahren weist weiterhin das Zurückgeben decodierter Daten aus der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation und das Aktualisieren der früheren Decodierdaten basierend auf Ergebnissen der mehrstufigen Decodierungsoperation auf.
-
Jede Stufe der mehrstufigen Decodierungsoperation kann das Ausführen einer oder mehrerer Decodierungsoperationen zum Decodieren von Rohdaten beinhalten, die aus der Mehrzahl von Speicherzellen unter Verwendung einer jeweiligen Lesepegelspannung aus der Sequenz der Mehrzahl von Lesepegelspannungen, die der Stufe entsprechen, gelesen werden. Die Stufen der mehrstufigen Decodierungsoperation können sequenziell ausgeführt werden, bis eine der einen oder mehreren Decodierungsoperationen auf einer der Stufen die aus der Mehrzahl von Speicherzellen gelesenen Rohdaten erfolgreich decodiert.
-
Das Aktualisieren der früheren Decodierdaten kann das Inkrementieren eines Zählerwerts beinhalten, der einer Lesepegelspannung der Mehrzahl von Lesepegelspannungen entspricht, die verwendet werden, um die erfolgreich decodierten Rohdaten zu lesen. Die Sequenz der Mehrzahl von Lesepegelspannungen kann basierend auf dem Zählerwert bestimmt werden. Die früheren Decodierdaten können Zählerwerte einer Mehrzahl jeweiliger Zähler enthalten, die der Mehrzahl von Lesepegelspannungen entsprechen. Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Anordnen der Mehrzahl von Lesepegelspannungen entsprechend den Zählerwerten der jeweiligen Zähler beinhalten.
-
Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Auswählen der Sequenz aus einer Mehrzahl vorbestimmter Sequenzen beinhalten. Die Sequenz der Mehrzahl von Lesepegelspannungen kann nach Abschluss einer Mehrzahl von Leseanforderungen seit dem letzten Bestimmen der Sequenz bestimmt werden. Die Mehrzahl von Speicherzellen sind Teil eines Blocks einer Mehrzahl von Blöcken auf einem Modul, und jeweilige frühere Decodierdaten können für den Block, eine Gruppe von Blöcken, die den Block aufweisen, oder das Modul beibehalten werden.
-
Nach Aspekten der vorliegenden Technologie wird ein Datenspeichersystem bereitgestellt, das eine nichtflüchtiges Speichervorrichtung und eine Steuerung beinhaltet. Die Steuerung kann eingerichtet sein, um eine Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten zu bestimmen und eine mehrstufige Decodierungsoperation auszuführen, um Rohdaten, die aus der Mehrzahl von Speicherzellen gelesen werden, unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen zu decodieren. Jede Stufe der mehrstufigen Decodierungsoperation kann das Ausführen einer oder mehrerer Decodierungsoperationen zum Decodieren von Rohdaten beinhalten, die aus der Mehrzahl von Speicherzellen unter Verwendung einer jeweiligen Lesepegelspannung aus der Sequenz der Mehrzahl von Lesepegelspannungen, die der Stufe entsprechen, gelesen werden. Die Stufen der mehrstufigen Decodierungsoperation können sequenziell ausgeführt werden, bis eine der einen oder mehreren Decodierungsoperationen auf einer der Stufen die aus der Mehrzahl von Speicherzellen gelesenen Rohdaten erfolgreich decodiert. Die Steuerung kann weiterhin eingerichtet sein, um decodierte Daten von der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation zurückzugeben und die früheren Decodierdaten basierend auf Ergebnissen der mehrstufigen Decodierungsoperation zu aktualisieren.
-
Das Aktualisieren der früheren Decodierdaten kann das Inkrementieren eines Zählerwerts beinhalten, der einer Lesepegelspannung der Mehrzahl von Lesepegelspannungen entspricht, die verwendet werden, um die erfolgreich decodierten Rohdaten zu lesen. Die Sequenz der Mehrzahl von Lesepegelspannungen kann basierend auf dem Zählerwert bestimmt werden. Die früheren Decodierdaten können Zählerwerte einer Mehrzahl jeweiliger Zähler enthalten, die der Mehrzahl von Lesepegelspannungen entsprechen. Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Anordnen der Mehrzahl von Lesepegelspannungen entsprechend den Zählerwerten der jeweiligen Zähler beinhalten.
-
Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Auswählen der Sequenz aus einer Mehrzahl vorbestimmter Sequenzen beinhalten. Die Sequenz der Mehrzahl von Lesepegelspannungen kann nach Abschluss einer Mehrzahl von Leseanforderungen seit dem letzten Bestimmen der Sequenz bestimmt werden.
-
Die Mehrzahl von Speicherzellen kann Teil eines Blocks einer Mehrzahl von Blöcken auf einem Modul sein. Es können entsprechende frühere Decodierdaten für den Block, eine Gruppe von Blöcken, die den Block aufweisen, oder das Modul beibehalten werden.
-
Nach Aspekten der vorliegenden Technologie wird ein prozessorlesbares Medium bereitgestellt, das mit ausführbaren Anweisungen codiert ist, die, wenn sie von einem Prozessor ausgeführt werden, ein Verfahren durchführen. Das Verfahren beinhaltet das Bestimmen einer Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf früheren Decodierdaten und das Ausführen einer mehrstufigen Decodierungsoperation zum Decodieren von Rohdaten, die aus der Mehrzahl von Speicherzellen unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen gelesen werden. Das Verfahren beinhaltet weiterhin das Zurückgeben decodierter Daten aus der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation und das Aktualisieren der früheren Decodierdaten basierend auf Ergebnissen der mehrstufigen Decodierungsoperation durch Erhöhen eines Zählerwerts entsprechend einer Lesepegelspannung der Mehrzahl von Lesepegelspannungen, die zum Lesen der erfolgreich decodierten Rohdaten verwendet werden, wobei die Sequenz der Mehrzahl von Lesepegelspannungen basierend auf dem Zählerwert bestimmt wird.
-
Jede Stufe der mehrstufigen Decodierungsoperation kann das Ausführen einer oder mehrerer Decodierungsoperationen zum Decodieren von Rohdaten beinhalten, die aus der Mehrzahl von Speicherzellen unter Verwendung einer jeweiligen Lesepegelspannung aus der Sequenz der Mehrzahl von Lesepegelspannungen, die der Stufe entsprechen, gelesen werden. Die Stufen der mehrstufigen Decodierungsoperation können sequenziell ausgeführt werden, bis eine der einen oder mehreren Decodierungsoperationen auf einer der Stufen die aus der Mehrzahl von Speicherzellen gelesenen Rohdaten erfolgreich decodiert.
-
Die früheren Decodierdaten können Zählerwerte einer Mehrzahl jeweiliger Zähler enthalten, die der Mehrzahl von Lesepegelspannungen entsprechen. Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Anordnen der Mehrzahl von Lesepegelspannungen entsprechend den Zählerwerten der jeweiligen Zähler beinhalten. Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Auswählen der Sequenz aus einer Mehrzahl vorbestimmter Sequenzen beinhalten. Die Sequenz der Mehrzahl von Lesepegelspannungen kann nach Abschluss einer Mehrzahl von Leseanforderungen seit dem letzten Bestimmen der Sequenz bestimmt werden.
-
Die Mehrzahl von Speicherzellen kann Teil eines Blocks einer Mehrzahl von Blöcken auf einem Modul sein. Es können entsprechende frühere Decodierdaten für den Block, eine Gruppe von Blöcken, die den Block aufweisen, oder das Modul beibehalten werden.
-
Nach Aspekten der vorliegenden Technologie wird ein Datenspeichersystem bereitgestellt, das einen nichtflüchtigen Speicher, Mittel zum Bestimmen einer Sequenz einer Mehrzahl von Lesepegelspannungen basierend auf vorherigen Decodierungsdaten und Mittel für das Ausführen einer mehrstufigen Decodierungsoperation zum Decodieren von Rohdaten beinhaltet, die aus der Mehrzahl von Speicherzellen unter Verwendung der bestimmten Sequenz der Mehrzahl von Lesepegelspannungen gelesen werden. Das Datenspeichersystem enthält weiterhin Mittel zum Zurückgeben decodierter Daten aus der mehrstufigen Decodierungsoperation nach Abschluss der mehrstufigen Decodierungsoperation und Mittel zum Aktualisieren der früheren Decodierdaten basierend auf Ergebnissen der mehrstufigen Decodierungsoperation.
-
Jede Stufe der mehrstufigen Decodierungsoperation kann das Ausführen einer oder mehrerer Decodierungsoperationen zum Decodieren von Rohdaten beinhalten, die aus der Mehrzahl von Speicherzellen unter Verwendung einer jeweiligen Lesepegelspannung aus der Sequenz der Mehrzahl von Lesepegelspannungen, die der Stufe entsprechen, gelesen werden. Die Stufen der mehrstufigen Decodierungsoperation können sequenziell ausgeführt werden, bis eine der einen oder mehreren Decodierungsoperationen auf einer der Stufen die aus der Mehrzahl von Speicherzellen gelesenen Rohdaten erfolgreich decodiert.
-
Das Aktualisieren der früheren Decodierdaten kann das Inkrementieren eines Zählerwerts beinhalten, der einer Lesepegelspannung der Mehrzahl von Lesepegelspannungen entspricht, die verwendet werden, um die erfolgreich decodierten Rohdaten zu lesen. Die Sequenz der Mehrzahl von Lesepegelspannungen kann basierend auf dem Zählerwert bestimmt werden. Die früheren Decodierdaten können Zählerwerte einer Mehrzahl jeweiliger Zähler enthalten, die der Mehrzahl von Lesepegelspannungen entsprechen. Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Anordnen der Mehrzahl von Lesepegelspannungen entsprechend den Zählerwerten der jeweiligen Zähler beinhalten. Das Bestimmen der Sequenz der Mehrzahl von Lesepegelspannungen kann das Auswählen der Sequenz aus einer Mehrzahl vorbestimmter Sequenzen beinhalten.
-
Viele der vorstehend beschriebenen Funktionen und Anwendungen können als Software- oder Firmwareprozesse implementiert sein, die als ein Satz von Anweisungen spezifiziert sind, die auf einem computerlesbaren Speichermedium aufgezeichnet sind (auch als computerlesbares Medium bezeichnet). Wenn diese Anweisungen von einer oder mehreren Verarbeitungseinheit(en) (z. B. einem oder mehreren Prozessoren, Prozessorkernen oder anderen Verarbeitungseinheiten) ausgeführt werden, veranlassen sie die Verarbeitungseinheit(en) zum Durchführen der in den Anweisungen angegebenen Aktionen. Beispiele computerlesbarer Medien beinhalten, ohne darauf beschränkt zu sein, CD-ROMs, Flash-Laufwerke, RAM-Chips, Festplatten, EPROMs, usw. Die computerlesbaren Medien beinhalten keine Trägerwellen und elektronischen Signale, die per Funk oder über leitungsgebundene Verbindungen übermittelt werden.
-
Der Begriff „Software“ soll gegebenenfalls Firmware einschließen, die sich im Nur-Lese-Speicher oder anderen Speicherformen befindet, die zur Verarbeitung durch einen Prozessor in den Speicher gelesen werden können. Auch können in einigen Implementierungen mehrere Softwareaspekte der vorliegenden Offenbarung als Unterteile eines größeren Programms implementiert werden, während die übrigen individuellen Softwareaspekte der vorliegenden Offenbarung beibehalten werden. In einigen Implementierungen können auch mehrere Software Aspekte als separate Programme implementiert werden. Schließlich liegt jede beliebige Kombination von separaten Programmen, die zusammen einen hier beschriebenen Softwareaspekt implementieren, innerhalb des Umfangs der vorliegenden Offenbarung. Bei einigen Implementierungen definieren die Softwareprogramme, wenn sie installiert sind, um auf einem oder mehreren elektronischen Systemen zu arbeiten, eine oder mehrere spezifische Maschinenimplementierungen, die die Operationen der Softwareprogramme ausführen und durchführen.
-
Ein Computerprogramm (auch als Programm, Software, Softwareanwendung, Skript oder Code bekannt) kann in jeder Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder prozeduraler Sprachen, und kann in jeder Form eingesetzt werden, einschließlich als ein eigenständiges Programm oder als Modul, Komponente, Subroutine, Objekt oder eine andere Einheit, die zur Verwendung in einer Computerumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Abschnitt einer Datei gespeichert sein, der andere Programme oder Daten (z. B. ein oder mehrere Skripte, die in einem Markup Language Dokument gespeichert sind) in einer einzelnen Datei, die dem betreffenden Programm zugeordnet ist, oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Codeanteile speichern) enthält. Ein Computerprogramm kann eingesetzt werden, um auf einem Computer oder auf mehreren Computern ausgeführt zu werden, die sich an einem Standort befinden oder über mehrere Standorte verteilt und durch ein Kommunikationsnetzwerk miteinander verbunden sind.
-
Es versteht sich, dass veranschaulichende Blöcke, Module, Elemente, Komponenten, Verfahren und Algorithmen, die in diesem Dokument beschrieben werden, als elektronische Hardware, Computersoftware oder Kombinationen von beiden implementiert sein können. Um diese Austauschbarkeit von Hardware und Software zu veranschaulichen, wurden verschiedene veranschaulichende Blöcke, Module, Elemente, Komponenten, Verfahren und Algorithmen vorstehend allgemein hinsichtlich ihrer Funktionalität beschrieben. Ob eine derartige Funktionalität als Hardware oder Software implementiert ist, hängt von der spezifischen Anwendung und Designeinschränkungen ab, denen das Gesamtsystem unterliegt. Fachleute können die beschriebene Funktionalität auf verschiedene Arten für jede bestimmte Anwendung implementieren. Verschiedene Komponenten und Blöcke können anders angeordnet sein (z. B. in einer anderen Reihenfolge angeordnet oder auf eine andere Weise partitioniert sein), ohne vom Umfang der vorliegenden Offenbarung abzuweichen.
-
Es versteht sich, dass die spezifische Reihenfolge oder Hierarchie von Schritten in den offenbarten Prozessen als eine Veranschaulichung einiger beispielhafter Ansätze dargestellt wird. Basierend auf Designpräferenzen und/oder anderen Überlegungen versteht es sich, dass die spezifische Reihenfolge oder Hierarchie von Schritten in den Prozessen anders angeordnet werden kann. Zum Beispiel können in einigen Implementierungen einige der Schritte gleichzeitig ausgeführt werden. Somit stellen die beigefügten Verfahrensansprüche Elemente der verschiedenen Schritte in einer beispielhaften Reihenfolge dar und sollen nicht auf die spezielle dargestellte Reihenfolge oder Hierarchie beschränkt sein.
-
Die vorhergehende Beschreibung wird bereitgestellt, um es einem Fachmann zu ermöglichen, die verschiedenen hierin beschriebenen Aspekte in der Praxis umzusetzen. Die vorhergehende Beschreibung stellt verschiedene Beispiele der vorliegenden Offenbarung bereit, und die vorliegende Offenbarung ist nicht auf diese Beispiele beschränkt. Verschiedene Modifikationen dieser Aspekte werden dem Fachmann leicht ersichtlich sein, und die hierin definierten generischen Prinzipien können auf andere Aspekte angewendet werden. Daher sollen die Ansprüche nicht auf die hier gezeigten Aspekte beschränkt sein, sondern sollen den vollen Schutzumfang erhalten, der mit den in Sprachform niedergelegten Ansprüchen konsistent ist, wobei die Bezugnahme auf ein Element im Singular nicht „ein und nur ein“ Element bedeuten soll, sofern dies nicht speziell angegeben ist, sondern „ein oder mehrere“. Sofern nicht spezifisch anders angegeben, bezieht sich der Ausdruck „einige“ auf ein(en) oder mehrere. Pronomen im grammatikalischen Maskulin (z. B. sein) schließen das grammatikalische Feminin und Neutrum (z. B. ihr und sein) ein, und umgekehrt. Überschriften und Untertitel, falls vorhanden, werden nur der Einfachheit halber verwendet und schränken die vorliegende Offenbarung nicht ein.
-
Die Prädikatswörter „eingerichtet, um“, „betreibbar, um“ und „programmiert, um“ implizieren keine spezielle materielle oder immaterielle Modifikation eines Subjekts, sondern sollen stattdessen austauschbar verwendet werden. Zum Beispiel kann ein Prozessor, der eingerichtet ist, um eine Operation oder eine Komponente zu überwachen, auch bedeuten, dass der Prozessor so programmiert ist, die Operation zu überwachen und zu steuern, oder der Prozessor betreibbar ist, die Operation zu überwachen und zu steuern. Ebenfalls kann ein Prozessor, der eingerichtet ist, um Code auszuführen, als ein Prozessor ausgelegt sein, der programmiert ist, um Code auszuführen oder betreibbar ist, um Code auszuführen.
-
Die Ausdrücke „in Kommunikation mit“ und „gekoppelt“ bedeuten „in direkter Kommunikation mit“ oder „in indirekter Kommunikation mit“ über eine oder mehrere Komponenten, die in diesem Dokument benannt oder nicht benannt sind (z. B. ein Speicherkartenlesegerät).
-
Ein Ausdruck, wie zum Beispiel „ein Aspekt“, bedeutet nicht, dass ein solcher Aspekt für die vorliegende Offenbarung wesentlich ist oder dass ein derartiger Aspekt für alle Konfigurationen der vorliegenden Offenbarung gilt. Eine Offenbarung, die sich auf einen Aspekt bezieht, kann auf alle Konfigurationen oder eine oder mehrere Konfigurationen angewendet werden. Ein Aspekt kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie beispielsweise ein Aspekt, kann sich auf einen oder mehrere Aspekte beziehen und umgekehrt. Ein Ausdruck, wie beispielsweise eine „Implementierung“, impliziert nicht, dass eine solche Implementierung für die vorliegende Offenbarung wesentlich ist oder dass eine solche Implementierung für alle Konfigurationen der vorliegenden Offenbarung gilt. Eine Offenbarung, die sich auf eine Implementierung bezieht, kann für alle Aspekte oder einen oder mehrere Aspekte gelten. Eine Implementierung kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie beispielsweise eine „Implementierung“, kann sich auf eine oder mehrere Implementierungen beziehen und umgekehrt. Ein Ausdruck, wie beispielsweise eine „Konfiguration“, impliziert nicht, dass eine solche Konfiguration für die vorliegende Offenbarung wesentlich ist oder dass eine solche Konfiguration für alle Konfigurationen der vorliegenden Offenbarung gilt. Eine Offenbarung, die sich auf eine Konfiguration bezieht, kann auf alle Konfigurationen oder eine oder mehrere Konfigurationen angewendet werden. Eine Konfiguration kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie z. B. eine „Konfiguration“, kann sich auf eine oder mehrere Konfigurationen beziehen und umgekehrt.
-
Das Wort „beispielhaft“ wird in diesem Dokument in der Bedeutung „als Beispiel oder zur Veranschaulichung dienend“ verwendet. Jeder Aspekt oder jedes Design, der bzw. das hier als „beispielhaft“ beschrieben wird, ist nicht zwangsläufig als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Designs zu verstehen.