-
Die
vorliegende Erfindung betrifft allgemein nichtflüchtige Halbleiterspeicher sowie
deren Funktionsweise und betrifft spezieller die Nutzung von Lösch/Schreib-Zykluszählwerten
für Speicherzellenblöcke.
-
Heutzutage
werden viele kommerziell erfolgreiche, nichtflüchtige Speicherprodukte genutzt,
insbesondere in Form von Karten mit kleinem Formfaktor, bei denen
ein Array aus Flash-EEPROM-(elektrisch löschbarer und programmierbarer
Nur-Lese-Speicher)Zellen genutzt werden.
-
NOR-Array
-
Bei
einem typischen NOR-Array sind Speicherzellen zwischen benachbarte
Bitleitungs-Source-
und Drain-Diffusionsgebiete geschaltet, die sich in Spaltenrichtung
erstrecken, wobei Steuergates mit Wortleitungen verbunden sind,
die sich entlang von Zellenzeilen erstrecken. Eine typische Speicherzelle weist
einen "geteilten
Kanal" zwischen
Source- und Drain-Diffusionsgebieten
auf. Ein Ladungsspeicherelement der Zelle ist über dem einen Abschnitt des
Kanals angeordnet, und die Wortleitung (auch als Steuergate bezeichnet)
ist über
dem anderen Kanalabschnitt wie auch über dem Ladungsspeicherelement angeordnet.
Damit wird effektiv eine Zelle mit zwei in Reihe geschalteten Transistoren
gebildet, einem (dem Speichertransistor), bei dem die Ladungsmenge
auf dem Ladungsspeicherelement in Kombination mit der Spannung an
der Wortleitung die Stärke
des Stroms steuert, der durch dessen Abschnitt des Kanals fließen kann,
und dem anderen (dem Auswahltransistor), bei dem die Wortleitung
allein als dessen Gate dient. Die Wortleitung erstreckt sich über eine Zeile
von Ladungsspeicherelementen hin. Beispiele für solche Zellen, deren Nutzung
in Speichersystemen sowie für
Verfahren zur Herstellung derselben sind in den
US-Patenten 5,070,032 ;
5,095,344 ;
5,315,541 ;
5,343,063 und
5,661,053 sowie in der gleichzeitig
anhängigen
US-Patentanmeldung 09/239,073 ,
eingereicht am 27. Januar 1999 (erteilt als
US 6,281,075 ) angegeben.
-
Bei
einer Modifikation dieser Flash-EEPROM-Zelle mit geteiltem Kanal
ist ein Steuergate hinzugefügt,
das zwischen dem Ladungsspeicherelement und der Wortleitung angeordnet
ist. Jedes Steuergate eines Arrays erstreckt sich über eine
Spalte von Ladungsspeicherelementen hin, senkrecht zu der Wortleitung.
Der Effekt besteht darin, die Wortleitung davon zu entlasten, zwei
Funktionen gleichzeitig ausführen
zu müssen,
wenn eine ausgewählte
Zelle gelesen oder programmiert wird. Diese beiden Funktionen bestehen
darin, (1) als ein Gate für
einen Auswahltransistor zu dienen, sodass eine geeignete Spannung
erforderlich ist, um den Auswahltransistor an- und abzuschalten,
und (2) die Spannung des Ladungsspeicherelements auf einen gewünschten
Pegel zu führen,
und zwar über
eine elektrische (kapazitive) Feldkopplung zwischen der Wortleitung
und dem Ladungsspeicherelement. Es ist oft schwierig, diese beiden
Funktionen in optimaler Weise mit einer einzigen Spannung auszuführen. Bei
Hinzufügen
des Steuergates braucht die Wortleitung nur die Funktion (1) auszuführen, während das
ergänzte
Steuergate die Funktion (2) ausführt.
Die Nutzung von Steuergates in einem Flash-EEPROM-Array ist zum Beispiel in den
US-Patenten 5,313,421 und
6,222,762 beschrieben.
-
Es
gibt verschiedene Programmierverfahren zum Injizieren von Elektronen
aus dem Substrat auf ein Floating-Gate-Speicherelement durch das Gate-Dielektrikum
hindurch. Die üblichsten
Programmiermechanismen sind in einem von Brown und Brewer herausgegeben
Buch, "Nonvolatile
Semiconductor Memory Technology" IEEE
Press, Abs. 1.2, Seiten 9–25
(1998) beschrieben. Bei einem Verfahren, das als "Hot Electron Injection" oder Injektion heißer Elektronen
bezeichnet wird (Abs. 1.2.3), werden Elektronen von dem Kanal der
Zelle in einen Bereich des Floating Gate angrenzend an den Drain-Bereich der
Zelle injiziert. Bei einem weiteren Verfahren, das als "Source Side Injection" oder sourceseitige
Injektion bezeichnet wird (Abs. 1.2.4), wird das elektrische Potential
der Substratoberfläche
auf der Länge
des Kanals der Speicherzelle in solcher Weise gesteuert, dass Bedingungen
für eine
Elektroneninjektion in einem von dem Drain-Bereich entfernten Bereich des Kanals
erzeugt werden. Die sourceseitige Injektion ist auch in einem Artikel
von Kamiya et al., "EPROM Cell
with High Gate Injection Efficiency", IEDM Technical Digest, 1982, Seiten
741–744,
und in den
US-Patenten 4,622,656 und
5,313,421 beschrieben.
-
Zwei
Verfahren zum Entfernen von Ladung von den Ladungsspeicherelementen
zum Löschen von
Speicherzellen werden in beiden der zuvor beschriebenen zwei Typen
von NOR-Speicherzellenarrays genutzt. Das eine besteht darin, zu
dem Substrat hin zu löschen,
indem geeignete Spannungen an Source, Drain und ein anderes oder
mehrere andere Gate(s) angelegt werden, welche bewirken, dass Elektronen
durch einen Abschnitt einer dielektrischen Schicht zwischen dem
Speicherelement und dem Substrat tunneln. Bei dem anderen Löschverfahren werden
Elektronen von dem Speicherelement auf ein anderes Gate übertragen,
durch eine dielektrische Tunnelschicht hindurch, die zwischen diesen
angeordnet ist. Bei dem vorstehend beschriebenen ersten Typ von
Zellen ist ein drittes Gate für
diesen Zweck vorgesehen. Bei dem zuvor beschriebenen zweiten Typ
von Zellen, der bereits drei Gates aufweist, wegen der Nutzung eines
Steuergates, wird das Ladungsspeicherelement zu der Wortleitung
hin gelöscht,
ohne dass ein viertes Gate hinzugefügt zu werden braucht. Obwohl
bei diesem zweiten Verfahren wieder eine zweite Funktion hinzukommt,
die von der Wortleitung auszuführen
ist, werden diese Funktionen zu unterschiedlichen Zeitpunkten ausgeführt, sodass
die Notwendigkeit, wegen dieser beiden Funktionen einen Kompromiss
einzugehen, vermieden wird. Wenn eines der Löschverfahren genutzt wird,
wird eine große
Anzahl von Speicherzellen zum gleichzeitigen, "blitzartigen" Löschen
zusammengruppiert. Bei einem Ansatz umfasst die Gruppe genügend Speicherzellen,
um die Menge an Benutzerdaten zu speichern, die in einem Plattensektor
gespeichert sind, nämlich
512 Byte plus einige Overhead-Daten. Bei einem weiteren Ansatz enthält jede Gruppe
genügend
Zellen, um mehrere tausend Byte Benutzerdaten zu halten, die der
Datenmenge vieler Plattensektoren entsprechen. Ein Löschvorgang
für mehrere
Blöcke,
Defektbehandlung sowie weitere Merkmale eines Flash-EEPROM-Systems
sind in
US-Patent Nr. 5,297,148 beschrieben.
-
Wie
bei fast allen Anwendungen integrierter Schaltungen besteht auch
bei Flash-EEPROM-Systemen
der Druck, die zum Implementieren einer gewissen integrierten Schaltungsfunktion
erforderliche Siliciumsubstratfläche
zu verkleinern. Es wird weiterhin gewünscht, die Menge an digitalen
Daten, die in einem gegebenen Bereich eines Siliciumsubstrats gespeichert
werden kann, zu erhöhen,
um die Speicherkapazität
einer Speicherkarte mit gegebener Größe und anderer Typen von Baugruppen
zu erhöhen
oder sowohl die Kapazität
zu erhöhen
als auch die Größe zu vermindern.
Eine Möglichkeit
zum Erhöhen
der Speicherdichte der Daten besteht darin, mehr als ein Bit Daten
pro Speicherzelle zu speichern. Dies wird erreicht, indem ein Fenster
eines Ladungsmenge-Spannungsbereichs
eines Speicherelements in mehr als zwei Zustände unterteilt wird. Die Nutzung
von vier solchen Zuständen
ermöglicht
es, in jeder Zelle zwei Bits Daten zu speichern, bei acht Zuständen werden
drei Bits Daten pro Zelle gespeichert, und so weiter. Eine Flash-EEPROM-Struktur mit
mehreren Zuständen
sowie deren Funktionsweise sind in den
US-Patenten 5,043,940 und
5,172,338 beschrieben.
-
Ein
anderer Typ von Speicherzelle umfasst zwei Speicherelemente, die
ebenfalls mit mehreren Zuständen
in jedem Speicherelement betrieben werden können. Bei diesem Typ von Zelle
sind über
derem Kanal zwischen Source- und Drain-Diffusionsgebieten zwei Speicherelemente
vorhanden, mit einem Auswahltransistor zwischen diesen. Ein Steuergate ist
entlang jeder Spalte von Speicherelementen integriert, und darüber ist
entlang jeder Zeile von Speicherelementen eine Wortleitung angeordnet.
Wenn auf ein gegebenes Speicherelement zugegriffen wird, zum Lesen
oder zum Programmieren, wird das Steuergate über dem anderen Speicherelement
der Zelle, die das interessierende Speicherelement enthält, auf
ausreichend hohen Pegel gehoben, um den Kanal unter dem anderen
Speicherelement einzuschalten, und zwar egal, welche Ladungsmenge
auf diesem vorhanden ist. Damit wird effektiv das andere Speicherelement
als Faktor beim Lesen oder Programmieren des interessierenden Speicherelements in
derselben Speicherzelle ausgeschlossen. Beispielsweise ist dann
die Stärke
des durch die Zelle fließenden
Stroms, die genutzt werden kann, um deren Zustand zu lesen, eine
Funktion der Ladungsmenge auf dem interessierenden Speicherelement, aber
nicht des anderen Speicherelement in derselben Zelle. Beispiele
für diese
Architektur eines Zellenarrays sowie für Betriebsverfahren sind in
den
US-Patenten 5,712,180 ;
6,103,573 und
6,151,248 beschrieben.
-
NAND-Array
-
Bei
einer weiteren Flash-EEPROM-Architektur wird ein NAND-Array genutzt,
bei welchem serielle Stränge
aus mehr als zwei Speicherzellen, beispielsweise 16 oder 32, zusammen
mit einem oder mehreren Auswahltransistoren zwischen einzelne Bitleitungen
und ein Referenzpotential geschaltet sind, um Zellenspalten zu bilden.
Wortleitungen erstrecken sich innerhalb einer großen Anzahl
dieser Spalten quer zu den Zellen. Eine einzelne Zelle in einer
Spalte wird gelesen und während
der Programmierung verifiziert, indem bewirkt wird, dass die verbleibenden
Zellen in dem Strang hart angeschaltet werden, sodass der Strom,
der durch einen Strang fließt,
von der Ladungsmenge abhängt,
die in der adressierten Zelle gespeichert ist. Ein Beispiel für ein Array
mit NAND-Architektur und dessen Betrieb als Teil eines Speichersystems
findet sich in den
US-Patenten
Nr. 5,570,315 ;
5,774,397 und
6,046,935 .
-
Ladungsspeicherelemente
-
Die
Ladungsspeicherelemente derzeitiger Flash-EEPROM-Arrays und wie
sie in den vorstehend erwähnten
Patenten und Artikeln diskutiert werden, sind meist elektrisch leitfähige Floating
Gates, die typischerweise aus dotiertem Polysiliciummaterial ausgebildet
sind. Bei einem anderen Typ von Speicherzelle, der in Flash-EEPROM-Systemen
genutzt werden kann, wird ein nicht-leitfähiges dielektrisches Material
anstelle eines leitfähigen
Floating Gate genutzt, um Ladung in nichtflüchtiger Weise zu speichern.
Eine solche Zelle ist in einem Artikel von Chan et al., "A True Single-Transistor
Oxide-Nitride-Oxide EEPROM Device", IEEE Electron Device Letters, Bd. EDL-8,
Nr. 3, März
1987, S. 93–95,
beschrieben. Ein dreischichtiges Dielektrikum, das aus Siliciumoxid, Siliciumnitrid
und Siliciumoxid ("ONO") ausgebildet ist,
ist in Zwischenlage zwischen einem leitfähigen Steuergate und einer
Oberfläche
eines Halbleitersubstrats oberhalb des Kanals der Speicherzelle
angeordnet. Die Zelle wird durch Injektion von Elektronen aus dem
Zellenkanal in das Nitrid programmiert, wo diese eingefangen werden
und in einem begrenzten Bereich gespeichert werden. Diese gespeicherte Ladung ändert dann
die Schwellspannung eines Abschnitts des Kanals der Zelle in einer
Weise, die feststellbar ist. Die Zelle wird durch Injektion von
heißen Löchern in
das Nitrid gelöscht.
Man vergleiche auch Nozaki et al., "A 1-Mb EEPROM with MONDS Memory Cell
for Semiconductor Disk Application", IEEE Journal of Solid-State Circuits,
Bd. 26, Nr. 4, April 1991, S. 497–501, wo eine ähnliche
Zelle mit einer Konfiguration mit geteiltem Gate beschrieben ist,
bei der sich ein Gate aus dotiertem Polysilicium über einem
Abschnitt des Speicherzellenkanals erstreckt, um einen separaten
Auswahltransistor zu bilden.
-
US-Patent 5,851,881 beschreibt
die Nutzung von zwei Speicherelementen, die benachbart zueinander über dem
Kanal der Speicherzelle angeordnet sind, wobei das eine ein solches
dielektrisches Gate darstellt und das andere ein leitfähiges Floating
Gate darstellt. Es werden zwei Bits Daten gespeichert, ein Bit in
dem dielektrischen Element und das andere in dem Floating Gate.
Die Speicherzelle wird auf eine von vier unterschiedlichen Kombinationen
von Schwellspannungspegeln programmiert, die einen von vier Speicherzuständen darstellt,
indem jedes der beiden Gates in einen von zwei unterschiedlichen Ladungsmengebereichen
programmiert wird.
-
Ein
weiterer Ansatz zum Speichern von zwei Bits in jeder Zelle unter
Nutzung eines dielektrischen Speicherelements wurde von Eitan et
al. beschrieben, "NROM:
A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device
Letters, Bd. 21, Nr. 11, November 2000, S. 543–545. Eine dielektrische ONO-Schicht
erstreckt sich über
den Kanal zwischen Source- und Drain-Diffusionsgebieten hin. Die
Ladung für
ein Bit Daten wird in der dielektrischen Schicht angrenzend an den
Drain-Bereich positioniert, und die Ladung für das andere Bit Daten wird
in der dielektrischen Schicht angrenzend an den Source-Bereich positioniert.
Eine Mehrzustands-Datenspeicherung wird durch separates Auslesen
der Binärzustände der
räumlich
getrennten Ladungsspeicherbereiche in dem Dielektrikum erreicht.
-
Große
Löschblöcke
-
Die
Speicherzellen eines typischen Flash-EEPROM-Arrays sind in diskrete
Zellenblöcke unterteilt,
die zusammen gelöscht
werden. Das bedeutet, der Block stellt die Löscheinheit dar. Jeder Block
speichert typischerweise eine oder mehrere Speicherseiten an Daten,
wobei die Speicherseite die Programmier- und Lese-Einheit darstellt,
wenngleich bei einer einzigen Operation auch mehr als eine Speicherseite
programmiert oder gelesen werden kann. Jede Speicherseite speichert
typischerweise einen oder mehrere Sektoren an Daten, wobei die Größe des Sektors
durch das Hostsystem definiert wird. Gemäß einer Norm, die für Magnetplattenlaufwerke
etabliert ist, umfasst ein beispielhafter Sektor 512 Byte Benutzerdaten
zuzüglich
einer gewissen Anzahl von Bytes mit Verwaltungs-(Overhead-)Informationen zu den Benutzerdaten
und/oder dem Block, in welchem diese gespeichert sind.
-
Block-Verlaufszählwerte
-
Die
Anzahl der Lösch-
und Neuprogrammierzyklen, die einzelne Blöcke aus Speicherzellen erleben,
wird oft als Teil der optimierten Steuerung des Betriebs des Speichersystems
protokolliert. Ein Grund dafür
besteht darin, dass Flash-EEPROM-Zellen nur einer begrenzten Anzahl
von Lösch/Schreib-Zyklen
standhalten können.
Das Leistungsverhalten und die Zuverlässigkeit verschlechtern sich üblicherweise
mit steigender Anzahl solcher Zyklen, und der Grad einer solchen
Verschlechterung, der toleriert werden kann, hängt von verschiedenen Betriebsparametern
des Systems ab. Einige Speicherzellenblöcke durchlaufen im normalen
Betrieb typischerweise mehr Zyklen als andere. Wenn der Zyklenzählwert für einen
Block einen vorgegebenen Grenzwert für die erwartete Haltbarkeit
erreicht, kann dieser Block für
die Speicherabbildung aus dem System ausgeschlossen werden, zugunsten
eines redundanten Blocks. Ein Beispiel dafür ist in
US-Patent Nr. 5,268,870 beschrieben,
in welchem der Verlaufszählwert
für jeden
Block als Teil der Overhead-Daten in dem Block gespeichert wird.
US-Patent Nr. 6,426,893 beschreibt
ein System, bei dem die Block-Verlaufszählwerte wie auch andere Overhead-Daten in Blöcken getrennt
von denjenigen Blöcken,
auf welche sie sich beziehen, gespeichert werden. Ferner kann der
Verlaufszählwert
genutzt werden, um die Nutzung (den Verschleiß) der Speicherzellenblöcke eines
Systems auszugleichen. Die relativen Block-Verlaufszählwerte
werden durch den System-Controller überwacht, und in Reaktion darauf,
dass eine vorbestimmte Ungleichmäßigkeit
in der Nutzung erkannt wird, wird die Umsetzung von logischen in
physikalische Adressen der Blöcke
geändert,
um zukünftige
hochvolumige Neuschreibvorgänge
zu Blöcken
mit niedrigeren Verlaufs-Zykluszählwerten
zu lenken. Beispiele für
solche Abnutzungsausgleichsverfahren sind in
US-Patent Nr. 6,081,447 angegeben.
Als Alternative zum Halten der Verlaufszählwerte in denjenigen Blöcken, auf welche
sie sich beziehen, können
diese in anderen Blöcken
gespeichert werden, die für
Overhead-Informationen der Blöcke
vorgesehen sind. Ein Beispiel dafür ist in der US-Patentanmeldung
09/505,555, eingereicht am 17. Februar 2000 (erteilt als
US 6,426,893 ) beschrieben.
Zusätzlich
zur Verwendung des Verlaufszählwertes
zum Zwecke der Blocksubstitution kann der Zählwert von dem Controller auch
genutzt werden, um Spannungen festzulegen, die während der Programmierung, des
Lesens und/oder bei Löschoperationen
genutzt werden, da die optimalen Spannungen sich mit zunehmender
Nutzungsdauer oft erhöhen
werden.
-
Die
US 6 028 794 , über welche
die unabhängigen
Ansprüche
charakterisiert sind, offenbart ein nichtflüchtiges Halbleiter-Speicherbauelement,
bei welchem zwei Speicherzellen pro Block zum Halten eines Datensatzes
für oder
der Anzahl von in dem Block ausgeführten Löschoperationen reserviert sind.
-
Die
US 6 230 233 offenbart ein
EEPROM-Speichersystem, das Blöcke
mit Speicherzellen umfasst, die zu Speicherbänken gruppiert sind. Das System überwacht
die Nutzung der Speicherbänke
und vertauscht unter Ansprechen auf das Feststellen einer ungleichmäßigen Nutzung
die physikalischen Adressen der Speicherbank periodisch, um die
Nutzung über
die Standzeit des Speichers hin auszugleichen.
-
Die
EP 0 589 597 offenbart einen
nichtflüchtigen
Flash-Speicher, bei welchem ein Zählwert für die Anzahl von Löschoperationen,
die in jedem Block ausgeführt
werden, unterhalten wird. Informationen werden in denjenigen Speicherblock
geschrieben, der den kleinsten Lösch-Zählwert aufweist.
-
Die
US 5 930 167 offenbart einen
Flash-EEPROM, der ein Zellen-Array umfasst, in welchem einzelne
Zellen mehr als ein Bit Daten speichern. Teile des Arrays, in welchem
keine Daten gespeichert sind, werden als Schreib-Zwischenspeicher
genutzt, in welchem einzelne Zellen vorübergehend einzelne Bits Daten
speichern, indem mit nur zwei erkennbaren Schwellwertbereichen gearbeitet
wird. Zu einem späteren
Zeitpunkt werden die Zwischenspeicherdaten gelesen, komprimiert
und zurück
in den Speicher geschrieben, indem einzelne Zellen mit mehr als
zwei erkennbaren Schwellwertbereichen betrieben werden, für eine längerfristige
Speicherung.
-
Entsprechend
der vorliegenden Erfindung wird ein Verfahren zum Betreiben eines nichtflüchtigen
Speichers zur Verfügung
gestellt, der ein Array aus Speicherzellen umfasst, die zu Blöcken von
Zellen organisiert sind, die zusammen als eine Einheit gelöscht werden
können
und die einzeln mehrere Seiten von Benutzerdaten speichern. Das
Verfahren beinhaltet das Speichern von Overhead-Daten in den einzelnen
Blöcken
mit Informationen, die sich auf den Betrieb des Blocks beziehen,
in dem die Overhead-Daten
gespeichert sind, und eine Löschoperation.
Die Löschoperation
beinhaltet das Adressieren von einem oder mehreren der Blöcke zum
Löschen, das
Lesen der Overhead-Daten aus dem einen Block oder den mehreren Blöcken und
das vorübergehende
Speichern der gelesenen Overhead-Daten, das Löschen der Speicherzellen in
dem einen oder den mehreren Blöcken,
das Aktualisieren der gelesenen Overhead-Daten und das Programmieren
der aktualisierten Overhead-Daten zurück in jeweilige der genannten
ein oder mehreren Blöcke,
um dadurch die Speicherseiten in dem einen oder den mehreren Blöcken zum
Programmieren von Benutzerdaten in diesen verfügbar zu lassen. Das Programmieren
der aktualisierten Overhead-Daten umfasst das Programmieren einzelner
Speicherzellen-Speicherelemente in einen von genau zwei Speicherzuständen, um
dadurch ein Bit an Overhead-Daten pro Speicherelement zu speichern.
Nach der Löschoperation
werden Benutzerdaten in Speicherseiten des genannten einen oder
der mehreren Blöcke
programmiert, wobei die Programmierung das Programmieren einzelner Speicherzellen-Speicherelemente
in einen von mehr als zwei Speicherzuständen beinhaltet, um dadurch mehr
als ein Bit von Benutzerdaten pro Speicherelement zu speichern.
-
Entsprechend
der vorliegenden Erfindung wird ferner ein nichtflüchtiges
Speichersystem mit einem Array aus Speicherzellen zur Verfügung gestellt, die
zu Blöcken
aus Zellen organisiert sind, die zusammen als eine Einheit gelöscht werden
können und
die einzeln mehrere Seiten von Benutzerdaten speichern. Das nichtflüchtige Speichersystem
umfasst Mittel zum Speichern von Overhead-Daten in den einzelnen
Blöcken
mit Informationen, die sich auf den Betrieb des Blocks beziehen,
in dem die Overhead-Daten gespeichert sind, und Mittel zum Ausführen einer
Löschoperation.
Die Mittel zum Ausführen einer
Löschoperation
umfassen Mittel zum Adressieren eines oder mehrerer der Blöcke zum
Löschen, Mittel
zum Lesen von Overhead-Daten aus dem einen oder den mehreren Blöcken, Mittel
zum vorübergehenden
Speichern der gelesenen Overhead-Daten, Mittel zum Löschen der
Speicherzellen in dem einen oder den mehreren Blöcken und Mittel zum Aktualisieren
der gelesenen Overhead-Daten. Die Mittel zum Speichern von Overhead-Daten haben die Aufgabe,
die aktualisierten Overhead-Daten zurück in jeweilige der genannten
ein oder mehreren Blöcke
zu programmieren, um dadurch die Speicherseiten in dem einen oder
den mehreren Blöcken
zum Programmieren von Benutzerdaten in diesen verfügbar zu
halten. Die Mittel zum Speichern von Overhead-Daten haben ferner
die Aufgabe, die aktualisierten Overhead-Daten durch Programmieren
einzelner Speicherzellen-Speicherelemente in einen von genau zwei
Speicherzuständen
zu programmieren, um dadurch ein Bit an Overhead-Daten pro Speicherelement
zu speichern. Die Mittel zum Programmieren von Daten haben die Aufgabe,
Benutzerdaten in Speicherseiten des genannten einen oder der mehreren
Blöcke
zu programmieren, was das Programmieren einzelner Speicherzellen-Speicherelemente
in einen von mehr als zwei Speicherzuständen umfasst, um dadurch mehr
als ein Bit an Benutzerdaten pro Speicherelement zu speichern.
-
In
einem nichtflüchtigen
Speichersystem, bei dem die Speicherzellen zu Blöcken aus gleichzeitig löschbaren
Zellen organisiert sind, wobei die Blöcke weiter in mehrere Speicherseiten
mit Benutzerdaten unterteilt sind, die einzeln programmiert und
gelesen werden können,
werden Overhead-Daten, die sich auf einzelne Blöcke beziehen, in den Blöcken gespeichert,
auf welche sich die Daten beziehen, und werden als Teil eines Löschzyklus
des Blocks aktualisiert. Wenn die Zyklusdaten in Reservezellen einer einzelnen
Speicherseite eines Blocks gespeichert werden, können sie danach mittels eines
einzigen an dieser Speicherseite erfolgenden Lesevorgangs gelesen
werden. Alternativ können
die Zyklusdaten über
zwei oder mehr Speicherseiten des Blocks auf ungenutzte Zellen verteilt
werden, beispielsweise in Headern (Köpfen) von Datensektoren, die
in den Speicherseiten gespeichert sind. Diese Verfahren finden insbesondere
Anwendung bei Flash-Speichersystemen des NAND-Typs, können aber
auch vorteilhaft bei anderen Typen nichtflüchtiger Speichersysteme genutzt
werden, bei welchen Blöcke
aus Speicherzellen zusammen gelöscht
werden.
-
Da
der Trend dahin geht, die Menge an Daten zu vergrößern, die
eine gegebene Anzahl von Speicherzellen speichern kann, werden mehr
als ein Bit Benutzerdaten in jedem Speicherzellen-Speicherelement
gespeichert, indem mehr als zwei programmierte Zustände für jedes
Speicherelement festgelegt werden. Was die Block-Zykluszähldaten
betrifft, hat es jedoch Vorteile, diese Daten in zwei Zuständen oder
mit einem Bit pro Speicherzellen-Speicherelement zu speichern. Die
Programmierung der Zykluszähldaten
wird verbessert, und diese Programmierung kann in einer Weise erfolgen,
bei der die Menge der Störungen
in dem neu gelöschten
Block, in welchen diese geschrieben werden, reduziert wird.
-
Anhand
der Zykluszähldaten
kann ein Redundanzcode berechnet werden und kann danach mit diesen
als Teil der Overhead-Daten des Blocks programmiert werden. Ein
Fehlerkorrekturcode (ECC) stellt ein Beispiel für eine solche Redundanz dar,
die bereitgestellt werden kann, um einige Fehler in den Zykluszähldaten
korrigieren zu können
und, wenn zu viele Fehler vorhanden sind, als dass diese korrigiert werden
könnten,
festzustellen, dass die Zykluszähldaten
ungültig
sind. Wenn diese ungültig
sind, wird der Block für
die Speicherabbildung aus dem System ausgeschlossen, weil die Anzahl
der Löschzyklen, die
er erfahren hat, unbekannt ist und da diese Ungewissheit Entscheidungen
negativ beeinflussen kann, die von dem Speicher-Controller beim
Betrieb des Blocks getroffen werden. Ein Block kann auch in dem Fall
für die
Speicherabbildung aus dem System ausgeschlossen werden, dass die
Zykluszähldaten
während
einer Löschoperation
verloren gehen, wie es passieren kann, wenn die Stromversorgung
während einer
Zeit, in welcher der Zählwert
vorübergehend
in einem flüchtigen
Speicher gespeichert ist, unterbrochen wird. Dies kann beispielsweise
passieren, wenn ein Benutzer während
eines Löschzyklus
eine Speicherkarte von dem Hostsystem, das die Stromversorgung bereitstellt,
absteckt.
-
Die
vorliegende Erfindung funktioniert bei vielen unterschiedlichen
Arten von nichtflüchtigen Speichern,
darunter Flash-EEPROM-Systemen, die zuvor im Hintergrund beschrieben
worden sind, und bei anderen. Eine spezielle NOR-Array-Struktur,
bei der Floating-Gate-Ladungsspeicherelemente genutzt werden, ist
in den US-Patentanmeldungen 09/925,102, eingereicht am 08. August
2001 (erteilt als
US 6,762,092 ),
und
09/667,344 , eingereicht
am 22. September 2000 (erteilt als
US
6,512,263 ), beschrieben. Flash-Speicher-Arrays, bei denen
dielektrische Ladungsspeicherelemente genutzt werden, sind in der
US-Patentanmeldung 10/280,352, eingereicht am 25. Oktober 2002 (erteilt
als
US 6,925,007 ), beschrieben.
Die Verwaltung großer
Speicherzellen-Löschblöcke ist
in den US-Patentanmeldungen 09/718,802, eingereicht am 22. November
2000 (erteilt als
US 6,684,289 )
und
09/766,436 , eingereicht am
19. Januar 2001 (erteilt als
US
6,763,424 ) beschrieben. Die Programmierung von NAND-Arrays ist
in den Anmeldungen 09/893,277, eingereicht am 27. Juni 2001 (erteilt
als
US 6,522,580 ), und
in Patent Nr.
6,456,528 beschrieben.
-
Weitere
Zielstellungen, Merkmale und Vorteile der verschiedenen Aspekte
der vorliegenden Erfindung sind in der folgenden Beschreibung repräsentativer
Ausführungsformen
enthalten, wobei die Beschreibung im Zusammenhang mit den beigefügten Zeichnungen
gelesen werden sollte.
-
1 stellt
ein Blockdiagramm eines ersten nichtflüchtigen Speichersystems dar,
in welchem die vorliegende Erfindung implementiert werden kann;
-
2 stellt
ein Blockdiagramm eines zweiten nichtflüchtigen Speichersystems dar,
in welchem die vorliegende Erfindung implementiert werden kann;
-
3 stellt
eine Spannungswellenform dar, die genutzt werden kann, um Daten
in eines der Speichersysteme aus 1 oder 2 zu
programmieren;
-
4 stellt
eine Verteilung von Spannungsschwellwerten einer Gruppe nichtflüchtiger
Speicherzellen dar, die einzeln auf einen von vier Zuständen programmiert
worden sind;
-
5 stellt
eine Verteilung von Spannungsschwellwerten einer Gruppe nichtflüchtiger
Speicherzellen dar, die einzeln auf einen von zwei Zuständen programmiert
worden sind;
-
6 zeigt
eine erste beispielhafte Organisation eines Blocks von Speicherzellen
in solcher Art, dass dieser mehrere Speicherseiten umfasst;
-
7 stellt
Block-Overhead-Daten dar, die in Blöcken des in 6 dargestellten
Typs gespeichert werden können;
-
8 zeigt
eine zweite beispielhafte Organisation eines Blocks von Speicherzellen
in solcher Art, dass dieser mehrere Speicherseiten umfasst; und
-
9 stellt
ein Ablaufdiagramm dar, das eine exemplarische Löschoperation in einem der Speichersysteme
aus den 1 oder 2 zeigt, wenn
Block-Overhead-Daten
gespeichert werden.
-
Ein
beispielhaftes Speichersystem, in welchem die verschiedenen Aspekte
der vorliegenden Erfindung implementiert werden können, wird
durch das Blockdiagramm aus 1 veranschaulicht.
Eine große
Anzahl von einzeln adressierbaren Speicherzellen 11 ist
in einer regelmäßigen Matrix
aus Zeilen und Spalten angeordnet, wenngleich sicherlich auch andere
physikalische Anordnungen der Zellen möglich sind. Dieses System ist
insbesondere dafür
ausgelegt, dass das Array 11 ein NOR-Array ist, wie es zuvor
im Hintergrund beschrieben worden ist und in den zuvor erwähnten Dokumenten
beschrieben ist. Bitleitungen, für
die hier gezeigt ist, dass sie sich entlang von Spalten des Zellenarrays 11 erstrecken, sind über Leitungen 15 elektrisch
mit einer Bitleitungs-Decoder- und Treiberschaltung 13 verbunden. Wortleitungen,
für die
in dieser Beschreibung spezifiziert worden ist, dass sie sich entlang
von Zeilen des Zellenarrays 11 erstrecken, sind über Leitungen 17 elektrisch
mit einer Wortleitungs-Decoder- und Treiberschaltung 19 verbunden.
Die Steuergates, welche sich entlang von Spalten aus Speicherzellen
in dem Array 11 erstrecken, sind über Leitungen 23 elektrisch
mit einer Steuergate-Decoder- und Treiberschaltung 21 verbunden.
Jeder der Decoder 13, 19 und 21 empfängt Speicherzellenadressen über einen Bus 25 von
einem Speicher-Controller 27. Die Decoder- und Treiberschaltungen
sind außerdem
mit dem Controller 27 über
jeweilige Steuer- und Status-Signalleitungen 29, 31 und 33 verbunden.
Spannungen, die an die Steuergates und an die Bitleitungen angelegt
werden, werden über
einen Bus 22 koordiniert, welcher die Decoder- und Treiberschaltungen 13 und 21 verbindet.
Der Controller enthält
verschiedene Arten von Registern und weiteren Speichern, darunter einen
flüchtigen
Direktzugriffsspeicher (RAM) 28.
-
Der
Controller 27 kann über
Leitungen 35 mit einem (nicht gezeigten) Host-Gerät verbunden
werden. Der Host kann ein Personalcomputer sein, ein Notebookcomputer,
eine digitale Kamera, ein Audioabspielgerät, verschiedene andere tragbare
elektronische Geräte
und dergleichen. Das Speichersystem aus 1 wird üblicherweise
als Karte entsprechend einer von mehreren bestehenden physikalischen
und elektrischen Normen implementiert, beispielsweise dem Standard
PCMCIA, der CompactFlashTM Association,
der MMCTM Association und anderen. Wenn ein
Kartenformat vorliegt, enden die Leitungen 35 in einem
Steckverbinder an der Karte, der mit einem komplementären Steckverbinder
des Host-Geräts gekoppelt
werden kann. Die elektrische Schnittstelle vieler Karten folgt dem
ATA-Standard, wobei das Speichersystem für den Host erscheint, als ob
es ein Magnetplattenlaufwerk wäre.
Es gibt auch andere Schnittstellenstandards für Speicherkarten. Als Alternative
zum Kartenformat kann ein Speichersystem der in 1 gezeigten
Art dauerhaft in dem Host-Gerät
eingebettet sein.
-
Die
Decoder- und Treiberschaltungen 13, 19 und 21 erzeugen
geeignete Spannungen in ihren jeweiligen Leitungen des Arrays 11,
so wie sie über
den Bus 25 adressiert werden, und zwar gemäß Steuersignalen
in jeweiligen Steuer- und Statusleitungen 29, 31 und 33,
um Programmier-, Lese- und Löschfunktionen
auszuführen.
Etwaige Statussignale, darunter Spannungspegel und andere Array-Parameter, werden über dieselben
Steuer- und Statusleitungen 29, 31 und 33 von
dem Array 11 an den Controller 27 geliefert. Eine
Mehrzahl von Leseverstärkern
in der Schaltung 13 empfängt Stromstärke- oder Spannungswerte, welche
für die
Zustände
der adressierten Speicherzellen in dem Array 11 kennzeichnend sind,
und stellt dem Controller 27 während eines Lesevorgangs Informationen
bezüglicher
dieser Zustände über Leitungen 41 zur
Verfügung. Üblicherweise
wird eine große
Anzahl von Leseverstärkern genutzt,
um die Zustände
einer großen
Anzahl von Speicherzellen parallel lesen zu können. Während der Lese- und Program mieroperationen
wird typischerweise gleichzeitig eine Zeile von Zellen adressiert,
und zwar über
die Schaltungen 19, um auf eine Reihe von Zellen in der
adressierten Zeile zuzugreifen, die durch die Schaltungen 13 und 21 ausgewählt werden.
Während
einer Löschoperation
werden typischerweise sämtliche
Zellen in jeder von vielen Zeilen gemeinsam als Block adressiert,
zum gleichzeitigen Löschen.
-
Die
Funktionsweise eines Speichersystems wie dem in
1 dargestellten
ist eingehender in Patenten und Artikeln beschrieben, die bereits
im Absatz 'NOR-Array' des Hintergrunds
angegeben worden sind, sowie in weiteren Patenten, die der SanDisk
Corp. erteilt wurden, dem Abtretungsempfänger der vorliegenden Anmeldung.
Außerdem
beschreibt die US-Patentanmeldung 09/793,370, eingereicht am 26.
Februar 2001 (erteilt als
US
6,738,289 ), ein Datenprogrammierverfahren.
-
Ein
weiteres Beispiel für
ein Speichersystem, in welchem die verschiedenen Aspekte der vorliegenden
Erfindung implementiert werden können, wird
durch das Blockdiagramm aus 2 veranschaulicht.
Das Speicherzellenarray 1, das eine Mehrzahl von Speicherzellen
M umfasst, die in einer Matrix angeordnet sind, wird durch eine
Spalten-Steuerschaltung 2, eine Zeilen-Steuerschaltung 3,
eine gemeinsame ("c" für engl.:
common) Source-Steuerschaltung 4 und eine gemeinsame (c-)p-Wannen-Steuerschaltung 5 gesteuert.
Das Speicherzellenarray 1 kann ein NAND-Array sein, wie
es vorstehend im Hintergrund wie auch in Dokumenten, die hier durch
Bezugnahme einbezogen worden sind, beschrieben ist. Eine Steuerschaltung 2 ist
mit Bitleitungen (BL) des Speicherzellenarrays 1 verbunden,
um Daten zu lesen, die in den Speicherzellen (M) gespeichert sind,
um einen Zustand der Speicherzellen (M) während eines Programmiervorgangs
zu bestimmen und um die Potentialpegel der Bitleitungen (BL) zu
kontrollieren, um die Programmierung zu unterstützen oder die Programmierung zu
sperren. Die Zeilen-Steuerschaltung 3 ist
mit Wortleitungen (WL) verbunden, um eine der Wortleitungen (WL)
auszuwählen,
um Lesespannungen anzulegen, um Programmierspannungen anzulegen,
in Kombination mit den Bitleitungs-Potentialpegeln, die durch die
Spalten-Steuerschaltung 2 gesteuert werden, und um eine
Löschspannung
anzulegen, gekoppelt mit einer Spannung eines p-Gebiets, auf welchem
die Speicherzellen (M) ausgebildet sind. Die c-Source-Steuerschaltung 4 steuert
eine gemeinsame Source-Leitung (in 2 als "c-Source" bezeichnet), die
mit den Speicherzellen (M) verbunden sind. Die c-p-Wannen-Steuerschaltung 5 steuert
die gemeinsame Spannung der p-Wannen.
-
Die
Daten, die in den Speicherzellen (M) gespeichert sind, werden durch
die Spalten-Steuerschaltung 2 ausgelesen
und werden über
eine E/A-Leitung und einen Daten-Eingabe/Ausgabepuffer 6 an
externe E/A-Leitungen ausgegeben. Programmierdaten, die in den Speicherzellen
gespeichert werden sollen, werden über die externen E/A-Leitungen
in den Daten-Eingabe/Ausgabepuffer 6 eingegeben und werden
an die Spalten-Steuerschaltung 2 übermittelt.
Die externen E/A-Leitungen sind mit einem Controller 43 verbunden.
Der Controller 43 umfasst verschiedene Typen von Registern und
anderen Speichern, typischerweise flüchtige Direktzugriffsspeicher
(RAMs).
-
Befehlsdaten
zum Steuern des Flash-Speicherbauelements werden in Befehlsschaltungen 7 eingegeben,
die mit externen Steuerleitungen verbunden sind, welche mit dem
Controller 43 verbunden sind. Die Befehlsdaten informieren
den Flash-Speicher darüber,
welche Operation gefordert wird. Der eingegebene Befehl wird an
eine Zustandsmaschine 8 übermittelt, welche die Spalten-Steuerschaltung 2,
die Zeilen-Steuerschaltung 3,
die c-Source-Steuerschaltung 4, die c-p-Wannen-Steuerschaltung 5 und
den Daten-Eingabe/Ausgabepuffer 6 steuert. Die Zustandsmaschine 8 kann
Statusdaten des Flash-Speichers wie beispielsweise READY/BUSY oder
PASS/FAIL ausgeben. Die Zustandsmaschine 8 enthält ebenfalls
eine Reihe von Registern und andere flüchtige Direktzugriffsspeicher 45.
-
Der
Controller 43 wird mit einem Host-System wie beispielsweise
einem Personalcomputer, einer Digitalkamera oder einem PDA (persönlichen
digitalen Assistenten) verbunden oder kann mit einem solchen verbunden
werden. Es ist der Host, der Befehle auslöst, wie beispielsweise Daten
in das Speicherarray 1 zu speichern oder aus diesem zu
lesen, und der diese Daten bereitstellt bzw. empfängt. Der Controller
wandelt solche Befehle in Befehlssignale um, die von den Befehlsschaltungen 7 interpretiert und
ausgeführt
werden können.
Der Controller enthält
außerdem
typischerweise einen Pufferspeicher für die Benutzerdaten, die in
das Speicherarray geschrieben werden oder aus diesem gelesen werden. Ein
typisches Speichersystem umfasst einen integrierten Schaltungschip 47,
der den Controller 43 umfasst, sowie einen oder mehrere
integrierte Schaltungschips 49, die jeweils ein Speicherarray
und zugehörige
Steuer-, Eingabe/Ausgabe- und Zustandsmaschinen-Schaltungen umfassen.
Der Trend geht natürlich
dahin, das Speicherarray und die Steuerschaltungen eines Systems
zusammen auf einem oder mehreren integrierten Schaltungschips zu
integrieren.
-
Jedes
der Speichersysteme aus den
1 und
2 kann
als Teil des Host-Systems eingebettet werden oder kann in eine Speicherkarte
integriert werden, die entfernbar in einen Paarungssteckplatz eines
Host-Systems eingefügt
werden kann. Eine solche Karte kann das gesamte Speichersystem umfassen,
oder der Controller und das Speicherarray mit zugehörigen Peripherieschaltungen
können
auf separaten Karten bereitgestellt werden. Verschiedene Kartenimplementierungen
sind zum Beispiel in
US-Patent
Nr. 5,887,145 beschrieben.
-
3 stellt
ein Impulsverfahren zum inkrementellen Programmieren von Speicherelementen eines
der Speicherzellenarrays 1 oder 11 dar. Es ist die
Wellenform für
eine Programmierspannung Vpgm dargestellt. Die Programmierspannung
Vpgm ist in viele Impulse unterteilt und erhöht sich von Impuls zu Impuls
um ΔVpgm.
In den Zeitspannen zwischen den Impulsen werden die Verifizierungs-(Lese-)Operationen
ausgeführt.
Das bedeutet, der programmierte Pegel jeder parallel programmierten
Zelle wird zwischen den jeweiligen Programmierimpulsen gelesen, um
festzustellen, ob er gleich dem oder größer als der Verifizierungspegel
ist, auf welchen programmiert wird. Wenn festgestellt wird, dass
die Schwellspannung einer gegebenen Speicherzelle den Verifizierungspegel überschritten
hat, wird Vpgm weggenommen, indem die Spannung auf einer Bit- oder
Steuerleitung, mit welcher die Zellenreiheneinheit der gegebenen
Zelle verbunden ist, von 0 V auf Vdd angehoben wird. Das Programmieren
der anderen parallel programmierten Zellen wird fortgesetzt, bis
diese ihrerseits ihre Verifizierungspegel erreichen. Die Schwellspannung
verschiebt sich während
des letzten Programmierimpulses für die Zelle von unterhalb des
Verifizierungspegels über
diesen hinaus.
-
4 stellt
ein Verfahren zur Programmierung eines Speicherzellenarrays mit
vier Zuständen pro
Speicherelement dar. Zwei Bits Daten werden somit in jedem Speicherelement
gespeichert. Die programmierten Speicherelemente bilden Speicherzellentransistoren
mit Schwellspannungspegeln (VT), die in
eine der Schwellspannungsverteilungen 61, 63, 65 oder 67 fallen.
Die Verteilung 61 stellt den gelöschten Zustand dar, und stellt
außerdem
einen der programmierten Zustände
dar, bei diesem Beispiel "11". Die Verteilung 61 umfasst
Zellen, die eine negative Schwellspannung VT aufweisen.
Die Verteilung 63 umfasst positive Schwellspannungen und
stellt Datenbits "10" dar. Analog repräsentiert
die Verteilung 65 "00", und die Verteilung 67 repräsentiert "01". In jedes Speicherelement
kann eine weitere Anzahl von Zuständen und somit mehr Bits programmiert werden,
zur Veranschaulichung wurde jedoch ein System mit vier Zuständen ausgewählt.
-
Die
einzelnen Zellen werden durch eine Reihe von Impulsen wie den in 3 dargestellten
programmiert. Nachdem ein Block gelöscht worden ist, weisen sämtliche
Speichertransistoren von dessen Speicherzellen Schwellspannungen
innerhalb der Verteilung 61 auf. Beim Programmieren von
entweder Benutzerdaten oder Block-Overhead-Daten in eine Reihe von Speicherzellen,
die einen gesamten Block oder einen Teil eines Blocks bilden, werden
an diejenigen Zellen, deren Zustand von "11" auf
einen anderen geändert
werden soll, Programmierspannungsimpulse angelegt. Für diejenigen
Transistoren, die aus dem gelöschten
in den ersten Zustand "10" programmiert werden
sollen, wird die Impulsgebung beendet, wenn deren VT gleich
oder größer dem
Verifizierungspegel VV10 in der Verteilung 63 wird.
Die Zustände
der Zellen werden zwischen den Programmierimpulsen verifiziert.
Analog wird die Impulsgebung für
diejenigen Speichertransistoren, die in den Zustand "00" programmiert werden
sollen, beendet, wenn deren VT gleich oder
größer dem
Verifizierungspegel VV00 in der Verteilung 65 wird.
Schließlich werden
für diejenigen
Speicherelementtransistoren, die in den Zustand "01" programmiert
werden, die Programmierimpulse beendet, wenn deren VT den Verifizierungspegel
VV01 in der Verteilung 67 erreicht. Zu
diesem Zeitpunkt ist die parallele Programmierung der Gruppe von
Speicherzellen beendet.
-
Die
einzelnen Programmierverifizierungspegel VV10,
VV00 und VV01 fallen
mit den unteren Grenzen der jeweiligen Verteilungen 63, 65 und 67 zusammen.
Die Anfangsspannung der Programmierimpulse aus 3 kann
für eine
typische Programmierung zum Beispiel bei ungefähr 12 Volt liegen, und die Schrittweite
zwischen den Impulsen ΔVpgm
bei ungefähr
0,2 Volt. Die Spreizung der einzelnen Verteilungen 61, 63, 65 und 67 ist
ungefähr
gleich ΔVpgm.
-
4 stellt
außerdem
die Spannungen dar, die zum Lesen von Daten aus einzelnen Zellen
genutzt werden, indem festgestellt wird, auf welchen der vier Schwellspannungszustände die
Zelle programmiert worden ist. Die Spannungen VR10,
VR00 und VR01 sind
Referenzspannungen, die zum Lesen der Speicherzustände "10", "00" bzw. "01" genutzt werden.
Diese Spannungen liegen ungefähr
in der Mitte zwischen benachbarten Verteilungen der Verteilungen 61, 63, 65 und 67.
Sie stellen die Schwellspannungen dar, mit welchen der Schwellspannungszustand
jedes gelesenen Speicherzellentransistors verglichen wird. Dies
wird erreicht, indem eine an der Zelle gemessene Stromstärke oder
Spannung mit einer Referenzstromstärke bzw. -spannung verglichen wird.
-
In
einem System mit vier oder mehr Speicherzuständen ist es oft wünschenswert,
einige Zellen in einen von zwei Zuständen (binär) programmieren zu können. Die
Nutzung sowohl einer Mehrzustands- als auch einer binären Programmierung
in einem einzelnen Array ist in
US-Patent
5,930,167 und in der bereits erwähnten US-Anmeldung 09/956,340 (erteilt
als
US 6,456,528 ) beschrieben.
Eine weitere Form einer solchen dualen Programmierung, bei der Programmierspannungen
minimiert werden und somit Störungen
der programmierten oder gelöschten Zustände anderer
Speicherzellen minimiert werden, ist in
5 dargestellt.
Ein gelöschter
Zustand "0" stellt auch einen
der beiden programmierten Zustände
dar, der durch eine programmierte Verteilung
71 veranschaulicht
wird. Der zweite programmierte Zustand "1" wird
durch eine Verteilung
73 repräsentiert. Die Programmierung
in den Zustand "1" wird unter Nutzung
des Verifizierungspegels V
V1 erreicht. Die Daten
werden unter Verwendung eines Referenzpegels V
R1 bei
einer V
T von Null Volt aus den Zweizustands-Speicherzellen
aus
5 gelesen. Die Verteilungen
71 und
73 aus
5 entsprechen
den Verteilungen
61 bzw.
63 aus
4.
Durch Vermeiden der Verteilungen
65 und
67 mit
höherem
Schwellpegel im binären
Fall werden Störungen
an den gelöschten
oder programmierten Zuständen
von anderen Zellen infolge der binären Programmierung von Zellen
minimiert.
-
6 zeigt
die Organisation eines ersten Beispiels für eine große Anzahl von einzeln adressierbaren
Blöcken
von Speicherzellen in einem typischen System. Der Block aus Speicherzellen,
die Löscheinheit,
ist in eine Anzahl von Speicherseiten P0 bis PN unterteilt. Die
Anzahl N der Speicherseiten in einem Block kann beispielsweise 8,
16 oder 32 betragen. Jede einzelne Speicherseite stellt die Einheit zum
Programmieren und Lesen dar. In jeder Speicherseite werden ein oder
mehr Host-Sektoren Daten als Benutzerdaten gespeichert. Physikalisch kann
eine Speicherseite aus einer einzelnen Zeile von Speicherzellen
in einem der Arrays 1 oder 11 der Systeme aus
den 1 und 2 gebildet werden. Eine Speicherseite
P3 aus 6 umfasst zum Beispiel einen Raum 81 für die Benutzerdaten
sowie einen Raum 83 für
einen Header mit Overhead-Daten, die
sich auf die Benutzerdaten beziehen. Ein ECC, der anhand der in
dem Speicherraum 81 gespeicherten Benutzerdaten berechnet
wird, wird beispielsweise in dem Raum 83 gespeichert. Einige
Speicherarrays enthalten außerdem
einige wenige Reservebytes an Speicherkapazität in einem Raum 85,
um etwaige schlechte Bytes in dem Benutzerraum 81 zu ersetzen.
-
Diese
Reservebytes einer Speicherseite des Blocks sind es, die genutzt
werden, um Overhead-Informationsdaten für den gesamten Block zu speichern.
Block-Overhead- Daten 87 sind
zum Beispiel als Teil der Speicherseite P1 gezeigt. Ein wichtiger Bestandteil
der Informationen, die als Teil der Daten 87 gespeichert
werden, ist oft ein Zählwert
für die
Anzahl, wie oft der Block, in welchem die Daten 87 gespeichert
sind, gelöscht
worden ist. Alternativ kann eine andere Angabe für die Anzahl der Löschzyklen, die
der Block erfahren hat, gespeichert werden. Diese Daten sind zum
Organisieren des Betriebs des Arrays sinnvoll. Andere Block-Overhead-Daten 87,
die sinnvoll sein können,
sind optimale Lösch-,
Programmier- und/oder Lesespannungen für die Speicherzellen des Blocks,
Merker (Flags), um den Status des Blocks anzugeben, logische und/oder
physikalische Adressen des Blocks sowie eines etwaigen Ersatzblocks
und dergleichen. Die Block-Overhead-Daten 87 liefern
Informationen zu dem physikalischen Block selbst, während die
Speicherseiten-Overhead-Daten 83 Informationen zu den in
derselben Speicherseite gespeicherten Benutzerdaten bereitstellen.
Wenngleich eine oder beide Arten dieser Overhead-Daten in einem
oder mehreren anderen Blöcken
als dem Block, auf welchen sie sich beziehen, gespeichert werden
können,
werden für
die meisten Anwendungen die in 6 gezeigten
Speicherstellen bevorzugt.
-
Die
Benutzerdaten werden in den Speicherzellen jeder Speicherseite in
mehreren Zuständen gespeichert;
das bedeutet, jedes Floating Gate oder andere Speicherelement der
Speicherzellen wird auf einen von mehr als zwei Zuständen programmiert, um
mehr als ein Bit Daten in jedem Speicherelement zu speichern. Zweckmäßigerweise
wird das in 4 gezeigte Beispiel implementiert,
bei welchem die einzelnen Speicherelemente in einen von vier Zuständen programmiert
werden. Damit wird die Anzahl der Speicherzellen reduziert, die
erforderlich ist, um eine gegebene Datenmenge zu speichern. Die Block-Overhead-Daten in
der Gruppe von Zellen 87 werden binär programmiert; das bedeutet,
jedes Floating Gate oder andere Speicherelement der Speicherzellen
wird auf einen von exakt zwei Zuständen programmiert. Das in 5 gezeigte
Beispiel kann genutzt werden. Wenngleich dafür mehr Speicherzellen erforderlich
sind, um den Block-Overhead zu speichern, als wenn dies mit mehreren
Zuständen erfolgen
würde,
ist der Nachteil gering, weil die Datenmenge klein ist. Der Vorteil
besteht in der Möglichkeit,
die Block-Overhead-Daten
in kürzerer
Zeit zu programmieren, mit einer verringerten Empfindlichkeit für Störungen und
Feldkopplungseffekte und mit einer weniger störenden Auswirkung auf den gelöschten oder
programmierten Zustand anderer Speicherzellen in demselben oder
in benachbarten Blöcken.
-
Wenngleich
die binäre
Programmierung der Block-Overhead-Daten vorzugsweise unter Nutzung aufeinanderfolgender
Programmierimpulse und dazwischen erfolgender Verifikationen des
Zustands ausgeführt
wird, wie vorstehend mit Bezug auf 3 diskutiert
worden ist, kann die Zeit, die zum Ausführen eines Programmierprozesses
erforderlich ist, deutlich reduziert werden, indem der Betrag des
Anfangsimpulses erhöht
und/oder die Größe der Schritte ΔVpgm erhöht wird.
Wenn ΔVpgm
zum Programmieren von Benutzerdaten in mehrere Zustände bei einem
Wert von 0,2 Volt liegt, kann für
die binäre
Programmierung der Block-Overhead-Daten ein höherer Wert, beispielsweise
0,4 Volt, genutzt werden. Die größere ΔVpgm führt dazu,
dass sich die Verteilung 73 für die programmierten Zellen
aus 5 verbreitert, wie bei 75 angegeben.
Da es aber keine weiteren höher
programmierten Zustände
als den Zustand 73 gibt, stellt diese größere Breite
der Verteilung kein Problem dar.
-
Allgemein
können
die Block-Overhead-Daten in den Reservezellen irgendeiner der Speicherseiten
in dem exemplarischen Block aus 6 gespeichert
werden. Die Speicherseite in jedem Block, in welchem die Block-Overhead-Daten
gespeichert werden, kann entweder festgelegt sein oder kann von Block
zu Block und im Zeitverlauf variabel sein. Wenn zum Beispiel bei
der Speicherseite P1 die Nutzung einiger ihrer Reservezellen zum
Ersetzen defekter Zellen erforderlich ist und wenn dann nicht genügend Reservezellen
verbleiben, um die Block-Overhead-Daten zu speichern, können die
Overhead-Daten für diesen
Block in einer anderen Speicherseite gespeichert werden. Ferner
braucht der Raum für
die Block-Overhead-Daten nicht notwendigerweise am Ende einer Speicherseite
oder am Ende der Speicherzellenzeile dieser zu liegen, wie in 6 dargestellt
ist, sondern kann vielmehr an irgendeiner anderen Stelle liegen,
an der ungenutzte Speicherzellen vorhanden sind. Außerdem brauchen
die Block-Overhead-Daten
nicht notwendigerweise in nebeneinander liegenden Speicherzellen
gespeichert zu werden, wenngleich es wahrscheinlich für den Speicher-Controller
einfacher ist, wenn die Daten an Speicherstellen mit aufeinanderfolgenden
Zellenadressen gespeichert werden.
-
Wenn
das Speicher-Array ein NAND-Array ist, können einige Speicherseiten
vorhanden sein, die zum Speichern der Block-Overhead-Daten gegenüber anderen
bevorzugt werden. Bei einem Typ eines NAND-Flash-Speichers, der
in den bereits im Hintergrund angegebenen Patenten diskutiert wird, besteht
die Einschränkung,
dass die Speicherseiten in einer bestimmten Reihenfolge programmiert
werden, beispielsweise P0 bis PN, um störende Effekte der Programmierung
einer Speicherseite auf die programmierten Zustände der Zellen anderer Speicherseiten
zu reduzieren. Ferner sind die letzten Speicherseiten PN und P(N-1)
tendenziell empfindlicher für
störende
Einflüsse
als andere Speicherseiten. Daher ist es vorzuziehen, die Block-Overhead-Daten in
irgendeiner anderen Seite, die dem Beginn des Blocks näher liegt,
zu speichern, beispielsweise in der P4 oder P5 von Blöcken, die
insgesamt 16 Speicherseiten aufweisen.
-
Da
die Block-Overhead-Daten für
den Betrieb des Speichers wichtig sein können, kann aus den Block-Overhead-Daten
ein Redundanzcode, beispielsweise ein ECC, berechnet werden und
zusammen mit diesen Daten in demselben Block gespeichert werden.
Der ECC wird danach genutzt, um die Daten zu verifizieren, wenn
diese gelesen werden, und um eine Möglichkeit zu bieten, einige
wenige ungültige
Bits zu korrigieren. Die Organisation der Block-Overhead-Daten 87 aus 6 beim
Integrieren eines ECC ist in 7 gezeigt.
Wenn die Anzahl der ungültigen
Bits der gespeicherten Block-Overhead-Daten größer ist als sie der ECC korrigieren kann,
ist diese Information nützlich
für den
Controller. Wenn die Art der gespeicherten Overhead-Daten für die Funktionsweise
des Speichersystems wichtig ist, wird die Unmöglichkeit des Lesens dieser
Daten aus einem Block von dem Controller genutzt, um diesen Block
für die
Speicherabbildung auszuschließen,
sodass er nicht mehr genutzt wird. In dem Block kann ein Merker
gesetzt werden, um anzuzeigen, dass er nicht genutzt werden soll,
oder der Controller kann in unabhängiger Weise eine Liste ungültiger Blöcke unterhalten.
-
Eine
andere Speicherzellenblockanordnung als in 6 ist in 8 gezeigt,
um eine weitere Implementierung bereitzustellen. In diesem Fall
sind nicht in jeder Speicherseite Reservezellen enthalten. Die Block-Overhead-Daten
müssen
daher irgendwo anders in dem Block gespeichert werden. Bei dem in 8 gezeigten
Beispiel werden diese Daten in Reservebytes in den Headern der Speicherseite
des Blocks verteilt, wie etwa an den Speicherstellen 91, 93 und 95 in
den Headern dreier unterschiedlicher Seiten. Damit ist es dann erforderlich,
dass alle drei Speicherseiten gelesen werden, bevor die Block-Overhead-Daten erhalten
werden können,
im Gegensatz zu dem Beispiel aus 6, bei dem
nur eine Speicherseite eines Blocks gelesen zu werden braucht.
-
Mit
Bezugnahme auf 9 wird eine exemplarische Löschoperation
erklärt,
bei der die zuvor beschriebenen Block-Overhead-Daten genutzt werden.
In einem ersten Schritt 101 wird ein Befehl von dem Controller
(27 in 1 oder 43 in 2)
ausgegeben, um gleichzeitig einen oder eine Anzahl mehrerer Blöcke zu löschen, der/die
durch Adressen spezifiziert werden, welche in einem Schritt 103 ausgegeben
werden. In einem nächsten
Schritt 105 liest der Controller die Block-Overhead-Daten
aus jedem der adressierten Blöcke.
Bei einem üblichen
System beinhaltet dies das Lesen der gesamten Speicherseite(n) jedes
adressierten Blocks, in welcher/n dessen Block-Overhead-Daten ge speichert
sind, da die Speicherseite die Programmier- und Löscheinheit darstellt.
Die Overhead-Daten können
zum Beispiel die Daten 87 aus 6 oder die
Daten 91, 93, 95 aus 8 sein.
Wenn die Block-Overhead-Daten in einer anderen Anzahl von Zuständen gespeichert
sind als die Benutzerdaten und deren Header, liest der Controller
die Overhead-Daten mit einem anderen Satz von Referenzpegeln als
sie genutzt werden, wenn die Benutzerdaten und Header gelesen werden.
Diese gelesenen Daten werden dann von dem Controller vorübergehend
in dem System gespeichert, am praktischsten in einem Direktzugriffsspeicher
(RAM), 28 oder 45, der als Teil des Controllers 27 bzw.
der Zustandsmaschine 8 integriert ist. Die Speicherzellen
in jedem der adressierten Blöcke
werden dann in dem Schritt 109 zusammen gelöscht.
-
Wenn
die Block-Overhead-Daten zusammen mit einem ECC oder einem anderen
anhand der Daten berechneten Redundanzcode gespeichert sind, wird
danach die Gültigkeit
der Daten überprüft, bevor diese
in den RAM geschrieben werden. Wenn festgestellt wird, dass sie
gültig
sind, oder wenn fehlerhafte Overhead-Daten korrigiert werden können, um
sie gültig
zu machen, erfolgt der Prozess wie beschrieben. Wenn die Block-Overhead-Daten jedoch nicht gültig sind
oder nicht gültig
gemacht werden können, ist
es möglicherweise
erwünscht,
den Block außer Dienst
zu stellen, und zwar wegen der Befürchtung, dass der Block zukünftig nicht
ordnungsgemäß betrieben
werden kann, wenn seine Verlaufshistorie nicht bekannt ist. Der
Löschprozess
kann dann in Bezug auf diesen Block gestoppt werden und dessen Adresse
kann zu einer Liste schlechter Blöcke hinzugefügt werden,
die von dem Controller unterhalten wird. Alternativ kann der Löschprozess
fortgesetzt werden und in den Overhead-Raum des Blocks kann ein
Merker geschrieben werden, um anzuzeigen, dass dieser nicht mehr
genutzt werden soll. Der Controller sucht dann nach solchen Merkern,
wenn er die Blöcke
festlegt, die zukünftigen
Lösch-
und Programmierzyklen unterzogen werden sollen.
-
Außerdem werden,
wenn die Stromversorgung für
das Speichersystem unterbrochen wird, nachdem die adressierten Blöcke gelöscht worden sind,
die Block-Overhead-Daten verloren sein, wenn der RAM, in welchem
die Daten vorübergehend
gespeichert sind, ein flüchtiger
Speicher ist, was üblicherweise
der Fall ist. In dieser Situation hat der Controller, wenn die Stromversorgung
wiederhergestellt ist, keine Block-Overhead-Daten zum Zurückschreiben
in die gelöschten
Blöcke.
Jegliche zukünftigen Versuche,
die Blöcke
zu nutzen, die das Lesen der Block-Overhead-Daten beinhalten, können, wenn diese
Daten nicht existent sind, bewirken, dass der Controller dann die
Blöcke
für die
Speicher abbildung aus dem System ausschließt, indem er deren Adressen
zu der Liste schlechter Blöcke
hinzufügt,
einen Merker in den Blöcken
setzt, oder durch ein anderes Verfahren.
-
Wie
bereits diskutiert, kann ein wichtiger Bestandteil der Block-Overhead-Daten
der Zählwert
dafür sein,
wie oft der einzelne Block einen Lösch- und Neuprogrammierzyklus
durchlaufen hat. Diese Zahl oder eine mit dieser Zahl in Zusammenhang
stehende Größe, falls
vorhanden, wird dann als Teil des Löschzyklus aktualisiert. Die
in dem Controller-RAM gespeicherte
Größe wird
aus dem RAM gelesen und wird für
jeden Block, der gelöscht
wird, aktualisiert, um aufzuzeichnen, dass der Block einem weiteren Löschzyklus
ausgesetzt war. Wie durch einen Schritt 111 in 9 angegeben
ist, wird die aktualisierte Zahl zurück in den jeweiligen Block
geschrieben, auf welchen sie sich bezieht. Die einfachste Implementierung
besteht darin, den Löschzyklus-Zählwert,
der aus dem Block gelesen wird, um Eins zu inkrementieren und danach
diesen inkrementierten Zählwert
zurück
in den Block zu schreiben, nachdem dieser gelöscht worden ist. Die Block-Overhead-Daten können auch
andere Informationsdaten enthalten, die nicht jedes Mal aktualisiert
werden, wenn der Block gelöscht
wird, in welchem Fall diese Art von Daten ohne irgendeine Änderung
zurück
in den gelöschten
Block geschrieben wird. Falls ein ECC oder ein anderer Redundanzcode
mit den Block-Overhead-Daten genutzt wird, wird dieser Code aus
den aktualisierten Overhead-Daten berechnet, die zurück in den
Block geschrieben werden sollen, und wird dann zusammen mit den
aktualisierten Overhead-Daten
in den Block programmiert.
-
Ein
letzter Schritt des Löschzyklus
für das
Array und dessen Peripherieschaltungen besteht darin, ein Abschluss-Statussignal
zurück
an den Controller zu senden, wie in Schritt 113 angegeben
ist. Die gelöschten
Blöcke
bleiben gelöscht,
außer
an der/den Speicherstelle(n), an welche die Block-Overhead-Daten
programmiert werden. Danach können Benutzerdaten
in die Speicherseiten des Blocks programmiert werden.
-
Der
Löschzyklus-Zählwert kann
in mehrerlei unterschiedlicher Weise genutzt werden. Da sich bestimmte
Eigenschaften der Speicherzellen ändern, wenn sich die Anzahl
der Lösch/Programmierzyklen für diese
erhöht,
lässt sich
die Funktionsweise des Arrays optimieren, wenn beeinflusste Betriebsparameter
ebenfalls geändert
werden. Beispiele für
solche Betriebsparameter sind Lösch-
und Programmierspannungen sowie die Häufigkeit, mit welcher Benutzerdaten
in den Blöcken
aufgefrischt werden, um die Ladungspegel zurück in ihre optimalen Bereiche
zu bringen. Blöcke
mit niedrigen Zykluszählwerten
können
mit niedrigeren Programmier- und Löschspannungen betrieben werden,
um dadurch deren Nutzungsdauer zu verlängern. Eine Datenauffrischung
kann das Leistungsverhalten beeinträchtigen, wenn sie zu häufig erfolgt,
Blocks mit niedrigen Zykluszählwerten
werden also nicht so häufig
aufgefrischt wie diejenigen mit hohen Zykluszählwerten. Der Zykluszählwert kann
auch genutzt werden, um die Nutzung (den Verschleiß) der einzelnen
Blöcke auszugleichen,
indem eine Tabelle mit Zuordnung logischer zu physikalischen Blockadressen
geändert wird,
wenn die Unterschiede in der Nutzung verschiedener Blöcke bestimmte
festgesetzte Grenzwerte übersteigen.
Außerdem
können,
wenn irgendwelche Blöcke
eine Anzahl von Zyklen erleben, die deren erwartete Nutzungsdauer übersteigt,
diese Blöcke
dauerhaft für
die Speicherabbildung aus dem System ausgeschlossen werden.
-
Wenngleich
die vorliegende Erfindung mit Bezug auf spezielle Ausführungsformen
beschrieben worden ist, wird zu verstehen sein, dass die Erfindung
Schutz mit dem vollständigen
Schutzumfang der anhängenden
Ansprüche
beansprucht.