-
Mehrwertige Speicher (Multi-Level Memories) sind bekannt als Speicher, deren jeweilige Speicherzelle in der Lage ist mehr als zwei Zustände zu speichern.
-
KOTAKI, S; et al.: „A Class of q-Ary Unidirectional Error Correction Codes for MLC Flash Memories“, IEEE 2013, ISBN 978-0-7695-5130-2] beschreibt die Nutzung von Fehlerkorrekturcodes zur Erhöhung der Zuverlässigkeit. Dabei wird insbesondere auf die Korrektur von unidirektionalen Fehlern in sogenannten q-ary Symbolen abgestellt.
-
Es gibt eine Vielzahl von Anwendungen für mehrwertige Speicher. Beispielsweise kann während einer Software-Aktualisierung (Update) der mehrwertige Speicher zur temporären Zwischenspeicherung genutzt werden. Ist die Software-Aktualisierung abgeschlossen, kann der mehrwertige Speicher wieder als binärer Speicher verwendet werden. Dies ermöglicht die Einsparung zusätzlicher Speicherhardware, die nur als Zwischenspeicher während des Updates dient. Mit anderen Worten: Es muss kein gesonderter Speicher physisch vorgehalten werden, der nur während der Software-Aktualisierung genutzt wird. Die Software-Aktualisierung kann beispielsweise zumindest teilweise über eine drahtlose Schnittstelle, insbesondere eine Mobilfunkschnittstelle, initiiert und durchgeführt werden. Dies wird auch als „Software-over-the-Air“ (SOTA) oder „Over-the-air-Update“ bezeichnet und beispielsweise im Automobilumfeld eingesetzt.
-
Im Rahmen vorgegebener Sicherheitsanforderungen sollen Fehler auch für den mehrwertigen Speicher erkannt und/oder korrigiert werden.
-
Es besteht somit die Aufgabe, bestehende Lösungen zu verbessern und insbesondere eine effiziente Fehlererkennung und/oder Fehlerkorrektur für mehrwertige Speicher zu ermöglichen.
-
Diese Aufgabe wird gemäß den Merkmalen der unabhängigen Ansprüche gelöst. Bevorzugte Ausführungsformen sind insbesondere den abhängigen Ansprüchen entnehmbar.
-
Zur Lösung der Aufgabe wird ein Verfahren angegeben zur Verarbeitung einer Eingangsbitfolge, mit:
- - Kodieren der Eingangsbitfolge in eine Ausgangsbitfolge mittels Kodierung,
- - wobei die Bitfolge mindestens ein Tupel aufweist, wobei jedes Tupel mindestens zwei binäre Werte umfasst,
- - wobei jedem Tupel ein Ladungszustand einer mehrwertigen Speicherzelle eines Speichers entspricht,
- - wobei ein Wechsel von einem ersten Ladungszustand in einen zweiten Ladungszustand, der, bezogen auf einen neutralen Ladungszustand, betragsmäßig größer ist, einen zusätzlichen binären Wert 1 in dem Tupel bedingt,
- - wobei der Ladungszustand derart bestimmt ist, dass ein Übergang von dem binären Wert 1 in den binären Wert 0 mittels eines unidirektionalen Fehlercodes detektierbar ist,
- - Speichern des zu dem Tupel zugehörigen Ladungszustands in der Speicherzelle.
-
Der Ladungszustand ist insbesondere eine Ladungsverteilung, d.h. ein Bereich von möglichen Ladungen, der dem Ladungszustand zugeordnet ist. Bei den Speicherzellen des Speichers handelt es sich um mehrwertige Speicherzellen. Somit kann also die Bitfolge in Tupel zerlegt werden und jedes Tupel wird gemäß dem diesem Tupel zugehörigen Ladungszustand in je eine Speicherzelle des Speichers geschrieben. Durch die Zuordnung der Ladungszustände zu binären Werten kann mittels des unidirektionalen Fehlercodes eine Fehlererkennung sichergestellt werden.
-
Bei dem neutralen Ladungszustand kann es sich um eine physikalische Größe der Speicherzelle handeln, z.B. einer elektrischen Ladung, die die Speicherzelle anstrebt, wenn sie keine Ladungserneuerung (Refresh) erfährt.
-
Hierbei ist es von Vorteil, dass eine Veränderung der binären Werte in dem Tupel aufgrund eines Fehlers nur von dem Wert 1 in den Wert 0 erfolgt und somit in Richtung eines betragsmäßig niedrigeren Ladungszustands. Diese Veränderung kann mittels des unidirektionalen Fehlercodes detektiert werden.
-
Hier ist beispielhaft der binäre Wert 1 angegeben. Entsprechend kann stattdessen auch ein binärer Wert 0 vorgesehen sein, sofern der Übergang von dem Wert 0 in den Wert 1 von dem unidirektionalen Fehlercode detektierbar ist. In diesem Fall ist ein binärer Wert 0 in dem Tupel vorgesehen für den betragsmäßig größeren Ladungszustand.
-
Grundsätzlich gilt, dass der binäre Wert 1 eine Bezeichnung für einen ersten binären Wert und der binäre Wert 0 eine Bezeichnung für einen zweiten - dazu inversen - binären Wert darstellt.
-
Ein Fehlercode ist ein Fehler-erkennenden und/oder ein Fehler-korrigierender Code.
-
Der unidirektionale Fehlercode ist vorzugsweise ein Fehlercode, der einen asymmetrischen Fehler erkennen und/oder korrigieren kann.
-
Es ist eine Weiterbildung, dass ein Schwellwert vorgesehen ist, um eine Symmetrie um den neutralen Ladungszustand aufzulösen und somit eine Unidirektionalität für den unidirektionalen Fehlercode sicherzustellen.
-
Der Schwellenwert kann beispielsweise zwischen dem neutralen Zustand und einer ersten Ladungsverteilung positioniert sein, wobei die erste Ladungsverteilung ein erstes Vorzeichen aufweist und eine zweite Ladungsverteilung ein zweites (von der ersten Ladungsverteilung verschiedenes) Vorzeichen aufweist. Die zweite Ladungsverteilung hat den geringsten Abstand im Vergleich zu allen Ladungsverteilungen mit dem gleichen Vorzeichen von dem neutralen Zustand.
-
Es ist eine Weiterbildung, dass der Schwellwert zwischen dem Ladungszustand, bei dem das Tupel nur binäre Werte 0 aufweist, und dem Ladungszustand, der betragsmäßig diesem Ladungszustand am nächsten ist, dessen Ladungszustand aber ein inverses Vorzeichen aufweist, angeordnet ist.
-
Es ist eine Weiterbildung, dass der Ladungszustand anhand einer Einsatzspannung der Speicherzelle und/oder anhand eines Stroms durch die Speicherzelle bestimmt wird.
-
Es ist eine Weiterbildung, dass
- - das Tupel zwei binäre Werte umfasst,
- - der neutrale Ladungszustand zwischen Ladungszuständen angeordnet ist, denen die Tupel mit den binären Werten 00, 01 oder die Tupel mit den binären Werten 00, 10 zugeordnet sind,
- - der Schwellwert zur Auflösung der Symmetrie um den neutralen Ladungszustand
- - zwischen dem Ladungszustand, der dem Tupel 01 zugeordnet ist und dem neutralen Ladungszustand angeordnet ist für den Fall, dass der neutrale Ladungszustand zwischen den Ladungszuständen angeordnet ist, denen die Tupel 00 und 01 zugeordnet sind und
- - zwischen dem Ladungszustand, der dem Tupel 10 zugeordnet ist und dem neutralen Ladungszustand angeordnet ist für den Fall, dass der neutrale Ladungszustand zwischen den Ladungszuständen angeordnet ist, denen die Tupel 00 und 10 zugeordnet sind.
-
Es ist eine Weiterbildung, dass die Ladungszustände positiv oder negativ in Bezug auf den neutralen Ladungszustand sind, wobei bei vier Ladungszuständen, die auf vier Tupel mit je zwei binären Werten abgebildet werden, eine der folgenden Möglichkeiten genutzt wird:
- Möglichkeit 1: LV01 < LVn < LV00 < LV10 < LV11,
- Möglichkeit 2: LV10 < LVn < LV00 < LV01 < LV11,
- Möglichkeit 3: LV11 < LV10 < LVn < LV00 < LV01,
- Möglichkeit 4: LV11 < LV01 < LVn < LV00 < LV10,
- Möglichkeit 5: LV11 < LV10 < LV00 < LVn < LV01,
- Möglichkeit 6: LV11 < LV01 < LV00 < LVn < LV10,
- Möglichkeit 7: LV01 < LV00 < LVn < LV10 < LV11,
- Möglichkeit 8: LV10 < LV00 < LVn < LV01 < LV11,
wobei LVij der Ladungszustand, der auf die binären Werte ij (mit i, j ∈ {0,1}) abgebildet wird, und LVn den neutralen Ladungszustand bezeichnen.
-
Somit ist bei vier Ladungszuständen, die auf vier Tupel mit je zwei binären Werten abgebildet werden, zwischen dem neutralen Ladungszustand und dem mit 00 belegten Ladungszustand kein weiterer Ladungszustand positioniert.
-
Entsprechend den obigen Ausführungen gilt auch der inverse Fall: Dann sind alle Nullen mit Einsen und alle Einsen mit Nullen zu vertauschen.
-
Es ist eine Weiterbildung, dass mittels des unidirektionalen Fehlercodes Prüfbits bestimmt werden und in den Speicherzellen gespeichert werden.
-
Es ist eine Weiterbildung, dass der unidirektionale Fehlercode ein asymmetrischer Fehlercode, insbesondere ein Berger-Code oder ein Bose-Lin-Code ist.
-
Es ist eine Weiterbildung, dass eine Adressinformation bestimmt wird und zusätzlich in den Tupeln binärer Werte abgespeichert wird.
-
Es ist eine Weiterbildung, dass die Adressinformation Adressbits oder aus Adressbits abgeleitete Bits umfasst.
-
Es ist eine Weiterbildung, dass erste Prüfbits bestimmt werden und in den Tupeln binärer Werte abgespeichert werden.
-
Es ist eine Weiterbildung, dass die ersten Prüfbits basierend auf Datenbits bestimmt werden und die Datenbits sowie die ersten Prüfbits in den Tupeln binärer Werte gespeichert werden.
-
Es ist eine Weiterbildung, dass die ersten Prüfbits bestimmt werden basierend auf
- - zweiten Prüfbits, die basierend auf den Datenbits bestimmt werden und
- - der Adressinformation.
-
Es ist eine Weiterbildung, dass die zweiten Prüfbits mittels des unidirektionalen Fehlercodes bestimmt werden.
-
Es ist eine Weiterbildung, dass die ersten Prüfbits unter Verwendung einer Summe oder der Differenz der zweiten Prüfbits und der Adressinformation bestimmt werden.
-
Auch wird ein Verfahren vorgeschlagen zum Erkennen eines Fehlers in einer aus einem Speicher gelesenen Bitfolge, wobei die Bitfolge wie hierin beschrieben gespeichert wurde.
-
Auch wird ein Verfahren vorgeschlagen zur Erkennung eines Adressfehlers beim Lesen einer Bitfolge aus einem Speicher, wobei der Speicher mehrwertige Speicherzellen umfasst,
- - bei dem geprüft wird, ob die Bitfolge mit der anliegenden Leseadresse ein Codewort eines unidirektionalen Fehlercodes mit einbezogener Adresseninformation ist,
- - bei dem dann, wenn ein Adressenfehler vorliegt und kein weiterer Fehler vorliegt und die Bitfolge in Verbindung mit der Leseadresse kein Codewort des unidirektionalen Fehlercodes mit einbezogener Adresseninformation ist, ein Adressenfehler erkannt wird.
-
Weiterhin wird eine Vorrichtung angegeben zur Verarbeitung einer Eingangsbitfolge mit einer Verarbeitungseinheit, die eingerichtet ist
- - zum Kodieren der Eingangsbitfolge in eine Ausgangsbitfolge mittels Kodierung,
- - wobei die Bitfolge mindestens ein Tupel aufweist, wobei jedes Tupel mindestens zwei binäre Werte umfasst,
- - wobei jedem Tupel ein Ladungszustand einer mehrwertigen Speicherzelle eines Speichers entspricht,
- - wobei ein Wechsel von einem ersten Ladungszustand in einen zweiten Ladungszustand, der, bezogen auf einen neutralen Ladungszustand, betragsmäßig größer ist, einen zusätzlichen binären Wert 1 in dem Tupel bedingt,
- - wobei der Ladungszustand derart bestimmt ist, dass ein Übergang von dem binären Wert 1 in den binären Wert 0 mittels eines unidirektionalen Fehlercodes detektierbar ist,
- - zum Speichern des zu dem Tupel zugehörigen Ladungszustands in der Speicherzelle.
-
Die hier genannte Verarbeitungseinheit kann insbesondere als eine Prozessoreinheit und/oder eine zumindest teilweise fest verdrahtete 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.
-
Insbesondere ist die Verarbeitungseinheit eingerichtet, die Schritte des hier beschriebenen Verfahrens durchführen zu können.
-
Es ist eine Weiterbildung, dass die Vorrichtung derart eingerichtet ist, dass eine Bitfolge aus den Speicher gelesen wird und geprüft wird, ob ein Fehler in der gelesen Bitfolge vorliegt.
-
Zudem wird ein System vorgeschlagen umfassend mindestens eine der hierin beschriebenen Vorrichtungen.
-
Ferner wird ein Computerprogrammprodukt angegeben, 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.
-
Weiterhin sein angemerkt, dass der Begriff Codewort eine gültige Belegung von Bits gemäß einem vorgegebenen Code bezeichnet. Damit erfüllt das Codewort die Eigenschaften des Codes.
-
Der Code (auch bezeichnet als Fehlercode) kann ein Fehler-erkennender und/oder ein Fehler-korrigierender Code sein.
-
Der Speicher kann einen der folgenden Speicher umfassen: Floating-Gate-Zellen, PCRAM, RRAM, MRAM, MONOS-Bauelemente, Nano-Kristall-Zellen, ROM.
-
Die vorstehenden Erläuterungen betreffend das Verfahren gelten für die Vorrichtung entsprechend und umgekehrt.
-
Die oben beschriebenen Eigenschaften, Merkmale und Vorteile dieser Erfindung sowie die Art und Weise, wie diese erreicht werden, werden nachfolgend beschrieben im Zusammenhang mit einer 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 eine schematische Darstellung mit vier Ladungszuständen einer Speicherzelle, die in Form von Ladungsverteilungen dargestellt sind;
- 2 ein mögliches Beispiel für eine Codierung der vier Ladungszustände;
- 3 ein alternatives Beispiel für eine Codierung der vier Ladungszustände;
- 4 ein weiteres Beispiel für eine Codierung der vier Ladungszustände;
- 5 noch ein Beispiel für eine Codierung der vier Ladungszustände;
- 6 ein beispielhaftes Diagramm, das ein Encodieren und Speichern veranschaulicht;
- 7 ein beispielhaftes Diagramm zur Visualisierung der Decodierung;
- 8 ein weiteres beispielhaftes Diagramm zur Fehlererkennung ohne die Berücksichtigung von Adressfehlern.
-
1 zeigt eine schematische Darstellung mit Ladungszuständen 101, 102, 103 und 104, die in Form von Ladungsverteilungen dargestellt sind. Die Speicherzelle des mehrwertigen Speichers ist in der Lage, jeden der Ladungszustände 101 bis 104 anzunehmen. Auf der x-Achse ist eine Einsatzspannung VT der Speicherzelle aufgetragen, auf der y-Achse die statistischen Häufigkeiten. Weiterhin ist ein neutraler Ladungszustand 105 gezeigt, der mit einer entsprechenden Einsatzspannung assoziiert ist und als neutraler Zustand der Speicherzelle bezeichnet werden kann.
-
Die Speicherzelle kann beispielsweise entsprechend einer Programmierung oder einem Löschvorgang konditioniert werden, so dass sie einen der Ladungszustände 101 bis 104 annimmt. In dem hier gezeigten Beispiel ist der Zustand 101 ein gelöschter Zustand, die Ladung ist niedriger als die Ladung in dem neutralen Ladungszustand. Die Zustände 102 bis 104 weisen einen Ladungszustand auf, der größer (positiver) ist als der neutrale Ladungszustand; insgesamt gilt
wobei LV den Ladungszustand und der Index den in
1 gezeigten Ladungszustand bezeichnen. LV
n bezeichnet den neutralen Ladungszustand.
-
Es wird nun vorgeschlagen, dass den Ladungszuständen Bitkombinationen (auch bezeichnet als Tupel von Bits) zugewiesen werden, so dass ein Fehler mittels eines unidirektionalen Fehlercodes detektierbar ist.
-
In dem in 1 gezeigten Beispiel kann die mehrwertige Speicherzelle vier Ladungszustände 101 bis 104 annehmen. Bei einem Ladungsverlust bewegen sich die Ladungszustände in Richtung des neutralen Zustands LVn. Somit findet die Migration zwischen den Ladungszuständen nur in einer Richtung, d.h. in Richtung des neutralen Ladungszustands, statt. Bei einem Ladungsverlust kann sowohl positive als auch negative Ladung verloren gehen. Dies ist in 1 durch die Pfeile 111 bis 114 angedeutet.
-
Die vier Ladungszustände 101 bis 104 der Speicherzelle können mit zwei Bits codiert werden. Die Codierung erfolgt zweckmäßig dergestalt, dass ein unidirektionaler Fehlercode einen Fehler erkennen kann.
-
Die Ladungszustände können voneinander unterschieden werden, indem zwischen den Ladungsverteilungen weitere Schwellwerte angeordnet sind, die einen Vergleich zwischen den Ladungsverteilungen und eine Unterscheidung solcher Ladungszustände, die sich gemeinsam auf einer Seite des neutralen Ladungszustands befinden, ermöglichen.
-
2 zeigt ein mögliches Beispiel für eine Codierung der vier Ladungszustände 101 bis 104 wie folgt:
- - Ladungszustand 101: binärer Wert 01,
- - Ladungszustand 102: binärer Wert 00,
- - Ladungszustand 103: binärer Wert 10 und
- - Ladungszustand 104: binärer Wert 11.
-
Es gilt:
wobei LV
ij den Ladungszustand, der auf die binären Werte ij (mit i, j ∈ {0,1}) abgebildet wird, und LV
n den neutralen Ladungszustand bezeichnen.
-
Weiterhin ist ein Schwellwert VTref zwischen dem neutralen Ladungszustand und dem Ladungszustand, der einen geringen betragsmäßigen Abstand zu dem neutralen Ladungszustand LVn aufweist und von dem binären Zustand 00 verschieden ist, angeordnet. In dem Beispiel der 2 ist dies der Ladungszustand 101, der den binären Wert 01 aufweist.
-
Der Schwellwert VTref ist geeignet, eine Symmetrie um den neutralen Ladungszustand aufzulösen. In dem in 2 gezeigten Beispiel stehen sich die Verteilungen der Ladungszustände 101 und 102 im Wesentlichen symmetrisch gegenüber. In diesem Fall kann die Symmetrie so gedeutet werden, dass die betragsmäßigen Ladungszustände der Verteilungen auf beiden Seiten um den neutralen Ladungszustand eine teilweise Überlappung aufweisen. Bei der Symmetrie wird beispielsweise derjenige Ladungszustand betrachtet, dessen Tupel nur binäre Werte 0 aufweist und der diesem Ladungszustand im Wesentlichen in Bezug auf den neutralen Ladungszustand gegenüberliegende Ladungszustand. Der neutrale Ladungszustand kann im Bezug auf diese beiden gegenüberliegenden Ladungszustände in der Mitte oder in einem Bereich zwischen den Ladungsverteilungen dieser Ladungszustände angeordnet sein.
-
3 zeigt ein weiteres Beispiel für eine Codierung der vier Ladungszustände 101 bis 104 wie folgt:
- - Ladungszustand 101: binärer Wert 11,
- - Ladungszustand 102: binärer Wert 10,
- - Ladungszustand 103: binärer Wert 00 und
- - Ladungszustand 104: binärer Wert 01.
-
Es gilt:
-
In dem Beispiel der 3 ist der Schwellwert VTref gemäß obiger Regel zwischen dem Ladungszustand 102 (mit dem binären Wert 10) und dem neutralen Ladungszustand LVn angeordnet.
-
4 zeigt ein Beispiel, bei dem die Codierung der vier Ladungszustände 101 bis 104 entsprechend dem in
3 gezeigten Beispiel erfolgt. Für die Platzierung des neutralen Ladungszustands LV
n gilt:
-
In dem Beispiel der 4 ist der Schwellwert VTref gemäß obiger Regel zwischen dem Ladungszustand 104 (mit dem binären Wert 01) und dem neutralen Ladungszustand LVn angeordnet.
-
5 zeigt ein Beispiel, bei dem die Codierung der vier Ladungszustände 101 bis 104 entsprechend dem in
2 gezeigten Beispiel erfolgt. Für die Platzierung des neutralen Ladungszustands LV
n gilt:
-
In dem Beispiel der 5 ist der Schwellwert VTref gemäß obiger Regel zwischen dem Ladungszustand 103 (mit dem binären Wert 10) und dem neutralen Ladungszustand LVn angeordnet.
-
Hierbei sei angemerkt, dass es weitere Beispiele gibt, den vier Ladungszuständen 101 bis 104 binäre Werte zuzuweisen, die die Bedingung erfüllen, dass die Fehlererkennung mittels unidirektionalem Fehlercode ermöglicht wird. Beispielsweise können die Werte 01 und 10 in den gezeigten Beispielen vertauscht werden.
-
Die Verwendung der vier Ladungszustände ist lediglich als Beispiel zu sehen. So können grundsätzlich mehr als zwei und auch mehr als vier Ladungszustände mittels des unidirektionalen Codes (wobei ein Tupel dann gegebenenfalls mehr als zwei Bits aufweist, um die Anzahl der möglichen Ladungszustände abbilden zu können) codiert werden.
-
Durch den unidirektionalen Code ist es möglich, unidirektionale Bitfehler, bei denen entweder der Wert 1 in den Wert 0 verfälscht wird oder umgekehrt, zu erkennen.
-
Physikalische Fehler, die Ladungsverlusten entsprechen, sollen somit als unidirektionale Fehler erkannt werden.
-
Beispielhafte Verwendung des Berger-Codes
-
Nachfolgend werden die folgenden Bezeichnungen verwendet:
- - Datenbits: x = x1, ..., xn,
- - Adressbits: a = a1, ..., am,
- - Prüfbits des Berger-Codes:
- - Prüfbits des Fehler-korrigierenden Codes, z.B. BCH-Code: dBCH = d1, ..., dk.
-
Der Berger-Code ist als Fehlercode beispielsweise bekannt aus [Berger, J.M.: Information and Control, Vol.4, Seiten 68 bis 73, 1961] oder [Freiman, C.V.: Information and Control, Vol.5, Seiten 64 bis 71, 1962].
-
Der Berger-Code ist ein Fehlererkennungscode. Bitfehler, bei denen mehr Einsen in Nullen als Nullen in Einsen verfälscht sind, und Bitfehler, bei denen mehr Nullen in Einsen als Einsen in Nullen verfälscht sind, werden unter Verwendung des Berger-Codes sicher erkannt. Insbesondere werden sogenannte unidirektionale Fehler, bei denen nur Einsen in Nullen verfälscht sind und keine Nullen in Einsen verfälscht sind (oder Fehler bei denen nur Nullen in Einsen und keine Einsen in Nullen verfälscht sind), erkannt.
-
Fehler, bei denen nur Einsen in Nullen verfälscht sind, können als asymmetrische Fehler bezeichnet werden. Ebenso können Fehler, bei denen nur Nullen in Einsen verfälscht sind, als asymmetrische Fehler bezeichnet werden.
-
Beschreibung ohne Fehlerkorrektur
-
Beispielhaft wird zunächst der Fall betrachtet, dass keine Fehlerkorrektur erfolgt. Prüfbits des Berger-Codes mit einbezogener Adressinformation sind bestimmt gemäß
wobei
- - x(a) = x1, ..., xn Datenbits, die mit der Adresse a adressiert werden,
- - A(a) einen aus der Adresse a gebildeten arithmetischen Wert,
- - c(a)Berger die Prüfbits des Berger-Codes mit einbezogener Adressinformation, die an der Adresse a gespeichert sind, und
- - x̅i(a) die invertierten Datenbits
bezeichnen.
-
Der aus der Adresse a gebildete arithmetische Wert A(a) kann beispielsweise einer der folgenden Werte sein:
- - A(a) = a
Dabei ergibt sich das Problem: Ist n = 256, gilt und diese Summe kann als 8-Bit-Zahl dargestellt werden.
Beträgt die Adressenwortbreite beispielsweise m = 20, ist A(a) = a eine 20-Bit-Zahl und es werden wegen eines möglichen Überlaufs der 20-Bit-Zahl 21 Prüfbits cBerger benötigt.
Es sind somit 21 Bit für die Prüfbits des Berger-Codes erforderlich. In diesem Fall werden, wenn nur entweder Speicherzellenfehler oder nur Adressfehler auftreten, 100% der Datenbitfehler und Prüfbitfehler und 100 % der Adressfehler erkannt. Treten sowohl Speicherzellenfehler als auch Adressfehler gleichzeitig auf, können (wenige) Fehler maskiert werden und somit unerkannt bleiben.
- - A(a) = M·a
M ist eine binäre (L,n)-Matrix, wobei L eine Wortbreite oder eine Anzahl der Bits von A = A1, ..., AL ist. Ist L beispielsweise gleich 7, wird die 20-Bit-Adresse a = [a1, ..., a20] auf 7 Bit kompaktiert. Dabei sind sowohl A als auch a als Spaltenvektoren zu interpretieren. Die Matrix M ist eine binäre (7,20)-Matrix mit 7 Spalten und 20 Zeilen.
Es sei angemerkt, dass die Kompaktierung eine Reduzierung der Adressbits bezeichnet. Beispielsweise kann durch eine lineare oder nichtlineare Abbildung die Menge der Adressbits auf eine kompaktierte Menge von Adressbits reduziert werden.
Dabei kann beispielsweise M eine H-Matrix eines Hsiao-Codes sein. Adressfehler werden mit einer Wahrscheinlichkeit von ca. 99% erkannt. Es sind 9 Prüfbits für den Berger-Code mit einbezogener Adressinformation erforderlich.
- - Es ist eine Option, dass nicht alle Adressbits in die Kompaktierung einbezogen werden. Beispielsweise kann eine Anzahl von Adressbits verwendet werden, ein Modul oder einen Speicherbaustein auszuwählen, in dem die entsprechenden Datenbits und Prüfbits gespeichert sind. Die Adresse in dem Speicherbaustein kann so durch lediglich einen Teil der Adressbits bestimmt sein, die nicht zur Auswahl des Speicherbausteins genutzt werden. In diesem Beispiel werden nur diejenigen Adressbits in die Fehlererkennung einbezogen, die als Adressbits an dem Speichermodul anliegen (und nicht zur Selektion des Moduls genutzt wurden).
-
Die Operation „+“ in der Gleichung (1) ist eine Volladdition. Alternativ könnte auch eine Subtraktion oder eine Addition bzw. Subtraktion jeweils mit einer Konstanten, durchgeführt werden.
-
Beschreibung der Adressfehlererkennung
-
Die Adresse a wird an den Speicher angelegt. Nun kann im Speicher (intern) ein Adressfehler auftreten, durch den die Adresse a in eine fehlerhafte Adresse b geändert wird. Also wird, obwohl beabsichtigt ist, auf die Adresse a des Speichers zuzugreifen, aufgrund des Fehlers tatsächlich eine Leseaktion an der Adresse b durchgeführt. Diese Leseaktion liefert als Ergebnis des Speicherzugriffs:
mit
-
Da eigentlich der Lesevorgang auf die Adresse a gerichtet war, wird
gebildet und geprüft, ob
gilt.
-
Ist A(a) ≠ A(b), wird der Adressfehler erkannt. Ist hingegen A(a) =A(b), wird der Adressfehler nicht erkannt.
-
Gelten
wird jeder Adressfehler erkannt.
-
Ist L = 7 und damit A = A
1, ..., A
7, dann gibt es 2
7 = 128 verschiedene mögliche Werte kompaktierter Adressbits A
1, ..., A
7. Auf einen dieser Werte wird die korrekte Adresse a abgebildet. Tritt ein Adressenfehler auf, der einer fehlerhaften Adresse a' entspricht, wird die fehlerhafte Adresse a' auf einen dieser 128 Adresswerte abgebildet. Die fehlerhafte Adresse a' wird dann nicht als fehlerhaft erkannt, wenn sie auf den Adresswert abgebildet wird, auf den auch der korrekte Adresswert a abgebildet wird. Die Wahrscheinlichkeit, dass ein solcher Fall eintritt, beträgt
vorausgesetzt, dass alle Adressfehler mit der gleichen Wahrscheinlichkeit auftreten.
-
Kombination mit Fehlerkorrektur
-
Im Folgenden werden ein Fehler-erkennender Berger-Code mit einbezogener Adresseninformation C = C
Berger mit Prüfbits c(a)
Berger und ein Fehler-korrigierender BCH-Code
verwendet. Als Beispiel wird ein 2-Bitfehler-korrigierender BCH-Code genutzt. Analog kann entsprechend ein anderer Fehler-korrigierender Code verwendet werden.
-
Die Datenbits x = x1, ..., xn werden zunächst um Prüfbits des BCH-Codes d1, ..., dk ergänzt.
-
Die Prüfbits des Berger-Codes mit einbezogener Adressinformation werden beispielsweise gemäß der Beziehung
gebildet. Der BCH-Code ist somit der innere Code, der Berger-Code mit einbezogener Adressinformation ist der äußere Code. Die auftretenden Fehler in den Datenbits und den Prüfbits sind unidirektional bzw. asymmetrisch.
-
1-Bitfehler und 2-Bitfehler in den Datenbits x1, ...xn und, falls gewünscht, in den Prüfbits d1, ..., dk des BCH-Codes, können durch den BCH-Code korrigiert werden.
-
Tritt ein 1-Bitfehler oder ein 2-Bitfehler auf, dann wird der 1-Bitfehler oder der 2-Bitfehler mittels des BCH-Codes korrigiert.
-
Tritt ein asymmetrischer Fehler, der beispielsweise Einsen in Nullen verfälscht, in den Datenbits oder in den Prüfbits des BCH-Codes auf, der mindestens drei Einsen in drei Nullen verfälscht, dann gibt es die folgenden Möglichkeiten:
- • Durch den BCH-Code wird kein Fehler korrigiert. Durch den Berger-Code wird der asymmetrische Mehrbit-Fehler sicher erkannt.
- • Durch den BCH-Code wird fälschlicherweise ein 1-Bitfehler korrigiert. In den Datenbits und in den Prüfbits sind nach der Korrektur mehrere Fehler vorhanden, die eine Eins in eine Null verfälschen als Fehler, die eine Null in eine Eins verfälschen, so dass der Berger-Code einen Fehler anzeigt.
- • Durch den BCH-Code wird fälschlicherweise ein 2-Bitfehler korrigiert. In den Datenbits und in den Prüfbits ist nach der Korrektur noch mindestens ein asymmetrischer Fehler vorhanden, der durch den Berger-Code erkannt wird.
- • Durch den BCH-Code wird ein 3-Bitfehler erkannt. Unabhängig davon, ob tatsächlich ein asymmetrischer 3-Bit-Fehler oder ein asymmetrischer Fehler mit mehr als drei fehlerhaften Bits vorliegt, wird der Fehler als nicht korrigierbarer Fehler erkannt.
-
Jeder Fehler in den Datenbits und in den Prüfbits des BCH-Codes, der nicht richtig korrigiert wird, kann somit erkannt werden. Jeder Fehler in den Prüfbits des Berger-Codes kann erkannt werden.
-
Liegt kein Adressfehler vor, so gilt also:
- - 1-Bitfehler oder 2-Bitfehler in den Datenbits und/oder in den Prüfbits des BCH-Codes werden korrigiert.
- - Jeder Fehler in den Prüfbits des Berger-Codes wird mit einer Wahrscheinlichkeit von 100% erkannt.
- - Jeder asymmetrische Bitfehler mit mindestens drei fehlerhaften Bits in den Datenbits, den Prüfbits des BCH-Codes und/oder in den Prüfbits des Berger-Codes wird mit einer Wahrscheinlichkeit von 100% erkannt.
-
Liegt kein Fehler in den Datenbits, in den Prüfbits des BCH-Codes und den Prüfbits des Berger-Codes vor, dann gilt:
- - Ein Adressfehler, der eine Adresse a in eine Adresse b verfälscht, wird erkannt, wenn A(a) ≠ A(b) gilt.
- - Ist A(a) = a und A(b) = b, wird jeder Adressfehler zu 100% erkannt.
- - Ist die Wortbreite von A(a) gleich R, ist die Wahrscheinlichkeit einen beliebigen Adressfehler nicht zu erkennen gleich 2-R.
Für R = 7 ergibt sich beispielsweise 2-7, also weniger als 1%.
- - Durch eine bestimmte Wahl der Matrix M (beispielsweise als H-Matrix eines Hsiao-Codes) kann z.B. ein 1-Bitfehler, ein 2-Bitfehler und/oder ein 3-Bitfehler in der Adresse sicher erkannt werden.
-
Liegt ein Fehler in den Datenbits, den Prüfbits und der Adresse vor, kann ein Adressfehler, einen asymmetrischen Fehler in den Datenbits und/oder den Prüfbits, mit geringer Wahrscheinlichkeit kompensieren.
-
Alternative Ausführungsform
-
Gemäß einer Alternative sind die Prüfbits d
BCH des BCH-Codes die Prüfbits der Bits x(a), c(a)
Berger mit
-
Ein Codewort hat dann die Form
-
Der Berger-Code ist hier der innere Code, der BCH-Code der äußere Code.
-
Fehler in den Datenbits x, in den Prüfbits cBerger des Berger-Codes und in den Prüfbits dBCH des BCH-Codes können somit unter Verwendung des BCH-Codes korrigiert werden.
-
Anstelle des hier beispielhaft verwendeten 2-Bitfehler korrigierenden und 3-Bitfehler erkennenden BCH-Codes kann auch ein anderer Code, beispielsweise ein 1-Bitfehler korrigierender und 2-Bitfehler erkennender Hsiao-Code, ein Mehrbit-Fehler korrigierender Code, ein 1-Bitfehler korrigierender Hamming-Code, ein verkürzter Hamming Code, ein nicht-linearer Code, ein Bytefehler-korrigierender und Bytefehler-erkennender Code oder ein anderer Fehlercode verwendet werden.
-
Weitere Aspekte und Vorteile
-
Es sollen Datenbits in Speicherzellen gespeichert werden, wobei die Speicherung so ausgestaltet ist, dass auftretende Fehler in den Speicherzellen zu unidirektionalen Fehlern in den Bits führen, die beim Auslesen aus den Speicherzellen erkannt werden.
-
In einer Speicherzelle kann mehr als ein Bit gespeichert werden. Eine derartige Speicherzelle wird auch als mehrwertige Speicherzelle bezeichnet. Werden beispielsweise zwei Bits mit den binären Werten 00, 01, 10 und 11 (die auch als dezimale Werte 0, 1, 2, 3 bezeichnet werden können) pro Speicherzelle gespeichert, so handelt es sich bei der Speicherzelle um eine 4-wertige Speicherzelle.
-
Die Speicherzellen sind Speicherzellen eines adressierbaren Speichers, so dass unter einer Adresse mehrwertige Werte gespeichert sind. Bei 4-wertigen Speicherzellen werden zwei Bits pro Speicherzelle gespeichert. Beim Schreiben in den Speicher werden die Bits unter ihrer Schreibadresse abgespeichert und beim Lesen werden die Bits aus dem Speicher an ihrer Leseadresse ausgelesen.
-
Aus den Datenbits werden unter Verwendung des unidirektionalen Fehlercodes abgeleitete Bits gebildet, die unter einer Schreibadresse in den entsprechenden Speicherzellen gespeichert werden. Beispielsweise können die abgeleiteten Bits ein Codewort des unidirektionalen Fehlercodes sein oder ein solches umfassen.
-
Führen Speicherzellenfehler zu unidirektionalen Fehlern beim Auslesen des Speichers, kann unter Verwendung des unidirektionalen Fehlercodes bestimmt werden, ob ein Fehler vorliegt. Es ist vorteilhaft, wenn der Fehlercode so bestimmt ist, dass alle unidirektionalen Fehler sicher erkannt werden. In diesem Fall können alle Speicherfehler erkannt werden.
-
Beispielsweise kann aus Datenbits ein Codewort des Fehlercodes gebildet werden. Die Bits des Codewortes können mit aus einer Speicheradresse abgeleiteten Bits verknüpft werden zu Bits, die dann in den Speicher geschrieben werden. Beispielsweise kann die Schreibadresse genutzt werden, um in den Speicher zu schreibende Prüfbits zu bestimmen.
-
6 zeigt ein beispielhaftes Diagramm, das das Encodieren und Speichern veranschaulicht. Beispielsweise werden Datenbits x und Prüfbits p in einem Speicher 601 an einer Schreibadresse as gespeichert. Die Prüfbits p werden, wie vorstehend beschrieben generiert, beispielsweise mittels einer Prüfbiterzeugungseinheit 602, basierend auf den Datenbits x und (optional) einer Adressinformation. Die Adressinformation kann beispielsweise die Schreibadresse as umfassen oder auf dieser basieren. Insbesondere kann die Adressinformation eine aus der Schreibadresse abgeleitete Information umfassen.
-
Die Prüfbits p können auf ersten Prüfbits, die für die Datenbits x generiert werden und auf zweiten Prüfbits, die anhand der Adressinformation gewonnen werden, basieren. Beispielsweise können die Prüfbits p durch eine arithmetische Verknüpfung der ersten und zweiten Prüfbits generiert werden.
-
Beispielsweise kann aus den Datenbits ein Codewort des Berger-Codes gebildet werden, indem die Datenbits durch entsprechende Prüfbits ergänzt werden. Die Datenbits mit dem Prüfbits bilden dann in diesem Beispiel ein Codewort des Berger-Codes. Anhand der Schreibadresse können abgeleitete Adressbits bestimmt werden, die zu den Prüfbits des Codeworts addiert werden. Somit sind die zu speichernden Bits die Datenbits und die Bits der Summe der Prüfbits und der aus den Adressbits der Schreibadresse abgeleiteten Bits.
-
Anstatt der Addition können auch andere arithmetische Operationen vorgesehen sein. Beispielsweise können die Prüfbits und die aus den Adressbits abgeleiteten Bits mittels einer Exklusiv-Oder-Verknüpfung (XOR-Verknüpfung) oder mittels einer Subtraktion bestimmt werden.
-
Beim Lesen der Daten aus dem Speicher wird auf die Leseadresse zugegriffen. Nun könnte es aufgrund eines Adressfehlers zu einem fehlerhaften Zugriff auf den Speicher dergestalt kommen, dass die Leseadresse verfälscht wird, d.h. der Zugriff auf den Speicher erfolgt auf eine andere Adresse. Die gelesenen Daten sind dann die unter der anderen Adresse vorhandenen Daten; der Lesevorgang der Daten selbst mag fehlerfrei (oder auch fehlerhaft) sein, jedenfalls sind es aufgrund des Adressfehlers nicht die Daten, die eigentlich gelesen werden sollen. Eine solche Verfälschung der Leseadresse kann jedoch erkannt werden.
-
7 zeigt ein beispielhaftes Diagramm zur Visualisierung der Decodierung. In diesem Beispiel kommt es bei dem Zugriff auf den Speicher 601 zu einer Verfälschung der Leseadresse aL, d.h. es wird auf den Speicher 601 lesend zugegriffen, aber aufgrund des Adressfehlers werden Datenbits x' anstelle der Datenbits x ausgelesen. Eine Prüfbiterzeugungseinheit 701, die entsprechend der Prüfbiterzeugungseinheit 602 ausgeführt sein kann, generiert aus den gelesenen Datenbits x' und der Leseadresse aL Prüfbits p'. Weiterhin werden aus dem Speicher die zu den Datenbits x' gehörigen Prüfbits p‛‛ ausgelesen. Eine Vergleichseinheit 702 stellt nun fest, dass die Prüfbits p' von dem Prüfbits p‛‛ verschieden sind und kann daraufhin eine vorgegebene Aktion veranlassen, z.B. einen Fehlerindikator 703 bereitstellen.
-
Beim Auslesen von Bits unter einer Leseadresse des Speichers können anhand der Leseadresse abgeleitete Bits nach der gleichen Vorschrift gebildet werden, wie die abgeleiteten Adressbits aus der Schreibadresse bestimmt wurden.
-
Die aus der Leseadresse abgeleiteten Bits können von den ausgelesenen Bits, die im fehlerfreien Fall der Summe der Prüfbits und der aus der Schreibadresse abgeleiteten Bits entsprechen, subtrahiert werden. Stimmt die Leseadresse mit der Schreibadresse überein, ist kein Adressfehler aufgetreten. Ist kein weiterer Fehler aufgetreten, dann liegen nach der Subtraktion die Prüfbits der Datenbits, die unter der Schreibadresse in den Speicher geschrieben wurden, wieder vor.
-
Unidirektionale Fehler in den Datenbits und in den Prüfbits werden sicher erkannt, wenn nicht gleichzeitig ein Adressfehler vorliegt. Gibt es keinen Fehler in den Datenbits und in den Prüfbits, kann ein Adressfehler erkannt werden.
-
Anstelle des hier beispielhaft beschriebenen Berger-Codes kann auch ein anderer unidirektionaler Fehlercode verwendet werden, beispielsweise ein Bose-Lin-Code wie er in [Bose, B. und Lin, D.J.: Systematic Unidirectional Error-Detecting Codes, IEEE Trans. on Computers, Seiten 1026 bis 1032, 1985] beschrieben ist.
-
8 zeigt ein weiteres beispielhaftes Diagramm zur Decodierung bzw. Fehlererkennung ohne die Berücksichtigung von Adressfehlern. An der Leseadresse aL sollen Datenbits x gelesen werden. Aufgrund eines Speicherfehlers oder eines Lesefehlers werden jedoch fehlerhafte Datenbits x' gelesen. Eine Prüfbiterzeugungseinheit 801 generiert basierend auf den aus dem Speicher erhaltenen Datenbits x' Prüfbits p'. Weiterhin werden die an der Adresse aL bereitgestellten Prüfbits p‛‛ gelesen. Eine Vergleichseinheit 802 stellt in diesem Beispiel fest, dass die Prüfbits p' nicht mit den Prüfbits p‛‛ übereinstimmen. Es wird somit ein Fehler erkannt und es kann eine vorgegebene Aktion veranlasst werden. Die vorgegebene Aktion kann das Bereitstellen eines Fehlerindikators 803 umfassen.
-
Die vorgegebene Aktion bei erkanntem Fehler kann umfassen: eine Benachrichtigung, dass ein Fehler vorliegt; ein Abbruch des Vorgangs mit oder ohne einer Alarmnotifikation; ein Durchführen eines erneuten Leseversuchs; ein Erhöhen eines Fehlerzählers und ein Vergleich des Zählerstands mit einer Abbruch- oder Alarmbedingung, etc.