-
HINTERGRUND
-
Wenn eine Hostvorrichtung Daten in eine Speichervorrichtung schreibt und Daten von einer Speichervorrichtung liest, schreibt und liest der Host Daten in Form von logischen Blockadressen (LBAs). Die grundlegende Einheit der Datenübertragung zwischen dem Host und der Speichervorrichtung wird hier als ein „Sektor“ bezeichnet. Mit „Basiseinheit“ ist gemeint, dass dies die minimale Größe der Datenübertragung für einen Lese- oder Schreibbefehl ist. Eine Anforderung zum Lesen oder Schreiben ist somit eine Anforderung, eine ganze Zahl von Sektoren zu lesen oder zu schreiben. Die Größe eines Sektors kann von einer Implementierung zur nächsten variieren, aber ein Beispiel einer Sektorgröße ist 512 Bytes. Es ist zu beachten, dass der hier benutzte Ausdruck „Sektor“ sich nicht auf einen physischen Sektor auf einem Festplattenlaufwerk oder dergleichen bezieht. Man beachte, dass jede LBA einem Sektor entspricht.
-
Die Speichervorrichtung weist typischerweise eine Speichersteuerung auf, die die LBAs in physische Adressen von Speicherzellen auf der Speichervorrichtung übersetzt. Zum Beispiel verfügt ein Flashspeicher über eine Flash-Transferebene (FTL) oder Medien-Verwaltungs-Schicht (MML), die eine Übertragung einer logischen Adresse in eine physische Adresse durchführt.
-
Vor dem Schreiben von Daten in die Speicherzellen bildet die Speichersteuerung typischerweise ein Codewort aus den Daten von dem Host. Das Codewort enthält die Hostdaten und ein oder mehrere Paritätsbits. Die Anzahl der Paritätsbits kann variieren, abhängig von der Stärke der Fehlerkorrektur. Das Codewort wird hier als eine „ECC-Seite“ bezeichnet. Eine ECC-Seite wird aus einem oder mehreren Sektoren von Hostdaten gebildet. Zum Beispiel kann eine ECC-Seite aus vier Sektoren von Hostdaten gebildet werden. Wenn die Sektorgröße 512 Bytes beträgt, könnte eine ECC-Seite somit 2K Bytes von Hostdaten plus Paritätsbits enthalten. Eine ECC-Seite ist eine Programmierungseinheit in der Speichervorrichtung.
-
Die Speichersteuerung weist eine minimale adressierbare Einheit auf, die typischerweise aus einer oder mehreren ECC-Seiten besteht. Somit entspricht die minimale adressierbare Einheit einer gewissen Anzahl von Sektoren. Hierbei wird der Ausdruck „Fragment“ verwendet, um auf die minimale adressierbare Einheit des Speichers in der Speichervorrichtung Bezug zu nehmen. Zum Beispiel ist dann, wenn die minimale adressierbare Einheit zwei ECC-Seiten umfasst, die minimale adressierbare Einheit 4 KB (unter der Annahme von 512-Byte-Sektoren und vier Sektoren pro ECC-Seite).
-
Hier ist ein abgestimmter Schreibvorgang als ein solcher definiert, bei dem die Start-LBA und die Datengröße ein Vielfaches der Anzahl von Sektoren in dem Fragment sind. Wenn es beispielsweise acht Sektoren in einem Fragment gibt, dann hat ein abgestimmter Schreibvorgang eine Start-LBA, die ein Vielfaches von acht ist, und eine Datengröße, die ein ganzzahliges Vielfaches von acht Sektoren ist.
-
Hierbei wird ein Schreibvorgang, der kein abgestimmter Schreibvorgang ist, als ein nichtabgestimmter Schreibvorgang bezeichnet. Somit kann ein nichtabgestimmter Schreibvorgang entweder: 1) eine Start-LBA aufweisen, die nicht ein Vielfaches der Anzahl von Sektoren in dem Fragment ist; oder 2) eine Datengröße aufweisen, die nicht ein Vielfaches der Anzahl von Sektoren in dem Fragment ist.
-
Wenn ein Host einen abgestimmten Schreibbefehl sendet, können die Daten einfach als ein oder mehrere Fragmente in den Speicherchip geschrieben werden. Wenn jedoch ein Host einen nichtabgestimmten Schreibbefehl sendet, muss die Speichersteuerung die Hostdaten vor-auffüllen (pre-pad) und/oder nach-auffüllen (post-pad), um „abgestimmte Daten“ zu bilden. Mit abgestimmten Daten ist gemeint, dass ein vollständiges Fragment gebildet wird. Die Speichersteuerung muss möglicherweise die Vor-Auffülldaten und/oder Nach-Auffülldaten aus Speicherzellen lesen. Somit kann es sein, dass die Speichersteuerung möglicherweise einen Read-Modify-Write-Vorgang durchführt. Ein Read-Modify-Write-Vorgang bezieht sich auf das Lesen von Vor-Auffülldaten bzw. Nach-Auffülldaten aus Speicherzellen auf dem Speicherchip, das Bilden eines Fragments abgestimmter Daten und das Schreiben des Fragments abgestimmter Daten in den Speicherchip.
-
Das Ausführen von Read-Modify-Write-Vorgängen kann ziemlich zeitaufwändig sein. Außerdem kann das Durchführen von Read-Modify-Write-Vorgängen den Schreibfaktor erhöhen. Schreibfaktorerhöhung bedeutet, dass die tatsächlich in die Speichervorrichtung geschriebene Datenmenge größer ist als die Menge der zu schreibenden Hostdaten. Die Schreibfaktorerhöhung kann die Lebensdauer der Speichervorrichtung verringern.
-
Figurenliste
-
- 1A ist ein Blockdiagramm, das eine Ausführungsform einer Speichervorrichtung darstellt, die mit einer Hostvorrichtung verbunden ist.
- 1B ist eine perspektivische Ansicht einer dreidimensionalen (3D) gestapelten nichtflüchtigen Speichervorrichtung.
- 1C ist ein Funktionsblockdiagramm einer beispielhaften Speichervorrichtung, wie der dreidimensionalen gestapelten nichtflüchtigen Speichervorrichtung von 1B.
- 2 ist ein Blockdiagramm eines beispielhaften Speichersystems, das weitere Details einer Ausführungsform einer Steuerung zeigt.
- 3A zeigt N+1 Speicherpakete (Paket 0 - Paket N) und N+1 Kanäle (Kanal 0 - Kanal N) zur Kommunikation zwischen der Steuerung und den Speicherchips der jeweiligen Speicherpakete 0 - N.
- 3B ist ein Blockdiagramm, das eine Ausführungsform des Abtastblocks SB1 von 1C zeigt.
- 4A zeigt eine beispielhafte Struktur eines Speicherzellenarrays.
- 4B zeigt ein Beispiel eines Speicherchips mit zwei Ebenen.
- 5 zeigt, wie Daten für nichtabgestimmte Schreibbefehle in einem Datenpuffer vor-aufgefüllt und/oder nach-aufgefüllt werden können, um ein vollständiges Fragment zu erzeugen.
- 6 ist ein Flussdiagramm eines Prozesses zum Handhaben nichtabgestimmter Schreibbefehle.
- 7 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Bilden abgestimmter Daten für einen nichtabgestimmten Schreibbefehl.
- 8 ist ein Diagramm, das die Zeitsteuerung in einer Ausführungsform für das Programmieren von Daten für mehrere nichtabgestimmte Schreibbefehle darstellt.
- 9 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Handhaben von nichtabgestimmten Schreibbefehlen, der während eines Faltens von SLC-Speicherzellen zu MLC-Speicherzellen durchgeführt wird.
-
DETAILLIERTE BESCHREIBUNG
-
Speichervorrichtungen und Verfahren zur deren Verwendung werden hier beschrieben. Solche Speichervorrichtungen können einen Flashspeicher (nichtflüchtigen Speicher), einen Arbeitsspeicher (RAM) und eine Speichersteuerung in Kommunikation mit dem Flashspeicher und dem RAM beinhalten. Gemäß bestimmten Ausführungsformen der vorliegenden Technologie sind eine oder mehrere Steuerschaltungen eines Speichersystems eingerichtet, um das Abtasten von Vor-Auffülldaten bzw. Nach-Auffülldaten für einen nichtabgestimmten Schreibbefehl mit der Übertragung zuvor abgetasteter Vor-Auffülldaten bzw. Nach-Auffülldaten für einen anderen nichtabgestimmten Schreibbefehl zu konsolidieren. Durch Konsolidieren des Abtastens und Übertragens wird beträchtliche Zeit gespart, wenn Daten für einen Satz von zwei oder mehr nichtabgestimmten Schreibbefehlen programmiert werden. Auch werden in einer Ausführungsform Daten für mehrere nichtabgestimmte Schreibbefehle gleichzeitig programmiert. Einige herkömmliche Lösungen müssen möglicherweise einen Programmiervorgang für jeden nichtabgestimmten Schreibbefehl durchführen. In einigen Ausführungsformen wird nur eine Programmieroperation für einen Satz von zwei oder mehr nichtabgestimmten Schreibbefehlen ausgeführt. Dadurch wird durch Ausführungsformen eines Speichersystems beträchtlich an Programmierzeit eingespart. Auch wird durch Ausführungsformen eines Speichersystems beträchtliche Leistung gespart, indem die Anzahl von Programmieroperationen reduziert wird. Außerdem kann die Schreibfaktorerhöhung durch Ausführungsformen eines Speichersystems reduziert werden. Auf diese Weise kann die Lebensdauer des Speichersystems erhöht werden.
-
In der folgenden detaillierten Beschreibung wird auf die beigefügten Zeichnungen Bezug genommen, die einen Teil hiervon bilden und in denen zur Veranschaulichung spezifische veranschaulichende Ausführungsformen dargestellt werden. Es versteht sich, dass andere Ausführungsformen verwendet werden können, und dass mechanische und elektrische Änderungen vorgenommen werden können. Die folgende detaillierte Beschreibung ist daher nicht in einem einschränkenden Sinn zu verstehen. In der folgenden Beschreibung werden gleiche Bezugszeichen oder Referenzbezeichner verwendet, um durchgehend gleiche Teile oder Elemente zu bezeichnen. Zusätzlich identifizieren die erste Ziffer von dreistelligen Bezugsnummern und die ersten zwei Ziffern von vierstelligen Bezugsnummern die Zeichnung, in der die Bezugsnummer zuerst erscheint.
-
1A ist ein Blockdiagramm, das eine Ausführungsform eines Speichersystems 100 darstellt, das mit einer Hostvorrichtung 140 verbunden (oder in die Hostvorrichtung 140 eingebettet) ist, die Ausführungsformen der unten beschriebenen vorliegenden Technologie implementieren kann. In 1A, speichert die Hostvorrichtung 140 Daten in dem Speichersystem 100 ab und ruft von dort Daten ab, indem sie Schreib- und Lesebefehle ausgibt. Das Speichersystem 100 kann in die Hostvorrichtung 140 eingebettet sein oder kann in Form einer Karte, eines universellen seriellen Bus- (USB-) Laufwerks oder eines anderen Wechsellaufwerks wie etwa einer Solid-State-Festplatte (SSD) vorliegen, die abnehmbar mit der Hostvorrichtung 140 durch einen mechanischen und elektrischen Verbinder verbunden ist. Die Hostvorrichtung 140 kann irgendeine einer Anzahl fester oder tragbarer Daten erzeugender Vorrichtungen sein, wie beispielsweise ein Personal Computer, ein Smartphone, ein persönlicher digitaler Assistent (PDA), ein Server, eine Set-Top-Box oder dergleichen. Allgemeiner gesagt, kann die Hostvorrichtung 140 eine eigene Logik beinhalten, die die Funktionen eines Smartphones, eines PDA, eines Laptops, eines Servers, einer Set-Top-Box usw. ausführt. Obwohl nicht spezifisch gezeigt, kann der Host in Verbindung mit einem Nur-Lese-Speicher (ROM) stehen oder einen solchen beinhalten.
-
Die Hostvorrichtung 140, die nachfolgender als Host 140 bezeichnet werden kann, kann einen oder mehrere Hostprozessoren 10 beinhalten. Die Hostprozessoren können ein oder mehrere Anwendungsprogramme ausführen. Die Anwendungsprogramme kommunizieren, wenn Daten auf dem Speichersystem 100 gespeichert oder aus diesem abgerufen werden sollen, über eine oder mehrere Betriebssystem-Anwendungsprogrammierschnittstellen (APIs) mit einem Dateisystem. Das Dateisystem kann ein Softwaremodul sein, das auf dem/den Prozessor(en) 10 ausgeführt wird und die Dateien in dem Speichersystem 100 verwaltet. Das Dateisystem verwaltet Cluster von Daten im logischen Adressraum. Gemeinsame Operationen, ausgeführt durch ein Dateisystem, beinhalten Operationen zum Erstellen, Öffnen, Schreiben (Speichern) von Daten, dem Lesen (Abrufen) von Daten, zur Suche nach einem bestimmten Ort in einer Datei, zum Verschieben, Kopieren, und Löschen von Dateien. Das Dateisystem kann Schaltungen, Software oder eine Kombination von Schaltungen und Software sein.
-
Der Kommunikationskanal 56 zwischen dem Host 140 und dem Speichersystem 100 kann verwendet werden, um Befehle, Daten, usw. zu übertragen. Die Schnittstelle zur Kommunikation über den Kommunikationskanal 56 kann eine beliebige einer Anzahl von bekannten Schnittstellen sein, wie Schnittstellen des Typs Secure Data (SD), Multimediakarten (MMC), eine Universal-Serial-Bus- (USB-) Speichervorrichtung, ein Serial Advanced Technology Attachment (SATA) und eine Small-Computer-System-Schnittstelle (SCSI). Der Host 140 kann einen logischen Adressbereich für alle logischen Blockadressen (LBAs) aufrechterhalten, denen von dem Host 140 Daten zugewiesen wurden. Zusätzlich zu der Verwendung, um auf den Kommunikationskanal zwischen dem Host 140 und dem Speichersystem 100 Bezug zu nehmen, kann das Bezugszeichen 56 auch verwendet werden, um Host-Schnittstellensignale zu bezeichnen, die über den Kommunikationskanal 56 kommuniziert werden.
-
Der Host 140 verwendet das Dateisystem, um Dateien, die innerhalb des Speichersystems 100 gespeichert sind, zu adressieren, was das Schreiben von Daten in den nichtflüchtigen Speicher des Speichersystems 100 und das Lesen von Daten aus dem nichtflüchtigen Speicher 126 umfassen kann. Beispielhafte Typen von Dateisystemen, die von dem Host 140 verwendet werden können, beinhalten FAT32, exFAT, ext2/3, HFS+, sind aber nicht darauf beschränkt. Das Speichersystem 100 wird typischerweise dazu entworfen sein, um mit verschiedenen Hosts zu arbeiten, von denen jeder einen anderen Typ von Dateisystem verwenden kann. Dies kann dazu führen, dass das Speichersystem 100 eine schlechte Schreibleistung aufgrund von übermäßigem Vor-Auffüllen bzw. Nach-Auffüllen von kleinen Datenblöcken aufweist.
-
Das Speichersystem 100 beinhaltet eine Speichersteuerung 122 (die auch als die Steuerung 122 bezeichnet werden kann) in Kommunikation mit dem Speicherchip 108 über die Kommunikationsschnittstelle 118. Die Kommunikationsschnittstelle 118 kann eine beliebige geeignete Schnittstelle sein, wie eine offene NAND-Flashspeicher- (ONFI-) Schnittstelle. Die Steuerung 122 weist einen Prozessor 122c und einen flüchtigen Speicher 122b auf. Der flüchtige Speicher 122b kann verwendet werden, um eine Befehlswarteschlange 32 zu speichern, die verwendet wird, um Befehle von dem Host 10 zu speichern. Diese Befehle können Speicherzugriffsbefehle wie Lesen, Schreiben oder Löschen beinhalten. In einigen Ausführungsformen ist die Steuerung 122 in der Lage, die Reihenfolge der Ausführung der Befehle in der Warteschlange 32 auszuwählen. Ein Teil des flüchtigen Speichers 122b kann für einen Datenpuffer 34 verwendet werden, der verwendet werden kann, um Daten von dem Host 140 zu speichern, die in den Speicher 126 programmiert werden. Der Datenpuffer 34 kann auch dazu verwendet werden, Daten zu speichern, die aus dem Speicher 126 gelesen werden, um zu dem Host 140 übertragen zu werden.
-
Ein Teil des flüchtigen Speichers 122b kann verwendet werden, um einen Cache von logischen bis physischen Zuordnungen (L2P Cache 36) sowie einen Cache von physischen zu logischen Zuordnungen (P2L Cache 38) zu speichern. Die Steuerung 122 kann die logischen bis physischen Zuordnungen verwenden, um logische Blockadressen in Speicherzugriffsbefehlen von dem Host 140 auf physische Adressen von Speicherzellen in der Speicherstruktur 126 abzubilden. Beispielsweise können logische Blockadressen (LBAs) physischen Blockadressen (PBAs) zugeordnet werden. Solche Zuordnungen können verwendet werden, um LBAs direkt auf die PBAs abzubilden, oder LBAs können auf Zwischen- oder virtuellen Blockadressen abgebildet werden, die auf PBAs abgebildet werden.
-
Der Speicherchip 108 weist eine Speicherstruktur 126 auf. Die Speicherstruktur 126 wird verwendet, um Hostdaten 50 zu speichern. Die Speicherstruktur 126 wird auch verwendet, um Verwaltungstabellen 60 zu speichern. Die Verwaltungstabellen können L2P-Tabellen 66 und P2L-Tabellen 68 beinhalten. Es ist zu beachten, dass der LTP-Cache 36 ein Cache der L2P-Tabellen 66 ist und dass der P2L-Cache 38 ein Cache der P2L-Tabellen 68 ist.
-
Der Speicherchip 108 weist einen Satz von Abtastdatenregistern 40 auf, die verwendet werden können, um Daten zu speichern, die von den Speicherzellen abgetastet wurden. Die Abtastdatenregister 40 können auch verwendet werden, um Daten zu speichern, die in die Speicherzellen programmiert werden sollen. Die Abtastdatenregister 40 sind in einer Ausführungsform Daten-Latches. Der Speicherchip 108 weist einen Satz von E/A-Registern 42 auf, die verwendet werden können, um Daten von der Speichersteuerung 122 zu speichern, die in Speicherzellen geschrieben werden. Die E/A-Register 42 können auch verwendet werden, um Daten zu speichern, die aus Speicherzellen gelesen werden, die in den Datenpuffer 34 zu übertragen sind. Die E/A-Register 42 sind in einer Ausführungsform Daten-Latches.
-
Beim Schreiben der Speicherstruktur 126 können Daten vom Hostspeicher 20 zum Datenpuffer 34 übertragen werden. Die Speichersteuerung 122 kann Daten von dem Datenpuffer 34 zu den E/A-Datenregistern 42 übertragen. Die Daten von den E/A-Datenregistern 42 können dann zu den Abtastdatenregistern 40 übertragen werden. Die Daten aus den Abtastdatenregistern 40 können dann in Speicherzellen in der Speicherstruktur 126 programmiert werden. Es ist zu beachten, dass Details wie das Hinzufügen von Paritätsbits zu den Hostdaten nicht beschrieben sind, um die Erklärung zu vereinfachen.
-
Beim Lesen der Speicherstruktur 126 können Daten von den Speicherzellen in der Speicherstruktur 126 abgetastet und in die Abtastdatenregister 40 platziert werden. Die Daten aus den Abtastdatenregistern 40 können dann zu den E/A-Datenregistern 42 übertragen werden. Die Daten in den E/A-Datenregistern 42 können dann zu dem Datenpuffer 34 übertragen werden. Die Daten in dem Datenpuffer 34 können dann an den Hostspeicher 20 übertragen werden. Es ist zu beachten, dass Einzelheiten wie das Durchführen einer Fehlerkorrektur an den Daten, die aus der Speicherstruktur 126 gelesen werden, nicht beschrieben sind, um die Erklärung zu vereinfachen.
-
In einigen hier offenbarten Ausführungsformen überprüft die Speichersteuerung 122 die Befehlswarteschlange 32 auf nichtabgestimmte Schreibvorgänge vom Host 140. Das nichtabgestimmte Schreiben enthält mindestens einen Sektor von Daten vom Host, füllt aber ein Fragment in dem Datenpuffer 34 nicht vollständig. Die Speichersteuerung 122 sendet einen Befehl an den Speicherchip, um vor-aufgefüllte bzw. nach-aufgefüllte Daten für das nichtabgestimmte Schreiben bereitzustellen, um ein vollständiges Fragment zu bilden, was hier als das Bilden abgestimmter Daten bezeichnet wird. Darüber hinaus konsolidiert das Speichersystem 100 die Abtastung der vor-aufgefüllten bzw. nach-aufgefüllten Daten für einen nichtabgestimmten Schreibbefehl mit der Übertragung von zuvor abgetasteten vor-aufgefüllten bzw. nach-aufgefüllten Daten für einen anderen nichtabgestimmten Schreibbefehl. Zum Beispiel werden beim Abtasten der Daten in dem Abtastdatenregister 40 für einen nichtabgestimmten Schreibbefehl die zuvor abgetasteten Auffülldaten für einen anderen nichtabgestimmten Schreibbefehl vom E/A-Datenregister 42 zu dem Puffer übertragen. Durch Konsolidieren des Abtastens und Übertragens wird beträchtliche Zeit gespart, wenn Daten für einen Satz von zwei oder mehr nichtabgestimmten Schreibbefehlen weitergereicht werden.
-
Die Speichersteuerung 122 sendet in einer Ausführungsform die Fragmente für mehrere nichtabgestimmte Schreibbefehle an den Speicherchip 108, der anfänglich die Fragmente in den E/A-Datenregistern 42 speichert. Diese Fragmente werden dann in die Abtastdatenregister 40 übertragen, wo sie verwendet werden können, um Speicherzellen in der Speicherstruktur 126 zu programmieren. Die Fragmente für mehrere nichtabgestimmte Schreibbefehle werden in einer Ausführungsform gleichzeitig programmiert. Einige herkömmliche Lösungen müssen möglicherweise einen Programmiervorgang für jeden nichtabgestimmten Schreibbefehl durchführen. Auf diese Weise wird beträchtliche Programmierzeit eingespart. Außerdem kann die Schreibfaktorerhöhung reduziert werden.
-
Die 1B-4 beschreiben ein Beispiel eines Speichersystems 100, das verwendet werden kann, um die hier vorgeschlagene Technologie zu implementieren. 1B ist eine perspektivische Ansicht einer dreidimensionalen (3D) gestapelten nichtflüchtigen Speichervorrichtung. Die Speichervorrichtung 100 beinhaltet ein Substrat 101. Auf und über dem Substrat befinden sich Beispielblöcke BLK0 und BLK1 von Speicherzellen (nichtflüchtige Speicherelemente). Auf dem Substrat 101 befindet sich auch ein Peripheriebereich 104 mit Unterstützungsschaltungen zur Verwendung durch die Blöcke. Das Substrat 101 kann auch Schaltungen unter den Blöcken zusammen mit einer oder mehreren unteren Metallschichten tragen, die in Leiterbahnen strukturiert werden, um Signale der Schaltungen zu tragen. Die Blöcke sind in einem Zwischenbereich 102 der Speichervorrichtung ausgebildet. In einem oberen Bereich 103 der Speichervorrichtung sind eine oder mehrere obere Metallschichten in Leiterbahnen strukturiert, um Signale der Schaltungen zu tragen. Jeder Block weist einen gestapelten Bereich von Speicherzellen auf, wobei alternierende Ebenen des Stapels Wortleitungen darstellen. Während zwei Blöcke beispielhaft dargestellt sind, können zusätzliche Blöcke verwendet werden, die sich in x- und/oder y-Richtung erstrecken.
-
In einer Beispielimplementierung repräsentiert die Länge der Ebene in x-Richtung eine Richtung, in der sich Signalpfade für Wortleitungen erstrecken (eine Wortleitungs- oder SGD-Leitungsrichtung), und die Breite der Ebene in y-Richtung repräsentiert eine Richtung, in der sich Signalpfade für Bitleitungen erstrecken (eine Bitleitungsrichtung). Die z-Richtung stellt eine Höhe der Speichervorrichtung dar.
-
1C ist ein Funktionsblockdiagramm einer beispielhaften Speichervorrichtung, wie der gestapelten dreidimensionalen nichtflüchtigen Speichervorrichtung 100 von 1B. Die in 1C dargestellten Komponenten sind elektrische Schaltungen. Die Speichervorrichtung 100 beinhaltet einen oder mehrere Speicherchips 108. Jeder Speicherchip 108 beinhaltet eine dreidimensionale Speicherstruktur 126 aus Speicherzellen (wie beispielsweise ein 3D-Array von Speicherzellen), eine Steuerschaltung 110 und Lese/Schreib-Schaltungen 128. In anderen Ausführungsformen kann ein zweidimensionales Array von Speicherzellen verwendet werden. Die Speicherstruktur 126 ist durch Wortleitungen über einen Zeilendecoder 124 und durch Bitleitungen über einen Spaltendecoder 132 adressierbar. Die Lese-/Schreibschaltungen 128 beinhalten mehrere Leseblöcke 150 einschließlich SB1, SB2, ..., SBp (Abtastschaltungen) und ermöglichen, dass eine Seite von Speicherzellen parallel gelesen oder programmiert wird. In einigen Systemen ist eine Steuerung 122 in der gleichen Speichervorrichtung 100 (z. B. einer entfernbaren Speicherkarte) wie der eine oder die mehreren Speicherchips 108 enthalten. Jedoch kann in anderen Systemen die Steuerung von dem Speicherchip 108 getrennt sein. In einigen Ausführungsformen befindet sich die Steuerung 122 auf einem anderen Chip als der Speicherchip 108. In einigen Ausführungsformen kommuniziert eine Steuerung 122 mit mehreren Speicherchips 108. In anderen Ausführungsformen hat jeder Speicherchip 108 seine eigene Steuerung. Befehle und Daten werden zwischen dem Host 140 und der Steuerung 122 über einen Datenbus 120 und zwischen der Steuerung 122 und dem einen oder den mehreren Speicherchips 108 über Leitungen 118 übertragen. Bei einem Ausführungsbeispiel beinhaltet der Speicherchip 108 einen Satz von Eingabe- und/oder Ausgabe- (E/A-) Pins, die mit Leitungen 118 verbunden sind.
-
Die Speicherstruktur 126 kann ein oder mehrere Arrays von Speicherzellen aufweisen, einschließlich eines 3D-Arrays. Die Speicherstruktur kann eine monolithische dreidimensionale Speicherstruktur aufweisen, in der mehrere Speicherebenen über (und nicht in) einem einzelnen Substrat, wie einem Wafer, ohne dazwischen liegende Substrate ausgebildet sind. Die Speicherstruktur kann jede Art von nichtflüchtigem Speicher aufweisen, der monolithisch in einer oder mehreren physischen Ebenen von Arrays von Speicherzellen ausgebildet ist, die einen aktiven Bereich aufweisen, der über einem Siliziumsubstrat angeordnet ist. Die Speicherstruktur kann sich in einer nichtflüchtigen Speichervorrichtung befinden, die eine Schaltung aufweist, die dem Betrieb der Speicherzellen zugeordnet ist, unabhängig davon, ob die zugehörige Schaltung oberhalb oder innerhalb des Substrats ist. In einer Ausführungsform implementiert die Speicherstruktur 126 einen dreidimensionalen NAND-Flashspeicher. Andere Ausführungsformen beinhalten einen zweidimensionalen NAND-Flashspeicher, einen zweidimensionalen NOR-Flashspeicher, einen ReRAM-Kreuzpunktspeicher, einen magnetoresistiven Speicher (z. B. MRAM), einen Phasenwechselspeicher (z. B. PCRAM) und andere.
-
Die Steuerschaltung 110 arbeitet mit den Lese-/Schreibschaltungen 128 zusammen, um Speicheroperationen (z. B. Löschen, Programmieren, Lesen und andere) auf der Speicherstruktur 126 auszuführen, und beinhaltet eine Zustandsmaschine 112, einen On-Chip-Adressdecodierer 114 und ein Leistungssteuermodul 116. Die Zustandsmaschine 112 stellt eine Steuerung auf Chipebene von Speicheroperationen bereit. In einer Ausführungsform ist die Zustandsmaschine 112 durch die Software programmierbar. In anderen Ausführungsformen verwendet die Zustandsmaschine 112 keine Software und ist vollständig in die Hardware (z. B. elektrische Schaltungen) implementiert. In einer Ausführungsform beinhaltet die Steuerschaltung 110 Register, ROM-Sicherungen und andere Speichervorrichtungen zum Speichern von Vorgabewerten, wie beispielsweise Basisspannungen und andere Parameter.
-
Der On-Chip-Adressdecodierer 114 stellt eine Adressschnittstelle zwischen Adressen, die von dem Host 140 oder der Steuerung 122 verwendet werden, zu der Hardwareadresse, die von den Decodern 124 und 132 verwendet wird, bereit. Das Leistungssteuermodul 116 steuert die Leistung und Spannungen, die den Wortleitungen und Bitleitungen während der Speicheroperationen zugeführt werden. Es kann Treiber für Wortleitungsschichten (nachstehend erörtert) in einer 3D-Konfiguration, Auswahltransistoren (z. B. SGS- und SGD-Transistoren, unten beschrieben) und Sourceleitungen beinhalten. Das Leistungssteuermodul 116 kann Ladungspumpen zum Erzeugen von Spannungen beinhalten. Die Leseblöcke beinhalten Bitleitungstreiber. Ein SGS-Transistor ist ein Auswahlgate-Transistor an einem Source-Ende einer NAND-Kette, und ein SGD-Transistor ist ein Auswahlgate-Transistor an einem Drain-Ende einer NAND-Kette.
-
Jede Steuerschaltung oder jede Kombination von Steuerschaltung 110, Zustandsmaschine 112, Decodierern 114/124/132, Leistungssteuermodul 116, Abtastblöcken 150, Lese-/Schreib-Schaltungen 128, Steuerung 122, Prozessor 122c und/oder Schnittstelle 122d kann als eine oder mehrere Steuerschaltungen betrachtet werden, die die hier beschriebenen Funktionen ausführen.
-
Die (auf dem Chip oder außerhalb des Chips angeordnete) Steuerung 122 (die in einer Ausführungsform eine elektrische Schaltung ist) kann einen oder mehrere Prozessoren 122c, ROM 122a, RAM 122b, Speicherschnittstelle 122d aufweisen, die alle miteinander verbunden sind. Andere Ausführungsformen können Zustandsmaschinen oder andere kundenspezifische Schaltungen verwenden, die entworfen sind, um eine oder mehrere Funktionen auszuführen. Die Speichervorrichtungen (ROM 122a, RAM 122b) weisen Code wie einen Satz von Befehlen auf, und der Prozessor 122c ist betreibbar, um den Satz von Befehlen auszuführen, um zumindest einen Teil der hier beschriebenen Funktionalität bereitzustellen. Alternativ oder zusätzlich kann der Prozessor 122c auf Code von einer Speichervorrichtung in der Speicherstruktur zugreifen, wie etwa einen reservierten Bereich von Speicherzellen, die mit einer oder mehreren Wortleitungen verbunden sind. Die mit dem ROM 122a, dem RAM 122b und dem Prozessor 122c in Verbindung stehende Speicherschnittstelle 122d ist eine elektrische Schaltung (elektrische Schnittstelle), die eine elektrische Schnittstelle zwischen der Steuerung 122 und einem oder mehreren Speicherchips 108 bereitstellt. Beispielsweise kann die Speicherschnittstelle 122d das Format oder die Zeitgebung von Signalen ändern, einen Puffer bereitstellen, von Spannungsstößen isolieren, E/A zwischenspeichern, usw. Der Prozessor 122c kann Befehle an die Steuerschaltung 110 (oder irgendeine andere Komponente des Speicherchips 108) über die Speicherschnittstelle 122d ausgeben.
-
Mehrere Speicherelemente in der Speicherstruktur 126 können so eingerichtet sein, dass sie in Reihe geschaltet sind oder dass jedes Element einzeln zugänglich ist. Als nicht einschränkendes Beispiel enthalten Flashspeichervorrichtungen in NAND-Konfiguration (NAND-Flashspeicher) üblicherweise Speicherelemente, die in Reihe geschaltet sind. Eine NAND-Kette ist ein Beispiel eines Satzes von in Reihe geschalteten Speicherzellen und Auswahlgate-Transistoren.
-
Ein NAND-Speicherarray kann so eingerichtet sein, dass das Array aus mehreren NAND-Ketten zusammengesetzt ist, in denen eine NAND-Kette aus mehreren Speicherzellen zusammengesetzt ist, die sich eine einzelne Bitleitungen teilen und auf die als eine Gruppe zugegriffen wird. Alternativ können Speicherelemente so eingerichtet sein, dass jedes Element einzeln zugänglich ist, z. B. ein NOR-Speicherarray. NAND- und NOR-Speicherkonfigurationen sind beispielhaft, und Speicherzellen können anderweitig eingerichtet sein.
-
Die Speicherzellen können auf der einzelnen Speichervorrichtungsebene in einem geordneten Array angeordnet sein, wie in einer Vielzahl von Zeilen und/oder Spalten. Jedoch können die Speicherelemente in nicht regelmäßigen oder nicht orthogonalen Konfigurationen angeordnet sein, oder in Strukturen, die nicht als Arrays betrachtet werden.
-
Ein dreidimensionales Speicherarray ist so angeordnet, dass Speicherzellen mehrere Ebenen oder mehrere Speichervorrichtungsebenen belegen, wodurch eine Struktur in drei Dimensionen gebildet wird (d. h. in der x-, y- und z-Richtung, wo die z-Richtung im Wesentlichen senkrecht ist und die x- und y-Richtungen im Wesentlichen parallel zur Hauptoberfläche des Substrats verlaufen).
-
Als ein nicht einschränkendes Beispiel kann eine dreidimensionale Speicherstruktur vertikal als ein Stapel von mehreren zweidimensionalen Speichervorrichtungsebenen angeordnet sein. Als weiteres nicht einschränkendes Beispiel kann ein dreidimensionales Speicherarray als mehrere vertikale Spalten (z. B. Spalten, die sich im Wesentlichen senkrecht zur Hauptfläche des Substrats erstrecken, d. h. in y-Richtung) angeordnet sein, wobei jede Spalte mehrere Speicherzellen in jeder Spalte aufweist. Die Spalten können in einer zweidimensionalen Konfiguration angeordnet sein, z. B. in einer x-y-Ebene, was in einer dreidimensionalen Anordnung von Speicherzellen mit Elementen auf mehreren vertikal gestapelten Speicherebenen resultiert. Andere Konfigurationen von Speicherelementen in drei Dimensionen können auch ein dreidimensionales Speicherarray bilden.
-
Als nicht einschränkendes Beispiel können in einem dreidimensionalen NAND-Speicherarray die Speicherelemente miteinander gekoppelt sein, um vertikale NAND-Ketten zu bilden, die über mehrere horizontale Ebenen laufen. Andere dreidimensionale Konfigurationen können in Betracht gezogen werden, wobei einige NAND-Ketten Speicherelemente in einer einzelnen Speicherebene enthalten, während andere Ketten Speicherelemente enthalten, die sich durch mehrere Speicherebenen erstrecken. Dreidimensionale Speicherarrays können auch in einer NOR-Konfiguration und in einer ReRAM-Konfiguration entworfen sein.
-
Fachleute auf dem Gebiet werden erkennen dass die hier beschriebene Technologie nicht auf einer einzigen spezifischen Struktur beruht, sondern viele relevante Speicherstrukturen in dem Geist und Umfang der Technologie wie hier beschrieben abdeckt, und wie sie von einem Fachmann auf dem Stand der Technik verstanden werden.
-
2 ist ein Blockdiagramm eines beispielhaften Speichersystems 100, das mehr Details einer Ausführungsform der Steuerung 122 zeigt. Wie hier verwendet, ist die Flashspeicher-Steuerung eine Vorrichtung, die in dem Flashspeicher gespeicherte Daten verwaltet und mit einem Host, wie beispielsweise einem Computer oder einer elektronischen Vorrichtung, kommuniziert. Eine Flashspeicher-Steuerung kann verschiedene Funktionen zusätzlich zu der hier beschriebenen spezifischen Funktionalität aufweisen. Zum Beispiel kann die Flashspeicher-Steuerung den Flashspeicher formatieren, um sicherzustellen, dass er ordnungsgemäß arbeitet, schlechte Flashspeicherzellen abbilden und Ersatzzellen zuweisen, um zukünftige ausgefallene Zellen zu ersetzen. Einige Teile der Ersatzzellen können verwendet werden, um Firmware zu enthalten, um die Flashspeicher-Steuerung zu betreiben und andere Merkmale zu implementieren. Im Betrieb, wenn ein Host Daten von dem Flashspeicher lesen oder Daten in diesen schreiben muss, kommuniziert der Host mit der Steuerung. Wenn der Host eine logische Adresse bereitstellt, an der/die Daten gelesen/geschrieben werden sollen, kann die Steuerung die vom Host empfangene logische Adresse in eine physische Adresse in dem Flashspeicher umwandeln. (Alternativ kann der Host die physische Adresse bereitstellen). Die Flashspeicher-Steuerung kann auch verschiedene Speicherverwaltungsfunktionen ausführen, beispielsweise, aber nicht beschränkt auf, Abnutzungsausgleich (Verteilen von Schreibvorgängen zum Vermeiden eines Verschleißes spezifischer Speicherblöcke, auf die ansonsten wiederholt geschrieben werden würde) und Speicherbereinigung (nachdem ein Block voll ist, nur die gültigen Datenseiten zu einem neuen Block zu bewegen, so dass der volle Block gelöscht und wiederverwendet werden kann).
-
Die Schnittstelle zwischen der Steuerung 122 und dem nichtflüchtigen Speicherchip 108 kann jede geeignete Flash-Schnittstelle sein, wie etwa der Toggle-Modus 200, 400 oder 800. In einer Ausführungsform kann das Speichersystem 100 ein kartenbasiertes System sein, wie beispielsweise eine sichere digitale (SD) oder eine sichere digitale Mikro-Karte (Mikro-SD). In einer alternativen Ausführungsform kann das Speichersystem 100 Teil eines eingebetteten Speichersystems sein. Zum Beispiel kann der Flashspeicher in den Host eingebettet sein. In einem anderen Beispiel kann das Speichersystem 100 in der Form einer Solid-State-Festplatte (SSD) vorliegen.
-
In einigen Ausführungsformen beinhaltet das nichtflüchtige Speichersystem 100 einen einzelnen Kanal zwischen der Steuerung 122 und dem nichtflüchtigen Speicherchip 108, wobei der hier beschriebene Gegenstand nicht auf einen einzelnen Speicherkanal beschränkt ist. Beispielsweise können in einigen Speichersystemarchitekturen 2, 4, 8 oder mehr Kanäle zwischen der Steuerung und dem Speicherchip vorhanden sein, abhängig von den Fähigkeiten der Steuerung. In jeder der hier beschriebenen Ausführungsformen kann mehr als ein einziger Kanal zwischen der Steuerung und dem Speicherchip existieren, selbst wenn ein einzelner Kanal in den Zeichnungen gezeigt ist.
-
Wie in 2 dargestellt, beinhaltet die Steuerung 122 ein Frontend-Modul 208, das mit einem Host gekoppelt ist, ein Backend-Modul 210, das mit dem einen oder den mehreren nichtflüchtigen Speicherchips 108 gekoppelt ist, und verschiedene andere Module, die Funktionen ausführen, die nun im Detail beschrieben werden.
-
Die in 2 dargestellten Komponenten der Steuerung 122 können die Form einer verpackten funktionelle Hardwareeinheit (z.B. einer elektrischen Schaltung) zur Verwendung mit anderen Komponenten, eines Teils eines Programmcodes (z.B. Software oder Firmware) ausführbar durch einen (Mikro-) Prozessor oder eine Verarbeitungsschaltung, die üblicherweise eine bestimmte Funktion von in Beziehung stehenden Funktionen ausführt, oder einer abgeschlossenen Hardware oder Softwarekomponente, die beispielsweise mit einem größeren System koppelt, annehmen. Zum Beispiel kann jedes Modul eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit - ASIC), ein feldprogrammierbares Gate-Array (field programmable gate array - FPGA), eine Schaltung, eine digitale Logikschaltung, eine analoge Schaltung, eine Kombination diskreter Schaltungen, Gatter oder irgendeine andere Art von Hardware oder Kombination davon einschließen. Alternativ oder zusätzlich kann jedes Modul Software beinhalten, die in einer prozessorlesbaren Vorrichtung (z. B. einem Speicher) gespeichert ist, um einen Prozessor für die Steuerung 122 zu programmieren, um die hier beschriebenen Funktionen auszuführen. Die in 2 dargestellte Architektur ist eine beispielhafte Implementierung, die die Komponenten der in 1A oder 1C dargestellten Steuerung 122 (d. h. RAM, ROM, Prozessor, Schnittstelle) verwenden kann (oder nicht).
-
Unter erneuter Bezugnahme auf Module der Steuerung 122 verwaltet eine Pufferverwaltungs-/Bussteuerung 214 Puffer im Direktzugriffsspeicher (RAM) 216 und steuert die interne Busarbitrierung der Steuerung 122. Ein Nur-Lese-Speicher (ROM) 218 speichert den Bootcode des Systems. Obwohl sie in 2A als von der Steuerung 122 getrennt angeordnet dargestellt sind, können in anderen Ausführungsformen entweder der RAM 216 oder der ROM 218 oder beide innerhalb der Steuerung angeordnet sein. In noch anderen Ausführungsformen können sich Teile des RAM und des ROM sowohl innerhalb der Steuerung 122 als auch außerhalb der Steuerung befinden. Weiterhin können in einigen Implementierungen die Steuerung 122, der RAM 216 und der ROM 218 auf separaten Halbleiterelementen angeordnet sein.
-
Zusätzlich beinhaltet das Frontend-Modul 208 eine Host-Schnittstelle 220 und eine Physical-Layer-Schnittstelle (PHY) 222, die die elektrische Schnittstelle mit dem Host oder der Speichersteuerung der nächsten Ebene bereitstellen. Die Wahl des Typs der Host-Schnittstelle 220 kann von der Art des verwendeten Speichers abhängen. Beispiele der Host-Schnittstelle 220 können SATA, SATA Express, SAS, Fibre Channel, USB, PCIe und NVMe einschließen, sind aber nicht darauf beschränkt. Die Host-Schnittstelle 220 ermöglicht üblicherweise die Übertragung von Daten, Steuersignalen und Zeitsignalen.
-
Das Backend-Modul 210 beinhaltet eine ECC-Engine (Error Correction Code) 224, die die von dem Host empfangenen Datenbytes codiert und die aus dem nichtflüchtigen Speicher gelesenen Datenbytes dekodiert und Fehler korrigiert. Ein Befehlssequenzer 226 erzeugt Befehlssequenzen, wie zum Beispiel Programmier- und Löschbefehlssequenzen, die an den nichtflüchtigen Speicherchip 108 zu übertragen sind. Ein RAID-Modul 228 (Redundant Array of Independent Dies) verwaltet die Erzeugung von RAID-Parität und die Wiederherstellung ausgefallener Daten. Die RAID-Parität kann als ein zusätzlicher Grad des Integritätsschutzes für die Daten verwendet werden, die in das nichtflüchtige Speichersystem 100 geschrieben werden. In einigen Fällen kann das RAID-Modul 228 ein Teil der ECC-Engine 224 sein. Es ist zu beachten, dass RAID-Parität als ein zusätzliches Die oder zusätzliche Dies hinzugefügt werden kann, wie der gemeinsame Name andeutet, aber sie kann auch in der bestehenden Form, z.B. als eine zusätzliche Ebene, oder zusätzlicher Block, oder zusätzliche WL innerhalb eines Blocks angefügt werden. Eine Speicherschnittstelle 230 liefert die Befehlssequenzen an den nichtflüchtigen Speicherchip 108 und empfängt Statusinformationen von dem nichtflüchtigen Speicherchip 108. In einer Ausführungsform kann die Speicherschnittstelle 230 eine DDR-Schnittstelle (Double-Data-Rate) und/oder eine Toggle-Modus 200, 400, 800 oder höhere Schnittstelle sein. Eine Flash-Steuerschicht 232 kann den Gesamtbetrieb des Backend-Moduls 210 steuern.
-
Zusätzliche Komponenten des Systems 100, das in 2 dargestellt ist, beinhalten eine Medienverwaltungsschicht 238, die Abnutzungsausgleich von Speicherzellen des nichtflüchtigen Speicherchips 108 durchführt. Das nichtflüchtige Speichersystem 100 beinhaltet auch andere diskrete Komponenten 240 wie externe elektrische Schnittstellen, externen RAM, Widerstände, Kondensatoren oder andere Komponenten, die mit der Steuerung 122 verbunden sein können. In alternativen Ausführungsformen sind eine oder mehrere der Komponenten Physical-Layer-Schnittstelle 222, RAID-Modul 228, Medienverwaltungsschicht 238 und Pufferverwaltungs-/Bus-Steuerung 214 optionale Komponenten, die in der Steuerung 122 möglicherweise nicht notwendig sind.
-
Die Flash-Übersetzungsschicht (FTL) oder Media-Managementschicht (MML) 238 kann als Teil der Flash-Verwaltung integriert sein, die Flash-Fehler handhaben und mit dem Host interagieren kann. Insbesondere kann MML ein Modul im Flash-Management sein und möglicherweise für die Interna des NAND-Managements verantwortlich sein. Insbesondere kann die MML 238 einen Algorithmus in der Firmware der Speichervorrichtung beinhalten, der Schreibvorgänge von dem Host in Schreibvorgänge in den Flashspeicher 126 des Chips 108 übersetzt. Die MML 238 kann benötigt werden, da: 1) der Flashspeicher eine begrenzte Haltbarkeit aufweisen kann; 2) der Flashspeicher 126 nur in Vielfachen von ECC-Seiten geschrieben werden kann; und/oder 3) der Flashspeicher 126 nicht geschrieben werden kann, es sei denn, er wird als Block gelöscht. Die MML 238 versteht diese potentiellen Begrenzungen des Flashspeichers 126, die für den Host möglicherweise nicht sichtbar sind. Dementsprechend versucht die MML 238, die Schreibvorgänge vom Host in Schreibvorgänge in den Flashspeicher 126 zu übersetzen. Wie unten beschrieben, können fehlerhafte Bits unter Verwendung der MML 238 identifiziert und aufgezeichnet werden. Diese Aufzeichnung von fehlerhaften Bits kann zur Bewertung der Gesundheit von Blöcken und/oder Wortleitungen (den Speicherzellen auf den Wortleitungen) verwendet werden.
-
Die Steuerung 122 kann eine Schnittstelle mit einem oder mehreren Speicherchips 108 bilden. In einer Ausführungsform implementieren die Steuerung 122 und mehrere Speicherchips (die zusammen das nichtflüchtige Speichersystem 100 aufweisen) ein Festkörperlaufwerk (SSD), das ein Festplattenlaufwerk innerhalb eines Hosts, als NAS-Vorrichtung, Laptop, Tablet usw., emulieren, ersetzen oder als solches verwendet werden kann. Darüber hinaus muss das SSD nicht als Festplattenlaufwerk betrieben werden.
-
Einige Ausführungsformen eines nichtflüchtigen Speichersystems beinhalten einen Speicherchip 108, der mit einer Steuerung 122 verbunden ist. Jedoch können andere Ausführungsformen mehrere Speicherchips 108 in Kommunikation mit einer oder mehreren Steuerungen 122 beinhalten. In einem Beispiel, das in 3A dargestellt ist, können die mehreren Speicherchips in einen Satz von Speicherpaketen gruppiert werden. Jedes Speicherpaket beinhaltet einen oder mehrere Speicherchips in Kommunikation mit der Steuerung 122. 3A zeigt N+1 Speicherpakete (Paket 0 - Paket N) und N+1 Kanäle (Kanal 0 - Kanal N) zur Kommunikation zwischen der Steuerung 122 und den Speicherchips 108 von jeweiligen Speicherpaketen 0-N. In einer Ausführungsform beinhaltet ein Speicherpaket eine Leiterplatte (oder eine ähnliche Struktur), auf der ein oder mehrere Speicherchips 108 montiert sind. In einigen Ausführungsformen kann ein Speicherpaket Formmaterial beinhalten, um die Speicherchips 108 des Speicherpakets zu umhüllen. In einer Ausführungsform kann ein Speicherpaket ein einzelner Speicherchip 108 sein. In einigen Ausführungsformen ist die Steuerung 122 physisch von irgendeinem der Speicherpakete getrennt.
-
3B ist ein Blockdiagramm, das eine Ausführungsform des Abtastblocks SB1 von 1C darstellt. Der Abtastblock ist in einen oder mehrere Kernabschnitte unterteilt, die als Abtastmodule (z. B. SM0) oder Leseverstärker bezeichnet werden, und einen gemeinsamen Abschnitt, der als Verwaltungsschaltung (z. B. MC0) bezeichnet wird. In einer Ausführungsform gibt es ein getrenntes Abtastmodul für jede Bitleitung und eine gemeinsame Verwaltungsschaltung für einen Satz von Abtastmodulen, wie beispielsweise SM0, SM1, SM2 und SM3. Jedes der Abtastmodule in einer Gruppe kommuniziert mit der zugehörigen Verwaltungsschaltung über einen Datenbus 172. Somit gibt es eine oder mehrere Verwaltungsschaltungen, die mit den Abtastmodulen eines Satzes von Speicherzellen kommunizieren.
-
Jedes Abtastmodul SM0, SM1, SM2 und SM3 weist Abtastschaltungen SC0, SC1, SC2 bzw. SC3 auf, die eine Abtastung durchführen, indem bestimmt wird, ob ein Leitungsstrom in einer verbundenen Bitleitung BL0, BL1, BL2 bzw. BL3 über oder unter einem festgelegten Spannungsgrenzwert liegt (Spannung prüfen). Jedes Abtastmodul SM0, SM1, SM2 und SM3 beinhaltet auch jeweils ein Bitleitungs-Latch BLL0, BLL1, BLL2 und BLL3, dass verwendet wird, um eine Spannungsbedingung auf die verbundene Bitleitung zu setzen. Zum Beispiel wird während einer Programmieroperation ein vorbestimmter Zustand, der in einem Bitleitungs-Latch zwischengespeichert ist, dazu führen, dass die verbundene Bitleitung in einen gesperrten Zustand (z.B. 1,5 - 3 Volt), einen langsamen Programmierzustand (z.B. 0,5 - 1V) oder einen normalen Programmierzustand (z.B. 0 V) gezogen wird.
-
Die Verwaltungsschaltung MC0 weist einen Prozessor 192, vier beispielhafte Sätze von Daten-Latches 194(0), 194(1), 194(2) und 194(3) und eine E/A-Schnittstelle 198 auf, die zwischen die Sätze von Daten-Latches 194 und den Datenbus 120 geschaltet ist. Die Kombination der Bitleitungs-Latches (BLL0 - BLL3) und der Latches 194 stellt eine Ausführungsform der Abtastdatenregister 40 dar. Die E/A-Schnittstelle 198 ist eine Ausführungsform der E/A-Datenregister 42.
-
In diesem Beispiel ist jeder Satz von Latches einer der Bitleitungen zugeordnet. Zum Beispiel sind die Daten-Latches 194(0) der Bitleitung BL0 zugeordnet, die Daten-Latches 194(1) sind der Bitleitung BL1 zugeordnet, die Daten-Latches 194(2) sind der Bitleitung BL2 zugeordnet und die Daten-Latches 194(3) sind der Bitleitung BL3 zugeordnet. Jeder Satz von Daten-Latches beinhaltet Daten-Latches, die in dieser Ausführungsform durch LDL 151, MDL 152 und UDL153 identifiziert werden. LDL 151 speichert ein Bit für eine untere Seite (LP) von Schreibdaten, MDL 152 speichert ein Bit für eine mittlere Seite (MP) von Schreibdaten, und UDL 153 speichert ein Bit für eine obere Seite (UP) von Schreibdaten in einem Speicher, der drei Datenbits in jeder Speicherzelle speichert. Es ist zu beachten, dass es einen Satz solcher Latches geben kann, die jeder Bitleitung zugeordnet sind. Die Zwischenspeicher 194 können auch verwendet werden, um Daten zu speichern, die von den nichtflüchtigen Speicherzellen gelesen werden.
-
Zusätzliche oder weniger Daten-Latches pro Satz könnten ebenfalls verwendet werden. Zum Beispiel ist in einer Implementierung mit zwei Bit pro Speicherzelle das MDL-Daten-Latch der mittleren Seite (MP) von Daten nicht erforderlich. Eine Implementierung mit vier Bit pro Speicherzelle kann LDL, LMDL (untere mittlere Seite), UMDL (obere mittlere Seite) und UDL-Latches verwenden. Die hier bereitgestellten Techniken sollen solche Variationen umfassen. In einer weiteren Option wird ein weiteres Latch verwendet, um zu identifizieren, ob sich eine Speicherzelle in einem langsamen Programmiermodus befindet, wenn ihre Vth innerhalb eines spezifizierten Bereichs der Prüfspannung ihres Zieldatenzustands liegt.
-
Der Prozessor 192 führt Berechnungen während des Lesens und Programmierens durch. Zum Lesen bestimmt der Prozessor den Datenzustand, der in der abgetasteten Speicherzelle gespeichert ist, und speichert die Daten in dem Satz von Daten-Latches. Für eine vollständige Programmierung und Aktualisierungsprogrammierung liest der Prozessor die Latches, um den Datenzustand zu bestimmen, der in eine Speicherzelle geschrieben werden soll.
-
Während des Lesens steht der Betrieb des Systems unter der Steuerung der Zustandsmaschine 112, die die Zufuhr verschiedener Steuergate-Spannungen zu der adressierten Speicherzelle steuert. Wenn es die verschiedenen vordefinierten Steuergate-Spannungen entsprechend den verschiedenen Speicherzuständen, die von dem Speicher unterstützt werden, schaltet, kann das Abtastmodul bei einer dieser Spannungen auslösen und eine entsprechende Ausgabe wird von dem Abtastmodul an den Prozessor 192 über den Datenbus 172 geliefert. An diesem Punkt bestimmt der Prozessor 192 den Speicherzustand unter Berücksichtigung des Auslöseereignisses (der Auslöseereignisse) des Abtastmoduls und der Informationen über die angelegte Steuergatespannung von der Zustandsmaschine über die Eingabeleitungen 193. Er berechnet dann eine binäre Codierung für den Speicherzustand und speichert die resultierenden Datenbits in den Daten-Latches 194. Zum Beispiel kann der Speicherzustand einer Speicherzelle, die der Bitleitung BL0 zugeordnet ist, in den Latches 194(0) usw. gespeichert werden. In einer anderen Ausführungsform der Verwaltungsschaltung MC0 dient das Bitleitungs-Latch sowohl als ein Latch zum zwischenspeichern der Ausgabe des Abtastmoduls als auch als ein Bitleitungs-Latch wie oben beschrieben.
-
Einige Implementierungen können mehrere Prozessoren beinhalten. In einer Ausführungsform beinhaltet jeder Prozessor eine (nicht dargestellte) Ausgangsleitung, so dass jede der Ausgangsleitungen miteinander als ODER-Leitung verdrahtet ist. In einigen Ausführungsformen werden die Ausgangsleitungen invertiert, bevor sie mit der verdrahteten ODER-Leitung verbunden werden. Diese Konfiguration ermöglicht eine schnelle Bestimmung während des Programmierverifizierungsprozesses, wann der Programmierprozess abgeschlossen ist, weil die Zustandsmaschine, die das verdrahtete ODER empfängt, bestimmen kann, wann alle programmierten Bits den gewünschten Pegel erreicht haben. Wenn beispielsweise jedes Bit seinen gewünschten Pegel erreicht hat, wird eine logische Null für dieses Bit an die verdrahtete ODER-Leitung gesendet (oder eine Daten-Eins wird invertiert). Wenn alle Bits eine Daten-0 (oder eine invertierte Daten-Eins) ausgeben, dann weiß die Zustandsmaschine, dass sie den Programmierprozess beenden soll. Da jeder Prozessor mit vier Abtastmodulen kommuniziert, muss die Zustandsmaschine die verdrahtete ODER-Leitung viermal lesen, oder dem Prozessor 192 wird Logik hinzugefügt, um die Ergebnisse der zugeordneten Bitleitungen so zu akkumulieren, dass die Zustandsmaschine die verdrahtete ODER-Leitung nur einmal lesen muss. In ähnlicher Weise kann die globale Zustandsmaschine durch korrektes Wählen der Logikpegel detektieren, wann das erste Bit seinen Zustand ändert, und die Algorithmen entsprechend ändern.
-
Während Programmier- oder Verifizierungsoperationen werden die zu programmierenden Daten (Schreibdaten) in den Daten-Latches 194 von dem Datenbus 120 in den LP-, MP- und UP-Daten-Latches gespeichert. Zum Beispiel können die in eine der Bitleitung BL0 zugeordnete ausgewählte Speicherzelle zu programmierenden Daten in den Latches 194(0) gespeichert werden, die in eine der Bitleitung BL1 zugeordnete ausgewählte Speicherzelle zu programmierenden Daten in den Latches 194(1) gespeichert werden usw. Die Programmierung, unter der Steuerung der Zustandsmaschine, weist eine Reihe von Programmierspannungsimpulsen auf, die an die Steuergates der adressierten Speicherzellen angelegt werden. Jeder Programmierspannung folgt ein Rücklesen (Verifizierungstest), um zu bestimmen, ob die Speicherzelle in den gewünschten Speicherzustand programmiert wurde. In einigen Fällen überwacht der Prozessor den zurückgelesenen Speicherzustand relativ zu dem gewünschten Speicherzustand. Wenn die beiden Zustände übereinstimmen, setzt der Prozessor den Bitleitungs-Latch, um zu bewirken, dass die Bitleitung in einen Zustand gezogen wird, der eine Programmsperrung (z. B. 2-3 V) angibt. Dies verhindert, dass die mit der Bitleitung gekoppelte Speicherzelle weiter programmiert wird, selbst wenn Programmierspannungen auf ihrem Steuergate erscheinen. In anderen Ausführungsformen lädt der Prozessor anfänglich den Bitleitungs-Latch, und die Abtastschaltung stellt ihn während des Verifizierungsprozesses auf einen Sperrwert ein.
-
Jeder Satz von Daten-Latches 194 kann als ein Stapel von Daten-Latches für jedes Abtastmodul implementiert sein. In einigen Implementierungen sind die Daten-Latches als Schieberegister implementiert, so dass die darin gespeicherten parallelen Daten in serielle Daten für den Datenbus 120 umgewandelt werden und umgekehrt. Alle Daten-Latches, die dem Lese-/Schreibblock von Speicherzellen entsprechen, können miteinander verbunden werden, um ein Blockschieberegister zu bilden, so dass ein Datenblock durch seriellen Transfer eingegeben oder ausgegeben werden kann. Insbesondere ist die Bank von Lese/Schreib-Modulen so angepasst, dass jeder von seinem Satz von Daten-Latches Daten sequentiell in den Datenbus hinein oder aus diesem heraus verschiebt, als ob sie Teil eines Schieberegisters für den gesamten Lese-/Schreibblock sind.
-
4A zeigt eine beispielhafte Struktur des Speicherzellenarrays 126. In einer Ausführungsform ist das Array von Speicherzellen in M Blöcke von Speicherzellen unterteilt. Der Block ist die Löscheinheit. Das heißt, jeder Block enthält die minimale Anzahl von Speicherzellen, die zusammen gelöscht werden. Jeder Block ist typischerweise in eine Anzahl von Seiten unterteilt. Es ist zu beachten, dass diese Seiten hier als „ECC-Seiten“ bezeichnet werden können. Eine ECC-Seite ist eine Programmierungseinheit. Eine oder mehrere ECC-Seiten von Daten werden typischerweise in einer Zeile von Speicherzellen gespeichert. Eine ECC-Seite kann einen oder mehrere Sektoren speichern. Ein Sektor beinhaltet Benutzerdaten und Overhead-Daten. Overhead-Daten beinhalten typischerweise Paritätsbits eines Fehlerkorrekturcodes (ECC), die aus den Benutzerdaten des Sektors berechnet wurden. Ein Teil der Steuerung berechnet die ECC-Parität, wenn Daten in das Array programmiert werden, und prüft sie auch, wenn Daten aus dem Array gelesen werden. Alternativ werden die ECC- und/oder andere Overhead-Daten in unterschiedlichen ECC-Seiten oder sogar unterschiedlichen Blöcken gespeichert, als die Benutzerdaten, zu denen sie gehören.
-
4A zeigt auch mehr Details einer Ausführungsform des Blocks i des Speicherarrays 126. Block i beinhaltet X + 1 Bitleitungen und X + 1 NAND-Ketten. Es kann Tausende von NAND-Ketten in einem Block geben. Block i beinhaltet auch 64 Daten-Wortleitungen (WL0 - WL63), 2 Dummy-Wortleitungen (WL-d0 und WL-d1), eine Drain-Side-Auswahlleitung (SGD) und eine Source-Side-Auswahlleitung (SGS). Ein Anschluss jeder NAND-Kette ist mit einer entsprechenden Bitleitung über ein Drain-Auswahlgate (verbunden mit Auswahlleitung SGD) verbunden, und ein anderer Anschluss ist mit der Sourceleitung über ein Source-Auswahlgate (verbunden mit Auswahlleitung SGS) verbunden. Da es vierundsechzig Daten-Wortleitungen und zwei Dummy-Wortleitungen gibt, beinhaltet jede NAND-Kette vierundsechzig Datenspeicherzellen und zwei Dummy-Speicherzellen. In anderen Ausführungsformen können die NAND-Ketten mehr oder weniger als 64 Datenspeicherzellen und mehr oder weniger Dummy-Speicherzellen aufweisen. Datenspeicherzellen können Benutzer- oder Systemdaten speichern. Dummy-Speicherzellen werden in der Regel nicht zum Speichern von Benutzer- oder Systemdaten verwendet. Einige Ausführungsformen beinhalten keine Dummy-Speicherzellen.
-
In einigen Ausführungsformen wird die Programmierung jeweils an einer Wortleitung nach der anderen durchgeführt. Das heißt, nur Speicherzellen, die mit einer Wortleitung verbunden sind, werden auf einmal programmiert. Aus Effizienzgründen können beim Programmieren einer Wortleitung alle Speicherzellen auf der Wortleitung programmiert werden. Typischerweise werden mehrere ECC-Seiten in die Speicherzellen programmiert, die einer Wortleitung zugeordnet sind. Die Anzahl von ECC-Seiten kann davon abhängen, wie viele Bits pro Speicherzelle programmiert werden. Wenn zum Beispiel ein Bit pro Speicherzelle programmiert wird, dann könnten vier, acht, sechzehn oder eine andere Anzahl von ECC-Seiten pro Wortleitung programmiert werden.
-
Speicherzellen können programmiert werden, um zwei Ladungspegel (oder einen anderen physikalischen Parameter wie einen Widerstand) zu speichern, so dass ein einzelnes Datenbit in jeder Zelle gespeichert wird. Dies wird typischerweise als ein binärer oder SLC-Speicher (Single Level Cell) bezeichnet. Der SLC-Speicher kann zwei Zustände speichern. Alternativ können die Speicherzellen betrieben werden, um mehr als zwei detektierbare Ladungspegel (oder einen anderen physikalischen Parameter wie Widerstand) zu speichern, um dadurch mehr als ein Datenbit in jedem zu speichern. Diese letztere Konfiguration wird als MLC-Speicher (Multi Level Cell) bezeichnet. Zum Beispiel kann der MLC-Speicher vier Zustände speichern und zwei Datenbits speichern. Als weiteres Beispiel kann der MLC-Speicher acht Zustände speichern und drei Datenbits speichern. Beide Arten von Speicherzellen können in einem Speicher verwendet werden, beispielsweise kann ein binärer SLC-Flashspeicher zum Zwischenspeichern von Daten verwendet werden, und ein MLC-Speicher kann für eine längerfristige Speicherung verwendet werden. In einigen Ausführungsformen weist das Speichersystem einen Pool von Blöcken auf, die für die SLC-Programmierung verwendet werden, und einen Pool von Blöcken, die für die MLC-Programmierung verwendet werden. Diese werden als SLC-Block bzw. MLC-Blöcke bezeichnet. In einer Ausführungsform speichert die Speichersteuerung 122 anfänglich Hostdaten in SLC-Blöcken und führt dann eine Faltoperation durch, bei der Daten von einem oder mehreren SLC-Blöcken an einen MLC-Block übertragen werden.
-
Um eine bessere Parallelität zu erreichen, kann ein Speicherchip (oder eine andere logische Einheit) in mehrere Ebenen unterteilt werden. Eine Ebene kann als eine Einheit definiert werden, die in der Lage ist, ihren eigenen Betriebsstatus zu berichten, und kann eine Befehlsausführung unabhängig von anderen Ebenen in dem Speicherchip durchführen. Zum Beispiel kann jede Ebene ihre eigenen Datenregister, Datenpuffer usw. aufweisen, um eine unabhängige Befehlsoperation zu ermöglichen. 4B zeigt ein Beispiel eines Speicherchips 108 mit zwei Ebenen (Ebene 0, 402a; Ebene 1, 402b). In diesem Beispiel weist die Ebene 0 die Blöcke 0, 1, 4, 5, 8, 9, 12, 13, ... n, n+1 auf. Ebene 1 weist die Blöcke 2, 3, 6, 7, 10, 11, 14, 15, ... n+2, n+3 auf. Dies ist nur ein Beispiel dafür, wie Blöcke für einen Speicherchip 108 mit zwei Ebenen adressiert werden könnten.
-
Es ist zu beachten, dass Abtastdatenregister 40a in der Lage sind, Daten zu speichern, die von einer Gruppe von Speicherzellen in einem der Blöcke in der Ebene 0 402a abgetastet werden. Gleichermaßen sind Abtastdatenregister 40b in der Lage, Daten zu speichern, die von einer Gruppe von Speicherzellen in einem der Blöcke in Ebene 1 402b abgetastet werden. Somit können Speicherzellen in einem Block in Ebene 0 gleichzeitig mit Speicherzellen in einem Block in Ebene 1 abgetastet werden.
-
Außerdem können Daten in Abtastdatenregistern 40a verwendet werden, um Daten zu speichern, die in eine Gruppe von Speicherzellen in einem der Blöcke in der Ebene 0 402a programmiert werden sollen. Gleichermaßen können Daten in Abtastdatenregistern 40b verwendet werden, um Daten zu speichern, die in eine Gruppe von Speicherzellen in einem der Blöcke in der Ebene 1 402b programmiert werden sollen. Somit können Speicherzellen in einem Block in Ebene 0 gleichzeitig mit Speicherzellen in einem Block in Ebene 1 programmiert werden. Darüber hinaus gibt es einen separaten Satz von E/A-Datenregistern 42a, 42b, die jeder Ebene 402a, 402b zugeordnet sind.
-
In einer Ausführungsform programmiert der Speicherchip eine oder mehrere ECC-Seiten in eine Gruppe von Speicherzellen in einem der Blöcke in Ebene 0, während er auch eine oder mehrere ECC-Seiten in eine Gruppe von Speicherzellen in einem der Blöcke in Ebene 1 programmiert. In einigen Ausführungsformen wird auf einmal nur eine Wortleitung in einer Ebene programmiert. Daher programmiert der Speicherchip in einer Ausführungsform mehrere ECC-Seiten in Speicherzellen auf einer Wortleitung in Ebene 0, während er auch mehrere ECC-Seiten in Speicherzellen auf einer Wortleitung in Ebene 1 programmiert. Hierbei bezieht sich der Ausdruck „maximale Programmierungseinheit“ auf die maximale Datenmenge, die gleichzeitig in Speicherzellen auf einem Speicherchip 108 programmiert werden kann. Die maximale Programmierungseinheit hängt von der Anzahl der pro Speicherzelle programmierten Bits ab. Zum Beispiel könnte der Speicherchip gleichzeitig acht ECC-Seiten in einen Block in Ebene 0 und weitere acht ECC-Seiten in einen Block in Ebene 1 programmieren, wenn ein einzelnes Bit pro Speicherzelle programmiert wird. Somit beträgt die maximale Programmierungseinheit in diesem SLC-Beispiel 16 ECC-Seiten. Es ist zu beachten, dass die maximale Anzahl von Speicherzellen, die gleichzeitig programmiert werden können, in einer Ausführungsform nicht von der Anzahl von Bits pro Zelle abhängt.
-
Wie oben erwähnt, ist ein Fragment hier als die minimal adressierbare Einheit des Speichers in der Speichervorrichtung definiert. In einer Ausführungsform beinhaltet ein Fragment eine Gruppe von Speicherzellen in einem Block auf Ebene 0 und eine Gruppe von Speicherzellen in einer Blockebene 1. Zum Beispiel wird zum Programmieren eines Fragments in einer Ausführungsform eine ECC-Seite in Speicherzellen in einem Block auf Ebene 0 programmiert, und eine andere ECC-Seite wird in eine Gruppe von Speicherzellen in einer Blockebene 1 programmiert. Weiterhin ist zu beachten, dass in einigen Ausführungsformen die maximale Programmierungseinheit mehrere Fragmente umfasst.
-
5 zeigt, wie Daten für nichtabgestimmte Schreibbefehle in einem Datenpuffer 34 vor-aufgefüllt und/oder nach-aufgefüllt werden können, um ein vollständiges Fragment zu erzeugen. Vier Fragmente sind in dem Datenpuffer 34 gezeigt. Man beachte, dass sich der Datenpuffer 34 auf einen Teil des physischen Speichers (z. B. RAM 122b) bezieht, der zum temporären Speichern von Daten verwendet wird, während sie zwischen dem Host 140 und dem Speicher 126 übertragen werden. Jedes Fragment entspricht einem nichtabgestimmten Schreibbefehl. In diesem Beispiel weisen die Sektordaten für jeden nichtabgestimmten Schreibbefehl eine kleinere Größe auf als ein Fragment.
-
Für Fragment 1 gibt es sowohl Vor-Auffülldaten als auch Nach-Auffülldaten. Die Sektordaten sind Daten von dem Host, die für den nichtabgestimmten Schreibbefehl geschrieben werden sollen. Die Vor-Auffülldaten und Nach-Auffülldaten werden in einer Ausführungsform durch Lesen von dem Fragment zugeordneten Speicherzellen erhalten. Zum Beispiel kann das Fragment vor dem Schreibvorgang bereits auf einen bestimmten physischen Ort auf einem Speicherchip abgebildet worden sein.
-
Für Fragment 2 gibt es sowohl Vor-Auffülldaten als auch Nach-Auffülldaten. Für Fragment 3 gibt es Nach-Auffülldaten, aber es werden keine Vor-Auffülldaten benötigt, da sich die Sektordaten am Anfang des Fragments befinden. Für Fragment 4 gibt es Vor-Auffülldaten, aber es werden keine Nach-Auffülldaten benötigt, da sich die Sektordaten am Ende des Fragments befinden. Auch gibt es in Fragment 4 zwei Sektoren von Sektordaten. Es ist zu beachten, dass, wie hier definiert, nichtabgestimmte Daten kein Fragment füllen. Somit gibt es immer Vor-Auffülldaten und/oder Nach-Auffülldaten für nichtabgestimmte Sektordaten.
-
6 ist ein Flussdiagramm eines Prozesses 600 zum Handhaben nichtabgestimmter Schreibbefehle. Die nichtabgestimmten Schreibbefehle können zufällige nichtabgestimmte Schreibbefehle sein. Ein zufälliger nichtabgestimmter Schreibbefehl ist ein nichtabgestimmter Schreibbefehl, der mindestens ein Fragment in einer Ausführungsform nicht vollständig füllt. Der Prozess 600 wird in einem Speichersystem 100 implementiert, wie beispielsweise, jedoch nicht darauf beschränkt, den Speichersystemen in 1A, 1B, 1C, 2 oder 3A. Wenn der Prozess 600 diskutiert wird, wird auf verschiedene Elemente in den 1A, 4B und 5 Bezug genommen. Der Prozess 600 wird initiiert, nachdem ein Host 140 mindestens zwei nichtabgestimmte Schreibbefehle an das Speichersystem 100 gesendet hat. Die Befehle werden in einer Ausführungsform in der Befehlswarteschlange 32 gespeichert. Es ist zu beachten, dass die Schritte in einer bestimmten Reihenfolge in dem Prozess 600 beschrieben werden, um die Erklärung zu erleichtern. Die Schritte können in einer anderen Reihenfolge ausgeführt werden. Einige der Schritte können auch mehr als einmal ausgeführt werden.
-
Schritt 602 beinhaltet das Identifizieren von nichtabgestimmten Schreibbefehlen in der Befehlswarteschlange 32. In einer Ausführungsform wird ein nichtabgestimmter Schreibbefehl durch die Speichersteuerung 122 wie folgt identifiziert. Jeder Schreibbefehl, der eine Start-LBA aufweist, die nicht ein Vielfaches der Anzahl von Sektoren in einem Fragment ist, wird als ein nichtabgestimmter Schreibbefehl identifiziert. Also ist jeder Schreibbefehl, der eine Datengröße aufweist, die nicht gleich der Fragmentgröße ist, ein nichtabgestimmter Schreibbefehl. Es ist zu beachten, dass der Prozess nicht zu Schritt 604 fortschreitet sofern es nicht mindestens zwei nichtabgestimmte Schreibbefehle gibt. In einer Ausführungsform beinhaltet Schritt 602 das Identifizieren zufälliger Schreibbefehle.
-
Schritt 604 beinhaltet das Empfangen von nichtabgestimmten Daten für die nichtabgestimmten Schreibbefehle in einem Datenpuffer 34. In einer Ausführungsform initiiert die Speichersteuerung 122 eine Übertragung von Daten von dem Host-Speicher 20 zu dem Datenpuffer 34. Bezugnehmend auf 5 werden Sektordaten von dem Host 140 empfangen und an einem geeigneten Ort in dem Puffer 34 platziert. Dies beinhaltet das Platzieren der Sektordaten in einem Fragment und auch mit einem Versatz in das Fragment. Zu beachten ist, dass der Schritt 604 an dieser Stelle in dem Prozess 600 aus Gründen der Zweckmäßigkeit beschrieben wird. Einige oder alle der Sektordaten werden nach Schritt 606 empfangen.
-
Schritt 606 beinhaltet das Konsolidieren des Abtastens von Auffülldaten aus Speicherzellen auf einem Speicherchip für einen der nichtabgestimmten Schreibbefehle mit dem Übertragen von zuvor von Speicherzellen auf dem Speicherchip abgetasteten Daten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle. Die „Auffülldaten“ für ein gegebenes Fragment beinhalten „Vor-Auffülldaten“ und/oder „Nach-Auffülldaten“. Beispielsweise werden die Auffülldaten für das Fragment 2 von Speicherzellen auf einem Speicherchip abgetastet, während zuvor abgetastete Auffülldaten für das Fragment 1 übertragen werden. Bei einem Ausführungsbeispiel werden die Abtastdatenregister 40 zuerst verwendet, um Auffülldaten für das Fragment 1 zu speichern, die von Speicherzellen auf einem Speicherchip 108 abgetastet wurden. Die Auffülldaten für das Fragment 1 werden dann in E/A-Datenregister 42 übertragen. Dann werden die Abtastdatenregister 40 verwendet, um Auffülldaten für das Fragment 2 zu speichern, die von Speicherzellen auf dem Speicherchip 108 abgetastet wurden, während gleichzeitig die Auffülldaten für das Fragment 1 von den E/A-Registern 42 zu dem Datenpuffer 24 übertragen werden. Dieses gleichzeitige Abtasten und Übertragen kann für andere Paare von Fragmenten angewendet werden. Es ist auch zu beachten, dass, da es in diesem Beispiel einen nichtabgestimmten Schreibbefehl pro Fragment gibt, dies als gleichzeitiges Abtasten und Übertragen von Auffülldaten für Paare von nichtabgestimmten Schreibbefehlen bezeichnet werden kann. Weiterhin ist zu beachten, dass die Sektordaten für die nichtabgestimmten Schreibbefehle zu dem Datenpuffer 34 übertragen werden könnten, entweder bevor oder nachdem die Auffülldaten dem Datenpuffer 34 hinzugefügt worden sind.
-
Nach den Schritten 606 und 608 wurden abgestimmte Daten für die nichtabgestimmten Schreibbefehle erzeugt. Bezugnehmend auf 5 ist jedes Fragment jeweils vollständig. Mit einem „vollständigen Fragment“ ist gemeint, dass alle benötigten Vor-Auffülldaten und/oder Nach-Auffülldaten zusammen mit den Host-Sektordaten dem Fragment hinzugefügt worden sind. Somit kann festgestellt werden, dass jedes der vier Fragmente in dem Datenpuffer 34 ein vollständiges Fragment abgestimmter Daten ist.
-
Schritt 608 besteht darin, abgestimmte Daten für jeden der nichtabgestimmten Schreibbefehle von dem Datenpuffer 34 zu dem Speicherchip 108 zu übertragen. Anders gesagt, schließt der Schritt 608 das Übertragen eines vollständigen Datenfragments für jeden der nichtabgestimmten Schreibbefehle von dem Puffer 34 an den Speicherchip 108 ein. Es ist zu beachten, dass die Steuerung 122 eine andere Verarbeitung der Daten vor der Übertragung an den Speicherchip 108 durchführen kann. Zum Beispiel kann die Steuerung 122 eine oder mehrere ECC-Seiten durch Hinzufügen von Paritätsbits zu den Daten in dem Datenpuffer 34 bilden. In einer Ausführungsform sammelt die Speichersteuerung122 ausreichend Daten für eine maximale Programmierungseinheit, so dass die Anzahl der vollständigen Fragmente, die in Schritt 608 übertragen werden, gleich der maximalen Programmierungseinheit ist.
-
Schritt 610 beinhaltet das Programmieren der abgestimmten Daten, die zu dem Speicherchip übertragen wurden, in eine Gruppe von Speicherzellen in dem Speicherchip. Mit anderen Worten, Schritt 610 schließt das Programmieren der vollständigen Fragmente von Daten, die zu dem Speicherchip übertragen wurden, in eine Gruppe von Speicherzellen auf dem Speicher ein. Man beachte, dass sich die Speicherzellen auf zwei oder mehr Ebenen befinden könnten. In einer Ausführungsform programmiert der Speicherchip gleichzeitig alle abgestimmten Daten in die Gruppe von Speicherzellen auf dem Speicherchip. Es ist zu beachten, dass sich die Gruppe von Speicherzellen auf einer oder mehreren Ebenen des Speicherchips befinden könnte. Somit könnte es einen Programmiervorgang auf einem Speicherchip geben, der gleichzeitig mit einem anderen Programmiervorgang auf einem anderen Speicherchip durchgeführt wird. Somit kann Schritt 610 das Programmieren aller abgestimmten Daten für die nichtabgestimmten Schreibbefehle in die Gruppe von Speicherzellen auf dem Speicherchip in einer einzigen Programmieroperation pro Ebene einschließen. Die Speicherzellen könnten auf ein Bit pro Zelle, zwei Bits pro Zelle, drei Bits pro Zelle usw. programmiert werden. So können mehrere nichtabgestimmte Schreibbefehle gleichzeitig programmiert werden. Dies spart Zeit und reduziert die Schreibfaktorerhöhung. Dies spart auch Energie.
-
7 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 700 zum Bilden abgestimmter Daten für einen nichtabgestimmten Schreibbefehl. Der Prozess 700 kann verwendet werden, um ein vollständiges Fragment in einem Datenpuffer 34 für einen nichtabgestimmten Schreibbefehl zu bilden. Zum Beispiel kann der Prozess 700 verwendet werden, um Sektordaten, ebenso wie vor-aufgefüllte bzw. nach-aufgefüllte Daten für ein Fragment dem Datenpuffer 34 hinzuzufügen. Der Prozess 700 ist in ein Speichersystem 100 implementiert, wie beispielsweise, jedoch nicht darauf beschränkt, die Speichersysteme in 1A, 1B, 1C, 2 oder 3A. Wenn der Prozess 700 besprochen wird, wird auf verschiedene Elemente in den 1A, 4B und 5 Bezug genommen. Es ist zu beachten, dass zur Vereinfachung der Erläuterung der Prozess 700 die Verarbeitung von Daten in einem nichtabgestimmten Schreibbefehl beschreibt. Jedoch, wie unten erläutert wird, kann, während eine Stufe des Prozesses 700 für den nichtabgestimmten Schreibbefehl durchgeführt wird, eine weitere Stufe des Prozesses für einen anderen nichtabgestimmten Schreibbefehl durchgeführt werden.
-
Der Schritt 702 beinhaltet, dass die Speichersteuerung 122 einen nichtabgestimmten Schreibbefehl identifiziert. Dies ist eine Ausführungsform von Schritt 602 des Prozesses 600 für einen nichtabgestimmten Befehl.
-
Die Schritte 704 und 706 können parallel ausgeführt werden. Jedoch ist es nicht erforderlich, dass die Schritte 704 und 706 parallel durchgeführt werden. Schritt 704 beinhaltet, dass die Speichersteuerung 122 die logische Adresse in dem nichtabgestimmten Schreibbefehl in eine physische Adresse in dem Speichersystem 100 übersetzt. Es ist zu beachten, dass die physische Adresse in einer Ausführungsform einen der Speicherchips 108 identifiziert. Die physische Adresse ist bei einer Ausführungsform für eine minimal adressierbare Einheit. Wie angemerkt, wird der Ausdruck „Fragment“ hier in Bezug auf die minimal adressierbare Einheit des Speichers in der Speichervorrichtung verwendet. Die Speichersteuerung 122 verwendet in einem Schritt 704 einer Ausführungsform eine Tabelle für die Übersetzung logisch zu physisch. Man beachte, dass in einigen Ausführungsformen nur ein L2P-Cache 36 der Übersetzungstabelle 66 logisch zu physisch im RAM 122b gehalten wird. Wenn der notwendige Eintrag nicht in dem L2P-Cache 36 ist, kann die Speichersteuerung 122 somit auf die L2P-Tabelle 66 in der Speicherstruktur 126 zugreifen.
-
Schritt 706 beinhaltet das Übertragen der nichtabgestimmten Sektordaten von dem Host 140 an den Datenpuffer 34. Schritt 706 ist eine Ausführungsform von Schritt 604 des Prozesses 600 für einen nichtabgestimmten Befehl.
-
Schritt 708 beinhaltet, dass die Speichersteuerung 122 einen Befehl an den Speicherchip 108 sendet, um Auffülldaten für den nichtabgestimmten Schreibbefehl zu lesen. Der Befehl kann eine größere Gruppe von Speicherzellen identifizieren, als tatsächlich für Auffülldaten benötigt wird. Zum Beispiel kann der Befehl den Speicherchip anweisen, Speicherzellen auf einer gesamten Wortleitung in bestimmten Blöcken zu lesen, selbst wenn die Auffülldaten nur in einer Teilmenge der Speicherzellen gespeichert werden. Dies liegt daran, dass der Speicherchip 108 in einigen Ausführungsformen allgemein eine Wortleitung von Speicherzellen in einer Leseoperation abtastet. Es ist zu beachten, dass der Befehl den Speicherchip auffordern könnte, Speicherzellen auf mehr als einer Ebene abzutasten. Beispielsweise könnte der Befehl mit Bezug auf 4B den Speicherchip anweisen, eine Wortleitung in Block 8 auf Ebene 0 und eine Wortleitung auf Block 10 in Ebene 1 zu lesen. Es ist zu beachten, dass unter einigen Umständen mehr als ein Speicherchip abgetastet werden könnte, um Auffülldaten zu erhalten. Somit könnte die Speichersteuerung 122 in einigen Fällen Lesebefehle an mehr als einen Speicherchip senden. Es ist zu beachten, dass eine zu lesende Wortleitung als ausgewählte Wortleitung bezeichnet wird und ein Block mit einer ausgewählten Wortleitung als ein ausgewählter Block bezeichnet wird. Der Lesebefehl ist in einer Ausführungsform ein ONFI-Befehl.
-
Man beachte, dass nach Schritt 708 die Speichersteuerung 122 den Prozess 700 für einen anderen nichtabgestimmten Schreibbefehl beginnen könnte. Daher führt in einer Ausführungsform die Steuerung 122 nach Schritt 708 den Schritt 702 für einen anderen nichtabgestimmten Schreibbefehl durch. Alternativ kann der andere nichtabgestimmte Schreibbefehl bereits identifiziert worden sein, in welchem Fall der Schritt 704 bzw. 706 für den nächsten nichtabgestimmten Schreibbefehl ausgeführt werden kann. Weitere Details einer solchen Verarbeitung werden unten erörtert.
-
Schritt 710 beinhaltet, dass der Speicherchip 108 Auffülldaten abtastet und die Auffülldaten in Abtastdatenregistern 40 speichert. Schritt 710 beinhaltet in einer Ausführungsform das Abtasten von Daten in Speicherzellen in mindestens einer Wortleitung. Mit Bezug auf das obige Beispiel in Bezug auf 4B tastet der Speicherchip 108 Speicherzellen auf einer Wortleitung von Block 8 ab und speichert die Daten in Abtastdatenregistern 40a. Außerdem tastet der Speicherchip 108 Speicherzellen auf einer Wortleitung von Block 10 ab und speichert die Daten in Abtastdatenregistern 40b. Man beachte, dass Schritt 710 beinhalten könnte, dass der Speicherchip 108 Speicherzellen auf nur einer Ebene, zwei Ebenen, vier Ebenen usw. abtastet. Es ist auch zu beachten, dass unter bestimmten Umständen der Schritt 710 mehrere Speicherchips einbeziehen könnte, die Speicherzellen abtasten, um Auffülldaten zu erhalten.
-
Schritt 710 kann eine Abtastphase beinhalten, in der eine oder mehrere Lesereferenzspannungen an eine ausgewählte Wortleitung in einem ausgewählten Block angelegt werden. Die Daten könnten in die Speicherzellen bei einem Bit pro Zelle, zwei Bits pro Zelle, drei Bits pro Zelle, usw. gespeichert werden. Die Anzahl der gelesenen Referenzspannungen hängt in einer Ausführungsform von der Anzahl der Bits pro Zelle ab. Wie in der Diskussion des beispielhaften Leseverstärkers von 3B angemerkt, können Daten zuerst in einem Bitleitungs-Latch (z. B. BLL0-BLL3) und dann in einem oder mehreren der Latches 194 gespeichert werden. Typischerweise werden nur entweder LDL 151, MDL 152 oder UDL 153 für SLC-Daten verwendet, zwei werden verwendet, wenn zwei Bits pro Zelle abgetastet werden, und drei werden verwendet, wenn drei Bits pro Zelle abgetastet werden.
-
Schritt 712 beinhaltet, dass der Speicherchip 108 die abgetasteten Daten von den Abtastdatenregistern 40 zu E/A-Datenregistern 42 überträgt. Unter Bezugnahme auf 4B werden die Daten in Abtastdatenregistern 40a zu E/A-Datenregistern 42a übertragen, die Daten in Abtastdatenregistern 40b werden zu E/A-Datenregistern 42b übertragen. Unter Bezugnahme auf 3B werden die Daten von den Latches 194 an die E/A-Schnittstelle 198 übertragen.
-
Schritt 714 beinhaltet das Übertragen der Daten von den E/A-Registern 42 zu dem Datenpuffer 34. Unter Bezugnahme auf 1A werden die Daten von den E/A-Datenregistern 42 an den Datenpuffer 34 übertragen. Unter Bezugnahme auf 5 wurde nun ein vollständiges Fragment in dem Datenpuffer 34 gebildet. Das heißt, alle für das Fragment benötigten Auffülldaten wurden in den Datenpuffer 34 übertragen. Ebenso wurden die Sektordaten für das Fragment durch den Datenpuffer 34 empfangen.
-
8 ist ein Diagramm, das die Zeitsteuerung in einer Ausführungsform für das Programmieren von Daten für mehrere nichtabgestimmte Schreibbefehle darstellt. Das Zeitdiagramm weist eine mit „Zeit“ gekennzeichnete Achse auf und veranschaulicht eine Sequenz von Operationen, die durch ein Speichersystem 100 durchgeführt werden. Das Zeitdiagramm ist in Phasen unterteilt: 1) Firmwarelatenz; 2) Transfer der Sektordaten; 3) L2P Auflösung; 4) Auffülldatenabtastung; 5) Transfer der Auffülldaten; 6) Fragmenttransfer; und 7) Programmierung. In diesem Beispiel werden acht nichtabgestimmte Schreibbefehle verarbeitet. Die abgestimmten Daten für alle acht nichtabgestimmten Schreibbefehle werden in diesem Beispiel gleichzeitig programmiert. Mit anderen Worten, in diesem Beispiel werden die vollständigen Fragmente für jeden der acht nichtabgestimmten Schreibbefehle gleichzeitig programmiert.
-
Anfänglich besteht eine gewisse Firmwarelatenz, wie durch die Firmwareoperation 802 angezeigt. Diese Firmwareoperation 802 beinhaltet das Identifizieren nichtabgestimmter Schreibbefehle in der Befehlswarteschlange 32 durch die Speichersteuerung 122. Diese Firmwareoperation 802 stellt eine Ausführungsform von Schritt 602 dar. Diese Firmwarelatenz 802 stellt eine Ausführungsform von Schritt 702 dar.
-
Als Nächstes beginnen die Sektordatenübertragungsphase und die L2P-Auflösungsphase für einen ersten der nichtabgestimmten Schreibbefehle. Dies wird durch die Sektordatenübertragung 804(1) und die L2P-Auflösung 806(1) angezeigt. Man beachte, dass die Sektordatenübertragung 804(1) dem Schritt 706 des Prozesses 700 entspricht und die L2P-Auflösung 806(1) dem Schritt 704 des Prozesses 700 entspricht.
-
Als Nächstes beginnt die Auffülldaten-Abtastphase für den ersten nichtabgestimmten Schreibbefehl. Dies wird durch die Auffülldatenabtastung 808(1) angezeigt. Die Auffülldatenabtastung entspricht den Schritten 708, 710 und 712 des Prozesses 700.
-
Es ist zu beachten, dass die Sektordatenübertragungsphase und die L2P-Auflösungsphase für den zweiten nichtabgestimmten Schreibbefehl während der Auffülldaten-Abtastphase des ersten nichtabgestimmten Schreibbefehls beginnen können. Zum Beispiel kann die Speichersteuerung 122, nachdem die Speichersteuerung 122 den Lesebefehl an den Speicherchip in Schritt 708 des Verfahrens 700 gesendet hat, die Schritte 704 und 706 für den zweiten nichtabgestimmten Schreibbefehl durchführen. Dies ist in dem Zeitdiagramm 800 in 8 durch Sektordatenübertragung 804(2) und L2P-Auflösung 806(2) dargestellt.
-
Nachdem die Auffülldaten-Abtastphase für den ersten nichtabgestimmten Schreibbefehl vorbei ist, kann die Auffülldaten-Abtastphase für den zweiten nichtabgestimmten Schreibbefehl beginnen. Dies wird durch die Auffülldatenabtastung 808(2) in dem Zeitdiagramm 800 dargestellt. Außerdem kann die Auffülldatenübertragungsphase für den ersten nichtabgestimmten Schreibbefehl mit der Auffülldatenabtastphase für den zweiten nichtabgestimmten Schreibbefehl konsolidiert werden. Dies wird in dem Zeitdiagramm durch Auffülldatenübertragung 810(1) dargestellt, der gleichzeitig mit zumindest einem Teil der Auffülldatenabtastung 808(2) auftritt. In diesem Beispiel ist die Auffülldatenübertragungsphase kürzer als die Auffülldatenabtastphase.
-
Somit ist zu beachten, dass das Zeitdiagramm 800 die Konsolidierung der Abtastung von Auffülldaten von Speicherzellen auf einem Speicherchip für einen der nichtabgestimmten Schreibbefehle (z. B. zweiten nichtabgestimmten Schreibbefehl) mit dem Übertragen von zuvor von Speicherzellen auf dem Speicherchip abgetasteten Daten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle (z. B. ersten nichtabgestimmten Schreibbefehl) zeigt. Diese Konsolidierung kann für andere Paare von nichtabgestimmten Schreibbefehlen durchgeführt werden. Zum Beispiel wird die Auffülldatenabtastphase 808(3) mit der Auffülldatenübertragungsphase 810(2) konsolidiert usw.
-
Das Zeitdiagramm 800 zeigt auch, wie die Sektordatenübertragungsphase, die L2P-Auflösungsphase, die Auffülldatenabtastphase und die Auffülldatenübertragungsphase auf ähnliche Weise für andere Paare von nichtabgestimmten Schreibbefehlen fortgesetzt werden. Schlussendlich enthält der Datenpuffer 34 ein vollständiges Fragment für alle acht nichtabgestimmten Befehle. Mit anderen Worten, der Datenpuffer 34 enthält abgestimmte Daten für alle acht nichtabgestimmten Befehle. Mit anderen Worten, alle erforderlichen Auffülldaten (vor-aufgefüllt bzw. nach-aufgefüllt) für alle acht nichtabgestimmten Befehle werden zu dem Datenpuffer durch Operationen 810(1) bis 810(8) übertragen. Ebenso werden die Sektordaten für alle acht nichtabgestimmten Befehle durch die Operationen 804(1) bis 804(8) in den Datenpuffer transferiert. Es ist zu beachten, dass in diesem Beispiel das Übertragen von Sektordaten in den Datenpuffer 34 nicht auftritt, während die Auffülldaten in den Datenpuffer 34 übertragen werden.
-
In einer Ausführungsform verarbeitet die Speichersteuerung 122 eine ausreichende Anzahl von nichtabgestimmten Schreibbefehlen, so dass die Anzahl von Fragmenten einer maximalen Programmierungseinheit entspricht. Zum Beispiel könnte die maximale Programmierungseinheit acht ECC-Seiten in einem Block in Ebene 0 und weitere acht ECC-Seiten in einem Block in Ebene 1 sein, wenn ein einzelnes Bit pro Speicherzelle programmiert wird. Somit beträgt die maximale Programmierungseinheit in diesem SLC-Beispiel 16 ECC-Seiten. Um dieses Beispiel weiter zu erweitern, könnte ein Fragment zwei ECC-Seiten sein. Somit ist eine maximale Einheit der Programmierung in diesem Beispiel acht Fragmente. Es könnten mehr oder weniger als acht Fragmente in einer maximalen Programmierungseinheit vorhanden sein.
-
Nachdem die Daten in dem Puffer 34 mit allen Daten für alle acht nichtabgestimmten Schreibbefehle gefüllt wurden, beginnt die Fragmenttransferphase. Dies wird durch den Transfer von acht Fragmenten 812(1) - 812(8) auf den Speicherchip dargestellt. Das Transferieren der acht Fragmente 812(1) - 812(8) entspricht einer Ausführungsform von Schritt 608 des Prozesses 600. Mit Bezug auf 1A werden die acht Fragmente 812(1) - 812(8) von dem Datenpuffer 34 zu den E/A-Datenregistern 42 transferiert.
-
Als Nächstes werden die acht Fragmente 812(1) - 812(8) während der Programmierungsphase 814 programmiert. Dies entspricht einer Ausführungsform von Schritt 610 des Prozesses 600. Die Daten könnten zu einem Bit pro Speicherzelle, zwei Bits pro Speicherzelle, drei Bits pro Speicherzelle, usw. programmiert werden. Die Fragmente könnten in Speicherzellen in einer oder mehreren Ebenen programmiert werden. Zum Beispiel werden unter Bezugnahme auf 4B die Daten in E/A-Registern 42a zu Abtastdatenregistern 40a übertragen, und die Daten in E/A-Registern 42b werden zu Abtastdatenregistern 40b übertragen. Es ist zu beachten, dass in diesem Kontext die Abtastdatenregister 40b eine oder mehrere der in 3B gezeigten Latches 194 LDL 151, MDL 152 und UDL 153 beinhalten können. Die Daten in den Abtastdatenregistern 40a könnten beispielsweise in Speicherzellen auf einer ausgewählten Wortleitung in Block 8 der Ebene 0 programmiert werden. Die Daten in den Abtastdatenregistern 40b könnten beispielsweise in Speicherzellen auf einer ausgewählten Wortleitung in Block 10 der Ebene 1 programmiert werden. Es ist zu beachten, dass die Programmierung bis zu einer maximalen Programmierungseinheit erfolgen kann. Wie erwähnt, bezieht sich der Begriff „maximale Programmierungseinheit“ auf die maximale Menge von Daten, die gleichzeitig in die Speicherzellen auf einem Speicherchip (in Abhängigkeit von der Anzahl von programmierten Bits pro Speicherzelle) programmiert werden kann.
-
Die folgenden Beispiele zeigen, wie die Sequenz in dem Zeitdiagramm 800 Rechenzeit einsparen kann. Es werden die folgenden Annahmen gemacht. Die Zeit für die Sektordatenübertragung 804 für einen einzelnen Befehl beträgt 50 Mikrosekunden (dies ist auch die schlechtestmögliche L2P Auflösung 806), die Auffülldatenabtastzeit beträgt 80 Mikrosekunden, die Zeit für die Übertragung der einzelnen Auffülldaten in den Datenpuffer beträgt 30 Mikrosekunden, die Zeit, um jedes Fragment aus dem Puffer in den Speicherchip zu übertragen beträgt 30 Mikrosekunden, und die Programmierungzeit beträgt 300 Mikrosekunden.
-
Die Gesamtzeit in 8 umfasst eine Übertragung von Sektordaten 804(1), acht Abtastoperationen 808(1) - 808(8), eine Übertragung von Auffülldaten 810(8), acht Übertragungen von Fragmenten 812(1) - 812(8) und eine Programmieroperation 814. Dies ist 30 + 8 * (80 + 30) + 30 + 300 = 1240 Mikrosekunden (wobei die anfängliche Firmwarelatenz 802 nicht gezählt wird).
-
Es ist zu beachten, dass die Zeitangaben 800 in 8 die Übertragung der Auffülldaten 810(1) - 810(7) innerhalb einer Abtastoperation von Auffülldaten für einen anderen nichtabgestimmten Schreibbefehl versteckt, was Zeit spart. Es ist zu beachten, dass die „n-1“ Paare von nichtabgestimmten Schreibbefehlen aus dem n-ten nichtabgestimmten Schreibbefehl auf diese Weise konsolidiert werden. Ebenso ist zu beachten, dass die Zeitangabe 800 in 8 gleichzeitig die Fragmente für alle der nichtabgestimmten Schreibbefehle programmiert. Es ist zu beachten, dass die Fragmente in einer Ausführungsform die maximale Programmierungseinheit sind. Dadurch wird erheblich an Zeit gespart.
-
Im Gegensatz dazu benötigt eine einfachere Technik, die für jeden nichtabgestimmten Schreibbefehl eine Lese-Schreib-Änderung durchführen muss, viel mehr Zeit. Solch eine Technik könnte acht Übertragungen von Sektordaten 804, acht Abtastoperationen 808, acht Übertragungen von Auffülldaten 810, acht Übertragungen von Fragmenten 812 und acht Programmieroperationen 814 verwenden. Dies beträgt 8 * (50 + 80 + 30 + 30 + 300) = 3920 Mikrosekunden (wobei die anfängliche Firmwarelatenz 802 nicht gezählt wird).
-
In einer Ausführungsform wird die Verarbeitung von nichtabgestimmten Schreibbefehlen während eines Faltens von SLC-Speicherzellen zu MLC-Speicherzellen durchgeführt. 9 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 900 zum Handhaben von nichtabgestimmten Schreibbefehlen während eines Faltens von SLC-Speicherzellen zu MLC-Speicherzellen. Der Prozess 900 könnte in einem Speichersystem 100 wie den Speichersystemen in den 1A, 1B, 1C, 2 oder 3A ausgeführt werden. Während des Prozesses 900 kann ein Leseverstärker, wie beispielsweise der Leseverstärker von 3B, verwendet werden. In Prozess 900 werden die MLC-Zellen auf drei Bits pro Zelle programmiert; der Prozess 900 kann jedoch modifiziert werden, um die MLC-Zellen auf zwei Bits pro Zelle, vier Bits pro Zelle usw. zu programmieren.
-
Schritt 902 beinhaltet das Initiieren einer Faltsequenz. Dieser Schritt kann durch die Speichersteuerung 122 initiiert werden.
-
Schritt 904 beinhaltet, dass die Speichersteuerung 122 nichtabgestimmte Schreibbefehle für die Faltsequenz aus der Befehlswarteschlange 32 auswählt. Die Speichersteuerung 122 kann eine ausreichende Anzahl von Schreibbefehlen für drei SLC-Wortleitungen auswählen, wenn die MLC-Wortleitung drei Bits pro Speicherzelle speichern soll. Es ist zu beachten, dass sich dies auf drei SLC-Wortleitungen in Ebene 0 und drei SLC-Wortleitungen in Ebene 1 bezieht, in einer Ausführungsform, in der Ebene 0 und Ebene 1 gleichzeitig verarbeitet werden. Gleichermaßen kann es eine MLC-Wortleitung in Ebene 0 und eine andere MLC-Wortleitung in Ebene 1 geben. Es ist zu beachten, dass Schritt 904 das Teilen der nichtabgestimmten Schreibbefehle in einen Satz von nichtabgestimmten Schreibbefehlen für jede einer Vielzahl von SLC-Gruppen von Speicherzellen beinhalten kann. Eine SLC-Gruppe von Speicherzellen kann eine Wortleitung von Speicherzellen auf jeder von einer oder mehreren Ebenen sein. Schritt 904 ist eine Ausführungsform von Schritt 602 des Prozesses 600. Der besseren Veranschaulichung wegen wählt die Speichersteuerung 24 nichtabgestimmte Schreibbefehle aus. Dies stimmt mit dem Beispiel von 8 überein, in dem acht Fragmente in einer maximalen Schreibeinheit vorhanden sind.
-
Schritt 906 dient zum Durchführen der Schritte 604, 606, 608 und 610 des Prozesses 600 für eine erste SLC-Gruppe. Die erste SLC-Gruppe kann Speicherzellen auf einer Wortleitung in jeder von einer oder mehreren Ebenen auf einem Speicherchip beinhalten. Ein einmaliges Ausführen des Schritts 906 kann zu einer Sequenz von Operationen führen, wie in 8 dargestellt. Somit wird in dem vorliegenden Beispiel Schritt 906 für acht der nichtabgestimmten Schreibbefehle durchgeführt. Die Programmierungsphase 814 führt dazu, dass in einer Ausführungsform alle Daten für die acht nichtabgestimmten Schreibbefehle gleichzeitig programmiert werden. Es ist zu beachten, dass dies das Programmieren von Speicherzellen auf einer oder mehreren Ebenen beinhalten kann. Beispielsweise ist die Wortleitung 12 im Block 8 der Ebene 0 auf ein Bit pro Speicherzelle programmiert, während gleichzeitig die Wortleitung 12 im Block 10 der Ebene 1 auf ein Bit pro Speicherzelle programmiert ist.
-
Schritt 908 besteht darin, die Schritte 604, 606, 608 und 610 des Prozesses 600 für eine zweite SLC-Gruppe durchzuführen. Die zweite SLC-Gruppe kann Speicherzellen auf einer Wortleitung in jeder von einer oder mehreren Ebenen auf einem Speicherchip beinhalten. Ein einmaliges Ausführen des Schritts 908 kann zu einer Sequenz von Operationen führen, wie in 8 dargestellt. Somit wird in dem vorliegenden Beispiel Schritt 908 für acht der nichtabgestimmten Schreibbefehle durchgeführt. Die Programmierungsphase 814 führt dazu, dass in einer Ausführungsform alle Daten für die acht nichtabgestimmten Schreibbefehle gleichzeitig programmiert werden. Es ist zu beachten, dass dies das Programmieren von Speicherzellen auf einer oder mehreren Ebenen beinhalten kann. Beispielsweise wird die Wortleitung 13 im Block 8 der Ebene 0 auf ein Bit pro Speicherzelle programmiert, während gleichzeitig die Wortleitung 13 im Block 10 der Ebene 1 auf ein Bit pro Speicherzelle programmiert wird.
-
Schritt 910 dient zum Durchführen der Schritte 604, 606, 608 und 610 des Prozesses 600 für eine dritte SLC-Gruppe. Die dritte SLC-Gruppe kann Speicherzellen auf einer Wortleitung in jeder von einer oder mehreren Ebenen auf einem Speicherchip beinhalten. Das einmalige Ausführen des Schritts 910 kann zu einer Sequenz von Operationen führen, wie in 8 dargestellt. Somit wird in dem vorliegenden Beispiel Schritt 910 für acht der nichtabgestimmten Schreibbefehle durchgeführt. Die Programmierungsphase 814 führt dazu, dass in einer Ausführungsform alle Daten für die acht nichtabgestimmten Schreibbefehle gleichzeitig programmiert werden. Es ist zu beachten, dass dies das Programmieren von Speicherzellen auf einer oder mehreren Ebenen beinhalten kann. Beispielsweise wird die Wortleitung 14 im Block 8 der Ebene 0 auf ein Bit pro Speicherzelle programmiert, während gleichzeitig die Wortleitung 4 im Block 10 der Ebene 1 auf ein Bit pro Speicherzelle programmiert wird.
-
Schritt 912 beinhaltet das Durchführen einer On-Chip-Datenübertragung der gerade programmierten Daten auf die drei SLC-Gruppen zu einer MLC-Gruppe. Die MLC-Gruppe kann Speicherzellen auf einer Wortleitung in jeder von einer oder mehreren Ebenen auf einem Speicherchip beinhalten. In dem vorliegenden Beispiel können die Daten der Wortleitungen 12, 13 und 14 in Block 8 von Ebene 0 in Block 1012 von Ebene 0 auf drei Bits pro Speicherzelle programmiert werden, während gleichzeitig die Daten der Wortleitungen 12, 13 und 14 in Block 10 von Ebene 1 in Block 1014 von Ebene 1 auf drei Bits pro Speicherzelle programmiert werden können. Die On-Chip-Datenübertragung kann das Abtasten von Daten von den SLC-Wortleitungen in Register, wie beispielsweise die Abtastdatenregister 40, und dann das Programmieren in die MLC- Wortleitung beinhalten, ohne jemals die Daten aus dem Speicherchip 108 zu übertragen.
-
Eine erste Ausführungsform, die hier offenbart ist, ist eine Vorrichtung, die Folgendes aufweist: einen Speicherchip mit Speicherzellen; einen Datenpuffer; und eine oder mehrere Steuerschaltungen. Die eine oder die mehreren Steuerschaltungen sind eingerichtet, um: nichtabgestimmte Daten in den Datenpuffer zu empfangen. Die nichtabgestimmten Daten stehen für eine Vielzahl von nichtabgestimmten Schreibbefehlen. Die eine oder die mehreren Steuerschaltungen sind so eingerichtet, dass sie gleichzeitig Auffülldaten aus Speicherzellen auf dem Speicherchip für einen der nichtabgestimmten Schreibbefehle lesen und die zuvor von Speicherzellen auf dem Speicherchip abgetasteten Auffülldaten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle übertragen. Die eine oder die mehreren Steuerschaltungen sind eingerichtet, um abgestimmte Daten für jeden der nichtabgestimmten Schreibbefehle von dem Datenpuffer zu dem Speicherchip zu übertragen. Die eine oder die mehreren Steuerschaltungen sind eingerichtet, um die abgestimmten Daten in eine Gruppe von Speicherzellen auf dem Speicherchip zu programmieren.
-
In einer zweiten Ausführungsform und zur Förderung der ersten Ausführungsform sind die eine oder die mehreren Steuerschaltungen weiterhin eingerichtet, um alle abgestimmten Daten gleichzeitig in die Gruppe von Speicherzellen auf dem Speicherchip zu programmieren.
-
In einer dritten Ausführungsform und zur Förderung der ersten oder der zweiten Ausführungsform sind die eine oder die mehreren Steuerschaltungen weiterhin eingerichtet, um gleichzeitig Auffülldaten von Speicherzellen auf dem Speicherchip für einen der nichtabgestimmten Schreibbefehle abzutasten und zuvor von Speicherzellen auf dem Speicherchip abgetastete Auffülldaten zu einem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle für „n-1“ Paare von „n“ nichtabgestimmten Schreibbefehlen zu übertragen.
-
In einer vierten Ausführungsform und zur Förderung von jeder der ersten bis dritten Ausführungsformen weist der Speicherchip einen ersten Satz von Datenregistern und einen zweiten Satz von Datenregistern auf. Zum gleichzeitigen Abtasten von Auffülldaten von Speicherzellen auf dem Speicherchip für einen der nichtabgestimmten Schreibbefehle und zum Übertragen von zuvor von Speicherzellen auf dem Speicherchip abgetasteten Auffülldaten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle sind die eine oder die mehreren Steuerschaltungen weiterhin eingerichtet, um Auffülldaten für einen ersten der nichtabgestimmten Schreibbefehle in den ersten Satz von Datenregistern zu speichern; die Auffülldaten für den ersten nichtabgestimmten Schreibbefehl von dem ersten Satz von Datenregistern zu dem zweiten Satz von Datenregistern zu übertragen; und gleichzeitig einen zweiten Satz von Speicherzellen auf dem Speicherchip abzutasten, um Auffülldaten für einen zweiten der nichtabgestimmten Schreibbefehle in den ersten Satz von Datenregistern zu speichern und die Auffülldaten für den ersten nichtabgestimmten Schreibbefehl von dem zweiten Satz von Datenregistern zu dem Datenpuffer zu übertragen.
-
In einer fünften Ausführungsform und zur Förderung jeder der vierten Ausführungsform sind die eine oder die mehreren Steuerschaltungen weiterhin eingerichtet, um alle abgestimmten Daten für jeden der nichtabgestimmten Schreibbefehle von dem ersten Satz von Datenregistern gleichzeitig in die Gruppe von Speicherzellen zu programmieren.
-
In einer sechsten Ausführungsform und zur Förderung von jeder der ersten bis fünften Ausführungsformen ist die Gruppe von Speicherzellen eine vollständige maximale Programmierungseinheit.
-
In einer siebten Ausführungsform und zur Förderung von jeder der ersten bis sechsten Ausführungsformen sind die eine oder die mehreren Steuerschaltungen weiterhin eingerichtet, um eine ausreichende Anzahl von nichtabgestimmten Schreibbefehlen in einer Befehlswarteschlange zu identifizieren, so dass die abgestimmten Daten eine maximale Programmierungseinheit sind.
-
In einer achten Ausführungsform und zur Förderung von jeder der ersten bis siebten Ausführungsformen befindet sich die Gruppe von Speicherzellen auf einer Vielzahl von Ebenen in dem Speicherchip.
-
In einer neunten Ausführungsform und zur Förderung von jeder der ersten bis achten Ausführungsformen, wobei die eine oder die mehreren Steuerschaltungen weiterhin eingerichtet sind, um: eine ausreichende Anzahl von nichtabgestimmten Schreibbefehlen für eine Faltoperation von Zellen mit einer einzelnen Ebene (SLC) zu Zellen mit mehreren Ebenen (MLC) auszuwählen; die nichtabgestimmten Schreibbefehle in einen Satz für jede einer Vielzahl von SLC-Gruppen von Speicherzellen aufzuteilen; für jeden Satz nichtabgestimmter Schreibbefehle folgendes durchzuführen: i) Empfangen der nichtabgestimmten Daten in dem Datenpuffer, ii) gleichzeitiges Abtasten der Auffülldaten von Speicherzellen auf dem Speicherchip für einen der nichtabgestimmten Schreibbefehle in dem Satz und Übertragen von zuvor von Speicherzellen auf dem Speicherchip abgetasteten Auffülldaten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle in dem Satz; iii) Übertragen von abgestimmten Daten für jeden der nichtabgestimmten Schreibbefehle in dem Satz von dem Datenpuffer zu dem Speicherchip; und iv) Programmieren der abgestimmten Daten für den Satz in eine Gruppe von SLC-Speicherzellen auf dem Speicherchip; und Übertragung der Daten aus der Vielzahl von SLC-Gruppen von Speicherzellen in eine MLC-Gruppe von Speicherzellen auf dem Speicherchip.
-
Ein Ausführungsbeispiel beinhaltet ein Verfahren zum Betreiben eines Speichersystems. Das Verfahren weist das Identifizieren einer Vielzahl von nichtabgestimmten Schreibbefehlen in einer Befehlswarteschlange einer Speichersteuerung auf; Übertragen von nichtabgestimmten Daten für die Vielzahl von nichtabgestimmten Schreibbefehlen in einen Datenpuffer der Speichersteuerung; und Konsolidieren der Abtastung von Auffülldaten aus Speicherzellen auf einem Speicherchip für einen der nichtabgestimmten Schreibbefehle mit dem Übertragen von zuvor von Speicherzellen auf dem Speicherchip abgetasteten Auffülldaten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle. Das Übertragen nichtabgestimmter Daten und das Übertragen der zuvor abgetasteten Auffülldaten bildet ein vollständiges Fragment in dem Datenpuffer für jeden nichtabgestimmten Schreibbefehl. Das Verfahren weist weiterhin das Übertragen eines vollständigen Datenfragments für jeden der nichtabgestimmten Schreibbefehle von dem Datenpuffer zu dem Speicherchip auf; und das Programmieren der vollständigen Fragmente von Daten, die zu dem Speicherchip übertragen wurden, in eine Gruppe von Speicherzellen auf dem Speicherchip.
-
Eine Ausführungsform beinhaltet ein nichtflüchtiges Speichersystem, aufweisend: einen Speicherchip mit Speicherzellen; einen Datenpuffer; ein Mittel zur Identifikation nichtabgestimmter Schreibbefehle zum Identifizieren einer Vielzahl von nichtabgestimmten Schreibbefehlen in einer Befehlswarteschlange einer Speichersteuerung; ein erstes Datenübertragungsmittel zum Übertragen nichtabgestimmter Daten für die Vielzahl von nichtabgestimmten Schreibbefehlen in einen Datenpuffer des Speichersteuerung; Konsolidierungsmittel zum Konsolidieren des Abtastens von Auffülldaten von Speicherzellen auf einem Speicherchip für einen der nichtabgestimmten Schreibbefehle mit dem Übertragen zuvor von Speicherzellen auf dem Speicherchip abgetasteten Auffülldaten zu dem Datenpuffer für einen anderen der nichtabgestimmten Schreibbefehle; ein zweites Datenmittel zum Übertragen eines vollständigen Datenfragments für jeden der nichtabgestimmten Schreibbefehle von dem Datenpuffer zu dem Speicherchip; und Programmierungsmittel zum Programmieren des vollständigen Fragments von Daten, das zu dem Speicherchip übertragen wurde, in eine Gruppe von Speicherzellen auf dem Speicherchip.
-
In einer Ausführungsform weist das erste Datenübertragungsmittel einen oder mehrere der Folgenden auf: Prozessor 122c, Steuerung 122, RAM 122b, Frontendmodul 208, Host-Schnittstelle 220, PHY 222, eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares Gate-Array (FGPA), eine Schaltung, eine digitale Logikschaltung, eine analoge Schaltung, eine Kombination diskreter Schaltungen, Gates oder irgendeine andere Art von Hardware oder Kombinationen davon. Alternativ oder zusätzlich kann das erste Datenübertragungsmittel Software in einer von einem Prozessor lesbaren Vorrichtung (z.B., Speicher) zum Programmieren des Prozessors 122c für das Identifizieren einer Vielzahl von nichtabgestimmten Schreibbefehlen in einer Befehlswarteschlange 32 einer Speichersteuerung 122 einschließen.
-
In einer Ausführungsform weist das Konsolidierungsmittel einen oder mehrere Prozessoren 122c auf, die Steuerung 122, den RAM 122b, die Abtastdatenregister 40, E/A-Datenregister 42, Abtastblock SB, Lese/Schreibschaltungen 128, die Zustandsmaschine 112, On-Chip-Adressdecodierer 114, Leistungssteuerung 116, Decodierer 124/132, Schnittstelle 122d, Latches 164, Prozessor 192, E/A-Schnittstelle 198, Bitleitungs-Latches BLL0-BLL3, Abtastschaltungen SC0-SC3, eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares Gate-Array (FPGA), eine Schaltung, eine digitale Logikschaltung, eine analoge Schaltung, eine Kombination diskreter Schaltungen, Gatter, oder irgendeine andere Art von Hardware oder eine Kombination davon. Alternativ oder zusätzlich kann das Konsolidierungsmittel Software einschließen, die in einer prozessorlesbaren Einrichtung (z. B. einem Speicher) gespeichert ist, um einen Prozessor 122 zu programmieren, um zumindest einen Teil der Konsolidierung der Abtastung von Speicherzellen auf einem Speicherchip für einen der nichtabgestimmten Schreibbefehle mit dem Übertragen von zuvor von Speicherzellen auf dem Speicherchip abgetasteten Daten zu dem Datenpuffer für einen anderen nichtabgestimmten Schreibbefehl durchzuführen.
-
In einer Ausführungsform weist das zweite Datenübertragungsmittel einen oder mehrere der Folgenden auf: Prozessor 122c, Steuerung 122, RAM 122b, E/A-Register 42, Schnittstelle 122d, Speicherschnittstelle 230, ein feldprogrammierbares Gate-Array (FGPA), eine Schaltung, eine digitale Logikschaltung, eine analoge Schaltung, eine Kombination diskreter Schaltungen, Gatter oder irgendeine andere Art von Hardware oder eine Kombination davon. Alternativ oder zusätzlich kann das zweite Datenübertragungsmittel Software beinhalten, die in einer prozessorlesbaren Einrichtung (z. B. Speicher) gespeichert ist, um den Prozessor 122c zu programmieren, um das Übertragen eines vollständigen Datenfragments für jeden der nichtabgestimmten Schreibbefehle von dem Datenpuffer 34 zu dem Speicherchip 108 durchzuführen.
-
In einer Ausführungsform weist das Programmierungsmittel eins oder mehrere der Folgenden Elemente auf: Prozessor 122c, Steuerung 122, RAM 122b, Abtastdatenregister 40, Abtastblock SB, Lese/Schreibschaltungen 128, Zustandsmaschine 112, On-Chip-Adressdecodierer 114, Leistungssteuerung 116, Decodierer 124/132, Latches 164, Prozessor 192, E/A-Schnittstelle 198, Bitleitungs-Latches BLL0-BLL3, Abtastschaltungen SC0-SC3, eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares Gate-Array (FPGA), eine Schaltung, eine digitale Logikschaltung, eine analoge Schaltung, eine Kombination von diskreten Schaltungen, Gatter, oder irgendeine andere Art von Hardware oder eine Kombination davon. Alternativ oder zusätzlich kann das Programmierungsmittel Software beinhalten, die in einer prozessorlesbaren Vorrichtung (z. B. Speicher) gespeichert ist, um einen Prozessor zu programmieren, um zumindest einen Teil der Programmierung des vollständigen Fragments von Daten, das zu dem Speicherchip übertragen wurde, in eine Gruppe von Speicherzellen auf dem Speicherchip durchzuführen.
-
Für den Zweck dieses Dokuments werden die Begriffe „Schreiben“ und „Speichern“ häufig austauschbar verwendet.
-
Für die Zwecke dieses Dokuments werden die numerischen Begriffe erster (d.h. 1.) und zweiter (d.h. 2.) im Allgemeinen verwendet, um eine Reihenfolge anzugeben, wann Befehle (z.B. Schreibbefehle) durch eine Speichersteuerung von einem Host empfangen werden, sowie im Allgemeinen eine Reihenfolge, in der Daten (z.B. erste und zweite Daten) in einem nicht flüchtigen Speicher zu speichern sind. Es ist jedoch anzumerken, dass der Begriff erster (d. h. 1.) nicht so interpretiert werden sollte, als dass er impliziert, dass nichts anderes ihm vorangeht. Zum Beispiel können vorherige Schreibbefehle empfangen worden sein, bevor ein erster Schreibbefehl empfangen wurde. Jedoch kann impliziert werden, dass ein zweiter Schreibbefehl zu einem späteren Zeitpunkt empfangen wird, als ein erster Schreibbefehl empfangen wurde, so wie die Begriffe hier verwendet werden. In ähnlicher Weise kann impliziert werden, dass ein dritter Schreibbefehl nach dem zweiten Schreibbefehl empfangen wurde.
-
Für die Zwecke dieses Dokuments kann eine Bezugnahme in der Beschreibung auf „eine Ausführungsform“, „einige Ausführungsformen“ oder „eine andere Ausführungsform“ verwendet werden, um verschiedene Ausführungsformen oder die gleiche Ausführungsform zu beschreiben.
-
Für die Zwecke dieses Dokuments kann eine Verbindung eine direkte Verbindung oder eine indirekte Verbindung (z. B. über ein oder mehrere andere Teile) sein. In einigen Fällen, wenn ein Element als mit einem anderen Element verbunden oder gekoppelt bezeichnet wird, kann das Element direkt mit dem anderen Element verbunden sein oder indirekt über dazwischenliegende Elemente mit dem anderen Element verbunden sein. Wenn ein Element als direkt mit einem anderen Element verbunden bezeichnet wird, dann gibt es keine Zwischenelemente zwischen dem Element und dem anderen Element. Zwei Vorrichtungen sind miteinander „in Kommunikation“, wenn sie direkt oder indirekt verbunden sind, so dass sie elektronische Signale untereinander kommunizieren können.
-
Für die Zwecke dieses Dokuments können die Begriffe „basierend auf“ und „in Abhängigkeit von“ als „zumindest teilweise basierend auf“ verstanden werden.
-
Während verschiedene Ausführungsformen der vorliegenden Technologie oben beschrieben wurden, versteht es sich, dass sie beispielhaft und nicht einschränkend dargestellt wurden. Es wird für Fachleute offensichtlich sein, dass verschiedene Änderungen in Form und Detail daran vorgenommen werden können, ohne vom Geist und Umfang der Technologie abzuweichen. Zum Beispiel sind, obwohl einige Variationen im Detail oben beschrieben wurden, andere Modifikationen oder Hinzufügungen möglich. Insbesondere können weitere Merkmale bzw. Variationen zusätzlich zu den hier dargelegten vorgesehen werden. Zum Beispiel können die oben beschriebenen Implementierungen auf verschiedene Kombinationen und Unterkombinationen der offenbarten Merkmale bzw. Kombinationen und Unterkombinationen mehrerer weiter oben offenbarter Merkmale gerichtet sein. Außerdem erfordert der in den beigefügten Figuren dargestellte und/oder hier beschriebene Logikfluss nicht die bestimmte gezeigte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erzielen. Andere Ausführungsformen können in dem Umfang der folgenden Ansprüche liegen.
-
Ausführungsformen der vorliegenden Technologie wurden oben mit Hilfe funktioneller Bausteine beschrieben, die die Leistung spezifizierter Funktionen und Beziehungen davon veranschaulichen. Die Grenzen dieser funktionalen Bausteine wurden hier oft für die Zweckmäßigkeit der Beschreibung definiert. Alternative Grenzen können definiert werden, solange die spezifizierten Funktionen und Beziehungen davon geeignet durchgeführt werden. Andere derartige alternative Grenzen liegen somit innerhalb des Umfangs und des Geistes der beanspruchten Technologie. Ein Fachmann wird erkennen, dass diese funktionalen Bausteine durch Einzelkomponenten, anwendungsspezifische integrierte Schaltungen, Prozessoren, die geeignete Software ausführen, und dergleichen oder eine beliebige Kombination davon implementiert werden können.
-
Die Breite und der Schutzumfang der vorliegenden Erfindung sollten nicht durch irgendeine der oben beschriebenen beispielhaften Ausführungsformen beschränkt werden, sondern nur in Übereinstimmung mit den folgenden Ansprüchen und ihren Äquivalenten definiert sein.
-
Obwohl der Gegenstand in einer Sprache beschrieben wurde, die spezifisch für strukturelle Merkmale bzw. methodisches Handeln ist, versteht es sich, dass der in den beigefügten Ansprüchen definierte Gegenstand nicht notwendigerweise auf die oben beschriebenen spezifischen Merkmale oder Handlungen beschränkt ist. Entsprechend sind die oben beschriebenen spezifischen Merkmale und Vorgänge als beispielhafte Formen der Implementierung der Ansprüche offenbart.
-
Die vorhergehende detaillierte Beschreibung ist zu Zwecken der Veranschaulichung und Beschreibung vorgelegt worden. Sie soll nicht erschöpfend sein oder die genaue offenbarte Form beschränken. Viele Modifikationen und Variationen sind im Lichte der obigen Lehre möglich. Die beschriebenen Ausführungsformen wurden gewählt, um die Prinzipien der vorgeschlagenen Technologie und ihrer praktischen Anwendung am besten zu erklären, um es anderen Fachleuten zu ermöglichen, sie in verschiedenen Ausführungsformen und mit verschiedenen Modifikationen, wie sie für die jeweilige beabsichtigte Verwendung geeignet sind, am besten zu verwenden. Es ist beabsichtigt, dass der Schutzumfang durch die hier beigefügten Ansprüche definiert ist.