DE60131549T2 - Komprimiertes ereigniszählverfahren und seine anwendung an einem flash-speichersystem - Google Patents

Komprimiertes ereigniszählverfahren und seine anwendung an einem flash-speichersystem Download PDF

Info

Publication number
DE60131549T2
DE60131549T2 DE60131549T DE60131549T DE60131549T2 DE 60131549 T2 DE60131549 T2 DE 60131549T2 DE 60131549 T DE60131549 T DE 60131549T DE 60131549 T DE60131549 T DE 60131549T DE 60131549 T2 DE60131549 T2 DE 60131549T2
Authority
DE
Germany
Prior art keywords
memory
random number
blocks
counter
generated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60131549T
Other languages
English (en)
Other versions
DE60131549D1 (de
Inventor
Nima Los Gatos MOKHLESI
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Corp
Original Assignee
SanDisk Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SanDisk Corp filed Critical SanDisk Corp
Application granted granted Critical
Publication of DE60131549D1 publication Critical patent/DE60131549D1/de
Publication of DE60131549T2 publication Critical patent/DE60131549T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory

Description

  • Diese Erfindung betrifft im allgemeinen Ereigniszähltechniken und insbesondere die Anwendung derartiger Techniken auf Halbleiterspeichersysteme, im Wesentlichen auf nicht-flüchtige Flash elektrisch löschbare, programmierbare Nur-Lese-Speicher (EEPROMs).
  • Flash EEPROM Systeme werden in einer umfangreichen Vielfalt von Anwendungen verwendet, im Wesentlichen, wenn diese in einer gekapselten Karte verpackt sind, die herausnehmbar mit einem Hostsystem verbunden ist. Derzeitige kommerzielle Speicherkartenformate umfassen die CompactFlash (CF), MultiMediaCard (MMC) und Secure Digital (SD) der Personal Computer Memory Card International Association (PCMCIA). Ein Anbieter dieser Karten ist SanDisk Corporation, Anmelderin dieser Erfindung. Hostsysteme, mit denen derartige Karten verwendet werden, sind Personal Computer, Notebook Computer, tragbare Computergeräte, Kameras, Audioabspielgeräte und Ähnliches. Flash EEPROM Systeme werden auch als in Hostsystemen eingebettete Massenspeicher verwendet.
  • Derartige nicht-flüchtige Speichersysteme enthalten ein Array von Speicherzellen, Peripherieschaltungen zum Betrieb und einen Systemcontroller. Der Controller steuert die Kommunikation mit dem Hostsystem und den Betrieb des Speicherzellenarrays, um Benutzerdaten zu speichern und abzurufen. Die Speicherzellen sind in Zellblöcken gruppiert, wobei ein Zellblock die kleinste Gruppe von Zellen ist, die gleichzeitig löschbar sind. Vor dem Schreiben von Daten in einen oder mehrere Zellblöcke werden diese Zellblöcke gelöscht. Benutzerdaten werden typischerweise zwischen dem Host und Speicherarray in Sektoren transferiert. Ein Sektor Benutzerdaten kann jede geeignete Größe haben, vorzugsweise kleiner oder gleich der Kapazität des Speicherblocks, was oft die Standardlaufwerksektorgröße ist, die 512 Bytes beträgt.
  • In einer kommerziellen Architektur ist die Speichersystemblockgröße bemessen, um einen Sektor Benutzerdaten zuzüglich Overheaddaten zu speichern, wobei die Overheaddaten Informationen enthalten wie etwa einen Fehlerkorrekturcode (ECC) für die im Block gespeicherten Daten, einen Zähler für die Anzahl, wie oft der Block gelöscht und reprogrammiert wurde, Defekte und andere physikalische Informationen des Speicherzellenblocks sowie die auf den Block anzuwendenden Programmier- und/oder Löschspan nungen. Verschiedene Implementierungen dieses nicht-flüchtigen Speichersystemtyps werden in den folgenden US-Patenten und anhängigen Anmeldungen beschrieben. US-Patente 5,172,338 , 5,602,987 , 5,315,541 , 5,200,959 , 5,270,979 , 5,428,621 , 5,663,901 , 5,532,962 , 5,430,859 und 5,712,180 sowie US-Patentanmeldung Nummer 08/910,947, angemeldet am 07.08.1999 und erteilt als US-Patent Nummer 6,222,762 sowie 09/343,328, angemeldet am 30.06.1999 und erteilt als US-Patent Nummer 6,151,248 . In einer weiteren kommerziellen Architektur werden die Overheaddaten für eine große Anzahl von Blöcken, die Benutzerdaten speichern, zusammen in Tabellen in anderen Blöcken gespeichert. Diese Overheaddaten enthalten einen Zähler für die Anzahl, wie oft einzelne Benutzerdatenblöcke gelöscht und re-programmiert worden sind. Ein Beispiel eines derartigen Systems ist in US-Patentanmeldung Nummer 09/505,555, angemeldet am 17.02.2000 und erteilt als US-Patent Nummer 6,426,893 , beschrieben. Noch ein weiterer Typ nicht-flüchtiger Speichersysteme verwendet eine größere Speicherzellenblockgröße, die mehrere Sektoren von Benutzerdaten speichert.
  • Die Anzahl der Lösch/Re-Programmier-Zyklen, die sich in einzelnen Speicherblöcken ereignet haben (deren "Experience Count"), wird oft in einem Flashspeichersystem aus einem oder mehreren Gründen aufbewahrt. Ein Grund dafür ist es zu Ermitteln, wann ein Block das Ende seiner Lebensdauer erreicht hat, um diesen durch einen anderen Block auszutauschen, indem dieser aus dem System gemappt wird, bevor dieser durch übermäßigen Gebrauch ausfällt. Dies ist beispielsweise in US-Patent Nummer 5,043,940 beschrieben. Derzeitige Floating Gate Speicherzellen haben eine Lebensdauer von mehreren Hunderttausend bis zu einer Million Lösch/Re-Programmier-Zyklen, die häufig größer als die Anzahl der Blöcke ist, die in den meisten Anwendungen während der Nutzungsdauer des Speichers Zyklen durchlaufen. Jedoch können andere intensivere reprogrammierende Anwendungen derartige Anzahlen erreichen. Ein weiterer Grund für das Beobachten der Block Experience Counts besteht darin, um in der Lage zu sein, das Mapping von Daten in die verschiedenen Blöcke zu verändern, um deren Ermüdung auszugleichen, bevor diese ihr Lebensdauerende erreichen, als eine Art und Weise um die Lebensdauer des Speichersystems zu verlängern. Beispiele für derartige Wear Leveling Techniken werden in US-Patent Nummer 6,081,447 aufgeführt. Ein noch weiterer Grund für ein Bewahren der Block Experience Counts besteht darin, um in der Lage zu sein, Programmier- und andere Betriebsspannungen anzupassen, um die auftreten Veränderungen der Charakteristika der Speicherzellen zu berücksichtigen, wenn die Anzahl der Lösch/Re-Programmier-Zyklen ansteigt.
  • Gemäß der vorliegenden Erfindung wird ein Verfahren zum Betrieb eines komprimierten Zählers eines auftretenden Ereignisses zur Verfügung gestellt, das sich während eines Betriebes eines elektronischen Systems wiederholt, umfassend generieren einer Zufallszahl beim einzelnen Auftreten des Ereignisses, ermitteln, wann eine generierte Zufallszahl mit zumindest einem vorgegebenen Wert übereinstimmt, und als Antwort darauf, dass die generierte Zufallszahl mit zumindest einem vorgegebenen Wert übereinstimmt, aktualisieren eines komprimierten Zählers des Ereignisses im elektronischen System.
  • Gemäß der vorliegenden Erfindung wird ferner ein Flash EEPROM System zur Verfügung gestellt, das eine Vielzahl von Blöcken von nicht-flüchtigen Speicherzellen enthält, wobei die Zellen in einzelnen Blöcken gleichzeitig löschbar sind, und ein einen Mikroprozessor enthaltenden Controller, der Programmieren von Daten in adressierte Blöcke von Speicherzellen steuert, Lesen von Daten aus adressierten Blöcken von Speicherzellen steuert und Löschen von Daten von einem oder mehreren jeweils adressierten Blöcken von Speicherzellen steuert. Speicherung wird in der Vielzahl von Speicherzellblöcken zur Verfügung gestellt, die Zähler bewahren, die mit den einzelnen Speicherzellenblöcken in Zusammenhang stehen. Das System umfasst auch einen ein Zahlengenerator, der als Antwort auf einen oder mehrere der adressierten Blöcke, die gelöscht werden, zufällig eine Zahl generiert, und einen ein Komparator, der zumindest einen der Zähler hervorruft, der mit einem oder mehreren adressierten Blöcken in Zusammenhang steht, die gelöscht oder aktualisiert werden, wenn die generierte Zufallszahl mit einem vorgegebenen Wert zumindest mit einer von möglichen vom Zufallsgenerator generierten Zahlen übereinstimmt.
  • Anstatt jedes Auftreten eines Ereignisses zu beobachten, wird nur jedes Mal vermerkt, wenn eine große Anzahl von Ereignissen aufgetreten ist. Ein Vorteil besteht darin, dass ein komprimierter Zähler R, der die Anzahl von aufgetretenen Ereignissen A repräsentiert, weniger häufig aktualisiert werden muss, als wenn jedes der Ereignisse gezählt wird.
  • Ein weiterer Vorteil besteht darin, dass bei einem binären Zählsystem eine geringere Anzahl von Bits erforderlich sind, um einen Zähler R beizubehalten, der für eine größe re Anzahl von Ereignissen A repräsentativ ist. Eine bevorzugte Technik zum Beibehalten des komprimierten Zählers R beinhaltet ein Einführen einer Wahrscheinlichkeit P, dass der komprimierte Zähler R jedes Mal aktualisiert wird, wenn das zu überwachende Ereignis auftritt. Dies läuft auf ein Aktualisieren des komprimierten Zählers R im Durchschnitt einmal für jede 1/P-te Anzahl von aktuellen Ereignissen hinaus. Diese Wahrscheinlichkeit wird vorzugsweise so gewählt, um zweckmäßig unabhängig vom Betrieb eines Systems zu sein, in dem die Ereignisse auftreten, so dass der Einfluss des Systembetriebes auf die Aktualisierungsfrequenz des komprimierten Zählers R minimiert wird. In den hier beschriebenen spezifischen Beispielen wird diese Technik zum Überwachen der Anzahl eines sich wiederholenden Ereignisses verwendet, das als Teil eines Betriebes eines elektronischen Systems auftritt. Bevorzugt wird ein Zufallszahlengenerator verwendet, um zu Ermitteln, wann der komprimierte Zähler R der Anzahl der Ereignisse aktualisiert wird, wobei in der Praxis üblicherweise ein Pseudo-Zufallszahlengenerator verwendet wird. Wenn das Ereignis auftritt, wird eine Zufallszahl generiert, vorzugsweise jedes Mal, wenn das Ereignis auftritt. Eine der Zufallszahlen ist vorzugsweise als ein Trigger vorgesehen, um zu bewirken, dass der komprimierte Zähler R aktualisiert wird, wie zum Beispiel durch Inkrementieren zur darauf folgenden Zahl. Dies wird im Durchschnitt einmal alle N Ereignisse auftreten, wobei N die mögliche Gesamtanzahl von verschiedenen Zufallszahlen ist, die im Laufe der Zeit vom Zufallszahlengenerator generiert werden. Anstelle, dass jedes Auftreten des Ereignisses gezählt wird, wird daher der komprimierte Zähler R durchschnittlich einmal alle N Ereignisse aktualisiert, und dieser Zähler repräsentiert die Anzahl von Ereignissen, die durchschnittlich aufgetreten sind. Oder anders ausgedrückt beträgt die Wahrscheinlichkeit P, dass ein Auftreten eines Ereignisses darauf hinausläuft, dass der komprimierte Zähler R aktualisiert wird, 1/N. Ein Produkt von R und N ergibt, falls dies benötigt wird, die Anzahl der sich ereigneten aktuellen Ereignisse A innerhalb einer Bandbreite des wahrscheinlichen Fehlers, die proportional zu 1/P ist, das heißt, dass der wahrscheinliche Fehler ansteigt, da N mit P = 1/N ansteigt.
  • Diese Techniken haben besondere Anwendungen auf digitale Speichersysteme. Im Beispiel von den im Abschnitt Hintergrund der Erfindung beschriebenen nicht-flüchtigen Flash Speichersystemen muss die Aktualisierung des komprimierten Zählers R eines Ereignisses, wie zum Beispiel das Löschen/Re-Programmier-Ereignis, weniger häufig erfolgen, so dass weniger Zeit von anderen Operationen des Speichers beansprucht wird. Dies führt dazu, dass derartige andere Operationen, wie beispielsweise Benutzerdatenprogrammierung schneller erfolgen. Die Anzahl der erforderlichen Bits zum Speichern des Zählers für jeden der Blöcke wird auch signifikant reduziert. Ferner wird die Komplexität des Betriebes des Speichersystems reduziert, wenn es nicht erforderlich ist, jedes Auftreten des Ereignisses zu zählen.
  • Bei einer Anwendung dieser Technik zum Aufrechterhalten eines Experience Count (manchmal "Hot" Count genannt) der Anzahl der in einem Flash Speicher auftretenden Lösch- und Re-Programmier-Zyklen wird die Anzahl N als ein kleiner Teil von M gewählt, wobei M die erwartete Lebensdauer des Speichers im Hinblick auf eine maximale Anzahl von Lösch/Re-Programmier-Zyklen ist, die eine Speicherzelle sicher durchlaufen kann, bevor Gefahr eines sehr ineffizienten Betriebes oder eines vollständigen Ausfalls besteht. Obwohl es der resultierende komprimierte Zähler R nicht ermöglicht, die Anzahl von vorgekommen Ereignissen A genau zu kennen, erhöht sich seine relative Genauigkeit, weil die Anzahl von Ereignissen A ansteigt und insbesondere wenn das Ende M der Lebenszeit des Speicherblocks allmählich erreicht wird. Die für die Experience Count erforderliche Byteanzahl der Speicherkapazität kann signifikant reduziert werden, da der maximale komprimierte Zähler R während der Lebensdauer des Speichers eher gleich M geteilt durch N ist, als M im Falle, bei dem jedes Löschereignis gezählt wird. Da das Aktualisieren des komprimierten Zählers nur einmal bei vielen Löschereignissen erfolgt, wird die gesamte Leistungsfähigkeit des Speichers verbessert. Darüber hinaus ist es einfacher das Speichersystem zu betreiben und zu debuggen.
  • Die Wahrscheinlichkeit P, dass ein bestimmtes von derartigen Ereignissen verursacht, dass der komprimierte Zähler aktualisiert wird, muss nicht zwangläufig für die gesamte Zeit, in der die Ereignisse des Speichers oder anderer elektronischer Systeme gezählt werden, mit dem gleichen Wert beibehalten werden, aber kann stattdessen beispielsweise als Funktion der Anzahl der Ereignisse A, die überwacht werden, variiert werden. Insbesondere wenn erwünscht wird, einen präziseren komprimierten Zähler R für die Lösch/Re-Programmier-Ereignisse eines Flash Speichers bei niedrigen Werten des aktuellen Zählers A zu erhalten, wird die Wahrscheinlichkeit P zu Beginn des Betriebes auf hohen Werten gehalten und wird während der Lebensdauer des Speichers reduziert, während der aktuelle Zähler A zunimmt. Als ein spezifisches Beispiel ist dies insbesondere dann nützlich, wenn der komprimierte Zähler R vom System dazu verwendet wird, die auf die Speicherzellen angewendeten Spannungen eines bestimmten Blockes während dessen Programmierung und/oder Löschen zu steuern, da diese Spannungen bei niedrigen Pegeln des aktuellen Experience Count A oft verändert werden. Diese Fähigkeit wird zur Verfügung gestellt, ohne dass mehr Bits zum Speichern des komprimierten Zählers für die einzelnen Blöcke verwendet werden müssen.
  • Zusätzliche Aspekte, Merkmale und Vorteile der vorliegenden Erfindung sind in der folgenden Beschreibung von spezifischen repräsentativen Ausgestaltungen enthalten, deren Beschreibung in Zusammenhang mit den zugehörigen Zeichnungen gesehen werden sollte.
  • 1 ist ein schematisches Blockdiagramm eines Speichersystems, in dem die Ereignisüberwachung der vorliegenden Erfindung enthalten ist.
  • 2 ist ein Blockdiagramm, das konzeptionell den Betrieb des Speichersystems von 1 veranschaulicht, um einen komprimierten Zähler von sich im Speichersystem auftretenden Ereignissen zu bewahren.
  • 3 veranschaulicht eine Form einer nicht-flüchtigen Speicherung im Speicher von 1 eines komprimierten Zählers der Ereignisse gemäß den in 2 gezeigten Techniken.
  • 4 veranschaulicht eine weitere Form einer nicht-flüchtigen Speicherung im Speicher von 1 eines komprimierten Zählers der Ereignisse gemäß den in 2 gezeigten Techniken.
  • 5 ist ein Flussdiagramm eines spezifischen Beispiels des Speichersystembetriebes von 1 in Anlehnung an 2.
  • 6 ist eine mit dem Betriebsbeispiel von 5 verwendete Tabelle.
  • 7 zeigt einen Vergleich von zwei Binärzahlen, die im Beispiel von 5 verwendet werden, und
  • 8 ist eine weitere im Beispiel von 5 verwendete Tabelle.
  • 1 ist ein Diagramm einiger der Hauptkomponenten eines typischen nichtflüchtigen Speichersystems. Ein Controller 11 kommuniziert mit einem Hostsystem über Leitungen 13. Der Controller 11, der sich in seinem eigenen integrierten Schaltungschip befinden kann, kommuniziert über Leitung 15 mit einem oder parallel mit mehreren nichtflüchtigen Speichern, wobei ein Speicher 17 dargestellt ist. Der Speicher 17 enthält ein Speicherzellenarray und zugehörige Peripherieschaltungen 37, die zusammen mit einem Controllerinterface 39 auf einem separaten integrierten Schaltungschip ausgestaltet sein kann.
  • Benutzerdaten werden in diesem Beispiel zwischen dem Controller 11 und dem Speicher 17 über die Leitungen 15 transferiert. Der Speicher 17 wird vom Controller adressiert. Insbesondere kann der Datenbus in den Leitungen 15 ein Byte breit sein. Das in 1 gezeigte Speichersystem kann als Teil eines Hostsystems eingebettet sein oder in einer Karte eingekapselt sein, wie zum Beispiel eine Karte, die einen der zuvor genannten Kartenstandards erfüllt. Im Falle einer Karte enden die Leitungen 13 in externen Anschlüssen auf der Karte zum Anschließen mit einem komplementären Sockel im Innern eines Hostsystems. Obwohl die Verwendung eines Controllerchips und mehrere Speicherchips typisch ist, besteht die Tendenz selbstverständlich darin, weniger separate Chips für ein derartiges System durch Kombinieren der Schaltungen zu verwenden. Eine beispielhafte Kapazität des dargestellten Speichers 17 beträgt 256 MBits, was auf diese Weise nur zwei derartige Speicherchips zuzüglich dem Controllerchip erfordert, um ein nicht-flüchtiges Speichersystem zu bilden, das eine Datenkapazität von 64 Megabyte aufweist. Die Verwendung eines Speicherchips mit einer kleineren Kapazität führt zu einem Speichersystem mit geringerer Kapazität, wobei ein 8 Megabyte System ein gängiges Beispiel ist. Umgekehrt führt die Verwendung von Speicherchips mit einer höheren Bitspeicherdichte und/oder die Verwendung von mehreren Speicherchiparrays in einem System zu einem Speicher mit höherer Kapazität. Derartige Speichersysteme bis zu 1,3 Gigabyte und mehr sind zweckmäßig.
  • Der Controller 11 enthält einen Microprozessor oder einen Microcontroller 23, der über eine Controllerinterfacelogik 25 mit internen Speichern und Interfaces mit externen Komponenten verbunden ist. Ein Programmspeicher 27 speichert die Firmware und Software, auf die vom Microcontroller 23 zugegriffen wird, um den Speichersystembetrieb zu kontrollieren, um Daten aus den verbundenen Speicherarray(s) zu lesen und um diese Daten zum Host zu übertragen, um Daten vom Host in das Speicherarray(s) zu schreiben, und um andere Überwachungs- und Steuerfunktionen durchzuführen. Der Speicher 27 kann ein flüchtiger re-programmierbarer Speicher mit wahlfreiem Zugriff (RAM) sein, der mit Daten aus einer Art nicht-flüchtigem Speicher initialisiert wird, einem nicht-flüchtigen Speicher, der nicht re-programmierbar ist (ROM), ein einmalig programmierbarer Speicher (OTP) oder ein re-programmierbares Flash EEPROM System. Falls der Speicher 27 reprogrammierbar ist, kann der Controller so konfiguriert sein, um dem Hostsystem zu ermöglichen, diesen zu programmieren. Ein Speicher mit wahlfreiem Zugriff (RAM) 29 wird dazu verwendet, neben anderen Daten, Datentabellen vom nicht-flüchtigen Speicher zu lesen, auf die während Lese- und Schreiboperationen zugegriffen wird.
  • Eine Logikschaltung 31 kommuniziert mit den Hostkommunikationsleitungen 13, während eine andere Logikschaltung 33 mit dem Speicherarray(s) über die Leitungen 15 kommuniziert. Ein weiterer Speicher 35 wird als ein Puffer verwendet, um temporär Benutzerdaten zu speichern, die zwischen dem Hostsystem und dem Speicher 17 transferiert werden. Die Speicher im Controller sind gewöhnlich flüchtig, abgesehen von denen, die Betriebsfirmware speichern, da Speicher mit schnellem Zugriff und anderen gewünschten Charakteristika für effiziente Controlleroperationen diese Charakteristika haben. Die mehreren flüchtigen Speicher können in geeigneter Weise physikalisch in einem einzelnen Speicher kombiniert werden.
  • Die Logikschaltung 39 des Speichers 17 kommuniziert mit dem Controller über die Leitungen 15. Der Zweck der Logikschaltung 39 besteht darin, Signale für die Speicherzellenarrays 37 zu generieren, die über separate Busse und Kontrollleitungen übergeben werden. Verschiedene Kontrollsignale werden in Leitungen 41 zur Verfügung gestellt. Ein Datenbus 45 überträgt Benutzerdaten, die in den nicht-flüchtigen Speicher programmiert oder daraus gelesen werden, und ein Adressbus 47 überträgt die Adressen des Speicherteiles, der zum Lesen von Benutzerdaten, Schreiben von Benutzerdaten oder Löschen von Speicherzellblöcken adressiert wird. Eine Spannungssteuerschaltung 43 stellt als Antwort auf Kontrollsignale in den Schaltungen 41 verschiedene Spannungen und Ströme über Leitungen 49 zur Verfügung, die zum Betrieb des Speicherzellenarrays 37 erforderlich sind. Darin sind Spannungen an Bitleitungen und Gates des Speicherzellenarrays 37 enthalten, die zum Programmieren, Lesen oder Löschen derjenigen Zellen geeignet sind, die über eine Adresse in Leitungen 47 adressiert werden.
  • In einer typischen Flash Speicherimplementierung sind die Speicherzellen des Arrays in Blöcke unterteilt, wobei jeder Block die kleinste löschbare Einheit von Speicherzellen ist, und alle Zellen in einem einzelnen Block gleichzeitig löschbar sind. Typischerweise wird eine Anzahl von Blöcken zur gleichen Zeit gelöscht und Programmieren von Daten in das Speicherarray erfolgt in Blöcken, die zuvor gelöscht worden sind. In einem Beispiel speichert jeder Block 512 Bytes Benutzerdaten zuzüglich einer Anzahl von Overheaddatenbytes, die mit den Benutzerdaten in Zusammenhang stehen und/oder mit dem Speicherzellenblock in Zusammenhang stehen, in denen die Overheaddaten gespeichert werden. Ein derartiger Block besteht in einer spezifischen Implementierung aus zwei Reihen von Speicherzellen. In einem anderen Beispiel speichert jeder Block 32768 (= 64 × 512) Bytes Benutzerdaten zuzüglich Overheaddaten. Als Alternative dazu, die Overheaddaten in den gleichen Blöcken wie die Benutzerdaten zu speichern, können einige oder alle Overheaddaten in anderen Blöcken gespeichert werden, die für diesen Zweck geeignet sind.
  • Eins der Elemente von Overheadinformationen, das mit jedem Block von Flash Speichern in einer Anzahl von EEPROM Systemen in Zusammenhang steht, ist die Anzahl der Lösch/Re-Programmier-Zyklen, die der Block erfahren hat. Dieser Block Experience Count ist für viele Zwecke nützlich, wobei die Hauptzwecke zuvor beschrieben worden sind. Wenn zum Vermerken entweder eines Lösch- oder Re-Programmier-Ereignisses des Blockes ein Block Experience Count aktualisiert wird, wird der für den Block im nicht-flüchtigen Speicher gespeicherte Block Experience Count zuerst gelesen und in einem temporären Speicher gespeichert, der üblicherweise ein flüchtiger Speicher im Controller ist. Um das Auftreten eines folgenden Ereignisses zu repräsentieren, wird dieser Zähler dann aktualisiert, zum Beispiel durch Inkrementieren des Zählers um eins und dann wird der aktualisierte Zähler zurück in den nicht-flüchtigen Speicherblock geschrieben. Dies involviert eine signifikante Anzahl von Operationen, die Zeit erfordern und sich somit auf die Leistungsfähigkeit des Speichersystems negativ auswirken.
  • Gemäß einer Hauptimplementierung der vorliegenden Erfindung werden die Experience Counts nicht jedes Mal aktualisiert, wenn deren zugehörige Blöcke gelöscht und reprogrammiert werden. Stattdessen wird ein komprimierter Zähler weniger häufig mit einer durchschnittlichen Rate aktualisiert, die über eine proportionale Konstante mit der Rate der Lösch-/Re-Programmier-Ereignisse, die gezählt werden, in Beziehung steht. Wenn zum Beispiel ein Flash Speicher eine Lebensdauer von ungefähr 10.000.000 Lösch/Re-Programmier-Zyklen hat und der komprimierte Zähler nur einmal in ungefähr 4000 Zyklen aktualisiert wird, dann wird der Aktualisierungsprozess nur 1/4000 so häufig beim Auftreten einer großen Anzahl von Zyklen auftreten. Der Betrag der zum Aktualisieren des komprimierten Experience Count verwendete Zeit während des Betriebes des Speichers ist signifikant geringer, als wenn ein Experience Count bei jedem Ereignis aktualisiert wird. Außerdem wird die zum Speichern des Zählers erforderliche Bitanzahl signifikant reduziert, so dass der zum Beibehalten des Zählers belegte Speicherraum im nichtflüchtigen Speicher signifikant reduziert wird. Wenn zum Beispiel ein aktueller Zähler von 1.000.000 Zyklen gespeichert wird, sind etwa 3 Byte für jeden Block erforderlich, um jede Zahl von 1 bis 1.000.000 zu zählen. Falls hingegen nur ein Durchschnitt von jedem 4000-ten Ereignis gezählt wird, beträgt der maximale Zähler ungefähr 250 und dies kann in einem Byte gespeichert werden. Die Einsparungen des Overhead-Speicherplatzes betragen in diesem Beispiel somit zwei Bytes pro Block
  • Ein Anhaltspunkt für die aktuelle Anzahl von Ereignissen, die ein Block erlebt hat, ist in diesem Beispiel immer durch Multiplizieren des Zählers mit 4000 verfügbar, aber die im Controllerspeicher 27 gespeicherte Firmware arbeitet als Anhaltspunkt für die Nutzung der einzelnen Blöcke vorzugsweise direkt mit dem komprimierten Zähler. Die selben Vorteile einer erhöhten Leistungsfähigkeit und einer reduzierten erforderlichen Speicherkapazität ergeben sich durch Reduzieren der Aktualisierungsfrequenz zur Überwachung des Zählers des Auftretens jedes anderen Ereignisses, ob in einem nicht-flüchtigen Speicher oder in einem anderem elektronischen System.
  • Eine bevorzugte Technik zum Beibehalten des komprimierten Zählers beinhaltet ein Generieren einer Reihe von Zufallszahlen, wobei eine Zahl als Antwort auf jedes neues Ereignis generiert wird, und der komprimierte Zähler jedes Mal aktualisiert wird, wenn die generierte Zufallszahl gleich einer vorgegebenen Auswahl von diesen Zahlen ist. Wenn zum Beispiel ein Generator von Zufallszahlen von 1 bis 4000 zum Einsatz kommt, wobei jedes Mal eine neue Zahl generiert wird, wenn das Ereignis eintritt, und eine bestimmte Zahl, angenommen 2750, selektiert wurde, um den beibehaltenden Zähler zu aktualisieren, wenn dieses Ereignis auftritt, wird der komprimierte Zähler jedes Mal aktualisiert, wenn die Ausgabe des Zufallszahlengenerators gleich 2750 ist. Durchschnittlich wird dies einmal für alle 4000 Ereignisse auftreten. Obwohl es keinen präzisen Zusammenhang zwischen der Anzahl der aufgetretenen Ereignisse und dem komprimierten Zähler vorhanden ist, besteht eine Korrelation, insbesondere nach einer großen Anzahl von Ereignissen. Es hat sich erwiesen, dass die Genauigkeit des komprimierten Zählers für die Zwecke des beschriebenen Beispiels ausreichend ist, insbesondere nachdem mehrere Hunderttausend Ereignisse aufgetreten sind. In der beschriebenen beispielhaften Anwendung wird die Information des Experience Count besonders nützlich, um zu Ermitteln, wann es erforderlich ist, einzelne Speicherblöcke auszutauschen.
  • 2 veranschaulicht als Beispiel konzeptionell diesen Prozess, der im nichtflüchtigen Speichersystem von 1 implementiert ist. Ein Zufallszahlengenerator 51 gibt in Leitungen 52 jedes Mal eine neue Zufallszahl aus, wenn ein Inkrementierungspuls in einer Leitung 53 angelegt wird. Der Inkrementierungspuls tritt jeweils zu Beginn eines Spannungspulses in der Leitung 49 auf, wenn ein Kommando in Leitungen 41 eine Löschoperation bezeichnet. Diese dargestellte Kombination von Signalen soll von einem AND-Gate 54 identifiziert werden. Während eines derartigen Lösch-Spannungspulses werden eine oder mehrere Speicherzellenblöcke 38 des Speichers 37 gleichzeitig gelöscht, was durch eine Adresse in Leitung 47 angegeben wird. In einer spezifischen Implementierung werden 16 Blöcke gleichzeitig gelöscht. Typischerweise wird ein einzelner Lösch-Spannungspuls angelegt.
  • Eine Zahl im Satz von Zahlen, die mit dem Zufallszahlengenerator in Zusammenhang steht, ist an einem vorgegebenen Ort, mit 55 bezeichnet, im System auf eine nichtflüchtige Weise gespeichert. Jede neue Zahl in den Leitungen 52, die vom Zufallszahlengenerator 51 generiert wird, wird mit der im Speicher 55 gespeicherten Zahl mit einem Komparator 57 verglichen. Wenn die zwei Zahlen übereinstimmen, verursacht ein Signal in einer Leitung 59, dass der komprimierte Zähler R für jeden der Blöcke, die zurzeit gelöscht werden, aktualisiert wird. Wenn der Vergleich negativ ist (d. h. die zwei Zahlen stimmen nicht überein), was während der meisten Zeit der Fall sein wird, findet keine Aktualisierung statt. Dieser Vergleich kann unter Verwendung von logischen Gattern in Hardware, Software oder Firmware in Abhängigkeit von den Geschwindigkeitserfordernissen, des Bedarfs an Flexibilität und Kostengesichtspunkten implementiert werden.
  • In einer Ausgestaltung werden die Zähler für eine Anzahl von Benutzerdatenblöcken in einem einzelnen aus einer Vielzahl von reservierten Blöcken beibehalten, wie zum Beispiel ein reservierter Block 61. Die Gliederung der Datenstruktur für einen reservierten Block ist in 3 angegeben. Mehrere Byte Overheaddaten werden in einem derartigen Block für jeden aus einer großen Anzahl von anderen Blöcken, die Benutzerdaten speichern, beibehalten, wobei diese Anzahl von der Kapazität der verschiedenen Blöcke abhängt. Zum Beispiel enthalten die Overhead- ("OH") Daten für Speicherzellblock 2 ein Byte 63 des komprimierten Zählers, der aktualisiert wird, wenn eine Übereinstimmung zwischen dem Output des Zufallszahlengenerators 52 und der gespeicherten Zahl 55 auftritt.
  • In einer weiteren Ausgestaltung werden anstelle, dass die Zähler in einem separaten reservierten Block 61 beibehalten werden, diese als ein Teil der Blöcke gespeichert, für welche die Zähler beibehalten werden. Mit Bezug auf 4 wird beispielsweise ein komprimiertes Zählbyte 65 als Teil von Overheaddaten 67 für einen Speicherzellenblock 1 gespeichert, wobei die Mehrzahl der Zellen im Block Benutzerdaten speichern. Somit wird, wenn eine Anzahl von Blöcken gemeinsam gelöscht wird, der komprimierte Zähler von jedem Block aktualisiert, wenn zur Zeit der Löschoperation die Zufallszahl 52 mit der in 55 gespeicherten übereinstimmt. Zu diesem Zeitpunkt wird nichts mit dem komprimierten Zähler anderer Blöcke getan, die nicht gelöscht werden.
  • In einer noch weiteren Ausgestaltung werden die Zähler in einem Block gespeichert, der exklusiv zum Speichern der Zähler und keiner anderen Art von Overheaddaten vorgesehen sind.
  • Der Zufallszahlengenerator 51 kann gemäß einer von vielen bekannten Hardwareund/oder Softwaretechniken implementiert werden. In einer spezifischen Implementierung wird die Funktion des Zufallszahlengenerators 51 durch den Microcontroller 23 des Speichercontrollers 11 (1) durchgeführt. Der Microcontroller 23 befindet sich während der Zeitdauer eines Löschimpulses generell im Leerlauf, so dass dieser während derartiger Pulse dazu verwendet werden kann, eine neue Zufallszahl 52 zu generieren und diese Zahl mit der vorgegebenen Zahl 55 zu vergleichen, ob eine Übereinstimmung besteht oder nicht. Dazu wird ein Standard-Schiebe und exklusiv-ODER Algorithmus verwendet, wobei ein 32 Bit Wert im Controller RAM 29 gespeichert wird und eine 12 Bit Zufallszahl (durch diese Technik eigentlich pseudo-zufällig) in Leitungen 52 als Antwort auf jedes Löschkommando generiert. Eine 12 Bit Zahl stellt 4096 unterschiedliche mögliche Kombinationen zur Verfügung. Falls die Lebensdauer des Speichers ungefähr eine Million Zyklen beträgt, wird ein Bit den komprimierten Zähler speichern, der für die aktuelle Anzahl der Ereignisse repräsentativ ist. Beim Auftreten jedes Löschereignisses beträgt die Wahrscheinlichkeit P, dass die generierte Zufallszahl 52 mit der in 55 gespeicherten Zahl übereinstimmt 1 zu 4096.
  • Der Zufallszahlengenerator, um mehr Details zur Verfügung zu stellen, verwendet ein 32 Bit Schieberegister, das im Controller RAM 29 (1) ausgebildet ist. Jede neue Zufallszahl wird durch wiederholtes Ausführen einer exklusiv-ODER Operation auf das zweite und dritte Bit mit dem niedrigsten Stellenwert des Schieberegisters angewendet und das resultierende Bit wird in das Bit mit dem höchsten Stellenwert des Schieberegisters während einer Schiebeoperation aller 32 Bit des Schieberegisters eingegeben. Um eine neue 16 Bit Zufallszahl zu generieren, wird diese Operation 16 mal wiederholt. Dann werden die 4 Bits mit dem höchsten Stellenwert des Schieberegisters mit den 16 Bits mit dem niedrigsten Stellenwert des Schieberegisters durch Durchführen einer AND Operation der 16 Bits mit dem niedrigsten Stellenwert des Schieberegisters und der hexadezimalen Zahl OFFFh (0000 1111 1111 1111 in binärer Form) maskiert. Jedes Mal, wenn die 12 Bits mit dem niedrigsten Stellenwert des Schieberegisters den Wert 000h (0000 0000 0000 in binärer Form) annehmen, wird der Output der logischen UND Operation eins und es gibt einen Treffer (Übereinstimmung) in dem Sinne, dass bei derartigen Ereignissen der komprimierte Zähler R inkrementiert wird. Falls alle 32 Bits des Schieberegisters jemals Null werden, werden von diesem Punkt an alle nachfolgend generierten Zufallszahlen auch Null. Falls dies geschieht, erhält der Zufallszahlengenerator einen neuen Startwert.
  • Es ist zu beachten, dass die Wahrscheinlichkeit P mit anderen Mitteln als dem oben speziell beschriebenen Zufallszahlengenerator 51 generiert werden kann. Beispiele dafür sind die Verwendung von Systemrauschen, Tunnelereignissen in Einzelelektronenbauelementen, radioaktiver Zerfall in einem bestimmte Zeitintervall und andere Ereignisse, die zufällig in irgendeiner Hardware, Firmware oder Software auftreten. Andere geeignete Techniken zum Generieren von Zufallszahlen zum Entwickeln eines Startwertes, um den Zufallszahlengenerator 51 zu initialisieren, werden zusätzlich nachstehend beschrieben.
  • Nachdem das Speichersystem initialisiert ist, ist es aufgrund des Einschaltens aus einem nicht-eingeschalteten Zustand erforderlich, den Zufallszahlengenerator 51 auf einen Anfangswert zu setzen, um den Ablauf zu starten. Dies wird durch eine Startwertquelle 71 durchgeführt, die von einem initialisierenden Signal in Leitung 75 getriggert wird, um dem Zufallszahlengenerator 51 einen anfänglichen Startwert 73 zur Verfügung zu stellen.
  • Es existieren viele alternative Startwertquellen, die verwendet werden können. Eine besteht darin, auf eine nicht-flüchtige Art und Weise den letzten Wert 52 des Zufallszahlengenerators 51 während des Betriebes des Speichersystems vor der Initialisierung zu speichern. Der Zufallszahlengenerator 51 wird dann dazu gezwungen, mit diesem gespeicherten Wert zu beginnen. Aber die Verwendung einer Zufallszahl oder nicht-korrelierten Quelle von Zahlen als Startwert arbeitet auch zufriedenstellend. In Systemen, die eine Zeituhr enthalten, ist die generierte Zeit eine pseudo-zufällige Zahlenfolge, wobei die zur Zeit des Initialisieren vorhandene Zahl als Startwert für den Zufallszahlengenerator 51 verwendet wird. Alternativ kann ein zweiter Zufallsgenerator mit dem gleichen oder einem anderen Design als der Zufallsgenerator 51 verwendet werden, um einen Startwert zu selektieren. Für den speziell oben beschriebenen Zufallszahlengenerator beinhaltet die Verwendung eines neuen Startwertes Initialisieren aller 32 Bits des Schieberegisters.
  • Eine noch weitere alternative Technik zum Generieren eines Startwertes involviert Lesen von Benutzerdaten in einem Block des Speichers, die in einer normalen Art und Weise gelesen werden können. Um jedoch einen höheren Grad der Zufälligkeit für den Fall zu gewährleisten, dass sich die Daten zwischen Initialisierungen nicht verändern, wird dieses Lesen in einer spezifischen Implementierung mit Grenz-Schwellwerten durchgeführt, die durch weit über das Maß der normalerweise zum Lesen von Daten verwendete Beträge voneinander getrennt sind. Dies ist aufgrund der Grenzlage der Lesevorgänge beabsichtigt, um zu gewährleisten, dass viele Fehler beim Lesen der Daten auftreten werden, vorzugsweise in einer Art und Weise, dass zumindest einige der gleichen Daten zu unterschiedlichen Zeitpunkten unterschiedlich gelesen werden. Um die Zufälligkeit der Startwerte weiter zu erhöhen, kann aus diesen absichtlich fehlerhaft gelesenen Daten Adressen eines zweiten Blocks generiert werden, und die Daten im zweiten Block werden auf die gleiche Weise gelesen, die wahrscheinlich die Daten fehlerhaft liest. Dies kann für eine weitere Anzahl von Zyklen fortgesetzt werden, falls eine zusätzliche Sicherheit für Zuverlässigkeit gewünscht wird.
  • In der oben stehenden Beschreibung wurde angenommen, dass die Wahrscheinlichkeit P für das Auftreten einer Übereinstimmung während der gesamten Lebensdauer des Speichersystems gleich bleibt. Es kann jedoch Anwendungen geben, bei denen es erwünscht ist, die Wahrscheinlichkeit P auf eine Art und Weise zu variieren, wie zum Beispiel als Antwort auf relevante sich verändernde Bedingungen oder als Antwort auf ein auftretendes Ereignis. Falls es erwünscht ist, kann diese Wahrscheinlichkeit durch Verändern der Anzahl vorgegebener Zahlen im Speicher 55, mit denen jede der Zufallszahlen 52 vom Zufallszahlengenerator 51 verglichen werden, verändert werden. Der komprimierte Zähler wird jedes Mal aktualisiert, wenn eine Übereinstimmung der generierten Zufallszahl mit einer, zwei oder sogar mehreren vorgegebenen Zahlen im Speicher 55 besteht. Da die Anzahl von vorgegebenen Zahlen im Speicher 55 verändert wird, die für den Vergleich mit dem Output der Zufallszahlen des Generators 51 zur Verfügung gestellt werden, ändert sich die Wahrscheinlichkeit P, dass für eine Zufallszahl eine Übereinstimmung auftritt.
  • Als eine Alternative zum Andern der Anzahl gespeicherter vorgegebener Zahlen, die verglichen werden, um die Wahrscheinlichkeit zu verändern, kann die Bitanzahl einer einzelnen Zahl im Speicher 55 und die individuellen Zufallszahlen, die verglichen werden, in einem digitalen System verändert werden. Falls zum Beispiel der Zufallszahlen-Output 52 des Zufallszahlengenerators 51 12 Bits beträgt und die in 55 gespeicherte vorgegebene Zahl auch 12 Bits hat, tritt die geringste Wahrscheinlichkeit für eine Übereinstimmung (eins zu 4096) auf, wenn ein positiver Vergleich aller 12 Bits erforderlich ist. Aber falls, als weiteres Beispiel, nur zwei Bits in der gleichen Speicherstelle jeder Zahl verglichen werden, besteht eine viel höhere Wahrscheinlichkeit für eine Übereinstimmung (eins zu vier) infolge jedes Vergleiches. Das verändert tatsächlich die Gesamtzahl von möglichen verschiedenen Zufallszahlen, die vom Zufallszahlengenerator generiert werden können, und ändert auf diese Weise die Wahrscheinlichkeit, dass eine Zufallszahl mit der vorgegebenen Zahl übereinstimmt. Die Bitanzahl der zwei Zahlen, die verglichen werden, und somit die Gesamtanzahl von möglichen Zugfallszahlen wird mit Firmware oder einer Pro grammsteuerung als Antwort auf eine Auswahl eines Benutzers einfach verändert oder automatisch als Antwort auf eine Änderung, die in einer anderen Bedingung oder Ereignis des Speichersystems detektiert wird, verändert.
  • Eine spezifische Anwendung in einem Flash Speichersystem, die Wahrscheinlichkeit eines Auftretens einer Übereinstimmung zu verändern, wird mit Bezug auf das Flussdiagramm von 5 beschrieben. Diese Betriebsweise inkrementiert den komprimierten Zähler R häufiger bei niedrigen Zahlen von R, die gewöhnlich niedrigeren Anzahlen der aktuellen Zähler von A entsprechen, als bei größeren Zahlen, was dazu führt, dass der komprimierte Zähler R genauer den aktuellen Zähler A der niedrigeren Zahlen darstellt. Die Auflösung des komprimierten Zählers R wird somit bei niedrigen Zahlen verbessert. Dies ist möglich, ohne dass die Anzahl von erforderlichen Bits erhöht werden muss, die zum Speichern des komprimierten Zählers R notwendig sind, indem anfänglich große Werte von P bei kleinen Werten von R verwendet werden, und bei höheren Werten von R zu kleineren Werten von P fortgeschritten wird (kann kleiner als 1/4096 werden und zwar 1/32768). Durch Verwenden dieses Ansatzes kann ein Integer R im Intervall von 0 bis 255 1 Million Zählerstände für den hohen Zählbereich und ebenso einstellige Zählerstände für den niedrigen Zählbereich repräsentieren. In dem hier beschriebenen Flash EEPROM System kann die Gesamtanzahl von binären Zufallszahlen-Bits, die mit der gleichen Bitanzahl der vorgegebenen Zahl verglichen werden, dazu vorgesehen werden, eine Funktion des Wertes des komprimierten Zählers R von jedem Block zu sein, der gelöscht wird.
  • In dem spezifischen Beispiel, das mit Bezug auf 58 beschrieben wird, um dieses Merkmal zu veranschaulichen, haben beide Zufallszahlen 52, die vom Generator 51 (2) generierte Zahl und die gespeicherte vorgegebene Zahl 55, eine Länge von 16 Bits. Eine unterschiedliche Bitanzahl wird vom Komparator 57 in Anhängigkeit vom Wert des komprimierten Zählers R verglichen. Weniger Bits werden bei niedrigeren Werten des komprimierten Zählers R verglichen (somit eine höhere Wahrscheinlichkeit für das Auftreten einer Übereinstimmung) als bei höheren Werten (wo die Wahrscheinlichkeit eines Auftretens einer Übereinstimmung geringer ist). Der komprimierte Zähler R wird nur in einem Byte gespeichert, das einen Bereich von 0–255 hat.
  • Mit Bezug auf 5 besteht ein erster Schritt 71 in einer Zusammenfassung des Prozesses darin, zu ermitteln, wann eine Löschoperation durchgeführt wird. Wenn dies in einem Schritt 73 auftritt, wird der Zufallszahlengenerator 51 dazu veranlasst, eine Zufallszahl 52 zu generieren (siehe auch 7). In einem nächsten Schritt 75 wird der komprimierte Zähler R für die Blöcke, die momentan zum Löschen adressiert sind, aus seinem nicht-flüchtigen Register 61 gelesen. Dies ist in 2 nicht gezeigt, aber es versteht sich, dass dies im Microcontroller 23 (1) implementiert ist, der vorzugsweise auch die in 2 dargestellte Verarbeitung durchführt. Eine wie in 6 dargestellte Tabelle 6 ist in einem nicht-flüchtigen Speicher des Controllers zur Verwendung während eines anschließenden Schrittes 77 gespeichert. Die durch diese Tabelle repräsentierte Logik kann in Hardware, Firmware oder Software implementiert sein.
  • Die Bitanzahl der Zahlen 52 und 55 (7), die verglichen werden sollen, wird durch Nachschlagen des gelesenen komprimierten Zählers R in der Tabelle von 6 für jeden der Blöcke, die gelöscht werden, in seiner linken Spalte ermittelt und die Anzahl von zu vergleichenden Bits wird in der mittleren Spalte gelesen. Eine rechte Spalte von 6 stellt die Wahrscheinlichkeit P zur Verfügung, dass eine Übereinstimmung der Bits der Zahlen 52 und 55, die verglichen werden, auftreten wird. Es ist zu beachten, dass keine Bits für die niedrigsten Werte 0–15 von R verglichen werden, da diese jeweils Äquivalente der aktuellen Zähler 0–15 von A sind. Bei jedem Auftreten des Löschereignisses für Blöcke, deren R 15 oder kleiner ist, wird daher dieses R um eins inkrementiert. Aber innerhalb eines nächsten Bereiches, in dem R zwischen 16–31 liegt, wird ein Bit von jeder Zahl, wie zum Beispiel die Bits 79 und 81, in der gleichen Bitposition von jeder der Zahlen 52 und 55 verglichen. Es besteht eine Wahrscheinlichkeit von 0,5, dass eine Übereinstimmung in jeder Instanz auftreten wird. In einem nächsten Bereich von R zwischen 32–47 werden zwei Bits, wie zum Beispiel Bits 79 und 83 der Zahl 52 sowie Bits 81 und 85 der folgenden Zahl 55 verglichen, was zu einer Wahrscheinlichkeit von 0,25 führt, dass eine Übereinstimmung in jeder Instanz auftreten wird. Da der komprimierte Zähler R zu seinem größten Bereich zwischen 240 und 255 ansteigt, werden 15 der 16 Bits verglichen, was zu einer sehr geringen Wahrscheinlichkeit (1 zu 32768) führt, dass eine Übereinstimmung von 15 der 16 Bits aus einem Vergleich resultiert. Die Bitanzahl der Zahlen 52 und 55 werden in der Tabelle von 6 nachgeschlagen und der Vergleich erfolgt in einem Schritt 87 (5). Ein folgender Schritt 89 ermittelt, ob auf einer einzelnen Blockbasis eine Übereinstimmung vorliegt oder nicht. Wenn ja, wird der komprimierte Zähler R nur dieser einzelnen Blöcke, welche die Übereinstimmung innerhalb der adressierten Blöcke erfüllen, welche im Schritt 79 gelesen wurden, in einem Schritt 91 um eins inkrementiert. Falls bei keinem Block in der Gruppe von Blöcken, die gelöscht werden, eine Übereinstimmung vorliegt, endet der Ablauf bezüglich der Blöcke, die gelöscht werden, und es wird auf einen Empfang eines anderen Löschkommandos in Schritt 71 gewartet.
  • Obwohl die beschriebenen Beispiele ein Inkrementieren verschiedener Zahlen beinhalten, könnten stattdessen eine oder mehrere von einem hohen Wert zu einem niedrigen Wert dekrementiert werden. Normalerweise ist es nicht wichtig, wie der komprimierte Zähler R aktualisiert wird, um die Tatsache eines positiven Vergleiches zu speichern, wie zum Beispiel der Zahlen 52 und 55, ob durch Inkrementieren um eins oder um mehr bei jedem Mal, ob durch Dekrementieren um eins oder mehr bei jedem Mal, oder durch andere Techniken, solange R in einer Art und Weise aktualisiert wird, dass ein aussagefähiger Wert gelesen werden kann, falls dies erforderlich ist.
  • Eine derartige Tabelle wie in 8 gezeigt ist ebenso optional als Teil eines Softwarepaketes enthalten, das von Fehleranalyseingenieuren verwendet wird, um den komprimierten Zähler R mit dem aktuellen Zähler A in den Fällen in Verbindung zu bringen, bei denen ein Schätzwert von A erforderlich ist (In den meisten Fällen kann die Firmware des Speichersystems vom Zähler R selbst gesteuert werden, da seine Beziehung zum Zähler bekannt ist). Für eine erste Gruppe 93 von Werten des komprimierten Zählers R ist der in der linken Spalte der aktuelle Zähler A, der in der mittleren Spalte gezeigt ist, der gleiche. Eine statistische Standardabweichung von Fehlern zwischen R und A, die in der rechten Spalte gegeben ist, ist für diese Gruppe Null. In einer nächsten Gruppe 95 in der Tabelle von 8, die der zweiten Reihe der Tabelle von 6 entspricht, sind die Werte von R ungleich der Werte von A. Stattdessen, da jeder Zähler R in dieser Gruppe ungefähr einmal für jedes der zwei Vorkommnisse von A inkrementiert wird, ist der Wert von A ungefähr 15, der höchste Wert der ersten Gruppe 93 plus zweimal die Anzahl von Zähler R in der linken Spalte höher als 15. Ähnlich ist der Wert von A für einen vorgegebenen Wert R in einer folgenden Gruppe 97, die der dritten Reihe der Tabelle von 6 entspricht, der Wert von A für den höchsten Wert 31 von R in der letzten Gruppe 95 plus ungefähr viermal der Zähler R höher als dieser höchste Zählwert 31 der vorherigen Gruppe 95. Dieser Zusammenhang setzt sich für alle möglichen Werte des Zählers R fort.
  • Der Zusammenhang zwischen den Zählern R und A ist gewöhnlich nicht wie der oben überschlägig ermittelte, insbesondere da der Wert von A aufgrund der inkrementellen Verteilung einer Kombination der Auswirkungen von unterschiedlichen Wahrscheinlichkeitswerten in den unterschiedlichen Bereichen von R groß wird, die durch vorherige Gruppen 93, 95 97 etc. dargestellt wurden. Als Ergebnis enthält die mittlere Spalte der Tabelle von 8 einen zusätzlichen unbekannten Term x. Obwohl der Zusammenhang zwischen R und A durch ein mathematisches Modell, das die x Terme enthält, angenähert werden kann, wird üblicherweise bevorzugt, die erwarteten Werte (d. h. die Mittelwerte) von A für jedes gegebene R in der mittleren Spalte der Tabelle von 8 empirisch zu generieren. Das Speichersystem, in dem dieser Prozess implementiert ist, wird am besten durch Beanspruchung zumindest einer Gruppe von Blöcken mit einer Anzahl von aktuellen oder simulierten Löschereignissen betrieben, die von Null bis zur maximalen Anzahl reichen, von der angenommen wird, dass sich diese in diesem Speichertyp ereignen. Sowohl der komprimierte Zähler R, der vom System beibehalten wird, als auch ein aktueller Zähler A von der Anzahl der Löschzyklen werden während des Testes überwacht. Letzteres gibt die Werte für die mittlere Spalte von 8. Durch Verwenden des aktuellen Speichersystems zum Generieren der aktuellen Zähler A, die den komprimierten Zählern R entsprechen, werden verschiedene Unvollkommenheiten des Zufallszahlengenerators 51 und andere Teile des Systems sowie Vorgänge in Betracht gezogen. Ein mathematisches Modellieren aller derartiger Einflussgrößen mit Genauigkeit ist schwierig.
  • Die Fehler in der rechten Spalte von 8 werden auch am besten mittels einer derartigen empirischen Technik ermittelt, wenn gewünscht wird, diese mit einzubeziehen. Die Zähler R und A werden während einer großen Anzahl von Zyklen einer Anzahl von Speicherblöcken beibehalten und die Unterschiede zwischen den unterschiedlichen Blöcken werden in einer gewissen statistischen Art und Weise ausgedrückt, wie zum Beispiel durch eine Standardabweichung einer Population derartiger Unterschiede. Diese Spalte kann für eine Bewertung verschiedener Kompromisse zwischen einer gewünschten Genauigkeit und dem erforderlichen Speicherplatz, der zum Speichern der Zähler erforderlich ist, nützlich sein, sowie für Diagnosen durch den Benutzer des Speichersystems, was aber gewöhnlich nicht vom Controller 11 während des Betriebes des Systems verwendet wird.
  • Obwohl die hier beschriebenen Beispiele zum Beibehalten eines Zählers der Anzahl von Lösch/Neu-Schreibe-Zyklen sind, die Blöcke eines Flash EEPROM Systems erfahren haben, können diese Techniken auch mit ähnlichen Vorteilen zum Zählen anderer Ereignisse in einem derartigen System angewendet werden, insbesondere wenn ein separater Zähler eines Ereignisses für jeden Block oder jede Gruppe von Speicherzellen beibehalten wird. Ein Beispiel besteht im Zählen der Anzahl, wie oft einzelne Blöcke auf Margin Scanning Data Decovery Techniken beansprucht wurden, als Hinweis für Probleme mit diesen Blöcken. Ein weiteres Beispiel besteht darin zu zählen, wie oft ein Fehlerkorrekturcode (ECC) verwendet wurde, um die Benutzerdaten eines anderen ansonsten unlesbaren Sektors wiederherzustellen. Ein weiteres besteht im Beobachten der Anzahl, wie oft Blöcke aufgefrischt werden müssen, um die darin enthaltenen Daten auf deren richtigen Pegeln durch Scrubbing aufrechtzuerhalten, um Störungen zu kompensieren, die im Laufe der Zeit vorgekommen sind. In diesen und anderen Situationen gibt eine große Zahl solcher Ereignisse, die ein Block, ein Sub-Block (Sektor) oder eine Gruppe von Blöcken erfahren hat, einen Hinweis darauf, dass Probleme mit diesen vorhanden sind. Diese Information kann vom Speichercontroller dazu verwendet werden, um den Block, den Sub-Block oder die Gruppe von mit Problemen behafteten Blöcke auszutauschen oder andere Beseitigung von Störungen durchführen. Ferner sind die oben beschriebenen Zähltechniken nicht auf die Verwendung von Flash EEPROMs oder andere nicht-flüchtige Speichersysteme beschränkt. Diese Techniken haben in allen elektronischen Systemen Anwendungsmöglichkeiten, bei denen es notwendig oder erwünscht ist, einen Zähler von einem oder mehreren sich ereignenden Ereignissen zu behalten, die im Verlauf des Betriebes oder durch die Verwendung des Systems auftreten. Obwohl die verschiedenen Aspekte der vorliegenden Erfindung mir Bezug auf spezifische beispielhafte Ausgestaltungen beschrieben wurden, versteht sich, dass sich die Erfindung auf den gesamten Geltungsbereich Anspruch hat, welcher durch die folgenden Ansprüche definiert wird.
  • ANHANG
  • EIN NEUES KOMPRIMIERTES STOCHASTISCHES INTEGER EREIGNISZAHLSCHEMA
  • Diese Idee ist auf jede Situation anwendbar, bei der eine Aufzeichnung der Anzahl, wie oft ein bestimmtes Ereignis aufgetreten ist, erhalten werden muss. Die übliche Art und Weise um die Anzahl zu beobachten, wie oft ein bestimmtes Ereignis aufgetreten ist, be steht darin, einen Zähler zu entwickeln, der jedes Mal inkrementiert wird, wenn das Ereignis eintritt. Wenn die maximale Anzahl, wie oft das Ereignis möglicherweise auftreten kann M beträgt, erfordert der Zähler zum Speichern dieser Information N = log2 M Bits. Falls beispielsweise gewünscht wird bis zu 1 Million Ereignisse zu beobachten, ist man dazu gezwungen, 20 Bits 3 Bytes zu verwenden, um diesen Zähler zu speichern. Es ist zu beachten, dass 20 Bits = 2,5 Bytes = 20 Bits und 220 = 1048576. Wenn nun derart viele Ereigniszähler erforderlich sind, kann der erforderliche Gesamtspeicher zum Speichern aller Zähler beträchtlich sein. Dies ist genau der Fall, wenn es darum geht, Hot Counts in Flash Speichern auf Basis eines Zählers pro Sektor zu implementieren. Auch kann das Aktualisieren des Hot Count von jedem Sektor bei jedem Ereignis, bei dem der Sektor entweder programmiert oder gelöscht wird, eine Belastung im Hinblick auf sowohl Geschwindigkeitsleistung als auch eine Beanspruchung durch die häufige Aktualisierung des Hot Count von jedem Sektor sein. Jeder 512 Byte-Sektor, der einen Hot Count enthält, benötigte üblicherweise 3 zusätzliche Bytes, um zu speichern, wie häufig der Sektor Zyklen durchlaufen hat (programmiert und gelöscht).
  • DER EINFACHE ANSATZ DER VERWENDUNG EINER UNVERÄNDERLICHEN INKREMENTIERUNGSWAHRSCHEINLICHKEIT
  • Die neue Idee ermöglicht die Komprimierung der 3 Hot Count Bytes pro Sektor auf 1 Hot Count Byte pro Sektor. Wenn man bereit ist, dass die Genauigkeit abnimmt, ist das neue Hot Counter Schema in seiner einfachsten Form wie folgt: Verwenden eines 12 Bit Pseudo-Zufallszahlengenerators, der eine Wahrscheinlichkeit p generieren kann (in diesem Fall p = 1/4096 = 0,0002444). Eine Art und Weise diese Wahrscheinlichkeit zu generieren besteht darin, einen zufälligen binären 12 Bit Integer bei jedem Ereignis zu generieren, bei dem ein Sektor programmiert oder gelöscht wird. Falls dieser 12 Bit Integer mit einem bestimmten 12 Bit Integer (angenommen 101111010001) übereinstimmt, wird dann und nur dann der zum Sektor zugehörige Zähler inkrementiert, der im Begriff ist, beschrieben zu werden. Zu beachten ist, dass 212 = 4096. Jedes Mal, wenn ein Sektor programmiert wird, besteht eine Wahrscheinlichkeit p, dass der Zähler dieses Sektors um den Integerwert 1 erhöht wird. Durchschnittlich wird der Zähler bei jeweils 4096 Programmierereignissen inkrementiert.
  • Nun muss zwischen dem aktuellen Zähler A unterschieden werden, der die aktuelle Anzahl angibt, wie oft ein gegebener Sektor programmiert wurde, und der Darstellung dieses Zählers R, der ungefähr 4096 mal kleiner ist als A. Was gespeichert und beobachtet wird ist R = r. Der Wert von R zu jedem gegebenen Zeitpunkt wird nicht den Wert von A = a exakt ermitteln, wird aber ein Ball Park Schätzwert des Wertes von A zur Verfügung stellen. Wenn R klein ist, dann ist R ein sehr schlechter Indikator für A, aber wenn R größer wird, dann wird R in gewisser Hinsicht ein genauerer Indikator für A. Hier repräsentieren "R" und "A" Zufallsvariablen, während "r" und "a" bestimmte Integerwerte repräsentieren, die diese Zufallsvariablen annehmen können.
  • E kann als das Ereignis definiert werden, bei dem R inkrementiert. Dann ist
    die Wahrscheinlichkeit (E) = Pr (E) = p, und die Wahrscheinlichkeit (nicht E) = Pr(E –)= 1 – p "r" = Anzahl, wie häufig E in "a" Versuchen erfolgt = Zufallsvariable mit Wahrscheinlichkeitsdichtefunktion (f|a), was durch die Binominalverteilung gegeben ist: Pr(R = r|A = a) = f(r|a) = (a!/(r! (a – r)!))pr(1 – p)(a-r) {Der Mittelwert von R} – Exp(R) = a·p. {Die Standardabweichung von R} = SD(R) = √a p·(1 – p)]
  • Die oben stehenden Formeln sind aus der Binominalverteilung bekannt. Zum Zwecke dieses Hot Count Schemas ist es erforderlich, den Erwartungswert von A bei einem gegebenen bekannten Wert von R und die Standardabweichung von A bei einem bekannten Wert von R zu kennen. Dies ist der Fall, da zu einem gegebenen Zeitpunkt nur der Wert von R gespeichert wird und wiedererlangt werden kann und keine Kenntnis des exakten Wertes von A zurückbehalten wurde.
  • Einer besteht im Versuch, dass Exp(A|R = r) = r/p. Obwohl dies korrekt sein kann, muss man sich auf das Bayestheorem berufen, um einen Ausdruck für Pr(R = r|A = a) = f(a|r) abzuleiten, und dann kann diese Wahrscheinlichkeitsdichtefunktion dazu verwendet werden um Exp(A|R = r) und SD(A|R) zu berechnen.
  • Das Bayestheorem besagt folgendes:
    Figure 00230001
  • Der Nenner auf der rechten Seite in der obigen Gleichung kann unter Verwendung der folgenden Identität umgeschrieben werden:
    Figure 00230002
    wobei bekannt ist, dass der aktuelle Zähler von A nie kleiner als die Darstellung von R sein kann (infolgedessen startet die Summation bei r) und es wird angenommen, dass der aktuelle Zähler A nie größer als eine große Zahl M (angenommen M = 1000000 oder M = 10000000) sein kann. Daher bildet {A = r, A = r + 1, A = r + 2, ... A = M} eine Teilung. Auch durch die Definition einer bedingten Wahrscheinlichkeit:
    Figure 00230003
  • In der Statistik gib es ein Theorem mit dem Namen "The Admissibility of Uniform Distribution for Bayesian Estimates", das aussagt, dass in Fällen wie bei diesem hier es sicher ist, anzunehmen, dass die Zufallsvariable A gleichförmig verteilt is. Mit anderen Worten, falls angenommen wird, dass der aktuelle Zähler nie größer als M werden kann und der Wert der Darstellung von R nicht bekannt ist, dann kann der Wert von A bei einer zufälligen Instanz ein Integer von 0 bis M sein, wobei jeder Integerwert die gleiche Wahrscheinlichkeit wie jede andere hat. Daher ist Pr (A = s) = konstant = (1/(M + 1)) und diese Konstante kann aus der Summation herausgezogen werden:
    Figure 00230004
    und da A gleichförmig verteilt ist, gilt Pr(A = s) = Pr (A = a) für einen beliebigen Wert von s und für einen beliebigen Wert von a:
    Figure 00240001
    wobei:
    Figure 00240002
  • Somit:
    Figure 00240003
    Wahrscheinlichkeit, dass (A = a) bei (R = r).
  • Der Mittelwert von A bei R = r ist gegeben durch:
    Figure 00250001
  • Die Varianz von (A|R = r) ist:
    Figure 00250002
  • Die Standardabweichung von A bei R = r ist:
    Figure 00250003
  • Wie aus den obigen Formeln ersichtlich ist, sind selbst in diesem einfachen Fall, bei dem p = konstant, für die Berechnung Computerprogramme erforderlich. Wald's Gleichung (siehe "STOCHASTIC PROCESSES" von Sheldon M. Ross, John Wiley & Sons (1983) 59 ff) kann dazu verwendet werden, den folgenden Ausdruck für x zu erhalten: Exp (A|R = r) = Exp(R|A = a)/p = r/p. Im Falle von p = 1/4096 ist daher Exp(A|R = r) = 4095*r.
  • Ein weiteres Verfahren zum Berechnen sowohl der Erwartungswerte als auch der Standardabweichungen von A bei einem gegebenen Wert R = r besteht im Durchführen von Monte Carlo Simulationen. Diese Simulationen sind vor allem dann nützlich, wenn ein komplizierterer Algorithmus adoptiert wird, wie zum Beispiel der "r dependent p value algorithm", der im nächsten Abschnitt behandelt wird. Da jedes Schema zum Generieren von Zufallszahlen tatsächlich Pseudo-Zufallszahlen mit einer Verteilung generiert, die nicht vollkommen gleichmäßig ist, besteht die beste Plattform, mit der die Monte Carlo Simulation ausgeführt wird, aus einem gleich hergestellten Prozessor und Firmware. Auf diese Art und Weise werden die Unvollkommenheiten des Schemas zum Generieren von Zufallszahlen auch in die Simulation mit einbezogen.
  • Die Monte Carlo Simulation wird in diesem Fall aus 2 Phasen bestehen. Die erste Phase besteht aus zwei Schleifen, wobei eine Schleife in der anderen Schleife verschachtelt ist. Die innere Schleife wird den aktuellen Zähler "a" bei jedem Durchlauf um eins inkrementieren. Auch jedes Mal, wenn der Integer "a" inkrementiert wird, wird ein zufälliger binärer 12 Bit Integer b generiert, wenn und nur wenn dieser Integer gleich "101111010001" wird, dann wird die Darstellung "r" inkrementiert. Wie zuvor besprochen beträgt die Wahrscheinlichkeit für eine derartige Übereinstimmung 1 zu 4096. Es ist zu beachten, dass "a" und "r" in der äußeren Schleife und außerhalb der inneren Schleife auf Null gesetzt werden. Dies ermöglicht es, bei jedem Versuch mit a = 0 and r = 0 zu starten. Die innere Schleife wird wiederholt, solange r < 256. Im Durchschnitt wird die innere Schleife 1 Million Mal durchlaufen. Die innere Schleife simuliert, was dem Hot Counter eines einzelnen Sektors zustößt, wenn der Sektor ungefähr 1 Million Mal zyklisch geschaltet wurde. Dies kann als ein einzelner Versuch bezeichnet werden. Andererseits simuliert die äußere Schleife viele Versuche. Die äußere Schleife kann 10000 Mal durchlaufen werden, um eine statistisch signifikante Stichprobe vieler Versuche zu erzeugen. Um die Daten zu minimieren, die während der ersten Phase gespeichert werden müssen, ist es nur erforderlich, diejenigen Werte von "a" zu speichern, die "r" zu inkrementieren entsprechen.
  • Eine Datei kann für jeden festen Wert von "r" vorgesehen werden. Wenn zum Beispiel die Datei mit dem Namen r123.out 10000 Integer enthält, welche die Werte von "a" sind, wenn "r" 123 über den 10000 Versuchen wurde. Dies wird 255 Ausgabedateien hervorbringen. In Phase 2 wird jeder der 255 Ausgabedateien abgearbeitet, um den Mittelwert und die Standardabweichung für jede der 255 Werte von "r" ungleich Null zu erhalten.
  • EIN KOMPLEXERER ANSATZ UNTER VERWENDUNG EINES VARIABLEN WAHRSCHEINLICHKEITSWERTES FÜR INKREMENTIERUNGEN
  • Ein komplexerer Algorithmus kann adoptiert werden, um das Verhältnis von (der Standardabweichung von A bei R = r) zu (dem Erwartungswert bei R = "r") für unterschiedliche Werte von "r" mehr oder weniger konstant zu halten. Dies ist nützlich, da dies die relative Unsicherheit des Wertes "a" basierend auf der Kenntnis des Wertes "r" begrenzt. In diesem neuen Schema steht die Wahrscheinlichkeit "p", dass "r" inkrementiert wird, mit dem derzeitigen Wert von "r" in Verbindung:
    Wenn 0 ≤ r < 16, dann p = 1/20 = 1,0
    wenn 16 ≤ r < 32, dann p = 1/21 = 1/2 = 0,5
    wenn 32 ≤ r < 48, dann p = 1/22 = 1/4 = 0,25
    ...
    ...
    ...
    wenn 48 ≤ r < 64, dann p = 1/23 1/8 = 0,125
    wenn 240 ≤ r < 256, dann p = 1/215 = 1/32768 = 0,0000305
  • "r" kann als ein einfacher Zähler von 00000000 bis 11111111 in binärer Form mit einer dezimalen Äquivalenz von 0 bis 255 dargestellt werden. Hexadezimal kann sich der Wert "r" zwischen 00h und FFh bewegen. Jedem Benutzer des Hot Count "r" wird eine Tabelle bereitgestellt, die einen Mittelwert von A und eine Standardabweichung von A für jeden der 256 unterschiedlichen Werte von "r" zur Verfügung stellt. Alternativ kann "r" in Form einer 4-Bit-Mantisse und einem 4 Bit-Exponenten dargestellt werden, was später erläutert wird. Aber diese Darstellung ist bestenfalls beschwerlich.
  • Die Monte Carlo Simulation ist für dieses Schema gegenüber dem zuvor erläuterten einfachen Schema sehr ähnlich, mit dem Unterschied, dass nun der Wert von "p" vom derzeitigen Wert von "r", wir oben erläutert, abhängig sein wird.
  • EIN NEUER HOT COUNT UND ZÄHLSCHEMA FÜR EINEN SPEZIFISCHEN SPEICHER
  • Jede Seite (64 Sektoren) wird einen ein Byte langen Hot Count haben, der außerhalb der eigenen Seite und in einer Tabelle in einer anderen Seite gespeichert wird. Der Hot Count wird jedes Mal im Controller-RAM inkrementiert, wenn entschieden wird, dass es erforderlich ist, den Zähler zu inkrementieren. Jedes Mal, wenn eine Seite gelöscht wird, wird eine Entscheidung getroffen, ob der zugehörige Hot Count inkrementiert wird, oder nicht. Bei diesem Schema werden die Chancen, dass der Hot Count inkrementiert wird, ungefähr umgekehrt proportional zum aktuellen Wert des Zählers sein.
  • Die Tabelle, welche die Hot Counts enthält, muss etwa 5000 Bytes haben, um die Hot Counts von etwa 5000 Seiten aufzunehmen. Angenommen 230 = 1 Gbit, dann sind 4096 Seiten erforderlich, um eine Benutzerkapazität von 1 Gbit zu haben. Eine aus nur 10 Sektoren bestehende Tabelle wird in der Lage sein, die Hot Counts des gesamten Chips aufzunehmen. Jedes nachfolgende Byte dieser Tabelle entspricht dem Hot Count der nächsten physikalischen Seite. Wenn mehrere Seiten geschrieben werden, können die Hot Counts im RAM aktualisiert werden bis eine Partitionsgrenze erreicht wird, wobei an diesem Punkt der Sektor, der die Hot Count Tabelle aufnimmt, die der Partition entspricht, in einem Male aktualisiert wird. Es kann eine Hot Count Tabelle definiert werden, die jeweils aus 64 Byte besteht, wobei jedes der Hot Count einer einzelnen Seite ist, die zur gleichen Partition gehört. Eine Hot Count Tabelle wird nicht über zwei Sektoren geteilt (d. h. jeder "Hot Count Tabellensektor enthält 8 komplette "Hot Count Tabellen") Jedes Mal, wenn eine Lese- oder Schreiboperation eine Partitionsgrenze überschreitet, wird ein Hot Count Tabellensektor aktualisiert und alle Hot Count Tabellensektoren werden gelesen und abgearbeitet, so dass Wear Leveling, Scrubbing und Retirement Activity nun durchgeführt werden können. Die logische Reihenfolge der Hot Count Bytes repräsentieren die physikalische Reihenfolge der entsprechenden Seiten. Auch die logische Reihenfolge der Hot Count Tabellen repräsentiert die physikalische Reihenfolge der entsprechenden Partitionen.
  • Aktualisieren eines Hot Count Sektors wird normalerweise nicht einmal ein Löschen erfordern, da wie mit jedem anderen Sektor das Aktualisieren eines Sektors nur erfordert, die Sektordaten in einen pre-gelöschten Sektor zu schreiben und das Abbild zu aktualisieren, um wiederzugeben, wo sich die letzte Version der Daten befindet. Da eine Partition aus 64 Seiten besteht, werden die Hot Counts, die der Partition entsprechen, nur 64 Bytes sein. In diesem Schema wird das einzelne Hot Count Byte von jeder Seite während einer Million Zyklen nur 256 Mal inkrementiert. Selbst wenn das Hot Count jeder Seite aktualisiert würde, sobald es inkrementiert wurde, und der Sektor, der die Hot Counts von 512 Seiten aufnimmt, niemals umhergewandert wäre, dann würde der Hot Count Tabellensektor 512*256 = 131072 Mal aktualisiert werden. Dabei wird angenommen, dass alle und jede dieser 512 Seiten 1 Million mal zyklisch geschaltet wurden. Falls Benutzersektoren 1 Million Zyklen tolerieren können, dann können die Hot Count Sektoren auch 131 Tausend Zyklen tolerieren.
  • DAS HOT COUNT SCHEMA
  • Der 8 Bit Zähler, der jeder Seite entspricht, wird aus einer 4 Bit Mantisse M und einem 4 Bit Exponent E bestehen. Wenn der Hot Count 01010010 beträgt, dann sind M = 01012 = 510 und E = 00102 = 210. Da in diesem Beispiel der Exponent 210 ist, muss ein Korrekturterm A = 11002 zur Mantisse addiert werden, um eine effektive Mantisse N zu generieren, wobei N = N(E) und A = A(E) Funktionen von E sind. Nun ist der aktuelle Hot Count zur Basis 10 = N(E)10* 210** E10 [M + A(E)]* (2**E). Alternativ ist der Hot Count zur Basis 2 = N(E)* (10)** E. Für Zähler von 0 bis 15 wird jedes Löschen der Seite den Hot Count einer Sicherheit von 100% inkrementieren. Für Zähler von 16 bis 46 hat jedes Löschen eine Wahrscheinlichkeit von 50%, dass der Hot Count inkrementiert wird.
  • Im Allgemeinen ist die Wahrscheinlichkeit p für ein Inkrementieren eine Funktion von E gegeben durch: p = 1/(2**E).
  • Die folgenden Werte sind Werte von A(E):
    A(0000)= 0000,
    A(0001) = 1000,
    A(0010) = 1100,
    A(0011) = 1110,
    A(0100) = 1111,
    A(0101) = 1111,
    A(0110) = 1111,
    A(0111) = 1111,
    ...
    A(1111) = 1111
  • Die größtmögliche Anzahl L ist gegeben durch M = 1111 und E = 1111:
    L = (1111 + 1111)* ((10)** (1111)= 101579210
  • Das kleinste p beträgt 1/32768.
  • Die gleiche Methodik kann auch auf Zähler bei Zählvorgängen angewendet werden. Siehe die beigefügte Excel Tabelle für Details dieses Schemas. Da die zyklisch geschalteten Zellen langsamer altern, wenn diese im Vergleiche zu Beginn der Lebensdauer häufi ger zyklisch in Betrieb waren, hat dieser entsprechende Hot Count für Wear Leveling- und Retirement-Zwecke eine ausreichende Auflösung.

Claims (8)

  1. Verfahren zum Betrieb eines komprimierten Zählers eines auftretenden Ereignisses, das sich während eines Betriebes eines elektronischen Systems (11, 17) wiederholt, umfassend: generieren einer Zufallszahl (52) beim einzelnen Auftreten des Ereignisses, ermitteln, wann die generierte Zufallszahl (52) mit zumindest einem vorgegebenen Wert (55) übereinstimmt, und als Antwort darauf, dass die generierte Zufallszahl (52) mit zumindest einem vorgegebenen Wert übereinstimmt (55), aktualisieren eines komprimierten Zählers des Ereignisses im elektronischen System.
  2. Verfahren gemäß Anspruch 1, wobei der zumindest eine vorgegebene Wert (55) einer von N verschiedenen Zufallszahlwerten ist, die generiert werden können, eine maximal erwartete Anzahl M von Ereignissen ist, die im elektronischen System (11, 17) auftreten dürfen, und der verdichtete Zähler bis zumindest einer Anzahl gleich M geteilt durch N betreibbar ist.
  3. Verfahren gemäß Anspruch 1, zusätzlich umfassend setzen eines Zufallszahlgenerators (51) beim Initialisieren des elektronischen Systems (11, 17) mit einem von einem zweiten Zufallszahlgenerator (71) generierten Wert.
  4. Verfahren gemäß Anspruch 1, wobei ermittelt wird, wann die generierte Zufallszahl (52) mit dem zumindest einen vorgegebenen Wert (55) übereinstimmt die Anzahl der Ereignisse berücksichtigt, die kumulativ aufgetreten sind, um eine Wahrscheinlichkeit zu verringern, dass das Übereinstimmen für eine einzeln generierte Zufallszahl (52) auftreten wird, wenn die kumulative Anzahl der Ereignisse ansteigt.
  5. Verfahren gemäß einem der vorhergehenden Ansprüche, wobei das Verfahren in einem elektronischen System ausgeführt wird, das einen nichtflüchtigen Flash Speicher (17) enthält und das wiederkehrende Ereignis Löschen eines adressierten Teils des Flash Speichers (17) beinhaltet.
  6. Verfahren gemäß Anspruch 5, wobei sowohl die Zufallszahl (52) generiert wird als auch ermittelt wird, wann die generierte Zufallszahl (52) mit dem zumindest einen vorgegebenen Wert (55) übereinstimmt, während ein einzelner Löschspannungspuls auf den adressierten Teil des Flash Speichersystems (17) angewendet wird.
  7. Ein Flash EEPROM System umfassend: eine Vielzahl von Blöcken (38, 61) von nichtflüchtigen Speicherzellen, wobei die Zellen in einzelnen Blöcken gleichzeitig löschbar sind, und ein einen Mikroprozessor (23) enthaltenden Controller (11), der Programmieren von Daten in adressierte Blöcke (38, 61) von Speicherzellen steuert, Lesen von Daten von adressierten Blöcken (38, 61) von Speicherzellen steuert und Löschen von Daten von einem oder mehreren jeweils adressierten Blöcken (38, 61) von Speicherzellen steuert, GEKENNZEICHNET DURCH einen zur Verfügung stehenden Speicher in der Vielzahl von Blöcken (38, 61) von Speicherzellen, der mit einzelnen Speicherzellblöcken (38, 61) in Zusammenhang stehenden Zähler betreibt, ein Zahlengenerator (51), der als Antwort auf einen oder mehrere der adressierten Blöcke (38, 61), die gelöscht werden, zufällig eine Zahl (52) generiert, ein Komparator (57), der zumindest eine der Zählungen hervorruft, die mit einem oder mehreren adressierten Blöcken (38, 61) in Zusammenhang steht, die gelöscht oder aktualisiert werden, wenn die generierte Zufallszahl (52) mit einem vorgegebenen Wert (55) zumindest mit einer von möglichen vom Zufallsgenerator (51) generierten Zahlen übereinstimmt.
  8. Anordnung gemäß Anspruch 7, wobei der Zahlengenerator (51) durch Generieren einer (52) von einer gesteuerten Gesamtzahl von möglichen unterschiedlichen Zufallszahlen gekennzeichnet ist, und wobei die Gesamtzahl von möglichen unterschiedlichen Zufallszahlen durch die zumindest eine Zählung, die mit einem oder mehreren adressierten Blöcken (38, 61) in Zusammenhang steht, die gelöscht werden, gesteuert wird.
DE60131549T 2000-09-14 2001-09-06 Komprimiertes ereigniszählverfahren und seine anwendung an einem flash-speichersystem Expired - Lifetime DE60131549T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/662,032 US6345001B1 (en) 2000-09-14 2000-09-14 Compressed event counting technique and application to a flash memory system
US662032 2000-09-14
PCT/US2001/027703 WO2002023552A2 (en) 2000-09-14 2001-09-06 Compressed event counting technique and application to a flash memory system

Publications (2)

Publication Number Publication Date
DE60131549D1 DE60131549D1 (de) 2008-01-03
DE60131549T2 true DE60131549T2 (de) 2008-10-23

Family

ID=24656097

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60131549T Expired - Lifetime DE60131549T2 (de) 2000-09-14 2001-09-06 Komprimiertes ereigniszählverfahren und seine anwendung an einem flash-speichersystem

Country Status (9)

Country Link
US (3) US6345001B1 (de)
EP (1) EP1317756B1 (de)
JP (1) JP2004509404A (de)
KR (1) KR100782297B1 (de)
CN (1) CN100580800C (de)
AU (1) AU2001288844A1 (de)
DE (1) DE60131549T2 (de)
TW (1) TW525177B (de)
WO (1) WO2002023552A2 (de)

Families Citing this family (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5657332A (en) * 1992-05-20 1997-08-12 Sandisk Corporation Soft errors handling in EEPROM devices
US6426893B1 (en) * 2000-02-17 2002-07-30 Sandisk Corporation Flash eeprom system with simultaneous multiple data sector programming and storage of physical block characteristics in other designated blocks
US7113432B2 (en) * 2000-09-14 2006-09-26 Sandisk Corporation Compressed event counting technique and application to a flash memory system
US6851000B2 (en) * 2000-10-03 2005-02-01 Broadcom Corporation Switch having flow control management
US6957202B2 (en) * 2001-05-26 2005-10-18 Hewlett-Packard Development Company L.P. Model selection for decision support systems
US6732221B2 (en) * 2001-06-01 2004-05-04 M-Systems Flash Disk Pioneers Ltd Wear leveling of static areas in flash memory
US7554842B2 (en) * 2001-09-17 2009-06-30 Sandisk Corporation Multi-purpose non-volatile memory card
US6717847B2 (en) * 2001-09-17 2004-04-06 Sandisk Corporation Selective operation of a multi-state non-volatile memory system in a binary mode
US7246268B2 (en) * 2002-01-16 2007-07-17 Sandisk Corporation Method and apparatus for dynamic degradation detection
JP3833970B2 (ja) 2002-06-07 2006-10-18 株式会社東芝 不揮発性半導体メモリ
US6944063B2 (en) * 2003-01-28 2005-09-13 Sandisk Corporation Non-volatile semiconductor memory with large erase blocks storing cycle counts
FR2851074B1 (fr) * 2003-02-10 2005-04-22 St Microelectronics Sa Memoire flash sectorisee comprenant des moyens de controle et de rafraichissement de cellules memoire
JP4289026B2 (ja) * 2003-05-28 2009-07-01 日本電気株式会社 半導体記憶装置
US7012835B2 (en) * 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
US7173852B2 (en) * 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
TWM264642U (en) * 2004-08-27 2005-05-11 Incomm Technologies Co Ltd Flash memory device having plural communication protocols
JP4261462B2 (ja) * 2004-11-05 2009-04-30 株式会社東芝 不揮発性メモリシステム
US7441067B2 (en) 2004-11-15 2008-10-21 Sandisk Corporation Cyclic flash memory wear leveling
US7395404B2 (en) 2004-12-16 2008-07-01 Sandisk Corporation Cluster auto-alignment for storing addressable data packets in a non-volatile memory array
US7386655B2 (en) * 2004-12-16 2008-06-10 Sandisk Corporation Non-volatile memory and method with improved indexing for scratch pad and update blocks
US7366826B2 (en) * 2004-12-16 2008-04-29 Sandisk Corporation Non-volatile memory and method with multi-stream update tracking
US7315916B2 (en) * 2004-12-16 2008-01-01 Sandisk Corporation Scratch pad block
US7412560B2 (en) * 2004-12-16 2008-08-12 Sandisk Corporation Non-volatile memory and method with multi-stream updating
US7315917B2 (en) 2005-01-20 2008-01-01 Sandisk Corporation Scheduling of housekeeping operations in flash memory systems
US20060161724A1 (en) * 2005-01-20 2006-07-20 Bennett Alan D Scheduling of housekeeping operations in flash memory systems
US7283395B2 (en) * 2005-06-24 2007-10-16 Infineon Technologies Flash Gmbh & Co. Kg Memory device and method for operating the memory device
US7467253B2 (en) * 2006-04-13 2008-12-16 Sandisk Corporation Cycle count storage systems
US7451264B2 (en) * 2006-04-13 2008-11-11 Sandisk Corporation Cycle count storage methods
US7495966B2 (en) * 2006-05-01 2009-02-24 Micron Technology, Inc. Memory voltage cycle adjustment
US7778077B2 (en) * 2006-05-15 2010-08-17 Sandisk Corporation Non-volatile memory system with end of life calculation
US7474560B2 (en) * 2006-08-21 2009-01-06 Micron Technology, Inc. Non-volatile memory with both single and multiple level cells
US7886204B2 (en) * 2006-09-27 2011-02-08 Sandisk Corporation Methods of cell population distribution assisted read margining
US7716538B2 (en) 2006-09-27 2010-05-11 Sandisk Corporation Memory with cell population distribution assisted read margining
WO2008038260A1 (en) * 2006-09-27 2008-04-03 Nds Limited Counter in memory
US20080091901A1 (en) * 2006-10-12 2008-04-17 Alan David Bennett Method for non-volatile memory with worst-case control data management
US20080091871A1 (en) * 2006-10-12 2008-04-17 Alan David Bennett Non-volatile memory with worst-case control data management
KR100817204B1 (ko) * 2006-12-22 2008-03-27 재단법인서울대학교산학협력재단 플래시 메모리의 매핑 방법 및 장치
US7929372B2 (en) * 2007-01-25 2011-04-19 Samsung Electronics Co., Ltd. Decoder, memory system, and physical position converting method thereof
KR100929155B1 (ko) * 2007-01-25 2009-12-01 삼성전자주식회사 반도체 메모리 장치 및 그것의 메모리 셀 억세스 방법
US7573773B2 (en) * 2007-03-28 2009-08-11 Sandisk Corporation Flash memory with data refresh triggered by controlled scrub data reads
US7477547B2 (en) * 2007-03-28 2009-01-13 Sandisk Corporation Flash memory refresh techniques triggered by controlled scrub data reads
US20080294814A1 (en) * 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Flash Memory System with Management of Housekeeping Operations
US20080294813A1 (en) * 2007-05-24 2008-11-27 Sergey Anatolievich Gorobets Managing Housekeeping Operations in Flash Memory
CN101377958B (zh) * 2007-08-31 2010-12-15 上海华虹Nec电子有限公司 监控闪存擦写性能的方法
US7916543B2 (en) * 2007-10-22 2011-03-29 Micron Technology, Inc. Memory cell operation
US8296498B2 (en) * 2007-11-13 2012-10-23 Sandisk Technologies Inc. Method and system for virtual fast access non-volatile RAM
KR101517185B1 (ko) * 2008-04-15 2015-05-04 삼성전자주식회사 메모리 시스템 및 그것의 동작 방법
US7924623B2 (en) 2008-05-27 2011-04-12 Micron Technology, Inc. Method for memory cell erasure with a programming monitor of reference cells
CN101645309B (zh) * 2008-08-05 2013-05-22 威刚科技(苏州)有限公司 非挥发性存储装置及其控制方法
KR101033465B1 (ko) * 2008-12-30 2011-05-09 주식회사 하이닉스반도체 플래쉬 메모리 장치 및 및 이를 위한 리드동작 제어 방법
US8395923B2 (en) * 2008-12-30 2013-03-12 Intel Corporation Antifuse programmable memory array
US20100174845A1 (en) * 2009-01-05 2010-07-08 Sergey Anatolievich Gorobets Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques
US8700840B2 (en) * 2009-01-05 2014-04-15 SanDisk Technologies, Inc. Nonvolatile memory with write cache having flush/eviction methods
US8040744B2 (en) * 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8244960B2 (en) 2009-01-05 2012-08-14 Sandisk Technologies Inc. Non-volatile memory and method with write cache partition management methods
US8094500B2 (en) * 2009-01-05 2012-01-10 Sandisk Technologies Inc. Non-volatile memory and method with write cache partitioning
KR20100091544A (ko) * 2009-02-10 2010-08-19 삼성전자주식회사 메모리 시스템 및 그 마모도 관리 방법
US8806144B2 (en) * 2009-05-12 2014-08-12 Stec, Inc. Flash storage device with read cache
JP5813380B2 (ja) * 2011-06-03 2015-11-17 株式会社東芝 半導体記憶装置
CN102253894B (zh) * 2011-06-14 2013-09-04 沈阳建筑大学 一种闪存存储器等概率连续空间存储文件的方法
US8750042B2 (en) 2011-07-28 2014-06-10 Sandisk Technologies Inc. Combined simultaneous sensing of multiple wordlines in a post-write read (PWR) and detection of NAND failures
US20130031431A1 (en) * 2011-07-28 2013-01-31 Eran Sharon Post-Write Read in Non-Volatile Memories Using Comparison of Data as Written in Binary and Multi-State Formats
US8726104B2 (en) 2011-07-28 2014-05-13 Sandisk Technologies Inc. Non-volatile memory and method with accelerated post-write read using combined verification of multiple pages
US8694754B2 (en) * 2011-09-09 2014-04-08 Ocz Technology Group, Inc. Non-volatile memory-based mass storage devices and methods for writing data thereto
US9026592B1 (en) 2011-10-07 2015-05-05 Google Inc. Promoting user interaction based on user activity in social networking services
US9183259B1 (en) 2012-01-13 2015-11-10 Google Inc. Selecting content based on social significance
US8843491B1 (en) 2012-01-24 2014-09-23 Google Inc. Ranking and ordering items in stream
US9177065B1 (en) * 2012-02-09 2015-11-03 Google Inc. Quality score for posts in social networking services
TWI454916B (zh) * 2012-05-08 2014-10-01 Phison Electronics Corp 儲存單元管理方法、記憶體控制器與記憶體儲存裝置
US8750045B2 (en) 2012-07-27 2014-06-10 Sandisk Technologies Inc. Experience count dependent program algorithm for flash memory
US9454519B1 (en) 2012-08-15 2016-09-27 Google Inc. Promotion and demotion of posts in social networking services
US9213601B2 (en) 2013-12-03 2015-12-15 Sandisk Technologies Inc. Adaptive data re-compaction after post-write read verification operations
US9230689B2 (en) 2014-03-17 2016-01-05 Sandisk Technologies Inc. Finding read disturbs on non-volatile memories
US9529570B2 (en) 2014-03-19 2016-12-27 Seagate Technology Llc Random number generation using pulsed programming parameters
WO2015172352A1 (en) 2014-05-15 2015-11-19 Seagate Technology Llc Storage device tampering detection
US9728278B2 (en) 2014-10-24 2017-08-08 Micron Technology, Inc. Threshold voltage margin analysis
US9552171B2 (en) 2014-10-29 2017-01-24 Sandisk Technologies Llc Read scrub with adaptive counter management
US9978456B2 (en) 2014-11-17 2018-05-22 Sandisk Technologies Llc Techniques for reducing read disturb in partially written blocks of non-volatile memory
US9349479B1 (en) 2014-11-18 2016-05-24 Sandisk Technologies Inc. Boundary word line operation in nonvolatile memory
US9449700B2 (en) 2015-02-13 2016-09-20 Sandisk Technologies Llc Boundary word line search and open block read methods with reduced read disturb
US9921969B2 (en) 2015-07-14 2018-03-20 Western Digital Technologies, Inc. Generation of random address mapping in non-volatile memories using local and global interleaving
US10445232B2 (en) 2015-07-14 2019-10-15 Western Digital Technologies, Inc. Determining control states for address mapping in non-volatile memories
US10452560B2 (en) 2015-07-14 2019-10-22 Western Digital Technologies, Inc. Wear leveling in non-volatile memories
US10452533B2 (en) 2015-07-14 2019-10-22 Western Digital Technologies, Inc. Access network for address mapping in non-volatile memories
US10445251B2 (en) 2015-07-14 2019-10-15 Western Digital Technologies, Inc. Wear leveling in non-volatile memories
US9653154B2 (en) 2015-09-21 2017-05-16 Sandisk Technologies Llc Write abort detection for multi-state memories
CN108885609A (zh) * 2016-04-05 2018-11-23 慧与发展有限责任合伙企业 基于预先计算的模拟结果的模拟
US10536266B2 (en) 2017-05-02 2020-01-14 Seagate Technology Llc Cryptographically securing entropy for later use
US11545221B2 (en) 2018-06-29 2023-01-03 Sandisk Technologies Llc Concurrent programming of multiple cells for non-volatile memory devices
US10978156B2 (en) 2018-06-29 2021-04-13 Sandisk Technologies Llc Concurrent programming of multiple cells for non-volatile memory devices

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61100565A (ja) 1984-10-22 1986-05-19 Green Cross Corp:The インド−ル酢酸誘導体
US5043940A (en) 1988-06-08 1991-08-27 Eliyahou Harari Flash EEPROM memory systems having multistate storage cells
US5172338B1 (en) 1989-04-13 1997-07-08 Sandisk Corp Multi-state eeprom read and write circuits and techniques
EP0618535B1 (de) 1989-04-13 1999-08-25 SanDisk Corporation EEPROM-Karte mit Austauch von fehlerhaften Speicherzellen und Zwischenspeicher
US5200959A (en) 1989-10-17 1993-04-06 Sundisk Corporation Device and method for defect handling in semi-conductor memory
US5270979A (en) 1991-03-15 1993-12-14 Sundisk Corporation Method for optimum erasing of EEPROM
US5663901A (en) 1991-04-11 1997-09-02 Sandisk Corporation Computer memory cards using flash EEPROM integrated circuit chips and memory-controller systems
US5430859A (en) 1991-07-26 1995-07-04 Sundisk Corporation Solid state memory system including plural memory chips and a serialized bus
US6230233B1 (en) 1991-09-13 2001-05-08 Sandisk Corporation Wear leveling techniques for flash EEPROM systems
US5712180A (en) 1992-01-14 1998-01-27 Sundisk Corporation EEPROM with split gate source side injection
US5532962A (en) 1992-05-20 1996-07-02 Sandisk Corporation Soft errors handling in EEPROM devices
US5315541A (en) 1992-07-24 1994-05-24 Sundisk Corporation Segmented column memory array
US5428621A (en) 1992-09-21 1995-06-27 Sundisk Corporation Latent defect handling in EEPROM devices
US5341339A (en) 1992-10-30 1994-08-23 Intel Corporation Method for wear leveling in a flash EEPROM memory
FR2700040B1 (fr) 1992-12-31 1995-02-17 Gemplus Card Int Carte à puce avec données et programmes protégés contre le vieillissement.
US5353256A (en) 1993-06-30 1994-10-04 Intel Corporation Block specific status information in a memory device
US5568423A (en) * 1995-04-14 1996-10-22 Unisys Corporation Flash memory wear leveling system providing immediate direct access to microprocessor
AU767018B2 (en) * 1998-09-14 2003-10-30 Igt Random number generator seeding method and apparatus
US6388259B1 (en) 2000-06-08 2002-05-14 The Boeing Company Radiation detection method and apparatus
US6307779B1 (en) * 2000-07-28 2001-10-23 Micron Technology, Inc. Method and circuitry for bank tracking in write command sequence

Also Published As

Publication number Publication date
CN100580800C (zh) 2010-01-13
AU2001288844A1 (en) 2002-03-26
WO2002023552A2 (en) 2002-03-21
US6345001B1 (en) 2002-02-05
TW525177B (en) 2003-03-21
JP2004509404A (ja) 2004-03-25
EP1317756A2 (de) 2003-06-11
KR20030051650A (ko) 2003-06-25
US20020075728A1 (en) 2002-06-20
US20040080995A1 (en) 2004-04-29
WO2002023552A3 (en) 2003-01-30
EP1317756B1 (de) 2007-11-21
CN1470058A (zh) 2004-01-21
DE60131549D1 (de) 2008-01-03
KR100782297B1 (ko) 2007-12-06
US6643187B2 (en) 2003-11-04

Similar Documents

Publication Publication Date Title
DE60131549T2 (de) Komprimiertes ereigniszählverfahren und seine anwendung an einem flash-speichersystem
DE60030876T2 (de) Bereichsverwaltung eines nichtflüchtigen Speichers mit hoher Kapazität
DE112014004761B4 (de) Beeinflussung des Wear-Leveling in Speichersystemen
DE60224552T2 (de) Fehlerbehandlung für beschreibbare referenz-speicherzellen zum verfolgen von einsatzspannungsdriften
DE112011102160B4 (de) Wear-levelling bei Zellen/Seiten/Teilseiten/Blöcken eines Speichers
DE69034191T2 (de) EEPROM-System mit aus mehreren Chips bestehender Blocklöschung
DE102008002083B4 (de) Flash-Speichervorrichtung und entsprechende Programmierverfahren
DE602004005939T2 (de) Vorrichtung und Verfahren zur Datenverwaltung nichtflüchtiger Speicher
DE3128740C2 (de)
DE102008033518B4 (de) Datenverarbeitungsverfahren für eine Solid-State-Disk-Steuereinheit, Solid-State-Disk-Steuereinheit und Datenspeicherelement
DE102013108491A1 (de) Nichtflüchtige Speichervorrichtung und Betriebsverfahren mit variablen Speicherzellenzustandsdefinitionen
DE102004059411A1 (de) Flash-Speichervorrichtung und Verfahren zur Steuerung derselben
DE112017005637T5 (de) Verfahren und System zur Schreibverstärkungsanalyse
DE102013013047B4 (de) Bestimmung einer Kennung
DE3128729A1 (de) Halbleiter-speichersystem
DE102020202379A1 (de) Speichersystem, speicher-controller und deren betriebsverfahren
DE102019135863A1 (de) Speichercontroller, Speichervorrichtung und Speichersystem mit verbesserten Schwellenspannungs-Verteilungseigenschaften und ähnliche Betriebsverfahren
DE102009033961A1 (de) Emulation eines einmal programmierbaren Speichers
DE102015113414A1 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE102017120826A1 (de) Verfahren und Vorrichtung zum Überwachen von Speicher unter Verwendung einer Hintergrundmedienabtastung
DE102019116097A1 (de) Vorprogramm-lesevorgang zur behebung von wortleitungsfehlern
EP0070461B1 (de) Zähler mit nichtflüchtiger Speicherung
DE112004002927T5 (de) Halbleiterbauelement und Verfahren zum Beschreiben desselben
DE102019133027A1 (de) Datenspeichersysteme und -verfahren für selbstadaptive chipfreigabeeinrichtungszeit
EP1444700A2 (de) Speichertest

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
R082 Change of representative

Ref document number: 1317756

Country of ref document: EP

Representative=s name: PATENTANWAELTE MAXTON LANGMAACK & PARTNER, DE