-
Die Erfindung betrifft die Kompensation von Lesefehlern.
-
Aus
US 9,805,771 B2 ist die Auswertung von Zuständen bekannt, die aus Speicherzellen gelesen werden, in die Zeitdomäne zu transformieren und entsprechend zeitlich früher eintreffende Zustände zum effizienten Auslesen von Speicherzellen zu nutzen.
-
US 2010/0281340 A1 betrifft eine adaptive Belastbarkeitscodierung für nicht-volatile Speicher.
-
Eine Aufgabe besteht darin, Lesefehler zu kompensieren, die auftreten können, wenn mehrere Zustände innerhalb eines zeitlichen Lesefensters zusammen fallen.
-
Diese Aufgabe wird gemäß den Merkmalen der unabhängigen Ansprüche gelöst. Bevorzugte Ausführungsformen sind insbesondere den abhängigen Ansprüchen entnehmbar.
-
Es wird ein Verfahren angegeben zur Kompensation eines Lesefehlers,
- - bei dem je n Zustände aus Speicherzellen eines Speicher gelesen werden, wobei die Zustände in einer Zeitdomäne bestimmt werden,
- - bei dem, falls die n Zustände kein Codewort eines k-aus-n-Codes bilden, mehrere Zustände aus den n Zuständen, die innerhalb eines Lesefensters bestimmt wurden, mit einer ersten gültigen Belegung versehen und einer Fehlerverarbeitung zugeführt werden,
- - bei dem, falls die Fehlerverarbeitung keinen Fehler angibt, die n Zustände mit der ersten gültigen Belegung weiterverarbeitet werden,
- - bei dem, falls die Fehlerverarbeitung einen Fehler angibt, die mehreren Zustände, die innerhalb des Lesefensters bestimmt wurden, mit einer zweiten gültigen Belegung versehen werden und die n Zustände mit der zweiten gültigen Belegung weiterverarbeitet werden.
-
Die erste gültige Belegung wird somit testweise ausprobiert und von der Fehlerverarbeitung abgewiesen oder als fehlerfrei erkannt. Im ersten Fall (Abweisung durch die Fehlerverarbeitung) wird die zweite gültige Belegung (bei 2 fehlerhaften Stellen gibt es genau 2 mögliche gültige Bitkombination) verwendet und der weiteren Verarbeitung zu Grunde gelegt. Im zweiten Fall (keine Abweisung durch die Fehlerverarbeitung) war das testweise Probieren korrekt und es wird die erste gültige Belegung verwendet und der weiteren Verarbeitung zu Grunde gelegt.
-
Sollten mehr als zwei Zustände in das Lesefenster fallen, kann der obige Ansatz erweitert werden derart, dass mehrere gültige Belegungen (dritte, vierte, etc.) probiert werden; wird eine gültige Belegung von der Fehlerverarbeitung als fehlerfrei erkannt, wird diese gültige Belegung weiter verwendet. Ansonsten wird die nächsten möglicherweise gültige Belegung probiert.
-
Die gültigen Belegungen haben alle gemeinsam, dass es sich um Codewörter des k-aus-n-Codes handelt.
-
Es ist hier detailliert beschrieben, wie die Zustände in der Zeitdomäne bestimmt werden. Ergänzend kann diesbezüglich auch auf
US 9,805,771 B2 verwiesen werden. Durch die Transformation der zu detektierenden Größen in den Zeitbereich treten die einzelnen Zustände zeitlich nacheinander auf. Beispielsweise treten 0-Zustände vor den 1-Zuständen auf (die Bezeichnungen 0- und 1-Zustand sind exemplarisch zur Veranschaulichung gewählt). Somit kann nach Eintreffen der k 0-Zustände die Bestimmung der n-Zustände beendet werden und den n-k verbleibenden Zuständen der Wert 1 zugeordnet werden (es muss nicht gewartet werden bis die 1-Zustände bestimmt worden sind, weil es aufgrund des k-aus-n-Codes k 0-Zustände und n-k 1-Zustände gibt).
-
Kommt es zu einem Lesefehler, weil statt des k-ten 0-Zustands zwei (oder auch mehr) 0-Zustände erkannt werden, liegen mehr als k 0-Zustände vor, was eine Verletzung des Codes und somit einen Lesefehler darstellt.
-
Dieser Lesefehler kann behoben werden durch den vorstehend erläuterten Mechanismus des Probierens unter Einbeziehung der Fehlerschaltung.
-
Es ist eine Weiterbildung, dass die gültige Belegung ein Codewort ist.
-
Bei dem Codewort handelt es sich beispielsweise um ein Codewort des k-aus-n-Codes.
-
Es ist eine Weiterbildung, dass das Codewort weiterverarbeitet wird, falls die n Zustände ein Codewort aus dem k-aus-n-Code sind.
-
Es ist eine Weiterbildung, dass die Speicherzellen in Gruppen von n Speicherzellen gelesen werden.
-
Es ist eine Weiterbildung, dass die Speicherzellen komplementäre Speicherzellen eines komplementären Speichers sind.
-
Der komplementäre Speicher kann insbesondere ein differenzieller Lesespeicher sein.
-
Es ist eine Weiterbildung, dass die Zustände in der Zeitdomäne bestimmt werden, indem eine Anzahl von k schnellsten Zuständen bestimmt wird.
-
Es ist eine Weiterbildung, dass die schnellsten Zustände 0-Zustände sind.
-
Es ist eine Weiterbildung, dass die n Zustände kein Codewort des k-aus-n-Codes sind, wenn während des Lesefensters für den k-ten schnellsten Zustand mindestens ein weiterer schnellster Zustand bestimmt wird.
-
Es ist eine Weiterbildung, dass
- - für k=3 die k schnellsten und die k-1 schnellsten Zustände,
- - für k=4 die k schnellsten, die k-1 schnellsten und die k-2 schnellsten Zustände,
- - für k=5 die k schnellsten, die k-1 schnellsten, die k-2 und die k-3 schnellsten Zustände
bestimmt werden.
-
Diese Mimik kann entsprechend für k>5 fortgesetzt werden. Es werden also bspw. für k=8 die 8, 7, 6, 5, 4, 3, 2 schnellsten Zustände bestimmt. Hieraus kann abgeleitet werden, welche die ersten beiden Zustände waren, welcher Zustand der drittschnellste war, usf.
-
Es ist eine Weiterbildung, dass die k schnellsten und die k-1 schnellsten Zustände bestimmt werden.
-
Alternativ kann es ausreichen, nur die k schnellsten und die k-1 schnellsten Zustände zu kennen, so dass eindeutig bestimmt werden kann, welche mehreren Zustände zuletzt gemeinsam in ein Lesefenster gefallen sind.
-
Es ist eine Weiterbildung, dass die restlichen Zustände, die nicht zu den k schnellsten Zuständen gehören, entsprechend gesetzt werden.
-
Falls die schnellsten Zustände 0-Zustände sind, dann können nach der Bestimmung des k-ten 0-Zustands diejenigen Zustände, für die noch keine Zuordnung erfolgt ist, als 1-Zustände gesetzt werden.
-
Es ist eine Weiterbildung, dass die Fehlerverarbeitung eine Fehlererkennung und/oder Fehlerkorrektur umfasst.
-
Es ist eine Weiterbildung, dass das Verfahren von einer Verarbeitungseinheit ausgeführt wird, die funktional zwischen dem Speicher und der Fehlerverarbeitung, die mit einem Systembus gekoppelt ist, angeordnet ist.
-
Die Verarbeitungseinheit kann dabei Software, Hardware oder Mischformen (Firmware) umfassen.
-
Es ist eine Weiterbildung, dass der Speicher mindestens einen der folgenden Speicher umfasst:
- - Floating-Gate-Zellen;
- - PCRAM,
- - RRAM,
- - MRAM,
- - MONOS-Bauelemente,
- - Nano-Kristall-Zellen,
- - ROM.
-
Auch wird eine Vorrichtung vorgeschlagen zur Kompensation eines Lesefehlers, die eine Verarbeitungseinheit umfasst, die eingerichtet ist zur Durchführung eines Verfahrens nach einem der vorhergehenden Ansprüche.
-
Die Vorrichtung kann in einer Komponente oder verteilt in mehreren Komponenten ausgeführt sein. Auch kann die Verarbeitungseinheit die Fehlerverarbeitung umfassen oder separat zu dieser ausgeführt sein. Der Speicher kann Teil der Vorrichtung oder separat zu dieser ausgeführt sein.
-
Die hier genannte Verarbeitungseinheit kann insbesondere als eine Prozessoreinheit und/oder eine zumindest teilweise festverdrahtete oder logische Schaltungsanordnung ausgeführt sein, die beispielsweise derart eingerichtet ist, dass das Verfahren wie hierin beschrieben durchführbar ist. Besagte Verarbeitungseinheit kann jede Art von Prozessor oder Rechner oder Computer mit entsprechend notwendiger Peripherie (Speicher, Input/Output-Schnittstellen, Ein-Ausgabe-Geräte, etc.) sein oder umfassen.
-
Die vorstehenden Erläuterungen betreffend das Verfahren gelten für die Vorrichtung entsprechend.
-
Auch wird die oben genannte Aufgabe gelöst mittels eines Systems umfassend mindestens eine der hier beschriebenen Vorrichtungen.
-
Ferner wird ein System angegeben umfassend mindestens eine der hier beschriebenen Vorrichtungen.
-
Auch wird eine Vorrichtung angeben zur Kompensation eines Lesefehlers umfassend
- - Mittel zum Lesen von je n Zuständen aus Speicherzellen eines Speichers, wobei die Zustände in einer Zeitdomäne bestimmt werden,
- - falls die n Zustände kein Codewort eines k-aus-n-Codes bilden, Mittel zum Versehen mehrerer Zustände aus den n Zuständen, die innerhalb eines Lesefensters bestimmt wurden, mit einer ersten gültigen Belegung und zum Zuführen an eine Fehlerverarbeitung,
- - falls die Fehlerverarbeitung keinen Fehler angibt, Mittel zum Weiterverarbeiten der n Zustände mit der ersten gültigen Belegung,
- - falls die Fehlerverarbeitung einen Fehler angibt, Mittel zum Versehen der mehreren Zustände, die innerhalb des Lesefensters bestimmt wurden, mit einer zweiten gültigen Belegung und zum Weiterverarbeiten der n Zustände mit der zweiten gültigen Belegung.
-
Die hier vorgestellte Lösung umfasst ferner ein Computerprogrammprodukt, das direkt in einen Speicher eines digitalen Computers ladbar ist, umfassend Programmcodeteile, die dazu geeignet sind, Schritte des hier beschriebenen Verfahrens durchzuführen.
-
Weiterhin wird das oben genannte Problem gelöst mittels eines computerlesbaren Speichermediums, z.B. eines beliebigen Speichers, umfassend von einem Computer ausführbare Anweisungen (z.B. in Form von Programmcode), die dazu geeignet sind, dass der Computer Schritte des hier beschriebenen Verfahrens durchführt.
-
Die oben beschriebenen Eigenschaften, Merkmale und Vorteile sowie die Art und Weise, wie diese erreicht werden, werden weiter ausgeführt im Zusammenhang mit der folgenden schematischen Beschreibung von Ausführungsbeispielen, die im Zusammenhang mit den Zeichnungen näher erläutert werden. Dabei können zur Übersichtlichkeit gleiche oder gleichwirkende Elemente mit gleichen Bezugszeichen versehen sein.
-
Es zeigen:
- 1 ein beispielhaftes Diagramm umfassend zwei (Häufigkeits-)Verteilungen für Zellwiderstände von Speicherzellen;
- 2 eine Tabelle, die veranschaulicht, wie anhand von 6 Speicherzellen Cell0 bis Cell5 20 unterschiedliche Zustände dargestellt werden;
- 3A ein beispielhaftes Diagramm basierend auf 1, wobei im Unterschied zu 1 Widerstandswerte Rcell von insgesamt 6 Speicherzellen eingezeichnet sind, wobei 3 Speicherzellen einen niederohmigen Zustand (LRS) und 3 Speicherzellen einen hochohmigen Zustand (HRS) aufweisen;
- 3B ein beispielhaftes Diagramm basierend auf 3A nach einer Transformation in den Zeitbereich;
- 4 ein Diagramm, das beispielhaft die zeitliche Messung der Zustände „0“ und „1“ aus Speicherzellen veranschaulicht;
- 5 basierend auf 4 einen Fall, bei dem bei der zeitlichen Messung die Zustände von zwei Speicherzellen innerhalb eines Lesefensters auftreten;
- 6 eine beispielhafte Logikschaltung zur Bestimmung der drei schnellsten 0-Zustände;
- 7 eine Wahrheitstabelle mit den 20 möglichen Codewörtern des 3-aus-6-Codes;
- 8 eine beispielhafte Schaltungsanordnung zur Implementierung der in 6 gezeigten Logikschaltung;
- 9 eine beispielhafte Schaltung zur Detektion von vier 0-Zuständen;
- 10 eine beispielhafte Systemimplementierung für ein MRAM;
- 1 1 ein schematisches Ablaufdiagramm, das beispielhaft Schritte zur Durchführung einer hier beschriebenen Kompensation eines Lesefehlers veranschaulicht.
-
Der Einsatz neuer Speichertechnologien wie MRAM, RRAM oder PCRAM eröffnet Kostenvorteile und verbessert die Kompatibilität in Bezug auf den CMOS-Herstellungsprozess.
-
Allerdings ist es eine Herausforderung mit kleinen Lesefenstern zwischen den einzelnen Zuständen, z.B. zwischen 0-Zuständen und 1-Zuständen, zurecht zu kommen.
-
1 zeigt ein beispielhaftes Diagramm umfassend zwei (Häufigkeits-)Verteilungen 101 und 102 für Zellwiderstände von Speicherzellen, zwischen denen ein Lesefenster 103 verortet ist. Die Verteilung 101 zeigt beispielsweise einen hochohmigen Zustand (HRS, „High Resistive State“) und die Verteilung 102 zeigt entsprechend beispielhaft einen niederohmigen Zustand (LRS, „Low Resistive State“). Das Lesefenster 103 ist um einen Referenzwert Rref angeordnet.
-
Eine Platzierung des Referenzwerts Rref zur Separierung der beiden Verteilungen 101 und 102 ist im Hinblick auf eine hohe Verlässlichkeit und Robustheit der Unterscheidung der Zustände der Verteilungen 101 und 102 problematisch. Zusätzlich wird die eindeutige Unterscheidung zwischen HRS und LSR dadurch erschwert, dass der Speicher durch Alterung und/oder unter Temperatureinflüssen seine Eigenschaften verändert: Beispielsweise kann sich dadurch Größe und/oder Position des Lesefensters 103 ändern. Auch ist es dadurch möglich, dass sie die Verteilungen 101 und 102 annähern bzw. sogar überlappen.
-
Zur Linderung dieses Problems können komplementäre Speicherzellen verwendet werden. Beispielsweise können zwei oder mehrere komplementäre Speicherzellen verwendet werden. Bei komplementären Speicherzellen wird ein Datenbit durch (mindestens) zwei physikalische Speicherzellen repräsentiert, die im fehlerfreien Fall komplementäre Zustände aufweisen. Werden beispielsweise zwei komplementäre Speicherzellen A1 und A2 verwendet, um ein logisches Datenbit darzustellen, so kann folgendes gelten:
- - Ein logischer Wert „0“ liegt dann vor, wenn für die komplementären Speicherzellen A1 und A2 gilt: A1=0 und A2=1.
- - Ein logischer Wert „1“ liegt dann vor, wenn für die komplementären Speicherzellen A1 und A2 gilt: A1=1 und A2=0.
-
Im fehlerfreien Fall weisen die beiden Speicherzellen A1 und A2 somit stets komplementäre Werte auf: Trägt die Speicherzelle A1 den Wert 0, so trägt die Speicherzelle A2 den Wert 1 und umgekehrt.
-
Komplementäre Speicherzellen können z.B. für beliebige k-aus-n-Codes verwendet werden. Das hier erläuterte Ausführungsbeispiel beschreibt eine beispielhafte Umsetzung basierend auf einem 3-aus-6-Code. Ein Codewort des 3-aus-6-Codes hat 6 Bit (Zustände), von denen immer 3 entweder den Wert 0 oder den Wert 1 und die verbleibenden 3 Speicherzellen dann den dazu komplementären Wert aufweisen.
-
Beispielsweise können 6 physikalische Speicherzellen vorgesehen sein, die mittels eines komplementären Ansatzes genutzt werden, um z.B. 4 Bit zu kodieren.
-
2 zeigt eine Tabelle, die veranschaulicht, wie anhand von 6 Speicherzellen Cell0 bis Cell5 20 unterschiedliche Zustände dargestellt werden. Jede der Speicherzellen kann einen hochohmigen Zustand (HRS) oder einen niederohmigen Zustand (LRS) annehmen. Jeder der Zustände entspricht einer Wertebelegung dieser 6 Speicherzellen Cell0 bis Cell5 und auch einem Codewort des 3-aus-6-Codes.
-
Es gilt allgemein für einen k-aus-n-Code, dass es
Codewörter gibt, die jeweils k erste Werte und (n-k) zweite Werte aufweisen. Es gilt
und somit für den 3-aus-6-Code
-
Somit gibt es bei dem 3-aus-6-Code insgesamt 20 Codewörter bei dem drei Bit einen ersten Wert und die anderen drei Bit einen zweiten Wert aufweisen. Diese Codewörter können genutzt werden, um z.B. 24 = 16 Zustände abzubilden (also 4 Bit zu codieren), wobei 4 der 20 Codewörter hierfür ungenutzt bleiben.
-
3A zeigt ein beispielhaftes Diagramm basierend auf 1, wobei im Unterschied zu 1 Widerstandswerte Rcell von insgesamt 6 Speicherzellen eingezeichnet sind, wobei 3 Speicherzellen einen niederohmigen Zustand (LRS) und 3 Speicherzellen einen hochohmigen Zustand (HRS) aufweisen. Wie auch in 1 zeigt die Abszisse den Widerstandswert Rcell der jeweiligen Zelle.
-
3B zeigt ein beispielhaftes Diagramm basierend auf 3A, wobei im Unterschied zu 3A nach einer Transformation in den Zeitbereich die Abszisse eine Zeit tcell darstellt. Die Bestimmung der einzelnen Zustände der Speicherzellen kann demnach zeitabhängig erfolgen.
-
Beispielsweise kann der 0-Zustand (z.B. der LRS) schneller gemessen werden als der 1-Zustand (z.B. der HRS): Wenn also gemäß dem obigen Beispiel des 3-aus-6-Codes dreimal der 0-Zustand bestimmt wurde, dann steht (bei einer fehlerfreien Messung) bereits bei Bestimmung des dritten 0-Zustands fest, dass die verbleibenden drei noch nicht bestimmten Zustände 1-Zustände sein müssen. Somit kann das Codewort bereits vorzeitig bestimmt werden, sobald lediglich die drei schnelleren 0-Zustände bestimmt wurden. Auf das Eintreffen der langsameren 1-Zustände muss nicht gewartet werden.
-
Es sei angemerkt, dass hierbei beispielhaft davon ausgegangen wird, dass die 0-Zustände im Mittel vor den 1-Zuständen bestimmt werden können. Grundsätzlich reicht es aus, wenn ein erster Zustand schneller als ein zweiter Zustand bestimmt werden kann.
-
Eine beispielhafte Ausführungsform zur Bestimmung von drei schnellsten 0-Zuständen ist beispielsweise in
US 9,805,771 B2 beschrieben. Dort ist auch im Detail beschrieben, wie ausgehend von einem von einer Logik bestimmten Haltesignal eine Vielzahl von Latches (z.B. kann ein Latch als ein D-Flip-Flop realisiert sein, siehe z.B. https://de.wikipedia.org/wiki/Latch) angehalten bzw. der Zustand dieser Latches eingefroren wird. Dieser Mechanismus des Einfrierens der Latches kann auch für die vorliegende Implementierung realisiert werden.
-
4 zeigt ein Diagramm, das beispielhaft die zeitliche Messung der Zustände „0“ und „1“ veranschaulicht. Jede der Speicherzellen 401 bis 406 repräsentiert einen dieser beiden Zustände. In dem in 4 gezeigten Beispiel gilt beispielhaft die folgende Belegung der Speicherzellen:
- - Speicherzelle 401: Zustand „1“,
- - Speicherzelle 402: Zustand „0“,
- - Speicherzelle 403: Zustand „1“,
- - Speicherzelle 404: Zustand „0“,
- - Speicherzelle 405: Zustand „0“,
- - Speicherzelle 406: Zustand „1“.
-
Wie bereits ausgeführt wurde, entspricht der 0-Zustand beispielsweise einem geringen Widerstandswert (LRS) gemäß der Verteilung 102 und der 1-Zustand entspricht dann einem hohen Widerstandswert (HRS) gemäß der Verteilung 101. Durch die Transformation in den Zeitbereich ergibt sich, dass der LRS „0“ früher bestimmt werden kann als der HRS „1“.
-
Eine Speicherzelle im 0-Zustand (mit dem Wert 0) hat einen niedrigeren Widerstandswert als eine Speicherzelle im 1-Zustand (mit dem Wert 1), daher fließt durch die Speicherzelle mit dem Wert 0 ein höherer Strom. Wird dieser Strom über die Zeit mittels einer Kapazität integriert, ergibt sich eine Spannung. Diese Spannung steigt mit der Zeit steiler an und erreicht einen vorgegebenen Schwellwert deutlich früher als wenn die Speicherzelle den Wert 1 hätte und entsprechend hochohmiger wäre (und somit ein geringerer Strom fließen würde). Hieraus folgt, dass Speicherzellen mit dem Wert 0 zeitlich früher bestimmt werden können also Speicherzellen mit dem Wert 1.
-
Die in 4 gewählte Darstellung verwendet in diesem Sinne die Analogie eines Rennens, wobei die Speicherzelle mit dem geringsten Widerstand (und damit dem größten Gradienten des integrierten Stroms über die Zeit) am schnellsten ein Ziel 407 erreicht.
-
Entsprechend beginnt zu einem Zeitpunkt t=t0 („Start“) die Messung und zu einem Zeitpunkt t=t1 („Ziel“) konnten bereits die ersten drei 0-Zustände für die Speicherzellen 404, 402 und 405 bestimmt werden. Die anderen Speicherzellen 401,403 und 406 haben noch nicht das Ziel, d.h. noch nicht den Spannungsschwellwert mittels der beschriebenen Integration, erreicht.
-
Bei der Messung ist bekannt, in welcher zeitlichen Abfolge die Speicherzellen das Ziel (also den Schwellwert bei der Integration des Stroms) erreicht haben; vorliegend sind das: zuerst die Speicherzelle 404, dann die Speicherzelle 402 und zuletzt die Speicherzelle 405.
-
In dem vorliegenden Beispiel des 3-aus-6-Codes weisen genau 3 der 6 Speicherzellen den 0-Zustand und die verbleibenden drei Speicherzellen den 1-Zustand auf. Da der 0-Zustand früher festgestellt werden kann als der 1-Zustand, kann die Messung beendet werden, sobald der dritte (und damit letzte) 0-Zustand bestimmt werden konnte. Dies gilt unter der Voraussetzung, dass die 0-Zustände tatsächlich früher als die 1-Zustände bestimmt werden können.
-
Somit unterteilt das Ziel 407 die möglichen Zustände der Speicherzellen 401 bis 406 in zwei Bereiche, einen Bereich 408 für die 1-Zustände und in einen Bereich 409 für die 0-Zustände. Es würde also deutlich mehr Zeit benötigt, bis die Speicherzellen mit dem 1-Zustand den vorgegebenen Spannungsschwellwert erreichen. Diese Speicherzellen (in dem Beispiel von 4 die Speicherzellen 401, 403 und 406) haben also das Ziel 407 zum Zeitpunkt ti, zu dem bereits drei 0-Zustände bestimmt werden konnten, noch nicht erreicht. An diesem Zeitpunkt ti konnte der dritte 0-Zustand bestimmt werden. Dies ist auch der Zeitpunkt, zu dem die Messung beendet werden kann und zu dem die Zustände an den Messverstärkern, die mit den Speicherzellen verbunden sind, eingefroren werden können. In dem vorliegenden Beispiel liegen nach dem Einfrieren drei 0-Zustände für die Speicherzellen 404, 402 und 405 vor. Die verbleibenden drei Zustände für die Speicherzellen 401, 403 und 406 jeweils auf 1 gesetzt.
-
Zusammenfassend kann also das Codewort bestimmt werden, sobald die ersten drei Zustände „0“ vorliegen. In dem in 4 gezeigten Beispiel kann das Codewort 101001 (LSB entspricht der Speicherzelle 406) zu der Zeit ti bestimmt werden.
-
5 zeigt aufbauend auf 4 einen Fall, bei dem für die beiden Speicherzellen 403 und 404 der 0-Zustand innerhalb eines Lesefensters 410 bestimmt wird, obwohl zuvor bereits die Speicherzellen 402 und 405 den 0-Zustand erreicht hatten. Damit erreichen die Speicherzellen 403 und 404 zusammen in dem (zeitlichen) Lesefenster 410 den 0-Zustand, obwohl tatsächlich die Speicherzelle 403 den schnellsten 1-Zustand und die Speicherzelle 404 den langsamsten 0-Zustand bereitstellt.
-
Damit liegt zunächst viermal der 0-Zustand vor. Dies ist jedoch kein Codewort des 3-aus-6-Codes. Diese vom Erwartungswert (3 Einsen und 3 Nullen) abweichende Konstellation kann auch als Gruppenfehlersignal für nachgelagerte Fehlererkennungsverfahren verwendet werden.
-
Die Reihenfolge des Eintreffens der schnellsten Zustände kann nur bestimmt werden, wenn zwischen aufeinanderfolgend eintreffenden Zuständen ein gewisser zeitlicher Mindestabstand liegt. In 5 ist das Lesefenster 410 kleiner als der nötige Mindestabstand.
-
Somit kommt es zunächst zu einem Fehler, der leicht erkannt werden kann, weil 6 Bit mit vier 0-Zuständen kein Codewort des 3-aus-6-Codes darstellen können.
-
Aufgrund der hier beschriebenen Messung in der Zeitdomäne ergibt sich, dass die Zustände der Speicherzellen in einer bestimmten zeitlichen Abfolge auftreten. Dies gilt insbesondere für die 0-Zustände, die im fehlerfreien Fall schneller (früher) auftreten als die 1-Zustände. Die zeitliche Abfolge des Auftretens der 0-Zustände kann genutzt werden, um zu bestimmen, welche Speicherzellen den Fehler verursacht haben.
-
Beispielsweise ist es mittels einer Logik(schaltung), die die zwei schnellsten 0-Zustände detektiert, möglich, die beiden 0-Zustände der Speicherzellen 402 und 405 zu bestimmen. Daraus folgt, dass die Speicherzellen 403 und 404, die die verbleibenden zwei 0-Zustände aufweisen, zusammen innerhalb des Lesefensters 410 eingetroffen sein müssen.
-
Grundsätzlich ist es möglich, dass die Reihenfolge der eingetroffenen 0-Zustände bestimmt werden kann, indem je eine Logik vorgesehen wird, die die schnellsten (k-1)-Zustände detektiert (wobei k>1 gilt). Dann ist es möglich, dass die beiden schnellsten, usf. bis zu den k schnellsten 0-Zustände bestimmt werden können und somit bekannt wird, welche beiden 0-Zustände gemeinsam ggf. unzulässig in einem Lesefenster eingetroffen sind.
-
Im Beispiel des 3-aus-6-Codes können beispielsweise die 2 schnellsten 0-Zustände und die 3 schnellsten 0-Zustände bestimmt werden. Dies kann z.B. parallel mit zwei Logikschaltungen erfolgen.
-
Im Beispiel des 4-aus-8-Codes können beispielsweise die 2 schnellsten 0-Zustände, die 3 schnellsten 0-Zustände und die 4 schnellsten 0-Zustände bestimmt werden. Dies kann z.B. parallel mit drei Logikschaltungen erfolgen.
-
In dem hier beschriebenen Beispiel kann somit bestimmt werden, dass die Speicherzellen 403 und 404 zuletzt gemeinsam in das Lesefenster 410 gefallen sind und der Fehler darin besteht, dass einer der beiden Speicherzellen fehlerhaft der 0-Zustand zugeordnet wurde. Somit können nun die Zustände der innerhalb des Lesefensters 410 bestimmten Speicherzellen 403 und 404 modifiziert und mittels einer nachgeschalteten Fehlerverarbeitung überprüft werden.
-
Gemäß der in 5 gezeigten Darstellung gibt es die folgenden Möglichkeiten (Reihenfolge der Zustände gemäß den Speicherzellen 401 bis 406), wobei exemplarisch davon ausgegangen wird, dass 101001 (LSB wird von der Speicherzelle 406 bereitgestellt) das eigentlich korrekte Codewort ist:
- - 101001: korrekte Zuordnung der Zustände;
- - 100001: hierbei handelt es sich offensichtlich um einen Fehler, da dies kein Codewort eines 3-aus-6-Codes ist (es gibt 4 statt 3 Nullen);
- - 100101: fehlerhafte Zuordnung der Zustände; auch hierbei handelt es sich um ein Codewort des 3-aus-6-Codes.
-
Da die Speicherzellen 403 und 404 innerhalb des Lesefensters 410 eintreffen, könnte zunächst sowohl das Codewort 101001 als auch das Codewort 100101 korrekt sein.
-
Anhand der nachgeschalteten Fehlerverarbeitung, die beispielsweise als Schaltung oder als ein funktionaler Block einer Schaltung oder als Software ausgeführt sein kann, wird ermittelt, welches der Codewörter das richtige Codewort ist.
-
Hierzu kann beispielsweise eines der beiden Codewörter (oder beide Codewörter) der Fehlerverarbeitung zugeführt werden; liefert die Fehlerverarbeitung einen Fehler, so handelt es sich um das falsche Codewort, andernfalls um das richtige Codewort. Effizient kann eines der beiden Codewörter der Fehlerverarbeitung zugeführt werden. Wenn kein Fehler auftritt, war es das richtige Codewort und wird entsprechend weiter verarbeitet. Zeigt die Fehlerverarbeitung einen Fehler an, so wird das andere der beiden Codewörter als das richtige Codewort zur weiteren Verarbeitung eingesetzt.
-
Die Fehlerverarbeitung kann eine Fehlererkennung und/oder Fehlerkorrektur umfassen.
-
Es ist auch eine Option, aus dem fehlerhaften Wort 100001 parallel (also zumindest teilweise zeitgleich) die beiden Codewörter 101001 und 100101 zu bilden und mit Hilfe der nachgeschalteten Fehlerverarbeitung das Codewort 101001 als korrektes Codewort zu verifizieren.
-
Es ist eine weitere Option, nachdem das fehlerhafte Wort 100001 bestimmt wurde, die einzelnen Bitpositionen, die den Wert 0 aufweisen, der Reihe nach in den Wert 1 zu invertieren und so die Codewörter 110001, 101001, 100101 und 100011 zu bilden. Anhand der Fehlerverarbeitung kann dann das Codewort 101001 als das richtige Codewort verifiziert werden. Die Verarbeitung kann dabei sequentiell und/oder parallel durchgeführt werden.
-
Zur Bestimmung des gültigen Codewortes kann eine Fehlerbehandlung beispielsweise unter Verwendung einer Fehlererkennung erfolgen. Die Fehlerbehandlung kann in Hardware, in Software oder teilweise in Hardware und teilweise in Software erfolgen. Die Fehlerbehandlung zur Bestimmung eines gültigen Codewortes kann beispielsweise unter Verwendung eines Fehlercodes erfolgen, wobei der Fehlercode ein fehlererkennender Code oder ein fehlererkennender und fehlerkorrigierender Code sein kann.
-
Beispielsweise kann der Fehlercode Prüfbits aufweisen, die aus Bits verschiedener Gruppen aus n Bits gebildet sind.
-
Es ist beispielsweise eine Option, unter Verwendung eines Bergercodes Prüfbits zu bilden, wobei die Datenbits des Berger-Codes die jeweils n Bits der verschiedenen Bitgruppen sind. Dabei kann ausgenutzt werden, dass fehlerhafte Bitgruppen mehr Nullen als die fehlerfreien Bitgruppen aufweisen und damit alle derartigen Fehler von dem Berger Code erkannt werden.
-
Es ist eine Option, die Fehlerbehandlung auf den Bits oder den Bitgruppen aus 4 Bits vorzunehmen, die in die Codewörter des 3-aus-6-Codes transformiert werden oder in die die Codewörter des 3-aus-6-Codes zurück transformiert werden, nachdem sie aus dem Speicher unter Verwendung einer beispielsweise zeitlichen Reihenfolge ausgelesen worden sind.
-
11 zeigt ein schematisches Ablaufdiagramm, das beispielhaft Schritte zur Durchführung einer hier beschriebenen Kompensation eines Lesefehlers veranschaulicht.
-
In einem Schritt 1101 werden beim Lesen von sechs Speicherzellen die drei schnellsten 0-Zustände detektiert. Sobald diese vorliegen, werden in einem Schritt 1102 die zu diesem Zeitpunkt gelesenen Zustände eingefroren. Die eingefrorenen Zustände zeigen mindestens drei 0-Zustände (den verbleibenden Speicherzellen werden beispielsweise bereits jetzt 1-Zustände zugeordnet).
-
In einem Schritt 1103 wird geprüft, ob mehr als drei 0-Zustände vorliegt, was einem Lesefehler entspräche. Falls dies nicht so ist, wird in einem Schritt 1104 das gelesene Codewort weiterverarbeitet. Falls noch nicht geschehen, können jetzt auch den anderen drei Speicherzellen 1-Zustände zugeordnet werden.
-
Falls ein Lesefehler vorliegt, wird in einem Schritt 1105 bestimmt, welche Positionen in der Gruppe der sechs Bit von dem Lesefehler betroffen sind, d.h. welche beiden Zustände gemeinsam in einem Lesefenster eingetroffen sind. In dem Beispiel gemäß 5 entspricht das den beiden Speicherzellen 403 und 404, die gemeinsam in das Lesefenster 410 fallen. Durch eine Detektion der zwei schnellsten 0-Zustände ist es möglich, die ersten beiden 0-Zustände der Speicherzellen 405 und 402 zu detektieren, so dass nurmehr die beiden Speicherzellen 403 und 404 als mögliche Ursache für den Lesefehler in Frage kommen. Somit wird weiterhin in dem Schritt 1105 der erste der beiden Zustände auf 1 gesetzt (der zweite Zustand bleibt auf 0) und das sich hieraus ergebende Codewort der Fehlerverarbeitung zugeführt.
-
In einem Schritt 1106 wird geprüft ob die Fehlerverarbeitung das Codewort akzeptiert. Falls dies der Fall ist, wird in einem Schritt 1107 dieses Codewort weiter verwendet.
-
Falls die Fehlerverarbeitung in dem Schritt 1106 jedoch einen Fehler anzeigt, wird in einem Schritt 1108 der zweite der beiden Zustände auf 1 gesetzt (der erste Zustand ist dann 0) und die weitere Verarbeitung mit diesem Codewort fortgesetzt. Optional könnte dieses Codewort nochmals mittels der Fehlerverarbeitung geprüft werden.
-
Insbesondere kann zur Überprüfung mittels Fehlerkorrektur ein gesonderter Zeitschlitz vorgesehen sein. Auch ist es eine Option, dass das Probieren des Schritts 1105 zumindest teilweise zeitgleich erfolgt, um die Verarbeitungszeit zu reduzieren.
-
Vorzugsweise beurteilt die Fehlerverarbeitung also, ob für eine Gruppe von Bit ein Fehler vorliegt. In dem hier gezeigten Beispiel umfasst die Gruppe von Bit insgesamt 6 Bit. Allgemein kann die Gruppe von Bit auch als ein Byte bezeichnet werden, wobei das Byte mindestens zwei Bit umfasst.
-
Damit ist es möglich, mittels der Fehlerverarbeitung für die Gruppe von Bit das korrekte Codewort zu verifizieren. Werden beispielsweise Codewörter verwendet, die jeweils n Bit umfassen, so kann die Fehlerverarbeitung für jede Gruppe von n Bit bestimmen, ob ein Fehler vorliegt oder nicht.
-
Somit ist es möglich, dass eine in der Zeitdomäne durchgeführte Detektion (Sensing) von Bit effizient durchgeführt werden kann, selbst wenn ein Teil der Bit der Gruppe von Bit gemeinsam in das Lesefenster 410 fällt.
-
Alternativ ist es auch möglich in dem Schritt 1105 die zuletzt eingegangenen Zustände sowohl auf 01 als auch auf 10 zu setzen und die restlichen Zustände unverändert zu belassen und die so bestimmten Codewörter des 3-aus-6 Codes der Fehlerverarbeitung zuzuführen und das Codewort des 3-aus-6 Codes weiterzuarbeiten, für das kein Fehler angezeigt wird.
-
6 zeigt eine beispielhafte Logikschaltung zur Bestimmung der drei schnellsten 0-Zustände mittels eines Ausgangssignals 601, das basierend auf den sechs Zuständen S0 bis S5. Hierbei wird jeder Zustand als ein Signal für eine Speicherzelle von einem Messverstärker (Sense-Amplifier) bereitgestellt. Demnach entsprechend die Zustände S0 bis S5 Signalen (0 oder 1) der 6 Speicherzellen.
-
Die Zustände S0 bis S5 werden in Form binärer Werte bereitgestellt.
-
Bei dem 3-aus-6-Code kann nach Eintreffen des dritten 0-Zustands gefolgert werden, dass die verbleibenden Zustände 1 sein müssen. Diesem Beispiel folgend, zeigt die Schaltung gemäß 6 eine Logik zur Detektion der drei schnellsten Bit, die - wie oben ausgeführt wurde - 0-Zustände sind (also den Wert 0 aufweisen). Wenn also das Ausgangssignal 601 den Wert 1 hat, zeigt dies an, dass an den Ausgängen der Messverstärker dreimal der Wert 0 erkannt wurde.
-
Hierzu verwendet die Schaltung gemäß 6 beispielhaft NICHT-ODER-Gatter. Am Eingang sind eine Vielzahl von NICHT-ODER-Gattern vorgesehen, deren jedes drei Eingänge und einen Ausgang aufweist. Für jedes Codewort weisen immer drei der 6 Zustände S0 bis S5 den Wert 0 auf, die möglichen Codewörter liefern also 20 Kombinationen bei denen genau drei der Zustände S0 bis S5 gleich 0 sind. Diese Kombinationen entsprechend den Belegungen der Eingänge der insgesamt 20 NICHT-ODER-Gatter 602 bis 605 (der Übersicht halber sind nicht alle 20 NICHT-ODER-Gatter eingezeichnet, sondern nur eine Auswahl aus vier NICHT-ODER-Gattern).
-
7 zeigt beispielshaft eine entsprechende Wahrheitstabelle. Die Zeilen 1 bis 20 stellen mögliche Codewörter des 3-aus-6-Codes dar: Es gibt 20 Möglichkeiten für die Zustände S0 bis S5 dreimal den Wert „0“ und dreimal den Wert „1“ anzunehmen. Beispielsweise können die Zeilen 1 bis 16 (also 16 mögliche Codewörter der 3-aus-6-Codes) genutzt werden, um 16 mögliche Zustände, die mit vier Bit (24=8) codierbar sind, darzustellen. Die dann verbleibenden 4 Codewörter der Zeilen 17 bis 20 sind dann ungenutzt, sind also Codewörter des 3-aus-6-Codes, die aber für die Codierung der 16 Zustände nicht gültig sind bzw. nicht verwendet werden. Alternativ ist es auch möglich, andere 16 Codewörter aus den 20 möglichen Codewörtern als die in der Tabelle gezeigten ersten 16 Codewörter zu nutzen. Diese „ungenutzten“ Codewörter können anderweitig genutzt werden. Beispielsweise können hiermit bestimmte Daten invalidiert (d.h. als ungültig markiert) werden.
-
Für jede Belegung mit 0-Zuständen der 20 in 7 gezeigten Zeilen kann eines der oben genannten NICHT-ODER-Gatter 602 bis 605 verwendet werden. So ist je ein NICHT-ODER-Gatter mit den 0-Zuständen einer Zeile verbunden.
-
So sind beispielhaft die Eingänge des NICHT-ODER-Gatters 602 mit den Zuständen S0, S1 und S2 verbunden. Dies entspricht Zeile 1 der in 7 gezeigten Tabelle, wonach die Zustände S0, S1 und S2 den Wert 0 haben. Entsprechend sind die Eingänge des NICHT-ODER-Gatters 603 mit den Zuständen S0, S1 und S3 verbunden. Dies entspricht Zeile 2 der in 7 gezeigten Tabelle, wonach die Zustände S0, S1 und S3 den Wert 0 haben.
-
Entsprechend sind die weiteren NICHT-ODER-Gatter mit den Signalen der Zustände S0 bis S5 verbunden.
-
Schließlich sind die Eingänge des NICHT-ODER-Gatters 604 mit den Zuständen S2, S4 und S5 verbunden. Dies entspricht Zeile 19 der in 7 gezeigten Tabelle, wonach die Zustände S2, S4 und S5 den Wert 0 haben. Die Eingänge des NICHT-ODER-Gatters 605 sind mit den Zuständen S3, S4 und S5 verbunden. Dies entspricht der Zeile 20 der in 7 gezeigten Tabelle, wonach die Zustände S3, S4 und S5 den Wert 0 haben.
-
Somit liefert jedes dieser NICHT-ODER-Gatter 602 bis 605 an seinem Ausgang den Wert 1 nur dann, wenn alle seine Eingänge den Wert 0 aufweisen.
-
Die sich anschließende beispielhafte Implementierung umfassend fünf NICHT-ODER-Gatter 606 bis 607 (mit jeweils vier Eingängen) und ein NICHT-UND-Gatter 608 (mit fünf Eingängen) entspricht einer ODER-Verknüpfung der Ausgänge aller NICHT-ODER-Gatter 602 bis 605 zu dem Ausgangssignal 601.
-
So ist in 6 beispielsweise jeder Ausgang eines der NICHT-ODER-Gatter 602 bis 605 mit einem Eingang eines der nachfolgenden NICHT-ODER-Gatter 606 bis 607 verbunden. Die Ausgänge der NICHT-ODER-Gatter 606 bis 607 sind mit den Eingängen des NICHT-UND-Gatters 608 verbunden.
-
Das Ausgangssignal 601 hat nur dann den Wert 1, wenn drei schnellste Bit erkannt wurden. Wurden keine drei schnellsten Bit erkannt, so sind die Ausgangssignale der NICHT-ODER-Gatter 602 bis 605 alle 0, die Ausgänge der NICHT-ODER-Gatter 606 bis 607 sind alle 1 und das Ausgangssignal 601 hat den Wert 0. Sobald aber an drei der sechs möglichen Zustände S0 bis S5 der Wert 0 anliegt, schaltet das NICHT-ODER-Gatter 602 bis 605, das diese Kombination an seinen Eingängen abbildet, an seinem Ausgang von 0 auf 1, damit schalten auch die Ausgänge der NICHT-ODER-Gatter 606 bis 607 von 1 auf 0 und das Ausgangssignal 601 kippt von 0 auf 1.
-
Allgemein kann die Erkennung der m schnellsten 0-Zustände mit einer Schaltung erkannt werden, die in einer ersten Ebene eine der Anzahl von NICHT-ODER-Gattern aufweist, die den m-aus-n möglichen Kombinationen entspricht. Jedes der NICHT-ODER-Gatter hat dabei m Eingänge und jedes der NICHT-ODER-Gatter bildet an seinen Eingängen eine der m-aus-n möglichen Kombinationen ab, bei denen m 0-Zustände auftreten können. Die Ausgänge der NICHT-ODER-Gatter werden dann logisch ODER-verknüpft zu einem Ausgangssignal. Beispielsweise kann diese logische ODER-Verknüpfung durch eine zweistufige Verwendung von NICHT-ODER-Gattern und einem NICHT-UND-Gatter, wie in 6 gezeigt, realisiert werden. Das Ausgangsignal zeigt mit einem Wert 1 an, dass mindestens m 0-Zustände vorliegen. Ansonsten hat das Ausgangssignal den Wert 0.
-
Mehrere derartige Logikschaltungen können verwendet werden, um unterschiedliche Anzahlen mi, m2, etc. von 0-Zuständen zu bestimmen. Immer wenn das Ausgangssignal der jeweiligen Logikschaltung den Wert 1 hat, werden die 0-Zustände registriert. Somit ist es möglich zu bestimmen, welche 0-Zustände der Reihe nach auftreten.
-
8 zeigt eine beispielhafte Schaltungsanordnung, wobei in einem Block 801 die in 6 gezeigte Logikschaltung untergebracht sein kann. Beispielsweise kann in dem Block 801 jede Logikschaltung untergebracht sein, die eine Erkennung der m schnellsten 0-Zustände ermöglicht. 8 beschreibt, wie mittels einer derartigen Logikschaltung die zum Zeitpunkt des Auftretens der m schnellsten 0-Zustände diese Zustände eingefroren und somit registriert werden können.
-
Messverstärker SA0 bis SA5 liefern die Zustände S0 bis S5 der Speicherzellen. Diese Zustände werden über Latches 805 bis 810 (z.B. D-Flip-Flops) dem Block 801 zugeführt. In dem Block 801 werden die drei schnellsten 0-Zustände detektiert und über eine Verbindung 802 die Zustände der Latches 805 bis 810 eingefroren („gelatched“).
-
Sobald also das Ausgangssignal 601 der in 6 gezeigten Logikschaltung von 0 auf 1 umschaltet, wurden die schnellsten drei 0-Zustände detektiert und die Latches 805 bis 810 werden derart angehalten, dass sich die von ihnen bereitgestellten Ausgangssignale nicht mehr ändern. Zu diesem „eingefrorenen“ Zeitpunkt liegen also die drei schnellsten 0-Zustände an den Ausgängen der Latches 805 bis 810 an. An den Ausgängen der Latches 805 bis 810 können die Zustände in Form der Bit B0 bis B5 abgegriffen und weiterverarbeitet und/oder gespeichert werden.
-
Zwischen dem Zeitpunkt zu dem das Ausgangssignal 601 von 0 auf 1 umschaltet bis zu dem Zeitpunkt zu dem die Ausgänge der Latches 805 bis 810 eingefroren werden, vergeht eine Zeit Δt. Während dieser Zeit Δt können z.B. (siehe Ausführungen zu 5) zwei Speicherzellen in das Lesefenster 410 fallen und für es kann für diese beiden Speicherzellen der 0-Zustand vergeben werden.
-
Es ist eine Option insbesondere zu Einstellung des Zeitfensters, eine zusätzliche Verzögerung Δt* vorzusehen, so dass ggf. auch weitere Zustände in das Zeitfenster fallen. Dies ist insbesondere für das Erkennen von kritischen Zuständen hilfreich, die ggf. unter Normalbedingungen (noch) nicht sichtbar sind, aber durch eine kleine weitere ungünstige Verschiebung von Zellzuständen in der Gruppe zu einer fehlerhaften Detektion führen können.
-
Als Gegenmaßnahme kann eine Neuprogrammieren des Speichers (z.B. des RRAMs) erfolgen oder es kann bereits beim Testen des Speichers eine entsprechend redundante Auslegung für die defekte(n) Speicherzelle(n) vorgesehen werden. Dies ist insbesondere für Safety-Anwendung, z.B. ein Erkennen und Beheben von kritischen Situationen, bedeutend.
-
Optional: Fehlererkennung
-
9 zeigt eine beispielhafte Schaltung zur Detektion von mehr als drei 0-Zuständen in einer Gruppe von sechs Bit, hier Bit B0 bis B5. Ein solcher Gruppe von Bit, die vier 0-Zustände aufweist, ist kein gültiges Codewort des 3-aus-6-Codes.
-
Die Struktur der Schaltung ist vergleichbar mit der in 6 gezeigten Schaltung: Es werden alle möglichen 4-Bit-Kombinationen aus den sechs Bit B0 bis B5 jeweils an ein NICHT-ODER-Gatter mit vier Eingängen gelegt und die Ausgänge der NICHT-ODER-Gatter werden dann funktional ODER-verknüpft zu einem Ausgangssignal, das genau dann den Wert 1 ausgibt, wenn an den Eingängen eines der NICHT-ODER-Gatter viermal der Wert 0 anliegt, also wenn vier 0-Zustände in irgendeiner 4-Bit-Kombination der sechs Bit B0 bis B5 vorkommt.
-
Somit weist 9 eine Eingangsstufe mit (4-aus-6 =) 15 NICHT-ODER-Gattern 902 bis 904 auf, wobei jedes der NICHT-ODER-Gatter 902 bis 904 vier Eingänge und einen Ausgang aufweist.
-
An den Eingängen der NICHT-ODER-Gatter 902 bis 904 sind je vier verschiedene Bit aus B0 bis B5 verbunden. Es gibt insgesamt 15 mögliche Kombinationen die 6 Bit B0 bis B5 an die vier Eingänge der NICHT-ODER-Gatter 902 bis 904 anzulegen. Jede dieser Kombinationen ist einem eigenen NICHT-ODER-Gatter 902 bis 904 zugeordnet.
-
Wie vorstehend unter Bezugnahme auf 6 ausgeführt wurde, liegt an dem Ausgang eines der NICHT-ODER-Gatter 902 bis 904 nur dann der Wert 1 an, wenn alle Eingänge 0 sind. Treten also fehlerhaft vier Nullen in den sechs Bit B0 bis B5 auf, so erkennt dies das mindestens eine betroffene NICHT-ODER-Gatter 902 bis 904, sein Ausgang wechselt von 0 auf 1. Die Ausgänge der NICHT-ODER-Gatter 902 bis 904 sind logisch ODER-verknüpft, so dass ein Ausgangssignal 901 der in 9 gezeigten Schaltung dann auf 1 wechselt, wenn vier oder mehr Nullen in den sechs Bit B0 bis B5 aufgetreten sind.
-
Wie bereits zu 6 ausgeführt wurde, stellen drei NICHT-ODER-Gatter 905 bis 906 (der Übersicht halber sind nur zwei dargestellt) sowie ein NICHT-UND-Gatter 907 eine beispielhafte Realisierung einer ODER-Verknüpfung dar. In diesem Beispiel hat jedes der NICHT-ODER-Gatter 905 bis 906 fünf Eingänge und einen Ausgang, wobei je ein Eingang mit einem der Ausgänge der 15 NICHT-ODER-Gatter 902 bis 904 verbunden ist. Das NICHT-UND-Gatter 907 hat drei Eingänge und einen Ausgang, wobei ein Eingang mit einem Ausgang der NICHT-ODER-Gatter 905 bis 906 verbunden ist. An dem Ausgang des NICHT-UND-Gatters 907 wird das Ausgangssignal 901 bereitgestellt.
-
Die Realisierung der logischen ODER-Verknüpfung folgt im Übrigen auch durch einfache boolesche Umformung unter Anwendung der De Morganschen Gesetze sowie des Doppelnegationsgesetzes (siehe z.B.
https://de.wikipedia.org/wiki/Boolesche_Algebra).
-
Fehlererkennung für Gruppe von Bit
-
In dem vorstehend ausgeführten Beispiel umfasst die Gruppe eine Anzahl von sechs Bit, d.h. jedes Bit der Gruppe basierend auf einem Strom einer Speicherzelle, der mittels eines Messverstärkers detektiert wird. Die eingangs beschriebene Transformation in den Zeitbereich ermöglicht es eine zeitliche Abfolge des Eintreffens der Zustände, insbesondere der schnellen 0-Zustände, zu bestimmen. Somit kann ermittelt werden, ob z.B. die schnellsten zwei 0-Zustände, die schnellsten drei 0-Zustände, etc. eingetroffen sind. Bei dem 3-aus-6-Code wird beispielsweise bestimmt, ob die schnellsten drei 0-Zustände eingetroffen sind. Ist dies der Fall, so wird die Messung angehalten (z.B. mittels der beschriebenen Latches), so dass die Werte an den Ausgängen der Messverstärker abgegriffen werden können. Stellt sich nun heraus, dass nicht drei, sondern vier 0-Zustände detektiert wurden, handelt es sich offensichtlich um einen Fehler; beispielsweise ist dann der schnellste 1-Zustand zusammen mit dem langsamsten 0-Zustand in einem Lesefenster eingetroffen. Eine parallele Messung der beiden schnellsten 0-Zustände ermöglicht es, diese von den beiden Zuständen zu unterscheiden, die gemeinsam in dem Lesefenster bestimmt wurden. Damit ist es möglich, gezielt die beiden in dem Lesefenster bestimmten Zustände zu manipulieren und mittels einer Fehlerverarbeitung zu bestimmen, welche Zustandskombination für die beiden zuletzt eingetroffenen Zustände korrekt ist.
-
Vorteilhaft erfolgt somit auch die Fehlerverarbeitung basierend auf der Gruppe von Bit, so dass (gemäß dem vorliegenden Beispiel) immer pro sechs Bit eine Verarbeitung mittels der Messverstärker und eine anschließende Überprüfung und Kontrolle mittels der Fehlerverarbeitung durchgeführt werden kann.
-
Weiterhin ist es somit von Vorteil, dass eine Vielzahl von Bit in mehrere solcher Gruppen von bspw. 6 Bit unterteilt werden und für jede einzelne Gruppe von 6 Bit der oben beschriebene Mechanismus inklusive optionaler Fehlerverarbeitung zur Korrektur möglicherweise fehlerhaft zugeordneter 0-Zustände durchgeführt wird.
-
Hierbei sei angemerkt, dass hier beispielhaft die Gruppe von Bit eine Anzahl von 6 Bit aufweist. Entsprechend kann die Gruppe von Bit eine beliebige andere Anzahl von mehreren Bit aufweisen. Hat jede Gruppe von Bit eine Anzahl von n Bit, dann sind diese n Bit vorzugsweise Codewörter. Optional kann es sich um Codewörter eines k-aus-n-Codes handeln.
-
Beispielhafte Systemimplementierung: MRAM
-
10 zeigt eine beispielhafte Systemimplementierung für ein MRAM 1010 umfassend eine Vielzahl von Speicherzellen. Über Messverstärker 1011 werden die in den Speicherzellen gespeicherten Werte ausgelesen und anhand der hier beschriebenen Fehlerlogik 1012 erfolgt eine Zuordnung der Speicherzellen zu logischen (0- oder 1-)Zuständen. Diese Fehlerlogik 1012 umfasst beispielsweise die vorstehend erläuterte Bestimmung der k schnellsten Zustände eines k-aus-n-Codes. Sobald die k schnellsten Zustände vorliegen, werden die Ausgänge der Speicherzellen (die Ausgänge der den Speicherzellen zugeordneten Messverstärker, die die Zustände der Speicherzellen anzeigen) eingefroren. Dies geschieht beispielsweise mittels der in 8 beschriebenen Schaltung, wonach über die Verbindung 802 die Latches 805 bis 810 „gelatched“ (angehalten oder eingefroren) werden, so das an den Ausgängen der Latches 805 bis 810 die k schnellsten Zustände (in dem beschriebenen Beispiel sind das die 0-Zustände) anliegen. Diese Zustände können sich nach einem entsprechenden Signal, das über die Verbindung 802 übermittelt wird, nicht mehr ändern und sind eingefroren bis wieder eine Freigabe (z.B. auch über die Verbindung 802) erfolgt.
-
Falls die Zustände kein gültiges Codewort darstellen, wird probiert, welches Codewort von einer Fehlerverarbeitung 1013 akzeptiert wird. Dieses ist dann das korrekte Codewort des k-aus-n-Codes und wird zur weiteren Verarbeitung verwendet.
-
Die Fehlerverarbeitung 1013 kann beispielsweise einen Fehlercode verwenden. Der Fehlercode kann ein fehlererkennender Code sein, der Prüfbits aufweist, die aus den Bits von verschiedenen Gruppen aus n Bits gebildet sind. Die Prüfbits können beispielsweise mittels eines Bergercodes oder mittels eines BCH-Codes gebildet werden.
-
Die Fehlerverarbeitung 1013 kann wie erläutert eine Fehlererkennung und/oder Fehlerkorrektur umfassen. Die Fehlerverarbeitung 1013 ist mit einem Systembus 1014 gekoppelt.
-
Der Messverstärker kann jeweils in Gruppen von n Bit auf den Speicher zugreifen. Somit kann eine Bitfolgen, die aus jeweils n Speicherzellen gelesen wird, als eine Gruppe von n Bit weiterverarbeitet werden. Im fehlerfreien Fall stellt jede der Bitfolgen ein Codewort eines k-aus-n-Codes dar. Beispielsweise kann n gleich 6 oder gleich 8 sein.
-
Weitere Ausgestaltungen und Vorteile
-
Wie vorstehend ausgeführt, kann die in 8 gezeigte Schaltung auch verwendet werden, um beispielsweise zwei statt drei der schnellsten Zustände zu bestimmen. In 8 wird gezeigt, wie die drei schnellsten Zustände (die hier beispielhaft 0-Zustände) bestimmt werden.
-
Entsprechend kann der Block 801 ersetzt werden durch eine Schaltung, die z.B. zwei schnellste Zustände bestimmt. In diesem Fall wäre eine Logikschaltung ähnlich zu 9 vorzusehen, wobei insgesamt 15 NICHT-ODER-Gatter mit jeweils zwei Eingängen vorgesehen sind (es gibt 15 mögliche Kombinationen für zwei Zustände in sechs möglichen Bit), deren Ausgänge dann zu einem Ausgangssignal logisch ODER-verknüpft werden (z.B. gemäß der Schaltungsmimik von 6 oder 9 unter Verwendung von weiteren NICHT-ODER-Gattern und einem zusammenführenden NICHT-UND-Gatter). Das Ausgangssignal wechselt von 0 auf 1, sobald an einem der NICHT-ODER-Gatter der ersten Ebene beide Eingänge den Wert 0 aufweisen, also zweimal ein 0-Zustand an unterschiedlichen Bit detektiert wird.
-
Eine solche Schaltung kann z.B. als Teil der Fehlerverarbeitung eingesetzt werden, um zu bestimmen, welches die beiden schnellsten 0-Zustände sind. Somit ist es effizient möglich, zumindest die zwei ersten (schnellsten) 0-Zustände auszuschließen (in 5 entspricht dies den Speicherzellen 402 und 405). Es muss dann nur noch zwischen den beiden Speicherzellen 403 und 404 unterschieden werden, von welcher der korrekte 0-Zustand ausgeht. Somit kann durch eine Vielzahl von derartigen Logikschaltungen, die z.B. parallel oder zumindest teilweise parallel (d.h. teilweise oder vollständig zu gleicher Zeit) betrieben werden können, die Reihenfolge der Bestimmung der Zustände ermittelt werden. In Kenntnis der Reihenfolge ist dann feststellbar, welche Zustände zusammen in einem Lesefenster eingetroffen sind.
-
Somit ermöglicht der hier beschriebene Ansatz eine effiziente Fehlerkompensation bei der Bestimmung der Zustände von Speicherzellen in der Zeitdomäne, wobei die Speicherzellen vorzugsweise komplementäre Speicherzellen umfassen und wobei die Bestimmung der Zustände von mindestens zwei Speicherzellen in ein zeitlich kurzes Lesefensters fällt. Wenn es sich bei diesen beiden Speicherzellen um solche Speicherzellen handelt, die - sofern beiden der gleiche Zustand zugeordnet wird - hierdurch kein Codewort eines vorgegebenen k-aus-n-Codes mehr vorliegt, liegt ein Lesefehler vor und es kann die hier beschriebene Fehlerkompensation auf effiziente Weise durch Einbinden einer üblicherweise vorhandenen Fehlerschaltung (die eine Fehlererkennung und/oder Fehlerkorrektur umfasst) mittels Ausprobieren bestimmen, welches Codewort das richtige ist. Durch die Kenntnis der beiden Speicherzellen, die gemeinsam in das Lesefenster gefallen sind, kann gezielt für diese Speicherzellen eine Kombination von Zuständen (z.B. 01 oder 10) angenommen werden, und somit schnell und effizient der Lesefehler kompensiert werden.
-
Der hier beschriebene Ansatz ist beispielsweise anwendbar für Speichertechnologien, bei denen es aufgrund kleiner Lesefenster, insbesondere begründet durch Degradations- und/oder Temperatureffekte, zu Lesefehlern kommen kann. Dies gilt besonders für zueinander komplementäre Speicherzellen und/oder Lesemethoden, die aufwändige und diffizile Referenzströme nutzen.
-
Die hier erwähnte Fehlerschaltung kann bekannte Fehlererkennungs- und/oder Fehlerkorrekturverfahren umfassen oder nutzen.
-
Durch die hier beschriebene Lösung wird vorteilhaft die Zuverlässigkeit des verwendeten Speichers, insbesondere beim Lesen von Daten aus dem Speicher, erhöht und mögliche Temperatur- oder Degradationseffekte zumindest teilweise kompensiert.