DE69927967T2 - Programmierungverfahren eines nichtflüchtigen Multibit Speichers durch Regelung der Gatespannung - Google Patents

Programmierungverfahren eines nichtflüchtigen Multibit Speichers durch Regelung der Gatespannung Download PDF

Info

Publication number
DE69927967T2
DE69927967T2 DE69927967T DE69927967T DE69927967T2 DE 69927967 T2 DE69927967 T2 DE 69927967T2 DE 69927967 T DE69927967 T DE 69927967T DE 69927967 T DE69927967 T DE 69927967T DE 69927967 T2 DE69927967 T2 DE 69927967T2
Authority
DE
Germany
Prior art keywords
programming
level
pulses
programmed
pulse
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69927967T
Other languages
English (en)
Other versions
DE69927967D1 (de
Inventor
Guido Torelli
Alberto Modelli
Alessandro Manstretta
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.)
STMicroelectronics SRL
Original Assignee
STMicroelectronics SRL
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 STMicroelectronics SRL filed Critical STMicroelectronics SRL
Application granted granted Critical
Publication of DE69927967D1 publication Critical patent/DE69927967D1/de
Publication of DE69927967T2 publication Critical patent/DE69927967T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • 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
    • 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

Description

  • Die vorliegende Erfindung bezieht sich auf ein Verfahren zur Programmierung von Mehrfach-Niveau- (Multi-Level-), nicht-flüchtigen Speichern durch Steuerung der Gate-Spannung. Die Erfindung bezieht sich im Speziellen auf nichtflüchtige Speicher, die durch Floating-Gate-Zellen (EPROM, EEPROM, Flash) gebildet sind, in welchen die Zellenprogrammierung durch Modifikation der Schwellenspannung der Zellen durchgeführt wird, das heißt, Modifikation der Menge der Ladung, die in dem Floating-Gate-Bereich gespeichert wird. Das vorliegende Verfahren kann jedoch ebenso auf Speicherzellen eines unterschiedlichen Typs angewandt werden (zum Beispiel MNOS, insbesondere Metall-Nitrid-Oxid-Halbleitertechnologie-Zellen).
  • Zu einem besseren Verständnis zeigt 1 das elektrische Schaltbild einer typischen Floating-Gate-Speicherzelle mit einem Drain-Anschluss D, einem Source-Anschluss S, einem Steuer-Gate-Anschluss (im weiteren Verlauf auch als Gate-Anschluss definiert) CG und einem Substrat-Anschluss B. 1 zeigt weiterhin den Floating-Gate-Bereich FG. 2 zeigt das Schaltbild einer unterschiedlichen Speicherzelle, dem so genannten "Split-Gate" ("aufgeteiltes Gate").
  • Gegenwärtig werden, um die Datenspeicherungsdichte zu erhöhen und dadurch die physikalischen Speicherfeldgrößen zu reduzieren, Multi-Level (Mehrfach-Niveau) Programmiertechniken untersucht, wobei die Schwellenspannung für jede Speicherzelle auf ein unter m vorbestimmten Niveaus programmiert werden kann. Falls m = 2n ist eine Speicherzelle in der Lage, eine Anzahl von Informations-Bits gleich n = log2m zu speichern, mit deutlichen Vorteilen hinsichtlich der Dichte in Bezug auf konventionelle Zwei-Niveau-Speicher, die lediglich das Programmieren von zwei Niveaus erlauben ("High"-Niveau und "Low"-Niveau), und deshalb ein einzelnes Bit pro Zelle speichern (m = 2 und daher n = 1).
  • Die programmierbaren Schwellenwert-Niveaus müssen auf einen gewissen gegenseitigen Abstand gesetzt werden, um ohne Fehler bestimmt werden zu können, wenn sie gelesen werden. Außerdem kann die Schwellenspannung nicht exakt an dem gewünschten Wert programmiert werden: Jedes Niveau entspricht in der Praxis einem bestimmten Schwellenspannungs-Intervall, wie es durch den Vergleich zwischen 2a und 2b bezogen auf Vier-Niveauprogrammierbare Zellen gezeigt ist. 2a zeigt den idealen Fall, in welchem es angenommen wird, eine präzise Programmierung von jedem von vier Schwellenspannungs-Niveaus zu erhalten, während 2b einen realistischeren Fall darstellt, in welchem jeder logische Wert einem bestimmten Schwellenspannungs-Intervall entspricht. 2a zeigt außerdem die zugewiesene Übereinstimmung zwischen den verschiedenen Schwellenspannungswerten und programmierten Niveaus (jeweils 0, 1, 2 und 3) als ein beispielhaftes, jedoch nicht beschränkendes Beispiel.
  • Das Schwellenspannungs-Intervall, das jedem programmierbaren Niveau entspricht, muss in ausreichender Weise reduziert werden, so dass die Intervalle, die benachbarten Niveaus entsprechen, mit einem solchen gegenseitigen Abstand platziert werden können, um sicheres Aufrechterhalten und Bestimmen von Daten, die in den Zellen gespeichert sind, zu garantieren, ohne dass ein globales Intervall benutzt werden muss, das überaus groß ist, um alle gewünschten logischen Niveaus zuzuweisen. Tatsächlich existieren sowohl eine untere Grenze als auch eine obere Grenze für dieses globale Intervall, vorgegeben durch praktische und Zuverlässigkeits-Gründe. Um den optimalen Abstand zwischen Schwellenspannungs-Intervallen, die verschiedenen gespeicherten Niveaus entsprechen, zu berechnen, müssen ebenso Effekte wie zum Beispiel Ungenauigkeit von Lese- und Programmier-Schaltungen und Variationen von Umgebungsbedingungen, Degradierungszeiten der gespeicherten Ladung und Lese- und Programmier-Rauschen in Betracht gezogen werden, da sie eine unerwünschte Variation der gespeicherten Ladung schaffen, wie es dem Fachmann bekannt ist.
  • Damit man eine geeignete Zellenprogrammierung erhält, wird im Allgemeinen die Multi-Level-Zellenprogrammierung durch das Verfahren durchgeführt, das als "Programmieren und Verifizieren" definiert ist. Gemäß dieser Technik wird eine Programmieroperation durch eine Folge von Programmierimpulsen durchgeführt, und es wird, nachdem jeder Programmierimpuls angelegt wurde, verifiziert, ob die Schwellenspannungen der programmierten Zelle den jeweiligen gewünschten Wert erreicht haben, wie es schematisch in 3 gezeigt ist: Falls eine bestimmte Zelle das gewünschte Schwellenwertniveau erreicht hat, empfängt sie keine weiteren Programmierimpulse. Das Verifizieren wird normalerweise gleichzeitig für alle Zellen in einer Zellengruppe (ein oder mehrere Wörter) durchgeführt, die parallel programmiert werden, und für ein gewünschtes Programmierniveau, es besteht aus direktem oder indirektem Vergleichen einer Zellenschwellenspannung mit gesetzten Referenzwerten Vref,i. Das Programmieren und Verifizieren wird fortgeführt, bis alle Zellen in einer Gruppe an dem jeweiligen gewünschten Niveau programmiert wurden.
  • Es wurde gezeigt (siehe zum Beispiel: "Technological and design constraints for multilevel flash memories" durch C. Calligaro, A. Manstretta, A. Modelli, G. Torelli, Proceedings of Internal Conference on Electronic Circuits and Systems, Rhodos, Griechenland, Seiten 1003–1008), dass, falls ein Satz von Programmierimpulsen mit einer konstanten Zeitdauer an eine nicht-flüchtige Speicherzelle angelegt wird, die Spannung des Drain-Anschlusses konstant gehalten wird, und die Spannung des Gate-Anschlusses durch einen konstanten Wert ∆VGP an jedem Impuls angehoben wird (abgestufte Gate-Spannung), nach einem ersten transienten Schritt (der im Allgemeinen wenige Impulse andauert, falls während des ersten Impulses eine adäquate Spannung an den Gate-Anschluss angelegt wurde) wird die Zellenschwellenspannung einem Anstieg ΔVTH unterworfen, der gleich ist ΔVGP für jeden Impuls. Deshalb erhält man nach dem anfänglichen transienten Schritt: ΔVTH = ΔVGP (1)
  • Diese Beziehung ist gültig, falls der Programmierimpuls eine Zeitdauer aufweist, die größer ist als ein minimaler Wert, der abhängt von dem Prozesstyp und Zellentyp, und der für typische Zellen zwischen einigen hundert ns und 1μs enthalten sein kann.
  • Die Beziehung (1) ist für eine beliebige Zelle gültig, jedoch kann die Beziehung zwischen dem Spannungswert, der während des letzten Programmierimpulses an den Zellen-Gate-Anschluss angelegt wird, und dem Schwellenspannungswert VTH, der durch die Zelle an dem Ende eines solchen Pulses erreicht wird, nicht a priori für eine spezifische Zelle bestimmt werden. Mit anderen Worten zeigt Beziehung (1) den Schwellenspannungsanstieg auf jeden Programmierimpuls hin, jedoch nicht seinen absoluten Wert. Solch ein absoluter Wert hängt tatsächlich von verschiedenen Faktoren ab, die mit dem Herstellungsprozess verbunden sind (für programmierbare Zellen durch Heiß-Kanal-Elektroneninjektion, beispielsweise, hängt er zunächst von der effektiven Zellen-Kanallänge ab).
  • Dies ist schematisch in 4 dargestellt, welche das Verhalten der erhaltenen Schwellenspannung Vth zeigt durch Abbildung der Schwellenspannung entlang der Ordinate, nachdem jeder Programmierimpuls N angelegt wurde (gezeigt entlang der Abszisse), und durch Verbinden der Punkte, wie sie dabei erhalten werden, für drei unterschiedliche Zellen (insbesondere beziehen sich Kurven A, B und C auf Zellen mit jeweils ansteigenden Kanallängen). Hierbei kann festgestellt werden, dass nach einem ersten anfänglichen Schritt die Schwellenspannung linear ansteigt, mit Inkrementen ΔVGP auf jeden Programmierimpuls, entlang dreier gegenseitig paralleler gerader Linien. In der Praxis ist es aus der Beziehung (1) nicht möglich festzustellen, auf welcher der drei geraden Linien die Schwellenspannung einer spezifischen Zelle sich während des Programmierens bewegt, und aus diesem Grund ist es nicht möglich, den ab soluten Schwellenspannungswert Vth zu berechnen, der nach jedem Impuls erreicht wird.
  • Durch das Anwenden solcher Prinzipien bei der Programmier- und Verifizierungs-Technik werden die Speicherzellen durch Anlegen von Programmierpulsen mit einer konstanten Länge, einer konstanten Drain-Spannung und einer progressiv ansteigenden Gate-Spannung mit einem konstanten Anstieg gleich ΔVGP zwischen zwei aufeinanderfolgenden Pulsen programmiert. Deshalb erhält man die Kurve der Gate-Anschlussspannung, wie in 5 dargestellt. Unter idealen Bedingungen ist mit diesem Verfahren die Größe der Intervalle, die programmierten Niveaus entsprechen (im weiteren Verlauf als Programmierniveauweite bezeichnet) gleich ΔVGP. Tatsächlich bestimmt während der Programmierung der (j – 1)-te Programmierimpuls, der demjenigen vorausgeht, in welchem die Schwellenspannung entsprechend dem gewünschten Programmierniveau (i-tes Niveau) erreicht wird und dessen Vergleichsreferenzniveau während der Verifikation gleich ist zu Vref,i, eine Schwellenspannung, die geringer ist als Vref,i, jedoch zu dieser nächstliegend ist, während wenn der j-te Programmierimpuls bereitgestellt wird, die Schwellenspannung auf einen Wert steigt, der gleich ist zu dem vorherigen Wert plus ΔVGP, so dass er nicht größer sein wird als Vref,i + ΔVGP. In der Praxis übersteigt die Schwellenspannung für die Programmierzellen an einem Niveau VTH,i den Referenzwert Vref,i durch einen Betrag zwischen 0 und ΔVGP.
  • Obwohl andere Effekte existieren, die das Aufweiten der programmierten Niveaus verursachen, wie zum Beispiel Ungenauigkeit der Leseschaltungen, die während der Verifikation verwendet werden, bewirkt folglich im Allgemeinen eine Reduktion in dem Anstieg ΔVGP der Programmierspannung, die an den Gate-Anschluss der Zelle angelegt wird, eine Abnahme in der Weite der Programmierniveaus, wobei es ermöglicht ist, die Niveaus selbst besser innerhalb des vorbestimmten Intervalls zuzuordnen, wie oben erwähnt.
  • Auf der anderen Seite erfordert die Reduktion in dem Anstieg ΔVGP einen entsprechenden Anstieg der Anzahl von Programmier- und Verifikationsimpulsen, die notwendig sind, um eine vorbestimmte finale Schwellenspannung, ausgehend von einem vorbestimmten anfänglichen Wert, zu erreichen.
  • Der Anstieg der Anzahl von Programmier- und Verifikationsimpulsen generiert einen Anstieg der Gesamtzeit, die notwendig ist, um eine Speicherzelle an einem vorbestimmten Schwellenwertniveau zu programmieren. Tatsächlich ist die Zeit, die für einen vollständigen Programmier- und Verifikationsschritt notwendig ist, entschieden größer als die Zeit für einen einzelnen Programmierimpuls, vor allem in dem Fall von Kurzzeit-Programmierimpulsen (1μs oder weniger). Zwischen jedem Programmierimpuls und dem folgenden Verifikationsschritt ist es in der Tat notwendig, die Programmierschaltung zu deaktivieren, die Leseschaltung innerhalb der integrierten Schaltung zu aktivieren und die an die Zellen anzulegenden Lesespannungen abzuwarten, bis sie den gewünschten Wert mit einer ausreichenden Genauigkeit erreichen, was eine bestimmte Zeitdauer in Anspruch nimmt. Außerdem erhöht sich die Genauigkeit, die für Vorspannungen notwendig ist, mit einer Abnahme in dem Abstand zwischen Schwellenspannungen, die benachbarten programmierten Niveaus entsprechen (der Zellenstrom während des Lesens und, aus diesem Grund, während des Verifizierens hängt strikt von dem Wert von Spannungen ab, die an Drain- und Gate-Anschlüsse angelegt werden).
  • Wenn ein Verifikationsschritt von einem Programmierschritt gefolgt wird, ist es in gleicher Weise notwendig, die Leseschaltung zu deaktivieren und die Programmierschaltung zu aktivieren, resultierend in einem weiteren Zeitverlust. Die Zeit für einen vollständigen Programmier- und Verifikationsschritt ist deshalb gleich TGP(1 + η), wobei TGP die Länge eines Programmierimpulses ist und η größer ist als 0 und im Allgemeinen von dem Grad von Eins sein kann.
  • Abhängig von spezifischen Notwendigkeiten ist es deshalb notwendig, eine Kompromiss-Auswahl zwischen Genauigkeit des programmierten Niveaus (niedriger Anstieg ΔVGP und daher hohe Anzahl von vollständigen Programmier- und Verifizierungsschritten) und der gesamten Programmierungsbetriebsgeschwindigkeit durchzuführen.
  • Ziel der Erfindung ist dadurch das Bereitstellen eines Programmierverfahrens, das die Gesamtzeit minimiert, die für einen vollständigen Programmierungsbetrieb mit der gleichen Anzahl von Programmierimpulsen notwendig ist, wobei eine Verbesserung in dem Kompromiss zwischen Genauigkeit und globaler Programmierzeit ermöglicht wird.
  • Gemäß der vorliegenden Erfindung wird ein Verfahren zur Programmierung von Multi-Level-, nicht-flüchtigen Speichern bereitgestellt, wie in Anspruch 1 angegeben.
  • Zum besseren Verständnis der vorliegenden Erfindung werden nun bevorzugte Ausführungsformen davon beschrieben, rein als ein nicht-limitierendes Beispiel, wobei Bezug genommen wird auf die beiliegenden Zeichnungen, in denen:
  • 1a und 1b zwei elektrische Schaltsymbole für Floating-Gate-Speicherzellen zeigen;
  • 2a die Beziehung zwischen verschiedenen Schwellenwerten und jeweiligen Programmierwerten zeigt;
  • 2b die Verteilung zeigt, die mit den Schwellenwerten in 2a assoziiert ist;
  • 3 eine Sequenz von Programmier- und Verifizierungsimpulsen zeigt;
  • 4 einen Kurvenverlauf der Schwellenspannungs-Modifikation in einem Programmierungsmodus zeigt;
  • 5 das Verhalten der Gate-Spannung zeigt, die während aufeinanderfolgender Programmierungs- und Verifikationsschritte angelegt wird;
  • 6 ein Diagramm von Schwellenspannungs-Intervallen zeigt, die mit verschiedenen Programmierungsniveaus assoziiert sind;
  • 7 den Verlauf der Gate-Spannung zeigt, die während aufeinanderfolgender Schritte gemäß dem vorliegenden Verfahren angelegt wird;
  • 8 ein Flussdiagramm einer ersten Ausführungsform des vorliegenden Verfahrens zeigt;
  • 9 ein Flussdiagramm einer zweiten Ausführungsform des vorliegenden Verfahrens zeigt; und
  • 10 ein Blockdiagramm einer möglichen Hardware-Implementation des Verfahrens der 8 zeigt.
  • Um das Problem zu lösen, die globale Programmierungszeit zu reduzieren bei einer ausreichenden Genauigkeit von programmierten Niveaus, wird das Intervall zwischen nominalen Werten von zwei aufeinanderfolgenden Niveaus in eine Mehrzahl von Intervallen aufgeteilt, deren Weite gleich ist zu dem Anstieg der Gate-Spannung, die während der Programmierung angelegt wird, plus letztendlich eines Intervalls, dessen Weite geringer als der Anstieg ist. Es ist nicht obligatorisch, dass das Intervall zwischen Niveaus konstant ist oder dass es ein exaktes ganzzahliges Vielfaches (Integer-Vielfaches) von angelegten Gate-Spannungsinkrementen ΔVGP ist. Eine Programmierung wird sodann durchgeführt durch Anlegen einer Mehrzahl von Programmierimpulsen gleich der Mehrzahl von vorbestimmten Inkrementen, ohne zwischenzeitliche Verifizierungsschritte durchzuführen, wobei die Verifikation der erreichten Schwellenspannung nur nach der Durchführung der Mehrzahl von Programmierschritten durchgeführt wird, wenn die erreichte Schwellenspannung vermutlich gleich oder etwas größer ist als die minimal gewünschte Schwellenspannung für das betrachtete Niveau für wenigstens eine der Zellen, die programmiert werden. Vorsichtshalber kann die Verifikation nach dem Programmierimpuls durchgeführt werden, der vermutlich unmittelbar der gewünschten Schwellenspannung, die erreicht wird, vorhergeht, entsprechend dem vorgesehenen Programmierniveau.
  • In der Praxis sind die Konfiguration der programmierten Niveaus und der Zuwachswert ΔVGP derart, dass die Niveauaufweitung als Folge des Zuwachses mit ΔVGP viel niedriger ist als der Abstand zwischen nominalen Werten der Niveaus. Zum Beispiel werden, um von einem Programmierniveau zu einem anderen zu gelangen, sieben Programmierschritte durchgeführt. Solch eine Konfiguration wird vorteilhafterweise in Fällen von Speichern mit vielen programmierbaren Niveaus pro Zelle verwendet, in welchen eine hohe Programmierniveaugenauigkeit gewünscht ist, um adäquate Trennungslücken zwischen benachbarten programmierbaren Niveaus zuzuweisen, um die existierenden und Sicherheitsbedingungen in Betracht zu ziehen.
  • Solch eine Konfiguration ist in 6 dargestellt, in welcher der Abstand zwischen nominalen Werten von aufeinanderfolgenden Niveaus mit ΔVDIST und die Niveauaufweitung mit ΔVGP bezeichnet ist. In der Figur wurde angenommen, aus Gründen der leichten Verständlichkeit (jedoch nicht in einer begrenzenden Weise), dass immer die gleiche Distanz ΔVDIST zwischen nominalen Werten von verschiedenen Niveaus vorhanden ist. Der Ausdruck ΔVDIST als eine Funktion von ΔVGP kann ausgedrückt werden als: ΔVDIST = C ΔVGP = (N + α)ΔVGP (2)wobei C = ΔVDIST/ΔVGP, N der Integer-Wert (ganzzahlige Wert) ist, der durch Kürzen von C erhalten wird, und α gleich ist dem resultierenden Dezimalwert, mit 0 ≤ α < 1, wobei α gleich 0 ist, nur wenn der Abstand zwischen aufeinanderfolgenden Niveaus ein exaktes Vielfaches des Programmierschritts ist. Zum Beispiel ist α = 0,02, falls ΔVDIST = 1V und ΔVGP = 0,14 V.
  • Um eine Speicherzelle vom Niveau i zum Niveau i + 1 zu programmieren, unter der Annahme, dass man bereits in dem charakteristischen Bereich ist, in welchem die lineare Beziehung zwischen ΔVTH und ΔVGP gültig ist, ist es gemäß (2) notwendig, N oder N + 1 Programmierimpulse anzuwenden, abhängig davon, ob die vorher erreichte effektive Spannung, bezogen auf das i-te Niveau, größer oder kleiner ist als Vm,i+ α ΔVGP, wobei Vm,i der minimale Wert des i-ten Niveaus ist (das idealerweise der Referenzniveauwert Vref,i ist). Insbesondere wenn, in dem oben betrachteten Beispiel, Vm,1 = 1 V, Vm,2 = 2 V und Vm,3 = 3 V, unter der Annahme, dass die erreichte Schwellenspannung für Niveau "1" gleich ist der nominalen 1 V, sind, um vom Niveau "1" zum Niveau "2" zu gelangen, N + 1 = 8 Pulse notwendig, wobei danach die effektive erreichte Schwellenspannung gleich sein würde zu 2,12 V, während 7 Pulse notwendig sind, um von diesem Wert des Niveaus "2" zum Niveau "3" zu gelangen, wobei sodann die effektive Schwellenspannung, die erreicht wird, gleich sein würde zu 3,1 V.
  • Folglich werden, um die Schwellenspannung einer Zelle von Niveau i zum Niveau i + 1 zu befördern, N – 1 Programmierpulse mit einer ansteigenden Gate-Spannung angelegt, mit einem Inkrement ΔVGP, ohne eine Verifikation nach je dem Puls durchzuführen; auf diese Weise ist man sicher, dass die Zelle nicht dennoch das (i + 1)-te Niveau erreicht haben kann. Danach wird ein weiterer Puls (N-ter) mit einem Gate-Spannungs-Inkrement ΔVGP angelegt, und eine Verifikation wird durchgeführt. Falls die Schwellenspannung noch nicht erreicht wurde, wird ein weiterer Puls ((N + 1)-ter) angelegt mit einer immer noch um den vorgesehenen Anstieg erhöhten Gate-Spannung, letztendlich gefolgt durch einen weiteren Verifizierungsschritt, sogar wenn dieser nicht strikt notwendig ist, da die Schwellenspannung nun bereits das (i + 1)-te Niveau erreicht haben muss.
  • Solch eine Anordnung ist als ein Beispiel in 7 dargestellt, die den Kurvenverlauf der Gatespannung einer Zelle während Programmierung einer Zelle gemäß der Erfindung zeigt, unter der Annahme, dass N gleich 4 ist, und dass der Verifizierungsschritt unmittelbar ein positives Ergebnis bereitstellt. 7 muss mit 5 verglichen werden und zeigt, wie es mit der Erfindung möglich ist, eine größere Anzahl von Programmierimpulsen mit einer gleichen Gesamtzeit anzuwenden.
  • Auf diese Weise wird ein hoher zeitlicher Vorteil mit Bezug auf die bekannte Lösung erzielt, bei der ein Verifikationsschritt für jeden Programmierschritt durchgeführt wird. Tatsächlich benötigt die bekannte Lösung, in dem Fall, dass N Programmierschritte notwendig sind, um von einem Programmierwert zu dem folgenden zu gelangen, ein Timing, das ist gleich zu N(1 + η)TGP, während die vorliegende Lösung eine Zeit benötigt, die gleich ist zu (N + η)TGP, mit einer Zeitersparnis gleich zu (N - 1)ηTGP. Falls stattdessen N + 1 Programmierschritte notwendig sind, wird die notwendige Zeit gleich sein zu (N + 1 + 2η)TGP oder (N + 1 + η)TGP, abhängig davon, ob der letzte Programmierschritt für jedes Niveau durch einen Verifizierungsschritt gefolgt wird oder nicht, mit einer Zeitersparnis, die gleich ist zu (N - 1)ηTGP bzw. NηTGP.
  • Falls eine Zellenschwellenspannung von einem allgemeinen Niveau i zu einem Niveau i + j befördert werden muss, mit j > 1, ist es möglich, die Zelle sowohl jedes Mal auf das folgende Niveau i + 1, i + 2, ... zu programmieren, bis Niveau i + j erreicht wird, wobei jedes Mal verifiziert wird, dass die einzelnen dazwischenliegenden Niveaus erreicht sind, oder Z-1 Pulse anzuwenden, wobei Z die Integer-Zahl ist, die durch Kürzen der Zahl j(N + α) erhalten wird, dann einen vollständigen Programmierungs- und Verifikationsschritt durchzuführen, und falls die Zelle noch nicht das gewünschte Niveau erreicht hat, einen letzten Programmierungsimpuls anzuwenden (mit oder ohne finaler Verifikation ähnlich zu der, die vorhergehend erwähnt wurde).
  • Um das erste programmierte Niveau zu erreichen (Niveau 1), beginnend von dem gelöschten Niveau, ist es notwendig, die Zelle mit einer Anzahl von Programmierimpulsen zu versorgen, die nicht a priori bekannt ist, da die Schwellenspannung, aus welcher Beziehung (1) gültig ist, nicht bekannt ist, das heißt, es ist nicht bekannt, auf welcher der geraden Linien, die in 4 gezeigt sind, die beteiligte Zelle sich bewegt. Es ist deshalb notwendig, einen Verifizierungsschritt nach jedem Programmierschritt durchzuführen, bis die Schwellenspannung entsprechend dem Niveau 1 erreicht ist, danach ist es möglich, der oben beschriebenen Lösung zu folgen (vorausgesetzt, dass die Programmierungsbedingungen derart sind, dass Niveau 1 erreicht wird, wenn die Zelle bereits in dem Bereich operiert, in welchem die lineare Beziehung (1) gültig ist).
  • Im Fall, dass die Programmierung parallel auf einer Gruppe von Zellen (zum Beispiel 8 oder 16, die zu der gleichen Feldleitung gehören) durchgeführt wird, werden, ausgehend von dem minimalen Schwellenwertstatus (oder gelöschten Status), Programmierpulse gleichzeitig in der oben beschriebenen Weise an die Zellen angelegt, die an einem unterschiedlichen Niveau von dem minimalen Schwellenwertniveau programmiert werden müssen. Wenn eine Zelle das gewünschte Programmierniveau erreicht hat, erhält sie keine weiteren Program mierpulse (solch eine Unterbrechung wird in einer bekannten Weise erhalten: Zum Beispiel wird die bezogene Bit-Leitung, die mit dem Drain-Anschluss verbunden ist, nicht mehr weiter mit der Programmierspannung vorgespannt), und die Programmierung schreitet fort für die anderen Zellen, bis sie alle an dem vorgesehenen Niveau programmiert sind. Offensichtlich werden keine Programmierimpulse jemals an die Zellen angelegt, die in dem gelöschten Status verbleiben müssen.
  • In dem Fall, dass Zellen, die zu derselben Leitung gehören, zu programmieren sind, zeigen diese ein gutes physikalisches übereinstimmendes Niveau, sodass generell der Schwellenspannungswert, an welchem Beziehung (1) beginnt gültig zu werden, ähnlich ist, wobei keine Probleme existieren, das beschriebene Verfahren anzuwenden.
  • In der Praxis werden die Zellen, die programmiert werden müssen, mit einem Satz von Programmierimpulsen versorgt, wobei jeder Programmierimpuls durch einen Verifizierungsschritt gefolgt ist, bis die Schwellenspannung von wenigstens einer der Zellen den Wert erreicht, der dem ersten Niveau entspricht. Eine Anzahl A1 von Programmierimpulsen wird sodann bereitgestellt, jeweils gefolgt durch einen Verifizierungsschritt, bis alle zu programmierenden Zellen eine Schwellenspannung haben, die Niveau "1" entspricht (A1 kann nicht a priori bestimmt werden). Offensichtlich erhalten die Zellen, die mit Niveau "1" programmiert werden müssen, keine Programmierimpulse, nachdem ihre Schwellenspannung den gewünschten Wert erreicht hat.
  • Danach erhalten alle die Zellen, die mit Niveaus größer als 1 programmiert werden müssen, N – (1 + A1) = N – 1 – A1 Pulse ohne Verifikation (keine Zelle ist in der Tat an Niveau 2 nach diesen Pulsen programmiert). Sodann werden weitere Pulse bereitgestellt, wobei jeder durch einen Verifikationsschritt gefolgt wird, bis die Schwellenspannung von wenigstens einer Zelle das zweite Niveau erreicht, nach welchem weitere A2 Programmierimpulse bereitgestellt werden, gefolgt durch eine Verifikation, bis die Schwellenspannung von allen der Zellen, die wenigstens an einem zweiten Niveau zu programmieren sind, den gewünschten Wert erreicht hat.
  • Der Ablauf wird wiederholt, so dass, um Niveau i + 1 zu erreichen, N – Ai – 1 Programmierpulse jedes Mal ohne Verifikation angewendet werden, gefolgt durch eine adäquate Anzahl von Programmierpulsen mit einer Verifikation, bis wenigstens eine Zelle das (i + 1)-te Niveau erreicht hat, und durch Ai + 1 Pulsen mit Verifikation, bis alle Zellen, die wenigstens auf Niveau i + 1 zu programmieren sind, dieses Niveau erreicht haben, wobei fortgeschritten wird, bis alle Zellen an dem vorgesehenen Niveau programmiert wurden.
  • In dieser Weise werden, mit Bezug auf die Lösung, in welcher alle Programmierpulse durch einen Verifikationsschritt gefolgt werden, N – 1 – Ai Verifikationsschritte für jedes Niveau eingespart. Folglich ist, global betrachtet, die eingesparte Zeit gleich:
    Figure 00140001
  • Im Fall, dass der Abstand zwischen benachbarten zu programmierenden Niveaus ΔVDIST nicht konstant ist, ist die Operation exakt wie oben beschrieben, bis auf die Tatsache, dass der Ni-Wert, der in Formel (Ni – Ai – 1) einzufügen ist, die die Anzahl von anzulegenden Impulsen bereitstellt, nicht konstant ist, sich jedoch gemäß den Niveaus verändert.
  • Das Programmierverfahren gemäß der Erfindung wird nun detaillierter gemäß 8 beschrieben werden, welches das Flussdiagramm einer möglichen Implementation darstellt. In dieser Beschreibung wird angenommen, dass die Programmierung auf einer anfänglich gelöschten Gruppe von Zellen durchgeführt wird, wie es üblich ist in elektrisch programmierten, nicht-flüchtigen Speichern.
  • Anfänglich wird ein Verifikationsschritt durchgeführt, Block 100; danach wird ein Niveauzähler i, assoziiert mit dem zu programmierenden Niveau, auf Null gesetzt (Block 101), zusammen mit einem Pulszähler K, bezogen auf Programmierpulse (Block 102).
  • Sodann wird verifiziert, ob es Zellen gibt, die an einem Niveau größer als das i-te zu programmieren sind (Bedingung "Irgendeine > i", Block 103). Falls das Ergebnis negativ ist, endet der Programmierungsablauf, falls es positiv ist (Ausgabe ja aus Block 103), wird der Niveauzähler i erhöht, Block 104, und die Anzahl von Programmierimpulsen Ni, die theoretisch notwendig sind, um eine Zelle von Niveau i – 1 auf Niveau i zu programmieren, wird bestimmt, Block 105. Das Erfassen wird vorzugsweise durchgeführt, indem Ni von einer gespeicherten Tabelle gelesen wird; im Fall i = 1 ist N1 gleich 1, um eine Verifizierung nach jedem Programmierimpuls durchzuführen, wie unten dargestellt.
  • Danach, Block 106, wird Bi (Anzahl von Pulsen, die nacheinander anzulegen sind) gleich zu Ni gesetzt.
  • Sodann wird gemäß Block 120 die Anwendung der Programmierpulse auf die Zelle oder die Zellen, die nicht programmiert werden dürfen, gestoppt; gemäß Block 107 wird Pulszähler k erhöht; Gemäß Block 108 wird ein Programmierpuls in der oben beschriebenen Weise angewandt, der, für die Gate-Spannung VGP von einem Startwert an dem ersten Programmierpuls (i = 1) startet und denselben an jedem Schritt durch ΔVGP in Bezug auf den vorherigen Schritt erhöht; und es wird sodann verifiziert, ob Ni Programmierimpulse bereits angewandt wurden, gemäß Block 109; im negativen Fall, Ausgabe NEIN, wird der Pulszähler k wiederum erhöht, wobei auf Block 107 zurückgekommen wird und fortgeschritten wird, wie oben erwähnt, in dem positiven Fall (Ausgabe JA von Block 109, wie es auftritt unmittelbar nach Anlegen des ersten Programmierimpulses im Fall von i = 1) wird der Verifizierungsschritt durchgeführt, gemäß Block 110. Sodann wird es verifiziert, ob die Schwellenspannung von wenigstens einer Zelle das i-te Niveau erreicht hat, gemäß Block 111, entsprechend der Bedingung "ONEi" = 1; in dem negativen Fall wird ein neuer Programmierpuls angewandt, gemäß Block 112; in dem positiven Fall (Ausgabe JA aus Block 111) wird der Pulszähler k zurückgesetzt, gemäß Block 113, und es wird verifiziert, ob die Schwellenspannung von allen Zellen, die an einem Niveau ≥ i zu programmieren sind, den Wert entsprechend dem i-ten Niveau erreicht hat, gemäß Block 114, entsprechend der Verifizierung der Bedingung "ALLi" = 1.
  • Falls das Ergebnis positiv ist (Ausgabe JA von Block 114), wird zum Block 103 zurückgekehrt, um zu verifizieren, ob Programmierung von allen Zellen, die zu programmieren sind, beendet ist; in dem negativen Fall (Ausgabe NEIN, wird die Anwendung von weiteren Programmierpulsen auf eine Zelle oder Zellen, die am i-ten Niveau programmiert werden müssen, gestoppt, da sie bereits solch ein Niveau erreicht haben, Block 115; der Pulszähler k wird erhöht, Block 116; ein Programmierimpuls wird angewandt, Block 117; ein Verifizierungsschritt wird durchgeführt, Block 118; und es wird wiederum verifiziert, ob die Schwellenspannung für alle Zellen, die an einem Niveau ≥ i zu programmieren sind, den Wert erreicht hat, der dem i-ten Niveau entspricht, wobei zu Block 114 zurückgekehrt wird.
  • 9 zeigt eine Variation des Flussdiagramms von 8, in welchem keine Verifikation von zwischenliegenden Niveaus durchgeführt wird, für welche keine zu programmierenden Zellen existieren.
  • Folglich wurden die Schritte, die in 8 und 9 gleich sind, mit den gleichen Bezugszeichen versehen, und in 9 wurden die Schritte, die ähnlich zu jenen in 8 sind, mit den gleichen Zahlen gefolgt durch einen Strich (') versehen.
  • Insbesondere wird nach dem Block 104, in welchem der Niveauzähler i von zu programmierenden Niveaus angehoben wird, in Block 105' die Anzahl von Pulsen Ni und die Kürzung αi festgestellt, erhalten gemäß (2) für das i-te Niveau. Sodann wird gemäß Block 130 eine Zahl C; berechnet, die gleich ist dem Verhältnis zwischen ΔVDIST,I, und ΔVGP für das i-te Niveau, durch Addition von Ni und αi. Sodann wird verifiziert, ob i = 1, und falls dieses zutrifft (Ausgabe JA aus Block 131), wird die Zahl Bi von Programmierpulsen, die nacheinander anzulegen sind, berechnet, wobei diese gleich ist dem ganzzahligen Wert von Ci, gemäß Block 106'; falls nicht (Ausgabe NEIN aus Block 131) wird verifiziert, ob manche Zellen an dem i-ten Niveau programmiert werden müssen, gemäß Block 132; falls JA (Ausgabe JA aus Block 132) wird Bi berechnet und mit Block 106' fortgefahren; falls NEIN (Ausgabe NEIN von Block 132) wird Niveauzähler i erhöht gemäß Block 133; Ni und αi, die mit dem folgenden Niveau assoziiert sind, werden erfasst, gemäß Block 134; und der neue Wert von C; wird berechnet, wobei dieser gleich ist zu dem vorherigen Wert plus dem neu erfassten Wert Ni und αi; sodann wird wiederum verifiziert, ob wenigstens eine Zelle an dem (i + 1)-ten Niveau programmiert werden muss, wobei zum Block 132 zurückgekehrt wird.
  • Im Hinblick auf den restlichen Teil ist das Flussdiagramm von 9 ähnlich zu dem von 8, sodass dies nicht weiter beschrieben werden wird.
  • Eine weitere globale Zeitersparnis erhält man, falls die minimale Anzahl D von Pulsen, die notwendig ist, um eine gelöschte Zelle (Status 0) zu dem unteren Ende des ersten Programmierniveaus (Status 1) zu befördern, a priori bekannt ist. Diese Zahl kann für jedes Plättchen („Die") während der elektrischen Wafer-Sortierung berechnet werden. In solch einem Fall werden, wenn die Programmierung beginnt, D Pulse ohne Verifizierungsschritte anfänglich an die Zellen, die programmiert werden müssen, angelegt, wobei sodann Pulse mit Verifikation angelegt werden, bis wenigstens eine der Zellen Niveau "1" erreicht. Die Programmierung schreitet sodann fort, wie vorhergehend beschrieben.
  • 10 zeigt ein Blockdiagramm einer Hardwareschaltung, welche das Verfahren in 8 implementiert. Die Schaltung ist zeitlich gesteuert durch ein Signal CLOCK und durch ein Signal CLOCK', das in Bezug auf CLOCK verzögert ist.
  • Eine Programmieroperation wird aktiviert auf das Empfangen eines Programmier-Start-Pulses (PR_ST), synchron mit CLOCK, welches zwei Flip-Flops 1 und 2 setzt, welche Signal PR_MODE ("Programmmodus") und Signal P&V ("Programmierung&Verifikation") in einen High-Zustand befördern.
  • Unter Betriebsbedingungen wird, wie es auch im weiteren Verlauf klarer werden wird, das alternierende Setzen eines Verifikationsschritts und eines Programmierungsschritts durch das Ausgangsschalten eines verzögerten Flip-Flops 3 sichergestellt, welches bei jedem CLOCK-Puls schaltet, falls das Signal P&V, das an den Steuereingang C des Multiplexers 4 bereitgestellt wird, auf High-Niveau ist, da in diesem Fall der Eingang D des verzögerten Flip-Flops 3 das Signal/Q3 des verzögerten Flip-Flops 3 empfängt.
  • An dem Beginn eines Programmierbetriebs wird der Ausgang Q3 des verzögerten Flip-Flops 3 durch Signal PR_ST auf 1 gesetzt, um einen Verifikationsschritt durchzuführen.
  • Wenn die Schaltung im "Programm-Modus" ist, aktiviert ein High-Niveau am Ausgang Q3 die "Verifizierung" (Signal VR), während ein Low-Niveau das "Programmierungs"-Signal PRG aktiviert. Die Aktivierung von Signal VR oder Signal PRG erlaubt (Block 5) eine Generierung von geeigneten Signalen, die an das Speicherfeld zu senden sind, um jeweils Verifikations- bzw. Programmierungsoperationen in einer an sich bekannten Weise durchzuführen. Generator 5 empfängt an dem Eingang ebenso Signal CLOCK' (verwendet für die zeitliche Steuerung der Signale (Timing), die an das Speicherfeld zu senden sind) zusätzlich zu dem Wert der Anzahl von Programmierschritten P, die bereits während des aktuellen Programmierzyklusses durchgeführt wurden, um den richtigen Schwellenspannungswert gemäß einer ansteigenden Gesetzmäßigkeit zu setzen, wie oben beschrieben. Der Wert der globalen Programmierungsschritte P wird durch einen ersten Zähler 6 generiert, der durch Signal PR_ST an den Beginn eines neuen Programmierbetriebs rückgesetzt wird.
  • Das Signal P&V bestimmt, falls die Schaltung einen Verifikationsschritt nach einem Programmierungsschritt durchführen muss. Tatsächlich schaltet, falls P&V einen High-Wert hat, wie oben erwähnt, Ausgang Q3 auf jeden CLOCK'-Puls, wobei alternativ Signale VER und Signal PROG aktiviert werden; umgekehrt, falls P&V den Wert 0 hat, stimmt Eingang D des Verzögerungs-Flip-Flops 3 mit Ausgang Q3 überein und schaltet nicht. Folglich wird die Schaltung im "Programmierungs"-Status gehalten.
  • Das Steuersignal des Multiplexers 4 wird wie folgt generiert.
  • Wie gezeigt, wird anfänglich das Flip-Flop 2 gesetzt, und sein Ausgang ist "high". Wenn nach einem Verifizierungsschritt die Bedingung "ALLi" = 1 verifiziert ist (Block 114, 8 und 9), das heißt, alle Zellen, die wenigstens an dem i-ten Niveau zu programmieren sind, haben solch ein Niveau erreicht, weist Signal ALLi einen Puls auf, der das Flip-Flop 2 rücksetzt, wobei Signal P&V in den Low-Status geschaltet wird.
  • Wenn die Schaltung im "Programmierungs- und Verifizierungs"-Zustand ist und wenigstens eine Zelle (unter jenen, die wenigstens an dem i-ten Niveau programmiert werden müssen) gefunden wird, welche das i-te Niveau erreicht hat, wird ein Puls auf Signal "ONEi" generiert (wie beschrieben mit Bezug auf Block 111 in 8 und 9), und die Inhalte eines zweiten Zählers 7, der den Wert des Schrittzählers k speichert, werden rückgesetzt. Der zweite Zähler 7 wird durch eine Einheit auf jeden Programmierpuls hin erhöht und wird durch einen digitalen Komparator 8 verglichen, der den Vergleichswert Bi (Anzahl von Programmierpulsen, die nacheinander anzulegen sind) durch Register 9 empfängt.
  • Wenn der digitale Komparator 8 die Gleichung Bi = k überprüft, gibt er einen Puls OUTC aus, der das Flip-Flop 2 setzt, wobei die Schaltung in einen "Programmierungs- und Verifikations"-Zustand (P&V = 1) zurückversetzt wird.
  • Ein dritter Zähler 10 zählt die Anzahl von Niveaus, die soweit programmiert wurden, und stellt sodann an dem Ausgang den Wert von i bereit. Der dritte Zähler 10 wird initialisiert an Status 1 an dem Beginn eines Programmierungsbetriebs durch Signal PR_ST und hat einen Ausgang, der mit einem logischen Block 11 verbunden ist, welcher Register 9 mit Wert Bi abhängig von i versorgt.
  • Das Laden von Bi wird an dem Beginn des Programmierzyklusses bezogen auf das i-te Niveau durchgeführt, wenn der vorhergehende Zyklus endet, wie es durch einen Puls auf Signal ALLi signalisiert wird, welches das Erhöhen des dritten Zählers 10 und die Generierung eines neuen Werts von Bi verursacht. In dem ersten Programmierungszyklus (i = 1), wird das Laden von Bi in das Register 9 durch PR_ST herbeigeführt. Block DEL generiert eine geeignete Verzögerung in dem Ladesignal.
  • Flip-Flop 1 wird rückgesetzt, wenn die Schaltung eingeschaltet wird (Signal POR) und an dem Ende eines gesamten Programmierungsbetriebs, wenn Signal PR_END in den High-Status schaltet, wobei Signal PR_MODE auf 0 geschaltet wird, hinweisend auf den Schaltungszustand, dass nicht weiter programmiert wird.
  • In der Schaltung in 10 wird angenommen, dass die Signale ONEi und ALLi durch eine geeignete Schaltung generiert werden, die mit einem Speicher-Abfühlnetzwerk verbunden sind.
  • Die Vorteile des beschriebenen Verfahrens werden aus dem oben Erwähnten offenkundig. Tatsächlich ermöglicht das vorliegende Verfahren auf der einen Seite, die gewünschte Programmiergenauigkeit zu erhalten, durch Setzen eines Schwellenspannungsanstiegs mit einem geeigneten Wert, und auf der anderen Seite zu vermeiden, dass die globale Programmierungszeit übermäßig lang wird, da Verifizierung durchgeführt wird, wenn wenigstens eine Zelle das gewünschte Schwellenwertniveau erreicht hat. Das vorliegende Verfahren ist insbesondere vorteilhaft mit einer hohen Anzahl von zu programmierenden Niveaus (zum Beispiel von 16 an). Eine weitere Reduktion in den Programmierzeiten wird gemäß den beschriebenen Lösungen erhalten, gemäß welchen Verifizierung an zwischenliegenden Niveaus vermieden wird, an welchen keine Zellen programmiert werden müssen, und für jedes Plättchen ("Die") wird die Anzahl von Pulsen gespeichert, die notwendig ist, um den Zustand zu erreichen, in welchem die lineare Beziehung (1) gültig ist an dem Beginn eines globalen Programmierungsbetriebs.
  • Es wird schließlich deutlich, dass zahlreiche Modifikationen und Variationen an dem Verfahren, das hierin beschrieben und gezeigt ist, vorgenommen werden können, wobei alle von diesen innerhalb des erfinderischen Bereichs sind, wie er in den beiliegenden Ansprüchen definiert ist. Insbesondere kann, wenn man bedacht ist, der erste Verifikationsschritt nach einem kontinuierlichen Satz von Programmierpulsen nach dem Programmierpuls auftreten, der demjenigen vorhergeht, in welchem es angenommen wird, dass die zu programmierende Zelle oder die zu programmierenden Zellen bereits die gewünschte Schwellenspannung erreicht haben, wobei in der Praxis Bi = Ni – 1 in Block 106 in 8 und Bi = INT(Ci - 1) in Block 106' in 9 gesetzt wird.

Claims (12)

  1. Verfahren zur Programmierung von nicht-flüchtigen Speicherzellen, die einen Gateanschluss (CG) aufweisen, umfassend den Schritt des Anlegens eines Satzes von Programmierimpulsen, wobei, mit jedem Programmierimpuls, der Gateanschluss mit einer Gatespannung versorgt wird, deren Wert in Bezug auf den vorherigen Programmierimpuls angehoben wird, gekennzeichnet durch zyklisches Anlegen einer Mehrzahl (Bi) von aufeinander folgenden Programmierimpulsen ohne Verifikation, gefolgt durch einen Verifizierungsschritt.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass die Mehrzahl von Impulsen gleich ist zu der nominellen Anzahl von Impulsen (N), die notwendig sind, die Zelle von einem aktuellen Programmierniveau in ein nachfolgendes Programmierniveau zu versetzen.
  3. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass als Folge eines jeden Programmierimpulses die Gatespannung einen konstanten Anstieg (VGP) in Bezug auf einen vorherigen Programmierimpuls aufweist.
  4. Verfahren nach Anspruch 3, dadurch gekennzeichnet, dass zwischen einem aktuellen Programmierimpuls und einem nachfolgenden Programmierimpuls eine Schwellenspannungs-Differenz (VDIST) vorhanden ist, die gleich ist zu einem Vielfachen (Ci), das außerdem keinem Integer-Wert entspricht, des konstanten Anwachsens, und dass die Mehrzahl (Bi) der Programmierimpulse gleich ist zu einem Integer-Wert, der durch Kürzen des Vielfachen erhalten wird.
  5. Verfahren nach Anspruch 4, gekennzeichnet durch verschiedene Schwellenspannungs-Schritte zwischen Paaren von benachbarten Programmierniveaus.
  6. Verfahren nach einem der vorhergehenden Ansprüche, gekennzeichnet durch einen ersten Programmierschritt, der von einem gelöschten Zustand an einem ersten Programmierniveau startet, wobei der erste Programmierschritt eine Mehrzahl von Schritten umfasst, von denen jeder einen Programmierschritt und einen Verifizierungsschritt beinhaltet.
  7. Verfahren nach einem der vorhergehenden Ansprüche, gekennzeichnet durch den Schritt, dass eine Mehrzahl von Speicherzellen parallel programmiert wird.
  8. Verfahren nach einem der vorhergehenden Ansprüche, gekennzeichnet durch einen Zyklus von Schritten, umfassend: – Detektieren (105; 105') einer ersten nominellen Anzahl (Ni; Ci) von Programmierimpulsen, die zwischen einem aktuellen Programmierniveau und einem nachfolgenden Programmierniveau enthalten sind; – Berechnen (106; 106', 132135) einer Anzahl (Bi) von anzulegenden Programmierimpulsen auf der Basis der ersten nominellen Anzahl von Programmierimpulsen; – Bereitstellen (108) der Anzahl von anzulegenden Programmierimpulsen, ohne zu verifizieren; – Durchführen (110) eines Verifizierungsschrittes; – Wiederholung der Schritte der Bereitstellung eines Programmierimpulses und der Durchführung eines Verifizierungsschrittes bis wenigstens eine Zelle den gewünschten Schwellenwert erreicht hat; und – Wiederholung der Schritte des Anlegens eines Programmierschrittes und der Durchführung eines Verifizierungsschrittes bis alle Zellen ein gewünschtes Schwellenwertniveau erreicht haben.
  9. Verfahren nach Anspruch 8, gekennzeichnet durch Wiederholen des Zyklus' von Schritten bis zu einem maximalen Programmierniveau.
  10. Verfahren nach Anspruch 8 oder 9, dadurch gekennzeichnet, dass die Anzahl (Bi) von anzulegenden Programmierimpulsen gleich ist zu der ersten nominellen Anzahl (Ni) von Programmierimpulsen.
  11. Verfahren nach einem der Ansprüche 8 bis 10, dadurch gekennzeichnet, dass der Schritt des Wiederholens weiterhin den Schritt umfasst, dass die Bereitstellung der Programmierimpulse an diejenigen der an dem nachfolgenden Programmierniveau zu programmierenden Zellen gestoppt wird (115), die bereits den gewünschten Schwellenwert erreicht haben.
  12. Verfahren nach Anspruch 8, dadurch gekennzeichnet, dass der Schritt des Berechnens die Schritte umfasst: – Überprüfen (132), ob es Zellen gibt, die an dem nachfolgenden Programmierniveau zu programmieren sind; – falls ja, Setzen (106') der Anzahl (Bi) von anzulegenden Programmierimpulsen gleich einem Integer-Wert, der durch Kürzen der ersten nominellen Anzahl (Ci) von Programmierimpulsen erhalten wird; – falls nicht, Anheben (133) eines aktuellen Niveauindex', Berechnen (134) einer zweiten nominellen Anzahl (Ci) von Programmierimpulsen, die zwischen dem aktuellen Programmierniveau und einem dem aktuellen Programmierniveau nachfolgenden Programmierniveau enthalten sind; Summieren (135) der ersten und der zweiten nominellen Anzahl von Programmierimpulsen; und Wiederholen der Schritte des Verifizierens, ob es Zellen gibt, die an dem nachfolgenden Programmierniveau zu programmieren sind, des Anhebens eines aktuellen Niveauindex', des Berechnens einer zweiten nominellen Anzahl von Programmierimpulsen und des Summierens, bis verifiziert ist, dass es wenigstens eine Zelle gibt, die an dem nachfolgenden Programmierniveau zu programmieren ist; zuletzt Setzen (106') der Anzahl (Bi) von anzulegenden Programmierimpulsen gleich einem Integer-Wert, der erhalten wird durch Kürzen der zweiten nominellen Anzahl (Ci) von Programmierimpulsen.
DE69927967T 1999-08-03 1999-08-03 Programmierungverfahren eines nichtflüchtigen Multibit Speichers durch Regelung der Gatespannung Expired - Lifetime DE69927967T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
EP99830501A EP1074995B1 (de) 1999-08-03 1999-08-03 Programmierungverfahren eines nichtflüchtigen Multibit Speichers durch Regelung der Gatespannung

Publications (2)

Publication Number Publication Date
DE69927967D1 DE69927967D1 (de) 2005-12-01
DE69927967T2 true DE69927967T2 (de) 2006-07-27

Family

ID=8243537

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69927967T Expired - Lifetime DE69927967T2 (de) 1999-08-03 1999-08-03 Programmierungverfahren eines nichtflüchtigen Multibit Speichers durch Regelung der Gatespannung

Country Status (4)

Country Link
US (1) US6366496B1 (de)
EP (1) EP1074995B1 (de)
JP (1) JP4469475B2 (de)
DE (1) DE69927967T2 (de)

Families Citing this family (100)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100385228B1 (ko) * 2001-04-18 2003-05-27 삼성전자주식회사 불휘발성 메모리를 프로그램하는 방법 및 장치
US6504760B1 (en) * 2001-06-22 2003-01-07 Intel Corporation Charging a capacitance of a memory cell and charger
US6700820B2 (en) * 2002-01-03 2004-03-02 Intel Corporation Programming non-volatile memory devices
TWI292914B (de) * 2002-01-17 2008-01-21 Macronix Int Co Ltd
JP3908957B2 (ja) * 2002-01-24 2007-04-25 シャープ株式会社 不揮発性半導体メモリ装置
CN100409367C (zh) * 2002-01-30 2008-08-06 旺宏电子股份有限公司 多重值闪存的写入与清除方法
TWI244165B (en) 2002-10-07 2005-11-21 Infineon Technologies Ag Single bit nonvolatile memory cell and methods for programming and erasing thereof
US6847550B2 (en) * 2002-10-25 2005-01-25 Nexflash Technologies, Inc. Nonvolatile semiconductor memory having three-level memory cells and program and read mapping circuits therefor
ITMI20022531A1 (it) * 2002-11-28 2004-05-29 St Microelectronics Srl Metodo di programmazione di celle di memoria non volatile multilivello e relativo circuito di programmazione
KR100558004B1 (ko) * 2003-10-22 2006-03-06 삼성전자주식회사 게이트 전극과 반도체 기판 사이에 전하저장층을 갖는비휘발성 메모리 소자의 프로그램 방법
KR100632940B1 (ko) 2004-05-06 2006-10-12 삼성전자주식회사 프로그램 사이클 시간을 가변시킬 수 있는 불 휘발성반도체 메모리 장치
JP4764414B2 (ja) * 2005-02-03 2011-09-07 株式会社東芝 不揮発性半導体記憶装置及びその動作方法
KR100794654B1 (ko) 2005-07-06 2008-01-14 삼성전자주식회사 상 변화 메모리 장치 및 그것의 프로그램 방법
WO2007043133A1 (ja) * 2005-10-04 2007-04-19 Spansion Llc 半導体装置およびその制御方法
US7180780B1 (en) * 2005-11-17 2007-02-20 Macronix International Co., Ltd. Multi-level-cell programming methods of non-volatile memories
WO2007132453A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Ltd. Distortion estimation and cancellation in memory devices
WO2007132456A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Ltd. Memory device with adaptive capacity
WO2007132457A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Ltd. Combined distortion estimation and error correction coding for memory devices
US7663925B2 (en) * 2006-05-15 2010-02-16 Micron Technology Inc. Method and apparatus for programming flash memory
US8060806B2 (en) * 2006-08-27 2011-11-15 Anobit Technologies Ltd. Estimation of non-linear distortion in memory devices
US7525838B2 (en) * 2006-08-30 2009-04-28 Samsung Electronics Co., Ltd. Flash memory device and method for programming multi-level cells in the same
US7602650B2 (en) * 2006-08-30 2009-10-13 Samsung Electronics Co., Ltd. Flash memory device and method for programming multi-level cells in the same
WO2008053472A2 (en) 2006-10-30 2008-05-08 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
US7924648B2 (en) * 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
WO2008068747A2 (en) 2006-12-03 2008-06-12 Anobit Technologies Ltd. Automatic defect management in memory devices
US7900102B2 (en) 2006-12-17 2011-03-01 Anobit Technologies Ltd. High-speed programming of memory devices
KR100816161B1 (ko) * 2007-01-23 2008-03-21 주식회사 하이닉스반도체 플래시 메모리 소자의 프로그램 방법
US7751240B2 (en) 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
US8151166B2 (en) 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
WO2008111058A2 (en) 2007-03-12 2008-09-18 Anobit Technologies Ltd. Adaptive estimation of memory cell read thresholds
US7551483B2 (en) * 2007-04-10 2009-06-23 Sandisk Corporation Non-volatile memory with predictive programming
US7643348B2 (en) * 2007-04-10 2010-01-05 Sandisk Corporation Predictive programming in non-volatile memory
CN101711414B (zh) * 2007-04-10 2013-06-26 桑迪士克科技股份有限公司 非易失性存储器和用于预测编程的方法
US8001320B2 (en) 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
US8234545B2 (en) 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
US8429493B2 (en) * 2007-05-12 2013-04-23 Apple Inc. Memory device with internal signap processing unit
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8259497B2 (en) * 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
US8174905B2 (en) 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
US8000141B1 (en) 2007-10-19 2011-08-16 Anobit Technologies Ltd. Compensation for voltage drifts in analog memory cells
WO2009050703A2 (en) 2007-10-19 2009-04-23 Anobit Technologies Data storage in analog memory cell arrays having erase failures
US8068360B2 (en) 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
WO2009063450A2 (en) 2007-11-13 2009-05-22 Anobit Technologies Optimized selection of memory units in multi-unit memory devices
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
US7688638B2 (en) * 2007-12-07 2010-03-30 Sandisk Corporation Faster programming of multi-level non-volatile storage through reduced verify operations
US8209588B2 (en) 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
US8456905B2 (en) * 2007-12-16 2013-06-04 Apple Inc. Efficient data storage in multi-plane memory devices
US8085586B2 (en) 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
US8156398B2 (en) 2008-02-05 2012-04-10 Anobit Technologies Ltd. Parameter estimation based on error correction code parity check equations
US7924587B2 (en) * 2008-02-21 2011-04-12 Anobit Technologies Ltd. Programming of analog memory cells using a single programming pulse per state transition
US8230300B2 (en) 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
US8400858B2 (en) 2008-03-18 2013-03-19 Apple Inc. Memory device with reduced sense time readout
US8059457B2 (en) 2008-03-18 2011-11-15 Anobit Technologies Ltd. Memory device with multiple-accuracy read commands
US7813172B2 (en) * 2008-06-12 2010-10-12 Sandisk Corporation Nonvolatile memory with correlated multiple pass programming
US7800945B2 (en) * 2008-06-12 2010-09-21 Sandisk Corporation Method for index programming and reduced verify in nonvolatile memory
US7796435B2 (en) * 2008-06-12 2010-09-14 Sandisk Corporation Method for correlated multiple pass programming in nonvolatile memory
US7826271B2 (en) * 2008-06-12 2010-11-02 Sandisk Corporation Nonvolatile memory with index programming and reduced verify
US7995388B1 (en) 2008-08-05 2011-08-09 Anobit Technologies Ltd. Data storage using modified voltages
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US7715235B2 (en) * 2008-08-25 2010-05-11 Sandisk Corporation Non-volatile memory and method for ramp-down programming
US8169825B1 (en) 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8239734B1 (en) 2008-10-15 2012-08-07 Apple Inc. Efficient data storage in storage device arrays
US8261159B1 (en) 2008-10-30 2012-09-04 Apple, Inc. Data scrambling schemes for memory devices
US8208304B2 (en) 2008-11-16 2012-06-26 Anobit Technologies Ltd. Storage at M bits/cell density in N bits/cell analog memory cell devices, M>N
US8397131B1 (en) 2008-12-31 2013-03-12 Apple Inc. Efficient readout schemes for analog memory cell devices
US8248831B2 (en) 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
US8223551B2 (en) 2009-02-19 2012-07-17 Micron Technology, Inc. Soft landing for desired program threshold voltage
US8228701B2 (en) * 2009-03-01 2012-07-24 Apple Inc. Selective activation of programming schemes in analog memory cell arrays
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
KR101600539B1 (ko) * 2009-04-07 2016-03-08 삼성전자주식회사 불휘발성 메모리 장치의 프로그램 방법
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
US8694814B1 (en) 2010-01-10 2014-04-08 Apple Inc. Reuse of host hibernation storage space by memory controller
US8677203B1 (en) 2010-01-11 2014-03-18 Apple Inc. Redundant data storage schemes for multi-die memory systems
US8116140B2 (en) 2010-04-09 2012-02-14 Sandisk Technologies Inc. Saw-shaped multi-pulse programming for program noise reduction in memory
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
US8595591B1 (en) 2010-07-11 2013-11-26 Apple Inc. Interference-aware assignment of programming levels in analog memory cells
US9104580B1 (en) 2010-07-27 2015-08-11 Apple Inc. Cache memory for hybrid disk drives
US8645794B1 (en) 2010-07-31 2014-02-04 Apple Inc. Data storage in analog memory cells using a non-integer number of bits per cell
US8856475B1 (en) 2010-08-01 2014-10-07 Apple Inc. Efficient selection of memory blocks for compaction
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
US8879329B2 (en) 2010-11-19 2014-11-04 Micron Technology, Inc. Program verify operation in a memory device
CN106158027B (zh) * 2015-04-09 2020-02-07 硅存储技术公司 用于对分离栅式非易失性存储器单元编程的系统和方法
US9418731B1 (en) * 2015-11-06 2016-08-16 Phison Electronics Corp. Memory management method, memory storage device and memory control circuit unit
US10249382B2 (en) 2017-08-22 2019-04-02 Sandisk Technologies Llc Determination of fast to program word lines in non-volatile memory
US10991430B2 (en) 2018-12-19 2021-04-27 Ememory Technology Inc. Non-volatile memory cell compliant to a near memory computation system
CN111863087B (zh) * 2019-04-29 2022-08-30 北京兆易创新科技股份有限公司 一种控制编程性能的方法和装置
TWI695385B (zh) 2019-05-31 2020-06-01 旺宏電子股份有限公司 非揮發性記憶體與其操作方法
KR20200144000A (ko) * 2019-06-17 2020-12-28 에스케이하이닉스 주식회사 메모리 장치 및 그것의 동작 방법
US11556416B2 (en) 2021-05-05 2023-01-17 Apple Inc. Controlling memory readout reliability and throughput by adjusting distance between read thresholds
US11847342B2 (en) 2021-07-28 2023-12-19 Apple Inc. Efficient transfer of hard data and confidence levels in reading a nonvolatile memory

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5555204A (en) * 1993-06-29 1996-09-10 Kabushiki Kaisha Toshiba Non-volatile semiconductor memory device
JP3730272B2 (ja) * 1994-09-17 2005-12-21 株式会社東芝 不揮発性半導体記憶装置
KR0172401B1 (ko) * 1995-12-07 1999-03-30 김광호 다수상태 불휘발성 반도체 메모리 장치
US6115285A (en) * 1996-06-14 2000-09-05 Siemens Aktiengesellschaft Device and method for multi-level charge/storage and reading out
JPH1055690A (ja) * 1996-08-07 1998-02-24 Nec Corp 電気的書込可能な不揮発性半導体記憶装置
EP0913832B1 (de) * 1997-11-03 2003-07-23 STMicroelectronics S.r.l. Verfahren zur Programmierung eines nichtflüchtigen Mehrpegelspeichers und nichtflüchtiger Mehrpegelspeicher

Also Published As

Publication number Publication date
JP4469475B2 (ja) 2010-05-26
DE69927967D1 (de) 2005-12-01
EP1074995A1 (de) 2001-02-07
US6366496B1 (en) 2002-04-02
EP1074995B1 (de) 2005-10-26
JP2001057091A (ja) 2001-02-27

Similar Documents

Publication Publication Date Title
DE69927967T2 (de) Programmierungverfahren eines nichtflüchtigen Multibit Speichers durch Regelung der Gatespannung
DE69719968T2 (de) Stabilisierkreise für mehrere digitale bits
DE102004059411B4 (de) Flash-Speichervorrichtung und Verfahren zur Steuerung derselben
DE69636063T2 (de) Verfahren zum Programmieren eines nichtflüchtigen Speichers
DE60220590T2 (de) Verfahren zur Reduzierung von Kopplungseffekten zwischen multi-level Speicherelementen eines nicht flüchtigen Speichers
DE602005004027T2 (de) Nichtflüchtiges speichersystem mit programmzeitsteuerung
DE102006020180B3 (de) Verfahren zum Programmieren eines Blocks von Speicherzellen, nicht-flüchtiger Speicher und Speicherkarte
DE60029206T2 (de) Nichtflüchtiger Speicher zur Speicherung von Multibitdaten
DE19859494C2 (de) Nichtflüchtiger Mehrebenen-Halbleiterspeicherbaustein mit einer Schaltung zum Einstellen der Datenlesezeit
DE4119394A1 (de) Nichtfluechtige halbleiterspeichereinrichtung und datenloeschungsverfahren hierfuer
DE2905675A1 (de) Schaltungsanordnung zur sperrung des zugangs zu einem speicher
DE102005020796B4 (de) Halbleiterspeicherbauelement und Programmierverfahren
DE102006030888B4 (de) Verfahren und Vorrichtung zum Erzeugen eines Startwertes für einen Pseudo-Zufallszahlengenerator
DE69726832T2 (de) Datenlesevorrichtung und -verfahren für Mehrbitspeicherzelle
DE69819961T2 (de) Nichtflüchtige Halbleiterspeicheranordnung
DE102005027197B3 (de) Verfahren und Anordnung zur Programmierung einer Speicherzelle
DE102007062674A1 (de) Integrierte Schaltkreise, Speicher-Steuerungseinheit und Speichermodule
DE1474139A1 (de) Verfahren und Einrichtung zum Festhalten des Werts einer elektrischen Groesse in einem bestimmten Augenblick
DE69626654T2 (de) Mehrfaches schreiben pro einfachem löschen in nichtflüchtigem speicher
DE2116784C3 (de) Programmgesteuerte Schrittspeicher-Vorrichtung
DE69736493T2 (de) Speichervorrichtung mit programmierbarer nichtflüchtiger Multibitspeicherzelle und Vorrichtung und Verfahren zum Abgrenzen von Speicherzuständen der Zelle
DE19731008A1 (de) Lesespannung-Steuereinrichtung für Halbleiter-Speichereinrichtung
DE2602315B2 (de) Schaltungsanordnung und Betriebsverfahren zur Umwandlung eines Analog-Signals in ein Digitalsignal
DE60033818T2 (de) Verfahren und Schaltung zur Programmierung eines nichtflüchtigen Multibitspeichers mit einer reduzierten Anzahl von Kontaktstiften
DE19542029C1 (de) Verfahren zum selbsttätigen Ermitteln der nötigen Hochspannung zum Programmieren/Löschen eines EEPROMs

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: LEINWEBER & ZIMMERMANN, 80331 MUENCHEN