DE112018004373T5 - Adaptive programmierspannung für nichtflüchtige speichervorrichtungen - Google Patents

Adaptive programmierspannung für nichtflüchtige speichervorrichtungen Download PDF

Info

Publication number
DE112018004373T5
DE112018004373T5 DE112018004373.8T DE112018004373T DE112018004373T5 DE 112018004373 T5 DE112018004373 T5 DE 112018004373T5 DE 112018004373 T DE112018004373 T DE 112018004373T DE 112018004373 T5 DE112018004373 T5 DE 112018004373T5
Authority
DE
Germany
Prior art keywords
programming
setting
volatile memory
voltage
memory cells
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.)
Pending
Application number
DE112018004373.8T
Other languages
English (en)
Inventor
Xiang Yang
Huai-Yuan Tseng
Deepanshu Dutta
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 Technologies LLC
Original Assignee
SanDisk Technologies LLC
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 Technologies LLC filed Critical SanDisk Technologies LLC
Publication of DE112018004373T5 publication Critical patent/DE112018004373T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3418Disturbance prevention or evaluation; Refreshing of disturbed memory data
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0483Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells having several storage transistors connected in series
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/562Multilevel memory programming aspects
    • G11C2211/5621Multilevel programming verification

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Read Only Memory (AREA)

Abstract

Vorrichtungen, Systeme und Verfahren zum Einstellen einer Programmiereinstellung wie einer Programmierspannung einer Menge nichtflüchtiger Speicherzellen, wie beispielsweise eines SLC-NAND-Arrays, werden offenbart. Die nichtflüchtigen Speicherzellen können in einer Vielzahl von Wortleitungen angeordnet sein. Eine Teilmenge der nichtflüchtigen Speicherzellen kann konfiguriert sein, eine Programmiereinstellung zu speichern. Ein On-Die-Controller kann konfiguriert sein, die Programmiereinstellung aus der Einstellungsuntermenge zu lesen und Daten unter Verwendung der Programmiereinstellung in die nichtflüchtigen Speicherzellen zu schreiben. Der On-Die-Controller kann ferner konfiguriert sein, zu bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt, und als Reaktion auf die Bestimmung eine geänderte Programmiereinstellung in der Einstellungsteilmenge zu speichern.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Offenbarung betrifft in verschiedenen Ausführungsformen Speichervorrichtungen und insbesondere Systeme und Verfahren zum adaptiven Ändern der Programmierspannung einer nichtflüchtigen Speichervorrichtung.
  • HINTERGRUND
  • Viele Datenspeichervorrichtungen, wie beispielsweise Flash-Speichervorrichtungen, speichern Daten in Zellen nichtflüchtiger Medien. Eine physikalische Eigenschaft jeder Zelle, wie beispielsweise eine gespeicherte Ladung, Spannung, Materialphase, elektrischer Widerstand, Magnetisierung oder dergleichen, kann geändert werden, um Daten zu codieren. Die physikalische Eigenschaft einer Zelle kann über einen Bereich variabel sein, der in diskrete Zustände unterteilt werden kann, so dass unterschiedliche Zustände unterschiedlichen Datenwerten entsprechen. Das Erfassen, ob die physikalische Eigenschaft der Zelle eine oder mehrere Leseschwellen (beispielsweise Spannungsschwellen, Widerstandsschwellen oder dergleichen) innerhalb ihres Bereichs erfüllt, bestimmt den Zustand der Zelle und ermöglicht so die Wiederherstellung eines gespeicherten Datenwerts.
  • Nichtflüchtige Speichertypen umfassen, ohne darauf beschränkt zu sein, ReRAM, Memristorspeicher, programmierbare Metallisierungszellenspeicher, Phasenwechselspeicher (PCM, PCME, PRAM, PCRAM, ovonische einheitliche Speicher, Chalkogenid-RAMs oder C-RAMs), NAND-Flash-Speicher (beispielsweise 2D-NAND-Flash-Speicher, 3D-NAND-Flash-Speicher), NOR-Flash-Speicher, Nano-Direktzugriffsspeicher (Nano-RAMs oder NRAMs), Nanokristall-Drahtspeicher, siliciumoxid-basierte Sub-10-Nanometer-Prozessspeicher, Graphen-Speicher, Silicium-Oxid-Nitrid-Oxid-Silicium (SONOS), programmierbare Metallisierungszellen (PMC), Conductive Bridging RAMs (CBRAMs), magnetoresistive RAMs (MRAMs), Spin-Transfer-Torque-(STT-)MRAMs, Spin-Orbit-Torque-SOT-MRAMs, magnetische Speichermedien (beispielsweise Festplatten, Bänder), optische Speichermedien und dergleichen. Unter nichtflüchtigen Speichertypen, die zum Codieren von Informationen in zurückbleibenden Ladungen verwendet werden, können verschiedene Lade- und/oder Ladungserhaltungstechnologien verwendet werden, einschließlich, aber nicht beschränkt auf Floating-Gate- und Ladungseinfangtechnologien. In vielen der vorgenannten Technologien können die Speichertypen Änderungen der Schwellenspannung (Vth) erfahren, über der die Zelle als programmiert gelesen wird. Das Ergebnis einer solchen Schwellenspannungsverschiebung können Lesefehler in Zellen sein, wenn keine Korrekturmaßnahme ergriffen wird.
  • ZUSAMMENFASSUNG
  • Vorrichtungen und Verfahren zum Anpassen der Programmiereinstellungen eines oder mehrerer nichtflüchtiger Speicherelemente sind beschrieben. In einer Ausführungsform kann ein Speicherchip eine Menge nichtflüchtiger Speicherzellen beinhalten, die in mehreren Wortleitungen angeordnet sind, wobei eine Teilmenge der Zellen zum Speichern einer Programmiereinstellung konfiguriert ist. Der Speicherchip kann ferner einen On-Die-Controller beinhalten, der konfiguriert ist, die Programmiereinstellung aus der Teilmenge der Zellen zu lesen, Daten in die nichtflüchtigen Speicherzellen zu schreiben und unter Verwendung der Programmiereinstellung zu bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung von Daten in den nichtflüchtigen Speicherzellen bewirkt, und, als Reaktion auf das Bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung von Daten in den nichtflüchtigen Speicherzellen bewirkt, eine geänderte Programmiereinstellung in nichtflüchtigen Speicherzellen der Teilmenge speichern.
  • Die Programmiereinstellung kann eine erste Programmierspannung angeben. Der On-Die-Controller kann ferner konfiguriert sein, die Daten in die nichtflüchtigen Speicherzellen zu schreiben, indem ein einzelner Impuls bei der ersten Programmierspannung durch die nichtflüchtigen Speicherzellen gesendet wird. Die geänderte Programmiereinstellung kann eine zweite Programmierspannung angeben, die niedriger als die erste Programmierspannung ist.
  • Der On-Die-Controller kann ferner konfiguriert sein, die geänderte Programmiereinstellung in nichtflüchtigen Speicherzellen der Teilmenge zu speichern, ohne zuerst die Programmiereinstellung aus der Teilmenge zu löschen.
  • Die Vielzahl von Wortleitungen kann eine Dummy-Wortleitung mit zwei oder mehr Ersatzspalten umfassend die Teilmenge der Zellen und eine Vielzahl von Datenwortleitungen beinhalten, die von der Dummy-Wortleitung getrennt sind. Die Vielzahl von Datenwortleitungen kann zum Speichern der Daten konfiguriert sein.
  • Die Teilmenge der Zellen kann in der Nähe eines Treibers der Dummy-Wortleitung angeordnet sein.
  • Die nichtflüchtigen Speicherzellen können in einer Vielzahl von Blöcken beinhaltend einen ersten Block beinhaltend die Vielzahl von Wortleitungen und einen zweiten Block beinhaltend eine zweite Vielzahl von Wortleitungen angeordnet sein. Der On-Die-Controller kann ferner konfiguriert sein, eine zweite Programmiereinstellung aus einer zweiten Teilmenge der zweiten Vielzahl von Wortleitungen zu lesen, Daten in die nichtflüchtigen Speicherzellen der zweiten Vielzahl von Wortleitungen unter Verwendung der zweiten Programmiereinstellung zu schreiben, zu bestimmen, dass die zweite Programmiereinstellung eine suboptimale Programmierung einer oder mehrerer der nichtflüchtigen Speicherzellen der zweiten Vielzahl von Wortleitungen bewirkt, und als Reaktion auf das Bestimmen, dass die zweite Programmiereinstellung eine suboptimale Programmierung einer oder mehrerer der nichtflüchtigen Speicherzellen der zweiten Vielzahl von Wortleitungen bewirkt, eine geänderte zweite Programmiereinstellung in der zweiten Teilmenge zu speichern.
  • Der On-Die-Controller kann ferner konfiguriert sein, eine Anzahl von Zellen mit einer Schwellenspannung innerhalb eines vorbestimmten Bereichs zu bestimmen und zu bestimmen, ob die Anzahl von Zellen mit der Schwellenspannung innerhalb des vorbestimmten Bereichs ein oder mehrere Kriterien erfüllt.
  • Der On-Die-Controller kann ferner konfiguriert sein, zu bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung von Daten in den nichtflüchtigen Speicherzellen als Reaktion auf einen Auslöser bewirkt, der so konfiguriert ist, dass er aktiviert wird, nachdem eine zufällige Anzahl von Programmiervorgängen an einer oder mehreren der Wortleitungen ausgeführt wurde.
  • In einer Ausführungsform kann eine Vorrichtung eine Menge nichtflüchtiger Speicherzellen beinhalten, die in Wortleitungen angeordnet und mit Bitleitungen verbunden sind. Die Wortleitungen können eine Dummy-Wortleitung, die zum Speichern eines Programmierspannungsflags konfiguriert ist, und eine Vielzahl von Datenwortleitungen beinhalten. Die Vorrichtung kann ferner einen On-Die-Controller mit einer Speicherschaltung, die konfiguriert ist, eine erste Programmierspannung zu verwenden, die dem Programmierspannungsflag zugeordnet ist, um Benutzerdaten in nichtflüchtigen Speicherzellen der Wortleitungen zu speichern und die Benutzerdaten von nichtflüchtigen Speicherzellen der Datenwortleitungen zu löschen, einer Bestimmungsschaltung, die konfiguriert ist, zu bestimmen, dass die erste Programmierspannung eine Überprogrammierung der nichtflüchtigen Speicherzellen bewirkt, einer Einstellungsauswahlschaltung, die konfiguriert ist, als Reaktion auf das Bestimmen, dass die erste Programmierspannung eine Überprogrammierung der nichtflüchtigen Speicherzellen bewirkt, eine zweite Programmierspannung, die sich von der ersten Programmierspannung unterscheidet, auszuwählen, und einer Aktualisierungsschaltung, die konfiguriert ist, ein geändertes Programmierspannungsflag zu speichern, das der zweiten Programmierspannung in der Dummy-Wortleitung zugeordnet ist, indem mindestens ein Teil des Programmierspannungsflags mit dem geänderten Programmierspannungsflag überschrieben wird, beinhalten.
  • Die Speicherschaltung kann ferner konfiguriert sein, die Benutzerdaten zu speichern, indem ein einzelner Impuls bei der ersten Programmierspannung durch die nichtflüchtigen Speicherzellen übertragen wird. Die zweite Programmierspannung kann niedriger sein als die erste Programmierspannung.
  • Die Bestimmungsschaltung kann ferner konfiguriert sein, zu bestimmen, dass die erste Programmierspannung eine Überprogrammierung der nichtflüchtigen Speicherzellen bewirkt, indem bestimmt wird, dass der einzelne Impuls eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt.
  • Der On-Die-Controller kann ferner einen Zufallszahlengenerator, der zum Erzeugen einer Zufallszahl konfiguriert ist, und eine Bewertungsschaltung, die konfiguriert ist, zu bestimmen, dass die Zufallszahl ein oder mehrere Kriterien erfüllt, beinhalten. Die Bestimmungsschaltung kann ferner konfiguriert sein, als Reaktion auf die Bestimmung durch die Bewertungsschaltung, dass die Zufallszahl das eine oder die mehreren Kriterien erfüllt, zu bestimmen, dass der einzelne Impuls eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt.
  • Die Dummy-Wortleitung kann ferner konfiguriert sein, das Programmierspannungsflag in einer Ersatzspalte der Dummy-Wortleitung in der Nähe eines Decoders der Dummy-Wortleitung zu speichern.
  • Die Dummy-Wortleitung kann ein Byte beinhalten, das das Programmierspannungsflag mit einem oder mehreren Bits speichert, die auf einen gelöschten Zustand gesetzt sind. Die Speicherschaltung kann ferner konfiguriert sein, das geänderte Programmierspannungsflag zu speichern, indem das eine oder die mehreren Bits zu einem programmierten Zustand geändert werden, ohne ein Bit des Bytes zu einem gelöschten Zustand zu ändern.
  • Gemäß einer Ausführungsform kann ein System ein SLC-NAND-Array mit einer Menge nichtflüchtiger Speicherzellen und einen On-Die-Controller, der einen Chip mit dem SLC-NAND-Array teilt, beinhalten. Der On-Die-Controller kann konfiguriert sein, eine Programmierspannungseinstellung aus dem SLC-NAND-Array zu lesen und einen einzelnen Impuls anzustoßen, um Daten auf das SLC-NAND-Array bei der Programmierspannungseinstellung zu schreiben.
  • Der On-Die-Controller kann ferner konfiguriert sein, eine aktualisierte Programmierspannungseinstellung auf dem SLC-NAND-Array zu speichern.
  • Der On-Die-Controller kann ferner konfiguriert sein, zu bestimmen, dass das Schreiben der Daten bei der Programmierspannungseinstellung eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt, und als Reaktion auf das Bestimmen, dass das Schreiben der Daten bei der Programmierspannungseinstellung eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt, das Speichern der aktualisierten Programmierspannungseinstellung anzustoßen.
  • Der On-Die-Controller kann ferner konfiguriert sein, die aktualisierte Programmierspannungseinstellung zu speichern, ohne die Programmierspannungseinstellung aus dem SLC-NAND-Array zu löschen.
  • Gemäß einer Ausführungsform kann ein Verfahren das Lesen einer Programmiereinstellung aus einem Einstellungssegment nichtflüchtiger Speicherzellen, das Schreiben von Daten in ein Datensegment nichtflüchtiger Speicherzellen unter Verwendung der Programmiereinstellung und als Reaktion auf einen Auslöser das Speichern einer geänderten Programmiereinstellung im Einstellungssegment beinhalten.
  • Die Programmiereinstellung kann eine erste Programmierspannung angeben. Das Schreiben der Daten in das Datensegment kann das Senden eines einzelnen Impulses mit der Programmierspannung durch das Datensegment beinhalten. Das Speichern der geänderten Programmiereinstellung kann das Speichern der Angabe einer zweiten Programmierspannung, die niedriger als die erste Programmierspannung ist, im Einstellungssegment beinhalten.
  • Das Speichern der geänderten Programmiereinstellung kann das Überschreiben mindestens eines Teils der Programmiereinstellung zum Speichern der geänderten Programmiereinstellung beinhalten.
  • Das Verfahren kann ferner das Bereitstellen des Auslösers beinhalten, indem bestimmt wird, dass die Programmiereinstellung bewirkt, dass eine Schwellenspannung von einer oder mehreren der nichtflüchtigen Speicherzellen einen vordefinierten Pegel überschreitet.
  • Das Bestimmen, dass die Programmiereinstellung bewirkt, dass die Schwellenspannung den vordefinierten Pegel überschreitet, kann das Bestimmen einer Anzahl von Zellen mit einer Schwellenspannung innerhalb eines vorbestimmten Bereichs und das Bestimmen, ob die Anzahl von Zellen mit der Schwellenspannung innerhalb des vorbestimmten Bereichs ein oder mehrere Kriterien erfüllt, beinhalten.
  • Das Verfahren kann ferner das Bereitstellen des Auslösers durch Erzeugen einer Zufallszahl und das Erfassen des Auslösers durch Bestimmen, dass die Zufallszahl ein oder mehrere Kriterien erfüllt, beinhalten.
  • Gemäß einer Ausführungsform kann eine Vorrichtung Mittel zum Lesen einer Programmiereinstellung in einer Ersatzspalte einer ersten Wortleitung einer Vielzahl von Wortleitungen einer Menge nichtflüchtiger Speicherzellen, Mittel zum Schreiben von Daten in eine oder mehrere der Vielzahl von Wortleitungen unter Verwendung der Programmiereinstellung, Mittel zum Bestimmen, dass die Programmiereinstellung bewirkt, dass eine Schwellenspannung einer oder mehrerer der nichtflüchtigen Speicherzellen zu hoch ist, und Mittel zum Speichern einer geänderten Programmiereinstellung in der Ersatzspalte der ersten Wortleitung als Reaktion auf das Bestimmen, dass die Programmiereinstellung bewirkt, dass die Schwellenspannung zu hoch ist, beinhalten.
  • Figurenliste
  • Eine spezifischere Beschreibung ist nachstehend unter Bezugnahme auf spezifische Ausführungsformen enthalten, die in den beigefügten Zeichnungen dargestellt sind. In dem Verständnis, dass diese Zeichnungen nur bestimmte Ausführungsformen der Offenbarung darstellen und daher nicht als Einschränkung ihres Umfangs anzusehen sind, wird die Offenbarung unter Verwendung der beigefügten Zeichnungen mit zusätzlicher Spezifität und Detailgenauigkeit beschrieben und erläutert.
    • 1A zeigt ein Blockdiagramm einer Ausführungsform eines Systems, das eine Spannungsanpassungskomponente für eine nichtflüchtige Speichervorrichtung beinhaltet.
    • 1B zeigt eine Ausführungsform einer nichtflüchtigen Speichervorrichtung, die einen oder mehrere Speicherchips beinhalten kann.
    • 2A zeigt Blöcke von Speicherzellen in einer beispielhaften 2D-Konfiguration des Speicherarrays von 1.
    • 2B zeigt eine Querschnittsansicht von beispielhaften Ladungseinfang-Speicherzellen in NAND-Strings als ein Beispiel von Speicherzellen in 2A.
    • 2C zeigt eine Querschnittsansicht der Struktur von 2B.
    • 2D zeigt eine beispielhafte Speicherzelle.
    • 3 zeigt eine perspektivische Ansicht einer Speichervorrichtung, die eine Menge von Blöcken in einer beispielhaften 3D-Konfiguration des Speicherarrays von 1 umfasst.
    • 4 zeigt eine beispielhafte Querschnittsansicht eines Teils eines der Blöcke von 3.
    • 5 zeigt eine Nahansicht eines Bereichs des Stapels von 4.
    • 6 zeigt eine Beispielansicht von NAND-Strings in Unterblöcken in einer 3D-Konfiguration, die mit 4 übereinstimmt.
    • 7 zeigt zusätzliche Details der Unterblöcke SB0-SB3 von 8A.
    • 8A zeigt beispielhafte Vth-Verteilungen von Speicherzellen, bei denen zwei Datenzustände verwendet werden und eine Verschiebung von Vth beobachtet wird.
    • 8B zeigt beispielhafte Vth-Verteilungen von Speicherzellen, bei denen vier Datenzustände verwendet werden und eine Verschiebung von Vth beobachtet wird.
    • 9 zeigt eine Wellenform eines beispielhaften Programmiervorgangs.
    • 10 zeigt einen Teil der Speicherzelle MC von 5, der die Elektroneninjektion in einen Ladungseinfangbereich während einer schwachen Programmierung zeigt.
    • 11 zeigt eine Ausführungsform des Chip-Controllers von 1B.
    • 12 zeigt eine Ausführungsform der Bestimmungsschaltung von 11.
    • 13 zeigt einen Graphen, der den Betrieb der Bestimmungsschaltung gemäß einer Ausführungsform zeigt.
    • 14 zeigt ein Byte, das zum Speichern einer Programmiereinstellung gemäß einer Ausführungsform verwendet werden kann.
    • 15 zeigt eine Ausführungsform eines Verfahrens zum Programmieren von Zellen eines Speicherarrays mit periodischen Anpassungen der Programmierspannung.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Aspekte der vorliegenden Offenbarung können als eine Vorrichtung, ein System, ein Verfahren oder ein Computerprogrammprodukt ausgeführt sein. Dementsprechend können Aspekte der vorliegenden Offenbarung die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (einschließlich Firmware, residenter Software, Mikrocode oder dergleichen) oder einer Ausführungsform annehmen, die Software- und Hardware-Aspekte kombiniert, auf die hierin allgemein als „Schaltung“, „Modul“, „Vorrichtung“ oder „System“ bezeichnet sein können. Darüber hinaus können Aspekte der vorliegenden Offenbarung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren nichtflüchtigen computerlesbaren Speichermedien ausgeführt ist, die computerlesbaren und/oder ausführbaren Programmcode speichern.
  • Viele der in dieser Spezifikation beschriebenen Hardwareeinheiten wurden als Schaltungen bezeichnet, um insbesondere ihre Ausführungsunabhängigkeit hervorzuheben. Beispielsweise kann eine Schaltung eine spezifische VLSI-Schaltung oder ein Gate-Array sein, das ganz oder teilweise Teil eines handelsüblichen Halbleiters wie eines Logikchips, eines Transistors oder einer anderen diskreten Komponente ist. Eine Schaltung kann auch in programmierbaren Hardwarevorrichtungen wie vor Ort programmierbaren Gate-Arrays, programmierbarer Array-Logik, programmierbaren Logikbausteinen oder dergleichen ausgeführt sein. Insbesondere wenn mehrere Schaltungen genannt werden, können sie in einigen Fällen Hardwareelemente gemeinsam nutzen; somit können zwei verschiedene Schaltungen als ein einziger Hardwarekörper ausgeführt sein, der über Software oder unterschiedliche Hardwareelemente konfiguriert ist, die angegebenen Funktionen der beiden Schaltungen auszuführen.
  • Module können in Schaltungen und/oder in Software zur Ausführung durch verschiedene Arten von Prozessoren ausgeführt sein. Ein identifiziertes Modul von ausführbarem Code kann beispielsweise einen oder mehrere physische oder logische Blöcke von Computeranweisungen beinhalten, die beispielsweise als Objekt, Prozedur oder Funktion organisiert sein können. Trotzdem müssen die ausführbaren Dateien eines identifizierten Moduls nicht physisch zusammen angeordnet sein, sondern können unterschiedliche Anweisungen beinhalten, die an verschiedenen Orten gespeichert sind und, wenn sie logisch miteinander verbunden werden, das Modul bilden und den angegebenen Zweck für das Modul erreichen.
  • Ein Modul von ausführbarem Code kann eine einzelne Anweisung oder viele Anweisungen beinhalten und kann sogar auf mehrere verschiedene Codesegmente, verschiedene Programme oder mehrere Speichervorrichtungen verteilt sein. Wenn ein Modul oder Teile eines Moduls in Software ausgeführt sind, können die Softwareteile auf einem oder mehreren computerlesbaren und/oder ausführbaren Speichermedien gespeichert werden. Jede Kombination von einem oder mehreren computerlesbaren Speichermedien kann verwendet werden. Ein computerlesbares Speichermedium kann beispielsweise ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine Vorrichtung oder eine geeignete Kombination wie zuvor beschrieben beinhalten, wäre aber nicht darauf beschränkt und würde nicht das Verbreiten von Signalen beinhalten. Im Zusammenhang mit diesem Dokument kann ein computerlesbares und/oder ausführbares Speichermedium ein beliebiges materielles und/oder nichtflüchtiges Medium sein, das ein Programm zur Verwendung durch oder in Verbindung mit einem Anweisungsausführungssystem, einer Vorrichtung, einem Prozessor oder einem Gerät enthalten oder speichern kann.
  • Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Offenbarung kann in einer beliebigen Kombination von einer oder mehreren Programmiersprachen geschrieben werden, einschließlich einer objektorientierten Programmiersprache wie Python, Java, Smalltalk, C++, C#, Objective C oder dergleichen, herkömmliche, prozedurale, Programmiersprachen wie die Programmiersprache C, Skriptprogrammiersprachen und/oder anderen ähnlichen Programmiersprachen. Der Programmcode kann teilweise oder vollständig auf einem oder mehreren Computern eines Benutzers und/oder auf einem Remote-Computer oder Remote-Server über ein Datennetzwerk oder dergleichen ausgeführt werden.
  • Eine Komponente, wie sie hier verwendet wird, ist eine materielle, physische, nichtflüchtige Vorrichtung. Beispielsweise kann eine Komponente als Hardware-Logikschaltung mit benutzerdefinierten VLSI-Schaltungen, Gate-Arrays oder anderen integrierten Schaltungen, handelsübliche Halbleiter wie Logikchips, Transistoren oder andere diskrete Bauelemente; und/oder andere mechanische oder elektrische Vorrichtungen ausgeführt sein. Eine Komponente kann auch in programmierbaren Hardwarevorrichtungen wie vor Ort programmierbaren Gate-Arrays, programmierbarer Array-Logik, programmierbaren Logikbauteilen oder dergleichen ausgeführt sein. Eine Komponente kann eine oder mehrere Siliciumvorrichtungen mit integrierten Schaltkreisen (beispielsweise Chips, Chip-Ebenen, Gehäuse) oder andere diskrete elektrische Bauteile in elektrischer Kommunikation mit einer oder mehreren anderen Komponenten über elektrische Leitungen einer Leiterplatte oder dergleichen beinhalten. Jedes der hier beschriebenen Module kann in bestimmten Ausführungsformen alternativ durch eine Komponente ausgeführt oder als solche implementiert werden.
  • Die Bezugnahme in dieser Beschreibung auf „eine Ausführungsform“ oder eine ähnliche Formulierung bedeutet, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, beschrieben in Verbindung mit der Ausführungsform, in mindestens einer Ausführungsform der vorliegenden Offenbarung enthalten ist. Somit kann sich das Auftreten des Ausdrucks „in einer Ausführungsform“ und ähnliche Formulierungen in dieser Beschreibung auf dieselbe Ausführungsform beziehen, muss dies aber nicht notwendigerweise, sondern kann auch „eine oder mehrere, aber nicht alle Ausführungsformen“ bedeuten, sofern nicht ausdrücklich anders angegeben. Die Begriffe „beinhaltend“, „umfassend“, „aufweisend“ und Variationen davon bedeuten „beinhaltend, aber nicht beschränkt auf“, sofern nicht ausdrücklich anders angegeben. Eine Aufzählung von Elementen bedeutet nicht, dass sich einige oder alle Elemente gegenseitig ausschließen und/oder sich gegenseitig einschließen, sofern nicht ausdrücklich anders angegeben. Die Begriffe „ein/eine“ und „der/die/das“ beziehen sich auch auf „ein/eine oder mehrere“, sofern nicht ausdrücklich anders angegeben.
  • Aspekte der vorliegenden Offenbarung sind nachfolgend unter Bezugnahme auf schematische Fließbilddiagramme und/oder schematische Blockdiagramme von Verfahren, Vorrichtungen, Systemen und Computerprogrammprodukten gemäß Ausführungsformen der Offenbarung beschrieben. Es versteht sich, dass jeder Block der schematischen Fließbilddiagramme und/oder schematischen Blockdiagramme und Kombinationen von Blöcken in den schematischen Fließbilddiagrammen und/oder schematischen Blockdiagrammen durch Computerprogrammanweisungen ausgeführt sein können. Diese Computerprogrammanweisungen können für einen Prozessor eines Computers oder eine andere programmierbare Datenverarbeitungsvorrichtung zur Herstellung einer Maschine bereitgestellt werden, so dass die Anweisungen, die durch den Prozessor oder eine andere programmierbare Datenverarbeitungsvorrichtung ausgeführt werden, Mittel zum Ausführen der Funktionen und/oder Handlungen, die im Block bzw. in den Blöcken der schematischen Fließbilddiagramme und/oder schematischen Blockdiagramme angegeben sind, erzeugen.
  • Es sei auch erwähnt, dass in einigen alternativen Implementierungen die im Block angegebenen Funktionen abweichend von der in den Figuren angegebenen Reihenfolge vorkommen können. Beispielsweise können zwei nacheinander dargestellte Blöcke effektiv im Wesentlichen gleichzeitig ausgeführt werden oder die Blöcke können gegebenenfalls in umgekehrter Reihenfolge ausgeführt werden, je nach der entsprechenden Funktionalität. Es sind andere Schritte und Verfahren denkbar, die in Funktion, Logik oder Wirkung zu einem oder mehreren Blöcken der dargestellten Figuren oder Teilen davon äquivalent sind. Obwohl in den Fließbild- und/oder Blockdiagrammen verschiedene Pfeiltypen und Linientypen verwendet werden, sind diese nicht als den Umfang der entsprechenden Ausführungsformen einschränkend zu verstehen. Beispielsweise kann ein Pfeil eine Warte- oder Überwachungsperiode von nicht spezifizierter Dauer zwischen aufgezählten Schritten der dargestellten Ausführungsform angeben.
  • In der folgenden ausführlichen Beschreibung wird auf die beigefügten Zeichnungen verwiesen, die einen Teil davon bilden. Die vorstehende Zusammenfassung dient nur zur Veranschaulichung und soll in keiner Weise einschränkend sein. Zusätzlich zu den oben beschriebenen veranschaulichenden Aspekten, Ausführungsformen und Merkmalen werden weitere Aspekte, Ausführungsformen und Merkmale unter Bezugnahme auf die Zeichnungen und die folgende ausführliche Beschreibung ersichtlich. Die Beschreibung von Elementen in jeder Figur kann sich auf Elemente von nachfolgenden Figuren beziehen. Gleiche Zahlen können sich auf gleiche Elemente in den Figuren beziehen, einschließlich alternativer Ausführungsformen gleicher Elemente.
  • 1A zeigt ein Blockdiagramm einer Ausführungsform eines Systems 100 mit einer Einstellungsanpassungskomponente 150 für eine nichtflüchtige Speichervorrichtung 120. Die Einstellungsanpassungskomponente 150 kann Teil eines Controllers 126 von nichtflüchtigen Speichermedien, eines nichtflüchtigen Speicherelements 123, eines Gerätetreibers oder dergleichen sein und/oder mit diesen kommunizieren. Die Einstellungsanpassungskomponente 150 kann auf einem nichtflüchtigen Speichersystem 102 einer Computervorrichtung 110 arbeiten, die einen Prozessor 111, einen flüchtigen Speicher 112 und eine Netzwerkschnittstelle 113 beinhalten kann. Der Prozessor 111 kann eine oder mehrere zentrale Verarbeitungseinheiten, einen oder mehrere Universalprozessoren, einen oder mehrere anwendungsspezifische Prozessoren, einen oder mehrere virtuelle Prozessoren (beispielsweise kann die Computervorrichtung 110 eine virtuelle Maschine sein, die innerhalb eines Hosts arbeitet), einen oder mehrere Prozessorkerne oder dergleichen beinhalten. Die Netzwerkschnittstelle 113 kann eine oder mehrere Netzwerkschnittstellen beinhalten, die konfiguriert sind, die Computervorrichtung 110 und/oder den Controller 126 von nichtflüchtigen Speichermedien kommunikativ mit einem Kommunikationsnetzwerk 115, wie beispielsweise einem Internet-Protocol-(IP-)Netzwerk, einem Storage Area Network (SAN), einem drahtlosen Netzwerk, einem kabelgebundenen Netzwerk oder dergleichen, zu koppeln.
  • Die nichtflüchtige Speichervorrichtung 120 kann in verschiedenen Ausführungsformen an einer oder mehreren verschiedenen Stellen in Bezug auf die Computervorrichtung 110 angeordnet sein. In einer Ausführungsform beinhaltet die nichtflüchtige Speichervorrichtung 120 ein oder mehrere nichtflüchtige Speicherelemente 123, wie etwa Halbleiterchips oder -gehäuse oder andere Vorrichtungen mit integrierten Schaltungsanordnungen, die auf einer oder mehreren Leiterplatten, Speichergehäusen und/oder anderen mechanischen und/oder elektrischen Stützstrukturen angeordnet sind. Beispielsweise kann die nichtflüchtige Speichervorrichtung 120 eine oder mehrere Direct-Inline-Memory-Module-(DIMM-)Karten, eine oder mehrere Erweiterungskarten und/oder Tochterkarten, eine Solid-State-Drive-(SSD-) oder eine andere Festplatten-Vorrichtung beinhalten und/oder kann einen anderen Speicher und/oder Speicherformfaktor aufweisen. Die nichtflüchtige Speichervorrichtung 120 kann in eine Hauptplatine der Computervorrichtung 110 integriert und/oder auf dieser montiert sein, in einem Anschluss und/oder Slot der Computervorrichtung 110 installiert sein, in einer anderen Computervorrichtung 110 und/oder einer dedizierten Speichervorrichtung im Kommunikationsnetzwerk 115 in Kommunikation mit der Computervorrichtung 110 über einen externen Bus (beispielsweise eine externe Festplatte) oder dergleichen installiert sein.
  • Die nichtflüchtige Speichervorrichtung 120 kann in einer Ausführungsform auf einem Speicherbus eines Prozessors 111 (beispielsweise auf demselben Speicherbus wie der flüchtige Speicher 112, auf einem anderen Speicherbus als der flüchtige Speicher 112, statt dem flüchtigen Speicher 112 oder dergleichen) angeordnet sein. In einer weiteren Ausführungsform kann die nichtflüchtige Speichervorrichtung 120 auf einem Peripheriebus der Computervorrichtung 110 angeordnet sein, etwa einem Peripheral-Component-Interconnect-Express-(PCI-Express-/PCIe-)Bus, einem Serial-Advanced-Technology-Attachment-(SATA-)Bus, einem Parallel-Advanced-Technology-Attachment-(PATA-)Bus, einem Small-Computer-System-Interface-(SCSI-)Bus, einem FireWire-Bus, einer Fibre-Channel-Verbindung, einem Universal Serial Bus (USB), einem PCIe-Advanced-Switching-(PCIe-AS-)Bus oder dergleichen. In einer anderen Ausführungsform kann die nichtflüchtige Speichervorrichtung 120 in einem Kommunikationsnetzwerk 115, etwa einem Ethernet-Netzwerk, einem Infiniband-Netzwerk, einem SCSI-RDMA über ein Kommunikationsnetzwerk 115, einem Storage Area Network (SAN), einem Local Area Network (LAN), einem Wide Area Network (WAN) wie dem Internet, einem anderen kabelgebundenen und/oder drahtlosen Netzwerk oder dergleichen, angeordnet sein.
  • Die Computervorrichtung 110 kann ferner ein nichtflüchtiges computerlesbares Speichermedium 114 beinhalten. Das computerlesbare Speichermedium 114 kann ausführbare Anweisungen aufweisen, die konfiguriert sind, die Computervorrichtung 110 (beispielsweise den Prozessor 111) zu veranlassen, Schritte eines oder mehrerer der hier offenbarten Verfahren auszuführen. Alternativ oder zusätzlich kann die Einstellungsanpassungskomponente 150 als eine oder mehrere computerlesbare Anweisungen ausgeführt sein, die auf dem computerlesbaren Speichermedium 114 gespeichert sind.
  • Das nichtflüchtige Speichersystem 102 beinhaltet in der dargestellten Ausführungsform eine Einstellungsanpassungskomponente 150. Die Einstellungsanpassungskomponente 150 ist in einer Ausführungsform konfiguriert, die Programmierspannung anzupassen, die zum Programmieren von Zellen der nichtflüchtigen Speicherelemente 123 verwendet wird, um eine Überprogrammierung der nichtflüchtigen Speicherelemente 123 zu vermeiden wie nachstehend beschrieben. Die Einstellungsanpassungskomponente 150 kann in bestimmten Ausführungsformen einen Erfassungsvorgang durchführen, um zu bestimmen, ob einige der nichtflüchtigen Speicherelemente 123 durch Anwenden einer Programmiereinstellung, wie beispielsweise einer Programmierspannung, gespeichert in den nichtflüchtigen Speicherelementen, beginnen, überprogrammiert zu werden. Wenn die nichtflüchtigen Speicherelemente 123 überprogrammiert werden, kann die Einstellungsanpassungskomponente 150 eine aktualisierte Programmiereinstellung, wie beispielsweise eine aktualisierte Programmierspannung, in den nichtflüchtigen Speicherelementen 123 speichern. Somit kann eine Überprogrammierung vermieden werden und die Nutzungsdauer der nichtflüchtigen Speichervorrichtung 120 kann verlängert werden.
  • In einer Ausführungsform kann die Einstellungsanpassungskomponente 150 eine Logikhardware einer oder mehrerer nichtflüchtiger Speichervorrichtungen 120 beinhalten, wie beispielsweise einen Controller 126 von nichtflüchtigen Speichermedien, ein nichtflüchtiges Speicherelement 123, einen Gerätecontroller, ein Field-Programmable Gate Array (FPGA) oder eine andere programmierbare Logik, Firmware für ein FPGA oder eine andere programmierbare Logik, Mikrocode zur Ausführung auf einem Mikrocontroller, einen Application-Specific Integrated Circuit (ASIC) oder dergleichen. In einer anderen Ausführungsform kann die Einstellungsanpassungskomponente 150 ausführbaren Softwarecode wie einen Gerätetreiber oder dergleichen beinhalten, der auf dem computerlesbaren Speichermedium 114 zur Ausführung auf dem Prozessor 111 gespeichert ist. In einer weiteren Ausführungsform kann die Einstellungsanpassungskomponente 150 eine Kombination von sowohl ausführbarem Softwarecode als auch Logikhardware beinhalten.
  • In einer Ausführungsform ist die Einstellungsanpassungskomponente 150 konfiguriert, Speicheranforderungen von einem Gerätetreiber oder einer anderen ausführbaren Anwendung über einen Bus 125 oder dergleichen zu empfangen. Die Einstellungsanpassungskomponente 150 kann ferner konfiguriert sein, Daten über den Bus 125 zu/von einem Gerätetreiber und/oder Speicherclients 116 zu übertragen. Dementsprechend kann die Einstellungsanpassungskomponente 150 in einigen Ausführungsformen ein oder mehrere Direct-Memory-Access-(DMA-)Module, remote DMA-Module, Bus-Controller, Brücken, Puffer usw. beinhalten und/oder mit diesen in Verbindung stehen, um die Übertragung von Speicheranforderungen und zugehörigen Daten zu ermöglichen. In einer anderen Ausführungsform kann die Einstellungsanpassungskomponente 150 Speicheranforderungen als API-Aufruf von einem Speicherclient 116, als IO-CTL-Befehl oder dergleichen empfangen.
  • Gemäß verschiedenen Ausführungsformen kann ein Controller 126 von nichtflüchtigen Speichermedien in Kommunikation mit einer oder mehreren Programmsequenzierungskomponenten 140 eine oder mehrere nichtflüchtige Speichervorrichtungen 120 und/oder nichtflüchtige Speicherelemente 123 verwalten. Die nichtflüchtige(n) Speichervorrichtung(en) 120 kann/können Aufzeichnungs- und/oder Speichervorrichtungen, etwa Solid-State-Speichervorrichtung(en) und/oder Halbleiter-Speichervorrichtung(en), die in einer Vielzahl von adressierbaren Medienspeicherorten angeordnet und/oder in solche unterteilt sind, beinhalten. Wie hierin verwendet bezieht sich ein Medienspeicherort auf eine beliebige physische Speichereinheit (beispielsweise eine beliebige Menge an physischen Speichermedien auf einer nichtflüchtigen Speichervorrichtung 120). Speichereinheiten können beinhalten, sind aber nicht beschränkt auf: Seiten, Speicherabteilungen, Blöcke, Sektoren, Sammlungen oder Mengen von physischen Speicherorten (beispielsweise logische Seiten, logische Blöcke) oder dergleichen.
  • Ein Gerätetreiber und/oder der Controller 126 von nichtflüchtigen Speichermedien können in bestimmten Ausführungsformen den Speicherclients 116 einen logischen Adressraum 134 präsentieren. Wie hier verwendet bezieht sich ein logischer Adressraum 134 auf eine logische Darstellung von Speicherressourcen. Der logische Adressraum 134 kann eine Vielzahl (beispielsweise einen Bereich) von logischen Adressen beinhalten. Wie hierin verwendet bezieht sich eine logische Adresse auf eine beliebige Kennung zum Referenzieren einer Speicherressource (beispielsweise Daten), beinhaltend, aber nicht beschränkt auf: eine logische Blockadresse (LBA), eine Cylinder/Head/Sector-(CHS-)Adresse, einen Dateinamen, eine Objektkennung, eine Inode, einen Universally Unique Identifier (UUID), einen Globally Unique Identifier (GUID), einen Hashcode, eine Signatur, einen Indexeintrag, einen Bereich, eine Ausdehnung oder dergleichen.
  • Ein Gerätetreiber für die nichtflüchtige Speichervorrichtung 120 kann Metadaten 135, wie beispielsweise eine Zuordnungsstruktur von logischen zu physikalischen Adressen, verwalten, um logische Adressen des logischen Adressraums 134 Medienspeicherorten auf der/den nichtflüchtigen Speichervorrichtung(en) 120 zuzuordnen. Ein Gerätetreiber kann konfiguriert sein, Speicherdienste für einen oder mehrere Speicherclients 116 bereitzustellen. Die Speicherclients 116 können lokale Speicherclients beinhalten, die auf der Computervorrichtung 110 und/oder remote laufen, wobei auf die Speicherclients 116 über das Kommunikationsnetzwerk 115 und/oder die Netzwerkschnittstelle 113 zugegriffen werden kann. Die Speicherclients 116 können beinhalten, sind aber nicht beschränkt auf: Betriebssysteme, Dateisysteme, Datenbankanwendungen, Serveranwendungen, Prozesse auf Kernelebene, Prozesse auf Benutzerebene, Anwendungen und dergleichen.
  • Ein Gerätetreiber kann kommunikativ mit einer oder mehreren nichtflüchtigen Speichervorrichtungen 120 gekoppelt sein. Die eine oder mehreren nichtflüchtigen Speichervorrichtungen 120 können verschiedene Arten von nichtflüchtigen Speichervorrichtungen beinhalten, umfassend, aber nicht beschränkt auf: Solid-State-Speichervorrichtungen, Halbleiter-Speichervorrichtungen, SAN-Speicherressourcen oder dergleichen. Die eine oder mehreren nichtflüchtigen Speichervorrichtungen 120 können eine oder mehrere jeweilige Controller 126 von nichtflüchtigen Speichermedien und nichtflüchtige Speichermedien 122 beinhalten. Ein Gerätetreiber kann über eine herkömmliche Block-E/A-Schnittstelle 131 Zugriff auf die eine oder mehreren nichtflüchtigen Speichervorrichtungen 120 bereitstellen. Zusätzlich kann ein Gerätetreiber über die SCM-Schnittstelle 132 Zugriff auf erweiterte Funktionen bereitstellen. Die Metadaten 135 können verwendet werden, um Datenvorgänge zu verwalten und/oder zu verfolgen, die über eine der Block-E/A-Schnittstelle 131, SCM-Schnittstelle 132, Cache-Schnittstelle 133 oder andere entsprechende Schnittstellen ausgeführt werden.
  • Die Cache-Schnittstelle 133 kann cache-spezifische Merkmale aufweisen, auf die über einen Gerätetreiber für die nichtflüchtige Speichervorrichtung 120 zugegriffen werden kann. In einigen Ausführungsformen stellt die SCM-Schnittstelle 132, die den Speicherclients 116 präsentiert wird, auch Zugriff auf Datentransformationen bereit, die von der einen oder den mehreren nichtflüchtigen Speichervorrichtungen 120 und/oder den einen oder mehreren nichtflüchtigen Speichermediencontrollern 126 implementiert sind.
  • Ein Gerätetreiber kann den Speicherclients 116 über eine oder mehrere Schnittstellen einen logischen Adressraum 134 präsentieren. Wie zuvor beschrieben kann der logische Adressraum 134 eine Vielzahl von logischen Adressen beinhalten, die jeweils den betreffenden Medienorten der einen oder mehreren nichtflüchtigen Speichervorrichtungen 120 entsprechen. Ein Gerätetreiber kann Metadaten 135 verwalten, einschließlich beliebiger Zuordnungen zwischen logischen Adressen und Medienorten oder dergleichen.
  • Ein Gerätetreiber kann ferner eine Schnittstelle 139 einer nichtflüchtigen Speichervorrichtung beinhalten und/oder mit dieser in Verbindung stehen, die konfiguriert ist, Daten, Befehle und/oder Abfragen über einen Bus 125 an die eine oder mehreren nichtflüchtigen Speichervorrichtungen 120 zu übertragen, der beinhalten kann, aber nicht beschränkt ist auf: einen Speicherbus eines Prozessors 111, einen Peripheral-Component-Interconnect-Express-(PCI-Express/PCIe-) Bus, einen seriellen Advanced-Technology-Attachment-(ATA-)Bus, einen parallelen ATA-Bus, eine Small Computer System Interface (SCSI), FireWire, Fibre Channel, einen Universal Serial Bus (USB), einen PCIe-Advanced-Switching-(PCIe-AS-)Bus, ein Kommunikationsnetzwerk 115, Infiniband, SCSI RDMA oder dergleichen. Die nichtflüchtige Speichervorrichtungsschnittstelle 139 kann mit der einen oder den mehreren nichtflüchtigen Speichervorrichtungen 120 unter Verwendung von Input-Output-Control-(IO-CTL-)Befehlen, IO-CTL-Befehlserweiterung(en), remotem direkten Speicherzugriff oder dergleichen kommunizieren.
  • Die Netzwerkschnittstelle 113 kann eine oder mehrere Netzwerkschnittstellen beinhalten, die konfiguriert sind, die Computervorrichtung 110 und/oder den Controller 126 von nichtflüchtigen Speichermedien kommunikativ mit einem Kommunikationsnetzwerk 115 und/oder einem oder mehreren remoten, über ein Netzwerk zugänglichen Speicherclients 116 zu koppeln. Die Speicherclients 116 können lokale Speicherclients beinhalten, die auf der Computervorrichtung 110 und/oder remote laufen, wobei auf die Speicherclients 116 über das Kommunikationsnetzwerk 115 und/oder die Netzwerkschnittstelle 113 zugegriffen werden kann. Der Controller 126 von nichtflüchtigen Speichermedien ist Teil von einer oder mehreren nichtflüchtigen Speichervorrichtungen 120 und/oder steht in Kommunikation mit dieser/diesen. 1A stellt zwar eine einzelne nichtflüchtige Speichervorrichtung 120 dar; die Offenbarung ist aber diesbezüglich nicht beschränkt und kann so angepasst sein, dass sie eine beliebige Zahl von nichtflüchtigen Speichervorrichtungen 120 umfasst.
  • Die nichtflüchtige Speichervorrichtung 120 kann ein oder mehrere nichtflüchtige Speicherelemente 123 des nichtflüchtigen Speichermediums 122 beinhalten, die Folgendes beinhalten können, aber nicht darauf beschränkt sind: ReRAM, Memristorspeicher, programmierbare Metallisierungszellenspeicher, Phasenwechselspeicher (PCM, PCME, PRAM, PCRAM, ovonische einheitliche Speicher, Chalkogenid-RAMs oder C-RAMs), NAND-Flash-Speicher (beispielsweise 2D-NAND-Flash-Speicher, 3D-NAND-Flash-Speicher), NOR-Flash-Speicher, Nano-Direktzugriffsspeicher (Nano-RAMs oder NRAMs), Nanokristall-Draht-Speicher, siliciumoxid-basierte Sub-10-Nanometer-Prozessspeicher, Graphen-Speicher, Silicium-Oxid-Nitrid-Oxid-Silicium (SONOS), programmierbare Metallisierungszellen (PMC), Conductive-Bridging-RAMs (CBRAMs), magnetoresistive RAMs (MRAMs), Spin-Transfer-Torque-(STT-)MRAMs, Spin-Orbit-Torque-SOT-MRAMs, magnetische Speichermedien (beispielsweise Festplatten, Bänder), optische Speichermedien und dergleichen. Das eine oder die mehreren nichtflüchtigen Speicherelemente 123 des nichtflüchtigen Speichermediums 122 beinhalten in bestimmten Ausführungsformen Storage Class Memory (SCM). Beispiele hierin beziehen sich auf einen NAND-Speicher oder insbesondere auf einen SLC-NAND-Speicher; die hier bereitgestellten Systeme und Verfahren können jedoch auch auf andere Speichertypen angewendet werden, umfassend, aber nicht beschränkt auf die zuvor aufgeführten.
  • Während ältere Technologien wie NAND-Flash block- und/oder seitenadressierbar sein können, ist Storage Class Memory in einer Ausführungsform byteadressierbar. In weiteren Ausführungsformen kann Storage Class Memory schneller sein und/oder eine längere Lebensdauer (beispielsweise eine größere Haltbarkeit) aufweisen als NAND-Flash, kann geringere Kosten aufweisen, weniger Strom verbrauchen und/oder eine höhere Speicherdichte als DRAM aufweisen, oder einen oder mehrere andere Vorteile oder Verbesserungen im Vergleich zu anderen Technologien bieten. Beispielsweise kann Storage Class Memory ein oder mehrere nichtflüchtige Speicherelemente 123 in Form von einem ReRAM, einem Memristorspeicher, einem programmierbaren Metallisierungszellenspeicher, einen Phasenänderungsspeicher, einem Nano-RAM, einem auf Nanokristalldraht basierenden Speicher und einem siliciumoxid-basierten Sub-10-Nanometer-Prozessspeicher, einem Graphenspeicher, einem SONOS-Speicher, einem MANOS-Speicher, einem PMC-Speicher, einem CBRAM, einem MRAM und/oder Variationen hiervon beinhalten.
  • Während das nichtflüchtige Speichermedium 122 hier als „Speichermedium“ bezeichnet wird, können in verschiedenen Ausführungsformen das nichtflüchtige Speichermedium 122 allgemeiner ein oder mehrere nichtflüchtige Aufzeichnungsmedien beinhalten, die Daten aufzeichnen können, auf die Bezug genommen werden kann als nichtflüchtiges Speichermedium oder dergleichen. Ferner kann die nichtflüchtige Speichervorrichtung 120 in verschiedenen Ausführungsformen eine nichtflüchtige Aufzeichnungsvorrichtung, eine nichtflüchtige Speichervorrichtung oder dergleichen beinhalten.
  • Das nichtflüchtige Speichermedium 122 kann ein oder mehrere nichtflüchtige Speicherelemente 123 beinhalten, die Folgendes beinhalten können, aber nicht darauf beschränkt sind: Chips, Gehäuse, Ebenen oder dergleichen. Ein Controller 126 von nichtflüchtigen Speichermedien kann konfiguriert sein, Datenvorgänge auf dem nichtflüchtigen Speichermedium 122 zu verwalten, und kann einen oder mehrere Prozessoren, programmierbare Prozessoren (beispielsweise FPGAs), ASICs, Mikrocontroller oder dergleichen beinhalten. In einigen Ausführungsformen ist der Controller 126 von nichtflüchtigen Speichermedien konfiguriert, Daten auf dem nichtflüchtigen Speichermedium 122 zu speichern und/oder von diesen zu lesen, um Daten zu/von der nichtflüchtigen Speichervorrichtung 120 zu übertragen usw.
  • Der Controller 126 von nichtflüchtigen Speichermedien kann durch einen Bus 127 kommunikativ mit den nichtflüchtigen Speichermedien 122 gekoppelt sein. Der Bus 127 kann einen E/A-Bus zum Kommunizieren von Daten zu/von den nichtflüchtigen Speicherelementen 123 beinhalten. Der Bus 127 kann ferner einen Steuerbus zum Kommunizieren von Adressierungs- und anderen Befehls- und Steuerinformationen an die nichtflüchtigen Speicherelemente 123 beinhalten. In einigen Ausführungsformen kann der Bus 127 die nichtflüchtigen Speicherelemente 123 kommunikativ parallel mit dem Controller 126 von nichtflüchtigen Speichermedien koppeln. Dieser parallele Zugriff kann es ermöglichen, dass die nichtflüchtigen Speicherelemente 123 als Gruppe verwaltet werden, die ein logisches Speicherelement 129 bilden. Das logische Speicherelement kann in entsprechende logische Speichereinheiten (beispielsweise logische Seiten) und/oder logische Speicherabteilungen (beispielsweise logische Blöcke) unterteilt sein. Die logischen Speichereinheiten können gebildet werden, indem physikalische Speichereinheiten jedes der nichtflüchtigen Speicherelemente logisch kombiniert werden.
  • Der Controller 126 von nichtflüchtigen Speichermedien kann in bestimmten Ausführungsformen einen Block von Wortleitungen innerhalb eines nichtflüchtigen Speicherelements 123 unter Verwendung von Adressen der Wortleitungen organisieren, so dass die Wortleitungen logisch in einer monoton ansteigenden Sequenz organisiert sind (beispielsweise Decodieren und/oder Übersetzen von Adressen für Wortleitungen in eine monoton ansteigende Sequenz oder dergleichen). In einer weiteren Ausführungsform können Wortleitungen eines Blocks innerhalb eines nichtflüchtigen Speicherelements 123 physisch in einer monoton ansteigenden Folge von Wortleitungsadressen angeordnet sein, wobei nacheinander adressierte Wortleitungen auch physisch benachbart sind (beispielsweise WL0, WL1, WL2, ... WLN).
  • Der Controller 126 von nichtflüchtigen Speichermedien kann einen Geträtetreiber, der auf der Computervorrichtung 110 ausgeführt wird, beinhalten und/oder mit diesem in Kommunikation stehen. Ein Gerätetreiber kann den Speicherclients 116 Speicherdienste über eine oder mehrere Schnittstellen 131, 132 und/oder 133 bereitstellen. In einigen Ausführungsformen stellt ein Gerätetreiber eine Block-E/A-Schnittstelle 131 oder eine Geräteschnittstelle bereit, über die Speicherclients 116 E/A-Vorgänge auf Blockebene ausführen. Alternativ oder zusätzlich kann ein Gerätetreiber eine Storage-Class-Memory-(SCM-)Schnittstelle 132 bereitstellen, die den Speicherclients 116 andere Speicherdienste bereitstellen kann. In einigen Ausführungsformen kann die SCM-Schnittstelle 132 Erweiterungen der Block-E/A-Schnittstelle 131 beinhalten. (Beispielsweise können Speicherclients 116 über Erweiterungen oder Ergänzungen der Block-E/A-Schnittstelle 131 auf die SCM-Schnittstelle 132 zugreifen.) Alternativ oder zusätzlich kann die SCM-Schnittstelle 132 als separate API, Dienst und/oder Bibliothek bereitgestellt werden. Ein Gerätetreiber kann ferner konfiguriert sein, eine Cache-Schnittstelle 133 zum Cachen von Daten unter Verwendung des nichtflüchtigen Speichersystems 102 bereitzustellen.
  • Ein Gerätetreiber kann ferner eine Schnittstelle 139 von nichtflüchtigen Speichervorrichtungen beinhalten, die konfiguriert ist, Daten, Befehle und/oder Abfragen über einen Bus 125 an den Controller 126 von nichtflüchtigen Speichermedien zu übertragen wie zuvor beschrieben.
  • 1B zeigt eine Ausführungsform einer nichtflüchtigen Speichervorrichtung 210, die einen oder mehrere Speicherchips 212 beinhalten kann. Der Speicherchip 212 umfasst in einigen Ausführungsformen ein Speicherarray 200 (zweidimensional oder dreidimensional) von Speicherzellen, einen Chip-Controller 220 und Lese-/Schreibschaltungen 230A/230B. In einer Ausführungsform ist der Zugriff auf das Speicherarray 200 durch die verschiedenen Peripherieschaltungen auf gegenüberliegenden Seiten des Arrays symmetrisch implementiert, so dass die Dichten von Zugriffsleitungen und - Schaltungen auf jeder Seite um die Hälfte verringert ist. Die Lese-/Schreibschaltungen 230A/230B beinhalten in einer weiteren Ausführungsform mehrere Erfassungsblöcke 250, die das parallele Lesen oder Programmieren einer Seite von Speicherzellen ermöglichen.
  • Das Speicherarray 200 ist in verschiedenen Ausführungsformen durch Wortleitungen über Zeilendecoder 240A/240B und durch Bitleitungen über Spaltendecoder 242A/242B adressierbar. In einigen Ausführungsformen ist ein Controller 244 in derselben nichtflüchtigen Speichervorrichtung 210 (beispielsweise einem entnehmbaren Speicherkarte oder einem entnehmbaren Gehäuse) wie der eine oder die mehreren Speicherchips 212 beinhalten. Befehle und Daten werden zwischen dem Host und dem Controller 244 über Leitungen 232 und zwischen dem Controller und dem einen oder den mehreren Speicherchips 212 über Leitungen 234 übertragen. Eine Implementierung kann mehrere Speicherchips 212 beinhalten.
  • Der Chip-Controller 220 kann sich einen Chip mit dem Speicherarray 200 teilen, so dass der Chip-Controller 220 einen „On-Die“-Controller bildet. Der Chip-Controller 220 kann jede im Stand der Technik bekannte Form aufweisen, umfassend, aber nicht beschränkt auf Mikroprozessoren, Microcontroller Units (MCUs), Finite State Machines (FSMs), Central Processing Units (CPUs), Graphics Processing Units (GPUs) und dergleichen; ein „On-Die-Controller“ kann sich auf von diesen beziehen.
  • Der Chip-Controller 220 wirkt in einer Ausführungsform mit den Lese-/Schreibschaltungen 230A/230B zusammen, um Speichervorgänge am Speicherarray 200 auszuführen. Der Chip-Controller 220 umfasst in bestimmten Ausführungsformen eine Einstellungsanpassungskomponente 150, eine Zustandsmaschine 222 und einen On-Chip-Adressdecodierer 224. In einer Ausführungsform bildet die Zustandsmaschine 222 mindestens einen Teil der Einstellungsanpassungskomponente 150. In einer weiteren Ausführungsform bildet der Controller 244 mindestens einen Teil der Einstellungsanpassungskomponente 150. Der Controller 244 kann optional auf einem oder mehreren der Speicherchips 212 angeordnet sein oder kann sich auf einem Chip getrennt vom Speicherchip 212 befinden.
  • In einigen Ausführungsformen kann jedes der Speicherarrays 200 ein Single-Level-Cell-(SLC-)NAND-Array sein, in dem jedes der nichtflüchtigen Speicherelemente 123 oder jede der „nichtflüchtigen Speicherzellen“ durch Anwendung einer Programmierspannung über die Zelle programmierbar ist. Jedes der Speicherarrays 200 kann ferner mit einem einzelnen Impuls programmierbar sein, wodurch Geschwindigkeiten bereitgestellt werden, die sich der theoretischen Grenze zum Programmieren von NAND nähern. Nach dem Stand der Technik kann jedes der nichtflüchtigen Speicherelemente 123 ein elektrisch isolierendes Element aufweisen, wie beispielsweise eine Gateoxidschicht oder eine Tunneloxidschicht, durch die Elektronen selektiv beweglich sind, wodurch eine Gatefunktion bereitgestellt wird, indem ermöglicht wird, dass die Zellen mit einer Ladung programmiert werden und die Ladung beibehalten wird, mit der diese programmiert werden. Ein „Isolierelement“ oder eine „Isolierschicht“ kann eine beliebige Struktur beinhalten, die so ausgebildet ist, dass selektiv elektrische Ladung in eine nichtflüchtige Speicherzelle eindringen und/oder diese verlassen kann.
  • Wiederholtes Anwenden des Einzelimpulses kann im Laufe der Zeit zu einer Verschlechterung solcher Isolierschichten führen. Eine solche Verschlechterung kann in den Isolierelementen anderer nichtflüchtiger Speichertypen neben Floating-Gate- und Ladungseinfangspeicher auftreten. Das Ergebnis kann eine Überprogrammierung der nichtflüchtigen Speicherelemente 123 mit zu hoher Ladung sein, wodurch die Schwellenspannung der nichtflüchtigen Speicherelemente 123 über eine Sollschwellenspannung hinaus ansteigt.
  • Ferner können verschiedene Faktoren, wie beispielsweise die Herstellungsvarianz, dazu führen, dass solche Isolierelemente einen zu hohen Widerstand gegen das Fließen von Strom in die nichtflüchtigen Speicherelemente 123 liefern. Das Ergebnis kann eine Unterprogrammierung der nichtflüchtigen Speicherelemente 123 mit unzureichender Ladung sein, was dazu führt, dass die Schwellenspannung der nichtflüchtigen Speicherelemente unter eine Sollschwellenspannung abfällt.
  • Aufgrund der zuvor erwähnten Abweichungen und des Potentials für eine Verschlechterung der Isolierschicht kann es wünschenswert sein, die Programmiereinstellungen zu ändern, die zum Programmieren der nichtflüchtigen Speicherelemente 123 im Laufe der Zeit verwendet werden. Der Begriff „Programmiereinstellung“ umfasst alle Parameter, die auf die Zellenprogrammierung anwendbar sind, umfassend, aber nicht beschränkt auf die angelegte Programmierspannung, den angelegten Programmierstrom, die Dauer des Anwendens des Programmierimpulses, die Form der Kurve des Programmierimpulses (beispielsweise Spannung oder Strom im Laufe der Zeit) und dergleichen. In bestimmten Ausführungsformen kann das Speichern einer Programmiereinstellung das Speichern der Programmiereinstellung in numerischer Form beinhalten. Alternativ kann das Speichern der Programmiereinstellung das Speichern eines Zeigers, eines Flags oder einer anderen Datenstruktur beinhalten, die zum Ermitteln der Programmiereinstellung verwendet werden kann, optional mit Hilfe zusätzlicher Informationen wie einer Nachschlagetabelle, eines Decodierungsalgorithmus oder dergleichen.
  • Der Begriff „Programmierspannung“ bezieht sich auf einen Spannungspegel, der an die nichtflüchtigen Speicherelemente 123 angelegt wird, wodurch die nichtflüchtigen Speicherelemente 123 in einen programmierten Zustand eintreten oder in diesen übergehen. Dies kann ein Spitzenspannungswert, ein quadratischer Mittelwert, eine durchschnittliche Spannung eines Impulses, ein Spannungswert eines bestimmten Impulses in einer Impulsfolge und/oder dergleichen sein. „Programmierspannung“ ist nicht auf den NAND-Speicher beschränkt, sondern kann an jeden nichtflüchtigen Speicher angelegt werden, der durch Anlegen eines elektrischen Potentials programmiert wird. Somit können Programmiereinstellungen wie die Programmierspannung unter Verwendung der Systeme und Verfahren der vorliegenden Offenbarung in nichtflüchtigen Speichertypen angepasst werden, umfassend, aber nicht beschränkt auf die im obigen Hintergrundabschnitt aufgeführten nichtflüchtigen Speichertypen.
  • In ähnlicher Weise können verschiedene „Erfassungseinstellungen“ verwendet werden, um den Inhalt eines oder mehrerer nichtflüchtiger Speicherelemente 123 des Speicherarrays 200 zu erfassen. Der Begriff „Erfassung“ bezieht sich nicht nur auf nichtflüchtige Speicherstrukturen mit Zellen, die elektrische Ladung speichern, sondern auch auf nichtflüchtige Speichertypen, in denen ein anderer Speichermechanismus verwendet wird. Beispielsweise wird bei einigen nichtflüchtigen Speichertypen eine Spannung und/oder ein Strom verwendet, um den Widerstandspegel der Zelle (anstelle der gespeicherten Ladung) zu erfassen. Bei anderen nichtflüchtigen Speichertypen wird der Stromfluss durch die Zelle erfasst; ein Strompegel über oder unter einem bestimmten Schwellenwert kann angeben, dass eine Zelle programmiert ist. Wenn der Inhalt einzelner Zellen ermittelt werden soll, kann dies als „Lesen“ der Zellen bezeichnet werden. Das „Erfassen“ des Inhalts eines nichtflüchtigen Speicherarrays kann jedoch das Lesen des Inhalts einzelner Zellen oder das Erfassen einzelner oder kollektiver Eigenschaften der Zellen beinhalten, beispielsweise ob die Spannung oder der Widerstand der Zellen über oder unter einer vorbestimmten Schwelle liegt.
  • In einigen Ausführungsformen kann das Ändern der Programmiereinstellungen das Verringern der Programmierspannung beinhalten, die über die nichtflüchtigen Speicherelemente 123 ein- oder mehrmals während der Betriebsdauer der nichtflüchtigen Speichervorrichtung 120 angelegt wird, um die Nutzungsdauer der nichtflüchtigen Speichervorrichtung 120 zu verlängern und die Wahrscheinlichkeit fehlerhafter Datenlesevorgänge aufgrund von Zellenüberprogrammierung zu vermeiden.
  • Beispielsweise können die zur Herstellung nichtflüchtiger Speicherarrays verwendeten Prozesse dazu führen, dass eine signifikante Variation darin vorliegt, wie leicht die nichtflüchtigen Speicherelemente 123 programmiert werden können. Somit kann die Standardprogrammierspannung eines neuen Speicherarrays 200 eine Unterprogrammierung oder Überprogrammierung bewirken, noch bevor irgendwelche Programmier-/Löschzyklen durchgeführt wurden. Folglich kann es wünschenswert sein, Programmiereinstellungen aus anderen Gründen als der Notwendigkeit, Materialverschlechterungen zu kompensieren, zu ändern. Die Programmiereinstellungen müssen möglicherweise für jedes Speicherarray 200 auf unterschiedliche Weisen angepasst werden. Solche Einstellungen können das Anpassen der Programmierspannung nach oben und/oder nach unten beinhalten, wobei in einigen Fällen im Verlauf der Betriebsdauer des Speicherarrays 200 Anpassungen sowohl nach oben als auch nach unten erforderlich sind.
  • Ferner kann die ansteigende Schwellenspannung, die aufgrund einer Materialverschlechterung auftreten kann, nicht gleichmäßig über alle nichtflüchtigen Speicherelemente 123 auftreten. Aufgrund von Unterschieden in der Herstellung und/oder unterschiedlichen Verwendung können sich die Materialien, wie beispielsweise Isolatoren, einiger der nichtflüchtigen Speicherelemente 123 schneller als andere verschlechtern. Dementsprechend kann es wünschenswert sein, Programmiereinstellungen unabhängig über verschiedene Gruppierungen der nichtflüchtigen Speicherelemente 123 anzupassen. Beispielsweise können Programmiereinstellungen unabhängig für jedes der Speicherarrays 200, für jeden Block innerhalb eines Speicherarrays 200 oder sogar für jede Wortleitung innerhalb eines Speicherarrays 200 bestimmt werden. Das Beibehalten und Verwenden detaillierterer Programmiereinstellungen kann vorteilhafterweise geringfügige Änderungen in der Leistung des Speicherarrays 200 berücksichtigen, wie beispielsweise Unterschiede zwischen Wortleitungen oder Blöcken des Speicherarrays 200. Eine solche Detailliertheit erhöht jedoch den zum Speichern der Programmiereinstellungen erforderlichen Speicherplatz und auch die zum Programmieren von Zellen erforderliche Zeit, da eine größere Anzahl von Programmiereinstellungen zur sofortigen Verwendung gelesen und/oder gespeichert werden muss (beispielsweise in einer Registrierung eines Controllers, der die Einstellungsanpassungskomponente 150 implementiert). Dementsprechend gibt es einige Kompromisse hinsichtlich des Anwendungsbereichs jeder Programmiereinstellung.
  • Die Einstellungsanpassungskomponente 150 ist in einer Ausführungsform konfiguriert, eine oder mehrere der Programmiereinstellungen einer oder mehrerer Wortleitungen, Blöcke und/oder Speicherarrays 200 im Lauf der Zeit Zeit zu ändern. Die Programmiereinstellungen können wie oben beschrieben wortleitungsspezifisch, blockspezifisch oder speicherarrayspezifisch sein.
  • In einigen Beispielen kann die Einstellungsanpassungskomponente 150 die Programmierspannung verringern, die zum Programmieren der nichtflüchtigen Speicherzellen einer Wortleitung, eines Blocks oder eines Speicherarrays 200 ein- oder mehrmals während der Betriebslebensdauer des Speicherarrays 200 verwendet wird. In einigen Ausführungsformen kann die Einstellungsanpassungskomponente 150 die Programmierspannung des Speicherarrays 200 während der gesamten Betriebslebensdauer des Speicherarrays 200 mehrmals schrittweise einstellen. Ferner kann die Einstellungsanpassungskomponente 150 unterschiedliche Programmierspannungen für verschiedene Blöcke und/oder Wortleitungen des Speicherarrays 200 aufrechterhalten und/oder unabhängig anpassen. Um dies zu erreichen, kann die Einstellungsanpassungskomponente 150 einige oder alle nichtflüchtigen Speicherelemente 123 des Speicherarrays 200 testen, um zu bestimmen, ob eine Überprogrammierung der nichtflüchtigen Speicherelemente 123 mit der aktuellen Programmierspannung auftritt. Insbesondere bezieht sich „Überprogrammierung“ auf jeden Programmiervorgang, bei dem eines oder mehrere der nichtflüchtigen Speicherelemente 123 mehr Ladung erhalten als erforderlich, um die Schwellenspannung der Zelle so zu ändern, dass sie im Sollbereich der Schwellenspannungen liegt. Die zu hohe Ladung muss nicht zwangsläufig so hoch sein, dass sie Lesefehler verursacht. Es kann wünschenswert sein, eine Überprogrammierung zu diagnostizieren und Korrekturmaßnahmen zu ergreifen, bevor die Überprogrammierung so schwerwiegend wird, dass die überprogrammierten Zellen falsch gelesen werden.
  • Die Zustandsmaschine 222 stellt in einer Ausführungsform eine Steuerung von Speichervorgängen auf Chipebene bereit. Der On-Chip-Adressdecoder 224 stellt eine Adressschnittstelle bereit, um eine Umwandlung zwischen der vom Host oder einem Speicher-Controller verwendeten Adresse und der von den Decodern 240A, 240B, 242A, 242B verwendeten Hardwareadresse durchzuführen. In bestimmten Ausführungsformen umfasst die Zustandsmaschine 222 eine Ausführungsform der Einstellungsanpassungskomponente 150. Die Einstellungsanpassungskomponente 150 passt in einigen Ausführungsformen die am Speicherarray 200 angelegte Programmierspannung an wie zuvor beschrieben. Die Einstellungsanpassungskomponente 150 ist in bestimmten Ausführungsformen als Software in einem Gerätetreiber, Hardware in einem Controller 244 und/oder Hardware in einem Chip-Controller 220 und/oder einer Zustandsmaschine 222 ausgeführt.
  • In einer Ausführungsform kann eine oder eine beliebige Kombination von Chip-Controller 220, Einstellungsanpassungskomponente 150, On-Chip-Adressdecoder 224, Zustandsmaschine 222, Decoder 242A, Decoder 242B, Decoder 240A, Decoder 240B, Lese-/Schreibschaltungen 230A, Lese-/Schreibschaltungen 230B und/oder Controller 244 als eine oder mehrere Verwaltungsschaltungen bezeichnet werden.
  • 2A zeigt Blöcke von Speicherzellen in einer beispielhaften 2D-Konfiguration des Speicherarrays 200 von 1B. Das Speicherarray 200 kann viele Blöcke beinhalten. Jeder Beispielblock 202, 204 umfasst eine Anzahl von NAND-Strings und entsprechenden Bitleitungen, beispielsweise BL0, BL1, ..., die unter den Blöcken geteilt werden. Jeder NAND-String ist an einem Ende mit einem Drain Select Gate (SGD) verbunden, und die Steuergates der Drain Select Gates sind über eine gemeinsame SGD-Leitung verbunden. Die NAND-Strings sind an ihrem anderen Ende mit einem Source Select Gate (SGS) verbunden, das wiederum mit einer gemeinsamen Source-Leitung 206 verbunden ist. Sechzehn Wortleitungen, beispielsweise WL0-WL15, erstrecken sich zwischen den Source Select Gates und den Drain Select Gates.
  • In einigen Fällen können Dummy-Wortleitungen, die keine Benutzerdaten enthalten, auch im Speicherarray neben den Select-Gate-Transistoren (SGS/SGD) verwendet werden. Solche Dummy-Wortleitungen können eine Randdatenwortleitung vor bestimmten Randeffekten schützen. In einigen Beispielen sind Dummy-Wortleitungen neben den SGD- und SGS-Leitungen angeordnet. Somit sind in der beispielhaften Ausführungsform von 2A Dummy-Wortleitungen DWL0 angrenzend an die SGS-Leitungen von jedem der Blöcke 202, 204 angeordnet und Dummy-Wortleitungen DWL1 sind angrenzend an die SGD-Leitungen von jedem der Blöcke 202, 204 angeordnet. In anderen Beispielen sind mehrere (beispielsweise zwei oder drei) Dummy-Wortleitungen zwischen den Wortleitungen WL0 bis WL15 und jeder der SGD- und SGS-Leitungen angeordnet. In einigen Ausführungsformen werden die Dummy-Wortleitungen nicht mit dem Rest des Blocks 202, 204 gelöscht, zu dem sie gehören. Somit bleiben alle auf den Dummy-Wortleitungen gespeicherten Daten durch die Löschvorgänge bestehen, die üblicherweise zum Löschen von Benutzerdaten verwendet werden, und können nur durch Programmieren von Bits der Dummy-Wortleitungen geändert werden, die noch nicht programmiert wurden.
  • Wie in 2A dargestellt definieren die Bitleitungen BL0, BL1, ... Spalten der Wortleitungen von jedem Block 202, 204. Zusätzlich zu den Bitleitungen BL0, BL1, ..., die Benutzerdaten speichern, weist jeder Block 202, 204 eine Vielzahl von Ersatzspalten SC0, SC1, ... auf, die für verschiedene Zwecke verwendet werden können, beispielsweise zum Ersetzen der Bitleitungen BL0, BL1, ..., die unbrauchbar sind oder werden. Daher speichern die Ersatzspalten in einigen Fällen keine Benutzerdaten.
  • Jede der Wortleitungen des Speicherarrays 200 kann einen Wortleitungstreiber 208 aufweisen, der die Daten von dieser Wortleitung decodiert und/oder auf andere Weise verarbeitet. Somit können in 2A die Wortleitungen WL0 bis WL15 Wortleitungstreiber 208 aufweisen wie dargestellt. Die Wortleitungstreiber 208 können in den in 1B dargestellten Zeilendecodern 240A/240B beinhalten sein.
  • Es kann wünschenswert sein, die Programmiereinstellung(en) an einem Ort des Speicherarrays 200 zu speichern, der normalerweise nicht von Benutzerdaten belegt ist. Somit kann der Aufwand, der zum Speichern und/oder Lokalisieren der Programmiereinstellungen erforderlich ist, verringert werden und die Programmiereinstellungen können beständiger gegen Leistungsverlust im Speicherarray 200 sein. Ferner kann/können die Programmiereinstellung(en) durch Löschvorgänge, die in Bezug auf die Benutzerdaten ausgeführt werden, bestehen bleiben.
  • Dementsprechend kann/können in einigen Beispielen die Programmiereinstellung(en) in einem Einstellungssegment gespeichert sein, das sich von einem Benutzerdatensegment unterscheidet, in dem die Benutzerdaten gespeichert sind. Somit wird/werden die Programmiereinstellung(en) gegebenenfalls nicht gelöscht, wenn Benutzerdaten in demselben Speicherarray 200, demselben Block oder sogar derselben Wortleitung gelöscht werden.
  • In einigen Ausführungsformen können eine oder mehrere Programmiereinstellungen in einer oder mehreren der Dummy-Wortleitungen und/oder Ersatzspalten des Speicherarrays 200 gespeichert sein. Beispielsweise können eine oder mehrere Programmiereinstellungen in einer oder mehreren Zellen gespeichert sein, die sowohl Teil der Dummy-Wortleitungen als auch der Ersatzspalten sind. Beispielsweise kann sich eine Teilmenge 209 der nichtflüchtigen Speicherelemente 123 des Speicherarrays 200 auf der Dummy-Wortleitung DW1 des Blocks 202 befinden und die nichtflüchtigen Speicherelemente 123 einiger der Ersatzspalten (beispielsweise mindestens SC0 und SC1 wie dargestellt) des Blocks 202 beinhalten.
  • Die Teilmenge 209 kann als Einstellungssegment des Speicherarrays 200 dienen, während der Rest des Arrays (die herkömmlichen Spalten der verbleibenden Wortleitungen) als Datensegment oder Benutzerdatensegment dienen kann. Eine „Einstellungsteilmenge“ ist eine Gruppierung nichtflüchtiger Speicherzellen, die für die Speicherung einer oder mehrerer Einstellungen, beispielsweise Programmiereinstellungen, reserviert ist. Eine „Datenteilmenge“ ist eine Gruppierung nichtflüchtiger Speicherzellen, in der andere Daten, die keine Programmiereinstellungen beinhalten, wie beispielsweise Benutzerdaten, gespeichert werden können. Eine „Benutzerdaten-Teilmenge“ ist eine Gruppierung nichtflüchtiger Speicherzellen, die für die Speicherung von Benutzerdaten reserviert sind.
  • In einigen Ausführungsformen können Programmiereinstellungen wortleitungsspezifisch sein. Daher kann es wünschenswert sein, dass sich die Programmiereinstellung für eine bestimmte Wortleitung in dieser Wortleitung in (der) zugehörigen Ersatzspalte(n) befindet. Wenn Programmiereinstellungen in Wortleitungen gespeichert werden, die keine Dummy-Wortleitungen sind (das heißt Wortleitungen, die Benutzerdaten speichern), können Programmiereinstellungen zusammen entlang der Wortleitung gelöscht werden, zu der sie gehören. Somit kann die Einstellungsanpassungskomponente 150 konfiguriert sein, solche Programmiereinstellungen unmittelbar nach dem Löschen der Wortleitung neu zu schreiben.
  • In alternativen Ausführungsformen können Programmiereinstellungen blockspezifisch sein. Somit können Programmiereinstellungen in einer oder mehreren Wortleitungen innerhalb des Blocks gespeichert werden, zu dem sie gehören. Optional kann eine Programmiereinstellung für einen Block auf mehrere Dummy-Wortleitungen aufgeteilt werden. Beispielsweise kann eine Ein-Byte-Programmiereinstellung in acht Dummy-Wortleitungen einer einzelnen Spalte mit einem Bit in jeder der Dummy-Wortleitungen gespeichert werden. Alternativ kann eine einzelne Dummy-Wortleitung die Programmiereinstellung für den Block speichern, wobei optional mehrere Iterationen der Programmiereinstellung in der Wortleitung zur Redundanz gespeichert werden. Dies ist beispielhaft in 2A dargestellt, wobei die Teilmenge 209 eine Programmiereinstellung für den Block 202 speichert. Falls gewünscht kann eine Teilmenge 211 der nichtflüchtigen Speicherelemente 123 des Blocks 204, die sich in den Ersatzspalten der Dummy-Wortleitung DWL1 des Blocks 204 befindet, eine Programmiereinstellung für den Block 204 speichern.
  • Es kann vorteilhaft sein, Programmiereinstellungen in der Nähe der Wortleitungstreiber für die Wortleitungen zu speichern, in denen sie gespeichert sind. Dies kann das Abrufen der Programmiereinstellungen beschleunigen, wodurch Programmiervorgänge beschleunigt werden, da Zellen in der Nähe des Wortleitungstreibers aufgrund des kürzeren Abstands zwischen den Speicherzellen und dem Wortleitungstreiber, der den Impuls liefert, eine erheblich geringere RC-Verzögerung aufweisen. Das Speichern der Programmiereinstellungen in den Ersatzspalten von jedem Block 202, 204 und insbesondere in den Ersatzspalten angrenzend an den Wortleitungstreiber 208 für die Wortleitung, in der sie gespeichert sind, kann daher den zusätzlichen Vorteil aufweisen, dass die Programmiereinstellungen für ein schnelleres Abrufen und Verwenden angeordnet sind. Das Speichern der Programmiereinstellungen in der Teilmenge 209 und/oder der Teilmenge 211 kann einen solchen Vorteil bieten.
  • Die nichtflüchtigen Speicherelemente 123 können eine Vielzahl von Technologien beinhalten, beinhaltend, aber nicht beschränkt auf alle nichtflüchtigen Speichertypen, auf die zuvor im Hintergrund Bezug genommen wird. Ein Typ eines nichtflüchtigen Speichers, der in dem Speicherarray bereitgestellt werden kann, ist eine Ladungseinfang-Speicherzelle. Andere Arten von nichtflüchtigem Speicher können ebenfalls verwendet werden. Beispielsweise kann eine Ladungseinfang-Speicherzelle ein nichtleitendes dielektrisches Material anstelle eines leitenden schwebenden Gates verwenden, um Ladung auf nichtflüchtige Weise zu speichern. In einem Beispiel ist ein Dreischichtdielektrikum aus Siliciumoxid, Siliciumnitrid und Siliciumoxid („ONO“) zwischen einem leitenden Steuergate und einem Halbleiter angeordnet. Die Zelle wird programmiert, indem Elektronen aus dem Zellkanal in das Nitrid injiziert werden, wo sie in einem begrenzten Bereich eingefangen und gespeichert werden. Diese gespeicherte Ladung ändert dann die Schwellenspannung eines Teils des Kanals der Zelle auf eine Weise, die erfassbar ist. Die Zelle wird durch Injizieren heißer Löcher in das Nitrid gelöscht. Eine ähnliche Zelle kann in einer Split-Gate-Konfiguration bereitgestellt werden, bei der sich ein dotiertes Polysilicium-Gate über einen Teil des Speicherzellenkanals erstreckt, um einen separaten Auswahltransistor zu bilden.
  • In einem anderen Ansatz werden NROM-Zellen verwendet. Beispielsweise werden in jeder NROM-Zelle zwei Bits gespeichert, wobei sich eine dielektrische ONO-Schicht über den Kanal zwischen Source- und Drain-Diffusion erstreckt. Die Ladung für ein Datenbit ist in der dielektrischen Schicht neben dem Drain und die Ladung für das andere Datenbit in der dielektrischen Schicht neben der Quelle angeordnet. Die Datenspeicherung mit mehreren Zuständen wird erhalten, indem Binärzustände der räumlich getrennten Ladungsspeicherbereiche innerhalb des Dielektrikums separat gelesen werden. Andere Arten von nichtflüchtigem Speicher sind ebenfalls bekannt.
  • 2B zeigt eine Querschnittsansicht von beispielhaften Ladungseinfang-Speicherzellen in NAND-Strings als ein Beispiel von Speicherzellen in 2A. Die Ansicht ist in einer Wortleitungsrichtung von Speicherzellen, die ein flaches Steuergate und Ladungseinfangbereiche umfassen, als ein 2D-Beispiel von Speicherzellen im Speicherarray 200 von 1B dargestellt. Ein Ladungseinfangspeicher kann in NOR- und NAND-Flash-Speichervorrichtungen verwendet werden. Diese Technologie verwendet einen Isolator wie einen SiN-Film zum Speichern von Elektronen im Gegensatz zu einer Floating-Gate-MOSFET-Technologie, die einen Leiter wie dotiertes polykristallines Silicium zum Speichern von Elektronen verwendet. Beispielsweise erstreckt sich eine Wortleitung (WL) 424 über NAND-Strings, welche die jeweiligen Kanalbereiche 406, 416 und 426 beinhalten. Teile der Wortleitung stellen Steuergates 402, 412 und 422 bereit. Unterhalb der Wortleitung befinden sich eine IPD-Schicht 428, Ladungseinfangschichten 404, 414 und 421, Polysiliciumschichten 405, 415 und 425 und Tunnelschichtschichten 409, 407 und 408. Jede Ladungseinfangschicht erstreckt sich kontinuierlich in einem jeweiligen NAND-String.
  • Eine Speicherzelle 400 beinhaltet das Steuergate 402, die Ladungseinfangschicht 404, die Polysiliciumschicht 405 und einen Teil des Kanalbereichs 406. Eine Speicherzelle 410 beinhaltet das Steuergate 412, die Ladungseinfangschicht 414, eine Polysiliciumschicht 415 und einen Teil des Kanalbereichs 416. Eine Speicherzelle 420 beinhaltet das Steuergate 422, die Ladungseinfangschicht 421, die Polysiliciumschicht 425 und einen Teil des Kanalbereichs 426.
  • Ein Vorteil eines flachen Steuergates besteht darin, dass die Ladungseinfangschicht dünner als ein schwebendes Gate gestaltet werden kann. Zusätzlich können die Speicherzellen näher aneinander angeordnet werden.
  • 2C zeigt eine Querschnittsansicht der Struktur von 2B entlang der Linie 429. Die Ansicht zeigt einen NAND-String 430 mit einem flachen Steuergate und einer Ladungseinfangschicht. Der NAND-String 430 beinhaltet einen SGS-Transistor 431, beispielhafte Speicherzellen 400, 433, ..., 434 und 435 und einen SGD-Transistor 436.
  • Der NAND-String kann auf einem Substrat ausgebildet sein, das einen p-dotierten Substratbereich 455, eine n-dotierte Senke 456 und eine p-dotierte Senke 457 umfasst. N-dotierte Source/Drain-Diffusionsbereiche sd1, sd2, sd3, sd4, sd5, sd6 und sd7 sind in der p-dotierten Senke 457 ausgebildet. Eine Kanalspannung Vch kann direkt am Kanalbereich des Substrats angelegt werden. Die Speicherzelle 400 beinhaltet das Steuergate 402 und die IPD-Schicht 428 über der Ladungseinfangschicht 404, der Polysiliciumschicht 405, der Tunnelschicht 409 und dem Kanalbereich 406.
  • Die Steuergateschicht kann beispielsweise aus Polysilicium bestehen und die Tunnelschicht kann aus Siliciumoxid bestehen. Die IPD-Schicht kann ein Stapel von High-K-Dielektrika wie AlOx oder HfOx sein, die dazu beitragen, das Kopplungsverhältnis zwischen der Steuergateschicht und der Ladungseinfang- oder Ladungsspeicherschicht zu erhöhen. Die Ladungseinfangschicht kann beispielsweise eine Mischung aus Siliciumnitrid und -oxid sein.
  • Die SGD- und SGS-Transistoren weisen die gleiche Konfiguration wie die Speicherzellen auf, jedoch eine längere Kanallänge, um sicherzustellen, dass der Strom in einem gesperrten NAND-String abgeschaltet wird.
  • In diesem Beispiel erstrecken sich die Schichten 404, 405 und 409 kontinuierlich im NAND-String. Bei einem anderen Ansatz können Teile der Schichten 404, 405 und 409, die sich zwischen den Steuergates 402, 412 und 422 befinden, entfernt werden, wodurch eine obere Fläche des Kanalbereichs 406 freigelegt wird.
  • 2D zeigt eine beispielhafte Speicherzelle 500. Die Speicherzelle umfasst ein Steuergate CG, das eine Wortleitungsspannung Vw110 empfängt, einen Drain bei einer Spannung Vd, eine Source bei einer Spannung Vs und einen Kanal bei einer Spannung Vch.
  • 3 zeigt eine perspektivische Ansicht einer Speichervorrichtung 600, die einen Satz von Blöcken in einer beispielhaften 3D-Konfiguration des Speicherarrays 200 von 1 umfasst. Auf dem Substrat befinden sich beispielhafte Blöcke BLK0, BLK1, BLK2 und BLK3 von Speicherzellen (Speicherelementen) und ein Randbereich 604 mit einer Schaltung zur Verwendung durch die Blöcke. Beispielsweise kann die Schaltung Spannungstreiber 605 beinhalten, die mit Steuergateschichten der Blöcke verbunden sein können. Bei einem Ansatz werden Steuergateschichten in einer gemeinsamen Höhe in den Blöcken gemeinsam angesteuert. Das Substrat 601 kann auch eine Schaltung unter den Blöcken aufweisen, zusammen mit einer oder mehreren unteren Metallschichten, die in leitenden Pfaden strukturiert sind, um Signale der Schaltung zu übertragen. Die Blöcke sind in einem Zwischenbereich 602 der Speichervorrichtung ausgebildet. In einem oberen Bereich 603 der Speichervorrichtung sind eine oder mehrere obere Metallschichten in leitenden Pfaden strukturiert, um Signale der Schaltung zu übertragen. Jeder Block umfasst einen gestapelten Bereich von Speicherzellen, wobei abwechselnde Ebenen des Stapels Wortleitungen darstellen. In einem möglichen Ansatz weist jeder Block gegenüberliegende abgestufte Seiten auf, von denen sich vertikale Kontakte nach oben zu einer oberen Metallschicht erstrecken, um Verbindungen zu leitenden Pfaden herzustellen. Es sind zwar vier Blöcke als Beispiel dargestellt; es können aber auch zwei oder mehr Blöcke verwendet werden, die sich in x- und/oder y-Richtung erstrecken.
  • Bei einem möglichen Ansatz stellt die Länge der Ebene in x-Richtung eine Richtung dar, in der sich Signalpfade zu Wortleitungen in der einen oder den mehreren oberen Metallschichten (einer Wortleitungs- oder SGD-Linienrichtung) erstrecken, und die Breite der Ebene in y-Richtung stellt eine Richtung dar, in der sich Signalpfade zu Bitleitungen in der einen oder den mehreren oberen Metallschichten (einer Bitleitungsrichtung) erstrecken. Die z-Richtung stellt eine Höhe der Speichervorrichtung dar.
  • 4 zeigt eine beispielhafte Querschnittsansicht eines Teils eines der Blöcke von 3. Der Block umfasst einen Stapel 610 aus abwechselnd leitenden und dielektrischen Schichten. In diesem Beispiel beinhalten die leitenden Schichten zusätzlich zu den Datenwortleitungsschichten (oder Wortleitungen) WLL0-WLL10 zwei SGD-Schichten, zwei SGS-Schichten und vier Dummy-Wortleitungsschichten (oder Wortleitungen) WLD1, WLD2, WLD3 und WLD4. Die dielektrischen Schichten sind als DLO-DL19 bezeichnet. Ferner sind Bereiche des Stapels dargestellt, welche die NAND-Strings NS1 und NS2 beinhalten. Jeder NAND-String umfasst ein Speicherloch 618 oder 619, das mit Materialien gefüllt ist, die neben den Wortleitungen Speicherzellen bilden. Ein Bereich 622 des Stapels ist in 5 detaillierter gezeigt.
  • Der Stapel umfasst ein Substrat 611, einen Isolierfilm 612 auf dem Substrat und einen Teil einer Source-Leitung SL. NS1 weist ein Source-Ende 613 an einer Unterseite 614 des Stapels und ein Drain-Ende 615 an einer Oberseite 616 des Stapels auf. Metallgefüllte Schlitze 617 und 620 können periodisch über den Stapel als Verbindungen vorgesehen sein, die sich durch den Stapel erstrecken, um beispielsweise die Source-Leitung mit einer Leitung über dem Stapel zu verbinden. Die Schlitze können während der Bildung der Wortleitungen verwendet und anschließend mit Metall gefüllt werden. Ein Teil einer Bitleitung BL0 ist ebenfalls dargestellt. Ein leitendes Verbindungsloch 621 verbindet das Drain-Ende 615 mit BL0.
  • 5 zeigt eine Nahansicht des Bereichs 622 des Stapels von 4. Speicherzellen sind auf den verschiedenen Ebenen des Stapels am Schnittpunkt einer Wortleitungsschicht und eines Speicherlochs ausgebildet. In diesem Beispiel sind die SGD-Transistoren 680 und 681 über den Dummy-Speicherzellen 682 und 683 und einer Datenspeicherzelle MC angeordnet. Eine Anzahl von Schichten kann entlang der Seitenwand (SW) des Speicherlochs 630 und/oder innerhalb jeder Wortleitungsschicht abgeschieden werden, beispielsweise unter Verwendung einer Atomlagenabscheidung. Beispielsweise kann jede Säule (beispielsweise die Säule, die durch die Materialien innerhalb eines Speicherlochs gebildet wird) eine Ladungseinfangschicht 663 oder einen Film wie SiN oder ein anderes Nitrid, eine Tunnelschicht 664, einen Kanal 665 (umfassend beispielsweise Polysilicium) und einen dielektrischen Kern 666 beinhalten. Eine Wortleitungsschicht kann ein Sperroxid/Sperr-High-k-Material 660, eine Metallsperrschicht 661 und ein leitendes Metall 662 wie Wolfram als Steuergate beinhalten. Beispielsweise sind die Steuergates 690, 691, 692, 693 und 694 angeordnet. In diesem Beispiel sind alle Schichten außer dem Metall in dem Speicherloch vorgesehen. Bei anderen Ansätzen können sich einige der Schichten in der Steuergateschicht befinden. In den verschiedenen Speicherlöchern sind in ähnlicher Weise zusätzliche Säulen ausgebildet. Eine Säule kann einen säulenförmigen aktiven Bereich (AA) eines NAND-Strings bilden.
  • Wenn eine Speicherzelle programmiert wird, werden Elektronen in einem Teil der Ladungseinfangschicht gespeichert, der der Speicherzelle zugeordnet ist. Diese Elektronen werden vom Kanal und durch die Tunnelschicht in die Ladungseinfangschicht gezogen. Die Vth einer Speicherzelle wird proportional zu (beispielsweise mit einer Zunahme) der Menge der gespeicherten Ladung erhöht. Während eines Löschvorgangs kehren die Elektronen zum Kanal zurück.
  • Jedes der Speicherlöcher kann mit einer Vielzahl von ringförmigen Schichten gefüllt sein, die eine Sperroxidschicht, eine Ladungseinfangschicht, eine Tunnelschicht und eine Kanalschicht umfassen. Ein Kernbereich jedes der Speicherlöcher ist mit einem Körpermaterial gefüllt und die Vielzahl von ringförmigen Schichten befindet sich zwischen dem Kernbereich und der Wortleitung in jedem der Speicherlöcher.
  • Es kann davon ausgegangen werden, dass der NAND-String einen Floating-Body-Kanal aufweist, da die Länge des Kanals nicht auf einem Substrat ausgebildet ist. Ferner ist der NAND-String durch eine Vielzahl von Wortleitungsschichten übereinander in einem Stapel angeordnet und durch dielektrische Schichten voneinander getrennt.
  • 6 zeigt eine Beispielansicht von NAND-Strings in Unterblöcken in einer 3D-Konfiguration, die mit 4 übereinstimmt. Jeder Unterblock enthält mehrere NAND-Strings, wobei ein beispielhafter NAND-String dargestellt ist. Beispielsweise umfassen SB0, SB1, SB2 und SB3 jeweils beispielhafte NAND-Strings 700n, 710n, 720n und 730n. Die NAND-Strings weisen Datenwortleitungen, Dummy-Wortleitungen und ausgewählte Gate-Leitungen auf, die mit 4 übereinstimmen. In einem Block BLK umfasst jeder Unterblock eine Menge von NAND-Strings, die sich in x-Richtung erstrecken und eine gemeinsame SGD-Leitung aufweisen. Die NAND-Strings 700n, 710n, 720n und 730n befinden sich jeweils in den Unterblöcken SB0, SB1, SB2 und SB3. Die Programmierung des Blocks kann jeweils für einen Unterblock erfolgen. Innerhalb jedes Unterblocks kann eine Wortleitungs-Programmierreihenfolge befolgt werden, beispielsweise beginnend bei WL0, der source-seitigen Wortleitung, und fortlaufend jeweils eine Wortleitung bis WLL10, der drain-seitigen Wortleitung.
  • Die NAND-Strings 700n, 710n, 720n und 730n weisen jeweils Kanalbereiche 700a, 710a, 720a und 730a auf.
  • Zusätzlich beinhaltet der NAND-String 700n SGS-Transistoren 700 und 701, Dummy-Speicherzellen 702 und 703, Datenspeicherzellen 704, 705, 706, 707, 708, 709, 710, 711, 712, 713 und 714, Dummy-Speicherzellen 715 und 716 und SGD-Transistoren 717 und 718.
  • Der NAND-String 710n beinhaltet SGS-Transistoren 720 und 721, Dummy-Speicherzellen 722 und 723, Datenspeicherzellen 724, 725, 726, 727, 728, 729, 730, 731, 732, 733 und 734, Dummy-Speicherzellen 735 und 736 und SGD-Transistoren 737 und 738.
  • Der NAND-String 720n beinhaltet SGS-Transistoren 740 und 741, Dummy-Speicherzellen 742 und 743, Datenspeicherzellen 744, 745, 746, 747, 748, 749, 750, 751, 752, 753 und 754, Dummy-Speicherzellen 755 und 756 und SGD-Transistoren 757 und 758.
  • Der NAND-String 730n beinhaltet SGS-Transistoren 760 und 761, Dummy-Speicherzellen 762 und 763, Datenspeicherzellen 764, 765, 766, 767, 768, 769, 770, 771, 772, 773 und 774, Dummy-Speicherzellen 775 und 776 und SGD-Transistoren 777 und 778.
  • 7 zeigt zusätzliche Details der Unterblöcke SB0-SB3 von 6. Es sind beispielhafte Speicherzellen dargestellt, die sich in x-Richtung entlang von Wortleitungen in jedem Unterblock erstrecken. Jede Speicherzelle ist der Einfachheit halber als Würfel dargestellt. SB0 beinhaltet die NAND-Strings 700n, 701n, 702n und 703n. SB1 beinhaltet die NAND-Strings 710n, 711n, 712n und 713n. SB2 beinhaltet die NAND-Strings 720n, 721n, 722n und 723n. SB3 beinhaltet die NAND-Strings 730n, 731n, 732n und 733n. Bitleitungen sind mit Mengen von NAND-Strings verbunden. Beispielsweise ist eine Bitleitung BL0 mit den NAND-Strings 700n, 710n, 720n und 730n verbunden, eine Bitleitung BL1 ist mit den NAND-Strings 701n, 711n, 721n und 731n verbunden, eine Bitleitung BL2 ist mit den NAND-Strings 702n, 712n, 722n und 732n verbunden und eine Bitleitung BL3 ist mit den NAND-Strings 703n, 713n, 723n und 733n verbunden. Erfassungsschaltungen können mit jeder Bitleitung verbunden sein. Beispielsweise ist die Erfassungsschaltung 780, 781, 782 und 783 mit den Bitleitungen BL0, BL1, BL2 und BL3 verbunden.
  • 8A zeigt beispielhafte Vth-Verteilungen von Speicherzellen, bei denen zwei Datenzustände verwendet werden und eine Verschiebung von Vth beobachtet wird. Die Schwellenspannungsverschiebung kann allmählich und/oder dauerhaft auftreten, wenn zusätzliche Programmier- und/oder Löschzyklen ausgeführt werden. Beispielsweise kann eine Verschlechterung einer oder mehrerer isolierender Schichten, welche die zum Programmieren einer Zelle erforderliche Energie steuern, dazu führen, dass die Zelle im Laufe der Zeit leichter zu programmieren ist, was dazu führt, dass die Schwellenspannung allmählich ansteigt (beispielsweise kann sich die Verteilung von der Kurve 801a zu der Kurve 801 in 8A als Ergebnis dieser wiederholten Programm- und Löschzyklen verschieben).
  • In 8A und 8B stellen die Vth-Verteilungen mit einer gestrichelten Linie einen Anfangszustand einer Menge von Speicherzellen, wie beispielsweise diejenigen in einer Wortleitung, diejenigen in einer Menge von Wortleitungen, diejenigen in einem Block oder diejenigen in einer gesamten Speichervorrichtung vor dem Auftreten einer signifikanten Anzahl von Programmier-/Löschzyklen dar. Die Vth-Verteilungen mit einer durchgezogenen Linie stellen den Zustand der Speicherzellen nach dem Auftreten einer Anzahl von Programmier-/Löschzyklen dar.
  • Während eines Programmiervorgangs kann die endgültige Vth-Verteilung durch Verwendung eines oder mehrerer Programmierdurchläufe erreicht werden. Eine mit mehreren Impulsen programmierte Speichervorrichtung kann unter Verwendung mehrerer Programmierdurchgänge programmiert werden. Umgekehrt kann eine mit einem einzelnen Impuls programmierte Speichervorrichtung über einen einzelnen Programmierdurchlauf oder einen einzelnen Impuls programmiert werden. Für die Mehrfachimpulsprogrammierung kann jeder Durchgang beispielsweise eine inkrementelle Schrittimpulsprogrammierung verwenden. Während eines Programmierdurchlaufs werden Programmüberprüfungsiterationen für eine ausgewählte Wortleitung durchgeführt. Eine Programmüberprüfungsiteration umfasst einen Programmabschnitt, in dem eine Programmspannung an der Wortleitung angelegt wird, gefolgt von einem Verifizierungsabschnitt, in dem ein oder mehrere Verifizierungstests durchgeführt werden. Jeder programmierte Zustand weist eine Verifizierungsspannung auf, die im Verifizierungstest für den Zustand verwendet wird.
  • Eine Vth-Verteilung 800 stellt einen gelöschten Zustand (Eslc) dar, eine Vth-Verteilung 801 stellt einen programmierten Datenzustand (Pslc) mit einer Vth-Verschiebung nach oben aufgrund einer Verschlechterung der isolierenden Elemente der Speicherzellen dar, die durch das Ausführen vorhergehender Programmier-/Löschvorgänge bewirkt wurde, und eine Vth-Verteilung 801a stellt Pslc ohne eine Vth-Verschiebung nach oben dar, wie dies vor der Ausführung einer Anzahl von Programmier-/Löschvorgänge der Fall wäre. Das heißt die Vth-Verteilung 801 weist eine Verschiebung nach oben in Bezug auf die Vth-Verteilung 801a auf. Der gelöschte Zustand kann ein Bit darstellen, während der programmierte Zustand beispielsweise ein Nullbit darstellt. Eine Verifizierungsspannung für den programmierten Zustand ist VvSLC und eine Lesespannung zur Unterscheidung zwischen den beiden Zuständen ist VrSLC in der normalen Lesesituation oder VrSLCa in der ersten Lesesituation. Es gilt VrSLCa<VrSLC, da der untere Teil der Vth-Verteilung 801a niedriger ist als der untere Teil der Vth-Verteilung 801. Im Allgemeinen sollte eine Lesespannung zur Unterscheidung zwischen benachbarten Zuständen, beispielsweise einem niedrigeren Zustand und einem höheren Zustand, auf halbem Weg zwischen dem erwarteten oberen Ende der Vth-Verteilung des unteren Zustands und dem erwarteten unteren Ende der Vth-Verteilung des höheren Zustands liegen.
  • 8B zeigt beispielhafte Vth-Verteilungen von Speicherzellen, bei denen vier Datenzustände verwendet werden und eine Verschiebung von Vth beobachtet wird. Die Datenzustände sind durch Vth-Verteilungen für die Zustände Er, A, B bzw. C dargestellt und eine beispielhafte Codierung von Bits für jeden Zustand ist 11, 10, 00 bzw. 01 im Format eines Upper-Page-(UP-)Bits/Lower-Page-(LP-)Bits. Die Verifizierungsspannungen sind VvA, VvB und VvC und die Lesespannungen sind VrA, VrB und VrC. Ein LP-Lesevorgang kann VrA und VrC verwenden und ein UP-Lesevorgang kann VrB verwenden.
  • Insbesondere kann die Vth-Verschiebung nach oben (oder gegebenenfalls Verschiebung nach unten) in jedem der Zustände Er, A, B und C unterschiedlich sein. Beispielsweise können niedrigere Zustände ein größeres Verschieben nach oben erfahren, während höhere Zustände ein vergleichsweise niedrigeres Verschieben nach oben oder sogar ein Verschieben nach unten von Vth erfahren können. Im Beispiel von 8B weisen die Vth-Verteilungen 810, 811 und 812 für die Zustände Er, A bzw. B eine Vth-Verschiebung nach oben aufgrund eines Durchbruchs der Isolationsschicht auf, die die Energie (beispielsweise Programmierspannung) steuert, die zum Programmieren der Zelle erforderlich ist wie zuvor beschrieben. Die Vth-Verteilungen 810a, 811a und 812a, die vor dem Auftreten von Programmier-/Löschzyklen gemessen wurden, weisen keine Vth-Verschiebung nach oben auf. Ferner ist die Verschiebung nach oben für den A-Zustand größer als für den B-Zustand. Die Vth-Verteilung 813 für den C-Zustand weist in der normalen Lesesituation eine Vth-Verschiebung nach unten im Vergleich zur Vth-Verteilung 813a der ersten Lesesituation auf. Für die höheren Zustände ist das Kopplungspotential des Kanals an die Wortleitung typischerweise nicht stark genug, um mehr Elektronen in der Ladungseinfangschicht einer Zelle einzufangen. Dies ist auf einen Abschirmeffekt der Elektronen zurückzuführen, die bereits in der Ladungseinfangschicht der Zelle vorhanden sind und die hohe Vth liefern. Stattdessen werden die Elektronen in der Ladungseinfangschicht stärker zum Steuergate hin angezogen, was zu einer Vth-Verschiebung nach unten führt. Datenspeicherungseffekte können auch für die höheren Zustände vorhanden sein, in denen Ladung aus der Ladungseinfangschicht verloren geht.
  • Das Auftreten unterschiedlicher Verschiebungen nach oben in einer Multiple-Level-Cell-(MLC-)Speichervorrichtung kann beispielsweise dadurch behoben werden, dass Programmiereinstellungen, wie beispielsweise Programmierspannungen, für jeden zu programmierenden Zustand unterschiedlich angepasst werden. Für das Beispiel von 8B kann eine größere Verringerung der Programmierspannung verwendet werden, um eine Zelle auf einen der niedrigeren Zustände zu programmieren, während eine vergleichsweise kleinere Verringerung der Programmierspannung (oder sogar eine Erhöhung der Programmierspannung) verwendet werden kann, um eine Zelle auf einen der höheren Zustände zu programmieren.
  • 9 zeigt eine Wellenform eines beispielhaften Programmiervorgangs. Die horizontale Achse zeigt eine Program-Loop-(PL-)Nummer und die vertikale Achse zeigt die Steuergate- oder Wortleitungsspannung. Im Allgemeinen kann ein Programmiervorgang das Anwenden einer Impulsfolge auf eine ausgewählte Wortleitung beinhalten, wobei die Impulsfolge mehrere Programmschleifen oder Programmverifizierungsiterationen enthält. Der Programmteil der Programmverifizierungsiteration umfasst eine Programmspannung und der Verifizierungsteil der Programmverifizierungsiteration umfasst eine oder mehrere Verifizierungsspannungen, wie sie in Verbindung mit 8A und 8B erörtert wurden.
  • Jede Programmspannung umfasst zwei Schritte in einem Ansatz. Ferner wird in diesem Beispiel Incremental Step Pulse Programing (ISPP) verwendet, wobei die Programmspannung in jeder aufeinander folgenden Programmschleife unter Verwendung einer festen oder variierenden Schrittgröße ansteigt. In diesem Beispiel wird ISPP in einem einzigen Programmierdurchlauf verwendet, in dem die Programmierung abgeschlossen wird. ISPP kann auch in jedem Programmierdurchlauf eines Mehrfachdurchlaufvorgangs verwendet werden.
  • Die Wellenform 900 umfasst eine Reihe von Programmspannungen 901, 902, 903, 904, 905, ... 906, die auf eine zum Programmieren ausgewählte Wortleitung und auf eine zugeordnete Menge nichtflüchtiger Speicherzellen angewendet werden. Eine oder mehrere Verifizierungsspannungen können basierend auf den Zieldatenzuständen, die überprüft werden, als Beispiel nach jeder Programmspannung bereitgestellt werden. 0 V kann an der ausgewählten Wortleitung zwischen Programm- und Verifizierungsspannung angelegt werden. Beispielsweise können nach jeder der Programmspannungen 901 und 902 A- und B-Zustands-Verifizierungsspannungen von VvA bzw. VvB (Wellenform 910) angelegt werden. Nach jeder der Programmspannungen 903 und 904 können A-, B- und C-Zustands-Verifizierungsspannungen von VvA, VvB und VvC (Wellenform 911) angelegt werden. Nach mehreren zusätzlichen Programmschleifen, die nicht dargestellt sind, können nach der endgültigen Programmspannung 906 E-, F- und G-Zustands-Verifizierungsspannungen von VvE, VvF und VvG (Wellenform 912) angelegt werden.
  • 10 zeigt einen Teil der Speicherzelle MC von 5, der die Elektroneninjektion in einen Ladungseinfangbereich während einer schwachen Programmierung zeigt. Die Speicherzelle beinhaltet ein Steuergate 694, eine Metallsperrschicht 661a, ein Sperroxid 660a, eine Ladungseinfangschicht 663, eine Tunnelschicht 664, einen Kanal 665 und einen dielektrischen Kern 666. Aufgrund der erhöhten Wortleitungsspannung wird ein elektrisches Feld (E) erzeugt, das Elektronen (siehe Beispielelektron 1050) in die Ladungseinfangschicht anzieht, wodurch sich Vth erhöht. Diese schwache Programmierung kann durch den Poole-Frenkel-Effekt bewirkt werden, bei dem ein elektrischer Isolator Strom leiten kann. Es handelt sich hierbei um eine Art Elektronentunneleffekt durch Fallen.
  • Die Vth-Verschiebung kann in 3D-NAND-Flash-Speicherstrukturen besonders häufig sein, insbesondere wenn Einzelimpulsprogrammierung verwendet wird. Die Einzelimpulsprogrammierung kann im Laufe der Zeit zu einer Verschlechterung eines oder mehrerer isolierender Elemente jeder Zelle führen. Solche Schichten können die Ladungseinfangschicht 663 und die Tunnelschicht 664 von 5 beinhalten, sind aber nicht darauf beschränkt. Das Ergebnis kann sein, dass, wenn weiterhin dieselbe Programmierspannung VPGM angelegt wird, überschüssige Ladung in die Zellen eindringen kann, was dazu führt, dass die Schwellenspannung Vth zu hoch ist. Wenn dieser Effekt nicht gemindert wird, kann der Anstieg von Vth dazu führen, dass die überprogrammierten Zellen falsch fälschlicherweise gelesen werden. Ferner können einzelimpulsprogrammierte Speicherarrays besonders empfindlich gegenüber Änderungen darin sein, wie leicht Speicherzellen programmiert werden können, da die Schwellenspannung der Zelle vollständig von den Eigenschaften dieses einen Impulses abhängen kann. Daher kann es von besonderer Bedeutung sein, über die richtigen Programmiereinstellungen, wie beispielsweise die Programmierspannung, für einzelimpulsprogrammierte Speicherarrays zu verfügen.
  • Die Einstellungsanpassungskomponente 150 kann das Stabilisieren von Vth durch Anpassen einer oder mehrerer Programmiereinstellungen unterstützen. Im Allgemeinen kann, wie zuvor beschrieben, die Einstellungsanpassungskomponente 150 die Programmierspannung bestimmen, die zum Programmieren einiger oder aller nichtflüchtiger Speicherelemente 123 eines Speicherarrays, wie beispielsweise des Speicherarrays 200, verwendet werden soll.
  • In einer Ausführungsform führt die Spannungsanpassungskomponente einen Lesevorgang an dem Teil des Speicherarrays 200 durch, in dem eine oder mehrere Programmeinstellungen (nachstehend beispielsweise als eine einzelne Programmeinstellung angenommen) vorhanden sind. Wie zuvor beschrieben kann die Speichereinstellung optional in einer oder mehreren Ersatzspalten einer oder mehrerer Dummy-Wortleitungen des Speicherarrays 200 gespeichert werden. Zusätzliche Optionen zum Speichern von Programmiereinstellungen sind im US-Patent Nr. 7,808,819 dargelegt, welches durch Bezugnahme hierin aufgenommen wird.
  • In einer Ausführungsform verwendet die Einstellungsanpassungskomponente 150 die Programmiereinstellung, um die nichtflüchtigen Speicherelemente 123 zu programmieren. Die Einstellungsanpassungskomponente 150 kann in Verbindung mit anderen Komponenten, wie beispielsweise dem Chip-Controller 220, ausgebildet sein, die nichtflüchtigen Speicherelemente 123 zu programmieren.
  • In einer Ausführungsform bestimmt die Spannungsanpassungskomponente, ob die Programmiereinstellung geändert werden soll, indem bestimmt wird, ob eine Überprogrammierung eines oder mehrerer der nichtflüchtigen Speicherelemente 123 mit der Programmiereinstellung auftritt. Wenn die Programmiereinstellung die Programmierspannung ist, die zum Programmieren der nichtflüchtigen Speicherelemente 123 verwendet wird, kann eine Überprogrammierung angeben, dass die Programmierspannung für zukünftige Programmiervorgänge reduziert werden sollte. Die Einstellungsanpassungskomponente 150 wählt eine geänderte und/oder aktualisierte Programmiereinstellung aus, die in zukünftigen Vorgängen anstelle der zuvor verwendeten Programmiereinstellung verwendet werden soll.
  • In einigen Ausführungsformen speichert die Einstellungsanpassungskomponente 150 die aktualisierte Programmiereinstellung in dem bezeichneten Teil des Speicherarrays 200. Wenn die aktualisierte Programmiereinstellung in einer Dummy-Wortleitung gespeichert ist, wie oben beschrieben, speichert die Einstellungsanpassungskomponente 150 eine aktualisierte Programmiereinstellung in dem bezeichneten Teil des Speicherarrays 200, ohne zuerst die zuvor verwendete Programmiereinstellung zu löschen. Vielmehr programmiert in einigen Ausführungsformen die Einstellungsanpassungskomponente 150 ein oder mehrere Bits der Teilmenge des Speichers, die die Programmiereinstellung enthält (beispielsweise von „1“ bis „0“), um die Programmiereinstellung zur aktualisierten Programmiereinstellung zu ändern. Auf diese Weise wird die aktualisierte Programmiereinstellung an derselben Stelle gespeichert wie die zuvor verwendete Programmiereinstellung, ohne zuvor die vorhergehende Programmiereinstellung zu löschen. Dieser Aspekt ist nachfolgend ausführlicher beschrieben.
  • Verschiedene Funktionen der Einstellungsanpassungskomponente 150 können in Schaltungen wie Logikschaltungen eines Controllers wie dem Chip-Controller 220 implementiert sein. Eine beispielhafte Konfiguration des Chip-Controllers 220 ist in Verbindung mit 11 dargestellt und beschrieben.
  • 11 zeigt eine Ausführungsform des Chip-Controllers 220. Im Allgemeinen kann, wie zuvor beschrieben, der Chip-Controller 220 viele Funktionen erfüllen; eine davon kann die Implementierung der Einstellungsanpassungskomponente 150 sein, um die Programmierspannung zu bestimmen, die zum Programmieren einiger oder aller nichtflüchtiger Speicherelemente 123 des Speicherarrays 200 verwendet werden soll. In der dargestellten Ausführungsform umfasst der Chip-Controller 220 einen Zufallszahlengenerator 1150, eine Speicherschaltung 1160, eine Bestimmungsschaltung 1170, eine Einstellungsauswahlschaltung 1175, eine Aktualisierungsschaltung 1180 und eine Bewertungsschaltung 1190.
  • In verschiedenen Ausführungsformen erzeugt der Zufallszahlengenerator 1150 eine Zufallszahl, die verwendet werden kann, um zu bestimmen, ob die Programmiereinstellungen vor der Erzeugung einer neuen Zufallszahl bewertet werden sollen. Jede nach dem Stand der Technik bekannte Zufallszahlenerzeugungsschaltung kann in dem Zufallszahlengenerator 1150 verwendet werden.
  • In einigen Ausführungsformen führt die Speicherschaltung 1160 Programmier- und/oder Löschvorgänge an den nichtflüchtigen Speicherelementen 123 des Speicherarrays 200 aus. Die Speicherschaltung 1160 verwendet die auf dem Speicherarray 200 gespeicherten Programmiereinstellungen, um Daten in die nichtflüchtigen Speicherelemente 123 zu schreiben.
  • In einigen Ausführungsformen bestimmt die Bestimmungsschaltung 1170, ob eine oder mehrere der auf dem Speicherarray 200 gespeicherten Programmiereinstellungen aktualisiert werden müssen, und/oder bestimmt die geeignete(n) aktualisierte(n) Programmiereinstellung(en) für zukünftige Programmiervorgänge. Eine „aktualisierte Programmiereinstellung“ ist eine Programmiereinstellung, die sich von der unterscheidet, die zuvor bei der Ausführung einer oder mehrerer Programmiervorgänge für dieselbe Menge von Zellen verwendet wurde.
  • In verschiedenen Ausführungsformen bestimmt die Einstellungsauswahlschaltung 1175 den geeigneten Wert für die aktualisierte(n) Programmiereinstellung(en). Die Einstellungsauswahlschaltung 1175 kann eine quantitative Bestimmung vornehmen, beispielsweise basierend auf dem Umfang der Überprogrammierung oder Unterprogrammierung, die von der Bestimmungsschaltung 1170 erfasst wird. Alternativ kann die Einstellungsauswahlschaltung 1175 die aktualisierte Programmiereinstellung aus einer Liste, Tabelle oder einer anderen vorbestimmten Menge von Werten auswählen. Beispielsweise kann die Einstellungsauswahlschaltung 1175 auf eine Nachschlagetabelle oder dergleichen verweisen, um die aktualisierte Programmiereinstellung basierend auf der Anzahl von vorgenommenen Programmiereinstellungsaktualisierungen oder dem Wert einer vorhergehenden Programmiereinstellung auszuwählen. Wenn die Programmiereinstellung eine Programmierspannung umfasst, kann die Einstellungsauswahlschaltung 1175 eine aktualisierte Programmierspannung auswählen, die sich von der zuvor verwendeten Programmierspannung unterscheidet.
  • In einigen Ausführungsformen implementiert die Aktualisierungsschaltung 1180 Aktualisierungen der Programmiereinstellungen gemäß dem Wert/den Werten, der/die durch die Einstellungsauswahlschaltung 1175 bestimmt wird/werden. Somit kann die Aktualisierungsschaltung 1180 eine oder mehrere aktualisierte Programmiereinstellungen im Speicherarray 200 speichern. In einigen Beispielen speichert die Aktualisierungsschaltung 1180 die aktualisierte(n) Programmiereinstellung(en), ohne zuvor die zuvor verwendete(n) Programmiereinstellung(en) zu löschen, wie in Verbindung mit 14 ausführlicher beschrieben.
  • In einigen Ausführungsformen bewertet die Bewertungsschaltung 1190, ob es vorteilhaft wäre, die Bestimmungsschaltung 1170 zum Bestimmen zu veranlassen, ob die Programmiereinstellung(en) aktualisiert werden soll(en). Die Bewertungsschaltung 1190 bestimmt in einigen Ausführungsformen, ob ein Auslöser aufgetreten ist, und stößt den Betrieb der Bestimmungsschaltung 1170 nach Empfang des Auslösers an. Um Schreibvorgänge zu beschleunigen, muss die Bestimmungsschaltung 1170 daher nicht die Bestimmung für jeden Schreibzyklus durchführen; vielmehr kann es ausreichend sein, die Wirksamkeit der Programmiereinstellung(en) nur alle n Schreibzyklen zu bewerten. Der Wert von n kann relativ klein sein, wie 1, 2, 4, 8 oder 16. Alternativ kann ein größerer n-Wert, wie 32, 64, 128, 256, 512 oder 1024, verwendet werden, um zu bewirken, dass die Bestimmungsschaltung 1170 noch weniger häufig arbeitet. Der Wert von n muss keine Zweierpotenz sein; die zuvor angegebenen Zahlen sind lediglich beispielhaft.
  • Der Auslöser ist in einigen Ausführungsformen das Auftreten einer Zufallszahl, erzeugt vom Zufallszahlengenerator 1150, die in einen vorbestimmten und/oder vordefinierten Bereich fällt oder einen vorbestimmten und/oder vordefinierten Wert aufweist. In anderen Ausführungsformen ist der Auslöser eine Anzahl von Programmier-/Löschzyklen, Lesezyklen und/oder dergleichen. In einigen Ausführungsformen, in denen mit jedem Programmierzyklus eine Zufallszahl erzeugt und ausgewertet wird, kann/können die Programmiereinstellung(en) nach einer Zufallszahl von Programmiervorgängen bewertet werden. Die durchschnittliche Anzahl von Programmierzyklen zwischen Auswertungen der Programmiereinstellung(en) kann durch die Wahrscheinlichkeit bestimmt werden, dass die Zufallszahl ein oder mehrere Kriterien erfüllt, um die Bewertung auszulösen. Auf diese Weise kann die Zufallszahlengenerierung anstelle des Speicherns und Abrufens von Zykluszählinformationen verwendet werden, um eine Bewertung der Programmiereinstellung(en) mit einer Frequenz von weniger als einmal pro Programmierzyklus auszulösen.
  • In einer beispielhaften Ausführungsform löst die Bewertungsschaltung 1190 durchschnittlich alle 16 Programmierzyklen eine Bewertung der Programmiereinstellung(en) aus, indem sie den Betrieb der Bestimmungsschaltung 1170 nur dann einleitet, wenn der Zufallszahlengenerator 1150 eine bestimmte Zahl im Bereich von 0 bis 15 erzeugt. Beispielsweise kann der Zufallszahlengenerator 1150 von 11 verwendet werden, um vier Bits zufällig zu erzeugen. Wenn die vier Bits eine bestimmte Kombination von Werten sind (beispielsweise „1111“ oder dergleichen), kann die Bewertungsschaltung 1190 den Betrieb der Bestimmungsschaltung 1170 anstoßen, um zu bestimmen, ob eine oder mehrere Programmiereinstellungen geändert werden sollen.
  • 12 zeigt eine Ausführungsform der Bestimmungsschaltung 1170 von 11. In einigen Ausführungsformen umfasst die Bestimmungsschaltung 1170 eine Leseschaltung 1210, eine Erfassungsschaltung 1220 und eine Vergleichsschaltung 1230. In einigen Ausführungsformen liest die Leseschaltung 1210 einige oder alle der nichtflüchtigen Speicherelemente 123 des Speicherarrays 200. In alternativen Ausführungsformen führt die Leseschaltung 1210 einen Programmverifizierungsvorgang bei einer Erfassungsspannung (Vdetect) durch. Die Erfassungsschaltung 1220 kann die Anzahl der bei Vdetect gelesenen Bits erfassen. Die Vergleichsschaltung 1230 kann die Anzahl der gelesenen Bits mit einem vorbestimmten oder vordefinierten Pegel, Wert und/oder Bereich vergleichen.
  • In einigen Ausführungsformen bestimmt die Vergleichsschaltung 1230, dass, wenn die Anzahl der bei der Erfassungsspannung gelesenen Bits größer oder gleich einem vordefinierten Wert ist, keine Überprogrammierung auftritt und/oder bei in naher Zukunft auszuführenden Programmiervorgängen nicht auftritt. Wenn hingegen die Anzahl der bei der Erfassungsspannung gelesenen Bits auf oder unter dem vordefinierten Pegel liegt, bestimmt die Vergleichsschaltung 1230, dass eine Überprogrammierung auftritt und/oder bei in naher Zukunft auszuführenden Programmiervorgängen auftritt.
  • Alternativ kann die Anzahl von programmierten Bits erfasst werden, die bei der Erfassungsspannung nicht erfasst werden. Wenn diese Zahl größer als ein vordefinierter Pegel ist, kann die Vergleichsschaltung 1230 bestimmen, dass eine Überprogrammierung auftritt. Wenn sie kleiner oder gleich dem vordefinierten Pegel ist, kann die Vergleichsschaltung 1230 bestimmen, dass keine Überprogrammierung auftritt.
  • Gemäß einer anderen alternativen Ausführungsform wird eine Fehlerbedingung, wie beispielsweise das Erfassen eines oder mehrerer Fehlerbits, von der Erfassungsschaltung 1220 erfasst. Die Vergleichsschaltung 1230 kann dann die Fehlerbedingung oder eine mit der Fehlerbedingung verbundene Menge (wie eine Anzahl von Fehlerbits) verwenden, um zu bestimmen, ob eine Überprogrammierung auftritt.
  • 12 zeigt die Bestimmungsschaltung 1170 gemäß nur einer beispielhaften Ausführungsform. Einem Fachmann ist klar, dass eine Überprogrammierung neben den oben beschriebenen auf eine Vielzahl von Weisen erkannt werden kann. Ferner ist einem Fachmann klar, dass ähnliche oder unterschiedliche Schritte verwendet werden können, um andere potentielle Probleme mit dem Speicherarray 200 zu erfassen, etwa eine Unterprogrammierung.
  • 13 zeigt einen Graphen 1300, der den Betrieb der Bestimmungsschaltung 1170 gemäß einer Ausführungsform zeigt. Die Bestimmungsschaltung 1170 führt einen Programmverifizierungsvorgang durch, bei dem eine Vielzahl von programmierten Zellen des Speicherarrays 200 mit einer Erfassungsspannung „Vdetect“ erfasst werden, die nicht mit einer Verifizierungsspannung „Vverify“ identisch sein muss, die zur Durchführung von Programmverifizierungsvorgängen verwendet wird, um zu bestätigen, dass programmierte Zellen die Schwellenspannung erreicht haben. Die Bestimmungsschaltung 1170 bestimmt, ob sich die Schwellenspannung verschoben hat, indem sie die Anzahl der bei der Erfassungsspannung erfassten Zellen gegenüber den unter Verwendung der Verifizierungsspannung erfassten Zellen erfasst.
  • Insbesondere weist der Graph 1300, wie dargestellt, eine horizontale Achse 1310, die die Schwellenspannung Vth darstellt, und eine vertikale Achse 1320, die die Anzahl von Zellen darstellt, die bei dieser Schwellenspannung erfasst werden, auf. In einem ersten Fall, dargestellt durch eine Kurve 1330, liegt die durchschnittliche Schwellenspannung der nichtflüchtigen Speicherelemente 123 auf einem Nennpegel, wobei Schwellenspannungen eine allgemein glockenförmige Kurve bilden, zentriert um die durchschnittlichen Schwellenspannung. Der erste Fall kann einen Test des Speicherarrays 200 im Werk oder zu Beginn seiner Lebensdauer darstellen, nachdem jede Speicherzelle einen einzelnen Programmierimpuls empfangen hat, bevor sich die Schwellenspannung aufgrund einer Verschlechterung durch die Programmierung signifikant verschoben hat. Alternativ kann der erste Fall einen Test des Speicherarrays 200 darstellen, nachdem bereits signifikante Programmier-/Löschzyklen durchgeführt wurden und/oder eine oder mehrere Änderungen einer oder mehrerer Programmiereinstellungen bereits durchgeführt wurden.
  • Die Bestimmungsschaltung 1170 kann eine Erfassungsspannung 1340 mit der Bezeichnung „Vdetect“ über die nichtflüchtigen Speicherelemente 123 in einer vorgegebenen Wortleitung, einem Block oder einem Speicherarray anwenden. Die Erfassungsspannung 1340 kann größer sein als eine Verifizierungsspannung 1350 mit der Bezeichnung „Vverify“, die für Programmverifizierungsvorgänge verwendet wird. Bei der Erfassungsspannung 1340 kann eine Größe 1360, dargestellt durch den Bereich unter der Kurve 1330 links von der Erfassungsspannung 1340, Strom leiten. Die Anzahl der bei der Erfassungsspannung 1340 erfassten Bits kann als „N“ bezeichnet werden. N kann die Anzahl der Bits sein, die vor dem Auftreten signifikanter Programmier-/Löschzyklen erfasst wurden, oder kann die Anzahl der Bits sein, die in einem vorhergehenden Test gelesen wurden, beispielsweise das letzte Mal, als eine oder mehrere Programmiereinstellungen geändert wurden.
  • In einem zweiten Fall, dargestellt durch eine Kurve 1370, hat sich die durchschnittliche Schwellenspannung der nichtflüchtigen Speicherelemente 123 beispielsweise aufgrund der Verschlechterung der isolierenden Elemente einiger der nichtflüchtigen Speicherelemente 123 nach oben verschoben. Somit kann die Kurve 1370 relativ zur Kurve 1330 nach rechts verschoben sein, was angibt, dass die Verteilung von Schwellenspannungen über die nichtflüchtigen Speicherelemente 123 zugenommen hat. Der zweite Fall kann einen Test des Speicherarrays 200 nach einer signifikanten Anzahl von Programmier-/Löschzyklen darstellen.
  • Die Bestimmungsschaltung 1170 wendet erneut die Erfassungsspannung 1340 an, um nichtflüchtige Speicherelemente 123 zu erfassen, die zuvor programmiert wurden. Bei der Erfassungsspannung 1340 kann eine Größe 1380, dargestellt durch den Bereich unter der Kurve 1370 links von der Erfassungsspannung 1340, als programmiert gelesen werden. Aufgrund der Verschiebung der Kurve 1370 nach rechts relativ zur Kurve 1330 kann die Anzahl der bei der Erfassungsspannung 1340 (Größe 1380) gelesenen Bits kleiner als N (Größe 1360) sein. Diese Änderung der bei der Erfassungsspannung 1340 gelesenen Bits kann auf das Vorhandensein und/oder das Ausmaß des Anstiegs der Schwellenspannung hinweisen, was eine Verschiebung der Kurve 1370 nach rechts ergibt, die auf eine Überprogrammierung hinweist.
  • Die Bestimmungsschaltung 1170 kann eine Vielzahl von Kriterien verwenden, um zu bestimmen, ob die Verschiebung der Schwellenspannung eine Änderung einer oder mehrerer Programmiereinstellungen erfordert. In einigen Ausführungsformen kann, wenn die Anzahl der bei der Erfassungsspannung 1340 erfassten Bits niedriger als N ist, bestimmt werden, dass eine Änderung einer oder mehrerer Programmiereinstellungen gerechtfertigt ist. In anderen Ausführungsformen muss die Anzahl der bei der Erfassungsspannung 1340 gelesenen Bits möglicherweise um eine vorbestimmte Menge oder einen vorbestimmten Prozentsatz niedriger als N sein, bevor die Anpassung einer oder mehrerer Programmiereinstellungen als gerechtfertigt angesehen wird.
  • Der Graph 1300 von 13 ist lediglich beispielhaft. Änderungen der Schwellenspannung können auf vielfältige Weise erfasst und/oder gemessen werden. In einigen Beispielen kann die Erfassungsspannung 1340 größer sein als in 13 dargestellt und kann sogar größer sein als die durchschnittliche Schwellenspannung für die nichtflüchtigen Speicherelemente 123. Zusätzlich oder alternativ können anstelle der Messung der bei der Erfassungsspannung 1340 „erfassten“ Bits die nicht gelesenen Bits (das heißt der Bereich rechts von der Erfassungsspannung 1340 und unterhalb der Kurve 1330 oder der Kurve 1370) gemessen werden. In einem solchen Fall kann eine Erhöhung der Anzahl der nicht erfassten Zellen eine erhöhte Schwellenspannung angeben und verwendet werden, um zu bestimmen, dass eine Änderung einer oder mehrerer Programmiereinstellungen gerechtfertigt ist.
  • In einigen Ausführungsformen erfasst die Bestimmungsschaltung 1170 den Inhalt eines der nichtflüchtigen Speicherelemente 123 nicht, um die Bestimmung durchzuführen. Vielmehr kann die Bestimmungsschaltung 1170 die Bestimmung auf andere Weise vornehmen. Wenn beispielsweise ein Lesefehler gemeldet wird, kann die Bestimmungsschaltung 1170 die Programmiereinstellungen als Reaktion auf den Lesefehler anpassen. Alternativ kann die Speicherschaltung 1160 eine Anzahl von Programmier-/Löschzyklen (beispielsweise auf dem Speicherarray 200) aufzeichnen und die Bestimmungsschaltung 1170 kann basierend auf der Zyklusanzahl funktionieren. Wenn beispielsweise die Zykluszahl einen von einer vorbestimmten Anzahl von Pegeln erreicht, bestimmt die Bestimmungsschaltung 1170, dass die Programmierspannung verringert werden soll. In einigen Ausführungsformen wird die Zykluszahl verwendet, um Programmiereinstellungen anzupassen, wie im US-Patent Nr. 9,548,124 dargelegt, welches durch Bezugnahme hierin aufgenommen wird.
  • Die Aktualisierungsschaltung 1180 kann die Programmiereinstellungen auf verschiedene Arten ändern. Wie zuvor beschrieben kann die Aktualisierungsschaltung 1180 die Programmiereinstellung(en) auf dem Speicherarray 200 speichern, beispielsweise in einem Teil des Speicherarrays 200, der nicht gelöscht wird. Dementsprechend kann/können die Programmiereinstellung(en) eine einmalige Architektur und/oder einmalige Speicherverfahren aufweisen. Ein Beispiel ist in Verbindung mit 14 dargestellt und beschrieben.
  • 14 zeigt eine Nachschlagetabelle 1400, die verwendet werden kann, um eine Programmiereinstellung innerhalb eines einzelnen Bytes gemäß einer Ausführungsform zu speichern. Das Byte kann sich auf dem Speicherarray 200 beispielsweise in der Teilmenge 209 des Blocks 202 befinden. Das Byte kann optional programmierbar sein, jedoch nicht mit den Blocklöschbefehlen gelöscht werden, die zum Löschen des Blocks (beispielsweise des Blocks 202 von 2A) verwendet werden, zu dem das Byte gehört. Somit kann das Byte beibehalten werden, während Löschoperationen die Benutzerdaten auf den anderen Wortleitungen löschen (beispielsweise den Wortleitungen WL0 bis WL16 des Blocks 202). Die Nachschlagetabelle 1400 kann neun Zeilen aufweisen, von denen jede die Programmierspannung bereitstellen kann, die einem vorgegebenen Zustand des Bytes entspricht.
  • Das Byte kann zum Speichern einer Programmiereinstellung verwendet werden, die die Programmiereinstellung nicht direkt codiert, sondern als Indikator dient, mit dem die Programmiereinstellung ermittelt werden kann. Beispielsweise kann das Byte eine Programmiereinstellung in Form eines Programmierspannungsflags 1410 speichern, das verwendet werden kann, um eine Programmierspannung anzugeben, die unter Verwendung der Nachschlagetabelle 1400 auf zukünftige Programmiervorgänge angewendet werden soll. In einem Standardzustand kann das Byte in einen Zustand versetzt werden, in dem alle Bits auf einen nicht programmierten oder gelöschten Zustand gesetzt sind. Im Fall eines SLC-NAND-Arrays kann dies bedeuten, dass alle acht Bits des Bytes auf „1“ gesetzt werden, wie im ersten der Programmierspannungsflags 1410 in der Nachschlagetabelle 1400. Bei anderen Arten von Speicherarrays kann dies bedeuten, dass alle Bits auf „0“ gesetzt werden, da unterschiedliche Speicherarrays unterschiedliche Interpretationen verwenden können, ob ein programmiertes Bit eine „0“ oder eine „1“ ist.
  • In 8 wird angenommen, dass der anfängliche nicht programmierte Zustand des Bytes „11111111“ ist, wie in der ersten Zeile der Tabelle gezeigt. Dies kann der Standardzustand des Bytes sein und der Zustand, in dem sich das Byte befindet, wenn es ab Werk geliefert wird. Wenn die Programmiereinstellungen ein Programmierspannungsflag 1410 beinhalten, das im Byte gespeichert werden soll, kann der nicht programmierte Zustand des Bytes ein Programmierspannungsflag 1410 sein, das eine Standardprogrammierspannung darstellt. Die anfänglichen Programmiervorgänge, die am Speicherarray 200 ausgeführt werden, können bei der Standardprogrammierspannung durchgeführt werden.
  • Wenn die Bewertungsschaltung 1190 eine Bestimmung zur Bewertung der Programmiereinstellung(en) vornimmt, kann die Bestimmungsschaltung 1170 wie zuvor beschrieben das Bestimmen bewirken, ob die Programmiereinstellung(en) aktualisiert werden soll(en). Wenn eine Aktualisierung erforderlich ist, kann eines der Bits des Bytes beispielsweise von der Aktualisierungsschaltung 1180 programmiert werden.
  • In einigen Ausführungsformen, in denen die Programmierspannung zum Zweck der Steuerung des Anstiegs der Schwellenspannung bewertet wird, der aufgrund des Durchbruchs der Oxidschicht(en) auf den nichtflüchtigen Speicherelementen 123 auftreten kann, kann das Ändern der Programmierspannung schrittweise ein Verringern der Programmierspannung bewirken. Wenn die Programmierspannung nur in eine Richtung (das heißt nach unten) geändert werden muss, kann das Ändern der Programmiereinstellung das Änderns des Programmierspannungsflags 1410 zur Darstellung einer neuen, niedrigeren Programmierspannung beinhalten, wodurch eine geänderte Programmiereinstellung in Form einer geänderten Programmierspannungsflag 1410 gespeichert wird. Eine Programmiereinstellung kann beispielsweise in der Registrierung des Chip-Controllers 220 gespeichert und für alle Programmiervorgänge verwendet werden, bis eine Aktualisierung erfolgt. Eine „geänderte Programmiereinstellung“ ist eine Programmiereinstellung, die auf irgendeine Weise geändert wurde. Das Ändern der Programmiereinstellung kann das Überschreiben, Löschen und Umschreiben oder das anderweitige Ändern der Programmiereinstellung zum Speichern der geänderten Programmiereinstellung einschließen. In ähnlicher Weise ist ein „geändertes Programmierspannungsflag“ ein Programmierspannungsflag, das auf irgendeine Weise geändert wurde.
  • Somit kann, bezugnehmend auf das Beispiel von 14, die Aktualisierungsschaltung 1180 das Byte aktualisieren, indem sie beispielsweise nur das erste Bit des Bytes zu einen programmierten Zustand oder zu einer „0“ ändert, wenn die Bestimmungsschaltung 1170 zum ersten Mal bestimmt, dass die Programmierspannung geändert werden soll. Die verbleibenden Bits können unverändert bleiben. Das Ändern/Programmieren von nur einem Bit zum Ändern des Bytes (beispielsweise Programmieren des Spannungsflags) verringert den Verwaltungsaufwand beim Aktualisieren/Speichern der Programmiereinstellung. Somit kann die Aktualisierung sehr schnell erfolgen, wodurch die Verarbeitungs- und E/A-Kapazität des Chip-Controllers 220 für andere Aufgaben verfügbar bleibt.
  • Nachdem die Aktualisierungsschaltung 1180 die Aktualisierung durchgeführt hat, kann das Byte einen Wert von „01111111“ aufweisen, was ein Programmierspannungsflag 1410 sein kann, das eine Programmierspannung darstellt, die der Standardprogrammierspannung mit einem Dekrement entspricht, wie beispielsweise 0,2 Volt, wie in der zweiten Zeile der Nachschlagetabelle 1400 dargestellt.
  • In ähnlicher Weise kann die Aktualisierungsschaltung 1180, wenn die Bestimmungsschaltung 1170 das zweite Mal bestimmt, dass die Programmierspannung verringert werden soll, das zweite Bit in einen programmierten Zustand oder eine „0“ programmieren. Die verbleibenden Bits können unverändert bleiben. Somit kann das Byte einen Wert von „00111111“ aufweisen, was ein Programmierspannungsflag 1410 sein kann, das eine Programmierspannung darstellt, die der Standardprogrammierspannung mit dem doppelten Dekrement oder der Standardprogrammierspannung minus 0,4 Volt entspricht.
  • Das gleiche Muster kann für die verbleibenden Programmierspannungseinstellungen gelten. Bei jeder Anpassung kann die Aktualisierungsschaltung 1180 eines der Bits des Bytes in einen programmierten Zustand ändern, ohne eines der anderen Bits zu ändern. Die Bits können nicht gelöscht werden, so dass, sobald jedes der Bits programmiert ist, dies für die Lebensdauer des Speicherarrays 200 so bleiben kann. Bei jeder Änderung enthält das Byte ein neues Programmierspannungsflag 1410, das eine niedrigere Programmierspannung darstellt. Somit kann die Programmierspannung schrittweise während der Lebensdauer des Speicherarrays 200 verringert werden. Eine solche Programmierspannungsverringerung kann dazu beitragen, die Schwellenspannung der nichtflüchtigen Speicherelemente 123 innerhalb eines vorbestimmten und/oder vordefinierten Bereichs zu halten (wie beispielsweise eine Verteilung, die mit der des ersten Falls übereinstimmt, die durch die Kurve 1330 von 13 dargestellt ist, als die nach oben verschobene Verteilung des zweiten Falles, dargestellt durch die Kurve 1370).
  • In verschiedenen Ausführungsformen können eine oder mehrere Programmiereinstellungen für verschiedene Zwecke angepasst werden, abgesehen von der Notwendigkeit, die Verschlechterung des isolierenden Elements zu kompensieren. Beispielsweise kann die Programmierspannung angepasst werden, um Herstellungsschwankungen Rechnung zu tragen, die den zur Herstellung der Speicherarrays 200 verwendeten Prozessen inhärent sind.
  • Beispielsweise kann die werkseitig an das Speicherarray 200 angelegte Standardprogrammierspannung eine solche Variation nicht vollständig berücksichtigen. Somit kann die anfängliche Programmierspannung zu hoch oder zu niedrig sein. Der Ausdruck „suboptimale Programmierung“ bezieht sich auf eine Programmiereinstellung oder -prozedur, die bewirkt, dass die Zellprogrammierung auf eine Weise erfolgt, die nicht ideal ist. Beispielsweise ist eine zu hohe oder zu niedrige Programmierspannung suboptimal, da dies dazu führen kann, dass die Schwellenspannung programmierter Zellen zu hoch bzw. zu niedrig ist. Die Optimierung von Programmierspannungen wird ausführlicher in der US-Anmeldung mit der Seriennummer 10/818,597, eingereicht am 6. April 2004, mit dem Titel VARIABLE PROGRAMMING OF NON-VOLATILE MEMORY beschrieben, die als US-Patent Nr. 7,020,017 erteilt wurde und auf die zuvor Bezug genommen wurde.
  • Um eine größere Flexibilität bei der Optimierung einer Programmiereinstellung bereitzustellen, kann es wünschenswert sein, zuzulassen, dass die Einstellung nach oben oder unten angepasst wird. Eine solche Flexibilität kann erhalten werden, indem dem Speicher einer Programmiereinstellung zusätzliche Bits zugewiesen werden oder indem die Art und Weise, in der Bits zum Speichern einer solchen Programmiereinstellung verwendet werden, geändert wird.
  • Insbesondere kann in dem Beispiel von 14 die erste Zeile der Nachschlagetabelle 1400 verwendet werden, um anzugeben, ob das in den verbleibenden Zeilen codierte Programmierspannungsflag 1410 eine zunehmende oder abnehmende Spannung angibt. Wenn beispielsweise die erste Zeile der Nachschlagetabelle 1400 in einem nicht programmierten Zustand bleibt, kann das Byte so gelesen werden, dass es ein Spannungsdekrement wie zuvor beschrieben enthält, außer dass die erste Zeile dann von dem Dekrement ausgeschlossen werden kann. Wenn das Byte also „00111111“ lautet, kann dieses Programmierspannungsflag 1410 einer Programmierspannung entsprechen, die der Standardprogrammierspannung minus 0,2 Volt entspricht. Wenn jedoch die erste Zeile programmiert ist, kann das Byte so gelesen werden, dass es ein Spannungsinkrement enthält, mit Ausnahme der ersten Zeile. Wenn das Byte also „10111111“ lautet, kann dieses Spannungsflag einer Programmierspannung entsprechen, die der Standardprogrammierspannung plus 0,2 Volt entspricht.
  • Ein solches Speicherschema ermöglicht es, die Programmierspannung allmählich zu erhöhen oder zu verringern, erlaubt jedoch nicht, dass die Programmierspannung erhöht und dann verringert oder verringert und dann erhöht wird. Einem Fachmann ist klar, dass eine große Vielzahl von Speicherschemata verwendet werden kann, um geänderte Programmierspannungsflags zu codieren, die positive oder negative Programmierspannungsanpassungen darstellen.
  • Die Einstellungsanpassungskomponente 150 und/oder der Chip-Controller 220 können konfiguriert sein, Zellen zu programmieren und eine oder mehrere Programmiereinstellungen gemäß einer Vielzahl von Verfahren anzupassen. Eine beispielhafte Ausführungsform wird in Verbindung mit 9 dargestellt und beschrieben.
  • 15 zeigt eine Ausführungsform eines Verfahrens 1500 zum Programmieren von Zellen eines Speicherarrays mit periodischen Anpassungen der Programmierspannung. Das Verfahren 1500 kann jedes Mal durchgeführt werden, wenn eines oder mehrere der nichtflüchtigen Speicherelemente 123 programmiert werden sollen. Das Verfahren 1500 kann vom Chip-Controller 220 beispielsweise unter Verwendung der verschiedenen in 11 dargestellten Schaltungen durchgeführt werden. Alternativ kann das Verfahren 1500 mit verschiedener Hardware durchgeführt werden, wie beispielsweise dem Controller 244 von 1B und/oder dem Controller 126 für nichtflüchtige Speichermedien von 1A.
  • Wie dargestellt kann das Verfahren 1500 mit einem Schritt 1520 beginnen 1510, in dem ein Befehl zum Programmieren eines oder mehrerer der nichtflüchtigen Speicherelemente 123 des Speicherarrays 200 empfangen wird. Der Befehl kann beispielsweise im Chip-Controller 220 empfangen werden. Ein solcher Befehl kann in der Speicherschaltung 1160 des Chip-Controllers 220 empfangen werden.
  • In einem Schritt 1530 können eine oder mehrere Programmiereinstellungen bestimmt werden. Dies kann das Lesen einer Programmierspannung und/oder eines Programmierspannungsflags aus dem Speicherarray 200 beinhalten. Beispielsweise kann der Schritt 1530 das Lesen des Programmierspannungsflags 1410 (das ein geändertes oder aktualisiertes Programmierspannungsflag sein kann) beinhalten, das in dem Byte gespeichert ist, auf das in der Beschreibung von 14 verwiesen wird. Der Schritt 1530 kann beispielsweise von der Speicherschaltung 1160 des Chip-Controllers 220 ausgeführt werden.
  • In einem Schritt 1540 kann die geeignete Programmierspannung bestimmt werden. Das in Schritt 1530 abgerufene Programmierspannungsflag 1410 kann verwendet werden, um dies zu erreichen. Beispielsweise kann der Schritt 1530 das Verwenden des Programmierspannungsflags 1410 zum Bestimmen der anwendbaren Programmierspannung beinhalten, indem das Programmierspannungsflag 1410 in einer Nachschlagetabelle nachgeschlagen wird, die jedes Programmierspannungsflag 1410 mit dem zugeordneten Programmierspannungspegel verknüpft. Eine solche Nachschlagetabelle kann der Nachschlagetabelle 1400 von 14 ähneln. Wie der Schritt 1530 kann der Schritt 1540 beispielsweise von der Speicherschaltung 1160 des Chip-Controllers 220 ausgeführt werden.
  • In einem Schritt 1550 können eines oder mehrere der nichtflüchtigen Speicherelemente 123 unter Verwendung der in Schritt 1540 bestimmten Programmiereinstellung(en) programmiert werden. Dies kann durch die Speicherschaltung 1160 des Chip-Controllers 220 ausgeführt werden.
  • In einem Schritt 1560 kann eine Zufallszahl erzeugt werden. Dies kann beispielsweise durch den Zufallszahlengenerator 1150 des Chip-Controllers 220 erfolgen. Die Zufallszahl kann verwendet werden, um zu bewerten, ob im Rahmen des aktuellen Programmierzyklus zu bestimmen ist, ob die Programmierspannung für zukünftige Programmierschritte geändert werden soll.
  • Gemäß einer Abfrage 1570 kann bestimmt werden, ob die Zufallszahl ein oder mehrere Kriterien erfüllt. Wie zuvor beschrieben dürfen die Programmiereinstellungen nur periodisch ausgewertet werden, um die für die Programmierung erforderliche Zeit zu verringern. Ein (und möglicherweise das einzige) Kriterium kann sein, ob die Zufallszahl in einem bestimmten Bereich liegt. In einigen Ausführungsformen kann dies das Bestimmen beinhalten, dass die Zufallszahl ein spezifischer Wert ist; somit kann der anwendbare Bereich nur einen Wert beinhalten.
  • Wenn die Zufallszahl das eine oder die mehreren Kriterien nicht erfüllt, ist der Programmierschritt gegebenenfalls abgeschlossen. Das Verfahren 1500 kann wiederholt werden, wenn ein Befehl erneut empfangen wird, um eines oder mehrere der nichtflüchtigen Speicherelemente 123 des Speicherarrays 200 zu programmieren.
  • Wenn die Zufallszahl das eine oder die mehreren Kriterien erfüllt, kann das Verfahren 1500 mit einem Schritt 1580 fortfahren, in dem eine Anzahl der nichtflüchtigen Speicherelemente 123 bei einer Erfassungsspannung wie der Erfassungsspannung 1340 von 7 erfasst werden kann. Dies kann durch die Bestimmungsschaltung 1170 des Chip-Controllers 220 erfolgen, wie in Verbindung mit 7 beschrieben.
  • Gemäß einer Abfrage 1590 kann eine Bestimmung vorgenommen werden, ob die Anzahl von Bits, die in dem Schritt 1580 erfasst werden, ein oder mehrere Kriterien erfüllt. Diese Bestimmung kann beispielsweise durch die Bestimmungsschaltung 1170 des Chip-Controllers 220 erfolgen. Wie zuvor dargelegt, kann ein (und möglicherweise das einzige) Kriterium für die Abfrage 990 sein, ob die Anzahl der erfassten Bits größer als ein vordefinierter Pegel ist, oder „N“, wie oben dargelegt.
  • Wenn die Anzahl der gelesenen Bits das eine oder die mehreren Kriterien nicht erfüllt, kann die Bestimmungsschaltung 1170 des Chip-Controllers 220 bestimmen, dass keine Programmiereinstellungen aktualisiert werden müssen. Der Programmierschritt ist gegebenenfalls abgeschlossen. Das Verfahren 1500 kann wiederholt werden, wenn ein Befehl erneut empfangen wird, um eines oder mehrere der nichtflüchtigen Speicherelemente 123 des Speicherarrays 200 zu programmieren.
  • Wenn die Anzahl der gelesenen Bits das eine oder die mehreren Kriterien erfüllt, kann die Bestimmungsschaltung 570 des Chip-Controllers 220 bestimmen, dass eine oder mehrere der Programmiereinstellungen aktualisiert werden müssen. Somit kann das Verfahren 1500 mit einem Schritt 1596 fortfahren, in dem die eine oder mehreren Programmiereinstellungen aktualisiert werden. Dies kann beispielsweise durch Aktualisieren eines Spannungsflags 1410 erfolgen, wie in Verbindung mit 14 beschrieben. Der Schritt 1596 kann von der Aktualisierungsschaltung 1180 des Chip-Controllers 220 ausgeführt werden.
  • Nachdem das Programmierspannungsflag 1410 aktualisiert wurde, ist der Programmierschritt gegebenenfalls abgeschlossen. Das Verfahren 1500 kann wiederholt werden, wenn ein Befehl erneut empfangen wird, um eines oder mehrere der nichtflüchtigen Speicherelemente 123 des Speicherarrays 200 zu programmieren.
  • Ein Mittel zum Lesen einer Programmiereinstellung in einer Ersatzspalte einer ersten Wortleitung einer Vielzahl von Wortleitungen einer Menge nichtflüchtiger Speicherzellen kann in verschiedenen Ausführungsformen eine Einstellungsanpassungskomponente 150, einen Chip-Controller 220, eine Speicherschaltung 1160, eine Schnittstelle 139 einer nichtflüchtigen Speichervorrichtung, einen Controller 126 von nichtflüchtigen Speichermedien, einen Speicherclient 116, ein Datenbanksystem 116a, eine Hostcomputervorrichtung 110, einen Bus 127, ein Kommunikationsnetzwerk 115, einen Gerätetreiber, einen Controller (beispielsweise einen Gerätetreiber oder dergleichen), die auf einem Host-Computergerät 110, einem Prozessor 111, anderer Logikhardware und/oder in einem anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, ausgeführt wird, beinhalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Lesen einer Programmiereinstellung in einer Ersatzspalte einer ersten Wortleitung einer Vielzahl von Wortleitungen einer Menge nichtflüchtiger Speicherzellen beinhalten.
  • Ein Mittel zum Schreiben von Daten in eine oder mehrere der mehreren Wortleitungen unter Verwendung der Programmiereinstellung in verschiedenen Ausführungsformen kann eine Einstellungsanpassungskomponente 150, einen Chip-Controller 220, eine Speicherschaltung 1160, eine Schnittstelle 139 einer nichtflüchtigen Speichervorrichtung, einen Controller 126 von nichtflüchtigen Speichermedien, einen Speicherclient 116, ein Datenbanksystem 116a, eine Hostcomputervorrichtung 110, einen Bus 127, ein Kommunikationsnetzwerk 115, einen Gerätetreiber, einen Controller (beispielsweise einen Gerätetreiber oder dergleichen), die auf einem Host-Computergerät 110, einem Prozessor 111, anderer Logikhardware und/oder in einem anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, ausgeführt wird, beinhalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Schreiben von Daten in eine oder mehrere der Vielzahl von Wortleitungen unter Verwendung der Programmiereinstellung beinhalten.
  • Ein Mittel zum Bestimmen, dass die Programmiereinstellung bewirkt, dass eine Schwellenspannung einer oder mehrerer der nichtflüchtigen Speicherzellen zu hoch ist, kann in verschiedenen Ausführungsformen eine Einstellungsanpassungskomponente 150, einen Chip-Controller 220, eine Bestimmungsschaltung 1170, eine Schnittstelle 139 einer nichtflüchtigen Speichervorrichtung, einen Controller 126 von nichtflüchtigen Speichermedien, einen Speicherclient 116, ein Datenbanksystem 116a, eine Hostcomputervorrichtung 110, einen Bus 127, ein Kommunikationsnetzwerk 115, einen Gerätetreiber, einen Controller (beispielsweise einen Gerätetreiber oder dergleichen), die auf einem Host-Computergerät 110, einem Prozessor 111, anderer Logikhardware und/oder in einem anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, ausgeführt wird, beinhalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Bestimmen, dass die Programmiereinstellung bewirkt, dass eine Schwellenspannung von einer oder mehreren der nichtflüchtigen Speicherzellen zu hoch ist, beinhalten.
  • Ein Mittel zum Speichern einer geänderten Programmiereinstellung in der Ersatzspalte der ersten Wortleitung als Reaktion auf das Bestimmen, dass die Programmiereinstellung bewirkt, dass die Schwellenspannung zu hoch ist, kann in verschiedenen Ausführungsformen eine Einstellungsanpassungskomponente 150, einen Chip-Controller 220, eine Aktualisierungsschaltung 1180, eine Schnittstelle 139 einer nichtflüchtigen Speichervorrichtung, einen Controller 126 von nichtflüchtigen Speichermedien, einen Speicherclient 116, ein Datenbanksystem 116a, eine Hostcomputervorrichtung 110, einen Bus 127, ein Kommunikationsnetzwerk 115, einen Gerätetreiber, einen Controller (beispielsweise einen Gerätetreiber oder dergleichen), die auf einem Host-Computergerät 110, einem Prozessor 111, anderer Logikhardware und/oder in einem anderen ausführbaren Code, der auf einem computerlesbaren Speichermedium gespeichert ist, ausgeführt wird, beinhalten. Andere Ausführungsformen können ähnliche oder äquivalente Mittel zum Speichern einer geänderten Programmiereinstellung in der Ersatzspalte der ersten Wortleitung als Reaktion auf das Bestimmen, dass die Programmiereinstellung bewirkt, dass die Schwellenspannung zu hoch ist, beinhalten.
  • Die vorliegende Offenbarung kann in anderen spezifischen Formen ausgeführt sein, ohne von ihrem Geist oder ihren wesentlichen Merkmalen abzuweichen. Die beschriebenen Ausführungsformen sind in jeder Hinsicht nur als veranschaulichend und nicht einschränkend anzusehen. Der Umfang der Offenbarung wird daher eher durch die beigefügten Ansprüche als durch die vorstehende Beschreibung angegeben. Alle Änderungen, die in die Bedeutung und den Bereich der Gleichwertigkeit der Ansprüche fallen, sind in ihren Geltungsbereich einzubeziehen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 7808819 [0130]
    • US 9548124 [0156]
    • US 7020017 [0168]

Claims (25)

  1. Speicherchip umfassend: eine Menge nichtflüchtiger Speicherzellen, die in einer Vielzahl von Wortleitungen angeordnet sind, wobei eine Teilmenge der Zellen zum Speichern einer Programmiereinstellung konfiguriert ist; und einen On-Die-Controller, der konfiguriert ist zum: Lesen der Programmiereinstellung aus der Teilmenge der Zellen; Schreiben von Daten in die nichtflüchtigen Speicherzellen unter Verwendung der Programmiereinstellung; Bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung von Daten in die nichtflüchtigen Speicherzellen bewirkt; und als Reaktion auf das Bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung von Daten in die nichtflüchtigen Speicherzellen bewirkt, Speichern einer geänderten Programmiereinstellung in nichtflüchtigen Speicherzellen der Teilmenge.
  2. Speicherchip nach Anspruch 1, wobei: die Programmiereinstellung eine erste Programmierspannung angibt; der On-Die-Controller ferner konfiguriert ist, die Daten in die nichtflüchtigen Speicherzellen zu schreiben, indem ein einzelner Impuls bei der ersten Programmierspannung durch die nichtflüchtigen Speicherzellen gesendet wird; und die geänderte Programmiereinstellung eine zweite Programmierspannung angibt, die niedriger als die erste Programmierspannung ist.
  3. Speicherchip nach Anspruch 1, wobei der On-Die-Controller ferner konfiguriert ist, die geänderte Programmiereinstellung in nichtflüchtigen Speicherzellen der Teilmenge zu speichern, ohne zuerst die Programmiereinstellung aus der Teilmenge zu löschen.
  4. Speicherchip nach Anspruch 1, wobei die Vielzahl von Wortleitungen umfasst: eine Dummy-Wortleitung mit zwei oder mehr Ersatzspalten umfassend die Teilmenge der Zellen; und eine Vielzahl von Datenwortleitungen, die von der Dummy-Wortleitung getrennt sind, wobei mehrere Datenwortleitungen konfiguriert sind, die Daten zu speichern.
  5. Speicherchip nach Anspruch 4, wobei die Teilmenge der Zellen in der Nähe eines Treibers der Dummy-Wortleitung angeordnet ist.
  6. Speicherchip nach Anspruch 1, wobei: die nichtflüchtigen Speicherzellen in einer Vielzahl von Blöcken angeordnet sind, umfassend: einen ersten Block, umfassend die Vielzahl von Wortleitungen; und einen zweiten Block, umfassend eine zweite Vielzahl von Wortleitungen; und der On-Die-Controller ferner konfiguriert ist zum: Lesen einer zweiten Programmiereinstellung aus einer zweiten Teilmenge der zweiten Vielzahl von Wortleitungen; Schreiben von Daten in die nichtflüchtigen Speicherzellen der zweiten Vielzahl von Wortleitungen unter Verwendung der zweiten Programmiereinstellung; Bestimmen, dass die zweite Programmiereinstellung eine suboptimale Programmierung einer oder mehrerer der nichtflüchtigen Speicherzellen der zweiten Vielzahl von Wortleitungen bewirkt; und als Reaktion auf das Bestimmen, dass die zweite Programmiereinstellung eine suboptimale Programmierung einer oder mehrerer der nichtflüchtigen Speicherzellen der zweiten Vielzahl von Wortleitungen bewirkt, Speichern einer geänderten zweiten Programmiereinstellung in der zweiten Teilmenge.
  7. Speicherchip nach Anspruch 1, wobei der On-Die-Controller ferner konfiguriert ist zum: Bestimmen einer Anzahl von Zellen mit einer Schwellenspannung innerhalb eines vorbestimmten Bereichs; und Bestimmen, ob die Anzahl von Zellen mit der Schwellenspannung innerhalb des vorbestimmten Bereichs ein oder mehrere Kriterien erfüllt.
  8. Speicherchip nach Anspruch 1, wobei der On-Die-Controller ferner konfiguriert ist, zu bestimmen, dass die Programmiereinstellung eine suboptimale Programmierung von Daten in die nichtflüchtigen Speicherzellen als Reaktion auf einen Auslöser bewirkt, der so konfiguriert ist, dass er aktiviert wird, nachdem eine zufällige Anzahl von Programmiervorgängen an einer oder mehreren der Wortleitungen ausgeführt wurde.
  9. Vorrichtung, umfassend: eine Menge nichtflüchtiger Speicherzellen, die in Wortleitungen angeordnet und mit Bitleitungen verbunden sind, wobei die Wortleitungen umfassen: eine Dummy-Wortleitung, die zum Speichern eines Programmierspannungsflags konfiguriert ist; und eine Vielzahl von Datenwortleitungen; einen On-Die-Controller, umfassend: eine Speicherschaltung, die konfiguriert ist zum: Verwenden einer ersten Programmierspannung, die dem Programmierspannungsflag zugeordnet ist, um Benutzerdaten in nichtflüchtigen Speicherzellen der Wortleitungen zu speichern; eine Bestimmungsschaltung, die konfiguriert ist, zu bestimmen, dass die erste Programmierspannung eine Überprogrammierung der nichtflüchtigen Speicherzellen bewirkt; eine Einstellauswahlschaltung, die konfiguriert ist, als Reaktion auf das Bestimmen, dass die erste Programmierspannung eine Überprogrammierung der nichtflüchtigen Speicherzellen bewirkt, eine zweite Programmierspannung auszuwählen, die sich von der ersten Programmierspannung unterscheidet; und eine Aktualisierungsschaltung, die konfiguriert ist, ein geändertes Programmierspannungsflag zu speichern, das der zweiten Programmierspannung in der Dummy-Wortleitung zugeordnet ist, indem mindestens ein Teil des Programmierspannungsflags mit dem geänderten Programmierspannungsflag überschrieben wird.
  10. Vorrichtung nach Anspruch 9, wobei: die Speicherschaltung ferner konfiguriert ist, die Benutzerdaten zu speichern, indem ein einzelner Impuls bei der ersten Programmierspannung durch die nichtflüchtigen Speicherzellen gesendet wird; und die zweite Programmierspannung niedriger ist als die erste Programmierspannung.
  11. Vorrichtung nach Anspruch 10, wobei die Bestimmungsschaltung ferner konfiguriert ist, zu bestimmen, dass die erste Programmierspannung eine Überprogrammierung der nichtflüchtigen Speicherzellen bewirkt, indem bestimmt wird, dass der einzelne Impuls eine Überprogrammierung einer oder mehrerer der nichtflüchtige Speicherzellen bewirkt.
  12. Vorrichtung nach Anspruch 11, wobei: der On-Die-Controller ferner umfasst: einen Zufallszahlengenerator, der konfiguriert ist, eine Zufallszahl zu erzeugen; und eine Bewertungsschaltung, die konfiguriert ist, zu bestimmen, dass die Zufallszahl ein oder mehrere Kriterien erfüllt, und die Bestimmungsschaltung ferner konfiguriert ist, zu bestimmen, dass der einzelne Impuls eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt, als Reaktion auf die Bestimmung durch die Bewertungsschaltung, dass die Zufallszahl das eine oder die mehreren Kriterien erfüllt.
  13. Vorrichtung nach Anspruch 9, wobei die Dummy-Wortleitung ferner konfiguriert ist, das Programmierspannungsflag in einer Ersatzspalte der Dummy-Wortleitung in der Nähe eines Decoders der Dummy-Wortleitung zu speichern.
  14. Vorrichtung nach Anspruch 9, wobei: die Dummy-Wortleitung ein Byte umfasst, das das Programmierspannungsflag mit einem oder mehreren Bits speichert, die auf einen gelöschten Zustand gesetzt sind; und die Speicherschaltung ferner konfiguriert ist, das geänderte Programmierspannungsflag zu speichern, indem das eine oder die mehreren Bits zu einem programmierten Zustand geändert werden, ohne ein Bit des Bytes zu einem gelöschten Zustand zu ändern.
  15. System, umfassend: ein SLC-NAND-Array, umfassend eine Menge von nichtflüchtigen Speicherzellen; und einen On-Die-Controller, der einen Chip mit dem SLC-NAND-Array teilt, wobei der On-Die-Controller konfiguriert ist zum: Lesen einer Programmierspannungseinstellung aus dem SLC-NAND-Array; und Initiieren eines einzelnen Impulses zum Schreiben von Daten auf das SLC-NAND-Array bei der Programmierspannungseinstellung.
  16. System nach Anspruch 15, wobei der On-Die-Controller ferner konfiguriert ist, eine aktualisierte Programmierspannungseinstellung auf dem SLC-NAND-Array zu speichern.
  17. System nach Anspruch 16, wobei der On-Die-Controller ferner konfiguriert ist zum: Bestimmen, dass das Schreiben der Daten bei der Programmierspannungseinstellung eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt; und Initiieren der Speicherung der aktualisierten Programmierspannungseinstellung als Reaktion auf das Bestimmen, dass das Schreiben der Daten bei der Programmierspannungseinstellung eine Überprogrammierung einer oder mehrerer der nichtflüchtigen Speicherzellen bewirkt.
  18. System nach Anspruch 16, wobei der On-Die-Controller ferner konfiguriert ist, die aktualisierte Programmierspannungseinstellung zu speichern, ohne die Programmierspannungseinstellung vom SLC-NAND-Array zu löschen.
  19. Verfahren, umfassend: Lesen einer Programmiereinstellung aus einem Einstellungssegment nichtflüchtiger Speicherzellen; Schreiben von Daten in ein Datensegment nichtflüchtiger Speicherzellen unter Verwendung der Programmiereinstellung; und Speichern einer geänderten Programmiereinstellung als Reaktion auf einen Auslöser im Einstellungssegment.
  20. Verfahren nach Anspruch 19, wobei: die Programmiereinstellung eine erste Programmierspannung angibt; das Schreiben der Daten in das Datensegment das Senden eines einzelnen Impulses mit der Programmierspannung durch das Datensegment umfasst; und das Speichern der geänderten Programmiereinstellung das Speichern der Angabe einer zweiten Programmierspannung, die niedriger als die erste Programmierspannung ist, im Einstellungssegment umfasst.
  21. Verfahren nach Anspruch 19, wobei das Speichern der geänderten Programmiereinstellung das Überschreiben mindestens eines Teils der Programmiereinstellung zum Speichern der geänderten Programmiereinstellung umfasst.
  22. Verfahren nach Anspruch 19, ferner umfassend das Bereitstellen des Auslösers, indem bestimmt wird, dass die Programmiereinstellung bewirkt, dass eine Schwellenspannung von einer oder mehreren der nichtflüchtigen Speicherzellen einen vordefinierten Pegel überschreitet.
  23. Verfahren nach Anspruch 22, wobei das Bestimmen, dass die Programmiereinstellung bewirkt, dass die Schwellenspannung den vorgegebenen Pegel überschreitet, umfasst: Bestimmen einer Anzahl von Zellen mit einer Schwellenspannung innerhalb eines vorbestimmten Bereichs; und Bestimmen, ob die Anzahl von Zellen mit der Schwellenspannung innerhalb des vorbestimmten Bereichs ein oder mehrere Kriterien erfüllt.
  24. Verfahren nach Anspruch 19, ferner umfassend das Bereitstellen des Auslösers durch: Erzeugen einer Zufallszahl; und Erfassen des Auslösers durch Bestimmen, dass die Zufallszahl ein oder mehrere Kriterien erfüllt.
  25. Vorrichtung, umfassend: Mittel zum Lesen einer Programmiereinstellung in einer Ersatzspalte einer ersten Wortleitung einer Vielzahl von Wortleitungen einer Menge nichtflüchtiger Speicherzellen; Mittel zum Schreiben von Daten in eine oder mehrere der Vielzahl von Wortleitungen unter Verwendung der Programmiereinstellung; Mittel zum Bestimmen, dass die Programmiereinstellung bewirkt, dass eine Schwellenspannung von einer oder mehreren der nichtflüchtigen Speicherzellen zu hoch ist; und Mittel zum Speichern einer geänderten Programmiereinstellung in der Ersatzspalte der ersten Wortleitung als Reaktion auf das Bestimmen, dass die Programmiereinstellung bewirkt, dass die Schwellenspannung zu hoch ist.
DE112018004373.8T 2018-03-02 2018-12-10 Adaptive programmierspannung für nichtflüchtige speichervorrichtungen Pending DE112018004373T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/910,998 US10643692B2 (en) 2018-03-02 2018-03-02 Adaptive programming voltage for non-volatile memory devices
US15/910,998 2018-03-02
PCT/US2018/064802 WO2019168581A1 (en) 2018-03-02 2018-12-10 Adaptive programming voltage for non-volatile memory devices

Publications (1)

Publication Number Publication Date
DE112018004373T5 true DE112018004373T5 (de) 2020-10-01

Family

ID=67768716

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018004373.8T Pending DE112018004373T5 (de) 2018-03-02 2018-12-10 Adaptive programmierspannung für nichtflüchtige speichervorrichtungen

Country Status (4)

Country Link
US (2) US10643692B2 (de)
CN (1) CN111164688A (de)
DE (1) DE112018004373T5 (de)
WO (1) WO2019168581A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11614893B2 (en) 2010-09-15 2023-03-28 Pure Storage, Inc. Optimizing storage device access based on latency
US10643692B2 (en) * 2018-03-02 2020-05-05 Sandisk Technologies Llc Adaptive programming voltage for non-volatile memory devices
JP2020047348A (ja) * 2018-09-19 2020-03-26 キオクシア株式会社 半導体記憶装置及びその制御方法
US10832790B1 (en) * 2019-09-26 2020-11-10 Western Digital Technologies, Inc. Performance of non data word line maintenance in sub block mode
US11348643B2 (en) 2020-02-25 2022-05-31 Apple Inc. Identifying failure type in NVM programmed in SLC mode using a single programming pulse with no verification
US11177002B1 (en) * 2020-06-30 2021-11-16 Sandisk Technologies Llc Programming memory cells using encoded TLC-fine
CN114420182B (zh) * 2022-03-29 2022-06-17 北京智芯微电子科技有限公司 非易失性存储单元的数据处理方法、装置及存储介质

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3799269B2 (ja) * 2001-12-10 2006-07-19 株式会社東芝 不揮発性半導体記憶装置
CN100481267C (zh) * 2004-08-09 2009-04-22 凌阳科技股份有限公司 使用非易失性存储器的方法及其电子装置
US20060136858A1 (en) * 2004-12-17 2006-06-22 International Business Machines Corporation Utilizing fuses to store control parameters for external system components
JP4909670B2 (ja) 2006-01-24 2012-04-04 株式会社東芝 不揮発性半導体記憶装置及びそれを用いた不揮発性メモリシステム
US7701779B2 (en) 2006-04-27 2010-04-20 Sajfun Semiconductors Ltd. Method for programming a reference cell
US7495966B2 (en) * 2006-05-01 2009-02-24 Micron Technology, Inc. Memory voltage cycle adjustment
US7564715B2 (en) 2007-02-20 2009-07-21 Sandisk Corporation Variable initial program voltage magnitude for non-volatile storage
US7551483B2 (en) 2007-04-10 2009-06-23 Sandisk Corporation Non-volatile memory with predictive programming
KR100933857B1 (ko) * 2007-11-09 2009-12-24 주식회사 하이닉스반도체 불휘발성 메모리 장치 및 그 동작 방법
JP2009146474A (ja) * 2007-12-12 2009-07-02 Toshiba Corp 不揮発性半導体記憶装置
US7808819B2 (en) * 2008-04-29 2010-10-05 Sandisk Il Ltd. Method for adaptive setting of state voltage levels in non-volatile memory
US8345477B1 (en) * 2009-07-29 2013-01-01 Marvell International Ltd. Non-volatile memory devices having uniform error distributions among pages
KR101616099B1 (ko) * 2009-12-03 2016-04-27 삼성전자주식회사 플래시 메모리 장치 및 그것의 프로그램 방법
US8737141B2 (en) * 2010-07-07 2014-05-27 Stec, Inc. Apparatus and method for determining an operating condition of a memory cell based on cycle information
TWI462104B (zh) 2010-08-04 2014-11-21 Silicon Motion Inc 資料寫入方法及資料儲存裝置
US9214240B2 (en) 2013-03-04 2015-12-15 Sandisk Technologies Inc. Dynamic erase depth for improved endurance of non-volatile memory
US8891303B1 (en) * 2014-05-30 2014-11-18 Sandisk Technologies Inc. Method and system for dynamic word line based configuration of a three-dimensional memory device
US20160162214A1 (en) * 2014-12-08 2016-06-09 James A McCall Adjustable low swing memory interface
US10643692B2 (en) 2018-03-02 2020-05-05 Sandisk Technologies Llc Adaptive programming voltage for non-volatile memory devices

Also Published As

Publication number Publication date
US20190272871A1 (en) 2019-09-05
WO2019168581A1 (en) 2019-09-06
US20200258571A1 (en) 2020-08-13
US10811089B2 (en) 2020-10-20
CN111164688A (zh) 2020-05-15
US10643692B2 (en) 2020-05-05

Similar Documents

Publication Publication Date Title
DE112018004373T5 (de) Adaptive programmierspannung für nichtflüchtige speichervorrichtungen
DE102017104283A1 (de) Löschgeschwindigkeitsbasierte wortleitungssteuerung
DE102014101267B4 (de) Speichersystem mit nichtflüchtiger Speichervorrichtung und Programmierverfahren davon
DE102017104257A1 (de) Auf Zellenstrom basierende Bitleitungsspannung
US20210233589A1 (en) Concurrent programming of multiple cells for non-volatile memory devices
DE112017002776T5 (de) Nichtflüchtiger Speicher mit angepasster Steuerung vom Typ der Störinjektion während der Programmüberprüfung für eine verbesserte Programmleistung
DE102013100596B4 (de) Nichtflüchtiges Speichersystem mit Programmier- und Löschverfahren und Blockverwaltungsverfahren
DE102018123961A1 (de) Gruppen-leseaktualisierung
DE102021115373A1 (de) Identifizierte zonen für zonen mit optimaler paritätsteilung
DE102020116188B4 (de) Verbesserung der sourceseitigen vorladung und verstärkung für das programmieren in umgekehrter reihenfolge
DE112019000153T5 (de) Auswahl der Untergruppe zur Prüfung
DE102019124668A1 (de) Transistorschwellenspannungshaltung in 3d-speicher
DE102020107504A1 (de) Nichtflüchtiges speicher-array, das zur leistungsverbesserung von beiden seiten angesteuert wird
DE112019000161T5 (de) Speicher-cache-verwaltung
DE102008003637A1 (de) Integrierter Schaltkreis, Verfahren zum Programmieren einer Speicherzellen-Anordnung eines Integrierten Schaltkreises, und Speichermodul
DE102013108456A1 (de) Nichtflüchtige Speichervorrichtung und Programmierverfahren
DE102018209207A1 (de) Selektive body-reset-operation für dreidimensionalen (3d ) nand-speicher
DE102015011991A1 (de) Codierungsschema für vertikale 3D-Flash-Speicher
DE102010037064A1 (de) Nichtflüchtige Speichervorrichtung und -system sowie Verfahren des Programmierens einer nichtflüchtigen Speichervorrichtung
DE102017113967A1 (de) Adaptiver betrieb von 3-d-speicher
DE102022102589A1 (de) Auslösen der nächsten zustandsverifizierung in der programmierschleife für nichtflüchtigen speicher
DE102021115501A1 (de) Leseaktualisierung zur verbesserung der leistung bei datenerhaltung für nichtflüchtigen speicher
DE112020000237T5 (de) Soft-bit-lesemodusauswahl für nicht-flüchtige speicher
DE102020107164A1 (de) Dynamischer 1-tier-scan für 3d-hochleistungs-nand
DE112019007666T5 (de) Schreibpuffersteuerung in einem verwalteten Speichersystem

Legal Events

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

Representative=s name: MEWBURN ELLIS LLP, DE

R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G11C0005060000

Ipc: G11C0016340000

R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE

Representative=s name: MURGITROYD & COMPANY, DE