Beschreibung
Verfahren und Schaltungsanordnung zum Korrigieren von Speicherfehlern
Die vorliegende Erfindung betrifft ein Verfahren nach dem Oberbegriff des Anspruches 1 und eine Schaltungsanordnung nach dem Oberbegriff des Anspruches 8 zum Korrigieren von Speicherfehlern, die beim Beschreiben oder Programmieren ei- nes Speichers auftreten.
Als Programm- oder Datenspeicher werden heute vorwiegend nichtfluchtige FLASH-Speicher eingesetzt, die in Form eines externen Chips oder mit einer integrierten Logik infolge lh- rer Losch- und Programmierbarkeit eine maximale Flexibilität bei remanenter Speicherung der Information ohne elektrische Hilfsquellen bieten. Damit verbunden ist die Forderung nach einer möglichst hohen Stabilität (Endurance) bezüglich der Anzahl der möglichen Schreib- und Loschvorgange und einer möglichst langen Datenhaltung (> 10 Jahre) .
Um die oben beschriebenen Forderungen überprüfen zu können, werden zur Sicherung der Qualität und der Spezifikation der Speicher entsprechende Testsysteme bzw. Testprogramme einge- setzt, mit deren Hilfe jedoch lediglich solche Defekte überprüft werden könne, welche reproduzierbar sind. Bei verschiedenen Speicherarten, insbesondere bei FLASH-Speichern, kann es aber zum stochastischen Auftreten bestimmter Defekte kommen. Derartige Defekte beruhen insbesondere auf Speicherzel- len, die auf eine gleiche elektrische Belastung (Stress) unterschiedlich reagieren, so daß es zum fehlerhaften Speichern von ungewunschten Informationen kommen kann. Derartige Fehler werden als 'Erratic Bits' bezeichnet und können durch die in herkömmlichen Testprogrammen eingebauten 'Filter' nicht oder nur zufällig erfaßt werden. Zudem sind die technologischen Möglichkeiten m der Regel begrenzt oder reichen nicht aus, um derartige Fehler_auf eine akzeptable Fehlerrate abzusen-
ken, so daß grundsätzlich das Bedürfnis nach einem intelligenten Verfahren zum Erkennen und Korrigieren von 'Erratic Bits' besteht.
Das Auftreten von 'Erratic Bits' soll nachfolgend kurz anhand Fig. 4 erläutert werden, wobei ein Speicher 1 mit vier matrixartig verschalteten Speicherzellen 5 dargestellt ist. Jede Speicherzelle 5 ist durch einen Feldeffekttransistor realisiert, wobei die einzelnen Speicherzellen 5 über Wortlei- tungen 6 und Bitleitungen 7 adressiert werden können. Zum
Programmieren bzw. Beschreiben einer Speicherzelle 5 wird der Gateanschluß der gewünschten Speicherzelle 5 durch Anlegen einer Steuerspannung an eine der Wortleitungen 6 angesteuert, während der Source- oder Drainanschluß der gewünschten Spei- cherzelle 5 durch Anlegen einer Steuerspannung an eine der Bitleitungen 7 angesteuert wird. Nachfolgend wird davon ausgegangen, daß durch Anlegen entsprechender Steuerspannungen die in Fig. 4 gezeigte Speicherzelle 5(a) ausgewählt werden soll. Die Speicherzellen, die an der in diesem Fall selek- tierten Wortleitung 6 anliegen (vgl. in Fig. 4 die Speicherzelle 5 (b) ) , sehen damit notwendigerweise ebenfalls die Steuer- oder Programmierspannung, mit der der Gateanschluß der gewünschten Speicherzelle 5(a) adressiert wird. Diese Programmierspannung führt bei solchen Speicherzellen 6, die ei- gentlich ihren gelöschten Zustand beibehalten sollen, zu einem Programmierstress und im schlimmsten Fall zu einer ungewollten Programmierung. Dieser Stress wird als Wortleitungsoder Gate-Disturb bezeichnet. Entsprechendes gilt für diejenigen Speicherzellen, welche an der selektierten Bitleitung liegen (vgl. in Fig. 4 die Speicherzelle 5(c)) und mit der entsprechenden Programmierspannung von dem Drainanschluß her beaufschlagt werden. In diesem Fall spricht man von einem Bitleitungs- oder Drain-Disturb. Bei der Auswahl bzw. Adressierung der Speicherzelle 5(a) in Fig. 4 können somit durch die Speicherzellen 5(b) und 5(c) 'Erratic Bits' hervorgerufen werden. Lediglich die Speicherzelle 5(d) ist in diesem Fall vor solch einem Fehler sicher.
'Erratic Bits' zeigen nicht reproduzierbare, massive Schwankungen in der Sensitivität auf diesen beispielsweise bei FLASH-Speichern unvermeidbaren Stress. Die einzelnen Spei- cherzellen 5 des Speichers 1 müssen daher auf das Auftreten von 'Erratic Bits' hin überwacht werden. Dies kann beispielsweise durch Vergleichen der Schreibinformation mit der in den einzelnen Speicherzellen 5 tatsächlich gespeicherten Information geschehen. Bekannterweise wird bei Feststellen eines 'Erratic Bits' dieses bzw. die entsprechende Speicherzelle 5 gelöscht und erneut mit der gewünschten Schreibinformation beschrieben bzw. programmiert. Dabei wird das Löschen sinn- vollerweise auf einen minimalen Speicherbereich um das 'Erratic Bit' beschränkt, um den Aufwand des erneuten Programmie- rens möglichst gering zu halten.
In der Regel verschwinden jedoch derartige 'Erratic Bits' nicht bereits nach einem Löschvorgang mit anschließender erneuter Programmierung, sondern es können unter Umständen sehr viele (sogar mehrere hundert oder tausend) derartige Löschvorgänge mit anschließenden Neuprogrammierungen erforderlich sein. Dieses Verfahren des Löschens und Neuprogrammierens ist somit einerseits sehr zeitaufwendig und birgt andererseits zudem die Gefahr, daß aufgrund der dauerhaften Belastung durch die wiederholten Lösch- und Programmiervorgänge auch unprogrammierte Zellen auf der selektierten Wort- und Bitleitung, die nicht von den einzelnen Lösch- und Programmiervorgänge erfaßt werden, unter Umständen einem sehr hohen kumulativen Disturb ausgesetzt sind, der im schlimmsten Fall zu ei- ner Umprogrammierung dieser Speicherzellen führen kann.
Der vorliegenden Erfindung liegt daher die Aufgabe zugrunde, ein Verfahren und eine entsprechende Schaltungsanorndung zum Korrigieren von Speicherfehlern vorzuschlagen, womit die zu- vor beschriebenen Probleme beseitigt werden können und insbesondere 'Erratic Bits' zuverlässig ohne Beeinflussung anderer Speicherzellen beseitigt werden können.
Diese Aufgabe wird gemäß der vorliegenden Erfindung durch ein Verfahren mit den Merkmalen des Anspruches 1 bzw. eine Schaltungsanordnung mit den Merkmalen des Anspruches 8 gelöst. Die Unteransprüche definieren jeweils bevorzugte und vorteilhafte Ausführungsformen der vorliegenden Erfindung.
Die Grundidee der vorliegenden Erfindung beruht darauf, bei Auftreten eines Speicherfehlers, insbesondere eines 'Erratic Bits', in einer bestimmten Speichereinheit oder einem bestimmten Speicherfeld die ursprüngliche Schreibinformation dieser Speichereinheit zu invertieren und die Speichereinheit erneut mit der invertierten Schreibinformation zu beschreiben. Die Tatsache der Invertierung wird in diesem Fall ver- merkt, was insbesondere in einem entsprechenden Bit des jeweiligen Speicherfeldes erfolgen kann.
Vorteilhafterweise wird auch nach der Neubeschreibung der jeweiligen Speichereinheit mit der invertieren Schreibinforma- tion die in der Speichereinheit tatsächlich gespeicherte Information erneut verifiziert. Wird auch nach der erneuten Programmierung ein 'Erratic Bit' in der entsprechenden Speichereinheit erkannt, werden gegebenenfalls mehrere derartige Lösch-/Programmierzyklen zur Beseitigung des Fehlers verwen- det. Dieser Fall ist jedoch sehr unwahrscheinlich, was durch empirisch ermittelte 'Erratic Bit ' -Fehlerraten bestätigt werden kann.
Besonders vorteilhaft ist es, wenn bereits vor dem ersten Programmiervorgang die Programmier- oder Schreibinformation auf das Auftreten von Einsen oder Nullen hin überwacht wird, da für das Auftreten von 'Erratic Bits' insbesondere diejenigen Speicherzellen kritisch sind, in welche eine binäre '0' geschrieben werden soll, da diese gegebenenfalls fehlerhaft in eine binäre '1' umprogrammiert werden kann. Es sollte daher mit einer Schreibinformation begonnen werden, die eine minimale Anzahl von Nullen aufweist, d.h. besitzt die eigent-
lieh gewünschte Schreibinformation mehr Nullen als Einsen, sollte bereits vor dem ersten Schreibvorgang die Schreibinformation invertiert und dem zuvor beschriebenen Verfahren zugrundegelegt werden.
Die vorliegende Erfindung kann grundsätzlich auf alle Arten von programmierbaren Speichern angewendet werden, wobei jedoch insbesondere ein Einsatz bei der Programmierung von nichtfluchtigen FLASH-Speiehern vorteilhaft ist. Ebenso kon- nen sogenannte Stuck-At-Fehler gut kaschiert oder unterdruckt werden. Des weiteren kann die Erfindung durch einen einfachen Algorithmus sowie einem vertretbaren Flachenaufwand im Speicher und m der entsprechenden Steuerlogik realisiert werden. Zudem gewährleistet die vorliegende Erfindung eine Reduktion auf vertretbare Fehlerraten, wobei des weiteren bei der Korrektur von Speicherfehlern Ruckwirkungen auf andere Speicherzellen minimiert werden können.
Die Erfindung wird nachfolgend anhand bevorzugter Ausfuh- rungsbeispiele unter Bezugnahme auf die beigef gte Zeichnung naher erläutert.
Fig. 1 zeigt eine Darstellung zur Erläuterung des der vorliegenden Erfindung zugrundeliegenden Prinzips,
Fig. 2 zeigt ein Flußdiagramm eines Verfahrens gemäß einem bevorzugten Ausfuhrungsbeispiel der vorliegenden Erfindung,
Fig. 3 zeigt ein vereinfachtes Blockschaltbild einer Schal- tungsanordnung gemäß einem bevorzugten Ausfuhrungsbeispiel der vorliegenden Erfindung, und
Fig. 4 zeigt eine Darstellung zur Erläuterung des Auftretens von sogenannten 'Erratic Bits'.
In Fig. 1 ist beispielhaft der der Ablauf des Verfahrens zur Korrektur von Speicherfehlern gemäß der vorliegenden Erfm-
düng anhand eines bevorzugten Ausführungsbeispiels dargestellt, wobei den dargestellten Abschnitten zudem Schritte S100-S106 zugeordnet sind, welche nachfolgend noch näher unter Bezugnahme auf Fig. 2 erläutert werden.
Zunächst wird davon ausgegangen, daß die zu beschreibende Speichereinheit 9 gelöscht ist, d.h. sämtliche Speicherzellen dieser Speichereinheit 9 speichern den binären Wert '0'. Anschließend wird eine gewünschte Schreibinformation oder ein gewünschter Code, im vorliegenden Fall der Code '10110100', in die Speichereinheit 9 geschrieben. Die anschließende Verifizierung der in der Speichereinheit 9 tatsächlich gespeicherten Werte ergibt, daß beispielsweise das vorletzte gespeicherte Bit einem 'Erratic Bit' (EB) entspricht, d.h. an- stelle des Werts '0' ist fehlerhafterweise der Wert '1' gespeichert. Derartige Speicherfehler können relativ einfach dadurch erkannt werden, daß die ursprüngliche Schreibinformation mit der tatsächlich gespeicherten Information verglichen wird, wobei Fehler z.B. durch eine logische XOR-Verknüpfung der Schreibinformation und der gespeicherten Information ermittelt werden können. Dabei ist nicht erforderlich, das 'Erratic Bit' zu lokalisieren, sondern es genügt eine integrale Feststellung eines Speicherfehlers. Wurde auf diese Weise ein Fehler festgestellt, wird die entsprechende Speichereinheit 9 wieder gelöscht, der ursprüngliche Schreibcode invertiert und erneut in die Speichereinheit 9 geschrieben. Anschließend erfolgt eine erneute Verifizierung des geschriebenen invertierten Schreibcodes. Wie in Fig. 1 gezeigt ist, wird die Invertierung des Schreibcodes vermerkt, damit stets bekannt ist, ob in der Speichereinheit 9 der ursprüngliche Schreibcode oder die invertierte Version davon gespeichert ist. Dabei empfiehlt es sich insbesondere, hierzu ein zusätzliches Bit 8 der Speichereinheit bzw. des Speicherfelds 9 zu verwenden, welches im ursprünglichen Zustand den binären Wert '0' be- sitzt und bei der Invertierung ebenfalls invertiert wird.
Der zusätzliche Flächenbedarf im Speicher richtet sich dabei nach der kleinsten zu programmierenden Speichereinheit. Je größer diese Speichereinheit ist, desto kleiner ist der zu addierende Flächenaufwand. Bei Programmspeicher-Anwendungen sind die Einheiten im allgemeinen Bursts (ganze/halbe Wortleitungen) , während bei Datenspeichern die pro Programmiervorgang zu programmierenden Speichereinheiten oder Blöcke je nach Anforderung kleiner sind und beispielsweise ein Byte oder ein Wort umfassen.
In Fig. 2 ist nochmals das erfindungsgemäße Verfahren gemäß einem bevorzugten Ausfuhrungsbeispiel in Form eines ausführlichen Flußdiagramms dargestellt.
Mit dem Start des Verfahrens bzw. Programms werden zwei Variablen i und INV auf den Wert 0 gesetzt (Schritt Ξ100) . Die Variable i entspricht einer Laufvariable, welche die Nummer des zu beschreibenden Speicherblocks des Speichers 1 angibt und Werte zwischen 1 und N annehmen kann. Die Variable INV kann hingegen lediglich die Werte 1 und 0 annehmen und bezeichnet die Tatsache, ob eine Invertierung des Schreibcodes vorliegt oder nicht. Anschließend wird die gewünschte Schreibinformation in den Speicherblock i geschrieben (S101) und dieser durch Auslesen der in dem Block i gespeicherten Infor- mation verifiziert (S102) . Wurde festgestellt, daß mindestens ein 'Erratic Bit', d.h. eine Abweichung zwischen der Schreibinformation und der tatsächlich gespeicherten Information, vorliegt (S103), wird der entsprechende Speicherblock i gelöscht (S104), der Schreibcode bzw. die Schreibinformation invertiert (S105) , die Invertierung in Form des in Fig. 1 gezeigten Bits 8 vermerkt, d.h. INV = 1 gesetzt (S106) , und der Speicherblock i erneut mit der invertierten Schreibinformation beschrieben (S101) . Es schließt sich eine Wiederholung der Schritte S102 und S103 sowie gegebenenfalls der Schritte S104-S106 und S101 an. Wurde im Schritt S103 kein 'Erratic Bit' in dem zu beschreibenden Speicherblock festgestellt, wird überrpüft, ,ob__bereits sämtliche Speicherblöcke des Spei-
chers abgearbeitet worden sind (S107) und gegebenenfalls das Verfahren beendet (S109) . Ist dies nicht der Fall, wird die Variable 1 auf den nächsten Speicherblock und die Variable INV auf den Wert '0' gesetzt (S108), und der nächste Spei- cherblock wird mit einer entsprechenden Schreibinformation beschrieben (S101) und den zuvor beschriebenen Verfahrens- schritten unterzogen.
Wird nach der Invertierung einer Schreibinformation und dem erneuten Programmieren des entsprechenden Speicherblocks wieder ein 'Erratic Bit' erkannt, müssen weitere Programmier- und Loschzyklen zur Beseitigung bzw. Korrektur des entsprechenden Speicherfehlers durchgeführt werden. Dieser Fall ist jedoch sehr unwahrscheinlich. Bei einem lMegabit-FLASH- Programmspeicher liegt die 'Erratic Bit ' -Fehlerrate pro Programmierzyklus bei ca. 0,1%. Da nach dem physikalischen Modell grundsätzlich alle Speicherzellen des Speichers ein 'Erratic Bit' aufweisen können, ergibt sich damit aus der Chip- Ausfallrate von 0,1% und unter der Annahme von lediglich ei- nen 'Erratic Bit' pro Chipausfall eine Bit-Ausfallrate von 10"9. Dabei werden pro Programmiervorgang 512 Speicherzellen beschrieben, so daß sich für die Wahrscheinlichkeit des Auftretens (oder nach einer Invertierung des Wiederauftretens) eines 'Erratic Bits' in diesem Cluster eine Fehlerrate von 0,512xl0"6 ergibt.
In der Regel wird im Schritt S101 mit dem Schreiben einer nichtinvertierten Schreibinformation begonnen. Um jedoch die Fehlerrate von vornherein absenken zu können, empfiehlt es sich, die zu Beginn zu verwendenden Schreibinformation
(nichtinvertiert oder invertiert) davon abhangig zu machen, welche der beiden Versionen der Schreibinformation eine minimale Anzahl von Nullen aufweist. Die Nullen sind die für das Auftreten von 'Erratic Bits' kritischen Werte, da die ent- sprechenden Speicherzellen leicht durch das Anlegen von
Schreibspannungen zum Speichern des Werts '1' an benachbarte Speicherzellen umprogrammiert werden können. Weist die inver-
tierte Version des im Schritt S101 zu verwendenden Schreibcodes eine geringere Anzahl an Nullen auf als die nichtmver- tierte Version, sollte demzufolge bereits im ersten Schreibvorgang des entsprechenden Speicherblocks die mver- tierte Version zum Programmieren des Speicherblocks verwendet werden. Auch in diesem Fall ist die Invertierung in dem entsprechenden Bit des jeweiligen Speicherblocks zu vermerken.
In Fig. 3 ist ein vereinfachtes Blockschaltbild einer Schal- tungsanordnung zur Realisierung des zuvor beschriebenen Verfahrens dargestellt.
Ein zu programmierender Speicher 1, beispielsweise ein nicht- fluchtiger FLASH-Speicher, wird über einen Schreib- oder Ein- gabepuffer 2 und einen Lese- oder Ausgabepuffer 3 von einer Steuerlogik 4 angesteuert, welche insbesondere eine Zustands- aschme zur Steuerung des zuvor beschriebenen Verfahrensablaufs umfaßt. In dem Schreibpuffer 2 ist der jeweils unmittelbar zuvor verwendete Schreibcode zwischengespeichert, so daß die Steuerlogik 4 Speichertehler durch einen UND-
Vergleich des über den Lesepuffer 3 ausgelesenen Speicherin- halts des zuvor beschriebenen Speicherblocks mit dem in dem Schreibpuffer 2 gespeicherten Schreibcode feststellen kann. Bei Feststellen einer Abweichung invertiert die Steuerlogik 4 den zuvor verwendeten Schreibcode, vermerkt die Invertierung in dem Inversionsbit (vgl. das Bit 8 in Fig. 1), loscht den zuvor beschriebenen Speicherblock und beschreibt über den Schreibpuffer 2 diesen Speicherblock mit dem invertierten Schreibcode. Der invertierte Schreibcode wird wiederum in dem Schreibpuffer 2 für die nachfolgende Verifizierung zwischengespeichert. Allgemein sollte das Auslesen des Speicherin- halts des zu programmierenden Speicherblocks mit einem entsprechenden Vorhalt für gelöschte Speicherzellen durchgeführt werden.