-
HINTERGRUND
-
Wenn Daten in einen nichtflüchtigen Speicher geschrieben werden, der eine Multi-Level-Cell(MLC)-Konfiguration aufweist, wird das Verfahren üblicherweise durch Speichern jedes der Vielzahl von Bits für eine Zelle in einem Direktzugriffsspeicher (RAM) in der Speichersteuerung für alle Zellen in einer vollständigen Wortleitung in dem Speicher und anschließendes Fortfahren mit einem mehrstufigen Programmiervorgang durchgeführt, um in jede Multi-Bit-Zelle Ladung einzugeben, um den für diese Zelle gewünschten programmierten Zustand zu erreichen. Üblicherweise wird bei der mehrstufigen Programmierung zunächst ein Teil der Zustände mit erweiterten Spannungsverteilungen programmiert (der Programmierschritt „Foggy“), gefolgt von einer abschließenden Programmierung aller Zustände mit enger Spannungsverteilung (der Programmierschritt „Fein“). Als Teil dieses mehrstufigen Programmiervorgangs und für jeden der mehreren Programmierschritte kann der Speicher in der Steuerung eine Kopie aller zu programmierenden Datenbits in einer Zelle speichern und die Fehlerkorrekturcode-Bits (Error Correction Code Bits, ECC-Bits) für die Daten verarbeiten. Falls die in dem Foggy-Programmierschritt programmierten Daten aus dem Speicherarray fehlerfrei gelesen oder innerhalb des Speicherchips zuverlässig decodiert werden können, um den folgenden Fein-Programmierschritt zu aktivieren, müssen die Foggy-Daten nicht bis zum Fein-Schritt vorübergehend in der Speichersteuerung gespeichert werden und der Speicherpuffer innerhalb der Speichersteuerung kann in der Größe reduziert werden.
-
Figurenliste
-
- 1A ist ein Blockdiagramm eines nichtflüchtigen Speichersystems einer Ausführungsform.
- 1B ist ein Blockdiagramm, das ein Speichermodul einer Ausführungsform veranschaulicht.
- 1C ist ein Blockdiagramm, das ein hierarchisches Speichersystem einer Ausführungsform veranschaulicht.
- 2A ist ein Blockdiagramm, das Komponenten der Steuerung des in 1A veranschaulichten nichtflüchtigen Speichersystems gemäß einer Ausführungsform veranschaulicht.
- 2B ist ein Blockdiagramm, das Komponenten des in 1A veranschaulichten nichtflüchtigen Speichersystems gemäß einer Ausführungsform veranschaulicht.
- 3 ist ein Diagramm und ein Graph, welche eine 3-4-4-4-Codierung einer Ausführungsform veranschaulichen.
- 4 ist ein Flussdiagramm eines Verfahrens einer Ausführungsform.
- 5 ist ein Flussdiagramm eines anderen Verfahrens einer Ausführungsform.
- 6 ist ein Graph eines Verfahrens einer Ausführungsform zum Verwenden eines Codierschemas, um einen Lesevorgang zu unterstützen.
-
DETAILLIERTE BESCHREIBUNG
-
Nun Bezug nehmend auf die Zeichnungen, sind in 1A bis 1C Speichersysteme dargestellt, welche zum Realisieren von Gesichtspunkten dieser Ausführungsformen geeignet sind. 1A ist ein Blockdiagramm, welches ein nichtflüchtiges Speichersystem 100 (hierin manchmal als eine Speichervorrichtung oder lediglich als eine Vorrichtung bezeichnet) gemäß einer Ausführungsform des hierin beschriebenen Gegenstands veranschaulicht. Bezug nehmend auf 1A schließt das nichtflüchtige Speichersystem 100 eine Steuerung 102 und einen nichtflüchtigen Speicher, der aus einem oder mehreren nichtflüchtigen Speicherchips 104 bestehen kann, ein. Wie hierin verwendet, bezieht sich der Begriff „Die“ auf die Sammlung von nichtflüchtigen Speicherzellen und eine zugeordnete Schaltung zum Verwalten des physischen Betriebs dieser nichtflüchtigen Speicherzellen, die auf einem einzelnen Halbleitersubstrat gebildet sind. Die Steuerung 102 bildet mit einem Hostsystem eine Schnittstelle und überträgt Befehlssequenzen für Lese-, Programmier- und Löschvorgänge zu dem nichtflüchtigen Speicherchip 104.
-
Die Steuerung 102 (welche eine Steuerung eines nichtflüchtigen Speichers (z. B. eines Flash-Speichers, eines resistiven Direktzugriffsspeichers (Re-RAM), eines Phasenwechselspeichers (PCM) oder eines magnetoresistiven Direktzugriffsspeichers (MRAM) sein kann)) kann zum Beispiel die Form einer Verarbeitungsschaltung, eines Mikroprozessors oder Prozessors und eines computerlesbaren Mediums annehmen, welches computerlesbaren Programmcode (z. B. Firmware) speichert, der von dem (Mikro-)Prozessor, Logikgattern, Schaltern, einer anwendungsspezifischen integrierten Schaltung (ASIC), einer programmierbaren Logiksteuerung und einem eingebetteten Mikrocontroller ausführbar ist. Die Steuerung 102 kann mit Hardware und/oder Firmware eingerichtet sein, um die verschiedenen Funktionen durchzuführen, die unten beschrieben und in den Flussdiagrammen gezeigt sind. Außerdem können einige der Komponenten, die als innerhalb der Steuerung gezeigt sind, auch außerhalb der Steuerung gespeichert werden, und andere Komponenten können verwendet werden. Zusätzlich könnte der Ausdruck „operativ in Kommunikation mit“ direkt in Kommunikation mit oder indirekt (verdrahtet oder drahtlos) in Kommunikation mit durch eine oder mehrere Komponenten, die hierin gezeigt oder beschrieben sein können oder nicht gezeigt oder beschrieben sein können, bedeuten.
-
Wie hierin verwendet, ist eine nichtflüchtige Speichersteuerung eine Vorrichtung, die auf nichtflüchtigem Speicher gespeicherte Daten verwaltet und mit einem Host, wie einem Computer oder einer elektronischen Vorrichtung, kommuniziert. Eine nichtflüchtige Speichersteuerung kann verschiedene Funktionalität zusätzlich zu der hierin beschriebenen spezifischen Funktionalität aufweisen. Zum Beispiel kann die nichtflüchtige Speichersteuerung den nichtflüchtigen Speicher formatieren, um sicherzustellen, dass der Speicher ordnungsgemäß arbeitet, schlechte nichtflüchtige Speicherzellen auszugrenzen und Ersatzzellen zuzuordnen, die künftige fehlerhafte Zellen ersetzen sollen. Ein Teil der Ersatzzellen kann verwendet werden, um Firmware aufzunehmen, um die nichtflüchtige Speichersteuerung zu betreiben und andere Merkmale zu implementieren. Wenn ein Host im Betrieb Daten aus dem nichtflüchtigen Speicher lesen oder Daten in diesen schreiben muss, kann er mit der nichtflüchtigen Speichersteuerung kommunizieren. Wenn der Host eine logische Adresse bereitstellt, in die Daten gelesen/geschrieben werden sollen, kann die nichtflüchtige Speichersteuerung die von dem Host empfangene logische Adresse in eine physische Adresse in der nichtflüchtigen Speichersteuerung umwandeln. (Alternativ kann der Host die physische Adresse bereitstellen.) Die nichtflüchtige Speichersteuerung kann auch verschiedene Speicherverwaltungsfunktionen durchführen, wie, ohne darauf beschränkt zu sein, einen Abnutzungsausgleich (Verteilen von Schreibvorgängen, um zu vermeiden, dass bestimmte Speicherblöcke, die ansonsten wiederholt beschrieben würden, abgenutzt werden) und eine Speicherbereinigung (nachdem ein Block voll ist, werden nur die gültigen Datenseiten in einen neuen Block bewegt, sodass der volle Block gelöscht und wiederverwendet werden kann). Außerdem kann die Struktur für die in den Ansprüchen aufgeführten „Mittel“ zum Beispiel einige oder alle der hierin beschriebenen Strukturen der Steuerung einschließen, die dementsprechend programmiert oder hergestellt sind, um zu bewirken, dass die Steuerung so arbeitet, dass die aufgeführten Funktionen ausgeführt werden.
-
Der nichtflüchtige Speicherchip 104 kann jedes geeignete nichtflüchtige Speichermedium, einschließlich Resistive Random-Access Memory (ReRAM), Magnetoresistive Random-Access Memory (MRAM), Phase-Change Memory (PCM), NAND-Flash-Speicherzellen und/oder NOR-Flash-Speicherzellen, einschließen. Die Speicherzellen können die Form von Festkörperspeicherzellen (z. B. Flash-Speicherzellen) annehmen und können einmalig programmierbar, mehrfach programmierbar oder vielfach programmierbar sein. Die Speicherzellen können auch Single-Level Cells (SLC), Multiple-Level Cells (MLC), Triple-Level Cells (TLC) oder andere Speicherzellen-Level-Technologien sein, die jetzt bekannt sind oder später entwickelt werden. Außerdem können die Speicherzellen auf zweidimensionale oder dreidimensionale Weise hergestellt werden.
-
Die Schnittstelle zwischen der Steuerung 102 und dem nichtflüchtigen Speicherchip 104 kann eine beliebige geeignete Flash-Schnittstelle sein, wie beispielsweise Toggle-Modus 200, 400 oder 800. In einer Ausführungsform kann das Speichersystem 100 ein kartenbasiertes System sein, wie eine Secure Digital-Karte (SD-Karte) oder eine micro Secure Digital-Karte (micro-SD). In einer alternativen Ausführungsform kann das Speichersystem 100 Teil eines eingebetteten Speichersystems sein.
-
Obwohl in dem in 1A veranschaulichten Beispiel das nichtflüchtige Speichersystem 100 (hierin manchmal als Speichermodul bezeichnet) einen einzigen Kanal zwischen der Steuerung 102 und dem nichtflüchtigen Speicherchip 104 einschließt, ist der hierin beschriebene Gegenstand nicht auf einen einzigen Speicherkanal beschränkt. Zum Beispiel können in einigen Speichersystemarchitekturen (wie den in 1B und 1C gezeigten) abhängig von Steuerungsfähigkeiten 2, 4, 8 oder mehr Speicherkanäle zwischen der Steuerung und der Speichervorrichtung vorhanden sein. In jeder der hierin beschriebenen Ausführungsformen kann mehr als ein einziger Kanal zwischen der Steuerung und dem Speicherchip vorhanden sein, selbst wenn in den Zeichnungen ein einziger Kanal gezeigt ist.
-
1B veranschaulicht ein Speichermodul 200, das mehrere nichtflüchtige Speichersysteme 100 einschließt. Deshalb kann das Speichermodul 200 eine Speichersteuerung 202 einschließen, die mit einem Host und mit einem Speichersystem 204, das eine Vielzahl von nichtflüchtigen Speichersystemen 100 einschließt, verbunden ist. Die Schnittstelle zwischen der Speichersteuerung 202 und den nichtflüchtigen Speichersystemen 100 kann eine Busschnittstelle sein, wie eine Serial-Advanced-Technology-Attachment(SATA)-Schnittstelle, eine Peripheral-Component-Interface-express(PCIe)-Schnittstelle oder eine Double-Data-Rate(DDR)-Schnittstelle. Das Speichermodul 200 kann in einer Ausführungsform ein Solid State Drive (SSD) oder ein Non-Volatile Dual In-line Memory Module (NVDIMM) sein, wie es in einem Server-PC oder in tragbaren Rechenvorrichtungen, wie Laptop-Computern und Tablet-Computern, zu finden ist.
-
1C ist ein Blockdiagramm, das ein hierarchisches Speichersystem veranschaulicht. Ein hierarchisches Speichersystem 250 schließt eine Vielzahl von Speichersteuerungen 202 ein, von denen jede ein entsprechendes Speichersystem 204 steuert. Host-Systeme 252 können über eine Busschnittstelle auf Speicher innerhalb des Speichersystems zugreifen. In einer Ausführungsform kann die Busschnittstelle eine Non-Volatile-Memory-Express(NVMe)-Schnittstelle oder eine Fibre-Channel-over-Ethernet(FCoE)-Schnittstelle sein. In einer Ausführungsform kann das in 1C veranschaulichte System ein Rack-montierbares Massenspeichersystem sein, auf das von mehreren Host-Computern zugegriffen werden kann, wie es in einem Datenzentrum oder an einem anderen Ort, an dem eine Massenspeicherung benötigt wird, zu finden ist.
-
2A ist ein Blockdiagramm, das Komponenten der Steuerung 102 detaillierter veranschaulicht. Die Steuerung 102 schließt ein Frontend-Modul 108, das mit einem Host verbunden ist, ein Backend-Modul 110, das mit dem einen oder den mehreren nichtflüchtigen Speicherchips 104 verbunden ist, und verschiedene andere Module, die Funktionen durchführen, die nun ausführlich beschrieben werden, ein. Ein Modul kann zum Beispiel die Form einer gepackten funktionellen Hardwareeinheit, die zur Verwendung mit anderen Komponenten konzipiert ist, eines Abschnitts eines Programmcodes (z. B. Software oder Firmware), der durch einen (Mikro-)Prozessor oder eine Verarbeitungsschaltung, die üblicherweise eine bestimmte Funktion von verwandten Funktionen durchführt, ausführbar ist, oder einer eigenständigen Hardware- oder Softwarekomponente, die mit einem größeren System verbunden ist, annehmen. Die Steuerung 102 kann hierin manchmal als NAND-Steuerung oder eine Flash-Steuerung bezeichnet werden, es versteht sich jedoch, dass die Steuerung 102 mit jeder geeigneten Speichertechnologie verwendet werden kann, wobei für einige von diesen nachstehend Beispiele bereitgestellt werden.
-
Unter erneuter Bezugnahme auf Module der Steuerung 102 verwaltet eine Pufferverwaltung/Bussteuerung 114 Puffer in Direktzugriffsspeicher (RAM) 116 und steuert die interne Buszuteilung der Steuerung 102. Ein Nur-Lese-Speicher (ROM) 118 speichert den System-Boot-Code. Obwohl sie in 2A als von der Steuerung 102 getrennt angeordnet veranschaulicht sind, können in anderen Ausführungsformen einer oder beide von dem RAM 116 und dem ROM 118 innerhalb der Steuerung angeordnet sein. In wiederum anderen Ausführungsformen können Teile des RAM und des ROM sowohl innerhalb der Steuerung 102 als auch außerhalb der Steuerung angeordnet sein.
-
Das Frontend-Modul 108 schließt eine Host-Schnittstelle 120 und eine physische Schnittstelle (PHY) 122 ein, welche die elektrische Schnittstelle mit dem Host oder der Speichersteuerung der nächsten Ebene bereitstellen. Die Wahl des Typs der Host-Schnittstelle 120 kann von dem Typ des verwendeten Speichers abhängen. Beispiele für Host-Schnittstellen 120 schließen, ohne jedoch darauf beschränkt zu sein, SATA, SATA Express, Serially Attached Small Computer System Interface (SAS), Fibre Channel, Universal Serial Bus (USB), PCle und NVMe ein. Die Host-Schnittstelle 120 unterstützt üblicherweise die Übertragung von Daten, Steuersignalen und Taktsignalen.
-
Das Backend-Modul 110 schließt eine Fehlerkorrekturcode-Maschine (ECC-Maschine) 124 ein, welche die von dem Host empfangenen Datenbytes codiert und die aus dem nichtflüchtigen Speicher gelesenen Datenbytes decodiert und Fehler korrigiert. Ein Befehlssequenzierer 126 erzeugt Befehlssequenzen wie Programmier- und Löschbefehlssequenzen zur Übermittlung an den nichtflüchtigen Speicherchip 104. Ein RAID-Modul (Redundant Array of Independent Drives-Modul) 128 verwaltet die Erzeugung von RAID-Parität und die Wiederherstellung fehlerhafter Daten. Die RAID-Parität kann als zusätzliche Ebene des Integritätsschutzes für die Daten verwendet werden, die in die Speichervorrichtung 104 geschrieben werden. In einigen Fällen kann das RAID-Modul 128 ein Teil der ECC-Maschine 124 sein. Eine Speicherschnittstelle 130 stellt die Befehlssequenzen für den nichtflüchtigen Speicherchip 104 bereit und empfängt Statusinformationen von dem nichtflüchtigen Speicherchip 104. In einer Ausführungsform kann die Speicherschnittstelle 130 eine Double-Data-Rate(DDR)-Schnittstelle sein, wie eine Schnittstelle für den Toggle-Modus 200, 400 oder 800. Eine Flash-Steuerschicht 132 steuert den Gesamtbetrieb des Backend-Moduls 110.
-
Das Speichersystem 100 schließt auch andere diskrete Komponenten 140 ein, wie externe elektrische Schnittstellen, externen RAM, Widerstände, Kondensatoren oder andere Komponenten, die mit der Steuerung 102 verbunden sein können. In alternativen Ausführungsformen sind eine oder mehrere der physischen Schnittstelle 122, des RAID-Moduls 128, der Medienverwaltungsschicht 138 und der Pufferverwaltungs-/Bussteuerung 114 optionale Komponenten, die in der Steuerung 102 nicht erforderlich sind.
-
2B ist ein Blockdiagramm, das Komponenten des nichtflüchtigen Speicherchips 104 detaillierter veranschaulicht. Der nichtflüchtige Speicherchip 104 schließt eine Peripherieschaltung 141 und ein nichtflüchtiges Speicherarray 142 ein. Das nichtflüchtige Speicherarray 142 schließt die nichtflüchtigen Speicherzellen ein, die zum Speichern von Daten verwendet werden. Die nichtflüchtigen Speicherzellen können beliebige geeignete nichtflüchtige Speicherzellen sein, einschließlich ReRAM-, MRAM-, PCM-, NAND-Flash-Speicherzellen und/oder NOR-Flash-Speicherzellen in einer zweidimensionalen und/oder dreidimensionalen Konfiguration. Der nichtflüchtige Speicherchip 104 schließt weiterhin einen Datencache 156 ein, der Daten zwischenspeichert. Die Peripherieschaltung 141 schließt eine Zustandsmaschine 152, die Statusinformationen an die Steuerung 102 bereitstellt, ein.
-
Zurückkehrend zu 2A, behandelt die Flash-Steuerschicht 132 (die hierin als Flash-Übersetzungsschicht (FTL) oder allgemeiner als die „Medienverwaltungsschicht“ bezeichnet wird, da der Speicher möglicherweise kein Flash-Speicher ist) Flash-Fehler und Schnittstellen mit dem Host. Insbesondere ist die FTL, die ein Algorithmus in Firmware sein kann, für die internen Vorgänge der Speicherverwaltung verantwortlich und übersetzt Schreibvorgänge vom Host in Schreibvorgänge in den Speicher 104. Die FTL kann benötigt werden, da der Speicher 104 möglicherweise eine begrenzte Lebensdauer aufweist, möglicherweise nur in Vielfachen von Seiten beschrieben wird und/oder möglicherweise nicht beschrieben wird, sofern er nicht als Block gelöscht wird. Die FTL kennt diese potenziellen Einschränkungen des Speichers 104, die für den Host möglicherweise nicht sichtbar sind. Dementsprechend versucht die FTL, die Schreibvorgänge vom Host in Schreibvorgänge in den Speicher 104 zu übersetzen.
-
Die FTL kann eine logisch-physische Adressabbildung (L2P) (hierin manchmal als eine Tabelle oder eine Datenstruktur bezeichnet) und einen zugewiesenen Cache-Speicher einschließen. Auf diese Weise übersetzt die FTL logische Blockadressen („LBAs“) vom Host in physische Adressen im Speicher 104. Die FTL kann andere Merkmale einschließen, wie, ohne darauf beschränkt zu sein, eine Stromabschaltwiederherstellung (so dass die Datenstrukturen der FTL im Fall eines plötzlichen Leistungsverlusts wiederhergestellt werden können) und einen Verschleißausgleich (so dass der Verschleiß über Speicherblöcke gleichmäßig ist, um zu verhindern, dass bestimmte Blöcke übermäßigem Verschleiß unterliegen, was zu einer größeren Wahrscheinlichkeit eines Ausfalls führen würde).
-
Wie oben erwähnt, wird, wenn Daten in einen nichtflüchtigen Speicher geschrieben werden, der eine Multi-Level-Cell(MLC)-Konfiguration aufweist, das Verfahren üblicherweise durch Speichern jedes der Vielzahl von Bits für eine Zelle in einem Direktzugriffsspeicher (RAM) in der Speichersteuerung für alle Zellen in einer vollständigen Wortleitung in dem Speicher und anschließendes Fortfahren mit einem mehrstufigen Programmiervorgang durchgeführt, um in jede Multi-Bit-Zelle Ladung einzugeben, um den für diese Zelle gewünschten programmierten Zustand zu erreichen. Üblicherweise wird bei der mehrstufigen Programmierung zunächst ein Teil der Zustände mit erweiterten Spannungsverteilungen programmiert (der Programmierschritt „Foggy“), gefolgt von einer abschließenden Programmierung aller Zustände mit enger Spannungsverteilung (der Programmierschritt „Fein“). Als Teil dieses mehrstufigen Programmiervorgangs und für jeden der mehreren Programmierschritte kann der Speicher in der Steuerung eine Kopie aller zu programmierenden Datenbits in einer Zelle speichern und die Fehlerkorrekturcode-Bits (Error Correction Code Bits, ECC-Bits) für die Daten verarbeiten. Falls die in dem Foggy-Programmierschritt programmierten Daten aus dem Speicherarray fehlerfrei gelesen oder innerhalb des Speicherchips zuverlässig decodiert werden können, um den folgenden Fine-Programmierschritt zu aktivieren, müssen die Foggy-Daten nicht bis zum Fein-Schritt vorübergehend in der Speichersteuerung gespeichert werden und der Speicherpuffer innerhalb der Speichersteuerung kann in der Größe reduziert werden. Foggy-Fein Programmierschemata sind zum Programmieren von Multi-Level-Cell-Speichern gut bekannt.
-
Wenn ein fehlerfreies internes Foggy-Lesen innerhalb des Speicherchips (d. h. das Internal-Data-Load(IDL)-Lesen) nicht möglich ist, müssen die Foggy-Daten in einem Schreibpuffer innerhalb der Speichersteuerung zwischengespeichert werden, um während der Fein-Stufe wiederverwendet zu werden. Die Größe des Speicherschreibpuffers, die erforderlich ist, um eine Foggy-Fein-Programmierung zu ermöglichen, wächst mit zunehmender Anzahl an Speicherebenen und Strings, was zum Zweck der Verringerung der Speicherkosten bei fortschreitenden Speichergenerationen der allgemeine Trend ist. Beispielweise kann ein Speicher mit 6 Strings x 4 Ebenen x 4 Seiten von 16 KB je einen Schreibpuffer von -1,5 MB je Speicherchip erfordern, was die Steuerungskosten erheblich erhöht. Daher wäre ein Schema äußerst wünschenswert, welches ein zuverlässiges Foggy-Lesen innerhalb des Speicherchips (IDL-Lesen) ermöglicht.
-
Ein solches Schema ist ein MLC-Fein-Programmierschema, bei welchem während der Foggy-Stufe zwei Seiten programmiert werden („MLC“-Programmierung) und zwei Seiten in der Fein-Stufe hinzugefügt werden. Eine solche MLC-Fein-Programmierung reduziert den erforderlichen Schreibpuffer erheblich auf -128 KB bis 256 KB je Chip. Ein solches Programmierschema erfordert einen Spielraum für ein MLC-Internal-Data-Load(IDL)-Lesen. Ein IDL-Lesen wird angewendet, um Speicherzellen nach dem Programmieren der ersten Seite(n), aber vor dem Programmieren der zweiten Seite(n) zurückzulesen. Durch dieses Lesen kann die erste Seite in einen Satz von Daten-Latches auf dem Speicherchip gespeichert werden und es kann dazu führen, dass die erste Seite von Daten in die Daten-Latches geladen wird, ohne dass Daten von dem Chip zu den Daten-Latches übertragen werden.
-
Jedoch kann nicht jede Zustandscodierung einen solchen Spielraum bereitstellen. Beispielsweise stellt die ausgeglichene 3-4-4-4-Codierung für QLC, die in 6 dargestellt ist, keinen solchen Spielraum bereit. Eine nicht ausgeglichene Codierung wie 2-3-5-5 oder 1-2-6-6 kann einen Spielraum für ein IDL-Lesen bereitstellen, kann aber eine unausgeglichene BER und tR je Seite induzieren, welche unerwünscht sind. Daher kann es zum Zweck des Ausgleichs von BER und tR zwischen Seiten erwünscht sein, eine Zustandscodierung mit einer ausgeglichenen Anzahl an Übergängen je Seite (d. h. die 3-4-4-4-Codierung) zu verwenden.
-
Da eine QLC-Foggy-Fein-Programmierung jedoch einen sehr großen Schreibpuffer erfordert, kommt eine MLC-Fein-Programmierung in Betracht. Die MLC-Fein-Programmierung erfordert dadurch einen wesentlich kleineren Schreibpuffer, dass sie auf die Fähigkeit angewiesen ist, ein IDL-Lesen der MLC-Seite durchzuführen, wodurch die Notwendigkeit vermieden wird, sie in dem Steuerungs-Schreibpuffer zu speichern. Dies kann die erforderliche Schreibpuffergröße für QLC von 1536 KB auf 128 KB bis 256 KB verringern. Das Problem besteht darin, dass fast alle ausgeglichenen 3-4-4-4-Abbildungen nicht gut für die MLC-Fein-Programmierung passen, da sie keinen ausreichenden Spielraum für das IDL-Lesen bereitstellen. Unausgeglichene Abbildungen wie die 2-3-5-5- und die 1-2-6-6-Codierung können einen größeren Spielraum für das IDL-Lesen bereitstellen, führen jedoch zu einer unausgeglichenen Bitfehlerrate (Bit Error Rate, BER) je Seite. Eine unausgeglichene BER je Seite bedeutet, dass mehr ECC-Redundanz erforderlich ist, um die gleiche Zuverlässigkeit zu erreichen (da der ECC die schlechteste Seite bewältigen muss). Dies wiederum verringert die Speicherkosteneffizienz, da für den ECC mehr Datenaufwand zugewiesen werden muss.
-
Die folgenden Ausführungsformen stellen eine alternative 3-4-4-4-Codierung bereit, welche einen hohen Spielraum für das MLC-IDL-Lesen bereitstellt. Im Allgemeinen offenbaren diese Ausführungsformen einen MLC-Fein-Programmieransatz unter Verwendung einer ausgeglichenen 3-4-4-4-Codierung, wobei die Daten durch Zuweisen einer eindeutigen Binärsequenz je Zustand codiert werden. Das IDL-Lesen (d. h. das interne Lesen der MLC-Daten) wird unterstützt, indem eine eindeutige 3-4-4-4-Codierung verwendet wird, welche eine mindestens drei Zustände umfassende Lücke zwischen den MLC-Zuständen bereitstellt, während dieselbe ECC-Redundanz je Seite verwendet wird. Dies ermöglicht einen verringerten Schreibpuffer durch Unterstützen des IDL-Lesens und stellt aufgrund des ausgeglichenen Abbildens eine ausgeglichene Bitfehlerrate (BER) bereit.
-
Der folgende Absatz erläutert die Auswirkung der Zustandscodierung auf die erwartete BER und die Empfindlichkeit der BER gegenüber einem Zustandspositionierungs-Jitter, wodurch eine Motivation zum Verwenden einer ausgeglichenen Zustandscodierung bereitgestellt wird.
-
Bezüglich der Auswirkung der Zustandscodierung auf die BER ist in einer Ausführungsform ein ECC-Codewort in einer logischen Seite enthalten („nicht-verschachtelte Codierung“). Dies bedeutet, dass wir von der schlechtesten Seite innerhalb der Wortleitung abhängen. Es ist daher erwünscht, die BER zwischen verschiedenen Seiten auszugleichen. Die Verwendung einer nicht ausgeglichenen Zustandscodierung macht ein Anpassen der Verifizierungsniveaus erforderlich, um die Zustandsverteilungen auf eine Weise ungleichmäßig zu positionieren, die für alle logischen Seiten eine gleiche BER induzieren würde. Dies gibt es nicht zum Nulltarif, da eine unausgeglichene Codierung zwei Nachteile aufweist. Zunächst wird durch den ungleichmäßigen Abstand der Zustände bei gegebenem Spannungsfenster und gegebener Zustandsbreite die BER angehoben. Zum anderen wird die Empfindlichkeit für einen etwaigen „Jitter“ in der Position der Verteilung erhöht. Da der Speicher unter variablen Betriebsbedingungen (z. B. P/E, DR, Xtemp, Störungen usw.) arbeitet, können wir niemals unter allen Bedingungen eine einwandfreie Positionierung der Zustände gewährleisten. Aufgrund des Vorstehenden ist es äußerst wünschenswert, eine ausgeglichene 3-4-4-4-Zustandscodierung zu verwenden.
-
In einer Ausführungsform wird eine neue 3-4-4-4-Zustandscodierung bereitgestellt, um diese Probleme zu überwinden. Diese Codierung stellt einen höheren Spielraum für das IDL-Lesen der MLC-Seite bereit, wodurch eine MLC-Fein-Programmierung ermöglicht werden kann. Wie in 3 dargestellt, programmiert die MLC-Stufe die Zustände S0, S3, S6 und S10, was einen mindestens drei Zustände umfassenden Spielraum für das IDL-Lesen ergibt.
-
4 ist ein Flussdiagramm 1200 eines Verfahrens einer Ausführungsform. Wie in 4 dargestellt, wird ein QLC-3-4-4-4-Gray-Code bereitgestellt (Vorgang 1210). In diesem Code induzieren die ersten beiden Seiten (ohne Verlust der Allgemeinheit) eine MLC-Gray-Codierung mit einem Spielraum eines mindestens zwei Zustände umfassenden Unterschieds (Vorgang 1210). Die ersten beiden Seiten (die untere und die mittlere) werden dann als MLC programmiert (Vorgang 1220). Anschließend wird die MLC-Programmierstufe auf Chip (ohne Fehlerkorrektur) gelesen (verifiziert) (Vorgang 1230). Dann werden die obere und die oberste Seite programmiert, um eine QLC-Verteilung zu induzieren (Vorgang 1240).
-
In Bezug auf die Handhabung eines nicht ordnungsgemäßen Herunterfahrens (Ungraceful Shutdown, UGSD) kann das Speichersystem im Fall eines Schreibabbruchs (Write Abort, WA) aufgrund eines Stromausfalls die Daten in den vier Latches in den SLC-Speicher programmieren (unter Verwendung von Kondensatorenergie). Während des Einschaltens werden die Daten wiederhergestellt, indem die SLC-Seiten (welche den Zustand der Latches während des WA enthalten) und die QLC-Seite, für die das Schreiben abgebrochen wurde, gelesen werden. Für jede Zelle zeigt der Latch-Zustand an, ob die Zelle bereits verifiziert/gesperrt wurde, wobei in diesem Fall ihre QLC-Daten gültig sind, oder ob sie noch nicht verifiziert wurde, wobei in diesem Fall ihre SLC-DATEN die gültigen Daten sind.
-
Alternativ können das XOR (L-Seiten über alle Strings) und das XOR (M-Seiten über alle Strings) in SLC gespeichert werden. In diesem Beispiel werden einmal für jede X QLC-Seiten zwei SLC-Seiten programmiert, wobei X die Anzahl der Strings innerhalb des Speicherchips ist. Im Fall eines Stromausfalls während der Programmierung der MLC-Stufe werden die beiden XOR-Seiten in SLC geleert. Die untere und die mittlere Seite können nach dem Einschalten aus den XOR-Seiten und den anderen erfolgreich programmierten Seiten wiederhergestellt werden. Im Fall eines Stromausfalls während der Fein-Stufe können die oberste und die obere Seite in SLC geleert werden. Die untere und die mittlere Seite können nach dem Einschalten aus den XOR-Seiten und den anderen erfolgreich programmierten Seiten wiederhergestellt werden. Die oberste und die obere Seite können aus den geleerten SLC-Seiten wiederhergestellt werden.
-
5 ist ein Flussdiagramm 1300 eines anderen Verfahrens einer Ausführungsform. Wie in 5 dargestellt, werden die ersten beiden MLC-Seiten (die untere und die mittlere) programmiert und ihr XOR zwischengespeichert (Vorgang 1310). Dann wird die MLC-Programmierstufe auf dem Speicherchip unter Verwendung der temporären XOR-Seite gelesen (verifiziert) und decodiert (Vorgang 1320). Anschließend werden die obere und die oberste QLC-Seite programmiert (Vorgang 1230).
-
6 ist ein Graph, welcher diese Ausführungsform der Verwendung einer herkömmlichen 3-4-4-4-Zustandscodierung (welche keinen Spielraum für ein IDL-Lesen bereitstellt) mit XOR (L, M) veranschaulicht, um ein IDL-Lesen zu unterstützen. In dieser Ausführungsform wird die herkömmliche 3-4-4-4-Abbildung verwendet, um MLC-Fein zu unterstützen, indem das XOR (L, M) im Steuerungs-Schreibpuffer gespeichert wird und diese XOR-Seite während der Fein-Stufe zum Zweck des IDL-Lesens zum NAND übertragen wird. Unter Verwendung der XOR-Seite (L, M) können wir das IDL-Lesen mit ausreichendem Spielraum durchführen. Wenn das XOR-Bit 0 ist, dann war der MLC-Zustand, der programmiert wurde (0 oder 4), und wenn das XOR-Bit 1 ist, dann ist der MLC-Zustand, der programmiert wurde (2 oder 12). Somit können wir das IDL-Lesen durchführen, indem zwei Richtungen ausgegeben werden, eine zwischen 0 und 4 und die andere zwischen 2 und 12, und das betreffende Ergebnis kann basierend auf dem XOR-Bit ausgewählt werden. Der Schreibpuffer je Chip für dieses Schema kann 64 KB * 1 str * 2 Seiten + 64 KB * Xstr * 1 Seite (XOR) = (X + 2) * 64 KB sein.
-
Schließlich kann, wie oben erwähnt, jeder geeignete Speichertyp verwendet werden. Halbleiterspeichervorrichtungen schließen flüchtige Speichervorrichtungen ein, wie etwa Dynamic Random Access Memory-Vorrichtungen („DRAM-Vorrichtungen“) oder Static Random Access Memory-Vorrichtungen („SRAM-Vorrichtungen“), nichtflüchtige Speichervorrichtungen, wie etwa Resistive Random Access Memory („ReRAM“), Electrically Erasable Programmable Read Only Memory („EEPROM“), Flash-Speicher (der auch als Untergruppe eines EEPROM betrachtet werden kann), Ferroelectric Random Access Memory („FRAM“) und Magnetoresistive Random Access Memory („MRAM“), und andere Halbleiterelemente, die Informationen speichern können. Jeder Typ von Speichervorrichtung kann unterschiedliche Konfigurationen aufweisen. Zum Beispiel können Flash-Speichervorrichtungen in einer NAND- oder NOR-Konfiguration eingerichtet sein.
-
Die Speichervorrichtungen können aus passiven und/oder aktiven Elementen in beliebigen Kombinationen gebildet sein. Als ein nicht einschränkendes Beispiel schließen passive Halbleiterspeicherelemente ReRAM-Vorrichtungselemente ein, die in einigen Ausführungsformen ein Speicherelement mit Widerstandsumschaltung, wie eine Anti-Sicherung, Phasenwechselmaterial usw., und optional ein Lenkelement, wie eine Diode usw., einschließen. Weiterhin schließen als nicht einschränkendes Beispiel aktive Halbleiterspeicherelemente EEPROM- und Flash-Speicher-Vorrichtungselemente ein, die in einigen Ausführungsformen Elemente einschließen, die einen Ladungsspeicherbereich, wie ein Floating-Gate, leitende Nanopartikel oder ein dielektrisches Material zur Ladungsspeicherung, einschließen.
-
Mehrere Speicherelemente können derart eingerichtet sein, dass sie in Reihe geschaltet sind, oder derart, dass jedes Element einzeln zugänglich ist. Als nicht einschränkendes Beispiel enthalten Flash-Speichervorrichtungen in einer NAND-Konfiguration (NAND-Speicher) üblicherweise Speicherelemente, die in Reihe geschaltet sind. Ein NAND-Speicherarray kann derart eingerichtet sein, dass das Array aus mehreren Speicherketten zusammengesetzt ist, in denen eine Kette aus mehreren Speicherelementen zusammengesetzt ist, die sich eine einzelne Bitleitung teilen und auf die als eine Gruppe zugegriffen wird. Alternativ können Speicherelemente derart eingerichtet sein, dass jedes Element einzeln zugänglich ist, z. B. ein NOR-Speicherarray. NAND- und NOR-Speicherkonfigurationen sind Beispiele, und Speicherelemente können anderweitig eingerichtet sein.
-
Die Halbleiterspeicherelemente, die in und/oder über einem Substrat angeordnet sind, können in zwei oder drei Dimensionen angeordnet sein, wie einer zweidimensionalen Speicherstruktur oder einer dreidimensionalen Speicherstruktur.
-
In einer zweidimensionalen Speicherstruktur sind die Halbleiterspeicherelemente in einer einzelnen Ebene oder einer einzelnen Speichervorrichtungsebene angeordnet. Üblicherweise sind Speicherelemente in einer zweidimensionalen Speicherstruktur in einer Ebene (z. B. in einer x-z-Richtung-Ebene) angeordnet, die sich im Wesentlichen parallel zu einer Hauptoberfläche eines Substrats erstreckt, das die Speicherelemente trägt. Das Substrat kann ein Wafer sein, über oder in dem die Schicht der Speicherelemente gebildet ist, oder es kann ein Trägersubstrat sein, das an den Speicherelementen befestigt wird, nachdem diese gebildet werden. Als ein nicht einschränkendes Beispiel kann das Substrat einen Halbleiter, wie Silizium, einschließen.
-
Die Speicherelemente können auf der einzelnen Speichervorrichtungsebene in einem geordneten Array angeordnet sein, wie in einer Vielzahl von Zeilen und/oder Spalten. Jedoch können die Speicherelemente in nicht regelmäßigen oder nicht orthogonalen Konfigurationen angeordnet sein. Die Speicherelemente können jeweils zwei oder mehr Elektroden oder Kontaktleitungen, wie Bitleitungen und Wortleitungen, aufweisen.
-
Ein dreidimensionales Speicherarray ist derart angeordnet, dass Speicherelemente 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 y-Richtung im Wesentlichen senkrecht ist und die x- und z-Richtungen im Wesentlichen parallel zu der 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 zu der Hauptoberfläche des Substrats erstrecken, d. h. in y-Richtung) angeordnet sein, wobei jede Spalte mehrere Speicherelemente in jeder Spalte aufweist. Die Spalten können in einer zweidimensionalen Konfiguration angeordnet sein, z. B. in einer x-z-Ebene, was in einer dreidimensionalen Anordnung von Speicherelementen mit Elementen auf mehreren vertikal gestapelten Speicherebenen resultiert. Andere Konfigurationen von Speicherelementen in drei Dimensionen können ebenfalls ein dreidimensionales Speicherarray bilden.
-
Als nicht einschränkendes Beispiel können in einem dreidimensionalen NAND-Speicherarray die Speicherelemente miteinander gekoppelt sein, um eine NAND-Kette innerhalb einer einzelnen horizontalen (z. B. x-y-) Speichervorrichtungsebenen zu bilden. Alternativ können die Speicherelemente miteinander gekoppelt sein, um eine vertikale NAND-Kette zu bilden, die über mehrere horizontale Speichervorrichtungsebenen verläuft. Andere dreidimensionale Konfigurationen können in Betracht gezogen werden, wobei einige NAND-Ketten Speicherelemente in einer einzelnen Speicherebene enthalten, während andere Ketten Speicherelemente enthalten, die sich über mehrere Speicherebenen erstrecken. Dreidimensionale Speicherarrays können auch als eine NOR-Konfiguration und als eine ReRAM-Konfiguration ausgelegt sein.
-
Üblicherweise werden in einem monolithischen dreidimensionalen Speicherarray eine oder mehrere Speichervorrichtungsebenen über einem einzelnen Substrat gebildet. Optional kann das monolithische dreidimensionale Speicherarray auch eine oder mehrere Speicherschichten mindestens teilweise innerhalb des einzelnen Substrats aufweisen. Als ein nicht einschränkendes Beispiel kann das Substrat einen Halbleiter, wie Silizium, einschließen. In einem monolithischen dreidimensionalen Array werden die Schichten, die jede Speichervorrichtungsebene des Arrays bilden, üblicherweise auf den Schichten der darunter liegenden Speichervorrichtungsebenen des Arrays gebildet. Jedoch können Schichten von benachbarten Speichervorrichtungsebenen eines monolithischen dreidimensionalen Speicherarrays gemeinsam genutzt werden oder Zwischenschichten zwischen Speichervorrichtungsebenen aufweisen.
-
Dann können wiederum zweidimensionale Arrays getrennt gebildet und dann zusammengepackt werden, um eine nicht monolithische Speichervorrichtung mit mehreren Speicherschichten zu bilden. Zum Beispiel können nicht monolithische gestapelte Speicher konstruiert werden, indem Speicherebenen auf separaten Substraten gebildet und dann die Speicherebenen übereinander gestapelt werden. Die Substrate können vor dem Stapeln gedünnt oder von den Speichervorrichtungsebenen entfernt werden, aber da die Speichervorrichtungsebenen anfänglich über separaten Substraten gebildet werden, sind die resultierenden Speicherarrays keine monolithischen dreidimensionalen Speicherarrays. Weiterhin können mehrere zweidimensionale Speicherarrays oder dreidimensionale Speicherarrays (monolithisch oder nicht monolithisch) auf separaten Chips gebildet und dann zusammengepackt werden, um eine gestapelte Chip-Speichervorrichtung zu bilden.
-
Eine zugehörige Schaltung ist üblicherweise für den Betrieb der Speicherelemente und für die Kommunikation mit den Speicherelementen erforderlich. Als nicht einschränkende Beispiele können Speichervorrichtungen Schaltungen aufweisen, die zum Steuern und Ansteuern von Speicherelementen verwendet werden, um Funktionen, wie Programmieren und Lesen, auszuführen. Diese zugehörige Schaltung kann sich auf demselben Substrat wie die Speicherelemente und/oder auf einem separaten Substrat befinden. Zum Beispiel kann eine Steuerung für Schreib-/Lesevorgänge des Speichers auf einem separaten Steuerungschip und/oder auf demselben Substrat wie die Speicherelemente angeordnet sein.
-
Ein Fachmann wird erkennen, dass diese Erfindung nicht auf die beschriebenen zweidimensionalen und dreidimensionalen Strukturen beschränkt ist, sondern alle relevanten Speicherstrukturen innerhalb des Wesens und Umfangs der Erfindung abdeckt, wie es hierin beschrieben ist und wie es von einem Fachmann verstanden wird.
-
Es ist beabsichtigt, dass die vorstehende detaillierte Beschreibung als eine Veranschaulichung ausgewählter Formen, die die Erfindung annehmen kann, und nicht als eine Definition der Erfindung verstanden wird. Es sind nur die folgenden Ansprüche, einschließlich aller Äquivalente, die den Umfang der beanspruchten Erfindung definieren sollen. Schließlich sei darauf hingewiesen, dass jeder Gesichtspunkt von jeder der hierin beschriebenen Ausführungsformen allein oder in Kombination miteinander verwendet werden kann.