DE102019124438B4 - Multi-state-programmierung für speichervorrichtungen - Google Patents

Multi-state-programmierung für speichervorrichtungen Download PDF

Info

Publication number
DE102019124438B4
DE102019124438B4 DE102019124438.2A DE102019124438A DE102019124438B4 DE 102019124438 B4 DE102019124438 B4 DE 102019124438B4 DE 102019124438 A DE102019124438 A DE 102019124438A DE 102019124438 B4 DE102019124438 B4 DE 102019124438B4
Authority
DE
Germany
Prior art keywords
data
encoded data
encoding
encoded
flash memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102019124438.2A
Other languages
English (en)
Other versions
DE102019124438A1 (de
Inventor
Richard David Barndt
Bernardo Rub
Mostafa EL GAMAL
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE102019124438A1 publication Critical patent/DE102019124438A1/de
Application granted granted Critical
Publication of DE102019124438B4 publication Critical patent/DE102019124438B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1072Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in multilevel memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/08Address circuits; Decoders; Word-line control circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3404Convergence or correction of memory cell threshold voltages; Repair or recovery of overerased or overprogrammed cells
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/78Masking faults in memories by using spares or by reconfiguring using programmable devices
    • G11C29/781Masking faults in memories by using spares or by reconfiguring using programmable devices combined in a redundant decoder
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/78Masking faults in memories by using spares or by reconfiguring using programmable devices
    • G11C29/80Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout
    • G11C29/802Masking faults in memories by using spares or by reconfiguring using programmable devices with improved layout by encoding redundancy signals
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/562Multilevel memory programming aspects
    • G11C2211/5623Concurrent multilevel programming and reading
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/70Masking faults in memories by using spares or by reconfiguring
    • G11C29/74Masking faults in memories by using spares or by reconfiguring using duplex memories, i.e. using dual copies

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)

Abstract

Verfahren, das unter Verwendung von einer oder mehreren Steuerungen für eine Speichervorrichtung implementiert wird, das Verfahren umfassend:Codieren (410) von Daten basierend auf einer ersten Codieroperation, um einen codierten Datensatz zu erzeugen;Durchführen (412), während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in die Speichervorrichtung;Codieren (414), unter Verwendung einer zweiten Codieroperation basierend auf den Daten, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes;Speichern (416) des zweiten Satzes codierter Daten in einem Cache;Durchführen (418) einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der Speichervorrichtung, um einen decodierten Datensatz zu erzeugen;Durchführen (420) einer zweiten Decodieroperation basierend auf dem decodierten Datensatz, um einen zweiten decodierten Datensatz zu erzeugen;Codieren (422) des zweiten decodierten Datensatzes, um einen dritten Satz codierter Daten zu erzeugen; undDurchführen (424), während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die Speichervorrichtung.

Description

  • HINTERGRUND
  • Die vorliegende Anmeldung bezieht sich im Allgemeinen auf Datenspeichersysteme, -vorrichtungen und -verfahren. Genauer gesagt, bezieht sich die vorliegende Anmeldung zum Beispiel, ohne Einschränkung, auf eine Multi-State-Programmierung zum Schreiben von Daten in Speichervorrichtungen. Derartige Vorrichtungen sind aus US 2017 / 0 287 568 A1 bekannt.
  • Die im Hintergrundabschnitt vorgesehene Beschreibung sollte nicht als Stand der Technik angenommen werden, lediglich weil sie in dem Hintergrundabschnitt erwähnt wird oder diesem zugeordnet ist. Der Hintergrundabschnitt kann Informationen einschließen, die einen oder mehrere Aspekte der vorliegenden Technologie beschreiben, und die Beschreibung in diesem Abschnitt schränkt die Erfindung nicht ein.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Eine detaillierte Beschreibung erfolgt unter Bezugnahme auf die beigefügten Zeichnungen:
    • 1 ist ein Blockdiagramm, das Komponenten eines Flash-Speichersystems gemäß Aspekten der vorliegenden Technologie veranschaulicht;
    • 2A veranschaulicht konzeptionell ein Beispiel für eine Foggy/Fine-Programmierung, die von verschiedenen Komponenten eines Flash-Speichersystems gemäß einer oder mehreren Implementierungen der vorliegenden Technologie bereitgestellt wird;
    • 2B veranschaulicht konzeptionell ein zweites Beispiel für eine Foggy/Fine-Programmierung, die von verschiedenen Komponenten eines Flash-Speichersystems gemäß einer oder mehreren Implementierungen der vorliegenden Technologie bereitgestellt wird;
    • 3A und 3B veranschaulichen konzeptionell ein Beispiel für das Lesen und Decodieren von Daten in einem Foggy-Zustand (z. B. Daten, die unter Verwendung einer Foggy-Programmieroperation in einen Flash-Speicher geschrieben werden) gemäß einer oder mehreren Implementierungen der vorliegenden Technologie;
    • 4 zeigt ein Flussdiagramm von einem Prozess zum Durchführen einer Foggy/Fine-Programmierung gemäß einer oder mehreren Implementierungen.
  • DETAILLIERTE BESCHREIBUNG
  • Die nachstehend dargelegte detaillierte Beschreibung ist als eine Beschreibung verschiedener Konfigurationen der vorliegenden Technologie gedacht und soll nicht die einzigen Konfigurationen darstellen, in denen die vorliegende Technologie in der Praxis umgesetzt werden kann. Die beigefügten Zeichnungen sind in dieses Dokument integriert und Bestandteil der detaillierten Beschreibung. Die detaillierte Beschreibung beinhaltet spezifische Details, um ein gründliches Verständnis der vorliegenden Technologie zu ermöglichen. Jedoch wird für Fachleute offensichtlich sein, dass die vorliegende Technologie ohne diese spezifischen Details in der Praxis umgesetzt werden kann. In einigen Fällen sind bekannte Strukturen und Komponenten in Blockdiagrammform gezeigt, um zu vermeiden, dass die Konzepte der vorliegenden Technologie unklar werden. Gleiche Komponenten sind zum leichteren Verständnis mit identischen Elementnummern gekennzeichnet.
  • In einem oder mehreren Beispielen können sich Foggy-und-Fine-Programmiertechniken für NAND-Flash-Speicher mit mehreren Bits pro Zelle auf eine zweiphasige oder mehrphasige Programmiertechnik (z. B. „Foggy/Fine-Programmierung“) beziehen, wobei NAND-Zellenspannungen in einer ersten Wortleitungsprogrammieroperation (z. B. Foggy-Programmieroperation) schnell nahe an gewünschte Spannungspegel (z. B., wie durch das in jeder Zelle gespeicherte Bitmuster bestimmt) gebracht werden, dann in einer zweiten Programmieroperation, in der die Programmschrittgröße viel kleiner ist (z. B. Fine-Programmieroperation) auf ihre endgültigen Spannungspegel programmiert werden. Im Foggy-Zustand sind die auf einer gegebenen Flash-Speichervorrichtung gespeicherten Daten aufgrund einer sehr hohen Bitfehlerrate, die einen gegebenen Fehlerkorrekturcode-Decodierer (ECC-Decodierer) überfordern kann, durch eine Steuerung unlesbar.
  • In einem Beispiel erfordert jede der vorstehend genannten Programmierphasen, dass die Daten von einer Steuerung zu NAND-Flash-Speicher übertragen werden. Somit muss die Steuerung diese Daten während des gesamten Prozesses speichern. In einigen Fällen können eine oder mehrere andere Wortleitungen zwischen den Foggy- und Fine-Programmierphasen auf einer einzigen Wortleitung foggy-programmiert sein. In einem Beispiel können die Speicheranforderungen in der Steuerung sehr groß sein, insbesondere für eine Quadruple-Level Cell (QLC) mit 4 Bits pro Zelle, wo 4 Seiten von Daten auf jeder Wortleitung gespeichert werden. In einer oder mehreren hierin beschriebenen Implementierungen reduziert die vorliegende Technologie auf vorteilhafte Weise die Datenpufferanforderungen in der Steuerung während der Foggy/Fine-Programmierung, was die Funktionalität einer gegebenen Rechenvorrichtung verbessert.
  • In einem Beispiel kann eine Foggy/Fine-Programmierung das „beste“ Endergebnis erzeugen, d. h., die Bitfehlerrate (BER) nach der Fine-Programmierung ist niedriger als bei anderen Programmiertechniken. Jedoch wurden andere Techniken, bei denen die einzelnen Seiten auf einer Wortleitung progressiv programmiert werden, gemeinhin verwendet. Die Zwischenprogrammierschritte sind lesbar und dienen als Puffer für eine Teilmenge der Seiten, die auf der Wortleitung gespeichert werden sollen. In einigen Fällen, in denen die Ziel-BER in einer Programmierung mit einem einzigen Durchgang (z. B. einer Full-Sequence-Programmierung) erreicht werden kann, kann es sein, dass keine Notwendigkeit zur Foggy/Fine-Programmierung besteht, wie in dem Fall einer vorhandenen Generation von Bit-Cost-Scalable-(BiCS)-Triple-Level-Cell-Flash(TLC-Flash).
  • Bei einigen früheren Implementierungen einer Foggy/Fine-Programmierung (z. B. einem planaren Triple-Level-Cell-Flash) können alle Daten in der Steuerung gepuffert worden sein. Für einige Systeme mit niedrigerer Leistung (z. B. mit geringerer Verarbeitungsleistung) kann eine solche Pufferung ein geringeres Problem sein, da es weit weniger gleichzeitige Programmieroperationen (z. B. weniger Parallelität) gibt. Eine oder mehrere hierin weiter offenbarte Implementierungen können eine Menge an Daten, die in der Steuerung gepuffert sind, im Vergleich zu den zuvor erwähnten früheren Implementierungen einer Foggy/Fine-Programmierung, bei denen alle Daten gepuffert wurden, reduzieren.
  • In einer oder mehreren Implementierungen ermöglicht die vorliegende Technologie auf vorteilhafte Weise, dass eine Foggy-Programmierung durch eine gegebene Steuerung lesbar ist. Somit kann die vorliegende Technologie Kompromisse während der Foggy-Programmierung vermeiden, die das Endergebnis nach der Fine-Programmierung verschlechtern können. In einem Beispiel wird dies durch Speichern redundanter Informationen in der Steuerung erreicht, die bei der Wiederherstellung von Daten aus der Foggy-Programmierung helfen können. Die Menge an redundanten Informationen, die zum Wiederherstellen einer einzigen Foggy-Wortleitung in der Steuerung gespeichert ist, muss keine Seitengrößeneinheiten sein, wie es bei einigen der oben beschriebenen vorhandenen Ansätze der Fall wäre, aber in einigen Implementierungen kann dies erforderlich oder aus Gründen der Einfachheit gewünscht sein. Obwohl sich Beschreibungen hierin zum Zwecke der Veranschaulichung auf eine einzige Seiteneinheit an Redundanz beziehen können, versteht es sich, dass dies in einigen Implementierungen der vorliegenden Technologie nicht erforderlich ist.
  • Eine oder mehrere Implementierungen der vorliegenden Technologie stellen verschiedene Leistungsvorteile bereit, die die Funktionalität eines Computers (z. B. einer Rechenvorrichtung) verbessern. Zum Beispiel ermöglicht es die vorliegende Technologie, Foggy/Fine-Programmiertechniken ohne eine große Zunahme der Speicheranforderungen für die Steuerung zu verwenden. Die hierin beschriebenen Foggy/Fine-Programmiertechniken können das Endergebnis mit der höchsten Qualität (z. B. hinsichtlich der niedrigsten BER) erzeugen, was für ein Flash-Speichersystem unter Verwendung von QLC-basiertem Speicher, das einen winzigen Spielraum für Fehler haben kann, entscheidend sein kann. Als ein Ergebnis versteht es sich, dass Implementierungen der vorliegenden Technologie die Funktionalität einer Rechenvorrichtung, einschließlich eines Flash-Speichersystems, wie hierin beschrieben, durch mindestens ein Reduzieren der Speicheranforderungen verbessern kann, was auch die Verarbeitungslast einer solchen Rechenvorrichtung verbessern kann. Weiterhin kann, wenn eine Foggy/Fine-Programmierung verwendet wird, die Latenz beim Schreiben von Daten in eine Flash-Speichervorrichtung durch Verwenden der hierin ausführlicher beschriebenen Implementierungen verbessert werden, was die Funktionalität einer solchen Rechenvorrichtung weiter verbessert. Außerdem können die hierin beschriebenen Implementierungen die Decodierungslatenz verbessern und die Komplexität der Decodierung von Daten reduzieren, wenn eine Foggy/Fine-Programmierung verwendet wird, wodurch die Leistung der Rechenvorrichtung verbessert wird.
  • 1 ist ein Blockdiagramm, das Komponenten eines Flash-Speichersystems 110 gemäß Aspekten der vorliegenden Technologie veranschaulicht. Wie in 1 dargestellt, schließt das Flash-Speichersystem 110 eine Schnittstelle 115, eine Steuerung 120, einen Speicher 125, einen Cache 126, einen Codierer 160, einen ECC-Codierer 162, einen Foggy-Codierer 164, einen Decodierer 170, einen Foggy-Decodierer 172, einen ECC-Decodierer 174 und Flash-Speichervorrichtungen 130 ein. Die Schnittstelle 115 ermöglicht die Kommunikation von Daten, Befehlen und/oder Steuersignalen zwischen dem Flash-Speichersystem 110 und einem Host 150. Die Steuerung 120 steuert den Betrieb des Flash-Speichersystems 110 zum Speichern und Abrufen von Daten in den Flash-Speichervorrichtungen 130 (z. B. als Flash-Speichervorrichtung 130(a), 130(b) bis 130(n) veranschaulicht, um mindestens einige Vorrichtungen darzustellen) gemäß Befehlen, die von dem Host 150 empfangen werden. Die Steuerung 120 kann einen Einkernprozessor oder einen Mehrkernprozessor, der mehrere separate Rechenkerne zum Ausführen von Anweisungen einschließt, einschließen. Zum Beispiel können die Rechenkerne in der Mehrkernimplementierung jeweilige Anweisungen parallel ausführen, einschließlich Abschnitten der Firmware des Flash-Speichersystems 110. Der Speicher 125, der ein Direktzugriffsspeicher (RAM) sein kann, stellt temporären Speicherplatz für die Steuerung 120 bereit, um Befehle zu verarbeiten und Daten zwischen dem Host 150 und den Flash-Speichervorrichtungen 130 zu übertragen.
  • Der Decodierer 170, der Speicher, Register, einen oder mehrere Prozessoren, ein Ein-Chip-System (SoC), eine anwendungsspezifische integrierte Schaltung (ASIC), ein Field Programmable Gate Array (FPGA) oder eine andere programmierbare Logikvorrichtung, diskrete Gate- oder Transistorlogikvorrichtung, diskrete Hardwarekomponenten oder eine beliebige Kombination davon einschließen kann und integral mit oder getrennt von der Steuerung 120 sein kann, decodiert Daten unter Verwendung von verschiedenen Decodierschemas. Der Speicher 125 kann den Cache 126 einschließen. Alternativ kann der Cache 126 getrennt von dem Speicher 125 als ein separater flüchtiger Speicher (z. B. Direktzugriffsspeicher) implementiert werden, der ein schnellerer Speicher als der Speicher 125 sein kann. Der Codierer 160, der Speicher, Register, einen oder mehrere Prozessoren, ein Ein-Chip-System (SoC), eine anwendungsspezifische integrierte Schaltung (ASIC), ein Field Programmable Gate Array (FPGA) oder eine andere programmierbare Logikvorrichtung, diskrete Gate- oder Transistorlogikvorrichtung, diskrete Hardwarekomponenten oder eine beliebige Kombination davon einschließen kann und integral mit oder getrennt von der Steuerung 120 sein kann, codiert in die Flash-Speichervorrichtung 130 zu schreibende Daten unter Verwendung von verschiedenen Codierschemas. Der Betrieb jeder dieser Komponenten wird nachstehend ausführlicher beschrieben.
  • Die Schnittstelle 115 stellt physische und elektrische Verbindungen zwischen dem Host 150 und dem Flash-Speichersystem 110 bereit. Die Schnittstelle 115 ist so eingerichtet, dass sie die Kommunikation von Daten, Befehlen und/oder Steuersignalen zwischen dem Host 150 und dem Flash-Speichersystem 110 über die physischen und elektrischen Verbindungen ermöglicht. Die Verbindung und die Kommunikation mit der Schnittstelle 115 können auf einer Standardschnittstelle, wie etwa Universal Serial Bus (USB), Small Computer System Interface (SCSI), Serial Advanced Technology Attachment (SATA), Mini-SATA (mSATA), PCIe usw., basieren. Alternativ können die Verbindung und/oder die Kommunikation auf einer proprietären Schnittstelle basieren, obwohl die vorliegende Technologie nicht auf einen bestimmten Typ von Schnittstelle beschränkt ist.
  • Der Host 150 kann eine Rechenvorrichtung sein, wie etwa ein Computer/Server, ein Smartphone oder eine beliebige andere elektronische Vorrichtung, die Daten von dem Flash-Speichersystem 110 liest und Daten in dieses schreibt. Der Host 150 kann ein Betriebssystem oder eine andere Software aufweisen, die Lese- und Schreibbefehle an das Flash-Speichersystem 110 ausgibt. Das Flash-Speichersystem 110 kann mit dem Host 150 integriert sein oder kann extern zu dem Host 150 sein. Das Flash-Speichersystem 110 kann drahtlos mit dem Host 150 verbunden sein oder kann physisch mit dem Host 150 verbunden sein.
  • Die Steuerung 120 kann auch einen internen Verwaltungsprozessor einschließen, der auf einem der Kerne der Steuerung 120 in einer Mehrkernimplementierung betrieben wird. Der interne Verwaltungsprozessor kann die Schnittstelle 115 verwenden, um mit anderen Komponenten zu kommunizieren, die in 1 veranschaulicht sind, einschließlich des Hosts 150, des Speichers 125, der Steuerung 120 und der Flash-Speichervorrichtungen 130.
  • 1 zeigt mehrere Flash-Speichervorrichtungen 130. Das Flash-Speichersystem 110 kann eine oder mehrere Flash-Speichervorrichtungen 130 einschließen und ist nicht auf eine bestimmte Anzahl von Flash-Speichervorrichtungen 130 beschränkt. Die Flash-Speichervorrichtungen 130 können jeweils einen einzigen Flash-Speicherchip oder Flash-Speicher-Die einschließen. Die Flash-Speichervorrichtungen 130 können unter mehreren Kanälen organisiert sein, durch die Daten durch die Steuerung 120 von den Flash-Speichervorrichtungen 130 gelesen und in diese geschrieben werden, oder mit einem einzigen Kanal gekoppelt sein. Die Flash-Speichervorrichtungen 130 können unter Verwendung von NAND-Flash-Speicher, einschließlich 3D-NAND-Speicher, implementiert werden, wobei Speicherzellen in mehreren Schichten gestapelt werden, wobei Triple-Level Cells (TLC) und/oder Quadruple-Level Cells (QLC) verwendet werden, die drei bzw. vier Bits pro Zelle speichern können. Zum Beispiel können die Flash-Speichervorrichtungen NAND-Flash-Speicher einschließen, der aus Speicherzellen zusammengesetzt ist, die zum Speichern von mehreren Bits oder mehreren Ebenen programmiert werden können, die als Multi-Level Cells (MLC) bezeichnet werden, wie etwa die vorgenannten TLC und/oder QLC.
  • Außerdem können die Speichervorrichtungen 130 jeweils ein oder mehrere Register zum Speichern von Operationsparametern der jeweiligen Flash-Speichervorrichtungen 130 einschließen. In einem Beispiel können solche Operationsparameter einschließen: Leseoperationsparameter, wie etwa Lesespannungen; Schreiboperationsparameter, wie etwa Anfangspulswert, inkrementeller Pulswert und Pulsweite; und Löschoperationsparameter, wie etwa Anfangspulswert, inkrementeller Pulswert und Pulsweite.
  • Wie veranschaulicht, weisen die Flash-Speichervorrichtungen 130 mehrere Speicherzellen auf, die in Speicherblöcke, wie etwa Flash-Speicherblöcke 140 (z. B. als Flash-Speicherblöcke 140(a), 140(b) bis 140(n) veranschaulicht, um mindestens einige Blöcke in jeweiligen Flash-Speichervorrichtungen darzustellen) verteilt sind. Die Flash-Speichervorrichtungen 130 können einen oder mehrere Flash-Speicherblöcke 140 aufweisen, und die Flash-Speichervorrichtungen 130 können jeweils die gleiche oder eine unterschiedliche Anzahl von Flash-Speicherblöcken 140 aufweisen. Die Flash-Speicherblöcke 140 können als Datenblöcke oder Speicherblöcke bezeichnet werden und sind durch die Steuerung 120 unter Verwendung einer physischen Blockadresse adressierbar. Jeder der Flash-Speicherblöcke 140 ist weiter in mehrere Datensegmente oder Seiten aufgeteilt, die durch die Steuerung 120 unter Verwendung einer physischen Seitenadresse oder eines Offsets von einer physischen Blockadresse des Speicherblocks, der die referenzierte Seite enthält, adressierbar sind. Die Seiten können Sektoren oder andere Host-Dateneinheiten speichern. Die Flash-Speicherblöcke 140 stellen die Einheiten von Daten dar, die innerhalb der Flash-Speichervorrichtungen 130 in einer einzigen Löschoperation gelöscht werden. Die Seiten stellen die Einheiten von Daten dar, die in einer Lese- oder Schreiboperation von den Flash-Speichervorrichtungen 130 gelesen oder in diese geschrieben werden. Obwohl die Flash-Speichervorrichtungen 130 unter Bezugnahme auf Blöcke und Seiten beschrieben sind, kann andere Terminologie verwendet werden, um sich auf diese Dateneinheiten innerhalb einer Flash-Speichervorrichtung zu beziehen.
  • Es versteht sich weiterhin, dass die vorliegende Technologie nicht auf eine bestimmte Kapazität von Flash-Speicher beschränkt ist. Zum Beispiel können Speicherblöcke jeweils 32, 64, 128 oder 512 Seiten oder eine beliebige andere Anzahl von Seiten aufweisen. Zusätzlich können Seiten jeweils zum Beispiel 512 Bytes, 2 KB, 4 KB oder 32 KB aufweisen. Die Sektoren können jeweils zum Beispiel 512 Bytes, 4 KB oder andere Größen aufweisen. Es kann einen oder mehrere Sektoren pro Seite geben.
  • In 1 stellen der Speicher 125 und der Cache 126 flüchtigen Speicher dar, der während des Betriebs des Flash-Speichersystems 110 mit der Steuerung 120 gekoppelt ist und von dieser verwendet wird. Die Steuerung 120 kann Befehle und/oder Daten in dem Speicher 125 und/oder dem Cache 126 puffern. Die Steuerung 120 kann den Speicher 125 und/oder den Cache 126 auch verwenden, um Adressabbildungstabellen oder Lookup-Tabellen zu speichern, die verwendet werden, um von dem Host 150 verwendete logische Adressen in virtuelle und/oder physische Adressen umzuwandeln, die Blöcken und Seiten der Flash-Speichervorrichtungen 130 entsprechen. Andere Typen von Tabellen, Daten, Statusanzeigern usw., die verwendet werden, um die Flash-Speichervorrichtungen 130 zu verwalten, können auch von der Steuerung 120 in dem Speicher 125 gespeichert werden. Der Speicher 125 und/oder der Cache 126 können unter Verwendung von dynamischem Direktzugriffsspeicher (DRAM), statischem Direktzugriffsspeicher (SRAM) oder anderen Typen von flüchtigem Direktzugriffsspeicher implementiert werden, ohne vom Umfang der vorliegenden Technologie abzuweichen. Die Steuerung 120 kann auch periodisch den Inhalt des Speichers 125 und/oder des Cache 126 in einen oder mehrere bezeichnete Flash-Speicherblöcke 140 speichern, wie etwa vor dem Herunterfahren des Flash-Speichersystems 110.
  • Die Steuerung 120 verwaltet den Datenfluss zwischen dem Host 150 und den Flash-Speichervorrichtungen 130. Die Steuerung 120 ist eingerichtet, um Befehle und Daten von dem Host 150 über die Schnittstelle 115 zu empfangen. Zum Beispiel kann die Steuerung 120 Daten und einen Schreibbefehl (hierin auch als „Programmier“- oder „Programm“-Befehl bezeichnet) von dem Host 150 empfangen, um die Daten in die Flash-Speichervorrichtungen 130 zu schreiben. Die Steuerung 120 ist weiterhin eingerichtet, um Daten über die Schnittstelle 115 an den Host 150 zu senden. Zum Beispiel kann die Steuerung 120 Daten von den Flash-Speichervorrichtungen 130 lesen und die Daten als Reaktion auf einen Lesebefehl an den Host 150 senden.
  • Die Steuerung 120 ist weiterhin eingerichtet, um in den Flash-Speichervorrichtungen 130, dem Speicher 125 und dem Cache 126 gespeicherte Daten basierend auf internen Steueralgorithmen oder anderen Typen von Befehlen, die von dem Host 150 empfangen werden können, zu verwalten. Zum Beispiel ist die Steuerung 120 eingerichtet, um Operationen, wie etwa eine Speicherbereinigung (GC), Fehlerkorrekturcodiertechniken (z. B. LDPC), einen Verschleißausgleich, Sicherheitstechniken (z. B. eine Verschlüsselung), Komprimierungstechniken, Redundanztechniken (z. B. Techniken mit einem redundanten Array unabhängiger Platten (RAID)), eine Multi-State-Programmierung (z. B. eine Foggy/Fine-Programmierung) usw., durchzuführen. Zum Beispiel kann die Steuerung 120 eine Fehlerkorrekturcodierung verwenden, um Schutz für Daten, die in die Flash-Speichervorrichtungen 130 geschrieben werden, bereitzustellen und eine Foggy/Fine-Programmierung in Bezug auf solche Daten durchzuführen. In diesem Zusammenhang können der ECC-Codierer 162 und der Foggy-Codierer 164 der Steuerung 120 in einem ersten Programmierdurchgang oder -zustand Daten codieren, die von der Host-Vorrichtung 150 empfangen werden. Die Steuerung 114 (oder (eine) Komponente(n) davon) schreibt dann die codierten Daten in die eine oder mehreren der Flash-Speichervorrichtungen 130 und/oder puffert die codierten Daten als Teil des Foggy-Programmierdurchgangs in dem Speicher 125 und/oder dem Cache 126. In einem zweiten Programmierdurchgang oder -zustand decodiert der Foggy-Decodierer 172 und der ECC-Decodierer 174 die Daten von der einen oder den mehreren der Flash-Speichervorrichtungen 130 und/oder gepufferten Daten in dem Speicher 125 und/oder dem Cache 126. Die Steuerung 114 (oder (eine) Komponente(n) davon) schreibt dann die decodierten Daten als Teil des Fine-Programmierdurchgangs in die eine oder mehreren der Flash-Speichervorrichtungen 130. In einer oder mehreren Implementierungen ist der Cache 126 getrennt und verschieden von den Flash-Speichervorrichtungen 130, und der Cache 126 ist nicht Teil der Flash-Speichervorrichtungen 130. Beispiele für eine Foggy/Fine-Programmierung sind unten in 2A und 2B ausführlicher beschrieben.
  • Wenn die Steuerung 120 (oder (eine) Komponente(n) davon) anschließend die Daten von der einen oder den mehreren der Flash-Speichervorrichtungen 130 liest, werden die Daten von der Steuerung 120 über die Schnittstelle 115 an die Host-Vorrichtung 150 bereitgestellt. Fachleute werden mit anderen Operationen vertraut sein, die durch eine Steuerung in einer Flash-Speichervorrichtung durchgeführt werden, die hierin nicht im Detail beschrieben werden.
  • Die Steuerung 120 kann mit einem Mehrzweckprozessor, Mehrkernprozessor, Mikrocontroller, digitalen Signalprozessor (DSP), einem Ein-Chip-System (SoC), einer anwendungsspezifischen integrierten Schaltung (ASIC), einem Field Programmable Gate Array (FPGA) oder einer anderen programmierbaren Logikvorrichtung, diskreten Gate- oder Transistorlogikvorrichtung, diskreten Hardwarekomponenten oder einer beliebigen Kombination davon implementiert werden, die zum Durchführen der hierin beschriebenen Operationen und Funktionen ausgelegt und eingerichtet sind. In der Mehrkernprozessor-Implementierung kann jeder der mehreren Rechenkerne jeweilige Anweisungen parallel ausführen, einschließlich Abschnitten der Firmware des Flash-Speichersystems 110. Die Steuerung 120 kann die hierin beschriebenen Operationen und Funktionen durchführen, indem sie eine oder mehrere Sequenzen von Anweisungen, die auf einem maschinen-/computerlesbaren Medium gespeichert sind, ausführt. Bei dem maschinen-/computerlesbaren Medium kann es sich um die Flash-Speichervorrichtungen 130, den Speicher 125, den Cache 126 oder andere Typen von Medien handeln, von denen die Steuerung 120 Anweisungen oder Code lesen kann. Zum Beispiel kann das Flash-Speichersystem 110 einen Nur-Lese-Speicher (ROM), wie etwa einen EPROM oder EEPROM einschließen, der mit Firmware/Software codiert ist, die eine oder mehrere Sequenzen von Anweisungen aufweist, die während des Betriebs des Flash-Speichersystems 110 durch die Steuerung 120 gelesen und ausgeführt werden.
  • 2A veranschaulicht konzeptionell ein Beispiel für eine Foggy/Fine-Programmierung, die von verschiedenen Komponenten eines Flash-Speichersystems gemäß einer oder mehreren Implementierungen der vorliegenden Technologie bereitgestellt wird. 2A wird unter Bezugnahme auf Komponenten des Flash-Speichersystems 110 in 1 erörtert.
  • Wie veranschaulicht, werden Host-Daten 205 von einer Host-Vorrichtung (z. B. dem Host 150) durch den ECC-Codierer 162 empfangen. In dem Beispiel von 2A werden zum Programmieren von Daten in NAND-Flash-Speicher (eine oder mehrere der Flash-Speichervorrichtungen 130), der QLC-Zellen (z. B. vier Bits pro Zelle) verwendet, vier Seiten von Daten pro Wortleitung geschrieben, um eine Foggy/Fine-Programmierung in zwei getrennten Programmierdurchgängen zu implementieren. Obwohl in diesem Beispiel vier Seiten von Daten beschrieben sind, kann die vorliegende Technologie basierend auf dem Typ von Flash-Speicher unterschiedliche Anzahlen von Seiten schreiben. In einem Beispiel, in dem NAND-Flash-Speicher drei Bits pro Zelle verwendet, können stattdessen drei Seiten von Daten pro Wortleitung geschrieben werden, um eine Foggy/Fine-Programmierung gemäß Implementierungen der vorliegenden Technologie zu implementieren.
  • Unter Verwendung eines ECC-Codierschemas (z. B. Reed-Solomon, BCH, LDPC usw.) codiert der ECC-Codierer 162 die Host-Daten 205, wobei vier Seiten von codierten Daten erzeugt werden. Als ein erster Programmierdurchgang in der Foggy/Fine-Programmierung führt die Steuerung 120 (oder alternativ der ECC-Codierer 162) eine Foggy-Programmieroperation 250 durch, um die vier Seiten von codierten Daten als Teil eines ersten Programmierdurchgangs in eine oder mehrere der Flash-Speichervorrichtungen 130 (z. B. NAND-Flash-Speicher) zu schreiben.
  • Der ECC-Codierer 162 sendet die vier Seiten von codierten Daten an den Foggy-Codierer 164. Der Foggy-Codierer 164 empfängt die vier Seiten von codierten Daten und codiert die vier Seiten von codierten Daten, wobei eine Seite von Daten erzeugt wird. In einer Implementierung führt der Foggy-Codierer 164 eine XOR-Operation an den vier Seiten von codierten Daten durch, um die eine Seite von Daten zur Speicherung in einem Cache zu erzeugen. Die Steuerung 120 (oder alternativ der Foggy-Codierer 164) schreibt die eine Seite von Daten in einen Cache (z. B. den Cache 126). In einem Beispiel ist die eine Seite von Daten, die in dem Cache gespeichert wird, eine einzige zusätzliche Seite, was das Ergebnis einer XOR-Operation der vier Datenbits in jeder Zelle ist (z. B. für Flash-Speicher unter Verwendung von QLC). Solch eine XOR-Operation der vier Datenbits kann ein Ergebnis eines einzelnen Bits erzeugen. Wenn die Datenabbildung auf die Zellen unter Verwendung einer Gray-Code-Technik codiert wird, schaltet dieses einzelne Bit benachbarte Leseebenen ein. Somit zeigt das einzelne Bit an, ob die Zellenleseebene gerade oder ungerade ist (z. B. entsprechend einer geraden oder ungeraden Verteilung, wie weiter unten erörtert). Bei Verwendung in Verbindung mit einem alternativen Satz von Leseschwellenwerten (z. B. während eines Foggy-Lesens) kann dies eine Anforderung für eine Leseoperation auf einem Flash-Speicher reduzieren, sodass nur zwischen acht Ebenen statt sechzehn für jede Zelle unterschieden werden muss. Das zwischengespeicherte Bit kann dann die Erkennung von sechzehn Ebenen auflösen. In diesem Fall ist die zwischengespeicherte Seite auch ein ECC-Codewort, da es sich um eine lineare Kombination aus vier Codewörtern handelt. Somit kann die zwischengespeicherte Seite in dem Fall, dass sie zum Beispiel in einem Single-Level-Cell-NAND (SLC-NAND) gespeichert werden soll, zuverlässig abgerufen werden.
  • In einer Implementierung kann der Cache (z. B. der Cache 126) eine zusätzliche ECC-Parität für jede der vier Seiten speichern, die foggy-programmiert sind. In diesem Beispiel beträgt die zusätzliche ECC-Parität eine weitere Redundanz von fünfundzwanzig Prozent (25 %), wenn der Cache eine Größe von einer vollen NAND-Seite hat. Dies könnte die Parität aus einer unterschiedlichen Codierung der Daten sein (z. B. bei der die im Flash gespeicherte ECC-Parität während der Foggy-Decodierung nicht verwendet wird), oder als erweiterte Parität, die verwendet werden kann, um die in dem Flash-Speicher gespeicherte Parität während der Foggy-Decodierung durch den Foggy-Decodierer 172 erneut zu erzwingen. In einer Implementierung sind die in dem Cache gespeicherten Daten nur zusätzliche Paritätsbits für einen stärkeren ECC-Code, die in Verbindung mit der ersten ECC-Code-Parität verwendet werden können oder überhaupt nicht auf die schwächere (in den Flash geschriebene) ECC-Parität zurückgreifen können.
  • Die Steuerung 120 (oder der Foggy-Decodierer 172) führt eine Leseoperation für die in dem Cache 126 gespeicherte eine Seite von Daten durch. Die Steuerung 120 (oder der Foggy-Decodierer 172) führt eine zweite Leseoperation für die in den Flash-Speichervorrichtungen 130 gespeicherten vier Seiten von Daten durch. In einem Beispiel ist die zweite Leseoperation ein spezieller Lesebefehl 252, der das Lesen der vier Seiten von Daten in dem Foggy-Zustand (z. B. unter Verwendung der vorgenannten Foggy-Programmieroperation in den Flash-Speicher geschrieben) ermöglicht. In einer Implementierung verschiebt dieser spezielle Lesebefehl 252 die Leseschwellenwerte so, dass sie in der Mitte von Spannungsverteilungen liegen (z. B. nicht an den Schnittpunkten der Verteilungen in einer Leseoperation). Ein Beispiel für solche Verteilungen für diese spezielle Leseoperation ist in 3A UND 3B ausführlicher erörtert.
  • Der Foggy-Decodierer 172 decodiert die vier Seiten von Daten basierend mindestens teilweise auf der einen Seite von Daten aus dem Cache 126. Ein Beispiel für das Decodieren von Daten ist in 3A UND 3B unten ausführlicher erörtert. Der Foggy-Decodierer 172 sendet die decodierten vier Seiten von Daten zur ECC-Decodierung an den ECC-Decodierer 174.
  • Der ECC-Decodierer 174 decodiert unter Verwendung eines ECC-Decodierschemas weiterhin die vier Seiten von Daten, um Fehler aus den Daten zu beseitigen und die Daten zum Schreiben in eine oder mehrere der Flash-Speichervorrichtungen 130 vorzubereiten. In einem Beispiel werden die decodierten Daten erneut codiert, bevor sie in die Flash-Speichervorrichtungen 130 programmiert werden. Als einen zweiten Durchgang der Foggy/Fine-Programmierung führt die Steuerung 120 (oder der ECC-Decodierer 174) eine Foggy-Programmieroperation 254 durch, um die erneut codierten vier Seiten von Daten in eine oder mehrere der Flash-Speichervorrichtungen 130 zu schreiben.
  • 2B veranschaulicht konzeptionell ein zweites Beispiel für eine Foggy/Fine-Programmierung, die von verschiedenen Komponenten eines Flash-Speichersystems gemäß einer oder mehreren Implementierungen der vorliegenden Technologie bereitgestellt wird. 2B wird unter Bezugnahme auf Komponenten des Flash-Speichersystems 110 in 1 erörtert. 2B ist ähnlich wie 2A, wobei ein Unterschied darin besteht, dass der Foggy-Codierer 164 Host-Daten von einem Host (z. B. dem Host 150) empfängt.
  • Wie veranschaulicht, werden Host-Daten 205 von einer Host-Vorrichtung (z. B. dem Host 150) durch den ECC-Codierer 162 empfangen. Unter Verwendung eines ECC-Codierschemas (z. B. Reed-Solomon, BCH, LDPC usw.) codiert der ECC-Codierer 162 die Host-Daten 205, wobei vier Seiten von codierten Daten erzeugt werden. Als ein erster Programmierdurchgang in der Foggy/Fine-Programmierung führt die Steuerung 120 (oder alternativ der ECC-Codierer 162) die Foggy-Programmieroperation 250 durch, um die vier Seiten von codierten Daten als Teil eines ersten Programmierdurchgangs in eine oder mehrere der Flash-Speichervorrichtungen 130 (z. B. NAND-Flash-Speicher) zu schreiben.
  • In dem Beispiel von 2B empfängt der Foggy-Codierer 164 auch die Host-Daten 255 direkt. Wie veranschaulicht, werden Hostdaten 205 von einer Host-Vorrichtung (z. B. dem Host 150) durch den Foggy-Codierer 164 empfangen. In diesem Beispiel schließen die Host-Daten 205 vier Seiten von Daten ein. In einer Implementierung führt der Foggy-Codierer 164 eine XOR-Operation an den vier Seiten der Host-Daten 255 durch, um eine Seite von Daten zur Speicherung in einem Cache zu erzeugen. Die Steuerung 120 (oder alternativ der Foggy-Codierer 164) schreibt die eine Seite von Daten in einen Cache (z. B. den Cache 126). In einem Beispiel ist die eine Seite von Daten, die in dem Cache gespeichert wird, eine einzige zusätzliche Seite, was das Ergebnis einer XOR-Operation der vier Datenbits in jeder Zelle ist (z. B. für Flash-Speicher unter Verwendung von QLC).
  • Die Steuerung 120 (oder der Foggy-Decodierer 172) führt eine Leseoperation für die in dem Cache 126 gespeicherte eine Seite von Daten durch. Die Steuerung 120 (oder der Foggy-Decodierer 172) führt eine zweite Leseoperation für die in den Flash-Speichervorrichtungen 130 gespeicherten vier Seiten von Daten durch. In einem Beispiel ist die zweite Leseoperation ein spezieller Lesebefehl 252 (wie in 2A beschrieben), der das Lesen der vier Seiten von Daten in dem Foggy-Zustand (z. B. unter Verwendung der vorgenannten Foggy-Programmieroperation in den Flash-Speicher geschrieben) ermöglicht.
  • Der Foggy-Decodierer 172 decodiert die vier Seiten von Daten basierend mindestens teilweise auf der einen Seite von Daten aus dem Cache 126. Der Foggy-Decodierer 172 sendet die decodierten vier Seiten von Daten zur ECC-Decodierung an den ECC-Decodierer 174.
  • Der ECC-Decodierer 174 decodiert unter Verwendung eines ECC-Decodierschemas weiterhin die vier Seiten von Daten, um Fehler aus den Daten zu beseitigen und die Daten zum Schreiben in eine oder mehrere der Flash-Speichervorrichtungen 130 vorzubereiten. In einem Beispiel werden die decodierten Daten erneut codiert, bevor sie in die Flash-Speichervorrichtungen 130 programmiert werden. Die Steuerung 120 (oder der ECC-Decodierer 174) führt dann eine Fine-Programmieroperation 254 durch, um die erneut codierten vier Seiten von Daten in eine oder mehrere der Flash-Speichervorrichtungen 130 zu schreiben.
  • 3A und 3B veranschaulichen konzeptionell ein Beispiel für das Lesen und Decodieren von Daten in einem Foggy-Zustand (z. B. Daten, die unter Verwendung einer Foggy-Programmieroperation in einen Flash-Speicher geschrieben werden) gemäß einer oder mehreren Implementierungen der vorliegenden Technologie. 3A und 3B werden unter Bezugnahme auf Komponenten des Flash-Speichersystems 110 in 1 erörtert. 3A veranschaulicht ein Beispiel für eine binäre Darstellung. 3B veranschaulicht ein Beispiel für eine graphische Darstellung.
  • 3A und 3B veranschaulichen mehrere Bits, einschließlich Bit 301, Bit 302, Bit 303, Bit 304, Bit 305, Bit 306, Bit 307, Bit 308, Bit 309, Bit 310, Bit 311, Bit 312, Bit 313, Bit 314 und Bit 315. Diese Bits können zwischengespeicherte Bits darstellen, die wie zuvor erörtert in dem Cache gespeichert sind, was anzeigen kann, ob eine gegebene Verteilung ungerade oder gerade ist. Die mehreren Bits stellen jeweilige Ergebnisse einer XOR-Operation an jeweiligen vier Datenbits 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394 und 395 dar.
  • In dem Fall des Speicherns mehrerer Ebenen von Daten wird der Bereich möglicher Schwellenspannungen in die Anzahl der Ebenen von Daten unterteilt. Zum Beispiel gibt es, wenn vier Ebenen von Informationen gespeichert werden (zwei Datenbits), vier Schwellenspannungsbereiche (z. B. Verteilungen), die den Datenwerten „11“, „10“, „01“ und „00“ zugewiesen sind. In einem Beispiel für einen Speicher vom NAND-Typ ist die Schwellenspannung nach einer Löschoperation negativ und als „11“ definiert. Positive Schwellenspannungen werden für die Datenzustände „10“, „01“ und „00“ verwendet. Wenn acht Ebenen von Informationen (oder Zustände) gespeichert werden (z. B. für drei Datenbits), gibt es acht Schwellenspannungsbereiche (z. B. Verteilungen), die den Datenwerten „000“, „001“, „010“, „011“, „100“, „101“ „110“ und „111“ zugewiesen sind. Wenn sechzehn Ebenen von Informationen (oder Zustände) gespeichert werden (z. B. für vier Datenbits), gibt es sechzehn Schwellenspannungsbereiche (z. B. Verteilungen), die den Datenwerten ,,0000", „0001“, „0010“, „0011“ „0100“, „0101“, „0110“, ,,0111", ,,1000", „1001“, „1010“, „1011“, ,,1100", „1101“, „1110“ und „1111“ zugewiesen sind.
  • Jedes der jeweiligen vier Datenbits entspricht in dem Flash-Speicher gespeicherten Daten (z. B. den vier Seiten von Daten, die unter Verwendung einer Foggy-Programmieroperation in den Flash-Speicher geschrieben werden, wie oben erörtert). In diesem Beispiel verwendet der Flash-Speicher eine Quad-Level-Speicherzelle (QLC), die sechzehn mögliche Zustände pro Zelle (z. B. Werte von 0000 bis 1111) speichern kann, was vier Informationsbits pro Zelle ergibt. Das Lesen von in QLC-Speicher gespeicherten Daten kann daher das Lesen von sechzehn Verteilungen erfordern.
  • Bei einem Beispiel für das Verwenden von QLC-Speicher können, wenn der Foggy-Decodierer 172 die Daten in dem Foggy-Zustand von den Flash-Speichervorrichtungen 130 liest, nur vierzehn Leseebenen erforderlich sein, um sechzehn Verteilungen zu lesen (z. B. anstelle von fünfzehn Leseebenen zum Lesen von sechzehn Verteilungen), wie in dem Beispiel von 3A und 3B gezeigt. 3A und 3B veranschaulichen diese vierzehn Leseebenen als Leseebene 331 („RL1“), Leseebene 332 („RL2“), Leseebene 333 („RL3“), Leseebene 334 („RL4“), Leseebene 335 („RL5“), Leseebene 336 („RL6“), Leseebene 337 („RL7“), Leseebene 338 („RL8“), Leseebene 339 („RL9“), Leseebene 340 („RL10“), Leseebene 341 („RL1 1“), Leseebene 342 („RL12“), Leseebene 343 („RL13“) und Leseebene 344 („RL14“). Jede der vorstehend erwähnten Leseebenen entspricht basierend auf ihrer numerischen Bezeichnung entweder einer „ungeraden“ Verteilung oder einer „geraden“ Verteilung. Zum Beispiel schließen ungerade Verteilungen Verteilung 361, Verteilung 363, Verteilung 365, Verteilung 367, Verteilung 369, Verteilung 371, Verteilung 373 und Verteilung 375 ein. Gerade Verteilungen schließen Verteilung 362, Verteilung 364, Verteilung 366, Verteilung 368, Verteilung 370, Verteilung 372 und Verteilung 374 ein.
  • Die Steuerung (z. B. die Steuerung 120) bestimmt jeweilige Leseebenen an dem Raum zwischen jeder der geraden Verteilungen oder dem Raum zwischen jeder der ungeraden Verteilungen, der sich ungefähr in der Mitte der jeweiligen Verteilungen befindet, wie in 3 veranschaulicht. Die im Cache gespeicherte Seite (z. B. die zwischengespeicherten Bits, wie oben erörtert) ermöglicht es der Steuerung, zwischen den ungeraden Verteilungen und den geraden Verteilungen zu unterscheiden.
  • Wie veranschaulicht, entspricht die Verteilung 361 „RL1“ den vier Datenbits 381, die vier 1en („1111“) einschließen. Das Ergebnis einer XOR-Operation an den vier Datenbits 381 wird ein Wert von null (0) sein, der dem Bit 301 entspricht, das in dem Cache gespeichert ist. Die benachbarte gerade Verteilung ist die Verteilung 332 „RL2“, die null (0) und drei Einsen einschließt, was den vier Datenbits 382 („0111“) entspricht. Das Ergebnis einer XOR-Operation an den vier Datenbits 382 wird ein Wert von eins (1) sein, der dem Bit 302 entspricht, das ebenfalls in dem Cache gespeichert ist. Wenn eine Leseoperation an den gespeicherten Daten in dem Foggy-Zustand durchgeführt wird, ermöglicht es der Wert jedes von Bit 301 oder Bit 302 aus dem Cache der Steuerung, zu bestimmen, ob die entsprechende Verteilung ungerade oder gerade ist. Für jede der verbleibenden Verteilungen kann die Steuerung ähnliche Operationen durchführen, um eine bestimmte Leseebene einer gegebenen ungeraden oder geraden Verteilung zu bestimmen.
  • 4 zeigt ein Flussdiagramm von einem Prozess 400 zum Durchführen einer Foggy/Fine-Programmierung gemäß einer oder mehreren Implementierungen. Weiterhin sind zu Erläuterungszwecken die Blöcke des Prozesses 400 hierin als seriell oder linear erfolgend beschrieben. Allerdings können mehrere Blöcke des Prozesses 400 parallel erfolgen. Zusätzlich müssen die Blöcke des Prozesses 400 nicht in der gezeigten Reihenfolge durchgeführt werden, und/oder ein oder mehrere Blöcke des Prozesses 400 müssen nicht durchgeführt werden und/oder können durch andere Operationen ersetzt werden. Ein oder mehrere Blöcke von 4 können durch ein Flash-Speichersystem ausgeführt werden (einschließlich z. B. einer Steuerung einer Flash-Speichervorrichtung, einer Datenspeichersteuerung eines Datenspeichersystems oder einer Solid-State-Speichervorrichtung (SSD), eines Prozessors oder dergleichen). Beispiele für ein Flash-Speichersystem oder eine Steuerung können das Flash-Speichersystem 110 und/oder die Steuerung 120 sein. Auf ähnliche Weise kann ein nicht transitorisches maschinenlesbares Medium maschinenausführbare Anweisungen darauf einschließen, die bei Ausführung durch einen Computer oder eine Maschine die Blöcke von 4 durchführen. Die Schritte in Prozess 400 können als Hardware/Firmware oder Software implementiert sein. 4 wird unter Bezugnahme auf Komponenten des Flash-Speichersystems 110 beschrieben.
  • Der Prozess 400 kann initiiert werden, wenn Host-Daten (z. B. von Host 150) durch den ECC-Codierer 162 empfangen werden. In einem Beispiel, in dem eine gegebene Flash-Speichervorrichtung QLC-Speicher verwendet, können von dem Host vier Seiten von Daten zum Programmieren in die Flash-Speichervorrichtung empfangen werden. Bei 410 codiert der ECC-Codierer 162 Daten basierend auf einer ersten Codieroperation, um einen codierten Datensatz zu erzeugen. Die erste Codieroperation kann auf einem ECC-Codierschema basieren.
  • Wie zuvor beschrieben, kann eine Foggy/Fine-Programmierung unter Verwendung von zwei verschiedenen Programmierphasen (z. B. einer ersten Phase und einer zweiten Phase) implementiert werden. Bei 412 führt der ECC-Codierer während einer ersten Phase eine erste Programmieroperation durch, um den codierten Datensatz in eine Flash-Speichervorrichtung zu schreiben. Die erste Programmieroperation in diesem Beispiel ist eine Foggy-Programmieroperation. Die Foggy-Programmierung schreibt in einem Beispiel den codierten Datensatz (z. B. die vier Seiten von Daten) in einen temporären Zustand (z. B. einen Foggy-Zustand) in mindestens eine Flash-Speichervorrichtung (z. B. mindestens eine der Flash-Speichervorrichtungen 130).
  • Der ECC-Codierer 162 sendet den codierten Datensatz an den Foggy-Codierer 164. Bei 414 codiert der Foggy-Codierer 164 den codierten Datensatz basierend auf einer zweiten Codieroperation, um einen zweiten Satz codierter Daten zu erzeugen. Die zweite Codieroperation, wie zuvor erörtert, ist eine XOR-Operation an dem codierten Datensatz, der die vier Seiten von Daten einschließt. In einem Beispiel ist das Ergebnis der XOR-Operation der zweite Satz codierter Daten, der einen Abschnitt des codierten Datensatzes (z. B. eine Seite von Daten) einschließt. Bei 416 speichert der Foggy-Codierer 164 den zweiten Satz codierter Daten in den Cache 126.
  • Zum Lesen der vier Seiten von Daten in dem in den Flash-Speichervorrichtungen 130 gespeicherten Foggy-Zustand, wie zuvor erörtert, führt der Foggy-Decodierer 172 einen speziellen Lesebefehl durch. Wie zuvor erwähnt, verschiebt dieser spezielle Lesebefehl die Leseschwellenwerte so, dass sie in der Mitte von Spannungsverteilungen (z. B. nicht an den Schnittpunkten der Verteilungen in einer Leseoperation) liegen. Der Foggy-Decodierer kann dann die zwischengespeicherte Seite von Daten verwenden, um die vier Seiten von Daten zu decodieren, die von mindestens einer der Flash-Speichervorrichtungen 130 gelesen wurden. In diesem Zusammenhang führt bei 418 der Foggy-Decodierer 172 eine erste Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus mindestens einer der Flash-Speichervorrichtungen 130 durch, um einen decodierten Datensatz zu erzeugen. Die erste Decodieroperation schließt eine Foggy-Decodieroperation ein, die in 3A UND 3B ausführlicher beschrieben wurde. Der Foggy-Decodierer 172 sendet dann den decodierten Datensatz an den ECC-Decodierer 174.
  • Bei 420 führt der ECC-Decodierer 174 eine zweite Decodieroperation basierend auf dem decodierten Datensatz durch, um einen zweiten decodierten Datensatz zu erzeugen. In einem Beispiel wird der zweite decodierte Datensatz erneut codiert, bevor er in mindestens eine der Flash-Speichervorrichtungen 130 programmiert wird. Insbesondere würden die Daten decodiert (z. B. Parität entfernt) und dann erneut codiert werden (z. B. Parität erneut berechnen), weil der ECC-Decodierer 174 die Parität nach dem Korrigieren von Fehlern nicht ausgeben kann und verworfen wird. Alternativ beziehen sich in einem Beispiel die zweiten decodierten Daten auf die korrigierten ECC-Codewörter, die die Parität einschließen, und ein erneutes Codieren der zweiten decodierten Daten kann nicht durchgeführt werden.
  • Bei 422 codiert der ECC-Decodierer (oder die Steuerung 120) den zweiten decodierten Datensatz, um einen dritten Satz codierter Daten zu erzeugen. Es versteht sich weiterhin, dass diese Codieroperation die gleichen Daten wie der codierte Datensatz, der während des ersten (z. B. Foggy-) Programmierdurchgangs in die Flash-Speichervorrichtungen 130 geschrieben wurde, erneut erzeugt und das erneute Berechnen von Paritätswerten für den zweiten decodierten Datensatz einschließen kann. Bei 424 führt der ECC-Decodierer 174 (oder die Steuerung 120) während einer zweiten Phase eine zweite Programmieroperation durch, um den dritten Satz codierter Daten in mindestens eine der Flash-Speichervorrichtungen 130 zu schreiben.
  • Verschiedene Beispiele von Aspekten der Offenbarung werden nachfolgend beschrieben. Diese dienen als Beispiele und schränken die vorliegende Technologie nicht ein.
  • Ein oder mehrere Aspekte der vorliegenden Technologie stellen Verfahren zum Bereitstellen einer verbesserten mehrphasigen Foggy/Fine-Programmierung mit einer reduzierten Speicheranforderung zum Puffern von Daten bereit. Gemäß einigen Aspekten kann ein Verfahren ein Codieren von Daten basierend auf einer ersten Codieroperation einschließen, um einen codierten Datensatz zu erzeugen. Das Verfahren kann auch ein Durchführen, während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in eine Speichervorrichtung einschließen. Das Verfahren kann auch ein Codieren, unter Verwendung einer zweiten Codieroperation basierend auf den Daten, einschließen, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes. Das Verfahren kann auch ein Speichern des zweiten Satzes codierter Daten in einem Cache einschließen. Das Verfahren kann auch ein Durchführen einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der Speichervorrichtung einschließen, um einen decodierten Datensatz zu erzeugen. Das Verfahren kann auch ein Durchführen einer zweiten Decodieroperation basierend auf dem decodierten Datensatz einschließen, um einen zweiten decodierten Datensatz zu erzeugen. Das Verfahren kann auch ein Codieren des zweiten decodierten Datensatzes einschließen, um einen dritten Satz codierter Daten zu erzeugen. Das Verfahren kann auch ein Durchführen, während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die Speichervorrichtung einschließen.
  • Gemäß anderen Aspekten kann ein System Flash-Speichervorrichtungen und eine Steuerung einschließen. Die Steuerung kann eingerichtet sein, um Daten basierend auf einer ersten Codieroperation zu codieren, um einen codierten Datensatz zu erzeugen. Die Steuerung kann auch eingerichtet sein, um, während einer ersten Phase, eine erste Programmieroperation durchzuführen, um den codierten Datensatz in mindestens eine der Flash-Speichervorrichtungen zu schreiben. Die Steuerung kann auch eingerichtet sein, um, unter Verwendung einer zweiten Codieroperation basierend auf den Daten, zu codieren, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes. Die Steuerung kann auch eingerichtet sein, um den zweiten Satz codierter Daten in einen Cache zu speichern. Die Steuerung kann auch eingerichtet sein, um eine erste Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der mindestens einen der Flash-Speichervorrichtungen durchzuführen, um einen decodierten Datensatz zu erzeugen. Die Steuerung kann auch eingerichtet sein, um eine zweite Decodieroperation basierend auf dem decodierten Datensatz durchzuführen, um einen zweiten decodierten Datensatz zu erzeugen. Die Steuerung kann eingerichtet sein, um den zweiten decodierten Datensatz zu codieren, um einen dritten Satz codierter Daten zu erzeugen. Die Steuerung kann auch eingerichtet sein, um, während einer zweiten Phase, eine zweite Programmieroperation durchzuführen, um den dritten Satz codierter Daten in die mindestens eine der Flash-Speichervorrichtungen zu schreiben.
  • Gemäß weiteren Aspekten kann ein System ein Mittel zum Codieren von Daten basierend auf einer ersten Codieroperation einschließen, um einen codierten Datensatz zu erzeugen. Das System kann weiterhin ein Mittel zum Durchführen, während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in eine Speichervorrichtung einschließen. Das System kann weiterhin ein Mittel zum Codieren, unter Verwendung einer zweiten Codieroperation basierend auf den Daten einschließen, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes. Das System kann weiterhin ein Mittel zum Speichern des zweiten Satzes codierter Daten in einem Cache einschließen. Das System kann weiterhin ein Mittel zum Durchführen einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der Speichervorrichtung einschließen, um einen decodierten Datensatz zu erzeugen. Das System kann weiterhin ein Mittel zum Durchführen einer zweiten Decodieroperation basierend auf dem decodierten Datensatz einschließen, um einen zweiten decodierten Datensatz zu erzeugen. Das System kann weiterhin ein Mittel zum Codieren des zweiten decodierten Datensatzes einschließen, um einen dritten Satz codierter Daten zu erzeugen. Das System kann weiterhin ein Mittel zum Durchführen, während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die Speichervorrichtung einschließen.
  • In weiteren Aspekten kann ein nichtflüchtiges maschinenlesbares Medium maschinenausführbare Anweisungen einschließen, die bei Ausführung von einem Prozessor ein Verfahren ausführen. Das Verfahren kann ein Codieren von Daten basierend auf einer ersten Codieroperation einschließen, um einen codierten Datensatz zu erzeugen. Das Verfahren kann auch ein Durchführen, während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in eine Speichervorrichtung einschließen. Das Verfahren kann auch ein Codieren, unter Verwendung einer zweiten Codieroperation basierend auf den Daten, einschließen, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes. Das Verfahren kann auch ein Speichern des zweiten Satzes codierter Daten in einem Cache einschließen. Das Verfahren kann auch ein Durchführen einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der Speichervorrichtung einschließen, um einen decodierten Datensatz zu erzeugen. Das Verfahren kann auch ein Durchführen einer zweiten Decodieroperation basierend auf dem decodierten Datensatz einschließen, um einen zweiten decodierten Datensatz zu erzeugen. Das Verfahren kann auch ein Codieren des zweiten decodierten Datensatzes einschließen, um einen dritten Satz codierter Daten zu erzeugen. Das Verfahren kann auch ein Durchführen, während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die Speichervorrichtung einschließen.
  • Für Fachleute versteht sich, dass veranschaulichende Blöcke, Module, Elemente, Komponenten, Verfahren und Algorithmen, die hierin beschrieben werden, als elektronische Hardware, Computersoftware oder Kombinationen von beiden implementiert werden können. Um diese Austauschbarkeit von Hardware und Software zu veranschaulichen, wurden verschiedene veranschaulichende Blöcke, Module, Elemente, Komponenten, Verfahren und Algorithmen vorstehend allgemein hinsichtlich ihrer Funktionalität beschrieben. Ob eine derartige Funktionalität als Hardware oder Software implementiert ist, hängt von der spezifischen Anwendung und Designeinschränkungen ab, denen das Gesamtsystem unterliegt. Fachleute können die beschriebene Funktionalität auf verschiedene Arten für jede bestimmte Anwendung implementieren. Verschiedene Komponenten und Blöcke können anders angeordnet sein (zum Beispiel in einer anderen Reihenfolge angeordnet oder auf eine andere Weise partitioniert), ohne vom Umfang der vorliegenden Technologie abzuweichen.
  • Es versteht sich, dass die spezifische Reihenfolge oder Hierarchie von Schritten in den offenbarten Prozessen eine Veranschaulichung von beispielhaften Ansätzen ist. Basierend auf Designpräferenzen versteht es sich, dass die spezifische Reihenfolge oder Hierarchie von Schritten in den Prozessen anders angeordnet werden kann. Einige der Schritte können gleichzeitig durchgeführt werden. Die beigefügten Verfahrensansprüche stellen Elemente der verschiedenen Schritte in einer beispielhaften Reihenfolge dar und sollen nicht auf die spezielle dargestellte Reihenfolge oder Hierarchie beschränkt sein.
  • Die vorhergehende Beschreibung wird bereitgestellt, um es einem Fachmann zu ermöglichen, die verschiedenen hierin beschriebenen Aspekte in der Praxis umzusetzen. Die vorhergehende Beschreibung stellt verschiedene Beispiele der vorliegenden Technologie bereit, und die vorliegende Technologie ist nicht auf diese Beispiele beschränkt. Verschiedene Modifikationen dieser Aspekte werden dem Fachmann leicht ersichtlich sein, und die hierin definierten generischen Prinzipien können auf andere Aspekte angewendet werden. Daher sollen die Ansprüche nicht auf die hier gezeigten Aspekte beschränkt sein, sondern sollen den vollen Schutzumfang erhalten, der mit den in Sprachform niedergelegten Ansprüchen konsistent ist, wobei die Bezugnahme auf ein Element im Singular nicht „ein und nur ein“ Element bedeuten soll, sofern dies nicht speziell angegeben ist, sondern „ein oder mehrere“. Sofern nicht spezifisch anders angegeben, bezieht sich der Ausdruck „einige“ auf ein(en) oder mehrere. Pronomen im grammatikalischen Maskulin (zum Beispiel sein) schließen das grammatikalische Feminin und Neutrum (zum Beispiel ihr und sein) ein und umgekehrt. Überschriften und Unterüberschriften, falls vorhanden, werden nur aus Gründen der Zweckmäßigkeit verwendet und schränken die Erfindung nicht ein.
  • Ein Ausdruck wie zum Beispiel „ein Aspekt“ bedeutet nicht, dass ein solcher Aspekt für die vorliegende Technologie wesentlich ist oder dass ein derartiger Aspekt für alle Konfigurationen der vorliegenden Technologie gilt. Eine Offenbarung, die sich auf einen Aspekt bezieht, kann auf alle Konfigurationen oder eine oder mehrere Konfigurationen angewendet werden. Ein Aspekt kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie beispielsweise ein Aspekt, kann sich auf einen oder mehrere Aspekte beziehen und umgekehrt. Ein Ausdruck wie beispielsweise eine „Ausführungsform“ impliziert nicht, dass eine solche Ausführungsform für die vorliegende Technologie wesentlich ist oder dass eine solche Ausführungsform für alle Konfigurationen der vorliegenden Technologie gilt. Eine Offenbarung, die sich auf eine Ausführungsform bezieht, kann für alle Ausführungsformen oder eine oder mehrere Ausführungsformen gelten. Eine Ausführungsform kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck wie beispielsweise eine „Ausführungsform“ kann sich auf eine oder mehrere Ausführungsform beziehen und umgekehrt. Ein Ausdruck wie beispielsweise eine „Konfiguration“ impliziert nicht, dass eine solche Konfiguration für die vorliegende Technologie wesentlich ist oder dass eine solche Konfiguration für alle Konfigurationen der vorliegenden Technologie gilt. Eine Offenbarung, die sich auf eine Konfiguration bezieht, kann auf alle Konfigurationen oder eine oder mehrere Konfigurationen angewendet werden. Eine Konfiguration kann ein oder mehrere Beispiele bereitstellen. Ein Ausdruck, wie z. B. eine „Konfiguration“, kann sich auf eine oder mehrere Konfigurationen beziehen und umgekehrt.
  • Das Wort „beispielhaft“ wird in diesem Dokument in der Bedeutung „als Beispiel oder zur Veranschaulichung dienend“ verwendet. Jeder Aspekt oder jedes Design, der bzw. das hier als „beispielhaft“ beschrieben wird, ist nicht zwangsläufig als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Designs zu verstehen.
  • Alle strukturellen und funktionalen Äquivalente zu den Elementen der verschiedenen Aspekte, die in dieser Offenbarung beschrieben sind, die Fachleuten bekannt sind oder später bekannt werden, werden hiermit ausdrücklich durch Bezugnahme aufgenommen und sollen in den Ansprüchen eingeschlossen sein. Darüber hinaus soll nichts hierin Offenbartes der Öffentlichkeit gewidmet sein, ungeachtet dessen, ob eine solche Offenbarung in den Ansprüchen ausdrücklich erwähnt wird. Kein Anspruchselement ist gemäß den Bestimmungen von 35 U.S.C.§ 112, Absatz sechs, zu verstehen, sofern das Element nicht explizit unter Verwendung des Ausdrucks „Mittel für“ oder im Falle eines Verfahrensanspruchs des Ausdrucks „Schritt für“ erwähnt wird. Sofern die Ausdrücke „einschließen“, „haben“ oder dergleichen in der Beschreibung oder den Ansprüchen verwendet werden, soll ein solcher Begriff ähnliche Begriffe wie etwa „aufweisen“ beinhalten, wenn „aufweisen“ bei der Verwendung als Übergangswort in einem Anspruch ausgelegt wird.

Claims (20)

  1. Verfahren, das unter Verwendung von einer oder mehreren Steuerungen für eine Speichervorrichtung implementiert wird, das Verfahren umfassend: Codieren (410) von Daten basierend auf einer ersten Codieroperation, um einen codierten Datensatz zu erzeugen; Durchführen (412), während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in die Speichervorrichtung; Codieren (414), unter Verwendung einer zweiten Codieroperation basierend auf den Daten, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes; Speichern (416) des zweiten Satzes codierter Daten in einem Cache; Durchführen (418) einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der Speichervorrichtung, um einen decodierten Datensatz zu erzeugen; Durchführen (420) einer zweiten Decodieroperation basierend auf dem decodierten Datensatz, um einen zweiten decodierten Datensatz zu erzeugen; Codieren (422) des zweiten decodierten Datensatzes, um einen dritten Satz codierter Daten zu erzeugen; und Durchführen (424), während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die Speichervorrichtung.
  2. Verfahren gemäß Anspruch 1, wobei der zweite Satz codierter Daten eine zweite Codierung des codierten Datensatzes aufweist und der dritte Satz codierter Daten die gleichen Daten wie der codierte Datensatz aufweist.
  3. Verfahren gemäß Anspruch 1, wobei der zweite Satz codierter Daten eine Codierung der Daten aufweist, wobei die Daten von einem Host empfangen werden.
  4. Verfahren gemäß Anspruch 1, wobei die erste Programmieroperation eine Foggy-Programmieroperation aufweist und die erste Decodieroperation eine Foggy-Decodieroperation aufweist.
  5. Verfahren gemäß Anspruch 1, wobei die zweite Programmieroperation eine Fine-Programmieroperation aufweist, die zweite Decodieroperation eine Fehlerkorrekturcode-Decodieroperation (ECC-Decodieroperation) aufweist.
  6. Verfahren gemäß Anspruch 1, wobei das Codieren (412) von Daten basierend auf der ersten Codieroperation weiterhin aufweist: Empfangen von Host-Daten von einer Host-Vorrichtung; Erzeugen, unter Verwendung eines Fehlerkorrekturcode-Codierschemas (ECC-Codierschemas), eines Satzes codierter Seiten basierend auf den Host-Daten; und Senden des Satzes codierter Seiten an einen Foggy-Codierer zum Durchführen der zweiten Codieroperation.
  7. Verfahren gemäß Anspruch 1, wobei das Codieren (414), unter Verwendung der zweiten Codieroperation basierend auf den Daten, zum Erzeugen des zweiten Satzes codierter Daten weiterhin aufweist: Erzeugen einer zusätzlichen Seite von Daten basierend auf einer XOR-Operation von einer Anzahl von Datenbits in jeder Zelle der Speichervorrichtung.
  8. Verfahren gemäß Anspruch 1, wobei die erste Codieroperation eine Fehlerkorrekturcode-Codierung (ECC-Codierung) aufweist und die zweite Codieroperation eine XOR-Operation aufweist.
  9. Verfahren gemäß Anspruch 1, wobei der codierte Datensatz vier Seiten von Daten aufweist, der zweite Satz codierter Daten eine Seite von Daten aufweist, und der decodierte Datensatz vier Seiten von Daten aufweist.
  10. Verfahren gemäß Anspruch 1, weiterhin aufweisend: Durchführen einer zweiten Leseoperation, um den dritten Satz codierter Daten aus der Speichervorrichtung zu lesen.
  11. System, aufweisend: eine Vielzahl von Flash-Speichervorrichtungen; und eine Steuerung, die eingerichtet ist zum: Codieren (410) von Daten basierend auf einer ersten Codieroperation, um einen codierten Datensatz zu erzeugen; Durchführen (412), während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in mindestens eine der Flash-Speichervorrichtungen; Codieren (414), unter Verwendung einer zweiten Codieroperation basierend auf den Daten, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes; Speichern (416) des zweiten Satzes codierter Daten in einem Cache; Durchführen (418) einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der mindestens einen der Flash-Speichervorrichtungen, um einen decodierten Datensatz zu erzeugen; Durchführen (420) einer zweiten Decodieroperation basierend auf dem decodierten Datensatz, um einen zweiten decodierten Datensatz zu erzeugen; Codieren (422) des zweiten decodierten Datensatzes, um einen dritten Satz codierter Daten zu erzeugen; und Durchführen (424), während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die mindestens eine der Speichervorrichtungen.
  12. System gemäß Anspruch 11, wobei der zweite Satz codierter Daten, die in dem Cache gespeichert sind, zusätzliche Paritätsbits für einen bestimmten Fehlerkorrekturcode-Code (ECC-Code) aufweist und der dritte Satz codierter Daten die gleichen Daten wie der codierte Datensatz aufweist.
  13. System gemäß Anspruch 11, wobei der zweite Satz codierter Daten eine Codierung der Daten aufweist, wobei die Daten von einem Host empfangen werden.
  14. System gemäß Anspruch 11, wobei die erste Programmieroperation eine Foggy-Programmieroperation aufweist und die erste Decodieroperation eine Foggy-Decodieroperation aufweist.
  15. System gemäß Anspruch 11, wobei die zweite Programmieroperation eine Fine-Programmieroperation aufweist und die zweite Decodieroperation eine Fehlerkorrekturcode-Decodieroperation (ECC-Decodieroperation) aufweist.
  16. System gemäß Anspruch 11, wobei die Steuerung weiterhin eingerichtet ist zum: Empfangen von Host-Daten von einer Host-Vorrichtung; Erzeugen, unter Verwendung eines Fehlerkorrekturcode-Codierschemas (ECC-Codierschemas), eines Satzes codierter Seiten basierend auf den Host-Daten; und Senden des Satzes codierter Seiten an einen Foggy-Codierer zum Durchführen einer Foggy-Codieroperation.
  17. System gemäß Anspruch 11, wobei die Steuerung weiterhin eingerichtet ist zum: Erzeugen einer zusätzlichen Seite von Daten basierend auf einer XOR-Operation von einer Anzahl von Datenbits in jeder Zelle der mindestens einen der Flash-Speichervorrichtungen.
  18. System gemäß Anspruch 11, wobei der codierte Datensatz vier Seiten von Daten aufweist und der zweite Satz codierter Daten eine Seite von Daten aufweist und der decodierte Datensatz vier Seiten von Daten aufweist.
  19. Flash-Speichersystem, aufweisend: ein Mittel zum Codieren von Daten basierend auf einer ersten Codieroperation, um einen codierten Datensatz zu erzeugen; ein Mittel zum Durchführen, während einer ersten Phase, einer ersten Programmieroperation zum Schreiben des codierten Datensatzes in eine Speichervorrichtung; ein Mittel zum Codieren, unter Verwendung einer zweiten Codieroperation basierend auf den Daten, um einen zweiten Satz codierter Daten zu erzeugen, wobei eine Menge des zweiten Satzes codierter Daten kleiner ist als eine Menge des codierten Datensatzes; ein Mittel zum Speichern des zweiten Satzes codierter Daten in einem Cache; ein Mittel zum Durchführen einer ersten Decodieroperation basierend auf dem zweiten Satz codierter Daten aus dem Cache und dem codierten Datensatz aus der Speichervorrichtung, um einen decodierten Datensatz zu erzeugen; ein Mittel zum Durchführen einer zweiten Decodieroperation basierend auf dem decodierten Datensatz, um einen zweiten decodierten Datensatz zu erzeugen; ein Mittel zum Codieren des zweiten decodierten Datensatzes, um einen dritten Satz codierter Daten zu erzeugen; und ein Mittel zum Durchführen, während einer zweiten Phase, einer zweiten Programmieroperation zum Schreiben des dritten Satzes codierter Daten in die Speichervorrichtung.
  20. Flash-Speichersystem gemäß Anspruch 19, wobei der zweite Satz codierter Daten eine zweite Codierung des codierten Datensatzes aufweist und der dritte Satz codierter Daten die gleichen Daten wie der codierte Datensatz aufweist.
DE102019124438.2A 2018-12-14 2019-09-11 Multi-state-programmierung für speichervorrichtungen Active DE102019124438B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/221,332 US10748606B2 (en) 2018-12-14 2018-12-14 Multi-state programming for memory devices
US16/221,332 2018-12-14

Publications (2)

Publication Number Publication Date
DE102019124438A1 DE102019124438A1 (de) 2020-06-18
DE102019124438B4 true DE102019124438B4 (de) 2023-11-16

Family

ID=70859430

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019124438.2A Active DE102019124438B4 (de) 2018-12-14 2019-09-11 Multi-state-programmierung für speichervorrichtungen

Country Status (3)

Country Link
US (4) US10748606B2 (de)
CN (1) CN111326199B (de)
DE (1) DE102019124438B4 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11029874B2 (en) * 2019-07-30 2021-06-08 Western Digital Technologies, Inc. Rolling XOR protection in efficient pipeline
US11211119B1 (en) 2020-06-11 2021-12-28 Western Digital Technologies, Inc. QLC programming method with staging of fine data
CN113254372A (zh) * 2020-08-07 2021-08-13 广东高云半导体科技股份有限公司 用两阶段配置过程提供可编程微控制器的方法和系统
US11914886B2 (en) * 2020-10-02 2024-02-27 Western Digital Technologies, Inc. Nonvolatile memory with on-chip encoding for foggy-fine programming
US11568938B2 (en) 2020-11-03 2023-01-31 Western Digital Technologies, Inc. QLC data programming
US11670380B2 (en) * 2020-12-07 2023-06-06 Sandisk Technologies Llc Two-sided adjacent memory cell interference mitigation
US11650756B2 (en) 2020-12-28 2023-05-16 Western Digital Technologies, Inc. Nonvolatile memory with encoding for foggy-fine programming with soft bits
US11495296B2 (en) * 2021-01-20 2022-11-08 Western Digital Technologies, Inc. Read threshold calibration for nonvolatile memory with encoded foggy-fine programming
JP2022118489A (ja) * 2021-02-02 2022-08-15 キオクシア株式会社 メモリシステム
CN112735498B (zh) * 2021-02-03 2024-02-20 山东大学 一种存储器译码方法
US11861195B2 (en) 2021-03-15 2024-01-02 Western Digital Technologies, Inc. TLC data programming with hybrid parity
US11922011B2 (en) * 2021-09-01 2024-03-05 Micron Technology, Inc. Virtual management unit scheme for two-pass programming in a memory sub-system
CN114115745B (zh) * 2021-11-30 2023-07-04 深圳忆联信息系统有限公司 多Pass编程NAND的RAID优化方法、装置及计算机设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170287568A1 (en) 2016-03-29 2017-10-05 SanDisk Technologies, Inc. System and Method for Erase Detection before Programming of a Storage Device

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011073940A1 (en) * 2009-12-17 2011-06-23 International Business Machines Corporation Data management in solid state storage systems
US8213255B2 (en) * 2010-02-19 2012-07-03 Sandisk Technologies Inc. Non-volatile storage with temperature compensation based on neighbor state information
US9170884B2 (en) * 2010-03-16 2015-10-27 Cleversafe, Inc. Utilizing cached encoded data slices in a dispersed storage network
US8885410B2 (en) 2012-08-29 2014-11-11 Sandisk Technologies Inc. Direct multi-level cell programming
JP2014137674A (ja) * 2013-01-16 2014-07-28 Sony Corp 情報処理装置および方法、並びにプログラム
US9400713B2 (en) 2014-10-02 2016-07-26 Sandisk Technologies Llc System and method for pre-encoding of data for direct write to multi-level cell memory
US10025747B2 (en) * 2015-05-07 2018-07-17 Samsung Electronics Co., Ltd. I/O channel scrambling/ECC disassociated communication protocol
US10229051B2 (en) 2015-12-30 2019-03-12 Samsung Electronics Co., Ltd. Storage device including nonvolatile memory device and controller, operating method of storage device, and method for accessing storage device
US10635335B2 (en) 2017-03-21 2020-04-28 Western Digital Technologies, Inc. Storage system and method for efficient pipeline gap utilization for background operations
US10679708B2 (en) 2018-09-17 2020-06-09 Western Digital Technologies, Inc. Pre-program read to counter wordline failures
US10705966B1 (en) 2018-12-14 2020-07-07 Western Digital Technologies, Inc. Mapping for multi-state programming of memory devices

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170287568A1 (en) 2016-03-29 2017-10-05 SanDisk Technologies, Inc. System and Method for Erase Detection before Programming of a Storage Device

Also Published As

Publication number Publication date
CN111326199A (zh) 2020-06-23
US20210319828A1 (en) 2021-10-14
CN111326199B (zh) 2023-04-28
US20200350007A1 (en) 2020-11-05
US20210104275A1 (en) 2021-04-08
US20200194064A1 (en) 2020-06-18
DE102019124438A1 (de) 2020-06-18
US11562787B2 (en) 2023-01-24
US11087836B2 (en) 2021-08-10
US10748606B2 (en) 2020-08-18
US10878896B2 (en) 2020-12-29

Similar Documents

Publication Publication Date Title
DE102019124438B4 (de) Multi-state-programmierung für speichervorrichtungen
DE102019125059A1 (de) Abbildung für multi-state-programmierung von speichervorrichtungen
DE102019133129A1 (de) Mehrphasenprogrammierung mit symmetrischer gray-codierung
DE102019116520A1 (de) Datenspeichersysteme und -verfahren für eine verbesserte datenumlagerung basierend auf lesepegelspannungen, die mit einer fehlerwiederherstellung verbunden sind
DE102008003113B4 (de) ECC-Steuereinheit, Speichersystem und Verfahren zur Korrektur eines Fehlers
DE102017128994A1 (de) Weiche Dekodierungs-Planung
DE102017117066A1 (de) Nichtbinäre codierung für einen nichtflüchtigen speicher
DE102018105948A1 (de) Leseniveau-Nachverfolgung und Optimierung
DE102019123709A1 (de) Verwendung verschachtelter schreibvorgänge zur trennung von die-ebenen
DE102017001433A1 (de) Systeme und Verfahren für adaptive Lesepegelanpassung
DE102020112512A1 (de) Datenspeichergerät und Betriebsverfahren dafür
DE112020006139T5 (de) Vor-lese-und lese-schwellenspannungsoptimierung
DE112014002632T5 (de) Lesespannungsberechnung bei Solid-State-Speichervorrichtungen
DE102017128999A1 (de) Lesebetrieb und weiches Dekodierungs-Timing
DE102018105434A1 (de) Verfahren und System zum Abtasten von gelöschten Flashspeicherseiten mit Querverweis auf verwandte Anwendungen
DE112009001620T5 (de) Nichtflüchtige Speichervorrichtung mit mehreren Bits Pro Zelle (MBC) und System mit Polaritätssteuerung sowie Verfahren zum Programmieren derselbigen
DE102010037290A1 (de) Speichersysteme und Verfahren zur Erfassung einer Verteilung von instabilen Speicherzellen
DE102017212767B4 (de) Verfahren und Vorrichtung zur Steigerung der Zuverlässigkeit eines nicht-flüchtigen Speichers
DE112014005810B4 (de) anagement der Datenspeicherung in analogen Speicherzellen unter Verwendung einer nicht ganzzahligen Anzahl von Bits pro Zelle
DE102018122826A1 (de) Vorrichtung zum Unterstützen eines Fehlerkorrekturcodes und Testverfahren dafür
DE112019000167T5 (de) Anpassbare Lesewiederholungsreihenfolge basierend auf einem Decodierungserfolgstrend
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE112020005502T5 (de) Dynamische überprovisionierungszuweisung für zweckbestimmte blöcke
DE102015113414A1 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE102021107436A1 (de) Speichersystem und Verfahren zum direkten Quad-Level-Cell-Programmieren (QLC-Programmieren)

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division