-
HINTERGRUND
-
Halbleiterspeicher wird weithin in verschiedenen elektronischen Geräten, wie beispielsweise Mobiltelefonen, Digitalkameras, PDAs, medizinischer Elektronik, mobilen Rechenvorrichtungen, Servern, Solid-State-Drives („SSDs“), nicht mobilen Rechenvorrichtungen und anderen Geräten, verwendet. Halbleiterspeicher kann nichtflüchtigen Speicher oder flüchtigen Speicher aufweisen. Ein nichtflüchtiger Speicher ermöglicht, dass Informationen gespeichert und behalten werden, selbst wenn der nichtflüchtige Speicher nicht mit einer Stromquelle (z. B. einer Batterie) verbunden ist.
-
Da einige nichtflüchtige Speicher vielen Programmier- und Löschzyklen ausgesetzt sind, können sich Leistung und Zuverlässigkeit verschlechtern. In einigen Fällen können Blöcke nichtflüchtiger Speicherzellen versagen, was bewirkt, dass das System den Block aus der zukünftigen Verwendung zurückzieht. Wenngleich das Zurückziehen des Blocks aus der zukünftigen Verwendung die Zuverlässigkeit der Vorrichtung aufrechterhält, verringert das Zurückziehen von fehlerhaften Blöcken auch die Kapazität des Speichers.
-
Figurenliste
-
Gleiche Bezugszeichen in den Zeichnungen beziehen sich auf gemeinsame Komponenten in den verschiedenen Figuren.
- 1 ist ein Blockdiagramm, das eine Ausführungsform eines Speichersystems zeigt.
- 2 ist ein Blockdiagramm, das eine Ausführungsform eines Speicherpakets darstellt.
- 3 ist ein Blockdiagramm einer Ausführungsform eines Speicherchips.
- 4 ist ein Blockdiagramm einer Ausführungsform eines Speicherarrays.
- 5 ist ein Querschnitt eines NAND-Strings.
- 6A ist eine perspektivische Ansicht eines monolithischen dreidimensionalen Flash-Speichers, der vertikale NAND-Strings einschließt, die Ladungsfängerschichten aufweisen.
- 6B ist ein Querschnitt eines Abschnitts eines vertikalen NAND-Strings.
- 7 zeigt Schwellenspannungsverteilungen.
- 8 ist eine Tabelle, die ein Beispiel einer Zuordnung von Datenwerten zu Datenzuständen beschreibt.
- 9A ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Programmieren beschreibt.
- 9B ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Programmieren von Daten in Speicherzellen beschreibt, die mit einer gemeinsamen Wortleitung verbunden sind.
- 9C zeigt eine Wortleitungsspannung während Programmier- und Verifiziervorgängen.
- 10 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Lesen von Daten aus Speicherzellen beschreibt.
- 11 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Regenerieren von fehlerhaften Blöcken beschreibt.
- 12 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Verifizieren des Erfolgs der Selbstheilung beschreibt.
- 12A ist ein Blockdiagramm, das eine Seite von Daten darstellt.
- 13 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Verifizieren des Erfolgs der Selbstheilung beschreibt.
- 14 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Abnutzungsausgleich beschreibt.
- 15 zeigt einen Satz Blöcke, die in Teilsätzen gruppiert sind.
- 16 ist ein Zeitdiagramm, das mehrere Phasen eines Abnutzungsausgleichsschemas darstellt.
-
DETAILLIERTE BESCHREIBUNG
-
Es wird eine Technologie zur Regenerierung von fehlerhaften Blöcken vorgeschlagen. Wenn mancher nichtflüchtiger Speicher vielen Programmier- und Löschzyklen unterzogen wird, kann sich unerwünschte Ladung in dem Tunneldielektrikum (oder anderen Bereichen) der Speicherzellen ansammeln. Diese unerwünschte Akkumulation von Ladung kann bewirken, dass ein ordnungsgemäßer Block des Speichers zu einem fehlerhaften Block wird. Es wurde festgestellt, dass, wenn ein fehlerhafter Block über einen langen Zeitraum (z. B. 1 bis 2 Monate) untätig bleiben gelassen wird, dies zu einiger der ungewollten Akkumulation von Ladung führt, die derart abgeleitet wird, dass der fehlerhafte Block des Speichers zu einem ordnungsgemäßen Block wird. Daher wird vorgeschlagen, dass als Reaktion auf die Feststellung, dass ein spezifischer Speicherblock ein fehlerhafter Block ist, der spezifische Speicherblock für einen Zeitraum untätig gelassen wird, so dass kein Programmieren, Lesen oder Löschen während des Zeitraums der Untätigkeit für den spezifischen Block durchgeführt wird; Programmierung erfolgt jedoch für andere Blöcke oder Speicher während dieses Zeitraums. Nachdem der Zeitraum der Untätigkeit abgeschlossen ist, testet das System, ob der spezifische Speicherblock ein fehlerhafter Block oder ein ordnungsgemäßer Block ist. Wenn der spezifische Speicherblock jetzt wieder ein ordnungsgemäßer Block ist, dann kann der spezifische Speicherblock verwendet werden, um Host-Daten auf die gleiche Weise zu speichern, wie andere ordnungsgemäße Blöcke verwendet werden.
-
1 ist ein Blockdiagramm einer Ausführungsform eines Speichersystems 100, das die vorgeschlagene Technologie zum Regenerieren fehlerhafter Blöcke implementiert. In einer Ausführungsform ist das Speichersystem 100 ein SSD. Das Speichersystem 100 kann auch eine Speicherkarte, ein USB-Laufwerk oder eine andere Art von Speichersystem sein. Die vorgeschlagene Technologie zum Regenerieren von fehlerhaften Blöcken ist nicht auf einen Typ von Speichersystem beschränkt. Das Speichersystem 100 ist mit dem Host 102 verbunden, der ein Computer, Server, elektronischer Vorrichtung (z. B. Smartphone, Tablet oder andere mobile Vorrichtung), ein Gerät oder ein anderer Apparat sein kann, die bzw. der Speicher verwendet und Datenverarbeitungsfähigkeiten aufweist. In einigen Ausführungsformen ist der Host 102 von dem Speichersystem 100 separiert, aber mit diesem verbunden. In anderen Ausführungsformen ist das Speichersystem 100 in den Host 102 eingebettet.
-
Die Komponenten des in 1 dargestellten Speichersystems 100 sind elektrische Schaltungen. Das Speichersystem 100 schließt eine Steuerung 120, die mit einem oder mehreren Speicherpaketen 130 verbunden ist, und einen lokalen flüchtigen Hochgeschwindigkeitsspeicher 140 (z. B. DRAM) ein. Die Speicherpakete 130 weisen eine Mehrzahl von Speicherchips auf, die jeweils eine Mehrzahl von nichtflüchtigen Speicherzellen aufweisen. Mehr Informationen über die Struktur der Speicherpakete 130 werden nachfolgend mit Bezug auf 2 bis 6B bereitgestellt. Der lokale flüchtige Hochgeschwindigkeitsspeicher 140 wird von der Steuerung 120 verwendet, um bestimmte Funktionen auszuführen. Zum Beispiel speichert der lokale flüchtige Hochgeschwindigkeitsspeicher 140 L2P-Tabellen (L2P), den Pool fehlerhafter Blöcke (BBP), den Pool ordnungsgemäßer Blöcke (GBP) und die Aktualisierungswarteschlange (RQ), von denen alle unten genauer beschrieben werden.
-
Die Steuerung 120 weist eine Host-Schnittstelle 152 auf, die mit dem Host 102 verbunden ist und mit diesem in Kommunikation steht. In einer Ausführungsform stellt die Host-Schnittstelle 152 eine PCIe-Schnittstelle bereit. Andere Schnittstellen können ebenfalls verwendet werden, wie SCSI, SATA usw. Die Host-Schnittstelle 152 ist ebenfalls mit einem Networkon-Chip (NOC) 154 verbunden. Ein NOC ist ein Kommunikationssubsystem auf einer integrierten Schaltung. NOCs können synchrone und asynchrone Taktdomänen umspannen oder ungetaktete asynchrone Logik verwenden. Die NOC-Technologie wendet Netzwerktheorie und -verfahren auf On-Chip-Kommunikationen an und liefert beträchtliche Verbesserungen gegenüber herkömmlichen Bus- und Crossbar-Verbindungen. NOC verbessert die Skalierbarkeit von Systemen auf einem Chip (SoC) und die Leistungseffizienz komplexer SoCs im Vergleich zu anderen Designs. Die Drähte und die Verbindungen des NOC werden von vielen Signalen gemeinsam genutzt. Eine hohe Parallelität wird erreicht, da alle Verbindungen in dem NOC gleichzeitig an unterschiedlichen Datenpaketen arbeiten können. Daher liefert ein NOC, wenn die Komplexität integrierter Subsysteme wächst, eine verbesserte Leistung (wie Durchsatz) und Skalierbarkeit im Vergleich zu früheren Kommunikationsarchitekturen (z. B. dedizierten Punktzu-Punkt-Signaldrähten, gemeinsam genutzten Bussen oder segmentierten Bussen mit Brücken). An die NOC 154 angeschlossen und in Kommunikation mit dieser sind der Prozessor 156, die ECC-Maschine 158, die Speicherschnittstelle 160 und die DRAM-Steuerung 164. Die DRAM-Steuerung 164 wird verwendet, um mit einem lokalen flüchtigen Hochgeschwindigkeitsspeicher 140 (z. B. DRAM) zu arbeiten und damit zu kommunizieren. In anderen Ausführungsformen kann der lokale flüchtige Hochgeschwindigkeitsspeicher 140 ein SRAM oder ein anderer Typ eines flüchtigen Speichers sein.
-
Die ECC-Maschine 158 führt Fehlerkorrekturdienste durch. Zum Beispiel führt die ECC-Maschine 158 Datencodierung und -decodierung gemäß der implementierten ECC-Technik durch. Mehr Details über die Fehlerkorrektur werden nachstehend bereitgestellt. In einer Ausführungsform ist die ECC-Maschine 158 eine elektrische Schaltung, die durch Software programmiert ist. Beispielsweise kann die ECC-Maschine 158 ein Prozessor sein, der programmiert werden kann. In anderen Ausführungsformen ist die ECC-Maschine 158 eine kundenspezifische und dedizierte Hardware-Schaltung ohne jegliche Software. In einer anderen Ausführungsform wird die Funktion der ECC-Maschine 158 durch den Prozessor 156 implementiert.
-
Der Prozessor 156 führt die verschiedenen Steuerungsspeicheroperationen durch. Zum Beispiel ist das Speichermodul (MM) ein Prozess, der auf dem Prozessor 156 läuft, um Programmier-, Lösch-, Lese- sowie Speicherverwaltungsprozesse auszuführen. In einer Ausführungsform ist der Prozessor 156 durch Firmware programmiert. In anderen Ausführungsformen ist der Prozessor 156 eine kundenspezifische und dedizierte Hardware-Schaltung ohne jegliche Software. Wie nachstehend detaillierter erörtert wird, kann der Prozessor 156 (allein oder mit der ECC-Maschine 158) bestimmen, dass ein Block nichtflüchtiger Speicherzellen ein fehlerhafter Block ist, dem Block ermöglichen, sich passiv selbst zu heilen, ohne zusätzliche Wärme anzuwenden, und den Block zu verwenden, um Host-Daten nach der Selbstheilung zu speichern. Während der Selbstheilung wird der Block nicht verwendet, um Host-Daten zu speichern.
-
Der Prozessor 156 implementiert auch ein Übersetzungsmodul (TM), als Software/Firmware-Prozess oder als eine dedizierte Hardware-Schaltung. In vielen Systemen wird der nichtflüchtige Speicher innerhalb des Speichersystems unter Verwendung von physikalischen Adressen in Verbindung mit einem oder mehreren Speicherchips adressiert. Jedoch verwendet das Host-System logische Adressen, um die verschiedenen Speicherorte zu adressieren. Dies ermöglicht dem Host, Daten aufeinander folgenden logischen Adressen zuzuweisen, während das Speichersystem die Daten beliebig an den Orten des einen oder der mehreren Speicherchips zu speichern. Um dieses System zu aktivieren, führt die Steuerung (z. B. das Übersetzungsmodul TM) eine Adressübersetzung zwischen den logischen Adressen, die von dem Host verwendet werden, und den physikalischen Adressen, die von den Speicherchips verwendet werden, durch. Eine beispielhafte Implementierung besteht darin, Tabellen (d. h. die vorstehend erwähnten L2P-Tabellen) beizubehalten, die die aktuelle Übersetzung zwischen logischen Adressen und physikalischen Adressen identifizieren. Ein Eintrag in der L2P-Tabelle kann eine Identifikation einer logischen Adresse und einer entsprechenden physikalischen Adresse einschließen. Obwohl Tabellen mit einer Zuordnung von logischer Adresse zu physikalischer Adresse (oder L2P-Tabellen) das Wort „Tabellen“ einschließen, müssen sie nicht tatsächlich Tabellen sein. Die Tabellen mit eine Zuordnung von logischer Adresse zu physikalischer Adresse (oder L2P-Tabellen) können stattdessen jede Art von Datenstruktur sein. In einigen Beispielen ist der Speicherplatz eines Speichersystems so groß, dass der lokale Speicher 140 nicht alle L2P-Tabellen aufnehmen kann. In einem solchen Fall wird der gesamte Satz von L2P-Tabellen in den Speicherpaketen 130 gespeichert und ein Teilsatz der L2P-Tabellen wird im lokalen Speicher 140 zwischengespeichert (L2P-Cache).
-
Die Speicherschnittstelle 160 kommuniziert mit mehreren Speicherpaketen 130. In einer Ausführungsform stellt die Speicherschnittstelle eine Toggle-Mode-Schnittstelle bereit. In einigen beispielhaften Implementierungen implementiert die Speicherschnittstelle 160 (oder ein anderer Abschnitt der Steuerung 120) einen Scheduler und Puffer zum Übertragen von Daten an und Empfangen von Daten von einem oder mehreren Speicherchips.
-
2 ist ein Blockdiagramm einer Ausführungsform eines Speicherpakets 200, das eine beispielhafte Implementierung eines Speicherpakets ist, das in den Speicherpaketen 130 von 1 eingeschlossen ist. 2 zeigt eine Mehrzahl von Speicherchips 206, die mit einem Speicherbus (Datenleitungen und Chip-Aktivierungsleitungen) 208 verbunden sind. Der Speicherbus 208 ist mit einer Steuerungsschnittstelle 210 verbunden, die eine elektrische Schaltung zum Verbinden mit der Speicherschnittstelle 160 der Steuerung 120 ist. In einer Ausführungsform ist die Steuerungsschnittstelle eine Toggle-Mode-Schnittstelle zum Kommunizieren mit einer Toggle-Mode-Schnittstelle der Speicherschnittstelle 160. In einigen Ausführungsformen kann das Speicherpaket eine kleine Steuerung einschließen, die mit dem Speicherbus 208 verbunden ist. In einer Ausführungsform schließt jedes Speicherpaket acht oder sechzehn Speicherchips ein; andere Anzahlen von Speicherchips können jedoch ebenfalls implementiert werden. Die hierin beschriebene Technologie ist nicht auf eine spezifische Anzahl von Speicherchips beschränkt.
-
3 ist ein Funktionsblockdiagramm einer Ausführungsform eines Speicherchips 206. Die in 3 dargestellten Komponenten sind elektrische Schaltungen. Der Speicherchip 206 schließt eine dreidimensionale Speicherstruktur 326 aus Speicherzellen (wie beispielsweise eine 3D-Anordnung von Speicherzellen), eine Steuerschaltung 310 und Lese/Schreib-Schaltungen 328 ein. Die Speicherstruktur 326 ist durch Wortleitungen über einen Zeilendecoder 324 und durch Bitleitungen über einen Spaltendecoder 332 adressierbar. Die Lese-/Schreibschaltungen 328 schließen mehrere Leseblöcke 350, einschließlich SB1, SB2, ..., SBp (Leseschaltkreise), ein und ermöglichen, dass eine Seite von Speicherzellen parallel gelesen oder programmiert wird. Befehle und Daten werden über Leitungen 318 zu/von dem Speicherchip 300 übertragen. In einem Ausführungsbeispiel schließt der Speicherchip 300 einen Satz von Eingabe- und/oder Ausgabestiften (I/O-Stiften) ein, die mit Leitungen 318 verbunden sind.
-
Die Speicherstruktur 326 kann ein oder mehrere Arrays von Speicherzellen aufweisen, einschließlich eines monolithischen dreidimensionalen Arrays von nichtflüchtigen Speicherzellen, in denen mehrere Speicherebenen über (und nicht in) einem einzelnen Substrat, wie einem Wafer, ohne Zwischensubstrate ausgebildet sind. Die Speicherstruktur kann jede Art von nichtflüchtigem Speicher aufweisen, der monolithisch in einer oder mehreren physikalischen Ebenen von Arrays von Speicherzellen ausgebildet ist, die einen aktiven Bereich aufweisen, der über einem Siliziumsubstrat angeordnet ist.
-
Die Steuerschaltung 310 wirkt mit den Lese-/Schreibschaltungen 328 zusammen, um Speicheroperationen (z. B. Löschen, Programmieren, Lesen und andere) auf der Speicherstruktur 326 auszuführen, und schließt eine Zustandsmaschine 312, einen On-Chip-Adressdecodierer 314, ein Leistungssteuermodul 316 und eine Temperaturerfassungsschaltung 318 ein. Die Zustandsmaschine 312 stellt eine Steuerung von Speicheroperationen auf Chip-Ebene bereit. Die Temperaturerfassungsschaltung 318 ist eingerichtet, um die Temperatur an der Speicherstruktur 326 zu erfassen, und kann jede geeignete Temperaturerfassungsschaltung sein, die nach dem Stand der Technik bekannt ist. In einer Ausführungsform ist die Zustandsmaschine 312 durch Software programmierbar. In anderen Ausführungsformen verwendet die Zustandsmaschine 312 keine Software und ist vollständig in Hardware (z. B. elektrischen Schaltungen) implementiert. In einer Ausführungsform schließt die Steuerschaltung 310 Register, ROM-Sicherungen und andere Speichervorrichtungen zum Speichern von Vorgabewerten, wie beispielsweise Basisspannungen und anderen Parametern, ein. Der On-Chip-Adressdecodierer 314 stellt eine Adressschnittstelle zwischen Adressen, die von einem Host oder einer Steuerung verwendet werden, zu der Hardware-Adresse, die von den Decodierern 324 und 332 verwendet wird, bereit. Leistungssteuermodul 316 steuert die Leistung und Spannungen, die den Wortleitungen und den Bitleitungen während Speicheroperationen zugeführt werden. Das Leistungssteuermodul 316 kann Ladungspumpen zum Erzeugen von Spannungen einschließen. Die Leseblöcke schließen Bitleitungstreiber ein. Es ist zu beachten, dass eine beliebige oder eine Kombination der Steuerschaltung 319, der Zustandsmaschine 312 oder der Steuerung 120 als eine oder mehrere Steuerschaltungen zum Durchführen der nachstehend erörterten Prozesse angesehen werden kann.
-
Mehrere Speicherzellen in einer Speicherstruktur 326 können so eingerichtet sein, dass sie in Reihe geschaltet sind, oder dass jedes Element einzeln zugänglich ist. Als nicht einschränkendes Beispiel enthalten Flash-Speichervorrichtungen in einer NAND-Konfiguration (NAND-Flash-Speicher) üblicherweise Speicherzellen, die in Reihe geschaltet sind. Ein NAND-String ist ein Beispiel für einen Satz in Reihe geschalteter Speicherzellen und ausgewählten Gate-Transistoren, die verwendet werden können, um die Speicherstruktur 326 als eine dreidimensionale Speicherstruktur zu implementieren. Ein NAND-Flash-Speicherarray kann so eingerichtet sein, dass das Array aus mehreren NAND-Strings zusammengesetzt ist, von denen ein NAND-String aus mehreren Speicherzellen zusammengesetzt ist, die sich eine einzelne Bitleitung teilen und auf die als eine Gruppe zugegriffen wird. Alternativ können Speicherelemente so eingerichtet sein, dass jedes Element einzeln zugänglich ist, z. B. ein NOR-Speicherarray. NAND- und NOR-Speicherkonfigurationen sind beispielhaft, und Speicherzellen können anderweitig eingerichtet sein.
-
Ein dreidimensionales Speicherarray ist so angeordnet, dass Speicherzellen mehrere Ebenen oder mehrere Speichervorrichtungsebenen belegen, wodurch eine Struktur in drei Dimensionen gebildet wird (d. h. in der x-, y- und z-Richtung, wobei die z-Richtung im Wesentlichen senkrecht ist und die x- und y-Richtungen im Wesentlichen parallel zur Hauptoberfläche des Substrats verlaufen). Als ein nicht einschränkendes Beispiel kann eine dreidimensionale Speicherstruktur vertikal als ein Stapel von mehreren zweidimensionalen Speichervorrichtungsebenen angeordnet sein. Als weiteres, nicht einschränkendes Beispiel kann ein dreidimensionales Speicherarray als mehrere vertikale Spalten (z. B. Spalten, die sich im Wesentlichen senkrecht zur Hauptfläche des Substrats erstrecken, d.' h. in y-Richtung) angeordnet sein, wobei jede Spalte mehrere Speicherzellen aufweist. Die senkrechten Spalten können in einer zweidimensionalen Konfiguration angeordnet sein, z. B. in einer x-y-Ebene, was zu einer dreidimensionalen Anordnung von Speicherzellen mit Speicherzellen auf mehreren vertikal gestapelten Speicherebenen führt. Andere Konfigurationen von Speicherelementen in drei Dimensionen können auch ein dreidimensionales Speicherarray bilden. Als nicht einschränkendes Beispiel können in einem dreidimensionalen NAND-Speicherarray die Speicherelemente miteinander gekoppelt sein, um vertikale NAND-Strings mit Ladungsfängermaterial zu bilden, die über mehrere horizontale Speichervorrichtungsebenen laufen. Ein Beispiel eines dreidimensionalen NAND-Speicherarrays, das verwendet werden kann, um die Speicherstruktur
126 zu implementieren, ist in
US-Patent 9.343.156 zu finden, das hierin durch Bezugnahme in seiner Gesamtheit aufgenommen ist.
-
Obwohl ein Beispiel eine dreidimensionale Speicherstruktur 326 einschließt, die vertikale NAND-Strings mit Ladungsfängermaterial aufweist, können auch andere (2D- und 3D-) Speicherstrukturen mit der hierin beschriebenen Technologie verwendet werden. Beispielsweise können Floating-Gate-Speicher (z. B. Flash-Speicher vom NAND-Typ und NOR-Typ), ReRAM-Speicher, magnetoresistive Speicher (z. B. MRAM), Phasenwechselspeicher (z. B. PCM) und leitende Brückenspeicherelemente verwendet werden. Ein Fachmann in der Technik wird erkennen, dass die hierin beschriebene Technologie nicht auf eine einzige spezifische Speicherstruktur beschränkt ist, sondern viele relevante Speicherstrukturen gemäß dem Geist und Umfang der Technologie, wie hierin beschrieben und wie einem Fachmann der Technik bekannt, abdeckt.
-
4 zeigt ein Beispiel für die Speicherstruktur 326. In einem Ausführungsbeispiel ist die Speicherstruktur 326 ein Array aus Speicherzellen, das in mehrere Ebenen unterteilt ist. In dem Beispiel aus 4 ist die Speicherstruktur 326 in zwei Ebenen unterteilt: Ebene 0 und Ebene 1. In anderen Ausführungsformen können mehr oder weniger als zwei Ebenen verwendet werden. In einigen Ausführungsformen ist jede Ebene in eine große Anzahl von Blöcken unterteilt (z. B. Blöcke 0 - 1023 oder eine andere Menge). Jeder Block schließt viele Speicherzellen ein. In einer Ausführungsform ist der Block die Löscheinheit und wird daher manchmal als ein Löschblock bezeichnet. Das heißt, jeder Block enthält die Mindestanzahl von Speicherzellen, die zusammen gelöscht werden. Andere Löscheinheiten können ebenfalls verwendet werden.
-
In einer Ausführungsform enthält ein Block einen Satz NAND-Strings, auf die über Bitleitungen (z. B. Bitleitungen BL0 - BL69.623) und Wortleitungen (WL0, WL1, WL2, WL3) zugegriffen wird. 4 zeigt vier Speicherzellen, die in Reihe geschaltet sind, um einen NAND-String zu bilden. Obwohl dargestellt ist, dass vier Speicherzellen in jedem NAND-String enthalten sind, können mehr oder weniger als vier verwendet werden (z. B. 16, 32, 64, 128, 256 oder eine andere Anzahl von Speicherzellen können auf einem NAND-String vorliegen). Ein Anschluss des NAND-Strings ist mit einer entsprechenden Bitleitung über ein Drain-Auswahl-Gate verbunden, und ein anderer Anschluss ist mit der Source-Leitung über ein Source-Auswahl-Gate verbunden. Obwohl 4 69624 Bit-Leitungen zeigt, kann auch eine andere Anzahl von Bitleitungen verwendet werden. Zusätzlich kann der Block, wie oben diskutiert, andere nichtflüchtige Speichertechnologien als den NAND-Flash-Speicher implementieren.
-
Jeder Block ist typischerweise in eine Anzahl von Seiten unterteilt. In einer Ausführungsform ist eine Seite eine Programmiereinheit. Andere Programmiereinheiten können ebenfalls verwendet werden. Eine oder mehrere Seiten von Daten werden typischerweise in einer Zeile von Speicherzellen gespeichert. Zum Beispiel können eine oder mehrere Seiten von Daten in Speicherzellen gespeichert werden, die mit einer gemeinsamen Wortleitung verbunden sind. Ein Beispiel einer Seite können alle Daten sein, die in den Speicherzellen gespeichert sind, die mit einer gemeinsamen Wortleitung und in einem gemeinsamen Block verbunden sind. Ein weiteres Beispiel einer Seite ist ein Bruchteil (z. B. ¼, ½, 1/3) der Speicherzellen, die mit einer gemeinsamen Wortleitung und in einem gemeinsamen Block oder einem Bruchteil der in diesen Speicherzellen gespeicherten Bits verbunden sind. Eine Seite schließt Host-Daten und Overhead-Daten (auch Systemdaten genannt) ein. Overhead-Daten schließen typischerweise Header-Informationen und Fehlerkorrekturcodes (ECC) ein, die aus den Host-Daten des Sektors berechnet wurden. Die Steuerung (oder eine andere Komponente) berechnet den ECC, wenn Daten in das Array programmiert werden, und prüft sie auch, wenn Daten aus dem Array gelesen werden.
-
In einer Ausführungsform ist die Speicherstruktur 326 ein zweidimensionales Speicherarray aus Flash-Speicherzellen, wobei die Flash-Speicherzellen jeweils Floating-Gates enthalten und in NAND-Strings angeordnet sind (wie in 4 dargestellt). 5 ist ein Querschnitt eines NAND-Strings 400, der auf einem Siliziumsubstrat 402 implementiert ist. Der NAND-String 400 schließt Stapel 404, 406, 408 und 410 ein, von denen jeder eine nichtflüchtige Speicherzelle implementiert. Jeder der Stapel 404, 406, 408 und 410 weist ein Steuer-Gate CG (z. B. Wolfram), ein Floating-Gate FG (z. B. Polysilizium), einen Zwischen-Gate-Dielektrikumsbereich IGD (z. B. SiO2) zwischen dem jeweiligen Steuer-Gate und Floating-Gate und ein Tunnel-Dielektrikum TD (z. B. SiO2) zwischen dem jeweiligen Floating-Gate FG und dem Substrat 402. In einer Ausführungsform bilden die Steuer-Gates CG die Wortleitungen. Die N+ dotierten Bereiche 410, 411, 424, 426, 428, 420 und 432 in dem Substrat 402 werden gemeinsam von benachbarten Stapeln 404, 406, 408 und 410 genutzt, um die Transistoren der Speicherzellen zu bilden. Für jede Speicherzelle ist einer der N+ dotierten Bereiche der Drain und der andere N+ dotierte Bereich ist die Source. Ein Ende des NAND-Strings 400 ist mit einer entsprechenden Bitleitung über ein Drain-Auswahl-Gate 414 verbunden, und ein anderes Ende des NAND-Strings 400 ist mit der Source-Leitung über ein Source-Auswahl-Gate 412 verbunden. Das Drain-Auswahl-Gate 414 weist ein Steuer-Gate CG und einen dielektrischen Bereich DI zwischen seinem Steuer-Gate CG und dem Substrat 402 auf. Das Source-Auswahl-Gate 412 weist ein Steuer-Gate CG und einen dielektrischen Bereich DI zwischen seinem Steuer-Gate CG und dem Substrat 402 auf. Obwohl der NAND-String aus 4 vier in Reihe geschaltete Speicherzellen aufweist, um einen NAND-String zu bilden, können mehr oder weniger als vier Speicherzellen verwendet werden, um einen NAND-String zu bilden (z. B. 16, 32, 64, 128, 256 oder eine andere Anzahl von Speicherzellen können verbunden werden, um einen NAND-String zu bilden).
-
Wenn eine Flash-Speicherzelle aus 5 programmiert wird, wird eine Programmierspannung an das Steuer-Gate angelegt, und die Bitleitung wird geerdet. Elektronen von dem Substrat 402 (z. B. eine p-Wanne in dem Substrat 402) werden über das Tunneldielektrikum TD in das Floating-Gate FG injiziert. Wenn sich Elektronen in dem Floating-Gate ansammeln, wird das Floating-Gate negativ geladen, und die Schwellenspannung der Speicherzelle wird erhöht.
-
Speicherzellen werden gelöscht, indem das Substrat 402 (z. B. eine p-Wanne in dem Substrat) auf eine Löschspannung (z. B. 20 Volt) angehoben wird und die Wortleitungen (d. h. Steuer-Gates CG) eines ausgewählten Blocks geerdet werden. Die Source- und Bitleitungen sind erdfrei. In einer Ausführungsform wird Löschen an einem gesamten Block durchgeführt (was den Block zur Löscheinheit macht). Elektronen werden von dem Floating-Gate FG zu dem Substrat 402 (z. B. einer p-Wanne in dem Substrat) über das Tunneldielektrikum übertragen, und die Schwellenspannung nimmt ab.
-
In einer anderen Ausführungsform weist die Speicherstruktur 326 eine monolithische dreidimensionale Speicherstruktur auf, in der mehrere Speicherebenen über (und nicht in) einem einzelnen Substrat, wie einem Wafer, ohne Zwischensubstrate ausgebildet sind. 6A ist eine perspektivische Ansicht eines Abschnitts einer solchen Speicherstruktur 326, die einen Abschnitt eines Blocks von Speicherzellen darstellt. Die dargestellte Struktur schließt einen Satz von Bitleitungen BL ein, die über einem Stapel von alternierenden dielektrischen Schichten und leitenden Schichten positioniert sind. Als Beispiel wird eine der dielektrischen Schichten als D und eine der leitenden Schichten (auch als Wortleitungsschichten bezeichnet) wird als W markiert. Die Anzahl der alternierenden dielektrischen Schichten und der leitenden Schichten kann basierend auf spezifischen Implementierungsanforderungen variieren. Ein Satz von Ausführungsformen schließt zwischen 108 und 216 alternierende dielektrische Schichten und leitende Schichten ein, beispielsweise 96 Datenwortleitungsschichten, 8 Auswahlschichten, 4 Dummy-Wortleitungsschichten und 108 dielektrische Schichten. Mehr oder weniger als 108 bis 216 Schichten können ebenfalls verwendet werden. Die alternierenden dielektrischen Schichten und leitenden Schichten sind durch lokale Verbindungen LI in vier Unterblöcke unterteilt. 6A zeigt nur zwei Unterblöcke und zwei lokale Zwischenverbindungen LI. Unterhalb der alternierenden dielektrischen Schichten und Wortleitungsschichten befindet sich eine Source-Leitungsschicht SL. Speicherlöcher sind in dem Stapel von alternierenden dielektrischen Schichten und leitenden Schichten ausgebildet und mit vertikalen Säulen gefüllt. Zum Beispiel ist eine der vertikalen Spalten als VC markiert. Es ist zu beachten, dass in 6A die dielektrischen Schichten durchsichtig dargestellt sind, so dass der Leser die Speicherlöcher sehen kann, die in dem Stapel von alternierenden dielektrischen Schichten und leitenden Schichten positioniert sind. In einer Ausführungsform werden NAND-Strings gebildet, indem das Speicherloch mit Materialien gefüllt wird, die eine Ladungsfängerschicht einschließen, um eine vertikale Spalte von Speicherzellen zu erzeugen. Jede Speicherzelle kann ein oder mehrere Datenbits speichern.
-
6B zeigt eine Querschnittsansicht eines Abschnitts einer der vertikalen Spalten des in 6A dargestellten Speicherarrays. In einer Ausführungsform sind die vertikalen Säulen rund; in anderen Ausführungsformen können jedoch andere Formen verwendet werden. In einer Ausführungsform schließt die vertikale Säule 432 eine innere Kernschicht 470 ein, die aus einem Dielektrikum, wie beispielsweise SiO2, hergestellt ist. Andere Materialien können ebenfalls verwendet werden. Der umgebende innere Kern 470 ist ein Polysiliziumkanal 471. Es können auch andere Materialien als Polysilizium verwendet werden. Es ist zu beachten, dass es der Kanal 471 ist, der mit der Bitleitung verbunden ist. Der umgebende Kanal 471 ist ein Tunneldielektrikum 472. In einer Ausführungsform weist das Tunneldielektrikum 472 eine ONO-Struktur auf. Das umgebende Tunneldielektrikum 472 ist eine Ladungsfängerschicht 473, wie (zum Beispiel) Siliziumnitrid. Andere Speichermaterialien und -strukturen können ebenfalls verwendet werden. Die hierin beschriebene Technologie ist nicht auf ein spezifisches Material oder eine spezifische Struktur beschränkt.
-
6B zeigt die dielektrischen Schichten DLL49, DLL50, DLL51, DLL52 und DLL53 sowie Wortleitungsschichten WLL43, WLL44, WLL45, WLL46 und WLL47. Jede der Wortleitungsschichten schließt einen Wortleitungsbereich 476 ein, der von einer Aluminiumoxidschicht 477 umgeben ist, die von einer Blockieroxidschicht 478 (SiO2-Schicht) umgeben ist. Die physikalische Wechselwirkung der Wortleitungsschichten mit der vertikalen Säule bildet die Speicherzellen. Somit weist eine Speicherzelle in einer Ausführungsform Kanal 471, Tunneldielektrikum 472, Ladungsfängerschicht 473, Blockieroxidschicht 478, Aluminiumoxidschicht 477 und Wortleitungsbereich 476 auf. Beispielsweise weisen die Wortleitungsschicht WLL47 und ein Abschnitt der vertikalen Spalte 432 eine Speicherzelle MC1 auf. Die Wortleitungsschicht WLL46 und ein Abschnitt der vertikalen Spalte 432 weisen eine Speicherzelle MC2 auf. Die Wortleitungsschicht WLL45 und ein Abschnitt der vertikalen Spalte 432 weisen eine Speicherzelle MC3 auf. Die Wortleitungsschicht WLL44 und ein Abschnitt der vertikalen Spalte 432 weisen eine Speicherzelle MC4 auf. Die Wortleitungsschicht WLL43 und ein Abschnitt der vertikalen Spalte 432 weisen eine Speicherzelle MC5 auf. In anderen Architekturen kann eine Speicherzelle eine andere Struktur haben; die Speicherzelle wäre jedoch immer noch die Speichereinheit.
-
Wenn eine Speicherzelle programmiert ist, werden Elektronen in einem Abschnitt der Ladungsfängerschicht 473 gespeichert, der der Speicherzelle zugeordnet ist. Diese Elektronen werden in die Ladungsfängerschicht 473 aus dem Kanal 471 durch das Tunneldielektrikum 472 in Reaktion auf eine entsprechende Spannung im Wortleitungsbereich 476 gezogen. Die Schwellenspannung (Vth) einer Speicherzelle wird proportional zu der Menge der gespeicherten Ladung erhöht. In einer Ausführungsform wird die Programmierung durch Fowler Nordheim-Tunneln der Elektronen in die Ladungsfängerschicht erreicht. Während einer Löschoperation kehren die Elektronen in den Kanal zurück oder Löcher werden in die Ladungsfängerschicht injiziert, um eine Neukombination mit Elektronen zu erreichen. In einer Ausführungsform wird Löschen unter Verwendung von Löcherinjektion in die Ladungsfängerschicht über einen physikalischen Mechanismus, wie etwa durch Gate induziertes Drain-Leck (GIDL), erreicht.
-
Der vorstehend diskutierte Speicher kann gelöscht, programmiert und gelesen werden. Am Ende eines erfolgreichen Programmierprozesses (mit Verifizierung) sollten die Schwellenspannungen der Speicherzellen innerhalb einer oder mehrerer Verteilungen von Schwellenspannungen für programmierte Speicherzellen oder innerhalb einer Verteilung von Schwellenspannungen für gelöschte Speicherzellen, wie zutreffend, liegen. 7 stellt beispielhafte Schwellenspannungsverteilungen für das Speicherzellenarray dar, wenn jede Speicherzelle drei Datenbits speichert. Andere Ausführungsformen können jedoch andere Datenkapazitäten pro Speicherzelle verwenden (z. B. ein, zwei, vier oder fünf Datenbits pro Speicherzelle). 7 zeigt acht Schwellenspannungsverteilungen, die acht Datenzuständen entsprechen. Die erste Schwellenspannungsverteilung (Datenzustand) S0 stellt Speicherzellen dar, die gelöscht werden. Die anderen sieben Schwellenspannungsverteilungen (Datenzustände) S1 bis S7 stellen Speicherzellen dar, die programmiert sind und daher auch programmierte Zustände genannt werden. Jede Schwellenspannungsverteilung (Datenzustand) entspricht vorbestimmten Werten für den Satz von Datenbits. Die spezifische Beziehung zwischen den in die Speicherzelle programmierten Daten und den Schwellenspannungspegeln der Zelle hängt von dem Datencodierschema ab, das für die Zellen verwendet wird. In einer Ausführungsform werden Datenwerte den Schwellenspannungsbereichen unter Verwendung einer Gray-Code-Zuweisung zugewiesen, so dass, wenn sich die Schwellenspannung eines Speichers fälschlicherweise in seinen benachbarten physikalischen Zustand verschiebt, nur ein Bit betroffen ist.
-
7 zeigt auch sieben Lesereferenzspannungen, Vr1, Vr2, Vr3, Vr4, Vr5, Vr6 und Vr7, zum Lesen von Daten von Speicherzellen. Durch Testen (z. B. Ausführen von Lesevorgängen), ob die Schwellenspannung einer bestimmten Speicherzelle über oder unter den sieben Lesereferenzspannungen liegt, kann das System bestimmen, in welchem Datenzustand (d. h. S0, S1, S2, S3, ...) sich eine Speicherzelle befindet.
-
7 zeigt auch sieben Prüfreferenzspannungen, Vv1, Vv2, Vv3, Vv4, Vv5, Vv6 und Vv7. Wenn Speicherzellen in den Datenzustand S1 programmiert werden, prüft das System, ob diese Speicherzellen eine Schwellenspannung aufweisen, die größer oder gleich Vv1 ist. Wenn Speicherzellen in den Datenzustand S2 programmiert werden, prüft das System, ob die Speicherzellen Schwellenspannungen aufweisen, die größer oder gleich Vv2 sind (sie sollte nicht größer als Vr3 sein). Wenn Speicherzellen in den Datenzustand S3 programmiert werden, bestimmt das System, ob die Speicherzellen eine Schwellenspannung haben, die größer oder gleich Vv3 ist. Wenn Speicherzellen in den Datenzustand S4 programmiert werden, prüft das System, ob diese Speicherzellen eine Schwellenspannung aufweisen, die größer oder gleich Vv4 ist. Wenn Speicherzellen in den Datenzustand S5 programmiert werden, prüft das System, ob diese Speicherzellen eine Schwellenspannung aufweisen, die größer oder gleich Vv5 ist. Wenn Speicherzellen in den Datenzustand S6 programmiert werden, prüft das System, ob diese Speicherzellen eine Schwellenspannung aufweisen, die größer oder gleich Vv6 ist. Wenn Speicherzellen in den Datenzustand S7 programmiert werden, prüft das System, ob diese Speicherzellen eine Schwellenspannung aufweisen, die größer oder gleich Vv7 ist.
-
In einer Ausführungsform, die als Vollsequenzprogrammierung bekannt ist, können Speicherzellen aus dem gelöschten Datenzustand S0 direkt in einen der programmierten Datenzustände S1 bis S7 programmiert werden. Beispielsweise kann eine Population von Speicherzellen, die programmiert werden sollen, zuerst gelöscht werden, so dass alle Speicherzellen in der Population im gelöschten Datenzustand S0 sind. Dann wird ein Programmierprozess verwendet, um Speicherzellen direkt in Datenzustände S1, S2, S3, S4, S5, S6 und/oder S7 zu programmieren. Während zum Beispiel einige Speicherzellen von dem Datenzustand S0 in den Datenzustand S1 programmiert werden, werden andere Speicherzellen vom Datenzustand S0 in den Datenzustand S2 und/oder vom Datenzustand S0 in den Datenzustand S3, und so weiter, programmiert. Die Pfeile aus 7 stellen die Vollsequenzprogrammierung dar. Die hierin beschriebene Technologie kann auch mit anderen Programmierarten zusätzlich zur Vollsequenzprogrammierung (einschließlich, aber nicht beschränkt auf Mehrstufen-/Phasenprogrammierung) verwendet werden. In einigen Ausführungsformen können sich die Datenzustände S1 bis S7 überlappen, wobei sich die Steuerung 120 auf ECC stützt, um die korrekten gespeicherten Daten zu identifizieren.
-
8 ist eine Tabelle, die ein Beispiel einer Zuordnung von Datenwerten zu Datenzuständen beschreibt. In der Tabelle aus 8 ist S0=111. S1=110, S2=100, S3=000, S4=010, S5=011, S6=001 und S7=101. Andere Datencodierungen können ebenfalls verwendet werden. Die hier offenbarte Technologie erfordert keine spezifische Datencodierung. In einer Ausführungsform werden, wenn ein Block einer Löschoperation unterzogen wird, alle Speicherzellen in den Datenzustand S0, den gelöschten Zustand, bewegt. In der Ausführungsform von 8 sind alle Bits, die in einer Speicherzelle gespeichert sind, 1, wenn die Speicherzellen gelöscht werden (z. B. im Datenzustand S0).
-
9A ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Programmieren beschreibt, der durch die Steuerung 120 ausgeführt wird. In einigen Ausführungsformen kann der Host die Funktionen der Steuerung ausführen, anstatt über eine dedizierte Steuerung zu verfügen. Der Prozess aus 9A kann als Reaktion auf das Empfangen eines Programmierbefehls von dem Host 140 oder als Teil eines Systembetriebs in der Richtung der Steuerung 120 ausgeführt werden, wie während eines Defragmentierungsprozesses. In Schritt 500 empfängt die Steuerung 120 einen Befehl zum Programmieren von Host 102 (über die Host-Schnittstelle 152). In Schritt 502 empfängt die Steuerung 120 eine logische Adresse von Host 102 (über die Host-Schnittstelle 152). In Schritt 504 empfängt die Steuerung 120 Daten von Host 102 (über die Host-Schnittstelle 152). Die in Schritt 504 empfangenen Daten sind unter der in Schritt 502 empfangenen logischen Adresse in die Speicherpakete 130 zu programmieren. In Schritt 506 wandelt die Steuerung 120 die in Schritt 502 empfangene logische Adresse in eine physikalische Adresse in dem Speicher 130 unter Verwendung des Übersetzungsmanagers TM und der L2P-Tabellen um (siehe 1).
-
In Schritt 508 codiert die ECC-Maschine 158 die Daten, um ECC-Informationen hinzuzufügen. Zum Beispiel wird die ECC-Maschine 158 verwendet, um Codewörter zu erzeugen. In einer Ausführungsform werden Daten in Einheiten von Seiten programmiert. So wird zum Beispiel der Prozess aus 9A verwendet, um eine Seite von Daten zu programmieren. Da es möglich ist, dass Fehler beim Programmieren oder Lesen auftreten können und Fehler beim Speichern von Daten auftreten können (z. B. aufgrund von Driften von Elektronen, Datenhalteproblemen oder anderen Phänomenen), wird eine Fehlerkorrektur mit der Programmierung einer Seite von Daten verwendet. Viele Fehlerkorrektur-Codierungsschemata sind nach dem Stand der Technik gut bekannt. Diese herkömmlichen Fehlerkorrekturcodes (ECC) sind besonders nützlich bei großen Speichern, einschließlich Flash-Speichern (und anderen nichtflüchtigen), aufgrund der beträchtlichen Auswirkung auf die Produktionsausbeute und die Zuverlässigkeit der Vorrichtung, die derartige Codierungsschemata bereitstellen können, wenn sie Vorrichtungen, die einige nicht programmierbare oder defekte Zellen aufweisen, dahingehend ändern, dass sie nutzbar werden. Natürlich besteht ein Kompromiss zwischen der Ertragseinsparung und den Kosten des Bereitstellens zusätzlicher Speicherzellen, um die Codebits zu speichern (d. h. die Code-„Rate“). Als solches sind einige ECC-Codes besser geeignet für Flash-Speichervorrichtungen als andere. Generell neigen ECC-Codes für Flash-Speichervorrichtungen dazu, höhere Code-Raten (d. h. ein niedrigeres Verhältnis von Codebits zu Datenbits) als die in Datenkommunikationsanwendungen verwendeten Codes (die Code-Raten von nur 1/2 haben können) aufzuweisen. Beispiele für gut bekannte ECC-Codes, die üblicherweise in Verbindung mit einer Flash-Speicherspeicherung verwendet werden, schließen Reed-Solomon-Codes, andere BCH-Codes, Hamming-Codes und dergleichen ein. Manchmal sind die in Verbindung mit Flash-Speicherspeicherung verwendeten Fehlerkorrekturcodes dahingehend „systematisch“, dass der Datenteil des letztendlichen Codeworts von den eigentlichen Daten, die codiert werden, unverändert ist, wobei die Code- oder Paritätsbits an die Datenbits angehängt sind, um das vollständige Codewort zu bilden. In anderen Ausführungsformen sind die eigentlichen Daten geändert.
-
Die spezifischen Parameter für einen bestimmten Fehlerkorrekturcode schließen die Art des Codes, die Größe des Blocks tatsächlicher Daten, von denen das Codewort abgeleitet wird, und die Gesamtlänge des Codeworts nach der Codierung ein. Beispielsweise kann ein typischer BCH-Code, der auf 512 Bytes (4096 Bits) von Daten angewendet wird, bis zu vier Fehlerbits korrigieren, wenn mindestens 60 ECC- oder Paritätsbits verwendet werden. Reed-Solomon-Codes sind eine Teilsatz von BCH-Codes und werden auch allgemein zur Fehlerkorrektur verwendet. Zum Beispiel kann ein typischer Reed-Solomon-Code bis zu vier Fehler in einem 512 Byte-Datensektor korrigieren, wobei etwa 72 ECC-Bits verwendet werden. Im Kontext von Flash-Speichern bietet Fehlerkorrektur-Codierung eine wesentliche Verbesserung bei der Produktionsausbeute sowie bei der Zuverlässigkeit des Flash-Speichers im Zeitverlauf.
-
In einigen Ausführungsformen empfängt die Steuerung Host-Daten, die auch als Informationsbits bezeichnet werden, die in einer Speicherstruktur 326 zu speichern sind. Die Informationsbits werden durch die Matrix i=[1 0] dargestellt (es ist zu beachten, dass zwei Bits nur als Beispiel verwendet werden und viele Ausführungsformen Codeworte aufweisen, die länger als zwei Bits sind). Ein Fehlerkorrektur-Codierungsprozess (wie etwa einer der vor- bzw. nachstehend erwähnten Prozesse) wird implementiert, bei dem Paritätsbits zu den Informationsbits hinzugefügt werden, um Daten bereitzustellen, die durch die Matrix oder das Codewort v=[1 0 1 0] dargestellt sind, was anzeigt, dass zwei Paritätsbits an die Datenbits angehängt worden sind. Andere Techniken können verwendet werden, die Eingangsdaten auf komplexere Weise zu Ausgangsdaten zuweisen. Beispielsweise können Paritätsprüfcodes niedriger Dichte (LDPC), die auch als Gallager-Codes bezeichnet werden, verwendet werden. Mehr Details über LDPC-Codes sind in R. G. Gallager, „Low-density parity-check codes", Inform. Theory, Band IT 8, S. 21 28, Januar 1962; und D. MacKay, „Information Theory, Inference and Learning Algorithms", Cambridge University Press 2003, Kapitel 47, zu finden. In der Praxis werden derartige LDPC-Codes üblicherweise auf mehrere Seiten angewendet, die über eine Anzahl von Speicherelementen codiert sind, aber sie müssen nicht über mehrere Seiten hinweg angewendet werden. Die Datenbits können auf eine logische Seite abgebildet und in der dreidimensionalen Speicherstruktur 126 gespeichert werden, indem eine oder mehrere Speicherzellen in einen oder mehrere Programmierzustände programmiert werden, was v entspricht.
-
In einer möglichen Implementierung wird ein iterativer probabilistischer Decodierungsprozess verwendet, der Fehlerkorrekturdecodierung implementiert, die der in der Steuerung 120 implementierten Codierung entspricht. Weitere Einzelheiten hinsichtlich der iterativen probabilistischen Decodierung sind in dem vorstehend genannten Text von D. MacKay zu finden. Das iterative probabilistische Decodieren versucht, ein Codewort durch Zuweisen anfänglicher Wahrscheinlichkeitsmetriken zu jedem Bit in dem Codewort zu decodieren. Die Wahrscheinlichkeitsmetriken zeigen eine Zuverlässigkeit jedes Bits an, das heißt, wie wahrscheinlich es ist, dass das Bit nicht fehlerhaft ist. Bei einem Ansatz sind die Wahrscheinlichkeitsmetriken logarithmische Wahrscheinlichkeitsverhältnisse LLRs, die aus LLR-Tabellen erhalten werden. LLR-Werte sind Maße der Zuverlässigkeit, mit der die Werte von verschiedenen Binärbits, die aus den Speicherelementen gelesen werden, bekannt sind.
-
Das LLR für ein Bit ist durch
angegeben, wobei P (v=0|Y) die Wahrscheinlichkeit ist, dass ein Bit eine 0 ist, vorausgesetzt, dass der gelesene Zustand Y ist, und P (v=1|Y) die Wahrscheinlichkeit ist, dass ein Bit eine 1 ist, vorausgesetzt, dass der gelesene Zustand Y ist. Somit zeigt ein LLR>0 an, dass ein Bit wahrscheinlicher eine 0 ist als eine 1, während ein LLR<0 anzeigt, dass ein Bit wahrscheinlicher eine 1 ist als eine 0, um eine oder mehrere Paritätsprüfungen des Fehlerkorrekturcodes zu erfüllen. Ferner zeigt eine größere Größe eine größere Wahrscheinlichkeit oder Zuverlässigkeit an. Somit ist ein Bit mit einem LLR=63 wahrscheinlicher eine 0 als ein Bit mit einem LLR=5, und ein Bit mit einem LLR=-63 ist wahrscheinlicher eine 1 als ein Bit mit einem LLR=-5. LLR=0 zeigt an, dass das Bit gleichermaßen wahrscheinlich eine 0 oder eine 1 ist.
-
Ein LLR-Wert kann für jede der Bitpositionen in einem Codewort bereitgestellt werden. Ferner können die LLR-Tabellen die mehreren Leseergebnisse berücksichtigen, so dass ein LLR größerer Größe verwendet wird, wenn der Bitwert in den unterschiedlichen Codewörtern einheitlich ist.
-
Die Steuerung 120 empfängt das Codewort Y1 und die LLRs und iteriert in aufeinander folgenden Iterationen, in denen sie bestimmt, ob Paritätsprüfungen des Fehlercodierprozesses erfüllt wurden. Wenn alle Paritätsprüfungen erfüllt wurden, ist der Decodierprozess konvergiert und das Codewort wurde fehlerkorrigiert. Wenn eine oder mehrere Paritätsprüfungen nicht erfüllt wurden, wird der Decodierer die LLRs eines oder mehrerer der Bits anpassen, die mit einer Paritätsprüfung nicht übereinstimmen, und dann die Paritätsprüfung oder nächste Prüfung in dem Prozess erneut anwenden, um zu bestimmen, ob sie erfüllt wurde. Beispielsweise kann die Größe und/oder Polarität der LLRs eingestellt werden. Ist die betreffende Paritätsprüfung noch nicht erfüllt, kann das LLR in einer anderen Iteration erneut angepasst werden. Anpassen der LLRs kann zum Umkehren eines Bits (z. B. von 0 zu 1 oder von 1 zu 0) in einigen, aber nicht allen Fällen führen. In einer Ausführungsform wird eine weitere Paritätsprüfung auf das Codewort angewendet, falls anwendbar, sobald die fragliche Paritätsprüfung erfüllt ist. Bei anderen wechselt der Prozess zu der nächsten Paritätsprüfung, wobei zu einem späteren Zeitpunkt zu der nicht bestandenen Prüfung zurückgekehrt wird. Der Prozess setzt sich in einem Versuch fort, alle Paritätsprüfungen zu erfüllen. Somit ist der Decodierungsprozess von Y1 abgeschlossen, um die decodierten Informationen einschließlich der Paritätsbits v und der decodierten Informationsbits i zu erhalten.
-
Zurückkommend auf 9A sendet die Steuerung 120 in Schritt 510 Anweisungen an einen oder mehrere Speicherchips 206, um Daten zu programmieren. In Schritt 512 sendet die Steuerung 120 eine oder mehrere physische Adressen an einen oder mehrere Speicherchips 206. Die eine oder die mehreren Adressen zeigen an, wo die Daten zu programmieren sind. In Schritt 514 sendet die Steuerung 120 die zu programmierenden Daten an einen oder mehrere Speicherchips 206. Beispielsweise werden die Codewörter übertragen, die das Ergebnis des ECC-Prozesses sind. In Schritt 516 empfängt die Steuerung 120 ein Ergebnis der Programmierung von einem oder mehreren Speicherchips 206. Beispielhafte Ergebnisse schließen eine Anzeige ein, dass die Daten erfolgreich programmiert wurden, eine Anzeige, das der Programmiervorgang fehlgeschlagen ist, und die Anzeige, dass die Daten programmiert wurden, aber an einer anderen Stelle, oder ein anderes Ergebnis. In Schritt 518 meldet die Steuerung 120, als Antwort auf das in Schritt 516 empfangene Ergebnis, die Ergebnisse an den Host 102 (über die Host-Schnittstelle 152).
-
In einigen Ausführungsformen des Prozesses aus 9A wird die Steuerung 120, wenn die Daten der erste Datensatz sind, der zu einem Zielblock programmiert wird, den Speicherchip dann anweisen, den Block zu löschen, bevor der Speicherchip 206 angewiesen wird, in Schritt 510 zu programmieren. Der Gesamtprozess des Löschens eines Blocks und dann des Programmierens von Daten auf den Block ist als ein Programmier- und Löschzyklus bekannt. In einem Beispiel zeigt jeder Löschprozess, der an einem Block durchgeführt wird, einen weiteren Programmier- und Löschzyklus an.
-
9B ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Programmieren beschreibt. Der Prozess aus 9B wird von dem Speicherchip 206 in Reaktion auf die Schritte aus 9A (d. h. als Reaktion auf die Anweisungen, Daten und Adressen von der Steuerung 120) durchgeführt. In einer beispielhaften Ausführungsform wird der Prozess aus 9B an dem Speicherchip 206 in der Richtung der Zustandsmaschine 312 ausgeführt. Das Verfahren aus 9B kann verwendet werden, um die vorstehend besprochene Vollsequenzprogrammierung zu implementieren. Alternativ kann der Prozess aus 9B verwendet werden, um jede Phase eines mehrphasigen Programmierprozesses zu implementieren.
-
Üblicherweise wird die Programmierspannung, die an die Steuer-Gates (über eine ausgewählte Wortleitung) während eines Programmiervorgangs angelegt wird, als eine Reihe von Programmierimpulsen angelegt. Zwischen Programmierimpulsen befindet sich ein Satz von Prüfimpulsen, um eine Prüfung durchzuführen. In vielen Implementierungen wird die Größe der Programmierimpulse mit jedem sukzessiven Impuls durch eine vorbestimmte Schrittgröße erhöht. In Schritt 570 aus 9B wird die Programmierspannung (Vpgm) auf die Startgröße (z. B. -12 bis 16 V oder einen anderen geeigneten Pegel) initialisiert, und ein Programmzähler PC, der durch die Zustandsmaschine 312 unterhalten wird, wird bei 1 initialisiert. In Schritt 572 wird ein Programmierimpuls des Programmsignals Vpgm auf die ausgewählte Wortleitung (die zur Programmierung ausgewählte Wortleitung) angewendet. In einer Ausführungsform ist die Gruppe von Speicherzellen, die gleichzeitig programmiert werden, alle mit derselben Wortleitung (der ausgewählten Wortleitung) verbunden. Die nicht ausgewählten Wortleitungen empfangen eine oder mehrere Verstärkungsspannungen (z. B. ~7 bis 11 Volt), um Verstärkungsschemata durchzuführen, die nach dem Stand der Technik bekannt sind. Sollte eine Speicherzelle programmiert werden, so wird die entsprechende Bitleitung geerdet. Wenn andererseits die Speicherzelle auf ihrer gegenwärtigen Schwellenspannung bleiben sollte, dann wird die entsprechende Bitleitung mit Vdd verbunden, um Programmierung zu verhindern. In Schritt 572 wird der Programmierimpuls gleichzeitig an alle Speicherzellen angelegt, die mit der ausgewählten Wortleitung verbunden sind, so dass alle Speicherzellen, die mit der ausgewählten Wortleitung verbunden sind, gleichzeitig programmiert werden. Das heißt, sie werden zur gleichen Zeit oder während überlappenden Zeiten (die beide als gleichzeitig betrachtet werden) programmiert. Auf diese Weise ändern alle Speicherzellen, die mit der ausgewählten Wortleitung verbunden sind, gleichzeitig ihre Schwellenspannung, sofern sie nicht aus der Programmierung ausgeschlossen wurden.
-
In Schritt 574 werden die entsprechenden Speicherzellen unter Verwendung des geeigneten Satzes von Prüfreferenzspannungen verifiziert, um eine oder mehrere Verifizierungsvorgänge durchzuführen. In einer Ausführungsform wird der Verifizierungsprozess durchgeführt, indem getestet wird, ob die Schwellenspannungen der zur Programmierung ausgewählten Speicherzellen die entsprechende Prüfreferenzspannung erreicht haben (siehe z. B. Vv1, Vv2, Vv3, Vv4, Vv5, Vv6 und Vv7 aus 7). Speicherzellen, die nachgewiesenermaßen ihr Ziel erreicht haben, sind aus weiteren Iterationen des aktuellen Programmierprozesses aus 9B ausgeschlossen.
-
In Schritt 576 wird bestimmt, ob alle Speicherzellen ihre Zielschwellenspannungen erreicht (bestanden) haben. Falls dies der Fall ist, ist der Programmierprozess vollständig und erfolgreich, weil alle ausgewählten Speicherzellen auf ihre Zielzustände programmiert und verifiziert wurden. In Schritt 578 wird ein Status „BESTANDEN“ gemeldet. Falls in 576 bestimmt wird, dass nicht alle der Speicherzellen ihre Zielschwellenspannungen erreicht haben (fehlgeschlagen), fährt der Programmierprozess mit Schritt 580 fort. In Schritt 580 zählt das System die Anzahl von Speicherzellen, die noch nicht ihre jeweilige Zielschwellenspannungsverteilung erreicht haben. Das heißt, das System zählt die Anzahl von Speicherzellen, die bisher den Verifizierungsprozess nicht bestanden haben. Dieses Zählen kann durch die Zustandsmaschine, die Steuerung oder eine andere Logik erfolgen. In einer Implementierung speichert jeder der Leseblöcke den Status (bestanden/fehlgeschlagen) ihrer jeweiligen Zellen. In einer Ausführungsform gibt es einen Gesamtzählwert, der die Gesamtzahl der gegenwärtig programmierten Speicherzellen wiedergibt, die den letzten Prüfschritt nicht bestanden haben. In einer anderen Ausführungsform werden separate Zählwerte für jeden Datenzustand ermittelt.
-
In Schritt 582 wird bestimmt, ob der Zählwert von Schritt 580 kleiner oder gleich einem vorbestimmten Grenzwert ist. In einer Ausführungsform ist die vorbestimmte Grenze die Anzahl von Bits, die durch ECC während eines Leseprozesses für die Seite von Speicherzellen korrigiert werden können. Wenn die Anzahl der fehlerhaften Speicherzellen kleiner oder gleich der vorbestimmten Grenze ist, dann kann der Programmierprozess anhalten, und in Schritt 578 wird der Status „BESTANDEN“ gemeldet. In dieser Situation können ausreichend Speicherzellen korrekt programmiert werden, so dass die wenigen verbleibenden Speicherzellen, die nicht vollständig programmiert worden sind, unter Verwendung von ECC während des Lesevorgangs korrigiert werden können. In einer anderen Ausführungsform kann die vorbestimmte Grenze kleiner als die Anzahl von Bits sein, die durch ECC während eines Leseprozesses korrigiert werden können, um zukünftige Fehler einzuplanen. Zusätzlich kann, wenn weniger als alle Speicherzellen für eine Seite programmiert werden oder ein Zählwert für nur einen Datenzustand (oder weniger als alle Zustände) verglichen wird, die vorbestimmte Grenze ein Anteil (pro rata oder nicht pro rata) der Anzahl von Bits sein, die durch ECC während eines Leseprozesses für die Seite von Speicherzellen korrigiert werden können. In einigen Ausführungsformen ist die Grenze nicht vorbestimmt. Stattdessen ändert sie sich basierend auf der Anzahl der bereits für die Seite gezählten Fehler, der Anzahl der durchgeführten Programmier- und Löschzyklen oder anderer Kriterien.
-
Wenn die Anzahl fehlerhafter Speicherzellen nicht kleiner als die vorbestimmte Grenze ist, dann fährt der Programmierprozess mit Schritt 584 fort und der Programmzähler PC wird vergleichend mit dem Programmgrenzwert (PL) überprüft. Beispiele für Programmgrenzwerte schließen 12, 20 und 30 ein; es jedoch können auch andere Werte verwendet werden. Wenn der Programmzähler PC nicht kleiner als der Programmgrenzwert PL ist, dann wird der Programmprozess als fehlgeschlagen betrachtet und der Status „FEHLGESCHLAGEN“ wird in Schritt 588 gemeldet. Dies ist ein Beispiel für einen Programmfehler. Wenn der Programmzähler PC kleiner als der Programmgrenzwert PL ist, dann fährt der Prozess mit Schritt 586 fort, während der Programmzähler PC um 1 erhöht wird und die Programmierspannung Vpgm auf die nächste Größe erhöht wird. Zum Beispiel hat der nächste Impuls eine Größe, die um eine Schrittgröße (z. B. eine Schrittgröße von 0,1 bis 0,5 Volt) größer als der vorherige Impuls ist. Nach Schritt 586 kehrt der Prozess zu Schritt 572 zurück und ein weiterer Programmierimpuls wird an die ausgewählte Wortleitung angelegt, so dass eine weitere Iteration (Schritte 572 bis 586) des Programmierprozesses aus 9B durchgeführt wird.
-
Im Allgemeinen wird die ausgewählte Wortleitung während Prüfvorgängen (Schritt 574) und Lesevorgängen mit einer Spannung (ein Beispiel eines Referenzsignals) verbunden, deren Pegel für jeden Lesevorgang (siehe z. B. Lesereferenzspannungen Vr1, Vr2, Vr3, Vr4, Vr5, Vr6 und Vr7 aus 7) oder Prüfvorgang (siehe z. B. Prüfreferenzspannungen Vv1, Vv2, Vv3, Vv4, Vv5, Vv6 und Vv7 aus 7) spezifiziert ist, um zu bestimmen, ob eine Schwellenspannung der betreffenden Speicherzelle einen derartigen Pegel erreicht hat. Nach Anlegen der Wortleitungsspannung wird der Leitungsstrom der Speicherzelle gemessen, um zu bestimmen, ob die Speicherzelle als Reaktion auf die an die Wortleitung angelegte Spannung eingeschaltet ist (Strom leitet). Wenn der Leitungsstrom gemäß Messungen größer als ein bestimmter Wert ist, dann wird angenommen, dass die Speicherzelle eingeschaltet ist und die an die Wortleitung angelegte Spannung größer als die Schwellenspannung der Speicherzelle ist. Falls der Leitungsstrom gemäß Messungen nicht größer als der bestimmte Wert ist, dann wird angenommen, dass die Speicherzelle nicht eingeschaltet ist und die an die Wortleitung angelegte Spannung nicht größer als die Schwellenspannung der Speicherzelle ist. Während eines Lese- oder Verifizierungsprozesses werden die nicht ausgewählten Speicherzellen mit einer oder mehreren Lesedurchgangsspannungen an ihren Steuer-Gates versorgt, so dass diese Speicherzellen als Durchgangs-Gate fungieren (z. B. Strom leiten ungeachtet dessen, ob sie programmiert oder gelöscht sind).
-
Es gibt viele Wege, um den Leitungsstrom einer Speicherzelle während eines Lese- oder Prüfvorgangs zu messen. In einem Beispiel wird der Leitungsstrom einer Speicherzelle durch die Rate gemessen, mit der sie einen dedizierten Kondensator in dem Leseverstärker entlädt oder lädt. In einem anderen Beispiel ermöglicht der Leitungsstrom der ausgewählten Speicherzelle dem NAND-String, der die Speicherzelle einschließt (bzw. ermöglicht diesem nicht), eine entsprechende Bitleitung zu entladen. Die Spannung auf der Bitleitung wird nach einer Zeitspanne gemessen, um zu sehen, ob sie entladen wurde oder nicht. Es ist zu beachten, dass die hierin beschriebene Technologie mit verschiedenen Verfahren verwendet werden kann, die nach dem Stand der Technik zum Prüfen/Lesen bekannt sind. Andere Lese- und Prüftechniken, die nach dem Stand der Technik bekannt sind, können ebenfalls verwendet werden.
-
Schritt 572 aus 9B schließt das Anlegen eines Programmierspannungsimpulses an die ausgewählte Wortleitung ein. Schritt 574 aus 9B schließt eine Prüfung ein, die in einigen Ausführungsformen das Anlegen der Prüfreferenzspannungen an die ausgewählte Wortleitung aufweist. Da die Schritte 572 und 574 Teil einer iterativen Schleife sind, wird die Programmierspannung als eine Reihe von Spannungsimpulsen angelegt, die sich in der Größe erhöhen. Zwischen Spannungsimpulsen werden Prüfreferenzspannungen angelegt. Dies ist in 9C dargestellt, die Programmierspannungsimpulse 592, 594 und 596 zeigt, die während drei aufeinander folgenden Iterationen von Schritt 572 angelegt werden. Zwischen den Programmierspannungsimpulsen 592, 594 und 596 testet das System die Speicherzellen, um durch Anlegen der Prüfreferenzspannungen als Prüfimpulse zu bestimmen, ob Schwellenspannungen der Speicherzellen größer als die jeweiligen Prüfreferenzspannungen sind.
-
10 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Lesen von Daten beschreibt, die in einem nichtflüchtigen Speicher (z. B. der Speicherstruktur 126) gespeichert sind. In Schritt 602 empfängt die Steuerung 120 einen Befehl zum Lesen von Daten und eine logische Adresse von Host 102 (über die Host-Schnittstelle 152). In Schritt 604 wandelt die Steuerung 120 die in Schritt 602 empfangene logische Adresse in eine physikalische Adresse in dem Speicher 130 unter Verwendung des Übersetzungsmanagers TM und der L2P-Tabellen um. In Schritt 606 sendet die Steuerung 120 die physikalische Adresse und einen Befehl zum Lesen von Daten an den entsprechenden Speicherchip 206. In Schritt 608 erfasst der Speicherchip 206 als Reaktion auf den Befehl Informationen von der adressierten Seite. In einer Ausführungsform ist von der Steuerung 120 an den Speicherchip 206 gesendete Adresse eine Seitenadresse und Schritt 608 schließt das Erfassen des Datenzustands für die Speicherzellen an der adressierten Seite ein. In Schritt 610 werden die erfassten Informationen von dem Speicherchip 206 an die Steuerung 120 übermittelt.
-
In Schritt 612 aus 10 führt die Steuerung 120 den ECC-Decodierprozess durch (siehe ECC-Maschine 158). Es gibt viele verschiedene Fehlerkorrekturprozesse, die mit der hier beschriebenen Technologie verwendet werden können. Somit sind die hierin beschriebenen Prozesse, einschließlich der Prozesse der 9A und 10, nicht auf eine ECC-Technologie beschränkt. In einer Ausführungsform ist die Eingabe des Decodierprozesses die in Schritt 608 erfasste Information. Wenn der Decodierprozess erfolgreich ist, wird die Ausgabe des Decodierprozesses eine Datenlösung sein, die die Daten darstellt, die in dem nichtflüchtigen Speicher gespeichert sind. Zusätzlich identifiziert der Decodierprozess, wie viele Fehler in den Daten gefunden wurden und durch den Decodierprozess unter Verwendung von Fehlerkorrektur korrigiert wurden. Die Anzahl von Datenbits, die fehlerhaft waren und korrigiert wurden, wird als Bitfehlerrate (BER) bezeichnet. Wenn der Decodierprozess erfolgreich eine Lösung findet (Schritt 614), dann sendet die Steuerung 120 die decodierten Daten in Schritt 616 zurück. In einer Ausführungsform werden die Daten an den Host 102 zurückgesendet. In anderen Ausführungsformen können Daten für einen anderen Prozess innerhalb des Controllers 120 verwendet werden. Die BER wird von der Steuerung 120 zur Analyse, Protokollierung und/oder zur Vorhersage von Defekten gespeichert. Wenn in Schritt 614 bestimmt wird, dass der Decodierprozess nicht erfolgreich eine korrekte Lösung gefunden hat, dann sendet die Steuerung 120 in Schritt 618 eine Fehlermeldung zurück. Die Fehlermeldung kann an den Host 102 oder an einen anderen Prozess in der Steuerung 120 zurückgesendet werden. In Schritt 620 wird bestimmt, ob der gerade gelesene Block ein fehlerhafter Block ist. In einer Ausführungsform ist der gerade gelesene Block ein fehlerhafter Block, wenn er den Leseprozess nicht besteht, und wird daher als ein fehlerhafter Block markiert, so dass er nicht länger verwendet wird, um Host-Daten zu speichern (z. B. Daten, die von einem Host oder einer anderen Entität als dem Speichersystem empfangen werden). Zum Beispiel kann die Steuerung 120 bestimmen, dass ein Block fehlerhaft ist, da der Decodierprozess nicht zu einer Lösung geführt hat (z. B. zu viele zu behebende Fehler) oder die BER zu hoch war; daher wird der Block zu dem Pool aus fehlerhaften Blöcken BBP hinzugefügt (siehe 1) und nicht länger verwendet, um Host-Daten zu speichern. Ein Block kann auch als ein fehlerhafter Block bestimmt und in den Pool aus fehlerhaften Blöcken BBP platziert werden, wenn ein Programmiervorgang für diesen Block fehlschlägt. Wenn der Leseprozess fehlschlägt, weil die Steuerung die Daten nicht decodieren kann, bedeutet dies in einer anderen Ausführungsform nicht notwendigerweise, dass der Block fehlerhaft ist. In einer solchen Ausführungsform wird das System nach dem Fehlschlagen beim Lesen von Daten versuchen, den Block zu löschen. Wenn der Block erfolgreich gelöscht wird, dann wird der Block als ordnungsgemäßer Block betrachtet und kann verwendet werden, um Host-Daten zu speichern. Wenn der Block nicht gelöscht werden kann, dann wird der Block als fehlerhafter Block betrachtet und in dem Pool aus fehlerhaften Blöcken BBP platziert.
-
Wenn manche nichtflüchtige Speicher vielen Programmier- und Löschzyklen unterzogen werden, kann sich unerwünschte Ladung in Bereichen des Speichers ansammeln, die keine Ladung akkumulieren sollen. Beispielsweise kann, zurückgehend auf 5, nach vielen Programmier- und Löschzyklen Ladung eingefangen werden und sich in den Tunneldielektrikumbereichen TD der Speicherzellen 404 bis 410 aufbauen. Diese Ladung kann bewirken, dass die Speicherzellen schwieriger und langsamer zu programmieren sind und Fehler beim Lesen oder Löschen verursachen. In ähnlicher Weise kann, zurückgehend auf 6B, nach vielen Programmier- und Löschzyklen Ladung eingefangen werden und sich in der Tunneldielektrikumschicht 472 aufbauen, was die Speicherzellen schwieriger und langsamer zu programmieren machen und Fehler beim Lesen oder Löschen verursachen kann. Ladung kann auch in Ladungsfängerschicht 473 der Ausführungsform von 6B eingefangen werden oder migrieren, was auch zu Fehlern beim Programmieren, Löschen und Lesen führen kann. Die Fehler von dieser unerwünschten Akkumulation von Ladung können bewirken, dass ein ordnungsgemäßer Block von Speicherzellen ein fehlerhafter Block von Speicherzellen wird. Wie oben mit Bezug auf 10 erörtert, wird, wenn die Steuerung 120 bestimmt, dass ein Block ein fehlerhafter Block ist, dieser fehlerhafte Block zu dem Pool aus fehlerhaften Blöcken BBP hinzugefügt (siehe 1) und nicht länger verwendet, um Host-Daten zu speichern. Infolgedessen wird die Kapazität des Speichersystems verringert.
-
Es wurde festgestellt, dass Zulassen, dass ein solcher fehlerhafter Block mit unerwünschter Ladung, die sich in Bereichen des Speichers angesammelt hat, die keine solche Ladung ansammeln sollen, über einen langen Zeitraum (z. B. 1 bis 2 Monate) untätig bleibt, dazu führt, dass ein Teil der unerwünschten Ladungsakkumulation abgeleitet wird. Zum Beispiel migriert ein Teil der in Tunneldielektrikumbereichen TD eingefangenen Ladung zum Substrat 402 oder Floating-Gate FG, oder ein Teil der in der Tunneldielektrikumschicht 472 eingefangenen Ladung migriert zum Kanal 471 oder zur Ladungsfängerschicht 473. Diese Migration erfolgt bei höheren Temperaturen schneller. Aber das Erzwingen höherer Temperaturen kann andere Teile des Speichersystems 100 (z. B. Steuerung 120 oder Steuerschaltung 310) oder den Host 102 beschädigen. Wenn der Block für eine ausreichend lange Zeit (z. B. 1 bis 2 Monate) untätig sein darf, migriert genügend Ladung (z. B. Elektronen), so dass der Block während des Programmierens, Löschens und Lesens keine Fehler mehr zeigt. Infolgedessen wird der Block ein ordnungsgemäßer Block. Dieser Prozess zum Zulassen, dass der fehlerhafte Block untätig bleibt, so dass die unerwünschte Akkumulation von Ladung abgeführt wird, wird als Selbstheilung bezeichnet.
-
Daher wird vorgeschlagen, dass als Reaktion auf das Bestimmen, dass ein spezifischer Block ein fehlerhafter Block ist, die eine oder mehreren Steuerschaltungen des Speichersystems den spezifischen Block für einen Zeitraum untätig lassen, so dass während des Zeitrauaums der Ruhezeit kein Programmieren, Lesen oder Löschen für den spezifischen Block durchgeführt wird; Programmieren, Lesen und Löschen werden jedoch für andere Blöcke während dieses Zeitraums durchgeführt. Nachdem dem Zeitraum für die Untätigkeit abgeschlossen ist, testen der eine oder die mehreren Steuerschaltkreise des Speichersystems, ob der spezifische Block ein fehlerhafter Block oder ein ordnungsgemäßer Block ist. Wenn der spezifische Block jetzt wieder ein ordnungsgemäßer Block ist, dann kann der spezifische Block verwendet werden, um Host-Daten auf die gleiche Weise zu speichern, wie andere ordnungsgemäße Blöcke verwendet werden.
-
11 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Regenerieren von fehlerhaften Blöcken unter Verwendung einer Selbstheilung beschreibt. In Schritt 702 wird der Speicher hergestellt. Zum Beispiel wird jeder der Speicherchips 206 hergestellt. In Schritt 704, im Anschluss an die Herstellung der Speicherchips 206, wird jeder der Speicherchips seine Speicherstrukturen 326 getestet bekommen, um fehlerhafte Blöcke zu identifizieren. Blöcke können durch Programmieren und Lesen von Daten getestet werden. Jegliche Blöcke, über die herausgefunden wird, dass sie fehlerhafte Blöcke sind, werden in den Pool der fehlerhaften Blöcke (BBP) platziert. In einer Ausführungsform ist der Pool der fehlerhaften Blöcke eine Liste oder eine andere Identifikation von Blöcken, die als fehlerhaft bestimmt wurden. Diese Blöcke in dem Pool aus fehlerhaften Blöcken werden nicht verwendet, um Host-Daten zu speichern. Die Blöcke, von denen bei Tests während oder nach der Herstellung nicht herausgefunden wird, dass sie fehlerhaft sind, werden in den Pool der ordnungsgemäßen Blöcke (GBP) platziert. In einer Ausführungsform ist der Pool der ordnungsgemäßen Blöcke GBP (siehe 1) eine Liste oder eine andere Identifikation dieser Blöcke, die ordnungsgemäße Blöcke sind und zum Speichern der Host-Daten verfügbar sind. In einigen Ausführungsformen speichert das System keinen Pool aus ordnungsgemäßen Blöcken. Stattdessen wird angenommen, dass jeder Block, der sich nicht im Pool der fehlerhaften Blöcke befindet, ein ordnungsgemäßer Block ist.
-
In Schritt 706 führt das Speichersystem 100 eine oder mehrere Speichervorgänge an einem Block aus. Der Prozess aus 11 kann verwendet werden, um den Lebenszyklus eines einzelnen Blocks (jeglichen spezifischen Blocks) zu beschreiben. Somit wird in einer Ausführungsform der Prozess aus 11 an jedem Block eines Speichers durchgeführt. Schritt 706 schließt das Durchführen eines oder mehrerer Programmier- und Löschzyklen ein. Die in Schritt 706 ausgeführten Speichervorgänge werden von jeglicher einen oder mehreren Steuerschaltungen ausgeführt, die vorstehend besprochen werden. In Schritt 708 bestimmt ein beliebiger der einen oder mehreren Steuerschaltungen, dass der Block ein fehlerhafter Block ist. In einer beispielhaften Ausführungsform bestimmt die Steuerung 120 während des Prozesses aus 10, dass ein Block ein fehlerhafter Block ist. Zum Beispiel können die eine oder mehrere Schaltungen eingerichtet sein, um zu bestimmen, dass der spezifische Block (oder eine andere Gruppierung von nichtflüchtigen Speicherzellen) ein fehlerhafter Block ist, da der spezifische Block Ladung einschließt, die an einer falschen Position eingefangen ist, wie vorstehend beschrieben. In anderen Ausführungsformen kann die Zustandsmaschine 312 verwendet werden, um zu bestimmen, dass ein Block ein fehlerhafter Block ist. Ein Block kann auch als fehlerhafter Block betrachtet werden, wenn ein Programmiervorgang am Block fehlschlägt oder ein Löschvorgang fehlschlägt. Ein Löschvorgang schließt einen Löschverifizierungsvorgang ein, der die anzeigt, ob der Löschvorgang erfolgreich war oder fehlgeschlagen ist.
-
Falls bestimmt wird, dass in Block 708 ein Block fehlerhaft ist, wird dieser Block zu der Aktualisierungswarteschlange (RQ) hinzugefügt. In Schritt 710 veranlassen die eine oder die mehreren Steuerschaltungen, dass der Block (der in Schritt 708 als fehlerhafter Block bestimmt wurde) für einen Zeitraum untätig ist, um eine passive Selbstheilung des Blocks zu ermöglichen, ohne dass dem Block zusätzliche Wärme zugeführt wird. Indem der Block untätig gelassen wird, wird kein Programmieren, Löschen oder Lesen an dem Block durchgeführt. Während der Block in Schritt 710 untätig ist, werden Programmieren, Lesen und Löschen für andere Blöcke während des gleichen Zeitraums durchgeführt. Schritt 710 wird durchgeführt, ohne dass zusätzliche Wärme angewendet wird, insofern als kein Heizelement zu einem Speicherchip 206 und dem Speichersystem 100 hinzugefügt ist, um gezielt Wärme zuzufügen. Jedoch wird, sofern sich das Speichersystem 100 in einer elektronischen Vorrichtung befindet, die heiß ist, dies nicht als die Anwendung von zusätzlicher Wärme angesehen. Da keine zusätzliche Wärme bereitgestellt wird und es keinen beabsichtigten Vorgang gibt, der bewirkt, dass Elektronen oder andere Ladungen migrieren, wird der Selbstheilungsprozess von Schritt 710 als passiv betrachtet. Die Zeitdauer, während der der Block untätig bleibt, kann ein bis zwei Monate einschließen. In anderen Ausführungsformen kann weniger als ein Monat verwendet werden. In anderen Ausführungsformen können mehr als zwei Monate verwendet werden.
-
In Schritt 712 prüfen eine oder mehrere Steuerschaltungen den Erfolg des Selbstheilungsprozesses. Das heißt, dass entweder die Steuerung, die Zustandsmaschine oder eine andere Einheit bestimmt, ob die Selbstheilung erfolgreich war. Es ist nicht notwendig, dass der Block zu 100 % perfekt ist. Stattdessen muss das System bestimmen, ob der Block genug Selbstheilung erfahren hat, so dass es möglich ist, dass der Block ein ordnungsgemäßer Block wird. Die 12 und 13 (nachstehend besprochen) stellen beispielhafte Implementierungen von Schritt 712 bereit.
-
Falls bestimmt wird (Schritt 714), dass die Selbstheilung nicht erfolgreich war, dann verbleibt der Block in Schritt 716 für eine zusätzliche Zeitdauer in der Aktualisierungswarteschlange RQ, um zusätzliche passive Selbstheilung ohne Anwenden zusätzlicher Wärme zu ermöglichen. In einer Ausführungsform ist die zusätzliche Zeitdauer die gleiche wie die ursprüngliche Zeitdauer von Schritt 710. In einer anderen Ausführungsform ist die zusätzliche Zeitdauer von Schritt 716 ein Bruchteil der Zeitdauer, die in Schritt 710 für den Selbstheilungsprozess verwendet wird. Nach der zusätzlichen Zeitdauer in Schritt 716 kehrt der Prozess zu Schritt 712 zurück und versucht erneut, den Erfolg der zusätzlichen Selbstheilung zu verifizieren.
-
Wenn bestimmt wird (Schritt 714), dass die Selbstheilung erfolgreich war, dann wird der Block in Schritt 718 aktualisiert. In einer Ausführungsform wird ein Block aktualisiert, indem eine Löschoperation an dem Block durchgeführt wird. In Schritt 720 prüfen die eine oder mehreren Schaltungen den Erfolg der Aktualisierung des Blocks. Ein Beispiel für das Verifizieren des Erfolgs der Aktualisierung schließt das Durchführen einer Löschverifizierung ein. Beispielsweise kann, zurückgehend auf 7, das Löschen des Blocks bewirken, dass sich alle Speicherzellen in den Zustand 0 bewegen. Ein Löschprüfprozess kann prüfen, ob die Schwellenspannungen der Speicherzellen unter 0 Volt liegen. Andere Variationen können ebenfalls verwendet werden. Das Testen, ob die Aktualisierung erfolgreich war, ist eine Form des Bestimmens, ob der Block immer noch fehlerhaft ist. Wenn die Aktualisierung erfolgreich war (Schritt 722), so dass der Block nicht länger fehlerhaft ist (der Block ist nun ein ordnungsgemäßer Block), dann wird in Schritt 724 der Block in den Pool aus ordnungsgemäßen Blöcken GBP gesetzt, so dass der Block verwendet wird, um Host-Daten zu speichern. Wenn in Schritt 722 bestimmt wird, dass die Aktualisierung nicht erfolgreich war (das Testen bestimmte, dass der Block immer noch ein fehlerhafter Block ist), dann fährt der Prozess mit Schritt 716 fort, so dass der Block für eine zusätzliche Zeitdauer in der Aktualisierungswarteschlange RQ verbleibt, um zusätzliche passive Selbstheilung ohne Anwendung zusätzlicher Wärme zu ermöglichen. Nach der zusätzlichen Zeitdauer in Schritt 716 kehrt der Prozess zu Schritt 712 zurück und versucht erneut, den Erfolg der zusätzlichen Selbstheilung zu verifizieren. Wenn in einer alternativen Ausführungsform in Schritt 722 bestimmt wird, dass die Aktualisierung nicht erfolgreich war, dann wird der Block in den Pool aus fehlerhaften Blöcken BBP verschoben, so dass er nicht länger verwendet wird, um Host-Daten zu speichern. In einer Ausführungsform werden Blöcke in dem Pool aus fehlerhaften Blöcken BBP überhaupt nicht verwendet.
-
In einer Ausführungsform sind die eine oder die mehreren Steuerschaltungen eingerichtet, um einen gleichen Standard zum Bestimmen zu verwenden, ob der Block von Speicherzellen vor und nach dem Zeitraum von Schritt 710 ein ordnungsgemäßer Block oder ein fehlerhafter Block ist. Das heißt, dass der Standard, der verwendet wird, um einen Block als einen fehlerhaften Block zu identifizieren, der gleiche für Schritt 708 wie für die Schritte 720 und 722 ist.
-
Die Schritte 706 bis 726 aus 12 können durch eine beliebige oder mehreren Steuerschaltungen, die oben diskutiert wurden, durchgeführt werden. In einer Ausführungsform werden die Schritte 706 bis 726 aus 12 durch die Steuerung 120 ausgeführt.
-
12 ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Verifizieren einer Selbstheilung beschreibt. Das heißt, dass der Prozess aus 12 eine beispielhafte Implementierung von Schritt 712 aus 11 ist. Der Prozess aus 12 kann durch jegliche der einen oder mehreren Steuerschaltungen ausgeführt werden, die vorstehend diskutiert wurden. In einer Ausführungsform wird der Prozess aus 12 durch die Steuerung 120 durchgeführt. In Schritt 802 greifen die eine oder mehrere Schaltungen auf bekannte Daten zu. Der Prozess aus 12 beruht auf der Annahme, dass ein bekannter Satz von Daten in dem Block gespeichert wurde, bevor der Block ein fehlerhafter Block wurde. Zum Beispiel kann ein Zwei-Bytes-Muster an einer vorhersagbaren Position in dem Block gespeichert werden. In anderen Ausführungsformen können mehr oder weniger als zwei Bytes verwendet werden. Wie vorstehend besprochen, bilden in einer beispielhaften Implementierung alle Speicherzellen, die mit einer einzelnen Wortleitung verbunden sind, eine einzelne Seite von Daten. Wenn somit ein Block 64 Wortleitungen hat, dann gibt es 64 Seiten von Daten. 12A zeigt eine beispielhafte Architektur für eine Seite von Daten. Die Seite von Daten aus 12A schließt einen Header (HDR), gespeicherte Daten (DATA) und Fehlerkorrekturinformationen (ECC) ein. In einer Ausführungsform werden die Fehlerkorrekturinformationen mit den Daten kombiniert. Die Daten können Host-Daten sein, die im Auftrag von Host 102 gespeichert werden. Die Header-Informationen HDR schließen Informationen ein, die von der Steuerung 120 zum Verwalten des Speichers, einschließlich einer Angabe der physikalischen Adresse, Abnutzungsausgleichsinformationen, Speicherbereinigungsinformationen, Superblock-Identifikation usw. In einer Ausführungsform sind die zwei Bytes mit bekannten Daten KD an einer vorbestimmten Position innerhalb des Headers HDR, wie in 12A dargestellt, in der ersten Wortleitung eines Blocks, allen programmierten Wortleitungen eines Blocks oder einem Teilsatz von Wortleitungen gespeichert. Die gleichen bekannten Daten KD können in jedem einzelnen Block gespeichert werden und außerdem von der Steuerung 120 in dem flüchtigen Speicher 140 gespeichert werden. In Schritt 802 wird vom flüchtigen Speicher 140 (oder an einer anderen Position in dem nichtflüchtigen Speicher) zugegriffen.
-
In Schritt 804 programmieren die eine oder die mehreren Steuerschaltungen teilweise die bekannten Daten KD um, die bereits in dem Block gespeichert sind. Ein partielles Umprogrammieren schließt Programmieren ohne zunächst zu löschen ein. Zusätzlich schließt das partielle Umprogrammieren das Durchführen der Schritte 572 bis 586 aus 9B ein (ausgeführt durch die Zustandsmaschine in der Richtung der Steuerung), um eine kleine Anzahl von Programmierimpulsen hinzuzufügen, um die Daten zu reinigen. In Schritt 806 werden die bekannten Daten wieder vom Block gelesen (von der einen oder den mehreren Seiten). Schritt 806 schließt das Durchführen des Prozesses aus 10 ein, der Bestimmen der Bitfehlerrate (BER) der gelesenen Daten einschließt. In Schritt 808 wird die BER mit einer Referenz verglichen. Wenn die BER kleiner als die Referenz ist (Schritt 810), dann wird daraus gefolgert, dass der Selbstheilungsprozess erfolgreich war. Wenn die BER nicht kleiner als die Referenz war (Schritt 810), dann wird daraus gefolgert, dass der Selbstheilungsprozess nicht erfolgreich war.
-
13 ist ein Flussdiagramm, das eine andere Ausführungsform eines Prozesses zum Verifizieren des Erfolgs der Selbstheilung beschreibt. Das heißt, dass der Prozess aus 13 eine andere beispielhafte Implementierung von Schritt 712 ist. Der Prozess aus 13 kann durch jede beliebige der einen oder mehreren Steuerschaltungen ausgeführt werden, die vorstehend besprochen wurden. In einer Ausführungsform wird der Prozess aus 13 durch die Steuerung 120 durchgeführt. In der Ausführungsform von 13 haben die eine oder die mehreren Steuerschaltungen keine Kenntnis der bekannten Daten in dem Block. In Schritt 852 aus 13 lesen die eine oder die mehreren Steuerschaltungen Daten, die bereits in dem Block gespeichert sind. Zum Beispiel werden eine oder mehrere Seiten von dem Block gelesen. In einem Beispiel wird die erste Wortleitung (WL0) gelesen. Schritt 852 kann unter Verwendung des Prozesses aus 10 durchgeführt werden. Das Ergebnis von Schritt 852 ist eine Abschätzung der in dem Block gespeicherten Daten. In Schritt 854 werden die eine oder die mehreren Steuerschaltungen die gleichen Daten, die an die gleiche Position gelesen werden, teilweise umprogrammieren. Das teilweise Umprogrammieren schließt nicht Ausführen eines Löschprozesses ein. Stattdessen wird eine kleine Anzahl von Iterationen des Prozesses aus 9B durch die Zustandsmaschine in der Richtung der Steuerung durchgeführt. In einer anderen Ausführungsform kann das System Daten zu einer anderen Seite umprogrammieren. Verschiedene Alternativen können eine gewisse intelligente Kombination (zum Beispiel etwas wie XOR) aus Daten von zwei Seiten verwenden (die gleiche Position und eine andere Position) mit dem Ziel, einen intelligenten Umprogrammiervorgang durchzuführen, der den Zustand der Seite überprüfen kann. In Schritt 856 werden die Daten wieder unter Verwendung des Prozesses aus 10 zurückgelesen. Dies schließt Ermitteln der BER ein. In Schritt 858 vergleichen eine oder mehrere Steuerschaltungen die BER mit einer Referenz. Wenn die BER kleiner als die Referenz ist (Schritt 860), folgern die eine oder die mehreren Steuerschaltungen, dass der Selbstheilungsprozess erfolgreich war. Wenn die BER nicht kleiner als die Referenz ist (Schritt 860), dann wird in Schritt 864 gefolgert, dass der Selbstheilungsprozess nicht erfolgreich war.
-
14 ist ein Flussdiagramm, das eine Ausführungsform des Prozesses zum Abnutzungsausgleich beschreibt, wenn das vorstehend beschriebene Verfahren zur Regenerierung von fehlerhaften Blöcken implementiert wird. In Schritt 902 weisen die eine oder die mehreren Schaltungen benachbarte Blöcke in Teilsätzen von Blöcken zu. In einer Ausführungsform können die Blöcke bereits in Teilsätzen von Blöcken als Teil der Herstellung oder des Testens während der Herstellung strukturiert worden sein. Beispielsweise zeigt 15 einen Abschnitt 950 der Speicherstruktur 326, der eine Mehrzahl von Blöcken B einschließt. Benachbarte Blöcke in Abschnitt 950 sind in Teilsätze strukturiert, einschließlich Teilsatz 0, Teilsatz 1 und Teilsatz 2.
-
Das Speichersystem arbeitet in Phasen, wobei jede Phase während einer bestimmten Zeit durchgeführt wird. In Schritt 904 aus 14 weisen die eine oder die mehreren Steuerschaltungen (oder eine andere Einheit) jeden Teilsatz der Gruppen zu einer Phase des Betriebs zu. Zum Beispiel kann ein System mit drei Betriebsphasen einen der Phase 0 zugewiesenen Teilsatz 0, einen der Phase 1 zugewiesenen Teilsatz 1 und einen der Phase 2 zugewiesenen Teilsatz 2 haben. Das Speichersystem arbeitet mit der Zeit unter Verwendung eines sich wiederholenden Phasenzyklus. Das heißt, dass die erste Phase 0 durchgeführt wird, gefolgt von der Durchführung der Phase 1, gefolgt von der Durchführung der Phase 2, gefolgt von der Durchführung der Phase 0, gefolgt von der Durchführung der Phase 1, gefolgt von der Durchführung der Phase 2, gefolgt von der Durchführung der Phase 0 etc. In jeder Phase werden Speichervorgänge um ein Vielfaches mehr für den Teilsatz von Blöcken durchgeführt, der dieser Phase zugewiesen ist, verglichen mit anderen Teilsätzen der Blöcke. Beispielsweise werden während Phase 0 die Blöcke von Teilsatz 0 einer großen Anzahl von Speichervorgängen unterzogen, während die Blöcke von Teilsatz 1 und/oder Teilsatz 2 0 oder einer sehr kleinen Anzahl von Speichervorgängen unterzogen werden können. Somit wird jeder Block in einer Gruppe, die gerade in der Phase ist, der der Block zugeordnet ist, intensiver abgenutzt als andere Blöcke, die dieser Phase nicht zugewiesen sind. Die Blöcke der aktuellen Gruppe, die in der aktuellen Phase aktiv ist, treffen wahrscheinlich häufiger auf Fehler und enden wahrscheinlicher in der vorstehend besprochenen Aktualisierungswarteschlange RQ. Dann, wenn nachfolgende Phasen durchgeführt werden, können diese Blöcke in der Aktualisierungswarteschlange untätig bleiben. Somit können, zurückgehend auf 11, Speichervorgänge von Schritt 706 für einen Block ausgeführt werden, wenn dieser Block seine zugewiesene Phase erlebt, und den Zeitraum für Untätigkeit in Schritt 710, wenn dieser Block eine Phase erlebt, der er nicht zugewiesen ist.
-
16 zeigt graphisch den Prozess aus 14, wobei sie Phase 0, Phase 1, Phase 2, Phase 0, ... zeigt. Falls mehr Platz auf der Seite wäre, könnte 16 zusätzliche Wiederholung der Phase 1, 2, 0, 1, 2, 0 usw. zeigen. 16 zeigt drei Graphen. Der obere Graph zeigt Programmier- und Löschzyklen für Teilsatz 0. Der mittlere Graph zeigt Programmier- und Löschzyklen für Teilsatz 1. Der dritte Graph zeigt Programmier- und Löschzyklen für Teilsatz 2. Wie zu sehen ist, ist die Anzahl der Programmier- und Löschzyklen für Teilsatz 0 während der Phase 0 sehr hoch, und die Anzahl der Programmier-Löschzyklen für Teilsatz 1 und Teilsatz 2 ist niedrig. Während der Phase 1 ist die Anzahl der Programmier- und Löschzyklen für Teilsatz 1 sehr hoch, und die Anzahl der Programmier- und Löschzyklen für Teilsätze 0 und 2 ist sehr niedrig. Während der Phase 2 ist die Anzahl der Programmier- und Löschzyklen für Teilsatz 2 sehr hoch, und die Anzahl der Programmier- und Löschzyklen für Teilsätze 0 und 1 ist sehr niedrig. Daher zeigt 16 graphisch das Durchführen von um ein Vielfaches mehr Speichervorgänge an einem ersten Teilsatz der Blöcke während eines ersten Zeitraums im Vergleich zu Speichervorgängen, die in anderen Teilsätzen der Blöcke während des ersten Zeitraums ausgeführt werden; und Durchführen von um ein Vielfaches mehr Speichervorgängen an einem zweiten Teilsatz der Gruppen während eines zweiten Zeitraums im Vergleich zu Speichervorgängen, die an anderen Teilsätzen der Blöcke während des zweiten Zeitraums durchgeführt werden; und Durchführen von um ein Vielfaches mehr Speichervorgängen an einem dritten Teilsatz der Gruppen während eines dritten Zeitraums im Vergleich zu Speichervorgängen, die an anderen Teilsätzen der Blöcke während dieses dritten Zeitraums durchgeführt werden.
-
Obwohl die vorstehende Besprechung einen Block nichtflüchtiger Speicherzellen als eine Einheit zum Bearbeiten für das Regenerieren fehlerhafter Blöcke verwendet hat, können in anderen Ausführungsformen andere Arten von Gruppen von nichtflüchtigen Speicherzellen verwendet werden. Beispiele schließen einen Superblock oder einen Unterblock ein. Ein Superblock ist die Aggregation von mehreren Blöcken. Ein Unterblock ist ein Abschnitt eines Blocks. Man beachte, dass manchmal ein Block als ein Löschblock bezeichnet werden kann.
-
Eine Ausführungsform schließt eine nichtflüchtige Speichervorrichtung ein, die eine Mehrzahl von nichtflüchtigen Speicherzellen aufweist, die als Gruppen von nichtflüchtigen Speicherzellen angeordnet sind, und eine oder mehrere Steuerschaltungen, die mit den nichtflüchtigen Speicherzellen verbunden sind und eingerichtet sind, um zu bestimmen, dass eine spezifische Gruppe von nichtflüchtigen Speicherzellen eine fehlerhafte Gruppe ist, und um die spezifische Gruppe für einen Zeitraum untätig zu lassen, so dass keine Programmierung oder Löschung für die spezifische Gruppe während des Zeitraums durchgeführt wird und Programmierung für andere Gruppen von nichtflüchtigen Speicherzellen während des Zeitraums durchgeführt wird. Die eine oder die mehreren Steuerschaltungen sind eingerichtet, um zu bestimmen, dass die spezifische Gruppe nach dem Zeitraum nicht mehr eine fehlerhafte Gruppe ist, und die spezifische Gruppe zum Speichern von Host-Daten als Reaktion darauf zu verwenden, dass die Gruppe nicht mehr eine fehlerhafte Gruppe ist.
-
In einer Ausführungsform sind die eine oder die mehreren Steuerschaltungen eingerichtet, um einen gleichen Standard zu verwenden, um zu bestimmen, ob die spezifische Gruppe von nichtflüchtigen Speicherzellen vor und nach dem Zeitraum eine ordnungsgemäße Gruppe oder eine fehlerhafte Gruppe ist und nach dem Zeitraum.
-
Ein Ausführungsbeispiel schließt ein Verfahren zum Betreiben eines nichtflüchtigen Speichers ein, aufweisend: Bestimmen, dass ein Block nichtflüchtiger Speicherzellen ein fehlerhafter Block ist; Belassen des Blocks für einen Zeitraum in untätigem Zustand, um eine passive Selbstheilung des Blocks zu ermöglichen; Verifizieren des Erfolgs der Selbstheilung; und Verwenden des Blocks, um Host-Daten nach dem Verifizieren des Erfolgs der Selbstheilung zu speichern.
-
Eine Ausführungsform schließt eine Vorrichtung ein, die Folgendes aufweist: eine Host-Schnittstelle; eine Speicherschnittstelle; und Mittel, die mit der Host-Schnittstelle und der Speicherschnittstelle verbunden sind, um zu bestimmen, dass ein Block nichtflüchtiger Speicherzellen fehlerhaft ist, den Block ohne Anwendung zusätzlicher Wärme selbst heilen zu lassen und den Block zum Speichern von Host-Daten nach der Selbstheilung zu verwenden.
-
Beispiele für ein Mittel zum Bestimmen, dass ein Block nichtflüchtiger Speicherzellen fehlerhaft ist, schließen die Komponenten der Steuerung 120, wie beispielsweise Prozessor 156 und/oder ECC-Maschine 158, ein, die beide durch Software (einschließlich Firmware) programmiert werden können oder als kundenspezifische Schaltung ohne Software implementiert werden können. Diese Komponenten führen die Prozesse aus 10 bis 14 aus.
-
Beispiele für ein Mittel, das es dem Block ermöglicht, ohne Anwendung zusätzlicher Wärme selbst zu heilen, schließen die Komponenten der Steuerung 120, wie beispielsweise Prozessor 156 und/oder ECC-Maschine 158, ein, die beide durch Software (einschließlich Firmware) programmiert werden können oder als kundenspezifische Schaltung ohne Software implementiert sein können. Diese Komponenten führen die Prozesse aus 11 bis 14 aus.
-
Ein Beispiel für ein Mittel zum Verwenden des Blocks zum Speichern von Host-Daten nach der Selbstheilung schließt die Komponenten der Steuerung 120, wie beispielsweise Prozessor 156 und/oder ECC-Maschine 158, ein, die beide durch Software (einschließlich Firmware) programmiert werden können oder als kundenspezifische Schaltung ohne Software implementiert werden können. Diese Komponenten führen die Prozesse aus 9A bis 14 aus.
-
Für die Zwecke dieses Dokuments kann eine Bezugnahme in der Beschreibung auf „eine Ausführungsform“, „einige Ausführungsformen“ oder „eine andere Ausführungsform“ verwendet werden, um verschiedene Ausführungsformen oder dieselbe Ausführungsform zu beschreiben.
-
Für die Zwecke dieses Dokuments kann eine Verbindung eine direkte Verbindung oder eine indirekte Verbindung (z. B. über ein oder mehrere andere Teile) sein. In einigen Fällen kann, wenn ein Element als mit einem anderen Element verbunden oder gekoppelt bezeichnet wird, das Element direkt mit dem anderen Element verbunden sein oder indirekt über dazwischen liegende Elemente mit dem anderen Element verbunden sein. Wenn ein Element als direkt mit einem anderen Element verbunden bezeichnet wird, dann gibt es keine dazwischen liegende Elemente zwischen dem Element und dem anderen Element. Zwei Vorrichtungen sind „in Kommunikationsverbindung“, wenn sie direkt oder indirekt verbunden sind, so dass sie elektronische Signale zwischen ihnen kommunizieren können.
-
Für die Zwecke dieses Dokumentes kann der Begriff „basierend auf“ als „zumindest teilweise basierend auf“ gelesen werden.
-
Für die Zwecke dieses Dokuments impliziert ohne zusätzlichen Kontext die Verwendung numerischer Ausdrücke, wie z. B. ein „erstes“ Objekts, ein „zweites“ Objekts und ein „drittes“ Objekts möglicherweise keine Sortierung von Objekten, sondern kann stattdessen zu Identifikationszwecken verwendet werden, um verschiedene Objekte zu identifizieren.
-
Für die Zwecke dieses Dokuments kann sich der Ausdruck „Satz“ von Objekten auf einen „Satz“ von einem oder mehreren der Objekte beziehen.
-
Die vorhergehende detaillierte Beschreibung wurde zu Zwecken der Veranschaulichung und Beschreibung vorgelegt. Sie soll nicht erschöpfend sein oder die genaue offenbarte Form beschränken. Viele Modifikationen und Variationen sind im Lichte der obigen Lehre möglich. Die beschriebenen Ausführungsformen wurden gewählt, um die Prinzipien der vorgeschlagenen Technologie und ihrer praktischen Anwendung am besten zu erklären, um es anderen Fachleuten dadurch zu ermöglichen, sie in verschiedenen Ausführungsformen und mit verschiedenen Modifikationen, wie sie für die spezifische beabsichtigte Verwendung geeignet sind, am besten zu verwenden. Es ist beabsichtigt, dass der Schutzumfang durch die hier beigefügten Ansprüche definiert ist.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
-
Zitierte Nicht-Patentliteratur
-
- R. G. Gallager, „Low-density parity-check codes“, Inform. Theory, Band IT 8, S. 21 28, Januar 1962 [0037]
- D. MacKay, „Information Theory, Inference and Learning Algorithms“, Cambridge University Press 2003, Kapitel 47 [0037]