-
TECHNISCHES GEBIET
-
Ausführungsbeispiele der Erfindung beziehen sich allgemein auf Speicher-Untersysteme, und betreffen insbesondere die doppelte verschachtelte Programmierung einer Speichervorrichtung in einem Speicher-Untersystem.
-
HINTERGRUND
-
Ein Speicher-Untersystem kann eine oder mehrere Speichervorrichtungen enthalten, die Daten speichern. Bei den Speichervorrichtungen kann es sich zum Beispiel um nichtflüchtige Speichervorrichtungen und um flüchtige Speichervorrichtungen handeln. Allgemein kann ein Host-System ein Speicher-Untersystem verwenden, um Daten in den Speichervorrichtungen zu speichern und um Daten aus den Speichervorrichtungen abzurufen.
-
Figurenliste
-
Die vorliegende Erfindung wird anhand der nachfolgenden detaillierten Beschreibung und der beigefügten Zeichnungen verschiedener Ausführungsbeispiele der Erfindung vollständiger verstanden werden.
- 1 zeigt ein beispielhaftes Computersystem, das ein Speicher-Untersystem gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung enthält.
- 2A ist ein Blockdiagramm einer Speichervorrichtung in Kommunikation mit einem Speicher-Untersystem-Controller eines Speicher-Untersystems gemäß einem Ausführungsbeispiel.
- 2B ist ein Blockdiagramm, das ein Speicher-Untersystem zeigt, durch das eine doppelt verschachtelte Programmierung gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung implementiert wird.
- 3 ist ein Flussdiagramm eines beispielhaften Verfahrens der doppelt verschachtelten Programmierung einer Speichervorrichtung in einem Speicher-Untersystem gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung.
- 4 ist eine Darstellung, die die Programmierverteilungen für die doppelt verschachtelte Programmierung einer Speichervorrichtung in einem Speicher-Untersystem gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung zeigt.
- 5 ist ein Blockdiagramm von einem beispielhaften Computersystem, in welchem Ausführungsbeispiele der vorliegenden Erfindung arbeiten können.
-
DETAILLIERTE BESCHREIBUNG
-
Aspekte der vorliegenden Erfindung beziehen sich auf die doppelt verschachtelte Programmierung einer Speichervorrichtung in einem Speicher-Untersystem. Ein Speicher-Untersystem kann eine Speichervorrichtung, ein Speichermodul oder ein Hybrid aus einer Speichervorrichtung und einem Speichermodul sein. Beispiele für Speichervorrichtungen und Speichermodule werden nachfolgend in Verbindung mit 1 beschrieben. Allgemein kann ein Host-System ein Speicher-Untersystem verwenden, das eine oder mehrere Komponenten enthält, wie zum Beispiel Speichervorrichtungen, die Daten speichern. Das Host-System kann Daten zur Verfügung stellen, die in dem Speicher-Untersystem gespeichert werden sollen, und kann Daten anfordern, die aus dem Speicher-Untersystem abgerufen werden sollen.
-
Ein Speicher-Untersystem kann nichtflüchtige Speichervorrichtungen mit hoher Dichte enthalten, bei denen die Daten erhalten bleiben sollen, wenn die Speichervorrichtung nicht mit Strom versorgt wird. Ein Beispiel für nichtflüchtige Speichervorrichtungen ist eine Negativ-Und-Speichervorrichtung (NAND-Speichervorrichtung). Andere Beispiele für nichtflüchtige Speichervorrichtungen werden nachfolgend in Verbindung mit 1 beschrieben. Eine nichtflüchtige Speichervorrichtung ist ein Baustein aus einem oder mehreren Chips. Jeder Chip kann eine oder mehrere Ebenen enthalten. Bei einigen Typen von nichtflüchtigen Speichervorrichtungen (z.B. NAND-Vorrichtungen) enthält jede Ebene einen Satz von physischen Blöcken. Jeder Block enthält einen Satz von Seiten. Jede Seite enthält einen Satz von Speicherzellen („Zellen“). Eine Zelle ist eine elektronische Schaltung, die Informationen speichert. Abhängig vom Zellentyp kann eine Zelle ein oder mehrere Bits mit binären Informationen speichern und hat verschiedene logische Zustände, die mit der Anzahl von gespeicherten Bits korrelieren. Die logischen Zustände können durch binäre Werte dargestellt werden, wie zum Beispiel „0“ und „1“ oder Kombinationen solcher Werte.
-
Eine Speichervorrichtung kann aus Bits aufgebaut sein, die in einem zweidimensionalen oder einem dreidimensionalen Gitter angeordnet sind. Speicherzellen werden in einem Array aus Spalten (nachfolgend auch als Bitleitungen bezeichnet) und Zeilen (nachfolgend auch als Wortleitungen bezeichnet) auf einen Silizium-Wafer geätzt. Eine Wortleitung kann sich auf eine oder mehrere Reihen von Speicherzellen einer Speichervorrichtung beziehen, die mit einer oder mehreren Bitleitungen verwendet werden, um die Adresse von jeder der Speicherzellen zu erzeugen. Der Schnittpunkt zwischen einer Bitleitung und einer Wortleitung bildet die Adresse der Speicherzelle. Ein Block bezieht sich im Folgenden auf eine Einheit der Speichervorrichtung, die zum Speichern von Daten verwendet wird, und kann eine Gruppe von Speicherzellen, eine Wortleitungsgruppe, eine Wortleitung oder einzelne Speicherzellen umfassen. Ein oder mehrere Blöcke können miteinander gruppiert werden, um eine Ebene der Speichervorrichtung zu bilden, damit auf jeder Ebene gleichzeitige Operationen stattfinden können. Die Speichervorrichtung kann Schaltungen enthalten, die gleichzeitige Speicherseitenzugriffe auf zwei oder mehr Speicherebenen durchführen. Beispielsweise kann die Speichervorrichtung mehrere Zugriffsleitungstreiberschaltungen und Leistungsschaltungen enthalten, die von den Ebenen der Speichervorrichtung gemeinsam genutzt werden können, um einen gleichzeitigen Zugriff auf Seiten von zwei oder mehr Speicherebenen, die unterschiedliche Seitentypen umfassen, zu erleichtern. Zur Vereinfachung der Beschreibung können diese Schaltungen allgemein als unabhängige Ebenen-Treiberschaltungen bezeichnet werden. Abhängig von der verwendeten Speicherarchitektur können die Daten über die Speicherebenen hinweg (d.h. in Streifen) gespeichert werden. Folglich kann eine Anforderung zum Lesen eines Datensegments (z.B. entsprechend einer oder mehreren Datenadressen) zu Lese-Operationen führen, die auf zwei oder mehr Speicherebenen der Speichervorrichtung ausgeführt werden.
-
Einige Speichervorrichtungen verwenden bestimmte Typen von Speicherzellen, wie zum Beispiel Quad-Level-Cell-Speicherzellen (QLC-Speicherzellen), die vier Datenbits in jeder Speicherzelle speichern, was es erschwinglich macht, mehr Anwendungen von älteren Festplattenlaufwerken auf neuere Speicher-Untersysteme, wie zum Beispiel NAND-Solid-State-Laufwerke (SSDs), zu verlagern. QLC-Speicher eignet sich besonders gut für leseintensive Arbeitsaufgaben, wie sie häufig in Rechenzentrum-Anwendungen vorkommen, bei denen Daten normalerweise einmal generiert und dann regelmäßig gelesen werden, um Berechnungen und Analysen durchzuführen. Daher wird QLC-Speicher oft als anfällig angesehen und nur für sehr leichte Schreib-Arbeitsaufgaben verwendet, da die Lebensdauer und die Service-Qualität (QoS) die Nutzbarkeit in Rechenzentrum-Anwendungen einschränken können.
-
Bestimmte Speicher-Untersysteme, die QLC-Speicher implementieren, verwenden einen Standard-16-16-Grob-Fein-Programmier-Algorithmus mit zwei Durchläufen. Da eine QLC-Speicherzelle vier Datenbits speichert, gibt es 16 mögliche Programmierpegel (d.h. 24), die die möglichen Werte dieser vier Datenbits darstellen. Das Programmieren einer Wortleitung beginnt mit dem groben Programmieren aller 16 Pegel in einem ersten Durchlauf. Ziel dieses „groben“ ersten Durchlaufs ist es, alle Zellen schnell auf Werte zu programmieren, die etwas unter ihren endgültigen Ziel-Programmierpegeln liegen. Während des langsameren, „feinen“ zweiten Durchlaufs werden die Speicherzellen auf eine etwas höhere endgültige programmierte Zielspannung programmiert. Durch eine solche Programmierung in zwei Durchläufen wird die Interferenz von Zelle zu Zelle (C2C) minimiert, da jede Zelle und ihre Nachbarn fast auf ihrer endgültigen programmierten Zielspannung liegen, wenn der Fein-Programmierungsdurchlauf durchgeführt wird, und nur noch „nachpoliert“ werden müssen. Die Kombination aus der Tatsache, dass im ersten Durchlauf keine Präzisionsprogrammierung erforderlich ist, und der minimierten C2C-Kopplung führt zu einem schnellen Programmieren mit einem hohen Lesefenster-Budget (RWB). Eine solche Standard-16-16-Grob-Fein-Programmierung erfordert jedoch, dass alle Daten vor dem ersten Durchlauf zunächst in den SLC-Speicher (Single-Level-Cell-Speicher) geschrieben werden (d.h. Speicherzellen, die ein Datenbit pro Zelle speichern), um einen asynchronen Leistungsverlust (APL) zu verhindern. Bei großen Datenmengen, die den SLC-Speicher durchlaufen, können sich die zugrundeliegenden Medien abnutzen, es sei denn, es werden große Mengen an SLC-Speicher zugewiesen. Blöcke, die als SLC-Speicher zugewiesen werden, nehmen jedoch Platz vom QLC-Speicher weg, wodurch die Kapazität der Speichervorrichtung verringert wird, und führen zu einer zusätzlichen QLC-Schreibverstärkung. Durch die erhöhte Schreibverstärkung wird die Lebensdauer der Speichervorrichtung verringert und die Leistung beim wahlfreien Schreiben verschlechtert.
-
Andere Speicher-Untersysteme, die QLC-Speicher implementieren, verwenden einen 2-8-16-Programmier-Algorithmus mit drei Durchläufen. Bei diesem Ansatz beginnt das Programmieren einer Wortleitung mit dem Programmieren von zwei Pegeln, die eine Seite (z.B. eine untere Seite (LP)) darstellen, in einem ersten Durchlauf. Während des zweiten Durchlaufs werden Daten für zwei weitere Seiten (z.B. eine obere Seite (UP) und eine zusätzliche Seite (XP)) empfangen, und es wird eine Vorlese-Operation durchgeführt, um die zuvor geschriebenen LP-Daten auszulesen, bevor acht Pegel programmiert werden, die die drei Seiten darstellen. Während des dritten Durchlaufs werden Daten für eine vierte Seite (z.B. eine oberste Seite (TP)) empfangen, und es wird eine Vorlese-Operation durchgeführt, um die zuvor geschriebenen LP-, UP- und XP-Daten auszulesen, bevor alle 16 Pegel programmiert werden. Die Vorlese-Operationen, die bei einer solchen Programmierung mit drei Durchläufen durchgeführt werden, verlängern die Programmierzeit und führen zu einem nicht ausgewogenen Gray-Code (z.B. 1-3-3-8), was zu QoS-Problemen in dem Speicher-Untersystem führt. Darüber hinaus wird ohne den Nachbesserungseffekt der Grob-Fein-Programmierung das RWB verringert, was zu einer erhöhten Fehlerrate führen kann, wenn die programmierten Daten später aus der Speichervorrichtung ausgelesen werden.
-
Durch Aspekte der vorliegenden Erfindung werden die obigen und andere Mängel behoben, indem eine doppelt verschachtelte Programmierung einer Speichervorrichtung in einem Speicher-Untersystem implementiert wird. Bei einem Ausführungsbeispiel verwendet das Speicher-Untersystem einen doppelt verschachtelten 16-16-Programmier-Algorithmus mit zwei Durchläufen („i2-16-16“), der auf der vorstehend beschriebenen Standard-16-16-Grob-Fein-Programmierung basiert. Die doppelt verschachtelte Programmierung verbraucht jedoch nur zwei SLC-Speicherseiten pro vier zu programmierende QLC-Seiten (d.h., LP, UP, XP, TP). Darüber hinaus werden die SLC-Nutzung und Vorlese-Operationen mit doppelt verschachtelten Programmierung anders ausgeführt, indem die 16 Spannungsverteilungen, die die vier Host-Seiten darstellen, in mehrere Gruppen von Verteilungen aufgeteilt werden (z.B. vier Gruppen mit jeweils vier Verteilungen). Anstatt einer Speicherung aller vier Host-Seiten im SLC-Speicher während der QLC-Programmierung werden lediglich genug Datenseiten in dem SLC-Speicher gespeichert, um einen Hinweis auf eine der mehreren Verteilungsgruppen zu liefern (z.B. können 2 Seiten mit Gruppenindikatorinformationen eine von vier Verteilungsgruppen darstellen). Nach einem ersten „groben“ Programmierungsdurchlauf aller 16 Programmierpegel kann die Steuerlogik der Speichervorrichtung auf Basis des in dem SLC-Speicher gespeicherten Gruppenindikators eine Vorlese-Operation durchführen, bei der nur eine der mehreren Verteilungsgruppen verwendet wird, die ein sehr viel größeres RWB und eine geringere Fehlerquote aufweist. Somit kann die Steuerlogik in dem zweiten „feinen“ Programmierungsdurchlauf die grob programmierten Spannungen schnell und genau bestimmen und die Nachbesserungsprogrammierung durchführen, um die Speicherzellen auf ihre endgültigen Ziel-Programmierspannungen zu bringen.
-
Zu den Vorteilen dieses Ansatzes gehört unter anderem eine verbesserte Leistung des Speicher-Untersystems. In der hier beschriebenen Weise werden die wünschenswerten Eigenschaften des Standard-16-16-Programmier-Algorithmus mit zwei Durchläufen, wie zum Beispiel der Nachbesserungseffekt (Touch-up-Effect) und ausgewogene Gray-Codes, beibehalten, während die Verwendung des SLC-Speichers reduziert wird. Darüber hinaus werden die beim 2-8-16-Programmier-Algorithmus auftretenden Probleme mit der Vorlese-Spanne minimiert. Folglich wird die Gesamtqualität des Service-Niveaus des Speicher-Untersystems verbessert, ebenso wie die Lebensdauer des QLC-Speichers.
-
1 zeigt ein beispielhaftes Computersystem 100, das ein Speicher-Untersystem 110 gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung enthält. Das Speicher-Untersystem 110 kann Medien enthalten, wie zum Beispiel eine oder mehrere flüchtige Speichervorrichtungen (z.B. Speichervorrichtung 140), eine oder mehrere nichtflüchtige Speichervorrichtungen (z.B. Speichervorrichtung 130) oder eine Kombination davon.
-
Ein Speicher-Untersystem 110 kann eine Speichervorrichtung, ein Speichermodul oder ein Hybrid aus einer Speichervorrichtung und einem Speichermodul sein. Beispiele für eine Speichervorrichtung sind ein Solid-State-Laufwerk (SSD), ein Flash-Laufwerk, ein USB-Flash-Laufwerk (Universal Serial Bus Flash-Laufwerk), ein eMMC-Laufwerk (Embedded Multi-Media Controller Laufwerk), ein UFS-Laufwerk (Universal Flash Storage Laufwerk), eine SD-Karte (Secure Digital Karte) und ein Festplattenlaufwerk (HDD). Beispiele für Speichermodule sind ein Dual-Inline-Speichermodul (DIMM), ein Small-Outline-DIMM (SO-DIMM) und verschiedene Arten von nichtflüchtigen Dual-Inline-Speichermodulen (NVDIMM).
-
Das Computersystem 100 kann eine Computervorrichtung sein, wie zum Beispiel ein Desktop-Computer, ein Laptop-Computer, ein Netzwerk-Server, eine mobile Vorrichtung, ein Fahrzeug (z.B. ein Flugzeug, eine Drohne, ein Zug, ein Auto oder ein anderes Transportmittel), eine Internet-of-Things-fähige Vorrichtung (loT-Vorrichtung), ein eingebetteter Computer (z.B. ein solcher, wie er in einem Fahrzeug, in einer Industrieanlage oder in einer vernetzten kommerziellen Vorrichtung enthalten ist) oder eine solche Computervorrichtung, die einen Speicher und eine Verarbeitungsvorrichtung enthält.
-
Das Computersystem 100 kann ein Host-System 120 umfassen, das mit einem oder mehreren Speicher-Untersystemen 110 verbunden ist. In einigen Ausführungsbeispielen ist das Host-System 120 mit verschiedenen Typen von Speicher-Untersystemen 110 verbunden. 1 zeigt ein Beispiel von einem Host-System 120, das mit einem Speicher-Untersystem 110 gekoppelt ist. Wie hierin verwendet, bezieht sich „gekoppelt an“ oder „gekoppelt mit“ allgemein auf eine Verbindung zwischen Komponenten, die eine indirekte kommunikative Verbindung oder eine direkte kommunikative Verbindung (z.B. ohne zwischengeschaltete Komponenten) sein kann, ob verdrahtet oder drahtlos, einschließlich Verbindungen, wie elektrisch, optisch, magnetisch, usw.
-
Das Host-System 120 kann einen Prozessor-Chipsatz und einen Software-Stack enthalten, der von dem Prozessor-Chipsatz ausgeführt wird. Der Prozessor-Chipsatz kann einen oder mehrere Kerne, einen oder mehrere Caches, einen Speicher-Controller (z.B. NVDIMM-Controller) und einen Speicherprotokoll-Controller (z.B. PCIe-Controller, SATA-Controller) enthalten. Das Host-System 120 nutzt das Speicher-Untersystem 110, um beispielsweise Daten in das Speicher-Untersystem 110 zu schreiben und Daten aus dem Speicher-Untersystem 110 zu lesen.
-
Das Hostsystem 120 kann über eine physische Host-Schnittstelle mit dem Speicher-Untersystem 110 verbunden sein. Beispiele für eine physische Host-Schnittstelle umfassen, aber nicht hierauf beschränkt, eine SATA-Schnittstelle (Serial Advanced Technology Attachment Schnittstelle), eine PCIe-Schnittstelle (Peripheral Component Interconnect Express Schnittstelle), eine USB-Schnittstelle (Universal Serial Bus Schnittstelle), einen Fibre Channel, ein SAS (Serial Attached SCSI), einen DDR-Speicherbus (Double Data Rate Speicherbus), ein SCSI (Small Computer System Interface), eine DIMM-Schnittstelle (Dual Inline Memory Module Schnittstelle) (z.B. eine DIMM-Sockelschnittstelle, die DDR (Double Data Rate) unterstützt), usw. Die physische Host-Schnittstelle kann zur Datenübertragung zwischen dem Host-System 120 und dem Speicher-Untersystem 110 verwendet werden. Das Host-System 120 kann außerdem eine NVM Express Schnittstelle (NVMe-Schnittstelle) verwenden, um auf Komponenten (z.B. Speichervorrichtung 130) zuzugreifen, wenn das Speicher-Untersystem 110 über die physische Host-Schnittstelle (z.B. PCle-Bus) mit dem Host-System 120 verbunden ist. Die physische Host-Schnittstelle kann eine Schnittstelle für die Weiterleitung von Steuer-, Adress-, Daten- und anderen Signalen zwischen dem Speicher-Untersystem 110 und dem Host-System 120 zur Verfügung stellen. In 1 zeigt ein Speicher-Untersystem 110 als Beispiel. Allgemein kann das Host-System 120 auf mehrere Speicher-Untersysteme über eine gemeinsame Kommunikationsverbindung, mehrere separate Kommunikationsverbindungen und/oder eine Kombination von Kommunikationsverbindungen zugreifen.
-
Die Speichervorrichtungen 130, 140 können eine beliebige Kombination der verschiedenen Typen von nichtflüchtigen Speichervorrichtungen und/oder flüchtigen Speichervorrichtungen umfassen. Bei den flüchtigen Speichervorrichtungen (z.B. Speichervorrichtung 140) kann es sich um Direktzugriffsspeicher (RAM) handeln, wie zum Beispiel dynamischer Direktzugriffsspeicher (DRAM) und synchroner dynamischer Direktzugriffsspeicher (SDRAM), jedoch nicht hierauf beschränkt.
-
Einige Beispiele für nichtflüchtige Speichervorrichtungen (z.B. Speichervorrichtung 130) umfassen einen Flash-Speicher vom Negative-Und-Typ (NAND-Typ) und einen Write-in-Place-Speicher, wie z.B. eine dreidimensionale Kreuzpunkt-Speichervorrichtung („3D-Cross-Point“-Speichervorrichtung), die ein Kreuzpunkt-Array aus nichtflüchtigen Speicherzellen ist. Ein Kreuzpunkt-Array aus nichtflüchtigem Speicher kann in Verbindung mit einem stapelbaren Kreuzgitter-Datenzugriffs-Array eine Bitspeicherung auf Basis einer Änderung des Bulk-Widerstands durchführen. Außerdem kann ein nichtflüchtiger Kreuzpunkt-Speicher, im Gegensatz zu vielen Flash-Speichern, eine Write-in-Place-Operation durchführen, bei dem eine nichtflüchtige Speicherzelle programmiert werden kann, ohne dass die nichtflüchtige Speicherzelle zuvor gelöscht wurde. Flash-Speicher vom Typ NAND umfassen beispielsweise zweidimensionale NAND (2D NAND) und dreidimensionale NAND (3D NAND).
-
Jede der Speichervorrichtungen 130 kann ein oder mehrere Arrays von Speicherzellen enthalten. Ein Typ von Speicherzellen, zum Beispiel Single-Level-Zellen (SLC), kann ein Bit pro Zelle speichern. Andere Typen von Speicherzellen, wie zum Beispiel Multi-Level-Zellen (MLCs), Triple-Level-Zellen (TLCs), Quad-Level-Zellen (QLCs) und Penta-Level-Zellen (PLCs) können mehrere Bits pro Zelle speichern. In einigen Ausführungsbeispielen kann jede der Speichervorrichtungen 130 ein oder mehrere Arrays aus Speicherzellen umfassen, wie zum Beispiel SLCs, MLCs, TLCs, QLCs oder eine beliebige Kombination davon. Bei einigen Ausführungsbeispielen kann eine bestimmte Speichervorrichtung einen SLC-Bereich und einen MLC-Bereich, einen TLC-Bereich, einen QLC-Bereich oder einen PLC-Bereich aus Speicherzellen enthalten. Die Speicherzellen der Speichervorrichtungen 130 können als Seiten gruppiert sein, die sich auf eine logische Einheit der zum Speichern von Daten verwendeten Speichervorrichtung beziehen können. Bei einigen Speichertypen (z.B. NAND) können die Seiten zu Blöcken gruppiert sein.
-
Obwohl nichtflüchtige Speicherkomponenten, wie zum Beispiel ein 3D-Kreuzpunkt-Array aus nichtflüchtiger Speicherzellen und NAND-Flash-Speicher (z.B., 2D NAND, 3D NAND) beschrieben werden, kann die Speichervorrichtung 130 auf jedem anderen Typ von nichtflüchtigen Speichern basieren, wie zum Beispiel Festwertspeicher (ROM), Phasenänderungsspeicher (PCM), selbstselektierende Speicher, andere chalcogenid-basierte Speicher, ferroelektrische Transistor-Direktzugriffsspeicher (FeTRAM), ferroelektrische Direktzugriffsspeicher (FeRAM), Magneto-Direktzugriffsspeicher (MRAM), Spin Transfer Torque (STT)-MRAM, Conductive Bridging RAM (CBRAM), resistive Direktzugriffsspeicher (RRAM), Oxid-basierte RRAM (OxRAM), Negative-Or (NOR) Flash-Speicher und elektrisch löschbare programmierbare Festwertspeicher (EEPROM).
-
Ein Speicher-Untersystem-Controller 115 (oder Controller 115 der Einfachheit halber) kann mit den Speichervorrichtungen 130 kommunizieren, um Operationen durchzuführen, wie zum Beispiel Lesen von Daten, Schreiben von Daten oder Löschen von Daten in den Speichervorrichtungen 130 und andere solche Operationen. Der Speicher-Untersystem-Controller 115 kann Hardware enthalten, wie zum Beispiel eine oder mehrere integrierte Schaltungen und/oder diskrete Komponenten, ein Pufferspeicher oder eine Kombination davon. Die Hardware kann eine digitale Schaltung mit dedizierter (d.h. hartkodierter) Logik enthalten, um die hier beschriebenen Operationen durchzuführen. Der Speicher-Untersystem-Controller 115 kann ein Mikrocontroller, eine spezielle Logikschaltung (z.B. ein feldprogrammierbares Gate-Array (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC), usw.) oder ein anderer geeigneter Prozessor sein.
-
Der Speicher-Untersystem-Controller 115 kann eine Verarbeitungsvorrichtung umfassen, die einen oder mehrere Prozessoren (z.B. Prozessor 117) enthält, die konfiguriert sind, um in einem lokalen Speicher 119 gespeicherte Instruktionen ausführen. In dem dargestellten Beispiel umfasst der lokale Speicher 119 des Speicher-Untersystem-Controllers 115 einen eingebetteten Speicher, der konfiguriert ist, um Befehle zur Durchführung verschiedener Prozesse, Operationen, logischer Abläufe und Routinen zu speichern, die den Betrieb des Speicher-Untersystems 110 steuern, einschließlich der Handhabung der Kommunikation zwischen dem Speicher-Untersystem 110 und dem Host-System 120.
-
In einigen Ausführungsbeispielen kann der lokale Speicher 119 Speicherregister enthalten, die Speicherzeiger, abgerufene Daten usw. speichern. Der lokale Speicher 119 kann auch einen Nur-Lese-Speicher (ROM) zum Speichern von Mikro-Code enthalten. Obwohl das beispielhafte Speicher-Untersystem 110 aus 1 so dargestellt ist, dass es den Speicher-Untersystem-Controller 115 enthält, kann in einem anderen Ausführungsbeispiel der vorliegenden Erfindung ein Speicher-Untersystem 110 keinen Speicher-Untersystem-Controller 115 enthalten und stattdessen auf eine externe Steuerung angewiesen sein (z.B. zur Verfügung gestellt durch einen externen Host oder durch einen vom Speicher-Untersystem getrennten Prozessor oder Controller).
-
Allgemein kann der Speicher-Untersystem-Controller 115 Befehle oder Operationen vom Host-System 120 empfangen und die Befehle oder Operationen in Instruktionen oder geeignete Befehle umwandeln, um den gewünschten Zugriff auf die Speichervorrichtungen 130 zu erreichen. Der Speicher-Untersystem-Controller 115 kann für andere Operationen verantwortlich sein, wie zum Beispiel Wear-Leveling-Operationen, Garbage-Collection-Operationen, Fehlererkennungs- und Fehlerkorrektur-Code-Operationen (ECC-Operationen), Verschlüsselungs-Operationen, Caching-Operationen und Adressübersetzungen zwischen einer logischen Adresse (z.B. logische Blockadresse (LBA), Namensraum) und einer physischen Adresse (z.B. physische Blockadresse), die mit den Speichervorrichtungen 130 in Beziehung stehen. Der Speicher-Untersystem-Controller 115 kann außerdem eine Host-Schnittstellenschaltung enthalten, um mit dem Host-System 120 über die physische Host-Schnittstelle zu kommunizieren. Die Host-Schnittstellenschaltung kann die vom Host-System empfangenen Befehle in Befehlsinstruktionen umwandeln, um auf die Speichervorrichtungen 130 zuzugreifen, und die mit den Speichervorrichtungen 130 in Beziehung stehenden Antworten in Informationen für das Host-System 120 umwandeln.
-
Das Speicher-Untersystem 110 kann auch zusätzliche Schaltungen oder Komponenten enthalten, die nicht dargestellt sind. In einigen Ausführungsbeispielen kann das Speicher-Untersystem 110 einen Cache oder Puffer (z.B. DRAM) und Adressenschaltungen (z.B. einen Zeilen-Dekoder und einen Spalten-Dekoder) enthalten, die eine Adresse vom Speicher-Untersystem-Controller 115 empfangen und die Adresse dekodieren können, um auf die Speichervorrichtungen 130 zuzugreifen.
-
Bei einigen Ausführungsbeispielen enthalten die Speichervorrichtungen 130 lokale Medien-Controller 135, die in Verbindung mit dem Speicher-Untersystem-Controller 115 arbeiten, um Operationen hinsichtlich einer oder mehreren Speicherzellen der Speichervorrichtungen 130 auszuführen. Ein externer Controller (z.B. Speicher-Untersystem-Controller 115) kann die Speichervorrichtung 130 extern verwalten (z.B. Medien-Verwaltungs-Operationen bezüglich der Speichervorrichtung 130 durchführen). In einigen Ausführungsbeispielen ist das Speicher-Untersystem 110 eine verwaltete Speichervorrichtung, die eine Roh-Speichervorrichtung 130 mit einer Steuerlogik (z.B. lokaler Medien-Controller 135) auf dem Chip und einen Controller (z.B. Speicher-Untersystem-Controller 115) für die Medienverwaltung innerhalb desselben Speichervorrichtungsbausteins umfasst. Ein Beispiel für eine verwaltete Speichervorrichtung ist eine verwaltete NAND-Vorrichtung (MNAND-Vorrichtung).
-
Bei einem Ausführungsbeispiel umfasst das Speicher-Untersystem 110 eine Speicherschnittstellen-Komponente 113. Die Speicherschnittstellen-Komponente 113 ist für die Handhabung der Interaktionen des Speicher-Untersystem-Controllers 115 mit den Speichervorrichtungen des Speicher-Untersystems 110, wie zum Beispiel der Speichervorrichtung 130, verantwortlich. Beispielsweise kann die Speicherschnittstellen-Komponente 113 Speicherzugriffsbefehle entsprechend den vom Host-System 120 empfangenen Anforderungen an die Speichervorrichtung 130 senden, wie zum Beispiel Programmbefehle, Lesebefehle oder andere Befehle. Außerdem kann die Speicherschnittstellen-Komponente 113 Daten von der Speichervorrichtung 130, wie zum Beispiel Daten, die als Reaktion auf einen Lesebefehl abgerufen wurden, oder eine Bestätigung empfangen, dass ein Programmbefehl erfolgreich ausgeführt wurde. Beispielsweise kann der Speicher-Untersystem-Controller 115 einen Prozessor 117 (Verarbeitungsvorrichtung) enthalten, der konfiguriert ist, um Befehle auszuführen, die in dem lokalen Speicher 119 gespeichert sind, um die hier beschriebenen Operationen durchzuführen.
-
In einem Ausführungsbeispiel umfasst die Speichervorrichtung 130 einen Programm-Manager 134, der konfiguriert ist, um als Reaktion auf den Empfang der Speicherzugriffsbefehle von der Speicherschnittstelle 113 entsprechende Speicherzugriffs-Operationen auszuführen. In einigen Ausführungsbeispielen umfasst der lokale Medien-Controller 135 zumindest einen Teil des Programm-Managers 134 und ist konfiguriert, um die hier beschriebene Funktionalität auszuführen. In einigen Ausführungsbeispielen ist der Programm-Manager 134 auf der Speichervorrichtung 130 unter Verwendung von Firmware, Hardware-Komponenten oder einer Kombination der oben genannten implementiert. Bei einem Ausführungsbeispiel empfängt der Programm-Manager 134 von einem Anforderer, wie zum Beispiel der Speicherschnittstelle 113, eine Anforderung zum Programmieren von Daten in einem Speicher-Array der Speichervorrichtung 130. In einem Ausführungsbeispiel kann das Speicher-Array einen ersten Bereich, der als SLC-Speicher konfiguriert ist, und einen zweiten Bereich umfassen, der als QLC-Speicher konfiguriert ist. Die Spannungspegel der Speicherzellen in dem QLC-Speicher bilden einen Satz aus 16 Programmierverteilungen, die 16 verschiedenen Kombinationen der vier Bits darstellen, die in jeder Speicherzelle gespeichert sind. In einem Ausführungsbeispiel kann der Programm-Manager 134 diese 16 Programmierverteilungen in eine Anzahl von Gruppen aufteilen, beispielsweise vier Gruppen mit jeweils vier Programmierverteilungen. So sehen die resultierenden Gruppen von Programmierverteilungen wie MLC-Verteilungen aus, die die vier verschiedenen Kombinationen von zwei Datenbits darstellen. Zwei Indikatorseiten mit Werten, die die Gruppe von Programmierverteilungen angeben, zu der jede Speicherzelle in dem QLC-Speicher gehört, können in dem SLC-Speicher gespeichert werden. Der Programm-Manager 134 kann bei einem zweiten Durchlauf der Programmier-Operation eine Vorlese-Operation durchführen, um einen grob programmierten Spannungspegel von jeder Zelle zu bestimmen, indem Lesespannungen verwendet werden, die der zugehörigen Gruppe von Programmierverteilungen entsprechen. Weitere Einzelheiten bezüglich der Operationen des Programm-Managers 134 werden nachfolgend beschrieben.
-
2A ist ein vereinfachtes Blockdiagramm einem ersten Gerät in Form einer Speichervorrichtung 130, die gemäß einem Ausführungsbeispiel mit einem zweiten Gerät in Form eines Speicher-Untersystem-Controllers 115 eines Speicher-Untersystems (z.B. das Speicher-Untersystem 110 aus 1) kommuniziert. Einige Beispiele für elektronische Systeme sind Personal Computer, Personal Digital Assistants (PDAs), Digitalkameras, digitale Medien-Abspielgeräte, digitale Aufnahmegeräte, Spiele, Geräte, Fahrzeuge, drahtlose Geräte, Mobiltelefone und dergleichen. Der Speicher-Untersystem-Controller 115 (z.B. ein Controller außerhalb der Speichervorrichtung 130) kann ein Speicher-Controller oder eine andere externe Host-Vorrichtung sein.
-
Die Speichervorrichtung 130 umfasst ein Array aus Speicherzellen 204, die logisch in Zeilen und Spalten angeordnet sind. Speicherzellen einer logischen Zeile sind normalerweise mit der gleichen Zugriffsleitung (z.B. einer Wortleitung) verbunden, während Speicherzellen einer logischen Spalte normalerweise selektiv mit der gleichen Datenleitung (z.B. einer Bitleitung) verbunden sind. Eine einzelne Zugriffsleitung kann mit mehr als einer logischen Zeile von Speicherzellen verbunden sein, und eine einzelne Datenleitung kann mit mehr als einer logischen Spalte verbunden sein. Speicherzellen (in 2A nicht dargestellt) von mindestens einem Bereich des Arrays aus Speicherzellen 204 können auf einen von mindestens zwei Ziel-Datenzuständen programmiert werden.
-
Zeilen-Dekoderschaltungen 208 und Spalten-Dekoderschaltungen 210 sind vorgesehen, um Adressensignale zu dekodieren. Adressensignale werden empfangen und dekodiert, um auf das Array aus Speicherzellen 204 zuzugreifen. Die Speichervorrichtung 130 umfasst ferner eine Eingabe/Ausgabe-Steuerschaltung (I/O-Controller) 212, um die Eingabe von Befehlen, Adressen und Daten in die Speichervorrichtung 130 sowie die Ausgabe von Daten und Statusinformationen aus der Speichervorrichtung 130 zu verwalten. Ein Adressenregister 214 steht in Verbindung mit dem I/O-Controller 212 und der Zeilen-Dekoderschaltung 208 und der Spalten-Dekoderschaltung 210, um die Adressensignale vor dem Dekodieren zu verriegeln. Ein Befehlsregister 224 steht in Verbindung mit dem I/O-Controller 212 und dem lokalen Medien-Controller 135, um eingehende Befehle zu verriegeln.
-
Ein Controller (z.B. der lokale Medien-Controller 135 innerhalb der Speichervorrichtung 130) steuert den Zugriff auf das Array aus Speicherzellen 204 in Reaktion auf die Befehle und erzeugt Statusinformationen für den externen Speicher-Untersystem-Controller 115, d.h. der lokale Medien-Controller 135 ist konfiguriert, um Zugriffs-Operationen (z.B. Lese-Operationen, Programmier-Operationen und/oder Lösch-Operationen) bezüglich des Arrays aus Speicherzellen 204 durchzuführen. Der lokale Medien-Controller 135 steht in Kommunikation mit der Zeilen-Dekoderschaltung 208 und der Spalten-Dekoderschaltung 210, um die Zeilen-Dekoderschaltung 208 und die Spalten-Dekoderschaltung 210 in Reaktion auf die Adressen zu steuern. In einem Ausführungsbeispiel umfasst der lokale Medien-Controller 134 den Programm-Manager 134, durch den die hier beschriebene doppelt verschachtelte Programmierung der Speichervorrichtung 130 implementieren kann.
-
Der lokale Medien-Controller 135 steht auch in Verbindung mit einem Cache-Register 218. Das Cache-Register 218 speichert eingehende oder ausgehende Daten gemäß den Anweisungen des lokalen Medien-Controllers 135, um Daten vorübergehend zu speichern, während das Array aus Speicherzellen 204 mit dem Schreiben bzw. Lesen anderer Daten beschäftigt ist. Während einer Programmier-Operation (z.B. einer Schreib-Operation) können Daten aus dem Cache-Register 218 an das Datenregister 220 weitergeleitet werden, um an das Array aus Speicherzellen 204 übertragen zu werden; dann können neue Daten von dem I/O-Controller 212 im Cache-Register 218 zwischengespeichert werden. Während einer Lese-Operation können Daten vom Cache-Register 218 an den I/O-Controller 212 übergeben werden, um dann an den Speicher-Untersystem-Controller 115 ausgegeben zu werden; dann können neue Daten vom Datenregister 220 an das Cache-Register 218 übergeben werden. Das Cache-Register 218 und/oder das Datenregister 220 können einen Seitenpuffer der Speichervorrichtung 130 bilden (z.B. einen Teil davon). Ein Seitenpuffer kann ferner Erfassungsvorrichtungen (in 2A nicht dargestellt) enthalten, um einen Datenzustand einer Speicherzelle des Arrays aus Speicherzellen 204 zu erfassen, z.B. durch Erfassen eines Zustands einer mit dieser Speicherzelle verbundenen Datenleitung. Ein Statusregister 222 kann mit dem I/O-Controller 212 und dem lokalen Speicher-Controller 135 in Kommunikation stehen, um die Statusinformationen für die Ausgabe an den Speicher-Untersystem-Controller 115 zu speichern.
-
Die Speichervorrichtung 130 empfängt Steuersignale an dem Speicher-Untersystem-Controller 115 von den lokalen Medien-Controller 135 über eine Steuerverbindung 232. Die Steuersignale können beispielsweise ein Chip-Enable-Signal CE#, ein Befehls-Latch-Enable-Signal CLE, ein Adressen-Latch-Enable-Signal ALE, ein Schreib-Enable-Signal WE#, ein Lese-Enable-Signal RE# und ein Schreib-Protect-Signal WP# umfassen. Zusätzliche oder alternative Steuersignale (nicht dargestellt) können je nach Art der Speichervorrichtung 130 über die Steuerverbindung 232 empfangen werden. In einem Ausführungsbeispiel empfängt die Speichervorrichtung 130 Befehlssignale (die Befehle darstellen), Adressensignale (die Adressen darstellen) und Datensignale (die Daten darstellen) von dem Speicher-Untersystem-Controller 115 über einen gemultiplexten Eingangs-/Ausgangsbus (I/O-Bus) 234 und gibt Daten an den Speicher-Untersystem-Controller 115 über den I/O-Bus 234 aus.
-
Die Befehle können beispielsweise über die Ein-/Ausgabe-Pins (I/O-Pins) [7:0] des I/O-Busses 234 an dem I/O-Controller 212 empfangen und dann in das Befehlsregister 224 geschrieben werden. Die Adressen können über die Ein-/Ausgabe-Pins (I/O-Pins) [7:0] des I/O-Busses 234 an dem I/O-Controller 212 empfangen und dann in das Adressenregister 214 geschrieben werden. Die Daten können über die Ein-/Ausgabe-Pins (I/O-Pins) [7:0] für eine 8-Bit-Vorrichtung oder die Ein-/Ausgabe-Pins (I/O-Pins) [15:0] für eine 16-Bit-Vorrichtung an dem I/O-Controller 212 empfangen und anschließend in das Cache-Register 218 geschrieben werden. Die Daten können anschließend in das Datenregister 220 zur Programmierung des Arrays aus Speicherzellen 204 geschrieben werden.
-
Bei einem Ausführungsbeispiel kann das Cache-Register 218 weggelassen werden, und die Daten können direkt in das Datenregister 220 geschrieben werden. Die Daten können auch über Ein-/Ausgabe-Pins (I/O-Pins) [7:0] für eine 8-Bit-Vorrichtung oder die Ein-/Ausgabe-Pins (I/O-Pins) [15:0] für eine 16-Bit-Vorrichtung ausgegeben werden. Obwohl auf I/O-Pins Bezug genommen wird, können sie jeden leitenden Knoten umfassen, der eine elektrische Verbindung mit der Speichervorrichtung 130 durch eine externe Vorrichtung (z.B. den Speicher-Untersystem-Controller 115) ermöglicht, wie zum Beispiel leitende Pads oder leitende Bumps, wie sie üblicherweise verwendet werden.
-
Für den Fachmann ist offensichtlich, dass zusätzliche Schaltungen und Signale vorgesehen werden können und dass die Speichervorrichtung 130 aus 2A vereinfacht wurde. Es sollte erkannt werden, dass die Funktionalität der verschiedenen Block-Komponenten, die unter Bezugnahme auf 2A beschrieben werden, nicht notwendigerweise auf verschiedene Komponenten oder Komponententeile einer integrierten Schaltungsvorrichtung aufgeteilt werden müssen. Beispielsweise kann eine einzelne Komponente oder ein Bereich einer Komponente einer integrierten Schaltungsvorrichtung so angepasst werden, dass es die Funktionalität von mehr als einer Block-Komponente aus 2A erfüllt.
-
Alternativ können eine oder mehrere Komponenten oder Komponententeile einer integrierten Schaltung kombiniert werden, um die Funktionalität einer einzelnen Blockkomponente aus 2A zu erfüllen. Außerdem, obwohl die spezifischen I/O-Pins gemäß gängigen Konventionen für den Empfang und die Ausgabe der verschiedenen Signale beschrieben werden, wird zusätzlich darauf hingewiesen, dass andere Kombinationen oder Anzahlen von I/O-Pins (oder andere I/O-Knotenstrukturen) in den verschiedenen Ausführungsbeispielen verwendet werden können.
-
2B ist ein Blockdiagramm 200, das ein Speicher-Untersystem veranschaulicht, durch das eine doppelt verschachtelte Programmierung gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung implementiert wird. In einem Ausführungsbeispiel ist die Speicherschnittstelle 113 funktional mit der Speichervorrichtung 130 gekoppelt. In einem Ausführungsbeispiel umfasst die Speichervorrichtung 130 einen Programm-Manager 134 und ein Speicher-Array 250, das ein Beispiel für das in 2A dargestellte Array aus Speicherzellen 204 ist. Das Speicher-Array 250 kann ein Array aus Speicherzellen enthalten, die an den Schnittpunkten von Wortleitungen und Bitleitungen gebildet werden. In einem Ausführungsbeispiel sind die Speicherzellen in Blöcken gruppiert, die wiederum in Unterblöcke unterteilt werden können, wobei sich beispielsweise eine Anzahl von Unterblöcken eine bestimmte Wortleitung teilen können. In einem Ausführungsbeispiel entspricht jeder Unterblock einer separaten Ebene in dem Speicher-Array 250. Die Gruppe von Speicherzellen, die mit einer Wortleitung innerhalb eines Unterblocks in Beziehung stehen, wird als physische Seite bezeichnet. In einem Ausführungsbeispiel kann es einen ersten Bereich 252 des Speicher-Arrays 250 geben, in dem die Unterblöcke als SLC-Speicher konfiguriert sind, und einen zweiten Bereich 254 des Speicher-Arrays 250, in dem die Unterblöcke als QLC-Speicher konfiguriert sind. Abhängig davon, wie sie konfiguriert sind, kann jede physische Seite in einem der Unterblöcke mehrere Seitentypen enthalten. Eine physische Seite, die aus Single-Level-Cells (SLCs) gebildet ist, hat beispielsweise einen einzigen Seitentyp, der als eine untere logische Seite (LP) bezeichnet wird. Physische Seiten vom Multi-Level-Cell-Typ (MLC-Typ) können LPs und obere logische Seiten (UPs) umfassen, physische Seiten vom TLC-Typ sind LPs, UPs und zusätzliche logische Seiten (XPs), und physische Seiten vom QLC-Typ sind LPs, UPs, XPs und oberste logische Seiten (TPs). Eine physische Seite, die aus Speicherzellen des QLC-Speichertyps gebildet ist, kann beispielsweise insgesamt vier logische Seiten haben, wobei jede logische Seite Daten speichern kann, die sich von den Daten unterscheiden, die in den anderen logischen Seiten gespeichert sind, die mit dieser physischen Seite in Beziehung stehen.
-
Abhängig vom verwendeten Programmier-Schema kann jede logische Seite einer Speicherzelle in einem separaten Programmierungsdurchlauf programmiert werden, oder es können mehrere logische Seiten gemeinsam programmiert werden. Bei einer physischen QLC-Seite können beispielsweise LP und UP in einem Durchlauf programmiert werden, und XP und TP können in einem zweiten Durchlauf programmiert werden. Andere Programmier-Schemata sind möglich. In einem Ausführungsbeispiel kann der Programm-Manager 134 zum Beispiel vier Seiten mit Host-Daten empfangen, die in den QLC-Speicher 254 programmiert werden sollen. Damit ein Bit von jeder der vier Seiten in jede Speicherzelle programmiert werden kann, kann der Programm-Manager 134 jede Speicherzelle auf einen von 16 möglichen Programmierpegeln programmieren (d.h. Spannungen, die die 16 verschiedenen Werte dieser vier Bits darstellen). Somit werden die vier Seiten der Host-Daten durch 16 verschiedene Programmierverteilungen dargestellt. In einem Ausführungsbeispiel kann der Programm-Manager 134 diese 16 Programmierverteilungen in eine Anzahl von Gruppen unterteilen, die jeweils eine kleinere Anzahl dieser Verteilungen enthalten. In einem Ausführungsbeispiel kann der Programm-Manager 134 beispielsweise vier Gruppen mit jeweils vier Programmierverteilungen bilden. Da jede Gruppe weniger als 16 Programmierverteilungen hat, ist das RWB zwischen diesen Verteilungen größer, wodurch ermöglicht wird, dass die entsprechenden Speicherzellen mit weniger Fehlern gelesen werden können. Darüber hinaus kann der Programm-Manager 134 eine Anzahl von Gruppenindikatorseiten (z.B. zwei Gruppenindikatorseiten) bilden, um die Gruppe der Programmierverteilungen anzugeben, zu der jede Speicherzelle in dem QLC-Speicher 254 gehört. Der Programm-Manager 134 kann diese Gruppenindikatorseiten in dem ersten Bereich des Speicher-Arrays 250 speichern, das als SLC-Speicher 252 konfiguriert ist. Der Programm-Manager 134 kann dann den ersten Durchlauf der Programmier-Operation durchführen, um die Zellen in dem QLC-Speicher 254 grob auf die Spannungspegel zu programmieren, die die vier Seiten der Host-Daten darstellen.
-
Anschließend, vor dem Durchführen des zweiten Durchlaufs der Programmier-Operation, kann der Programm-Manager 134 die in dem SLC-Speicher 252 gespeicherten Gruppenindikatorseiten lesen, die die Gruppe der Programmierverteilungen angeben, zu der jede Speicherzelle in dem QLC-Speicher 254 gehört. Da es in jeder Gruppe unterschiedliche Programmierverteilungen gibt, können es auch unterschiedliche Lesespannungen geben, die mit jeder Gruppe in Beziehung stehen, die ausgelegt sind, um zwischen den spezifischen Verteilungen dieser jeweiligen Gruppe zu liegen. In einem Ausführungsbeispiel kann der Programm-Manager 134 eine Vorlese-Operation der Speicherzellen in dem QLC-Speicher 254 in jeder Gruppe von Programmierverteilungen unter Verwendung der entsprechenden Lesespannungen durchführen. Beispielsweise kann der Programm-Manager 134 die Gruppe von Programmierverteilungen identifizieren, zu der eine bestimmte Speicherzelle in dem QLC-Speicher 254 gehört, und die Vorlese-Operation durchführen, um die grob programmierten Spannungspegel der Speicherzellen in dem QLC-Speicher 254 unter Verwendung der Lesespannungen zu bestimmen, die mit den entsprechenden Gruppen von Programmierverteilungen in Beziehung stehen. Die anderen Gruppen von Programmierverteilungen (d.h. die Gruppen, die nicht gelesen werden) können maskiert werden, um Interferenzen während der Vorlese-Operation zu vermeiden. Nach Bestimmung der grob programmierten Spannungspegel kann der Programm-Manager 134 den zweiten Durchlauf der Programmier-Operation durchführen, um die Speicherzellen im dem QLC-Speicher 254 auf die Spannungspegel fein zu programmieren, die die vier Seiten der Host-Daten darstellen. Der zweite Durchlauf kann eine Nachbesserung der grob programmierten Spannungspegel beinhalten, um die Ziel-Spannungspegel zu erreichen, die die vier Seiten der Host-Daten darstellen. Auf diese Weise kann der Programm-Manager 134 die grob programmierten Spannungspegel für vier Seiten von Host-Daten aus dem ersten Programmierungsdurchlauf zuverlässig auslesen, während nur zwei Seiten des SLC-Speichers 252 für die Gruppenindikatorseiten verwendet werden.
-
3 ist ein Flussdiagramm eines beispielhaften Verfahrens für eine doppelt verschachtelte Programmierung einer Speichervorrichtung in einem Speicher-Untersystem gemäß einigen Ausführungsbeispielen der vorliegenden Erfindung. Das Verfahren 300 kann von einer Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Verarbeitungsvorrichtungen, Schaltungen, dedizierte Logik, programmierbare Logik, Mikro-Code, Hardware einer Vorrichtung, integrierte Schaltungen, usw.), Software (z.B. Instruktionen, die auf einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsbeispielen wird das Verfahren 300 vom Programm-Manager 134 aus 1, 2A und 2B durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse, sofern nicht anders angegeben, geändert werden. Die dargestellten Ausführungsbeispiele sind daher nur als Beispiele zu verstehen, und die dargestellten Prozesse können in einer anderen Reihenfolge ausgeführt werden, und einige Prozesse können parallel ausgeführt werden. Außerdem können in verschiedenen Ausführungsbeispielen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jedem Ausführungsbeispiel erforderlich. Andere Prozessabläufe sind möglich.
-
Bei Operation 305 wird ein Befehl/Anforderung empfangen. Beispielsweise kann die Verarbeitungslogik (z.B. der Programm-Manager 134) von einem Anforderer, wie zum Beispiel eine Speicherschnittstelle 113 eines Speicher-Untersystem-Controllers 115, eine erste Anforderung zur Durchführung einer Speicherzugriffs-Operation auf ein Speicher-Array, wie zum Beispiel das Speicher-Array 250, einer Speichervorrichtung, wie zum Beispiel die Speichervorrichtung 130, empfangen. In einem Ausführungsbeispiel umfasst die Speicherzugriffs-Operation eine Programm-Operation. Zum Beispiel kann die Speicherzugriffs-Operation eine QLC-Programm-Operation umfassen, die mit einer Mehrzahl von Seiten (z.B. vier Seiten) von Host-Daten in Beziehung steht.
-
Bei Operation 310 werden Gruppen von Programmierverteilungen identifiziert. Zum Beispiel kann die Verarbeitungslogik eine Mehrzahl von Gruppen (z.B. vier Gruppen) von Programmierverteilungen identifizieren. Wenn ein Bit von jeder der vier Seiten der Host-Daten in jede Speicherzelle programmiert werden soll, kann der Programm-Manager 134 jede Speicherzelle auf einen von 16 möglichen Programmierpegeln programmieren (d.h. Spannungen, die die 16 verschiedenen Werte dieser vier Bits darstellen). Somit werden die vier Seiten der Host-Daten durch 16 verschiedene Programmierverteilungen dargestellt, wie in der Darstellung 410 in 4 gezeigt ist. Die 16 Programmierverteilungen können als D0-D15 bezeichnet werden. In anderen Ausführungsbeispielen kann es auch eine andere Anzahl von Programmierverteilungen geben. In einem Ausführungsbeispiel kann der Programm-Manager 134 diese 16 Programmierverteilungen in vier Gruppen unterteilen, die jeweils eine geringere Anzahl dieser Verteilungen (z.B. vier Verteilungen) enthalten, wie in der Darstellung 420 in 4 dargestellt. Somit umfasst jede Gruppe eine Teilmenge der Programmierverteilungen, die mit einem Bereich eines Speicher-Arrays einer als Quad-Level-Speicher (QLC) konfigurierten Speichervorrichtung in Beziehung steht, wie zum Beispiel der Bereich 254. In einem Ausführungsbeispiel kann Gruppe0 beispielsweise D0, D4, D8 und D12 enthalten, Gruppe1 kann D1, D5, D9 und D13 enthalten, Gruppe2 kann D2, D6, D10 und D14 enthalten, und Gruppe3 kann D3, D7, D11 und D15 enthalten. In anderen Ausführungsbeispielen kann es eine andere Anzahl von Gruppen geben, die jeweils eine andere Anzahl von Programmierverteilungen enthalten.
-
Bei Operation 315 wird ein Indikator erzeugt und gespeichert. Beispielsweise kann die Verarbeitungslogik in einem Bereich des als SLC-Speicher 252 konfigurierten Speicher-Arrays einen Indikator für die Gruppen von Programmierverteilungen, wie jene, die in Operation 310 identifiziert wurden, erzeugen und speichern, denen jede der in Operation 315 grob programmierten Speicherzellen zugeordnet ist. In einem Ausführungsbeispiel steht eine Speicherzelle mit einer bestimmten Gruppe in Beziehung, wenn die Speicherzelle auf einen Spannungspegel programmiert ist, der in eine der Programmierverteilungen fällt, aus denen die bestimmte Gruppe besteht. Wenn die Speicherzelle beispielsweise auf einen Spannungspegel programmiert ist, der in die Verteilung D5 fällt, würde die Speicherzelle der Gruppe 1 zugeordnet werden. In einem Ausführungsbeispiel umfasst der Gruppenindikator eine Mehrzahl von Seiten (z.B. zwei Seiten) mit Gruppenindikatordaten. Somit ist die Anzahl der Seiten mit Gruppenindikatordaten geringer als die Anzahl der Seiten mit den zu programmierenden Host-Daten. Dementsprechend wird weniger SLC-Speicher 252 für die Multi-Pass-Programmier-Operation (Programmier-Operation mit mehreren Durchläufen) verwendet, und die Kapazität des Speicher-Arrays 250 wird erhöht.
-
Bei Operation 320 wird eine Speicherzugriffs-Operation eingeleitet. Beispielsweise kann die Verarbeitungslogik die Speicherzugriffs-Operation bezüglich des Speicher-Arrays 250 einleiten. In einem Ausführungsbeispiel umfasst die Speicherzugriffs-Operation eine Multi-Pass-Programmier-Operation, bei der die Speicherzellen des Speicher-Arrays 250 in zwei oder mehr Programmierdurchläufen programmiert werden. In einem Ausführungsbeispiel programmiert die Verarbeitungslogik während eines ersten Durchlaufs der Multi-Pass-Programmier-Operationen Speicherzellen in dem als QLC-Speicher 254 konfigurierten Teil grob auf anfängliche Werte, die die Seiten der Host-Daten darstellen. In einem Ausführungsbeispiel kann der Programm-Manager 134 veranlassen, dass ein oder mehrere Programmierimpulse an die entsprechenden Wortleitungen des Speicher-Arrays 250 angelegt werden, um die Seiten der Host-Daten in den Speicherzellen des Speicher-Arrays 250 zu speichern. Die anfänglichen Werte können geringfügig unter den endgültigen Zielwerten liegen, so dass der erste Programmierungsdurchlauf mit minimaler Latenzzeit durchgeführt werden kann. Je nach Ausführungsbeispiel kann die Reihenfolge der hier beschriebenen Operationen variieren. Zum Beispiel kann, wie oben beschrieben, die Speicherzugriffs-Operation in Operation 320 eingeleitet werden, nachdem der Indikator in Operation 315 erzeugt und gespeichert wurde. In einem anderen Ausführungsbeispiel kann der Indikator jedoch in Operation 315 erzeugt und gespeichert werden, nachdem die Speicherzugriffs-Operation in Operation 320 eingeleitet wurde. Darüber hinaus kann in einem weiteren Ausführungsbeispiel die Speicherzugriffs-Operation in Operation 320 eingeleitet werden, bevor die Gruppen von Programmierverteilungen in Operation 310 identifiziert werden und bevor der Indikator in Operation 315 erzeugt und gespeichert wird.
-
In Operation 325 wird der Indikator gelesen. Zum Beispiel kann die Verarbeitungslogik den Indikator, einschließlich der Seiten der Gruppenindikatordaten, aus dem Bereich des Speicher-Arrays 250 lesen, der als SLC-Speicher 252 konfiguriert ist. In einem Ausführungsbeispiel kann der Programm-Manager 134 vor dem Durchführen des zweiten Durchlaufs der Multi-Pass-Programmier-Operation die im SLC-Speicher 252 gespeicherten Gruppenindikatorseiten lesen, die die Gruppe der Programmierverteilungen angeben, zu der jede Speicherzelle in dem QLC-Speicher 254 gehört.
-
Bei Operation 330 werden Speicherzellen identifiziert. Zum Beispiel kann die Verarbeitungslogik eine Teilmenge der in Operation 315 grob programmierten Speicherzellen identifizieren, die mit jeder der Gruppen von Programmierverteilungen in Beziehung stehen, und zwar basierend auf den Seiten von Gruppenindikatordaten. In einem Ausführungsbeispiel kann der Programm-Manager 134 unter Verwendung der Gruppenindikatordaten eine erste Teilmenge der Speicherzellen identifizieren, die mit einer ersten Gruppe von Programmierverteilungen in Beziehung steht, wie zum Beispiel diejenigen Speicherzellen, die auf einen Spannungspegel programmiert sind, der in eine der Programmierverteilungen fällt, die die erste Gruppe bilden. Der Programm-Manager 134 kann eine ähnliche Identifizierung für jede der übrigen Gruppen von Programmierverteilungen durchführen.
-
In Operation 335 werden die gelesenen Spannungspegel identifiziert. Zum Beispiel kann die Verarbeitungslogik die jeweiligen Lesespannungspegel identifizieren, die mit jeder der Gruppen von Programmierverteilungen in Beziehung stehen. Da es in jeder Gruppe unterschiedliche Programmierverteilungen gibt, kann es auch unterschiedliche Lesespannungen geben, die mit jeder Gruppe in Beziehung stehen. In einem Ausführungsbeispiel sind diese jeweiligen Lesespannungspegel so ausgelegt, um sich zwischen den spezifischen Verteilungen jeder bestimmten Gruppe zu befinden.
-
In Operation 340 wird eine Speicherzugriffs-Operation fortgesetzt. Zum Beispiel kann die Verarbeitungslogik die Speicherzugriffs-Operation auf das Speicher-Array 250 fortsetzen. In einem Ausführungsbeispiel umfasst die Speicherzugriffs-Operation eine Multi-Pass-Programmier-Operation, bei der die Speicherzellen des Speicher-Arrays 250 in zwei oder mehr Programmierdurchläufen programmiert werden. In einem Ausführungsbeispiel liest die Verarbeitungslogik während des zweiten Durchlaufs der Multi-Pass-Programmier-Operationen die grob programmierten anfänglichen Werte aus dem ersten Durchlauf auf der Basis des Indikators der Gruppen von Programmierverteilungen und programmiert in Operation 345 die Speicherzellen in dem Bereich des Speicher-Arrays 250, das als QLC-Speicher 254 konfiguriert ist, fein auf endgültige Werte, die die Seiten der Host-Daten darstellen. In einem Ausführungsbeispiel veranlasst der Programm-Manager 134, dass die jeweiligen Lesespannungspegel, die in Operation 335 identifiziert wurden, auf jede der Gruppen von Programmierverteilungen angewendet werden. Nach der Bestimmung der grob programmierten Anfangswerte kann der Programm-Manager 134 veranlassen, dass ein oder mehrere Programmierspannungsimpulse an die Speicherzellen in dem als QLC-Speicher 254 konfigurierten Bereich des Speicher-Arrays 250 angelegt werden, um die Anfangswerte auf die Endwerte zu erhöhen, die die Seiten der Host-Daten darstellen. Die Darstellung 430 in 4 veranschaulicht die Programmierverteilungen der fein programmierten Speicherzellen.
-
5 zeigt eine beispielhafte Maschine eines Computersystems 500, in dem ein Satz von Instruktionen ausgeführt werden kann, um die Maschine zu veranlassen, eine oder mehrere der hier erörterten Methoden durchzuführen. Bei einigen Ausführungsbeispielen kann das Computersystem 500 einem Host-System entsprechen (z.B. das Host-System 120 aus 1), das ein Speicher-Untersystem (z.B. das Speicher-Untersystem 110 aus 1) enthält, mit diesem gekoppelt ist oder dieses nutzt, oder kann verwendet werden, um die Operationen eines Controllers auszuführen (z.B. um ein Betriebssystem auszuführen, um Operationen durchzuführen, die dem Programm-Manager 134 aus 1 entsprechen). Bei alternativen Ausführungsbeispielen kann die Maschine mit anderen Maschinen in einem LAN, einem Intranet, einem Extranet und/oder dem Internet verbunden (z.B. vernetzt) sein. Die Maschine kann in der Funktion eines Servers oder einer Client-Maschine in einer Client-Server-Netzwerkumgebung, als Peer-Maschine in einer Peer-to-Peer (oder verteilten) Netzwerkumgebung oder als ein Server oder eine Client-Maschine in einer Cloud-Computing-Infrastruktur oder -Umgebung arbeiten.
-
Bei der Maschine kann es sich um einen Personal Computer (PC), einen Tablet-PC, eine Set-Top-Box (STB), einen Personal Digital Assistant (PDA), ein Mobiltelefon, eine Web-Anwendung, einen Server, einen Netzwerk-Router, einen Switch oder Bridge oder eine beliebige Maschine handeln, die in der Lage ist, eine Reihe von Instruktionen (sequenziell oder anderweitig) auszuführen, die die von dieser Maschine auszuführenden Aktionen spezifizieren. Auch wenn eine einzelne Maschine dargestellt ist, umfasst der Begriff „Maschine“ auch beliebige Typen von Maschinen, die einzeln oder gemeinsam einen Satz (oder mehrere Sätze) von Instruktionen ausführen, um eine oder mehrere der hier erörterten Methoden durchzuführen.
-
Das beispielhafte Computersystem 500 umfasst eine Verarbeitungsvorrichtung 502, einen Hauptspeicher 504 (z.B. Festwertspeicher (ROM), Flash-Speicher, dynamischer Direktzugriffsspeicher (DRAM), wie zum Beispiel synchroner DRAM (SDRAM) oder Rambus DRAM (RDRAM), usw.), einen statischen Speicher 506 (z.B. Flash-Speicher, statischer Direktzugriffsspeicher (SRAM), usw.) und ein Datenspeichersystem 518, die über einen Bus 530 miteinander kommunizieren.
-
Die Verarbeitungsvorrichtung 502 repräsentiert eine oder mehrere Allzweck-Verarbeitungsvorrichtungen, wie z.B. ein Mikroprozessor, eine zentrale Verarbeitungseinheit oder Ähnliches. Insbesondere kann die Verarbeitungsvorrichtung ein CISC-Mikroprozessor (Complex Instruction Set Computing), ein RISC-Mikroprozessor (Reduced Instruction Set Computing), ein VLIW-Mikroprozessor (Very Long Instruction Word) oder ein Prozessor sein, der andere Befehlssätze implementiert, oder ein Prozessor, der eine Kombination von Instruktionssätzen implementiert. Bei der Verarbeitungsvorrichtung 502 kann es sich auch um eine oder mehrere spezielle Verarbeitungsvorrichtungen handeln, wie z.B. eine anwendungsspezifische integrierte Schaltung (ASIC), ein FeldProgrammierbares Gate-Array (FPGA), ein digitaler Signalprozessor (DSP), ein Netzwerkprozessor oder Ähnliches. Die Verarbeitungsvorrichtung 502 ist konfiguriert, um Instruktionen 526 zur Durchführung der hier besprochenen Operationen und Schritte ausführt. Das Computersystem 500 kann ferner eine Netzwerkschnittstellenvorrichtung 508 zur Kommunikation über das Netzwerk 520 umfassen.
-
Das Datenspeichersystem 518 kann ein maschinenlesbares Speichermedium 524 (auch bekannt als computerlesbares Medium, wie z.B. ein nichttransitorisches computerlesbares Medium) enthalten, auf dem ein oder mehrere Sätze von Instruktionen 526 oder Software gespeichert ist, die eine oder mehrere der hier beschriebenen Methoden oder Funktionen verkörpern. Die Instruktionen 526 können sich auch vollständig oder zumindest teilweise in dem Hauptspeicher 504 und/oder in der Verarbeitungsvorrichtung 502 befinden, während sie von dem Computersystem 500 ausgeführt werden, wobei der Hauptspeicher 504 und die Verarbeitungsvorrichtung 502 ebenfalls maschinenlesbare Speichermedien darstellen. Das maschinenlesbare Speichermedium 524, das Datenspeichersystem 518 und/oder der Hauptspeicher 504 können dem Speicher-Untersystem 110 aus 1 entsprechen.
-
In einer Ausführungsbeispiel enthalten die Instruktionen 526 Instruktionen zur Implementierung von Funktionen, die dem Programm-Manager 114 aus 1 entsprechen. Obwohl das maschinenlesbare Speichermedium 524 in einem Ausführungsbeispiel als einzelnes Medium dargestellt ist, soll der Begriff „maschinenlesbares Speichermedium“ so verstanden werden, dass er ein einzelnes Medium oder mehrere Medien umfasst, die den einen oder mehrere Sätze von Instruktionen speichern. Der Begriff „maschinenlesbares Speichermedium“ soll auch jedes Medium umfassen, das in der Lage ist, einen Satz von Instruktionen zur Ausführung durch die Maschine zu speichern oder zu kodieren, und die die Maschine veranlassen, eine oder mehrere der Methoden der vorliegenden Erfindung durchzuführen. Der Begriff „maschinenlesbares Speichermedium“ soll dementsprechend Festkörperspeicher, optische Medien und magnetische Medien einschließen, ist aber nicht darauf beschränkt.
-
Einige Teile der vorangehenden detaillierten Beschreibungen wurden in Form von Algorithmen und symbolischen Darstellungen von Operationen bezüglich Datenbits in einem Computerspeicher dargestellt. Diese algorithmischen Beschreibungen und Darstellungen werden vom Fachmann auf dem Gebiet der Datenverarbeitung verwendet, um anderen Fachleuten den Inhalt ihrer Arbeit am effektivsten zu vermitteln. Ein Algorithmus wird hier und allgemein als eine in sich konsistente Folge von Operationen verstanden, die zu einem gewünschten Ergebnis führt. Bei den Operationen handelt es sich um solche, die physikalische Manipulationen von physikalischen Größen erfordern. Normalerweise, wenn auch nicht notwendigerweise, haben diese Größen die Form von elektrischen oder magnetischen Signalen, die gespeichert, kombiniert, verglichen und anderweitig manipuliert werden können. Zuweilen hat es sich als zweckmäßig erwiesen, diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Begriffe, Zahlen oder dergleichen zu bezeichnen, hauptsächlich aus Gründen des allgemeinen Sprachgebrauchs.
-
Es sollte jedoch bedacht werden, dass alle diese und ähnliche Begriffe mit den entsprechenden physikalischen Größen in Verbindung gebracht werden müssen und lediglich praktische Bezeichnungen für diese Größen sind. Die vorliegende Erfindung kann sich auf die Aktionen und Prozesse eines Computersystems oder einer ähnlichen elektronischen Rechenvorrichtung beziehen, die Daten, die als physikalische (elektronische) Größen in den Registern und Speichern des Computersystems dargestellt werden, manipuliert und in andere Daten umwandelt, die in ähnlicher Weise als physikalische Größen in den Speichern oder Registern des Computersystems oder in anderen solchen Informationsspeichersystemen dargestellt werden.
-
Die vorliegende Erfindung bezieht sich auch auf eine Vorrichtung zur Durchführung der hier beschriebenen Operationen. Diese Vorrichtung kann speziell für die beabsichtigten Zwecke konstruiert sein, oder sie kann einen Allzweckcomputer umfassen, der durch ein im Computer gespeichertes Computerprogramm selektiv aktiviert oder neu konfiguriert wird. Ein solches Computerprogramm kann in einem computerlesbaren Speichermedium gespeichert werden, wie z.B., aber nicht beschränkt auf, jeder Typ von Diskette, einschließlich Disketten, optische Disketten, CD-ROMs und magnetisch-optische Disketten, Festwertspeicher (ROMs), Speicher mit wahlfreiem Zugriff (RAMs), EPROMs, EEPROMs, magnetische oder optische Karten oder jede Art von Medien, die zur Speicherung elektronischer Instruktionen geeignet sind und jeweils mit einem Computersystembus verbunden sind.
-
Die hier vorgestellten Algorithmen und Darstellungen sind nicht inhärent an einen bestimmten Computer oder ein anderes Gerät gebunden. Verschiedene Allzwecksysteme können mit Programmen gemäß den hier dargelegten Lehren verwendet werden, oder es kann sich als zweckmäßig erweisen, ein spezielleres Gerät zur Durchführung der Methode zu konstruieren. Die Struktur für eine Vielzahl dieser Systeme wird in der folgenden Beschreibung dargestellt. Darüber hinaus wird die vorliegende Erfindung nicht unter Bezugnahme auf eine bestimmte Programmiersprache beschrieben. Es ist offensichtlich, dass eine Vielzahl von Programmiersprachen verwendet werden kann, um die Lehren der Offenbarung, wie hier beschrieben, zu implementieren.
-
Die vorliegende Erfindung kann als Computerprogrammprodukt oder Software bereitgestellt werden, die ein maschinenlesbares Medium mit darauf gespeicherten Instruktionen umfassen kann, die zur Programmierung eines Computersystems (oder anderer elektronischer Vorrichtungen) zur Durchführung eines Verfahrens gemäß der vorliegenden Erfindung verwendet werden können. Ein maschinenlesbares Medium umfasst jeden Mechanismus zum Speichern von Informationen in einer Form, die von einer Maschine (z.B. ein Computer) gelesen werden kann. Bei einigen Ausführungsbeispielen umfasst ein maschinenlesbares (z.B. computerlesbares) Medium ein maschinenlesbares (z.B. computerlesbares) Speichermedium, wie zum Beispiel einen Festwertspeicher („ROM“), einen Direktzugriffsspeicher („RAM“), Magnetplatten-Speichermedien, optische Speichermedien, Flash-Speicherkomponenten usw.
-
In der vorstehenden Beschreibung wurden Ausführungsbeispiele der Erfindung unter Bezugnahme auf spezifische Ausführungsbeispiele beschrieben. Es ist offensichtlich, dass verschiedene Modifikationen daran vorgenommen werden können, ohne vom Grundgedanken und Umfang der Ausführungsbeispiele der Erfindung, wie sie in den folgenden Ansprüchen dargelegt sind, abzuweichen. Die Beschreibung und die Zeichnungen sind dementsprechend eher in einem illustrativen als in einem einschränkenden Sinne zu verstehen.