DE102015113414A1 - Fehlerkorrektur unter Verwendung von WOM-Codes - Google Patents

Fehlerkorrektur unter Verwendung von WOM-Codes Download PDF

Info

Publication number
DE102015113414A1
DE102015113414A1 DE102015113414.4A DE102015113414A DE102015113414A1 DE 102015113414 A1 DE102015113414 A1 DE 102015113414A1 DE 102015113414 A DE102015113414 A DE 102015113414A DE 102015113414 A1 DE102015113414 A1 DE 102015113414A1
Authority
DE
Germany
Prior art keywords
bits
memory cells
code
check bits
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102015113414.4A
Other languages
English (en)
Other versions
DE102015113414B4 (de
Inventor
Thomas Kern
Prof. Dr. Gössel Michael
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102015113414.4A priority Critical patent/DE102015113414B4/de
Priority to US15/232,323 priority patent/US10133626B2/en
Priority to CN201610658775.7A priority patent/CN106469099B/zh
Publication of DE102015113414A1 publication Critical patent/DE102015113414A1/de
Application granted granted Critical
Publication of DE102015113414B4 publication Critical patent/DE102015113414B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C17/00Read-only memories programmable only once; Semi-permanent stores, e.g. manually-replaceable information cards
    • G11C17/14Read-only memories programmable only once; Semi-permanent stores, e.g. manually-replaceable information cards in which contents are determined by selectively establishing, breaking or modifying connecting links by permanently altering the state of coupling elements, e.g. PROM
    • G11C17/146Write once memory, i.e. allowing changing of memory content by writing additional bits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/033Theoretical methods to calculate these checking codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming codes
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C2029/4402Internal storage of test result, quality data, chip identification, repair information
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Read Only Memory (AREA)

Abstract

Es wird ein Verfahren vorgeschlagen zum Speichern von Bits in Speicherzellen eines Speichers, bei dem in zwei aufeinanderfolgenden Schreibvorgängen erste und zweite Wits unter einer gleichen Adresse in gleiche Speicherzellen geschrieben werden, ohne dass die Speicherzellen nach dem ersten Schreibvorgang gelöscht werden, wobei erste Prüfbits in weitere erste Speicherzellen und zweite Prüfbits in weitere zweite Speicherzellen gespeichert werden. Weiterhin wird eine entsprechende Vorrichtung angegeben.

Description

  • Der hier beschriebene Ansatz betrifft insbesondere ein Speichern von Daten in adressierbaren Speichern.
  • Beispielsweise werden die Daten in mindestens zwei aufeinanderfolgenden Schreibvorgängen unter einer Adresse in den Speicher geschrieben, ohne dass es notwendig wird, die in einem ersten Schreibvorgang in den Speicher geschriebenen und in Speicherzellen des Speichers als Zustände gespeicherte Daten zu löschen, wenn in einem zweiten Schreibvorgang, der auf den ersten Schreibvorgang folgt, Daten in den Speicher geschrieben werden.
  • Es werden dabei insbesondere solche Speicher betrachtet, die Speicherzellen aufweisen, die als Zustände mindestens einen ersten Wert und einen zweiten Wert annehmen können, wobei der erste Wert von dem zweiten Wert verschieden ist. Der erste Wert wird hier beispielhaft mit 0 und der zweite Wert beispielhaft mit 1 bezeichnet.
  • Nachfolgend wird beispielhaft davon ausgegangen, dass die Speicherzelle den Zustand 0 hat, wenn sie den Wert 0 aufweist und dass sie den Zustand 1 hat, wenn sie den Wert 1 aufweist. Diese Zuordnung ist beispielhaft und könnte auch umgekehrt definiert sein.
  • Die Speicherzelle kann, wenn sie anfänglich in dem Zustand 0 ist, nachfolgend in diesem Zustand 0 verbleiben, wenn der Wert 0 geschrieben wird. Entsprechend kann die Speicherzelle von dem Zustand 0 in den Zustand 1 wechseln, wenn der Wert 1 geschrieben wird.
  • Befindet sich die Speicherzelle in dem Zustand 1, ist es in diesem Beispiel nicht möglich, dass sie mittels eines Schreibvorgangs den Wert 0 erhält und in den Zustand 0 wechselt. Sofern sich die Speicherzelle in dem Zustand 1 befindet kann nur ein Wert 1 geschrieben werden mit dem Ergebnis, dass die Speicherzelle in dem Zustand 1 verbleibt.
  • Hierbei sei angemerkt, dass ein Schreiben der Speicherzelle einem Programmieren der Speicherzelle bzw. des Speichers (der die Speicherzelle umfasst) entspricht.
  • Weiterhin ist bei den betrachteten Speichern ein gemeinsames Löschen von Speicherzellen eines Speicherbereiches bekannt. Hierbei werden die Speicherzellen des Speicherbereichs in den Zustand 0 überführt.
  • Beispiele für die hier behandelten Speicher sind sogenannte Flash-Speicher.
  • Es ist für eine Vielzahl unterschiedlicher Typen von Speichern möglich,
    • – in einem ersten Schreibvorgang auf einen gelöschten Speicherbereich (also einen Speicherbereich, in dem alle Speicherzellen den Zustand 0 haben) beliebige Speicherzellen mit dem Wert 0 oder dem Wert 1 zu beschreiben, so dass diese Speicherzellen erfolgreich in den diesem Wert entsprechenden Zustand 0 oder 1 wechseln und
    • – in einem sich anschließenden zweiten Schreibvorgang diejenigen Speicherzellen mit dem Wert 0 oder dem Wert 1 zu beschreiben, die nach dem ersten Schreibvorgang noch in dem Zustand 0 sind.
  • Allerdings können diejenigen Speicherzellen, in die im ersten Schreibvorgang der Wert 1 geschrieben wurde, in dem zweiten Schreibvorgang nur noch mit dem Wert 1 beschrieben werden. Sofern diese Speicherzellen zwischenzeitlich nicht gelöscht wurden, können sie von dem Zustand 1 nicht durch Schreiben des Wertes 0 in den Zustand 0 wechseln.
  • Um Speicherzellen solcher Speicher effizient in mehreren (t mit t ≥ 2) aufeinanderfolgenden Schreibvorgängen erfolgreich zu beschreiben, ohne dass zwischendurch die Speicherzellen gelöscht werden müssten, werden sogenannte WOM-Codes (WOM: Write Once Memory, einmaliges Schreiben des Speichers) verwendet. Solche WOM-Codes sind beispielsweise bekannt aus [Rivest, R.; Shamir, A.: „How to Reuse a ,Write-Once'-Memory", Information and Control, Vol. 55, Nos. 1-3, Seiten 1 bis 19, 1982] oder aus US 4,691,299 .
  • Ein WOM-Code kann durch Parameter (NW, nW, t) beschrieben sein, wobei
  • NW
    eine Anzahl von Wits (auch bezeichnet als Nutzdatenwits) eines Blocks,
    nW
    eine Anzahl der Datenbits (auch bezeichnet als Nutzdatenbits oder Bits) des Blockes, die als ein Block von NW, Wits codiert werden, und
    t
    eine Anzahl der Schreibvorgänge, bei denen nW Datenbits codiert als NW Wits in den Speicher geschrieben werden können bezeichnen.
  • Ein WOM-Code kann eingesetzt werden, um Daten so zu transformieren bzw. zu codieren, dass sie in aufeinanderfolgenden Schreibvorgängen in einen Speicher geschrieben bzw. überschrieben werden können, ohne dass zuvor in dem Speicher abgespeicherte Daten gelöscht werden müssen.
  • Beispielhaft wird (zunächst) davon ausgegangen, dass kein Fehler aufgetreten ist.
  • Die zu speichernden Datenbits werden in Blöcke von jeweils nW Bits eingeteilt. Ist beispielsweise nW = 11, erstreckt sich ein erster Block von dem ersten Bit bis einschließlich zu dem elften Bit, ein zweiter Block umfasst die Bits 12 bis 22, usw.
  • Alternativ kann der erste Block beispielsweise die Bits 1 bis 5 und 12 bis 17 enthalten. Der zweite Block könnte in diesem Beispiel die Bits 6 bis 11 und 18 bis 22 enthalten.
  • Insoweit ist es nicht erforderlich, dass die nW = 11 Bits zueinander (logisch und/oder physikalisch) benachbart angeordnet sind. So können beliebige Bitkombinationen von jeweils n = 11 Bits einen Block bilden. Es ist lediglich gefordert, dass verschiedene Blöcke keine gemeinsamen Bits aufweisen.
  • Ist beispielsweise nW = 2, können das 1. Bit und das 2. Bit einen ersten Block, das 3. Bit und das 4. Bit einen zweiten Block, das 5. Bit und das 6. Bit einen dritten Block, das 7. Bit und das 8. Bit einen vierten Block usw. bilden. Es ist auch möglich, dass das 1. Bit und das 3. Bit den ersten Block, das 2. Bit und das 4. Bit den zweiten Block, das 5. Bit und das 7. Bit den dritten Block, das 6. Bit und das 8. Bit den vierten Block usw. bilden. Auch andere Bit-Kombinationen können zur Blockbildung genutzt werden.
  • Nachfolgend wird der übersichtlichen Darstellung halber beispielhaft angenommen, dass für n = 2 das 1. Bit und das 2. Bit den ersten Block, das 3. Bit und das 4. Bit den zweiten Block, das 5. Bit und das 6. Bit den dritten Block usw. bilden.
  • Ist die Anzahl der Bits ungerade, so kann beispielsweise ein zusätzliches Bit mit einem konstanten Wert hinzugefügt werden.
  • Ein Block von nW Nutzdatenbits wird durch einen WOM-Code in einen Block von NW Nutzdatenwits transformiert, ehe er in den Speicher geschrieben wird. Beim Auslesen wird ein Block von NW Nutzdatenwits in nW Nutzdatenbits zurück transformiert. Dabei gilt NW > nW.
  • Sollen zwei nW-Tupel
    Figure DE102015113414A1_0002
    von Nutzdatenbits beispielsweise des ersten Blocks von nW Nutzdatenbits in zwei aufeinanderfolgenden Schreibvorgängen in dem Speicher gespeichert werden, werden sowohl die ersten nW Nutzdatenbits x1 entsprechend dem verwendeten WOM-Code in NW erste Nutzdatenwits
    Figure DE102015113414A1_0003
    als auch die zweiten Nutzdatenbits x2 in zweite Nutzdatenwits
    Figure DE102015113414A1_0004
    transformiert, wobei
    Figure DE102015113414A1_0005
    gelten.
  • Die Komponentern
    Figure DE102015113414A1_0006
    der NW Nutzdatenwits wie die Komponenten
    Figure DE102015113414A1_0007
    der nW Nutzdatenbits nehmen hier binare Werte an.
  • Bei Verwendung eines WOM-Codes werden die Komponenten der Nutzdatenwits als ”Wits” anstelle von ”Bits” bezeichnet. Bei den Wits handelt es sich um die binären Werte, die in den aufeinanderfolgenden Schreibvorgängen in die Speicherzellen geschrieben und überschrieben werden können.
  • Es ist auch möglich, dass im Falle von multi-level Speicherzellen, deren Zustände mehr als zwei Werte annehmen können, die Wits mehr als zwei Werte aufweisen können. In so einem Fall wären die Wits anstelle binärer Werte demnach Multi-Level-Werte.
  • Stimmen im ersten Schreibvorgang und im zweiten Schreibvorgang die zu speichernden nW Nutzdatenbits x1 und x2 des betrachteten Blocks (hier des ersten Blocks) von nW Nutzdatenbits überein, werden sie mit der gleichen Funktion f1 in jeweils gleiche N Nutzdatenwits y2 = f1(x2) = f1(x1) transformiert. Diese Nutzdatenwits werden in NW Speicherzellen gespeichert.
  • Stimmen im ersten und im zweiten Schreibvorgang die zu speichernden nW Nutzdatenbits x1 und x2 des betrachteten Blocks (hier des ersten Blocks) von nW Nutzdatenbits nicht überein, werden die im ersten Schreibvorgang in den Speicher zu schreibenden NW Nutzdatenwits y1 aus den ersten nW Nutzdatenbits x1 gemäß der Beziehung y1 = f1(x1) gebildet, wohingegen die im zweiten Schreibvorgang zu schreibenden NW Nutzdatenwits y2 gemäß der Beziehung y2 = f2(x2) bestimmt werden, wobei f1 ≠ f2 gilt.
  • Die Funktionen f1 und f2 sind so definiert, dass gilt:
    Figure DE102015113414A1_0008
    gilt, wobei ⋁ die logische Disjunktion mit 0 ⋁ 0 = 0, 1 ⋁ 0 = 0 ⋁ 1 = 1 ⋁ 1 = 1 ist.
  • Aus Gleichung (3) ist erkennbar, dass ein Nutzdatenwit y 2 / i im zweiten Schreibvorgang nur dann gleich 0 sein kann, wenn auch y 1 / i im ersten Schreibvorgang gleich 0 ist.
  • Ist nicht bekannt oder nicht festgelegt, ob x1 = x2 oder x1 ≠ x2 ist, so kann definiert werden: y2 = fi₂(x2), (4) wobei i2 = 1 für x2 = x1 oder für x1 = 0 und i2 = 2 für x1 ≠ x2 mit x2 ≠ 0 ist.
  • Nachfolgend wird beispielhaft ein WOM-Code mit nW = 2 Bits und NW = 3 Wits erläutert.
  • Tupel x1, x2 von Nutzdatenbits können durch die Funktionen f1 und f2 in Tripel von Nutzdatenwits y 1 / 1, y 1 / 2, y 1 / 3 = f1(x1, x2) und y 2 / 1, y 2 / 2, y 3 / 2 = f2(x1, x2) transformiert werden, gemäß folgender Tabelle:
    Figure DE102015113414A1_0009
  • In einem ersten Schreibvorgang werden entsprechend der Funktion f1 zwei erste Nutzdatenbits x1, x2 eines ersten Blocks in einen Block aus drei ersten Nutzdatenwits transformiert. Die drei Nutzdatenwits werden unter einer Adresse α in drei Speicherzellen gespeichert.
  • In einem darauffolgenden zweiten Schreibvorgang werden zwei zweite Nutzdatenbits x ' / 1, x ' / 2 des ersten Blocks in drei zweite Nutzdatenwits transformiert und die gebildeten drei Nutzdatenwits werden unter der gleichen Adresse α in den drei Speicherzellen gespeichert, in denen bereits die drei ersten Nutzdatenwits gespeichert wurden, ohne dass diese Speicherzellen zuvor gelöscht werden müssten.
  • Gilt x1, x2 = x ' / 1, x ' / 2, werden sowohl die ersten drei Nutzdatenwits als auch die zweiten drei Nutzdatenwits unter Verwendung der Funktion f1 gebildet, und die im ersten Schreibvorgang in die drei Speicherzellen geschriebenen drei Nutzdatenwits werden mit den gleichen Werten überschrieben. Die drei Speicherzellen bleiben somit unverändert.
  • Gilt x1, x2 = 0, 0, werden sowohl die ersten drei Nutzdatenwits als auch die zweiten drei Nutzdatenwits unter Verwendung der Funktion f1 gebildet, da f1(0, 0) = 0, 0, 0 ist und der Wert 0, 0, 0 von einem beliebigen Wert f1(x ' / 1, x ' / 2) = y ' / 1, y ' / 2, y ' / 3 fehlerfrei überschrieben werden kann. Prinzipiell ist es auch möglich, den Wert 0, 0, 0 mit f2(x ' / 1, x ' / 2) zu überschreiben; vorzugsweise kann jedoch die Funktion f1(x ' / 1, x ' / 2) eingesetzt werden, um insgesamt weniger 1-Werte in den Speicher zu schreiben.
  • Gilt x1, x2 ≠ x ' / 1, x ' / 2, werden die ersten drei Nutzdatenwits mit der Funktion f1 aus x1, x2 gebildet, während die zweiten drei Nutzdatenwits mit der Funktion f2 aus x ' / 1, x ' / 2 gebildet werden. Die im ersten Schreibvorgang gebildeten Nutzdatenwits werden in drei Speicherzellen geschrieben, und im zweiten Schreibvorgang werden die zweiten drei Nutzdatenwits in die gleichen drei Speicherzellen geschrieben. Durch die Codierung der Nutzdatenbits in Nutzdatenwits entsprechend dem in der vorstehenden Tabelle gezeigten WOM-Code ist sichergestellt, dass in dem zweiten Schreibvorgang nur dann der Wert 0 in eine Speicherzelle zu schreiben ist, wenn in dem ersten Schreibvorgang bereits der Wert 0 in diese Speicherzelle geschrieben wurde.
  • Sollen beispielsweise in dem ersten Schreibvorgang die Nutzdatenbits x1, x2 = 0, 1 gespeichert werden, werden sie entsprechend der obigen Tabelle durch die Funktion f1 in f1(0, 1) = 0, 0, 1 transformiert und die Nutzdatenwits 0, 0, 1 werden unter einer Adresse α in drei Speicherzellen Z1, Z2, Z3 als Zustände z1 = 0, z2 = 0, z3 = 1 gespeichert.
  • In einem zweiten Schreibvorgang sollen beispielhaft die Nutzdatenbits x ' / 1, x ' / 2 = 1, 0 gespeichert werden. Da x ' / 1, x ' / 2 = 1,0 ≠ 0,1 = x1, x2 gilt und die Nutzdatenbits des ersten Schreibvorganges verschieden von den im zweiten Schreibvorgang zu speichernden Nutzdatenbits sind, werden die Nutzdatenbits 1,0 durch die Funktion f2 in Nutzdatenwits f2(1, 0) = 0, 1, 1 transformiert und in den Speicherzellen Z1, Z2, Z3 als Zustände z1 = 0, z2 = 1, z3 = 1 gespeichert. Das ist problemlos möglich, weil in dem zweiten Schreibvorgang keine Speicherzelle, die den Wert 1 hat mit einem Wert 0 überschrieben werden muss. Anders ausgedrückt gilt f1(0, 1) ⋁ f2(1, 0) = (0, 0, 1) ⋁ (0, 1, 1) = = 0 ⋁ 0, 0 ⋁ 1, 1 ⋁ 1 = =0, 1, 1 = = f2(1, 0).
  • In einem weiteren Beispiel sollen in dem ersten Schreibvorgang die Nutzdatenbits x1, x2 = 0, 1 gespeichert werden. Es wird eine Transformation gemäß der Tabelle mittels der Funktion f1 in f1(0, 1) = 0, 0, 1 durchgeführt.
  • Sollen in dem zweiten Schreibvorgang die Nutzdatenbits x ' / 1, x ' / 2 = 0, 1 gespeichert werden, die identisch zu den im ersten Schreibvorgang abgelegten Nutzdatenbits sind, werden auch in dem zweiten Schreibvorgang die Nutzdatenbits x ' / 1, x ' / 2 = 0, 1 durch die Funktion fi₂ = f1 in f1(0, 1) = 0, 0, 1 transformiert und in die Speicherzellen Z1, Z2, Z3 geschrieben. Die Zustände z1 = 0, z2 = 0, z3 = 1 bleiben unverändert.
  • Sind in dem zweiten Schreibvorgang die Nutzdatenbits x ' / 1, x ' / 2 zu speichern, dann ist anhand der Zustände z1, z2, z3 der Speicherzellen Z1, Z2, Z3 festzustellen, ob die in dem ersten Schreibvorgang gespeicherten Datenbits x1, x2 gleich x ' / 1, x ' / 2 sind oder nicht. Nach dem ersten Schreibvorgang sind die entsprechenden Nutzdatenwits als Zustände z1, z2, z3 gespeichert und es gilt x1 = z1 ⊕ z2 und x2 = z2 ⊕ z3. (5)
  • Weiterhin sind die aus den in den Speicherzellen gespeicherten Zuständen berechneten Datenbits x1, x2 mit den im zweiten Schreibvorgang zu speichernden Datenbits x ' / 1, x ' / 2 zu vergleichen. Ergibt dieser Vergleich, dass die Datenbits, die im ersten Schreibvorgang zu speichern sind, gleich den Datenbits sind, die im zweiten Schreibvorgang zu speichern sind, werden die Datenbits x ' / 1, x ' / 2 mittels der Funktion f1 in Nutzdatenwits transformiert und als Nutzdatenwits gespeichert. Ergibt dieser Vergleich hingegen, dass die Datenbits, die im ersten Schreibvorgang zu speichern sind, ungleich den Datenbits sind, die im zweiten Schreibvorgang zu speichern sind, werden die Datenbits x ' / 1, x ' / 2 mittels der Funktion f2 in Nutzdatenwits transformiert und als Nutzdatenwits gespeichert.
  • In dem beschriebenen Beispiel können zweimal je 2 Bits codiert in 3 Wits in aufeinanderfolgenden Schreibvorgängen gespeichert werden. Ohne eine solche Transformation wäre hierfür eine Speicherplatz von 4 Bits erforderlich.
  • Die Transformation der Bits in Wits und die Transformation der Wits in Bits kann wie folgt dargestellt werden:
    Figure DE102015113414A1_0010
  • Neben dem in der vorstehenden Tabelle beispielhaft dargestellten WOM-Code sind weitere WOM-Codes bekannt. Beispielsweise könnten mittels eines WOM-Codes 11 Datenbits in 23 Datenwits transformiert werden, so dass dreimal 11 Bits als 23 Wits codiert und in einen Speicher geschrieben werden können, ohne dass der Speicher gelöscht werden muss.
  • Der hier beschriebene Ansatz ist insbesondere für beliebige WOM-Codes anwendbar.
  • In Speichern treten permanente und/oder transiente Fehler auf, die Werte von Zuständen der Speicherzellen verändern können. Es ist vorteilhaft, derartige Fehler zu erkennen und/oder zu korrigieren.
  • Bei einem Flash-Speicher tritt beispielsweise der Effekt auf, dass mit zunehmendem Alter des Speichers beim Löschen von Speicherblöcken einzelne Bits nicht mehr auf 0 gelöscht werden, sondern trotz des Löschvorganges im Zustand 1 verbleiben.
  • Fehlererkennende oder fehlerkorrigierende WOM-Codes sind beispielsweise bekannt aus US 2013/0091402 A1 . Dabei werden sowohl die zu speichernden Nutzdatenbits als auch die zur Fehlererkennung erforderliche Redundanzinformation als WOM-codierte Wits dargestellt.
  • Weiterhin ist es bei bekannten fehlererkennenden oder fehlerkorrigierenden WOM-Codes von Nachteil, dass im Falle eines Adressenfehlers anstelle des gewünschten Wortes ein anderes Wort aus dem Speicher gelesen wird, das jedoch nicht als fehlerhaft erkannt werden kann, da es ein gültiges Codewort ist, das unter einer anderen (hier fehlerhaft bestimmten) Adresse gespeichert ist.
  • Eine Aufgabe besteht somit darin, die vorstehend genannten Nachteile zu überwinden. Insbesondere kann mit den hier beschriebenen Lösungen die Fehlererkennung und/oder Fehlerkorrektur verbessert werden. Beispielsweise kann die Fehlererkennung und/oder Fehlerkorrektur von Speicherfehlern verbessert werden, wobei in einem Speicher gespeicherte Daten zumindest teilweise mit WOM-Codes codiert sind.
  • 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 vorgeschlagen zum Speichern von Bits in Speicherzellen eines Speichers,
    • – bei dem in zwei aufeinanderfolgenden Schreibvorgängen erste und zweite Wits unter einer gleichen Adresse in gleiche Speicherzellen geschrieben werden, ohne dass die Speicherzellen nach dem ersten Schreibvorgang gelöscht werden,
    • – wobei erste Prüfbits in weitere erste Speicherzellen und zweite Prüfbits in weitere zweite Speicherzellen gespeichert werden.
  • Eine Weiterbildung besteht darin, dass
    • – anhand der ersten Wits und der ersten Prüfbits ein erstes Codewort eines ersten Fehlercodes bestimmt wird,
    • – anhand der zweiten Wits und der zweiten Prüfbits ein zweites Codewort eines zweiten Fehlercodes bestimmt wird.
  • Die hier erläuterten Schritte des Verfahrens können insbesondere von einem elektronischen Gerät durchgeführt werden. Bei dem elektronischen Gerät kann es sich um Speichergeräte, insbesondere um solche, die mindestens einen Speicher umfassen, handeln. Das elektronische Gerät kann eine Verarbeitungseinheit aufweisen, z. B. einen Prozessor oder einen (Mikro-)Controller. Das elektronische Gerät kann eine Speicherverwaltung (Speichermanagement) sein oder eine solche umfassen. Das elektronische Gerät kann ein Gerät sein, das zumindest teilweise einen WOM-Code verwendet.
  • Hierbei sei angemerkt, dass es sich bei dem Speicher um einen adressierbaren Speicher handelt. Beispielsweise kann ein Teilbereich des Speichers umfassend eine vorgegebene Anzahl von Bits über eine Adresse selektiert werden. Unter dieser Adresse (bzw. an dieser Adresse) können mehrere Bits gespeichert und gelesen werden.
  • Der hier erwähnte Speicher kann ein einzelner physikalischer Speicher oder mehrere physikalische Speicher umfassen. Insbesondere kann der Speicher physikalische Speicher unterschiedlichen Typs aufweisen. Es ist eine Option, dass der Speicher über ein (ggf. gemeinsames) Speichermanagement adressiert werden kann, ohne dass es auf die darunterliegende physikalische Struktur ankommt. Gemäß dieser Option kann das Speichermanagement den Dienst einer Speicherverwaltung bereitstellen, wobei von dem Speichermanagement unterschiedliche physikalische Speicher (gleichen oder unterschiedlichen Typs) genutzt werden können.
  • Weiterhin sei angemerkt, dass die Formulierung „bei dem in zwei aufeinanderfolgenden Schreibvorgängen erste und zweite Wits unter einer gleichen Adresse in gleiche Speicherzellen geschrieben werden, ohne dass die Speicherzellen nach dem ersten Schreibvorgang gelöscht werden” auf die Eigenschaft eines WOM-Codes (WOM steht für „Write Once Memory”, auf Deutsch sinngemäß: das Schreiben des Speichers ist nur in einer Richtung möglich) abstellt, demgemäß ein mehrfaches (mindestens zweimaliges) Schreiben einer Information in einen vormals gelöschten Speicherbereich möglich ist, ohne dass der Speicher zwischen den mehrmaligen Schreibvorgängen gelöscht werden muss. Hier liegt die Annahme zugrunde, dass ein Zustandswechsel eines Bits von „gelöscht” (z. B. Wert 0) in „geschrieben” (z. B. Wert 1) möglich ist, der umgekehrte Weg jedoch nur über einen Löschvorgang erreicht werden kann.
  • Bei den Wits handelt es sich um transformierte (Nutzdaten-)Bits. Die eigentlichen Nutzdaten (auch bezeichnet als Daten, Bits, Payload) werden anhand des WOM-Codes in Wits (auch bezeichnet als Datenwits oder Nutzdatenwits) transformiert. Die Wits werden gespeichert in (mindestens zwei) aufeinanderfolgenden Schreibvorgängen auf gemeinsame Speicherzellen oder in einem Schreibvorgang in einen mit binären Werten vorbelegten Speicher, in dem beispielsweise nach dem Löschen nicht alle Speicherzellen den Wert 0 aufweisen (der Löschvorgang insoweit also nicht erfolgreich für alle Speicherzellen durchgeführt werden konnte).
  • Somit erlaubt der hier vorgestellte Ansatz eine Speicherung von Nutzdaten, wobei beispielsweise eine erste Sequenz von ersten Datenbits entsprechend dem WOM-Code in erste Datenwits codiert wird und eine zweite Sequenz von Datenbits entsprechend dem WOM-Code in zweite Datenwits codiert wird, wobei eine nichtleere Teilmenge der ersten Datenwits bei einem ersten Schreibvorgang und eine nichtleere Teilmenge der zweiten Datenwits bei einem zweiten Schreibvorgang in gleiche Speicherzellen für die Speicherung der Datenwits geschrieben werden kann, ohne dass diese gleichen Speicherzellen nach dem Schreiben der ersten Datenwits gelöscht werden müssten. Unter Verwendung der ersten Datenwits werden die ersten Prüfbits des ersten Fehlercodes C1 gebildet, die in die ersten weiteren Speicherzellen geschrieben werden. Unter Verwendung der zweiten Datenwits werden die zweiten Prüfbits des zweiten Fehlercodes C2 gebildet, die in die weiteren zweiten Speicherzellen geschrieben werden. Die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen sind optional (zumindest teilweise) voneinander verschieden, wenn eine Bitposition der ersten Prüfbits einen ersten Wert aufweist und die gleiche Bitposition der zweiten Prüfbits einen zweiten Wert aufweist, der von dem ersten Wert verschieden ist und der erste Wert durch den zweiten Wert nicht überschrieben werden kann, ohne dass zuvor der erste Wert gelöscht wird oder wenn die Anzahl der zweiten Prüfbits größer ist als die Anzahl der ersten Prüfbits.
  • Es wird also auch ein Verfahren vorgeschlagen zum Speichern von codierten Nutzdatenbits in Speicherzellen (eines adressierbaren Speichers), dessen Speicherzellen mindestens zwei mit 0 und 1 bezeichnete Werte als Zustände annehmen können. Den Zustand 0 hat eine Speicherzelle nach einem fehlerfreien bzw. erfolgreichen Löschvorgang.
  • Ist die Speicherzelle im Zustand 0, so führt das Einschreiben eines Werts 0 dazu, dass die Speicherzelle im Zustand 0 bleibt und das Einschreiben eines Werts 1 dazu, dass die Speicherzelle in den Zustand 1 wechselt.
  • Ist die Speicherzelle im Zustand 1, so führt das Einschreiben eines Werts 0 dazu, dass die Speicherzelle im Zustand 1 bleibt und das Einschreiben eines Werts 1 dazu, dass die Speicherzelle in den Zustand 1 bleibt. Somit ist ohne vorheriges Löschen ein Zustandswechsel der Speicherzelle von 1 nach 0 nicht möglich.
  • Bei einem Schreibvorgang sind mindestens zwei Blöcke von Nutzdatenbits vorhanden, die vor dem Abspeichern vorzugsweise blockweise in Blöcke von Wits unter Verwendung mindestens eines WOM-Codes transformiert werden und zwar in Abhängigkeit von den Zuständen, die die Speicherzellen vor dem Schreibvorgang aufweisen. Beispielsweise werden basierend auf den (Blöcken von Nutzdatenbits) mindestens 6 Wits bestimmt.
  • Beispielsweise werden in zwei aufeinanderfolgenden Schreibvorgängen in einem ersten Schreibvorgang erste Blöcke von N ersten Wits unter einer Adresse α in den Speicher geschrieben, dann werden in dem ersten Schreibvorgang m1 erste Prüfbits c1 = c 1 / 1, ..., c 1 / m1 gebildet, so dass die N ersten Wits und die m1 gebildeten ersten Prüfbits c1 Bits eines Codewortes des ersten Fehlercodes C1 mindestens der Länge N + m1 sind, wobei insbesondere N > m1 gilt.
  • Mindestens eines der ersten Prüfbits kann von einem Wit eines ersten Blockes von ersten Wits und von einem Wit eines zweiten Blockes von ersten Wits abhängen.
  • In einem zweiten Schreibvorgang werden unter der gleichen Adresse α zweite Blöcke von N zweiten Wits in den Speicher geschrieben, dann werden in dem zweiten Schreibvorgang m2 zweite Prüfbits c2 = c 2 / 1, ..., c 2 / m2 gebildet, so dass die N zweiten Wits und die m2 zweiten Prüfbits c2 Bits eines Codewortes des zweiten Fehlercodes C2 mindestens der Länge N + m2 sind, wobei insbesondere N > m2 gilt.
  • Vorzugsweise hängt mindestens eines der zweiten Prüfbits von einem Wit eines ersten Blockes von zweiten Wits und von einem Wit eines zweiten Blockes von zweiten Wits ab.
  • Findet sowohl der erste als auch der zweite Schreibvorgang unter der gleichen Adresse α statt, werden die N ersten Wits, die in dem ersten Schreibvorgang unter der Adresse α in den Speicher geschrieben werden und die N zweiten Wits, die in dem zweiten Schreibvorgang unter der gleichen Adresse α in den Speicher geschrieben werden in den gleichen Speicherzellen des Speichers als Zustände gespeichert, ohne dass hierfür die Speicherzellen mit der Adresse α nach dem ersten Schreibvorgang gelöscht werden müssen.
  • Findet sowohl der erste als auch der zweite Schreibvorgang unter der gleichen Adresse α statt, wobei die Speicherzellen mit der Adresse α nach dem ersten Schreibvorgang nicht gelöscht werden, so werden die m1 ersten Prüfbits c1 in dem ersten Schreibvorgang unter der Adresse α in die m1 weiteren ersten Speicherzellen zum Speichern der Prüfbits c1 geschrieben und die m2 zweiten Prüfbits c2 werden unter der Adresse α in die m2 weiteren zweiten Speicherzellen zum Speichern der Prüfbits c2 geschrieben.
  • Die weiteren zweiten Speicherzellen können von den weiteren ersten Speicherzellen wenigstens teilweise verschieden sein. Dies gilt z. B. wenn m2 > m1 gilt oder wenn die Anzahl der Positionen (Komponenten) der zweiten Prüfbits, die einen Wert 0 annehmen, während die entsprechenden Positionen (Komponenten) der ersten Prüfbits den Wert 1 annehmen, größer als ein Schwellenwert S1 ist, wobei S1 ≥ 0 gilt.
  • Für i = 1, 2 weist der Code Ci beispielsweise einen Codeabstand di ≥ 2 auf, Der Code Ci kann zur Fehlererkennung von Fehlern von aus dem Speicher ausgelesenen Wits eingesetzt werden, wenn di = 2 gilt und der Code Ci kann zur Fehlererkennung oder Fehlerkorrektur von Fehlern in aus dem Speicher ausgelesenen Wits verwendet werden, wenn di > 2 ist. Insbesondere ist es möglich, dass fehlerhafte Wits korrigiert werden, wenn der Code Ci zur Fehlerkorrektur verwendet wird. In diesem Fall können die Wits nach der Fehlerkorrektur in die entsprechenden Nutzdatenbits gemäß dem verwendeten WOM-Code zurücktransformiert werden.
  • Eine andere Weiterbildung ist es, dass die Anzahl der ersten Prüfbits kleiner ist als die Anzahl der ersten Wits.
  • Auch ist es eine Ausgestaltung, dass die ersten Wits und die zweiten Wits basierend auf Nutzdatenbits mittels mindestens eines WOM-Codes bestimmt werden.
  • Ferner ist es eine Ausgestaltung, dass den Nutzdatenbits mindestens ein Invertierungsbit hinzugefügt wird, wobei dem mindestens einem Invertierungsbit eine Teilmenge von Nutzdatenbits zugeordnet ist.
  • Eine andere Ausgestaltung besteht darin, dass das mindestens eine Invertierungsbit einen ersten Wert annimmt, wenn die dem Invertierungsbit zugeordneten Nutzdatenbits nicht invertiert sind und das Invertierungsbit einen zweiten davon verschiedenen Wert annimmt, wenn die dem Invertierungsbit zugeordneten Nutzdatenbits invertiert sind.
  • Noch eine Ausgestaltung ist es, dass unter Verwendung der Nutzdatenbits und des Invertierungsbits die jeweiligen Wits gebildet werden, wobei die dem mindestens einen Invertierungsbit zugeordneten Nutzdatenbits nicht invertiert werden, wenn das Invertierungsbit den ersten Wert aufweist und wobei die dem mindestens einen Invertierungsbit zugeordneten Nutzdatenbits invertiert werden, wenn das Invertierungsbit den zweiten Wert aufweist.
  • Somit sind insbesondere die Wits eines Blockes von Wits für unterschiedliche Werte des mindestens einen Invertierungsbits unterschiedlich.
  • Eine Weiterbildung ist es, dass bei dem ersten Schreibvorgang die ersten Prüfbits so bestimmt sind, dass die aus den Nutzdatenbits und dem mindestens einem Invertierungsbit bestimmten ersten Wits und die ersten Prüfbits Bits des ersten Codewortes sind und wobei bei dem zweiten Schreibvorgang unter der gleichen Adresse die zweiten Prüfbits so bestimmt sind, dass die aus den Nutzdatenbits und dem mindestens einem Invertierungsbit bestimmten zweiten Wits und die zweiten Prüfbits Bits des zweiten Codewortes sind.
  • Hierbei ist der Wert des mindestens einen Invertierungsbits in dem ersten Schreibvorgang in die Bildung der ersten Wits und in die Bildung der ersten Püfbits und damit in die Fehlererkennung oder Fehlerkorrektur unter Verwendung des ersten Fehlercodes beim Auslesen der gespeicherten Werte einbezogen. Entsprechend ist der Wert des mindestens einen Invertierungsbits in dem zweiten Schreibvorgang in die Bildung der zweiten Wits und der zweiten Prüfbits und damit in die Fehlererkennung oder Fehlerkorrektur beim Auslesen der Werte aus dem Speicher unter Verwendung des zweiten Fehlercodes einbezogen.
  • Indem das mindestens eine Invertierungsbit zusammen mit den Nutzdatenbits WOM-codiert wird, wird es auch Teil der Fehlerkorrektur.
  • Eine Option besteht darin, dass die Nutzdatenbits vor dem Bilden der entsprechenden Wits dann invertiert werden, wenn die unter Verwendung der invertierten Nutzdatenbits gebildeten Wits und die zugehörigen Prüfbits mit weniger Fehlern in die entsprechenden Speicherzellen geschrieben werden können als dies unter Verwendung der nicht-invertierten Nutzdatenbits und zugehöriger Prüfbits möglich wäre.
  • Eine andere Weiterbildung ist es, dass die dem mindestens einen Invertierungsbit zugeordneten Nutzdatenbits alle Nutzdatenbits sind.
  • Noch eine Weiterbildung besteht darin, dass
    • – vor dem Schreibvorgang die in zu adressierenden Speicherzellen dort gespeicherte Daten ausgelesen werden,
    • – die ausgelesenen Daten mit den zu speichernden Daten verglichen werden,
    • – die zu speichernden Daten invertiert werden, falls die zu speichernden Daten nicht fehlerfrei in den Speicher geschrieben werden können,
    • – die ersten Wits oder die zweiten Wits basierend auf den invertierten Daten mittels des mindestens einen WOM-Codes bestimmt und in den Speicherzellen gespeichert werden.
  • Eine zusätzliche Weiterbildung ist es, dass die mittels des mindestens einen WOM-Codes codierten ersten Wits verschieden sind von den mittels des mindestens einen WOM-Codes codierten zweiten Wits.
  • Ferner ist es eine Ausgestaltung, dass mindestens eine Speicherzelle des Speichers vor dem ersten Schreiben nicht vollständig gelöscht ist, wobei basierend auf der mindestens einen nicht vollständig gelöschten Speicherzelle die ersten Wits und die zweiten Wits mittels des mindestens einen WOM-Codes codiert werden.
  • Somit kann der WOM-Code genutzt werden, um Datenbits als Wits zu codieren, obwohl einzelne Speicherzellen begründet durch den fehlerhaften oder unvollständigen Löschvorgang bereits den Wert 1 anstatt des Wertes 0 aufweisen.
  • Eine andere Weiterbildung besteht darin, dass die ersten Wits und die zweiten Wits jeweils als Blöcke organisiert sind, wobei jeder Belegung der Bits eines der Blöcke der ersten Wits durch den mindestens einen WOM-Code zwei unterschiedliche Codierungen zugeordnet sind.
  • Somit kann mindestens ein Prüfbit sowohl von einem Wit eines ersten Blockes und einem Wit eines zweiten Blockes abhängen. Der erste Block kann dabei eine Teilmenge der ersten Wits sein und der zweite Block kann eine Teilmenge der zweiten Wits sein.
  • Die jeweiligen Prüfbits können optional nicht nur aus den Wits eines einzigen Blocks bestimmt werden, sondern die Prüfbits können aus mehreren Blöcken abgeleitet werden.
  • Im vorliegenden Fall können die ersten Wits in Blöcke unterteilt sein und die ersten Prüfbits werden basierend auf Bits mehrerer Blöcke (der ersten Wits) bestimmt. Entsprechendes gilt für die zweiten Wits, die in Blöcke unterteilt sein können und für die zweiten Prüfbits, die basierend auf Bits mehrerer Blöcke (der zweiten Wits) bestimmt werden.
  • Die Nutzdatenbits werden in Nutzdatenwits transformiert. Es ist eine Option, die jeweiligen Prüfbits bei der Transformation zu berücksichtigen oder nicht zu berücksichtigen.
  • Die Prüfbits c1 und c2 werden in der Regel in zwei aufeinanderfogenden Schreibvorgängen in unterschiedlichen Speicherzellen gespeichert. Gilt jedoch beispielsweise c1 = 0, so können die Prüfbits c2 in den gleichen Speicherzellen wie die Prüfbits c1 gespeichert werden.
  • Eine Option besteht darin, auch die Prüfbits (zumindest teilweise) in Wits zu transformieren. In diesem Fall könnten die Prüfwits dann zunächst in Prüfbits rücktransformiert und mit den so erhaltenen Prüfbits die Datenwits korrigiert werden. Anschließend könnten die korrigierten Datenwits in Nutzdatenbits rücktransformiert werden.
  • Auch ist es eine Weiterbildung, dass die Anzahl der zweiten Prüfbits kleiner als die Anzahl der zweiten Wits ist.
  • Ferner ist es eine Weiterbildung, dass der erste Fehlercode ein fehlererkennender Code und/oder ein fehlerkorrigierender Code ist und bei dem der zweite Fehlercode ein fehlererkennender Code und/oder ein fehlerkorrigierender Code ist.
  • Eine Option besteht darin, dass der erste Fehlercode und der zweite Fehlercode identische Codes darstellen. Auch können erster Fehlercode und zweiter Fehlercode unterschiedliche Codes sein.
  • Eine andere Ausgestaltung ist es, dass der erste Fehlercode ein Code ist, der einen Codeabstand größer gleich drei aufweist.
  • Noch eine andere Ausgestaltung besteht darin, dass der zweite Fehlercode ein Code ist, der einen Codeabstand größer gleich drei aufweist.
  • Auch ist es eine Weiterbildung, dass die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen voneinander verschieden sind.
  • Somit können die ersten m1 Prüfbits, die unter einer Adresse α in den Speicher geschrieben werden, in die weiteren ersten Speicherzellen geschrieben werden und die zweiten m2 Prüfbits, die in dem zweiten Schreibvorgang unter der gleichen Adresse α in den Speicher geschrieben werden, können in die weiteren zweiten Speicherzellen geschrieben werden, wobei die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen voneinander verschieden sein können.
  • Insbesondere kann die Anzahl der ersten Prüfbits gleich der Anazhl der zweiten Prüfbits sein, d. h. m1 = m2.
  • Eine Weiterbildung besteht ferner darin, dass wenn kein Fehler auftritt, die ersten Wits und die ersten Prüfbits eine echte Teilmenge von Bits des ersten Codewortes sind oder dass die zweiten Wits und die zweiten Prüfbits eine echte Teilmenge von Bits des zweiten Codewortes sind oder dass sowohl die ersten Wits und die ersten Prüfbits eine echte Teilmenge der Bits des ersten Codewortes als auch die zweiten Wits und die zweiten Prüfbits eine echte Teilmenge der Bits des zweiten Codewortes sind.
  • Insbesondere ist der erste Fehlercode und der zweite Fehlercode jeweils ein systematischer Code.
  • Noch eine Weiterbildung ist es, dass die Länge des ersten Fehlercodes größer ist als die Anzahl der ersten Wits und der ersten Prüfbits und dass die Länge des zweiten Fehlercodes größer ist als die Anzahl der zweiten Wits und der zweiten Prüfbits.
  • Eine zusätzliche Weiterbildung ist es, dass anhand der ersten Wits, der ersten Prüfbits und ersten Zusatzbits das erste Codewort des ersten Fehlercodes bestimmt wird und bei dem anhand der zweiten Wits, der zweiten Prüfbits und zweiten Zusatzbits das zweite Codewort des zweiten Fehlercodes bestimmt wird.
  • Die ersten Zusatzbits basieren auf einer ersten weiteren Information und die zweiten Zusatzbits basieren auf einer zweiten weiteren Information. Die weitere Information kann z. B. umfassen: eine Indikatorinformation, eine Invertierungsinformation, eine Passwortinformation, eine Adressinformation oder eine abgeleitete Adressinformation.
  • Eine andere Ausgestaltung besteht darin, dass beim Schreiben in den Speicher und/oder beim Lesen aus dem Speicher die ersten Wits, die ersten Prüfbits und die ersten Zusatzbits das erste Codewort bilden und die zweiten Wits, die zweiten Prüfbits und die zweiten Zusatzbits das zweite Codewort bilden.
  • Ein Codewort wird insbesondere dann gebildet, wenn kein Fehler auftritt.
  • Noch eine andere Ausgestaltung ist es, dass die ersten Zusatzbits und/oder die zweiten Zusatzbits jeweils mindestens auf einer der folgenden Informationen basieren:
    • – einer Adressinformation,
    • – einer Adressinformation betreffend eine Schreibadresse oder eine Leseadresse,
    • – einer aus einer Adressinformation abgeleiteten Information,
    • – einer Identifikatorinformation,
    • – einer Passwortinformation,
    • – einer Invertierungsinformation.
  • Eine Weiterbildung ist es, dass ein Fehler in den ersten Zusatzbits erkannt und/oder korrigiert wird und/oder dass ein Fehler in den zweiten Zusatzbits erkannt und/oder korrigiert wird.
  • Insbesondere ist es eine Option, dass Fehler in den ersten Zusatzbits (nur) erkannt, jedoch nicht korrigiert werden können. Wurde ein Fehler erkannt (der nicht korrigierbar ist oder der nicht korrigiert wird), so kann eine vorgegebene Aktion eingeleitet werden. Beispielsweise kann eine (Fehler-)Meldung ausgegeben werden.
  • So könnte die Korrektur eines Adressfehlers unterbleiben, falls beim Lesezugriff bereits die falsche Adresse verwendet wurde und eine anschließende Korrektur ohne einen erneuten Lesezugriff auf die richtige Adresse ggf. sinnlos wäre.
  • Gemäß einem anderen Beispiel könnte ein Fehler in der Adressinformation, z. B. in Adressbits oder in daraus abgeleiteten Bits, erkannt und nicht korrigiert werden.
  • In einem weiteren Beispiel könnte ein Fehler in der Identifikatorinformation, z. B. in Identifikatorbits, erkannt und nicht korrigiert werden.
  • Auch ist es eine Option, dass ein Fehler in einer Kombination aus Adress- und Identifikatorinformation erkannt und nicht korrigiert werden kann.
  • Eine weitere Option besteht darin, dass nach einem Schreibvorgang, bei dem Blöcke von Wits und Prüfbits in Speicherzellen geschrieben wurden, die Zustände der Speicherzellen ausgelesen werden. Wenn eine Anzahl der Fehler in den ausgelesenen Daten einen durch den verwendeten Fehlercode nicht korrigierbaren Wert übersteigt, kann eine vorgegebene Aktion durchgeführt werden. Beispielsweise können in so einem Fall die in den Speicherzellen gespeicherten Werte gelöscht oder eine andere Adresse verwendet werden.
  • Eine Weiterbildung besteht darin, dass in den ersten weiteren Speicherzellen eine Markierung gespeichert wird, sofern die zweiten Prüfbits in den weiteren zweiten Speicherzellen gespeichert werden.
  • Falls die in dem zweiten Schreibvorgang gebildeten m2 zweiten Prüfbits in die m2 weiteren zweiten Speicherzellen geschrieben werden, die sich beispielsweise von den weiteren ersten Speicherzellen unterscheiden, in die zuvor die m1 ersten Prüfbits geschrieben wurden, werden die m1 ersten Speicherzellen in dem zweiten Schreibvorgang (bzw. zuvor oder danach) mit einer m1-stelligen Markierung überschrieben, wobei die m1-stellige Markierung keine gültige Folge von ersten Prüfbits des Codewortes des Fehlercods C1 ist.
  • Eine Ausgestaltung besteht darin, dass die Markierung eine Bitfolge ist, die keine gültige Bitfolge der ersten Prüfbits darstellt.
  • Auch ist es eine Ausgestaltung, dass ein Teilbereich des adressierbaren Speichers gelöscht wird, der die Adresse umfasst, auf den ein Schreibvorgang angewendet wurde, wenn nach dem Schreibvorgang die abzuspeichernden ersten oder zweiten Wits an dN Positionen nicht den gewünschten Zustand aufweisen und/oder wenn nach dem Schreibvorgang die ersten Prüfbits oder die zweiten Prüfbits an dP Positionen nicht den gewünschten Zustand aufweisen.
  • Noch eine Ausgestaltung ist es, dass ein zweiter Teilbereich des adressierbaren Speichers genutzt wird, wenn nach dem Schreibvorgang auf einen ersten Teilbereich die abzuspeichernden ersten oder zweiten Wits an dN Positionen nicht den gewünschten Zustand aufweisen und/oder wenn nach dem Schreibvorgang die ersten Prüfbits oder die zweiten Prüfbits an dP Positionen nicht den gewünschten Zustand aufweisen.
  • Eine andere Ausgestaltung ist es, dass der Teilbereich gelöscht wird oder der zweite Teilbereich anstelle des ersten Teilbereich genutzt wird, wenn gilt dN + dP ≥ S2, wobei S2 ein Schwellenwert ist, für den S2 ≥ 0 gilt.
  • Eine Weiterbildung besteht darin, dass die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen voneinander verschieden sind, wenn sich die ersten Prüfbits durch die zweiten Prüfbits nicht überschreiben lassen ohne dass eine vorgegebene Anzahl fehlerhafter Speicherzellen auftritt.
  • Eine Ausgestaltung ist es, dass die vorgegebene Anzahl fehlerhafter Speicherzellen größer gleich Null ist.
  • Eine andere Ausgestaltung ist es, dass die Anzahl der ersten Prüfbits größer eins ist und bei dem die Anzahl der zweiten Prüfbits größer eins ist.
  • Noch eine Ausgestaltung ist es, dass der adressierbare Speicher mindestens einen der folgenden Speichertypen umfasst:
    • – einen flüchtigen Speicher;
    • – einen nichtflüchtigen Speicher.
  • Ferner wird zur Lösung der oben angeführten Aufgabe eine Vorrichtung angegeben zum Speichern von Bits in Speicherzellen eines Speichers mit einer Verarbeitungseinheit, die derart eingerichtet ist,
    • – dass in zwei aufeinanderfolgenden Schreibvorgängen erste und zweite Wits unter einer gleichen Adresse in gleiche Speicherzellen geschrieben werden, ohne dass die Speicherzellen nach dem ersten Schreibvorgang gelöscht werden,
    • – wobei erste Prüfbits in weitere erste Speicherzellen und zweite Prüfbits in weitere zweite Speicherzellen gespeichert werden.
  • 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 eine solche umfassen.
  • Die vorstehenden Erläuterungen betreffend das Verfahren gelten für die Vorrichtung entsprechend. Die Vorrichtung kann in einer Komponente oder verteilt in mehreren Komponenten ausgeführt sein.
  • Eine Weiterbildung ist es, dass die Verarbeitungseinheit derart eingerichtet ist, dass
    • – anhand der ersten Wits und der ersten Prüfbits ein erstes Codewort eines ersten Fehlercodes bestimmt wird,
    • – anhand der zweiten Wits und der zweiten Prüfbits ein zweites Codewort eines zweiten Fehlercodes bestimmt wird.
  • Eine Ausgestaltung besteht darin, dass die Vorrichtung den Speicher umfasst, der die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen umfasst.
  • Auch ist es eine Ausgestaltung, dass der Speicher einen nichtflüchtigen Speicher und/oder einen flüchtigen Speicher umfasst.
  • Ferner wird die oben genannte Aufgabe gelöst mittels eines Systems umfassend mindestens eine der hier beschriebenen Vorrichtungen.
  • Es ist insbesondere ein Vorteil des hier beschriebenen Ansatzes, dass ein separierbarer fehlererkennender Code oder ein separierbarer fehlerkorrigierender Code zur Fehlerkorrektur und/oder Fehlererkennung effizient verwendet werden kann.
  • Ein anderer Vorteil besteht darin, dass neben den WOM-codierten Wits auch weitere Informationen (auch bezeichnet als Zusatzbits), die nicht WOM-codiert sind, in den verwendeten fehlererkennenden Code und/oder fehlerkorrigierenden Code einbezogen werden können. Beispiele für solche Informationen sind Bits einer Leseadresse oder Bits, die aus den Bits der Leseadresse abgeleitet sind, z. B. ein Zugriffsrecht, ein Passwort o. a. Hierbei ist es nicht notwendig (optional jedoch möglich), dass diese weiteren Informationen in den Speicherzellen des überwachten Speichers abgespeichert werden.
  • Zusatzbits bilden beispielsweise Bits einer Leseadresse und/oder einer Schreibadresse oder abgeleitete Bits einer Leseadresse und/oder einer Schreibadresse. Weiterhin können Zusatzbits bestimmt sein als Bits eines Passwortes oder Bits eines Zugriffsrechts. Entsprechend sind andere Beispiele zur Verwendung von Zusatzbits möglich.
  • Auch ist es ein Vorteil, dass die Anwendbarkeit fehlererkennender und/oder fehlerkorrigierender Codes für Speicher, deren Blöcke nicht vollständig gelöscht sind, verbessert wird.
  • 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:
  • 1a vollständig gelöschte Speicherzellen an einer Adresse 10011,
  • 1b eine Belegung der Speicherzellen aus 1a nach einem ersten Schreibvorgang unter Verwendung eines WOM-Codes,
  • 1c eine Belegung der Speicherzellen aus 1a nach einem zweiten Schreibvorgang unter Verwendung des gleichen WOM-Codes wie in 1b,
  • 2 Speicherzellen mit 6 Speicherzellen zur Speicherung von Wits, mit 7 Speicherzellen zur Speicherung von 7 Prüfbits eines ersten Codes C1 in einem ersten Schreibvorgang und mit 6 Speicherzellen zur Speicherung von 6 Püfbits eines zweiten Codes C2 in einem zweiten Schreibvorgang,
  • 3 Belegungen von Speicherzellen mit den Adressen 1010 und 1011, wobei die Adressbits in die Bildung der Prüfbits einbezogen sind,
  • 4 Belegungen von Speicherzellen mit der Adresse 1010 nach dem ersten Schreibvorgang, wobei die Parität der Adressbits in die Bildung der Prüfbits eingeht,
  • 5a Belegungen von Speicherzellen nach einem unvollständigen Löschvorgang,
  • 5b Belegungen der Speicherzellen aus 5a nach einem ersten Schreibvorgang, wobei die Nutzdatenbits und ein Invertierungsbit vor der Bildung von Wits invertiert wurden,
  • 6 eine beispielhafte Schaltungsanordnung zur Encodierung,
  • 7 eine beispielhafte Schaltungsanordnung zur Decodierung,
  • 8 eine beispielhafte Schaltungsanordnung, bei der die Steuerung eines Multiplexers in Abhängigkeit eines Markierungssignals der ersten Prüfbits erfolgt.
  • Fehlererkennende-, fehlerkorrigierende Codes
  • Ein fehlererkennender und/oder fehlerkorrigierender Code wird hierin auch als Fehlercode bezeichnet.
  • Ein Fehlercode C der Länge n mit k Informationsbits kann durch seine Generatormatrix G oder seine H-Matrix H beschrieben werden. Dabei sind die Generatormatrix eine (k, n)-Matrix und die H-Matrix eine (n – k, n)-Matrix. Es können k Informationsbits u1, ..., uk in n Bits eines Codewortes v = v1, ..., vn gemäß v = v1, ..., vn = [u1, ..., uk]·G = u·G bestimmt werden. Sind die Generatormatrix und die H-Matrix in systematischer Form, gilt G = (Ik, Pk, m) und H = (P T / m,k, Im) mit m = n – k. Dabei sind
  • Ik
    die k-dimensionale Einheitsmatrix,
    Im
    die m-dimensionale Einheitsmatrix,
    Pk,m
    die (k, m) Paritätsmatrix und
    P T / m,k
    die transponierte Paritätsmatrix, die durch Vertauschen von Zeilen und Spalten aus der Paritätsmatrix Pk,m gewonnen wird.
  • Im Falle eines systematischen Codes ergibt sich unmittelbar aus der G-Matrix eine mögliche H-Matrix. Weiterhin gilt für systematische Codes: v = u, c v = u·G mit u = u1, ..., uk und c = c1, ..., cm.
  • Zu den Informationsbits u1, ..., uk werden Prüfbits c1, ..., cm c1, ..., cm = [u1, ..., uk]·Pk,m hinzugefügt.
  • Ein Wort v = v1, ..., vn ist ein Codewort des Codes C, wenn
    Figure DE102015113414A1_0011
    gilt, wobei 0| hier einen m-dimensionalen Spaltenvektor bezeichnet.
  • Wird eine Matrix, hier die Matrix H, von links mit einem Vektor, hier dem Vektor v, multipliziert, so ist der Vektor v ein Zeilenvektor. Wird eine Matrix, hier die Matrix H, von rechts mit einem Vektor vT multipliziert, so ist der Vektor vT ein Spaltenvektor, wobei der Vektor vT der transponierte Spaltenvektor des Zeilenvektors v ist.
  • Ist v' = v ' / 1, ..., v ' / n = v ⊕ e = v1 ⊕ e1, ..., vn ⊕ en ein Wort, das aus einem Codewort v = v1, ..., vn durch Fehler hervorgegangen ist, wird e = e1, ..., en als Fehlervektor bezeichnet.
  • Gilt ei = 1 für i ∊ {1, ..., n}, ist v ' / i = vi ⊕ 1 = v i , und die i-te Komponente v ' / 1 ist fehlerhaft. Gilt ei = 0 für i ∊ {1, ..., n}, ist v ' / i = vi ⊕ 0 = vi , und die i-te Komponente v ' / i ist korrekt.
  • Hat der Fehlervektor e eine Anzahl von q Komponenten, die gleich 1 sind, liegt ein q-Bitfehler vor.
  • Ein Fehlersyndrom s = s1, ..., sm ist durch sT = H·v'T = H·eT bestimmt, und sT ist gleich 0|, wenn das Wort v ein Codewort ist.
  • Ist der Code C ein τ-Bitfehler erkennender Code, so ist sT ≠ 0| für alle 1, ..., τ-Bitfehler.
  • Ist der Code C ein t-Bitfehler korrigierender Code, dann ist sT verschieden, für alle verschiedenen 1, ..., t-Bitfehler.
  • Der Hamming-Abstand d(v1, v2) mit v1 = v 1 / 1, ..., v 1 / n und v2 = v 2 / 1, ..., v 2 / n ist gleich der Anzahl der Bits, in denen sich v1 und v2 unterscheiden, so dass gilt
    Figure DE102015113414A1_0012
    wobei ⊕ eine komponentenweise exklusiv-oder-Verknüpfung ist.
  • Ein Codeabstand dmin eines Codes ist gleich dem minimalen Hamming-Abstand zwischen zwei unterschiedlichen Codewörternder des Codes C. Ist der Code C ein linearer Code, so gilt dmin = min(d(vi, vj); vi, vj ∊ C; vi≠ vj) dmin = min(w(vk, vk ∊ C)), wobei
    Figure DE102015113414A1_0013
    das Hamming-Gewicht von v, also die Anzahl der Einsen von v bezeichnet.
  • Ist der Code C ein t-Bitfehler korrigierender Code mit dem minimalen Codeabstand dmin, dann ist t gemäß 2t + 1 ≤ dmin ≤ 2t + 2 bestimmt.
  • So ist beispielsweise ein Code mit dem minimalen Codeabstand dmin = 3 ein 1-Bitfehler korrigierender Code, da 2·1 + 1 = 3 ≤ 3 ≤ 2·1 + 2 = 4 gilt.
  • Als Codes sind lineare Codes als auch nichtlineare Codes bekannt. Als Beispiel eines nichtlinearen Codes sei hier der Berger-Code (siehe z. B. http://en.wikipedia.org/wiki/Berger_code) genannt.
  • Aus k Informationsbits u1, ..., uk ergeben sich bei dem Berger-Code die zugehörigen Prüfbits c1, ..., cm zu
    Figure DE102015113414A1_0014
    so dass die binäre Darstellung der Summe der Anzahl der Werte 0 der Informationsbits die Prüfbits bestimmt. Der Berger-Code erkennt alle unidirektionalen Fehler, d. h. Fehler, die nur Nullen in Einsen verfälschen oder die nur Einsen in Nullen verfälschen.
  • Ausführungsbeispiel: (3, 2, 2)-WOM-Code
  • Es wird der Fall betrachtet, dass 3 Blöcke aus jeweils 2 Nutzdatenbits als 3 Blöcke aus jeweils 3 Nutzdatenwits in einem Speicher mit der Wortbreite 19 unter einer Adresse α = α1, ..., α5 der Wortbreite 5 gespeichert werden. Diese 3 Blöcke von Nutzdatenbits bilden die ersten 6 Nutzdatenbits und die ihnen zugeordneten 3 Blöcke von Nutzdatenwits bilden die ersten 9 Nutzdatenwits.
  • Die Nutzdatenbits x1, x2 bilden den ersten Block der ersten Nutzdatenbits und werden unter Verwendung des in der Tabelle beschriebenen WOM-Codes in den ersten Block Nutzdatenwits y1, y2, y3 transformiert.
  • Dieser WOM-Code ist ein (NW, nW, t) = (3, 2, 2)-WOM-Code. Wie bereits vorstehend erläutert bezeichnen hierbei
  • NW
    die Anzahl der (Nutzdaten-)Wits (also der transformierten Bits),
    nW
    die Anzahl der Bits (auch bezeichnet als Datenbits oder Nutzdatenbits) und
    t
    die Anzahl der Schreibvorgänge bei denen nW Bits codiert als N Wits an eine Adresse α in den Speicher geschrieben werden können, ohne dass der Speicher zwischenzeitlich gelöscht werden muss.
  • Die Nutzdatenbits x3, x4 bilden den zweiten Block der ersten Nutzdatenbits und werden unter Verwendung des in der Tabelle beschriebenen WOM-Codes in den zweiten Block Nutzdatenwits y4, y5, y6 transformiert. Entsprechend bilden die Nutzdatenbits x5, x6 den dritten Block der ersten Nutzdatenbits und werden unter Verwendung des in der Tabelle beschriebenen WOM-Codes in den dritten Block Nutzdatenwits y7, y8, y9 transformiert.
  • Als Beispiel wird als erste Nutzdatenbits die Bitfolge x1, ..., x6 = 10 00 11 betrachtet.
  • 1a veranschaulicht einen Speicherbereich 101, in dem drei Blöcke [y1, y2, y3], [y4, y5, y6] und [y7, y8, y9] erster Nutzdatenwits, in die drei Blöcke [x1, x2], [x3, x4] und [x5, x6] erster Nutzdatenbits unter Verwendung des WOM-Codes gemäß der obigen Tabelle codiert sind, an einer Adresse α1, ..., α5 gespeichert werden sollen. Diese Adresse lautet beispielhaft: α1, ..., α5 = 10011.
  • Der Speicherbereich 101 hat eine Wortbreite von 19 Bits. Speicherzellen des Speicherbereichs 101 sind in 1a mit Z1, Z2, ..., Z19 bezeichnet. Die 19 Bits sind unterteilt in 9 erste (Nutzdaten-)Wits 102, fünf erste Prüfbits 103 und fünf zweite Prüfbits 104.
  • Die Speicherzellen Z1, ..., Z9 dienen zur Speicherung der Datenwits, die Speicherzellen Z10, ..., Z19 zur Speicherung von Prüfbits.
  • Es wird beispielhaft der Fall betrachtet, dass der Speicherbereich 101 vor dem Schreiben vollständig (und fehlerfrei) gelöscht ist. Die Speicherzellen Zi, i = 1, ..., 19 sind also in einem Zustand zi = 0, bevor sie beschrieben werden.
  • Gemäß der oben beispielhaft angegebenen Bitfolge von Nutzdatenbits ergeben sich folgende Beziehungen für die Blöcke von je zwei Nutzdatenbits x1, x2 = 10, x3, x4 = 00, x5, x6 = 11.
  • Diese Blöcke von Nutzdatenbits werden gemäß der Tabelle wie folgt in Nutzdatenwits codiert: y1, y2, y3 = f1(x1, x2) = f1(1, 0) = 100, y4, y5, y6 = f1(x3, x4) = f1(0, 0) = 000, y7, y8, y9 = f1(x5, x6) = f1(1, 1) = 010.
  • In dem betrachteten Ausführungsbeispiel sollen Prüfbits unter Verwendung eines (14, 9)-Codes C gebildet werden, wobei der Code C ein verkürzter Hamming-Code mit einer H-Matrix
    Figure DE102015113414A1_0015
    und einer G-Matrix
    Figure DE102015113414A1_0016
    ist, wobei
    Figure DE102015113414A1_0017
    gilt und
    Figure DE102015113414A1_0018
    die transponierte Matrix der Matrix P9,5 ist.
  • In dem vorliegenden Beispiel werden die fünf ersten Prüfbits c 1 / 1, c 1 / 2, c 1 / 3, c 1 / 4, c 1 / 5 gemäß der Beziehung
    Figure DE102015113414A1_0019
    bestimmt.
  • In einem ersten Schreibvorgang werden somit unter der Adresse α1, ..., α5 = 10011 die ersten Datenwits 100000010 in die Speicherzellen Z1, ..., Z9 und die ersten Prüfbits 11110 in die Speicherzellen Z10, ..., Z14 geschrieben.
  • 1b zeigt entsprechend den Inhalt bzw. die Zustände des Speicherbereichs 101 mit der Adresse 10011 nach dem ersten Schreibvorgang. Die ersten Prüfbits 11110 werden dabei aus den ersten Nutzdatenwits gebildet und nicht in Wits transformiert. Die Prüfbits werden für die ersten neun Nutzdatenwits (also die drei Blöcke der ersten Nutzdatenwits) gemeinsam gebildet. Dies hat den Vorteil, dass weniger Prüfbits benötigt werden verglichen mit dem Fall, dass für jeden einzelnen Block von Wits Prüfbits gebildet würden.
  • In einem zweiten Schreibvorgang sollen nun die Blöcke der zweiten sechs Nutzdatenbits x ' / 1, x ' / 2 = 11, x ' / 3, x ' / 4 = 10, x ' / 5, x ' / 6 = 11 als Nutzdatenwits codiert und gespeichert werden.
  • In den ersten drei Speicherzellen Z1, Z2, Z3 sind die Wits 100 nach dem ersten Schreibvorgang gespeichert. Der erste Block x ' / 1, x ' / 2 = 11 der zweiten Nutzdatenbits wird in die zweiten Nutzdatenwits y ' / 1, y ' / 2, y ' / 3 = f2(x ' / 1, x ' / 2) = f2(1, 1) = 10 1 codiert und in die Speicherzellen Z1, Z2, Z3 geschrieben, die vor dem zweiten Schreiben mit 100 belegt sind. Die ersten Nutzdatenwits 100 werden mit den zweiten Nutzdatenwits 101 überschrieben.
  • In den zweiten drei Speicherzellen Z4, Z5, Z6 sind die Wits 000 nach dem ersten Schreibvorgang gespeichert. Der zweite Block x ' / 3, x ' / 4 = 10 der zweiten Nutzdatenbits wird in die zweiten Nutzdatenwits y ' / 4, y ' / 5, y ' / 6 = f1(x ' / 3, x ' / 4) = f1(1, 0) = 100 codiert und in die Speicherzellen Z4, Z5, Z6 geschrieben, die vor dem zweiten Schreiben mit 000 belegt sind. Die ersten Nutzdatenwits 000 werden mit den zweiten Nutzdatenwits 100 überschrieben.
  • In den dritten drei Speicherzellen Z7, Z8, Z9 sind die Wits 010 nach dem ersten Schreibvorgang gespeichert. Der dritte Block x ' / 5, x ' / 6 = 11 der zweiten Nutzdatenbits wird in die zweiten Nutzdatenwits y ' / 7, y ' / 8, y ' / 9 = f(x ' / 5, x ' / 6) = f1(1, 1) = 010 codiert und in die Speicherzellen Z7, Z8, Z9 geschrieben. Die ersten Nutzdatenwits 010 werden mit den zweiten Nutzdatenwits 010, die den gleichen Wert aufweisen, überschrieben.
  • Hierbei sei angemerkt, dass optional ein Überschreiben von gleichen Werten auch entfallen kann. Im vorstehenden Beispiel bedeutet dies, wenn die ersten Nutzdatenwits 010 durch zweite Nutzdatenwits 010 überschrieben werden, kann der tatsächliche Schreibvorgang entfallen.
  • Zusammenfassend ergibt sich demnach gemäß dem hier vorliegenden Beispiel die nachfolgende Codierungsabfolge:
    Figure DE102015113414A1_0020
  • Die fünf zweiten Prüfbits c 2 / 1, ..., c 2 / 5 werden entsprechend der Beziehung
    Figure DE102015113414A1_0021
    gebildet.
  • Die zweiten neun Nutzdatenwits 101 100 010 werden in dem zweiten Schreibvorgang in die Speicherzellen Z1, ..., Z9 geschrieben. Die Speicherzellen haben nach dem ersten Schreibvorgang die Zustände z 1 / 1, ...,z 1 / 9 = 100 000 010 . Auf diese Zustände ist der zweite Schreibvorgang anwendbar, weil kein einziger Zustand einen Übergang von 1 auf 0 erfährt.
  • Die zweiten Prüfbits c 2 / 1, c 2 / 2, c 2 / 3, c 2 / 4, c 2 / 5 = 01001 werden bei dem zweiten Schreibvorgang in die Speicherzellen Z15, ..., Z19 geschrieben.
  • 1c zeigt den Inhalt bzw. die Zustände der Speicherzellen Z1, ..., Z19 nach dem zweiten Schreibvorgang.
  • Nach dem ersten Schreibvorgang sind in den Speicherzellen Z1, ..., Z9 die ersten neun Nutzdatenwits 100 000 010 und in den Speicherzellen Z10, ..., Z14 die ersten Prüfbits 11110 gespeichert. Es ergibt sich ein Codewort des betrachteten Codes C (hier: Hamming-Codes):

    11110 100 000 010.
  • Nach dem zweiten Schreibvorgang sind in den Speicherzellen Z1, ..., Z9 die zweiten neun Nutzdatenwits 101 100 010 und in den Speicherzellen Z15, ..., Z19 die zweiten Prüfbits 01001 gespeichert. Es ergibt sich ein Codewort des betrachteten Codes C:

    01001 101 100 010.
  • Es ist vorteilhaft, die ersten Prüfbits 103 und die zweiten Prüfbits 104 zu speichern, ohne sie in Wits zu transformieren. In diesem Fall ist die Kombination aus Wits und Prüfbits nicht „WOM-codiert”. Insofern können z. B. bekannte fehlerkorrigierende Codes auf Datenwits angewendet werden. Außerdem kann eine Codierung der Prüfbits mit einem WOM-Code in Prüfwits dazu führen, dass durch Fehler in den abgespeicherten Prüfwits zusätzliche Fehler in den Prüfbits, die zur Korrektur der Datenwits erforderlich sind, auftreten.
  • Schreibt man beispielsweise die Bits 10 codiert als Wits f1(1, 0) = 1, 0, 0 in einen Speicher und tritt beispielsweise ein 1-Bitfehler in der zweiten Position der Wits auf, so dass 1, 0, 0 in 1, 1, 0 verfälscht wird, so ergibt sich aus der Tabelle, dass die Wits 1, 1, 0 den Bits 0, 1 entsprechen: WOM-Codierung: x1, x2 = 10 → f1(x1, x2) = 100 1-Bitfehler in Wits: 100 → 110 WOM-Decodierung: f–2(110) = 01 ≠ 10
  • Somit kann ein recht häufig auftretender 1-Bitfehler in den als Wits codierten Prüfbits zu einem 2-Bitfehler in den rücktransformierten Bits führen. Würden auch die Prüfbits WOM-codiert gespeichert, könnten sich Fehler in den Prüfwits entsprechend auf die Anzahl der Fehler in den Prüfbits auswirken, was den Aufwand der Fehlerkorrektur erhöhen und komplexere Codes erfordern würde.
  • Die Anzahl der Prüfbits eines üblichen fehlerkorrigierenden linearen Codes mit k Informationsstellen, beispielsweise eines Hamming-Codes, eines Hsiao-Codes oder eines BCH-Codes, wächst proportional zu log2(k), wobei log2 den Zweierlogarithmus beschreibt, so dass die Anzahl der Prüfbits im Vergleich zu den Informationsstellen insbesondere für große Werte von k klein ist.
  • Durch die Verwendung von WOM-Codes zur Transformation der relativ großen Anzahl von Nutzdatenbits in Nutzdatenwits wird die Anzahl der erforderlichen Speicherzellen zur Speicherung der Nutzdaten wesentlich reduziert. Allerdings wird die relativ kleine Anzahl der Speicherzellen zur Speicherung der Prüfbits beispielsweise verdoppelt. In den hier erläuterten Beispielen kann ein Fehlercode C mit relativ kleinen Codeabstand verwendet werden, der nur wenige Prüfbits benötigt. Das erlaubt eine schnelle Fehlerkorrektur und erfordert eine kleine Chipfläche zur Realisierung einer Decodierschaltung und/oder einer Codierschaltung.
  • In dem vorliegenden Beispiel werden die ersten Prüfbits bei dem ersten Schreibvorgang in den Speicherzellen Z10, ..., Z14 und die zweiten Prüfbits bei dem zweiten Schreibvorgang in den zweiten Speicherzellen Z15, ..., Z19 gespeichert.
  • Beim Auslesen der Daten aus dem Speicherbereich 102 ist bekannt, ob der Speicher zum ersten Mal oder zum zweiten Mal beschrieben wurde bzw ob es sich bei den zu den ausgelesenen Datenwits gehörenden Prüfbits um erste Prüfbits 103 oder um zweite Prüfbits 104 handelt (bzw ist bekannt, wo die jeweiligen Prüfbits gespeichert sind).
  • Beispielsweise können die ersten Prüfbits beim ersten Schreibvorgang in einem Speicherbereich erster Prüfbits abgelegt werden. Entsprechend können die zweiten Prüfbits beim zweiten Schreibvorgang in einem Speicherbereich zweiter Prüfbits abgelegt werden. Die beiden Speicherbereiche für erste und zweite Prüfbits können beispielsweise voneinander verschieden, also z. B. physikalisch getrennt voneinander ausgeführt sein. Beim Lesen nach dem jeweiligen Schreibvorgang wird dann der jeweils passende physikalische Speicher zum Zugriff auf die jeweiligen Prüfbits adressiert.
  • Option: Datenwits und zugehörige Prüfbits in unterschiedlichen Speicherbereichen
  • Es ist auch möglich, Datenwits und zugehörige Prüfbits in verschiedene Speicherbereiche und/oder in unterschiedliche Speicher zu schreiben.
  • Werden die Datenwits beispielsweise in einem ersten Speicher gespeichert, bei dem sich ein erster binärer Wert (beispielsweise 1) nicht durch einen zweiten binären Wert (beispielsweise 0) überschreiben lässt (ohne dass der entsprechende Speicherbereich vorher gelöscht wurde), so können die Prüfbits auch in einen zweiten Speicher geschrieben werden, in dem sich die gespeicherten Bits beliebig überschreiben lassen. Dadurch wird die Wortbreite der abzuspeichernden Werte geringer, da dann nur entweder die ersten Prüfbits oder die zweiten Prüfbits gespeichert werden.
  • Der Speicher zur Speicherung der Datenwits kann z. B. ein Flash-Speicher sein, der Speicher zum Speichern der Prüfbits kann z. B. ein SRAM sein. Das SRAM kann z. B. beim Initialisieren mit den entsprechenden Prüfbits geladen werden.
  • Weiterhin ist es eine Option, dass ein anderer nichtflüchtiger Speicher für die Prüfbits verwendet wird, beispielsweise ein MRAM oder ein RRAM. Auch kann hierfür ggf. ein bereits in dem System vorhandener (nichtflüchtiger) Speicherbereich genutzt oder mitgenutzt werden.
  • Interpretation der ersten Prüfbits: Marker
  • Nachfolgend wird als weiteres Ausführungsbeispiel erläutert, wie anhand der Zustände der ersten Speicherzellen zur Speicherung der Prüfbits bestimmt werden kann, ob die den ausgelesenen Datenwits zugehörenden Prüfbits in den ersten Speicherzellen zur Speicherung von Prüfbits oder in den zweiten Speicherzellen zur Speicherung von Prüfbits gespeichert worden sind.
  • Wie vorstehend beispielhaft gezeigt, werden die aus den Blöcken der ersten Datenbits und die aus den Blöcken der zweiten Datenbits gebildeten Datenwits an der Adresse α in die gleichen Speicherzellen geschrieben.
  • Die ersten Prüfbits c 1 / 1, ..., c 1 / m eines Codewortes eines Codes C1 werden als erste Prüfbits in erste Speicherzellen zur Speicherung der ersten Prüfbits geschrieben. Werden die zweiten Prüfbits c 2 / 1, ..., c 2 / m , eines Codewortes eines Codes C2 als zweite Prüfbits in zweite Speicherzellen zur Speicherung der zweiten Prüfbits geschrieben, die von den ersten Speicherzellen zur Speicherung der ersten Prüfbits verschieden sind, dann können die ersten Speicherzellen zur Speicherung der ersten Prüfbits mit einem Marker (auch bezeichnet als ein Flag oder eine Markierung), beispielsweise mit dem Marker
    Figure DE102015113414A1_0022
    überschrieben werden, wenn der Marker selbst keine zulässige Prüfbitkombination eines Codewortes des verwendeten Codes C1 ist.
  • Auch ist es möglich, die zweiten Prüfbits in die ersten Speicherzellen zur Speicherung von Prüfbits zu schreiben, wenn das fehlerfrei und ohne zusätzlichen Löschvorgang möglich ist, obwohl diese Speicherzellen zuvor bereits im ersten Schreibvorgang beschrieben wurden.
  • Die zweiten Prüfbits können in die ersten Speicherzellen zur Speicherung der Prüfbits geschrieben werden, wenn keine derjenigen Speicherzellen nach dem ersten Schreibvorgang in einem Zustand 1 ist, in die ein Prüfbit 0 (also ein Zustand 0) in dem zweiten Schreibvorgang geschrieben werden soll. Mit anderen Worten ist (ohne vorheriges Löschen, wie bereits ausgeführt wurde) ein Zustandswechsel von 0 nach 1 möglich, allerdings nicht umgekehrt von 1 nach 0. Auch ist es möglich, dass eine Speicherzelle ohne vorheriges Löschen in ihrem Zustand 0 oder 1 verbleibt.
  • Wenn kein Fehler auftritt, können die zweiten Prüfbits in dem zweiten Schreibvorgang insbesondere dann in die gleichen Speicherzellen wie die ersten Prüfbits geschrieben werden, sofern m = m' gilt, also die gleiche Anzahl von Speicherzellen für die Prüfbits verwendet werden soll, und sofern c 2 / 1 ≥ c 1 / 1, ..., c 2 / m ≥ c 1 / m gilt.
  • Andernfalls können die zweiten Prüfbits in die zweiten Speicherzellen zur Speicherung von Prüfbits geschrieben werden, wobei in diesem Fall die ersten Speicherzellen zur Speicherung von Prüfbits optional die Markierung m1, ..., mm erhalten, also entsprechend überschrieben werden.
  • Ein solches Vorgehen kann insbesondere von Vorteil sein, wenn beispielsweise unter einer Adresse α = α1, α2, α3, α4, α5 die Wits 0, ..., 0 gespeichert werden sollen, denen die Prüfbits
    Figure DE102015113414A1_0023
    zugeordnet sind, die sich von beliebigen Werten fehlerfrei überschreiben lassen.
  • Als Marker kann z. B. der Wert 1, ..., 1 gewählt werden. Dies ist möglich, sofern dieser Marker selbst keine gültige Prüfbitkombination eines Codewortes darstellt. Optional können auch andere Marker verwendet werden, sofern sie nicht zu einem (gültigen) Codewort beitragen.
  • Bei einem Auslesen der Speicherzellen zur Speicherung der ersten Prüfbits werden diese Bits als erste Prüfbits verwendet, wenn sie ungleich dem Marker sind. Ansonsten, also wenn die in den Speicherzellen zur Speicherung der ersten Prüfbits gelesenen Bits gleich dem Marker sind, dann werden die Speicherzellen zur Speicherung der zweiten Prüfbits als Prüfbits verwendet.
  • Ein Fehler kann somit erkannt werden, wenn die aus den Speicherzellen der ersten Prüfbits ausgelesenen Bits gleich dem Marker sind und die aus den Speicherzellen der zweiten Prüfbits ausgelesenen Bits als Prüfbits zusammen mit den ausgelesenen Wits kein gültiges Codewort bilden oder wenn die aus den Speicherzellen der ersten Prüfbits ausgelesenen Bits ungleich dem Marker sind und diese Bits als Prüfbits zusammen mit den ausgelesenen Wits kein gültiges Codewort bilden.
  • Erweiterung des Codes um cm+1
  • Nachfolgend wird ein Ausführungsbeispiel beschrieben, wonach aus einem gegebenen Code, bei dem die Bits 1, ..., 1 Prüfbits eines Codewortes sind, ein modifizierter Code bestimmt werden kann, bei dem die Bits 1, ..., 1 nicht Prüfbits eines gültigen Codewortes sind.
  • Weist der gegebene Code m Prüfbits c1, ..., cm auf, so ist es möglich, ein weiteres Prüfbit cm+1 hinzuzufügen, so dass cm+1 eine XOR Verknüpfung (XOR: Exklusiv-Oder) von einer geraden Anzahl von Prüfbits des gegebenen Codes ist.
  • So ist es beispielsweise möglich, ein weiteres Prüfbit cm+1 aus den ersten beiden Prüfbits c1 und c2 gemäß cm+1 = c1 ⊕ c2 zu bestimmen. Ist c1 = c2 = ... = cm = 1 , dann ist cm+1 = 0 und
    Figure DE102015113414A1_0024
    sind keine Prüfbits eines Codewortes des modifizierten Codes.
  • Entsprechend können m' = m + 1 Speicherzellen zur Speicherung von m + 1 ersten Prüfbits und nur m Speicherzellen zur Speicherung von m zweiten Prüfbits bereitgestellt werden. Es ist dann nicht erforderlich, das aus den ersten m Prüfbits abgeleitete (m + 1)-te Prüfbit beim Schreibvorgang in die Speicherzellen zur Speicherung der zweiten Prüfbits abzuspeichern, da der Marker nur in die ersten m' Speicherzellen zur Speicherung der Prüfbits eingetragen wird.
  • Es ist auch möglich, mehrere zusätzliche Prüfbits hinzuzufügen um aus einem gegebenen Code einen modifizierten Code abzuleiten, der eine Bitfolge 1, ..., 1 enthält, die keine Prüfbits eines gültigen Codewortes sind.
  • Beispielsweise sei ein Code c2 gegeben mit 6 Datenbits und 6 Prüfbits mit der H-Matrix
    Figure DE102015113414A1_0025
    und der G-Matrix
  • Figure DE102015113414A1_0026
  • Der Vektor c1, ..., c6, u1, ..., u6 = 1, ..., 1 = All – 1 ist ein Codevektor, da jede Zeile der H-Matrix eine gerade Anzahl von Einsen enthält und c1, ..., c6 = 1, ..., 1 ist Teilwort eines Codewortes. Dabei bezeichnet All – 1 einen Vektor aus lauter Einsen (im vorliegenden Fall aus 12 Einsen).
  • Aus dem Code C2 wird ein Code C1 abgeleitet, indem ein zusätzliches Prüfbit c7 = c1 ⊕ c3 = u5 ⊕ u6 hinzugefügt wird, so dass
    Figure DE102015113414A1_0027
    nicht Teilwort eines Codewortes ist.
  • Für die G-Matrix G1 des Codes C1 gilt
    Figure DE102015113414A1_0028
  • Wenn c1 = c3 = 1 gilt, dann ist c7 = c1 ⊕ c3 = u5 ⊕ u6 = 0 und
    Figure DE102015113414A1_0029
    sind keine Prüfbits eines gültigen Codewortes des Codes C1.
  • 2 zeigt sechs Speicherzellen 201 Z1, ..., Z6, sieben Speicherzellen 202 Z7, ..., Z13 und sechs Speicherzellen 203 Z14, ..., Z19. In diese 19 Speicherzellen 201 bis 203 können unter einer Adresse 204 α = α1, α2, α3, die hier beispielhaft mit 101 angegeben ist, binäre Werte gespeichert werden.
  • Aus zwei Blöcken [x1, x2], [x3, x4] von ersten Datenbits werden beim ersten Einschreiben entsprechend des WOM-Codes (siehe obige Tabelle) unter Berücksichtigung der Zustände z1, z2, z3 und z5, z6, z7 der Speicherzellen Z1, Z2, Z3 und Z4, Z5, Z6 die beiden Blöcke von ersten Datenwits [y1, y2, y3] und [y5, y6, y7] bestimmt. Sind die Speicherzellen 201 vollständig und fehlerfrei gelöscht und jeweils in dem Zustand 0, so gilt [y1, y2, y3] = f1([x1, x2]) und [y4, y5, y6] = f1([x3, x4]).
  • Die ersten Datenwits y1, y2, y3, y5, y6 werden in die Speicherzellen 201 geschrieben, die nach dem Schreibvorgang die Zustände z 1 / 1, ..., z 1 / 6 aufweisen. Beim ersten Schreibvorgang werden erste Prüfbits c 1 / 1, ..., c 1 / 7 entsprechend dem Code C1 nach der Beziehung c 1 / 1, ..., c 1 / 7 = (f1([x1, x2]), f1([x3, x4]))·P6,7 (18) bestimmt und in die Speicherzellen 202 geschrieben.
  • Da für die ersten Prüfbits
    Figure DE102015113414A1_0030
    gilt, sind die Speicherzellen 202 nach dem ersten Beschreiben nicht mit sieben aufeinanderfolgenden binären 1-Werten 1111111 belegt.
  • Bei dem zweiten Schreibvorgang ist es möglich, aus den zwei zu schreibenden Blöcken [x ' / 1, x ' / 2][x ' / 3, x ' / 4] von zweiten Datenbits und in Abhängigkeit von den Zuständen z 1 / 1, ..., z 1 / 6 der Speicherzellen Z1, ..., Z6 die Blöcke der zweiten Datenwits zu bestimmen gemäß [y ' / 1, y ' / 2, y ' / 3] = fi₂([x ' / 1, x ' / 2]) und [y ' / 4, y ' / 5, y ' / 6] = fi₂([x ' / 3, x ' / 4])
  • Hierbei bezeichnet fi₂ die in dem zweiten Schreibvorgang zu verwendende Transformation der Bits in Wits, die davon abhängt, welchen Wert die in dem ersten Schreibvorgang geschriebenen Datenwits in den Speicherzellen 201 aufweisen.
  • Die zweiten Prüfbits c 2 / 1, ..., c 2 / 6 werden entsprechend dem Code C2 gemäß der Beziehung c 2 / 1, ..., c 2 / 6 = (fi₂([x ' / 1, x ' / 2], fi₂([x ' / 3, x ' / 4]))·P6,6(19) gebildet und in die Speicherzellen 203 geschrieben. In die Speicherzellen 202 wird nun der Wert
    Figure DE102015113414A1_0031
    geschrieben.
  • Bei dem ersten Schreibvorgang werden die ersten sieben Prüfbits c 1 / 1 , ..., c 1 / 7 entsprechend dem Code C1 gebildet. Bei dem zweiten Schreibvorgang werden die zweiten sechs Prüfbits entsprechend dem Code C2 bestimmt. Beispielhaft sind C1 und C2 unterschiedliche Codes.
  • Somit folgt:
    • – Ist bereits der Wert 1111111 in den Speicherzellen 202 gespeichert, befinden sich die den gespeicherten Datenwits entsprechenden Prüfbits in den Speicherzellen 203, also den Speicherzellen zur Speicherung der zweiten Prüfbits.
    • – Ist hingegen der in den Speicherzellen 202 zur Speicherung der ersten Prüfbits gespeicherte Wert ungleich 1111111, sind die den gespeicherten Datenwits entsprechenden Prüfbits in den Speicherzellen 202 zur Speicherung der ersten Prüfbits zu finden.
  • 2 zeigt die entsprechenden Speicherzellen 201, 202 und 203 an der Adresse 204 des Speichers. Die Adresse 204 hat beispielhaft den Wert 101. An dieser Adresse sind 19 Bits gespeichert: 6 Datenwits, 7 erste Prüfbits und 6 zweite Prüfbits. In dem ersten Schreibvorgang werden die ersten Prüfbits entsprechend dem Code C1 in 7 Speicherzellen 202 gespeichert. In dem zweiten Schreibvorgang werden die zweiten Prüfbits entsprechend dem Code C2 in 6 Speicherzellen 203 gespeichert, wobei die 7 ersten Prüfbits der Speicherzellen 202 in diesem Fall mit dem Wert 1111111 überschrieben werden. Dieser Wert 1111111 wird auch als Markierung bezeichnet. Die Markierung erlaubt somit zu bestimmen, ob die maßgeblichen Prüfbits die ersten Prüfbits oder die zweiten Prüfbits sind bzw ob die gerade relevanten Prüfbits in dem Speicherbereich 202 oder in dem Speicherbereich 203 zu finden sind.
  • Beispiel: Speicherzellen sind teilweise im Zustand 1
  • Beispielhaft wird ein Fall erläutert, in dem ein Teil der Speicherzellen in dem Zustand 1 ist bevor diese beschrieben werden. Ein solcher Fall kann zum Beispiel dann auftreten, wenn nicht alle Speicherzellen bei einem vorherigen Löschvorgang aufgrund eines alternden Speichers erfolgreich gelöscht wurden.
  • Beispielsweise soll ein Block von zwei Datenbits [x 1 / 1, x 1 / 2] unter Verwendung des WOM-Codes gemäß der obigen Tabelle in einen Block von drei Datenwits [y1, y2, y3] transformiert werden, um die Datenwits in Speicherzellen Z1, Z2, Z3 zu schreiben, die die Zustände z1, z2, z3 haben.
  • Es ist möglich, die Wits f1([x 1 / 1, x 1 / 2]) = y 1 / 1, y 1 / 2, y 1 / 3 fehlerfrei in die Speicherzellen Z1, Z2, Z3 zu schreiben, wenn gilt: y 1 / 1 ≥ z1, y 1 / 2 ≥ z2, y 1 / 3 ≥ z3 oder z1 y 1 / 1 ∨ z2 y 1 / 2 ∨ z3 y 1 / 3 = 0 (20)
  • Weiterhin ist es möglich, die Wits f2([x 1 / 1, x 1 / 2]) = y 2 / 1, y 2 / 2, y 2 / 3 fehlerfrei in die Speicherzellen Z1, Z2, Z3 zu schreiben, wenn gilt: y 2 / 1 ≥ z1, y 2 / 2 ≥ z2, y 2 / 3 ≥ z3 oder z1 y 2 / 1 ∨ z2 y 2 / 2 ∨ z3 y 2 / 3 = 0 (21)
  • Ist z1, z2, z3 = 0, 0, 0, ist es für jede Belegung von [x 1 / 1, x 1 / 2] möglich, sowohl f1[x 1 / 1, x 1 / 2]) = y 1 / 1, y 1 / 2, y 1 / 3 als auch f2([x 1 / 1, x 1 / 2]) = y 2 / 1, y 2 / 2, y 2 / 3 als Block von 3 Wits in die Speicherzellen zu schreiben.
  • Für bestimmte Werte z1, z2, z3 ist es möglich, einen Block [x 1 / 1, x 1 / 2] von 2 Datenbits als einen Block von 3 Datenwits fi([x 1 / 1, x 1 / 2]) = y i / 1, y i / 2, y i / 3 mit i ∊ {1, 2} fehlerfrei in Speicherzellen Z1, Z2, Z3 zu schreiben, die sich im Zustand z1, z2, z3 befinden, wenn es ein i mit i ∊ {1, 2} gibt, so dass gilt: z1 y i / 1 ∨ z2 y i / 2 ∨ z3 y i / 3 = 0 (22)
  • Nimmt nur ein einzelner Zustand der drei Zustände z1, z2, z3 den Wert 1 an, so ist es möglich, jede Belegung von zwei Bits [x 1 / 1, x 1 / 2] codiert als 3 Wits fehlerfrei in die entsprechenden Speicherzellen zu schreiben, da für f1([x 1 / 1, x 1 / 2]) = y 1 / 1, y 1 / 2, y 1 / 3 und f2([x 1 / 1, x 1 / 2]) = y 2 / 1, y 2 / 2, y 2 / 3 nach der obigen WOM-Code Tabelle gilt: y 1 / 1 = y 2 / 1, y 1 / 2 = y 2 / 2, y 1 / 3 = y 2 / 3
  • Ist nur einer der Zustände z1, z2, z3 z. B. z1 gleich 1, ist entweder z1 y i / 1 = 0 oder z1 y 2 / 1 = 0.
  • Es ist auch möglich, dass Zustände
    Figure DE102015113414A1_0032
    oder Zustände
    Figure DE102015113414A1_0033
    von Speicherzellen
    Figure DE102015113414A1_0034
    oder
    Figure DE102015113414A1_0035
    zur Speicherung von Prüfbits gleich 1 sind, ehe die Prüfbits in diese Speicherzellen geschrieben werden.
  • So ist es möglich, dass die Prüfbits c1, ..., cm+1 fehlerfrei in die Speicherzellen
    Figure DE102015113414A1_0036
    geschrieben werden, wenn gilt:
    Figure DE102015113414A1_0037
  • Entsprechend ist es möglich, die Prüfbits c1, ..., cm in die Speicherzellen Z1,C², ..., Zm,C² zu schreiben, die die Zustände
    Figure DE102015113414A1_0038
    aufweisen, wenn gilt:
    Figure DE102015113414A1_0039
  • Hierbei bezeichnet C1 den ersten Code und C2 den zweiten Code.
  • Ist es möglich, die ersten Prüfbits c1, ..., cm+1 fehlerfrei in die Speicherzellen 202
    Figure DE102015113414A1_0040
    zu schreiben, so werden diese auch in diesen Speicherzellen 202 abgelegt. Ist es hingegen nicht möglich, die ersten Prüfbits fehlerfrei in die Speicherzellen 202
    Figure DE102015113414A1_0041
    zu schreiben, so werden diese ersten Prüfbits – falls das möglich ist – in die Speicherzellen 203 Z1,C², ..., Zm,C² geschrieben.
  • Optional kann in diesem Fall in die Speicherzellen 202 die Markierung, also der Wert 1111111 geschrieben werden. Hierbei sei angenommen, dass die Markierung kein gültiges Codewort des ersten Codes C1 ist, also dass gilt:
    Figure DE102015113414A1_0042
  • Ist es nicht möglich, die als Wits codierten Datenbits fehlerfrei in die entsprechenden Speicherzellen zu schreiben oder die Prüfbits fehlerfrei in die vorgesehenen Speicherzellen zu schreiben, so ist es eine Option, den Speicherbereich zu löschen und danach erneut zu beschreiben oder aber es kann ein anderer Speicherbereich genutzt werden. Dies kann insbesondere dann von Vorteil sein, wenn der ursprüngliche Speicherbereich einen Defekt aufweist.
  • Eine weitere Option besteht darin, dass eine Anzahl der eventuell fehlerhaft beschriebenen Speicherzellen pro Speicherbereich ermittelt und diese Anzahl mit einem vorgegebenen Schwellwert verglichen wird. Bei Erreichen und/oder Überschreiten des Schwellwerts kann der Speicherbereich gelöscht werden, um danach erneut beschrieben zu werden. Alternativ kann anstatt dieses Speicherbereichs ein anderer Speicherbereich verwendet werden.
  • Es ist auch möglich, eine Anzahl dD der fehlerhaft durch Datenwits beschriebenen Speicherzellen zu bestimmen und eine Anzahl dP der fehlerhaft durch Prüfbits beschriebenen Speicherzellen zu bestimmen und in Abhängigkeit von den Werten dD und dP einen bestimmten Speicherbereich zu löschen bzw. einen anderen Speicherbereich zu verwenden.
  • Die Anzahl fehlerhaft beschriebener Speicherzellen kann beispielsweise durch einen Vergleich der zu schreibenden Daten mit den nach dem Schreiben ausgelesenen Daten bestimmt werden.
  • Eine Speicherzelle ist in einem fehlerhaften Zustand, wenn sie vor dem Einschreiben im Zustand 1 ist und ein Wert 0 in diese Speicherzelle geschrieben wird, wobei sich der Zustand der Zelle nicht ändert, so dass sie nach dem Schreiben fehlerhaft den Wert 1 aufweist.
  • Es ist möglich, einen Speicherbereich zu löschen, wenn ein Zustand einer Speicherzelle dieses Speicherbereiches nach dem Schreiben fehlerhaft ist.
  • Es ist beispielsweise auch möglich, unter Verwendung eines fehlerkorrigierenden und/oder fehlererkennenden Codes einen Speicherbereich zu löschen, wenn eine Anzahl von Bitfehlern vorliegt, die durch den Code nicht korrigierbar sind. Es ist ferner eine Option, den Speicherbereich bereits dann zu löschen, wenn eine bestimmte Anzahl von Bitfehlern vorliegt, auch wenn diese Anzahl durch den Code noch korrigierbar wäre.
  • Beispiel: Speichern von Nutzdatenwits beim Auftreten von Bitfehlern
  • Im Folgenden soll ein Beispiel beschrieben werden, wonach k Blöcke x1, x2, ..., xk von Nutzdatenbits, die als k Blöcke y1, y2, ..., yk von Nutzdatenwits kodiert werden, unter einer Adresse α in einem Speicher gespeichert werden, wenn mindestens ein Fehler auftritt.
  • xi bezeichnet die Nutzdatenbits des i-ten Blocks von Nutzdatenbits und yi bezeichnet die Nutzdatenwits des i-ten Blocks [yi] von Nutzdatenwits mit i = 1, ..., k.
  • Beispielsweise können die folgenden Schritte durchgeführt werden:
    • 1. Codieren der Bits der Blöcke von Nutzdatenbits xi in Wits der Blöcke von Nutzdatenwits zu insgesamt einer Anzahl von N Nutzdatenwits entsprechend einem WOM-Code gemäß der Beziehung
      Figure DE102015113414A1_0043
      wobei für j = 1, ..., k die Codierungsfunktionen
      Figure DE102015113414A1_0044
      des benutzten WOM-Codes in Abhängigkeit von den Zuständen der Speicherzellen, in die die Wits des Blockes yj geschrieben werden und in Abhängigkeit von xj so aus den möglichen Codierungsfunktionen des WOM-Codes ausgewählt sind, dass eine Anzahl Anz1j der Zustände dieser Speicherzellen, die gleich 1 sind und in die ein Wit mit dem Wert 0 geschrieben wird, minimal ist.
    • 2. Bestimmen von m Prüfbits c = c1, ...,Cm, so dass
      Figure DE102015113414A1_0045
      Bits eines Codewortes eines fehlererkennenenden und/oder fehlerkorrigierenden Codes C mindestens der Länge N + m + 1 ergibt, wobei m ≥ 1 gilt.
    • 3. Erreicht ober übersteigt die Zahl der Zustände der Speicherzellen, die gleich 1 sind und in die der Wert 0 geschrieben werden soll, einen vorgegebenen Schwellwert S1 mit S1 ≥ 0, d. h. wenn die Bedingung
      Figure DE102015113414A1_0046
      erfüllt ist, wird der Speicherbereich gelöscht, der durch die Adresse α adressiert wird.
    • 4. Bestimmen einer Anzahl Anz2c von ersten Speicherzellen zur Speicherung von Prüfbits, die im Zustand 1 sind und in die ein Prüfbit der Prüfbits c unter der Adresse α geschrieben werden soll, das den Wert 0 aufweist.
    • 5. Erreicht oder überschreitet die Anzahl Anz2c einen Schwellwert S2 mit S2 ≥ 0, ist also die folgende Bedingung Anz2c ≥ S2, erfüllt, wird eine Anzahl Anz3c von zweiten Speicherzellen zum Speichern von Prüfbits, die im Zustand 1 sind und in die ein Prüfbit der Prüfbits c mit dem Wert 0 in die Adresse α geschrieben werden soll, bestimmt.
    • – Ist die Anzahl Anz3c ≤ S3, dann werden die Prüfbits c in die Speicherzellen 203 der zweiten Prüfbits geschrieben, wobei S3 ≥ 0 ein vorgegebener Schwellwert ist.
    • – Ist die Anzahl Anz3c ≥ S3, wird der Speicherbereich, der die Adresse α enthält, gelöscht, wobei S3 ≥ 0 ein vorgegebener Schwellwert ist.
    • 6. Ist/Sind die Bedingung
      Figure DE102015113414A1_0047
      und/oder die Bedingung
      Figure DE102015113414A1_0048
      erfüllt, wobei S4 ≥ 0 ein vorgegebener Schwellwert ist, so wird der Speicherbereich, der die Adresse α enthält, gelöscht.
  • Die vorstehenden Schritte prüfen somit, ob es für die Nutzdatenwits und/oder die (ersten und/oder zweiten) Prüfbits (jeweils) eine Anzahl von Speicherzellen gibt, die bereits den Zustand 1 haben, die mit dem Wert 0 beschrieben werden sollen und die somit ohne vorheriges Löschen nicht mehr in den Zustand 0 übergeführt werden können. Ist dies der Fall und übersteigt die jeweilige Anzahl oder eine Kombination aus Anzahlen (mindestens) einen Schwellwert, so wird der Speicherbereich gelöscht. Hierbei ist es von Vorteil, dass die Nutzdatenwits in Kombination mit den Prüfbits ein Codewort eines fehlererkennenden und/oder fehlerkorrigierenden Codes darstellen können, so dass eine bestimmte Menge von fehlerhaften Bits (also solchen Bits die den Wert 1 statt den Wert 0 aufweisen) korrigiert werden kann.
  • Wird beispielsweise für die Bestimmung der ersten Prüfbits c1 aus den k Blöcken der ersten Datenwits und für die Bestimmung der zweiten Prüfbits c2 aus den Blöcken der zweiten Datenwits ein t-Bitfehler korrigierender Code verwendet, so können alle fehlerhaften Werte der Speicherzellen korrigiert werden, die beim Einschreiben von Werten 0 in Speicherzellen entstehen, die im Zustand 1 sind, wenn S4 ≤ t gilt und wenn keine weiteren Fehler im Speicher auftreten.
  • Gilt S4 + δ ≤ t, dann können zusätzlich zu den fehlerhaften Werten, die beim Einschreiben eines Werts 0 in diejenigen Speicherzellen, die sich im Zustand 1 befinden, auftreten, noch weitere δ Speicherfehler korrigiert werden.
  • Beispiel: Erkennung von Adressfehlern
  • Nachfolgend wird ein Ausführungsbeispiel angegeben, demgemäß Fehler in den Adressen erkannt werden können.
  • Die Adressbits können dabei als Zusatzbits aufgefasst werden. Bei solchen Zusatzbits handelt es sich insbesondere um Bits, die zusätzlich zu den Datenwits zur Bildung der Prüfbits genutzt werden. Weiterhin ist es eine Option, mindestens ein Invertierungsbit vorzusehen, das den Datenbits hinzugefügt wird, um zu beschreiben, ob und welche Datenbits (oder Gruppen von Datenbits) invertiert wurden. Zusatzbits können auch mindestens ein Indikatorbit (Passwort) umfassen.
  • Beispielhaft sei ein Code C angegeben mit dem Codeabstand 3, der H-Matrix
    Figure DE102015113414A1_0049
    und der G-Matrix
  • Figure DE102015113414A1_0050
  • Alle Spalten der H-Matrix weisen eine ungerade Anzahl von Einsen auf, so dass der Code ein verkürzter Hsiao-Code ist. Dieser verkürzte Hsiao-Code erlaubt die Korrektur von 1-Bitfehlern und die Erkennung von 2-Bitfehlern.
  • Beispielhaft werden zwei Blöcke von Datenbits [x1, x2] und [x3, x4] in zwei Blöcke von Datenwits [y1, y2, y3] und [y4, y5, y6] entsprechend dem hier diskutierten WOM-Code (siehe obige Tabelle) codiert.
  • 3 zeigt symbolisch einen Speicherbereich umfassend eine Adresse α, wobei an jeder Adresse α 18 Bits gespeichert werden können. Diese 18 Bits entsprechen 18 Speicherzellen Z1, ..., Z18 und sind unterteilt in Speicherzellen 301 für Datenwits (Speicherzellen Z1, ..., Z6), Speicherzellen 302 für erste Prüfbits c1 = c 1 / 1, ..., c 1 / 6 (Speicherzellen Z7, ..., Z12) und Speicherzellen 303 für zweite Prüfbits c2 = c 2 / 1, ..., c 2 / 6 (Speicherzellen Z13, ..., Z18).
  • Die Adresse α unterteilt sich in 4 Bits, so dass gilt: α = α1, α2, α3, α4.
  • Die Speicherzellen 301 dienen zur Speicherung der Datenwits y1, ..., y6 der Blöcke [y1, y2, y3], [y4, y5, y6] der Datenwits.
  • Die Prüfbits c1 = c 1 / 1, ..., c 1 / 6 werden unter Einbeziehung der Adresse α = α1, ..., α4 so bestimmt, dass gilt
    Figure DE102015113414A1_0051
    wobei die Funktionen
    Figure DE102015113414A1_0052
    die Funktionen sind, die die Bits x1, ..., x4 der Blöcke [x1, x2], [x3, x4] entsprechend dem WOM-Code gemäß der oben angegebenen Tabelle in Abhängigkeit von der Belegung der Speicherzellen 301 in die entsprechenden Blöcke von Datenwits transformieren. Sind beispielsweise sämtliche Speicherzellen Z1, ..., Z6 vor dem ersten Schreibvorgang im Zustand 0, gilt
    Figure DE102015113414A1_0053
  • In dem hier beschriebenen Beispiel sollen in dem ersten Schreibvorgang die Blöcke [x1, x2] = [1, 0] und [x3, x4] = [1, 1] unter der Adresse 1010 und die Blöcke [x ' / 1, x ' / 2] = [0, 1] und [x '3, x ' / 3] = [0, 1] unter der Adresse 1011 codiert als Datenwits abgespeichert werden. Es wird davon ausgegangen, dass alle Speicherzellen 301 vor dem ersten Schreibvorgang den Wert 0 haben.
  • Der Block der Datenbits [x1, x2] = [1, 0] wird in den Block der Datenwits [y1, y2, y3] = f1([1, 0]) = [1, 0, 0] transformiert und der Block der Datenbits [x3, x4] = [1, 1] wird in den Block der Datenwits [y4, y5, y6] = f1([1, 1]) = [0, 1, 0] transformiert.
  • Da die Datenwits y1, ..., y6 = 100 010 an der Adresse 1010 gespeichert werden sollen, ergeben sich die Prüfbits c1 = c 1 / 1, ..., c 1 / 6 zu c 1 / 1, ..., c 1 / 6 = (100 010 1010)·P10,6 = 001 100 .
  • Die Datenwits y1, ..., y6 = 100 010 werden unter der Adresse 1010 in den Speicherzellen 301 gespeichert. Die Prüfbits c 1 / 1, ..., c 1 / 6 = 001 100 werden unter der Adresse 1010 in den Speicherzellen 302 gespeichert, die Speicherzellen 303 an der Adresse 1010 verbleiben im Zustand 0.
  • Der Block der Datenbits [x ' / 1, x ' / 2] = [0, 1] wird in den Block der Datenwits [y ' / 1, y ' / 2, y ' / 3] = f1([0, 1]) = [0, 0, 1] transformiert und der Block der Datenbits [x ' / 3, x ' / 4] = [0, 1] wird in den Block der Datenwits [y ' / 4, y ' / 5, y ' / 6] = f1([0, 1]) = [0, 0, 1] transformiert.
  • Da die Datenwits y ' / 1, ..., y ' / 6 = 001 001 unter der Adresse 1011 gespeichert werden sollen, ergeben sich die Prüfbits c1' = c 1' / 1, ..., c 1' / 6 zu c 1' / 1, ..., c 1' / 6 = (001 001 1011)·P10,6 = 101 011.
  • Die Datenwits y ' / 1, ..., y ' / 6 = 001 001 werden unter der Adresse 1011 in den Speicherzellen 301 gespeichert. Die Prüfbits c 1' / 1, ..., c 1' / 6 = 101 011 werden unter der Adresse 1011 in den Speicherzellen 302, die Speicherzellen 303 an der Adresse 1011 verbleiben im Zustand 0.
  • Tritt beim Vorhaben, auf die unter der Adresse 1010 gespeicherten Daten zugreifen zu wollen, ein Adressfehler auf, indem z. B. durch einen Fehler innerhalb des Speichers die Adresse 1010 in 1011 verfälscht wird, werden die unter der Adresse 1011 gespeicherten Daten ausgelesen, obwohl die unter der Adresse 1010 gespeicherten Daten hätten ausgelesen werden sollen. Im vorliegenden Fall werden also die Prüfbits c 1' / 1, ..., c 1' / 6 = 101 011 und die Datenwits y ' / 1, ..., y ' / 6 = 001 001 ausgelesen. Diese werden ergänzt um die Adressbits 1010 der Adresse, auf die ohne Fehler in dem Speicher zugegriffen worden wäre. Es ergibt sich somit das Codewort: c 1' / 1, ..., c 1' / 6, y ' / 1, ..., y ' / 6, α1, ... α4 = 101 011 001 001 1010.
  • Dieses Codwort ist aufgrund der Beziehung sT = H·[101 011 001 001 1010]T = [001110]T ≠ 0 kein Codewort des betrachteten Codes C. Der Vektor sT = [001110] ist gleich der 16-ten Spalte der H-Matrix, die einen Adressfehler anzeigt, der nicht korrigiert wird.
  • In dem hier gezeigten Beispiel hat das Codewort eine Länge von 16 Bits. Die 6 Prüfbits (vergleiche Speicherzellen 302) und die 6 Datenwits (vergleiche Speicherzellen 301) bilden eine Teilmenge der 16 Bits dieses Codewortes.
  • Eine Teilmenge einer Menge kann eine echte Teilmenge einer Menge oder die Menge selbst sein.
  • In dem soeben betrachteten Beispiel bilden die 6 ersten Prüfbits c 1 / 1, ..., c 1 / 6 , die 6 Datenwits y1, ..., y6 und die 4 Adressbits α1, ..., α4, sofern kein Fehler auftritt, ein Codewort des verwendeten Codes der Länge 16. Die 6 ersten Prüfbits c 1 / 1, ..., c 1 / 6 und die 6 Datenwits y1, ..., y6 bilden eine echte Teilmenge der 16 Bits der Menge aller Bits eines Codewortes.
  • In dem Fall, dass die Adresse nicht in die Codierung miteinbezogen ist, stellt die Gesamtheit der Prüfbits und Datenwits alle Bits eines Codewortes, deren Teilmenge ist gleich der Menge aller Bits des Codewortes.
  • Beispiel: Berücksichtigung von aus Adressbits abgeleiteter Bits
  • Es wird erläutert, wie z. B. anstelle von Adressbits α1, ..., αn aus den Adressbits abgeleitete Bits A1, ..., Al in die Bildung der Prüfbits berücksichtigt werden können.
  • Beispielsweise können die aus den Adressbits α1, ..., αm am abgeleiteten Bits A1, ..., Al bestimmt werden gemäß
    Figure DE102015113414A1_0054
    wobei φ1, ..., φl m-stellige Boolesche Funktionen sind. Beispielhaft wird nachfolgend der Fall betrachtet, dass 1 ≤ m gilt; es ist aber auch möglich, dass l > m gilt.
  • So kann gemäß einem Ausführungsbeispiel mit l = 1 und Al = A1 die folgende Boolesche Funktion verwendet werden A1 = α1 ⊕ α2 ⊕...⊕ αn, wobei ⊕ eine Exklusiv-Oder-Funktion bezeichnet. In diesem Beispiel kennzeichnet A1 die Parität der Adressbits. Beispielsweise ergibt sich für m = 4: A1 = φ11, ..., α4) = α1 ⊕ α2 ⊕ α3 ⊕ α4.
  • Jeder 1-Bitfehler in den Adressbits α1, ..., α4 führt somit zu einem Fehler in dem abgeleiteten Bit A1.
  • In einem anderen Ausführungsbeispiel kann l = 3 sein und die abgeleiteten Bits A1, ..., A3 können wie folgt bestimmt sein: A1 = φ11, ..., α4) = α3 ⊕ α4, A2 = φ21, ..., α4) = α2 ⊕ α4, A3 = φ31, ..., α4) = α1 ⊕ α4, so dass jeder 2-Bitfehler in den Adressbits α1, ..., α4 zu einem anderen Wert in den abgeleiteten Adressbits A1, A2, A3 führt. Die Booleschen Funktionen φ1, φ2, φ3 sind hier beispielhaft linear.
  • Alternativ könnten die abgeleiteten Bits wie folgt bestimmt sein:
    Figure DE102015113414A1_0055
  • In diesem Beispiel sind die Booleschen Funktionen φ1 und φ2 nichtlinear und die Boolesche Funktion φ3 ist linear.
  • Beispiel: Einbeziehung der aus den Adressbits abgeleiteten Bits in die Bildung der Prüfbits
  • Nachfolgend wird erläutert, wie die aus den Adressbits abgeleiteten Bits A1, ..., Al in die Bildung der Prüfbits einbezogen werden können.
  • Im folgenden Beispiel gilt l = 1 und das abgeleitete Adressbit A1 ist das Paritätsbit der Bits der Adressen.
  • Die zwei Blöcke [x1, x2], [x3, x4] von Nutzdatenbits werden in Abhängigkeit von den in den entsprechenden Speicherzellen vor dem Schreiben enthaltenen Zuständen in zwei Blöcke von Nutzdatenwits [y1, y2, y3], [y4, y5, y6] entsprechend dem WOM-Code der vorstehenden Tabelle transformiert.
  • 4 veranschaulicht einen Speicherbereich mit einer Adresse 404, die beispielhaft den Wert 1010 aufweist sowie 6 Speicherzellen 401 für Datenwits (Speicherzellen Z1, ..., Z6), 6 Speicherzellen 402 für erste Prüfbits c1 = c 1 / 1, ..., c 1 / 6 (Speicherzellen Z7, ..., Z12) und 6 Speicherzellen 403 für zweite Prüfbits c2 = c 2 / 1, ..., c 2 / 6 (Speicherzellen Z13, ..., Z18)
  • Die beiden Blöcke Datenwits [y1, y2, y3] und [y4, y5, y6] können unter der Adresse α 404 gespeichert werden.
  • Die ersten Prüfbits c1 = c 1 / 1, ..., c 1 / 6 werden unter Einbeziehung der abgeleiteten Adressbits, hier der Parität A1 = α1 ⊕ α2 ⊕ α3 ⊕ α4 der Adressbits α1, ..., α4 so bestimmt, dass gilt
    Figure DE102015113414A1_0056
    wobei die Funktionen
    Figure DE102015113414A1_0057
    die Funktionen sind die die Nutzdatenbits x1, ..., x4 der Blöcke [x1, x2], [x3, x4] entsprechend dem WOM-Code in Abhängigkeit von der Belegung der Speicherzellen Z1, Z2, Z3 und Z4, Z5, Z6 in die entsprechenden Blöcke von Datenwits transformieren.
  • Als Beispiel eines linearen Codes C wird ein Code mit der G-Matrix
    Figure DE102015113414A1_0058
    mit
    Figure DE102015113414A1_0059
    verwendet.
  • Sind beispielsweise sämtliche Speicherzellen Z1, ..., Z6 vor dem ersten Schreibvorgang in dem Zustand 0, gilt
    Figure DE102015113414A1_0060
  • In einem Beispiel sollen in dem ersten Schreibvorgang die Blöcke [x1, x2] = [1, 0] und [x3, x4] = [1, 1] unter der Adresse 1010 codiert als Datenwits gespeichert werden. Aus den Adressbits ergibt sich das Paritätsbit A1 zu: A1 = 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0.
  • Wieder sei angenommen, dass alle Speicherzellen vor dem ersten Schreibvorgang in dem Zustand 0 sind.
  • Der Block der Datenbits [x1, x2] = [1, 0] wird in den Block der Datenwits [y1, y2, y3] = f1([1, 0]) = [1, 0, 0] transformiert und der Block der Datenbits [x3, x4] = [1, 1] wird in den Block der Datenwits [y4, y5, y6] = f1([1, 1]) = [0, 1, 0] transformiert.
  • Da die Datenwits y1, ..., y6 = 100 010 unter der Adresse 1010 mit dem Paritätsbit A1 = 0 gespeichert werden sollen, ergeben sich die Prüfbits c1 = c 1 / 1, ..., c 1 / 6 zu c 1 / 1, ..., c 1 / 6 = (100 010 0)·P7,6 = 011 110.
  • Beispiel: Einbeziehung von Indikatorbits
  • Auch ist es eine Option, dass Indikatorbits i1, ..., iL mit L > 0 bei der Bildung der Prüfbits berücksichtigt werden.
  • Indikatorbits können dabei beispielsweise ein Passwort bilden, das von einem Nutzer beim Zugriff auf die Daten anzugeben ist. Ist das angegebene Passwort fehlerhaft, kann ein Fehler angezeigt werden. Insbesondere kann der Fehler eine Ausgabe der Daten blockieren. Es ist eine andere Option, dass Daten von einem Speicher über einen Datenbus verschiedenen Nutzern bereitgestellt werden, wobei jeder Nutzer nur die Daten verarbeiten kann, die seinen eigenen Indikatorbits entsprechen bzw mittels dieser Indikatorbits gefiltert werden.
  • Beispielhaft sei ein Code C mit dem Codeabstand 3 und der H-Matrix H = (I6, P T / 6,10) gemäß Gleichung (25), der G-Matrix G = (P10,6, I10) gemäß Gleichung (26) und der Paritätsmatrix P10,6 gemäß Gleichung (27) gegeben.
  • Alle Spalten der H-Matrix weisen eine ungerade Anzahl von Einsen auf, so dass der Code ein verkürzter Hsiao-Code ist. Dieser Hsiao-Code erlaubt es, alle 1-Bitfehler zu korrigieren und alle 2-Bitfehler zu erkennen.
  • Beispielhaft werden zwei Blöcke von Datenbits [x1, x2] und [x3, x4] in zwei Blöcke [y1, y2, y3] und [y4, y5, y6] von Datenwits entsprechend dem hier beispielhaft angegebenen WOM-Code codiert.
  • Die Prüfbits c1 = c 1 / 1, ..., c 1 / 6 werden unter Einbeziehung der Indikatorbits i = i1, ..., i4 wie folgt bestimmt
    Figure DE102015113414A1_0061
    wobei für die Funktionen
    Figure DE102015113414A1_0062
    die obigen Ausführungen entsprechend gelten.
  • Gemäß einem Beispiel sollen in dem ersten Schreibvorgang die Blöcke [x1, x2] [1, 0] und [x3, x4] = [1, 1] unter der Adresse 1000 und die Blöcke [x ' / 1, x ' / 2] = [0, 1] und [x ' / 3 , x ' / 4 ] = [0, 1] unter der Adresse 1001 als Datenwits codiert abgespeichert werden. Wieder sei angenommen, dass alle Speicherzellen vor dem ersten Schreibvorgang in dem Zustand 0 sind.
  • Der Block der Datenbits [x1, x2] = [1, 0] wird in den Block der Datenwits [y1, y2, y3] = f1([1, 0]) = [1, 0, 0] transformiert und der Block der Datenbits [x3, x4] = [1, 1] wird in den Block der Datenwits [y4, y5, y6] = f1([1, 1]) = [0, 1, 0] transformiert.
  • Da die Datenwits y1, ..., y6 = 100 010 unter Verwendung der Indikatorbits 1010 gespeichert werden sollen, ergeben sich die Prüfbits c1 = c 1 / 1, ..., c 1 / 6 zu c 1 / 1, ..., c 1 / 6 = (100 010 1010)·P10,6 = 001 100.
  • Sollen die Daten an der Adresse 1000 ausgelesen werden und werden von einem Nutzer anstatt der Indikatorbits 1010 fälschlicherweise die Indikatorbits 1001 (also ein falsches Passwort) eingegeben, so resultiert aus den an der Adresse 1000 gelesenen Datenwits 100 010, Prüfbits 001 100 und den falschen Indikatorbits 1001 kein gültiges Codewort des Codes C. Die Ausgabe der Datenwits kann in diesem Fall verhindert z. B. blockiert werden.
  • Beispiel: Invertieren von Datenbits
  • Auch ist es eine Option, Datenbits zu invertieren bevor sie als Datenwits codiert werden. Dabei wird mindestens ein Invertierungsbit zu den Datenbits hinzugefügt, wobei beispielsweise die Datenbits und das mindestens eine Invertierungsbit gemeinsam in Datenwits codiert werden.
  • Es ist auch möglich, mindestens einem Invertierungsbit eine Teilmenge von Nutzdatenbits zuzuordnen, wobei die Nutzdatenbits der Teilmenge der Nutzdatenbits, die dem mindestens einen Invertierungsbit zugeordnet sind, nicht invertiert sind, wenn das Invertierungsbit einen ersten Wert annimmt und invertiert sind, wenn das Invertierungsbit einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist.
  • Auch ist es eine Option, mehrere Invertierungsbits vorzusehen und aufzunehmen. In diesem Fall können unterschiedlichen Invertierungsbits unterschiedliche Teilmengen von Nutzdatenbits zugeordnet werden.
  • Ferner ist es eine Möglichkeit, mehreren Invertierungsbits die gleiche Teilmenge von Nutzdatenbits zuzuordnen.
  • Zur Erläuterung wird im folgenden Beispiel ein Invertierungsbit hinzugefügt, dem als Teilmenge der Nutzdatenbits alle Nutzdatenbits zugeordnet sind.
  • 5a zeigt einen Speicherbereich, bei dem (beispielsweise nach einem Löschvorgang) nicht alle Speicherzellen unter der Adresse α = 10011 erfolgreich gelöscht wurden.
  • Gezeigt ist ein Speicherbereich mit einer Adresse 504, die beispielhaft den Wert 10011 aufweist. Anhand dieser Adresse 10011 werden 19 Speicherzellen Z1, ..., Z19 adressiert umfassend 9 Speicherzellen 501 für Datenwits (Speicherzellen Z1, ..., Z9) 5 Speicherzellen 502 für erste Prüfbits c1 = c 1 / 1, ..., c 1 / 5 (Speicherzellen Z10, ..., Z14) und 5 Speicherzellen 503 für zweite Prüfbits c2 = c 2 / 1, ..., c 2 / 5 (Speicherzellen Z15, ..., Z19).
  • Nach dem unvollständigen (oder fehlerhaften) Löschvorgang sind die Speicherzellen Z1, Z9 und Z14 jeweils im Zustand 1, die anderen Speicherzellen sind im Zustand 0.
  • Es sollen 5 Datenbits x1, ..., x5 direkt, d. h. nicht invertiert, oder invertiert als x 1, ..., x 5 in den Speicher geschrieben werden.
  • Die Datenbits x1, ..., x5 werden in diesem Beispiel um ein Invertierungsbit Inv1 ergänzt, dessen Wert angibt, ob die Datenbits direkt oder invertiert in Datenwits codiert und in den Speicher geschrieben werden. Dabei werden die Datenbits direkt oder invertiert gemeinsam mit mindestens einem Invertierungsbit in Datenwits transformiert. Insbesondere ist es eine Option, mehrere Invertierungsbits hinzuzufügen.
    • • Es soll Inv1 = 0 gelten, wenn die Datenbits nicht invertiert werden.
    • • Es soll Inv1 = 1 gelten, wenn die Datenbits invertiert werden.
  • Ist Inv1 = 0, werden die Datenbits x1, ..., x5, Inv1 = 0 in Datenwits codiert und die Datenwits werden in den Speicher geschrieben. Ist Inv1 = 1, werden x 1, ..., x 5, Inv1 = 1 als Datenwits codiert und die Datenwits werden in den Speicher geschrieben.
  • Ist Inv1 = 0, dann werden die Datenbits und das Invertierungsbit als 3 Blöcke [x1, x2], [x3, x4], [x5, Inv1 = 0] entsprechend dem WOM-Code gemäß obiger Tabelle in 9 Wits [y1, y2, y3], [y4, y5, y6], [y7, y8, y9] codiert wie folgt:
    Figure DE102015113414A1_0063
    mit i1, i2, i3 ∊ {1, 2}.
  • Ist Inv1 = 1, werden die Datenbits und das Invertierungsbit als 3 Blöcke [x 1, x 2], [x 3, x 4], [x 5, Inv1 = 1] entsprechend dem WOM-Code obiger Tabelle in 9 Wits [y * / 1, y * / 2, y * / 3], [y * / 4, y * / 5, y * / 5], [y * / 7, y * / 8, y * / 9] codiert wie folgt:
    Figure DE102015113414A1_0064
    mit i4, i5, i6 ∊ {1, 2}.
  • Als Beispiel werden die folgenden Datenbits betrachtet: x1 = 0, x2 = 1, x3 = 1, x4 = 1, x5 = 1.
  • Zunächst wird das Invertierungsbit Inv1 gleich 0 gesetzt. In diesem Fall ist es jedoch nicht möglich, alle Blöcke [x1, x2], [x3, x4], [x5, 0] durch die Funktion
    Figure DE102015113414A1_0065
    f1 in Datenwits zu transformieren, da zum Beispiel f1([x1, x2]) = f1(0, 1) = y1, y2, y3 = 0, 0, 1 gilt und die Speicherzelle Z1 in 5a bereits den Zustand 1 aufweist und nicht mit dem Wert y1 = 0 beschrieben werden kann.
  • Wird das Invertierungsbit Inv1 gleich 1 gesetzt, so können die invertierten Datenbits in Datenwits transformiert und in den Speicher geschrieben werden, ohne dass ein bereits in dem Speicher vorhandener Zustand 1 mit dem Wert 0 überschrieben werden müsste: So ist es möglich, die invertierten Datenbits [x 1, x 2] = [1, 0] mit der Funktion
    Figure DE102015113414A1_0066
    als Datenwits y * / 1, y * / 2, y * / 3 zu codieren und in die Speicherzellen Z1, Z2, Z3 zu speichern. Ebenso ist es möglich, die invertierten Datenbits [x 3, x 4 = [0, 0] mit der Funktion
    Figure DE102015113414A1_0067
    zu codieren und das invertierte Bit x 5 und das Invertierungsbit Inv1[x 5, 1] = [0, 1] mit der Funktion
    Figure DE102015113414A1_0068
    zu codieren und in die Speicherzellen Z4, ..., Z9 zu schreiben.
  • In 5b ist gezeigt, dass die Wits 100, 000 und 001 in den Speicherzellen 501 gespeichert sind.
  • Dadurch, dass nach dem Invertieren der Datenbits alle invertierten Datenbits und das Invertierungsbit mit der Funktion f1 in Datenwits transformiert werden, ist die Anzahl der Einsen in den Datenwits geringer, als wenn zumindest einmal die Funktion f2 verwendet worden wäre.
  • Da in diesem Beispiel im dem ersten Schreibvorgang zur Transformation von Bits in Wits nur die Funktion f1 (und nicht die Funktion f2) verwendet wurde, obwohl der Speicher vor dem ersten Schreibvorgang nicht fehlerfrei gelöscht war, ist es in dem zweiten Schreibvorgang noch möglich, beliebige Werte von Bits in dem zweiten Schreibvorgang abzuspeichern. Dies wäre nicht möglich, wenn für den ersten Schreibvorgang (aufgrund der bestehenden Löschfehler) bereits die Funktion f2 des WOM-Codes benötigt worden wäre.
  • Wird mindestens ein Invertierungsbit verwendet, ergeben sich die Prüfbits für einen betrachteten Code C aus
    • – den Nutzdatenbits,
    • – dem mindestens einen Invertierungsbit,
    • – der (bereits vorhandenen) Belegung der Speicherzellen in die die als Wits codierten Bits geschrieben werden und
    • – gegebenenfalls weitere Bits, z. B.
    • • mindestens einem Adressbit und/oder
    • • mindestens einem Identifikatorbit.
  • Nachfolgend wird der Übersichtlichkeit halber beispielhaft von einem einzelnen Invertierungsbit ausgegangen. Der hier vorgestellte Ansatz ist jedoch auch für eine Vielzahl von Invertierungsbits entsprechend anwendbar.
  • Ist das Invertierungsbit gleich 0, werden die Nutzdatenbits und das Invertierungsbit Inv1 = 0 entsprechend dem verwendeten WOM-Code in Abhängigkeit von den Zuständen der entsprechenden Speicherzellen blockweise in Blöcke von Datenwits transformiert. Die Prüfbits sind so bestimmt, dass die Datenwits und die Prüfbits ein Teilwort des Codes C bilden.
  • Ist das Invertierungsbit gleich 1, werden die invertierten Nutzdatenbits und das Invertierungsbit Inv1 = 1 entsprechend dem verwendeten WOM-Code in Abhängigkeit von den Zuständen der entsprechenden Speicherzellen blockweise in Blöcke von Datenwits transformiert. Die Prüfbits sind so bestimmt, dass die Datenwits und die Prüfbits ein Teilwort des Codes C bilden.
  • Es ist auch möglich, Adressbits oder aus Adressbits abgeleitete Bits oder Indikatorbits zur Bildung der Prüfbits heranzuziehen. Werden bei der Bestimmung der Prüfbits Adressbits, aus Adressbits abgeleitete Bits oder Indikatorbits verwendet, ist es nicht notwendig, die Adressbits, die aus Adressbits abgeleitete Bits und/oder die Indikatorbits zu invertieren, wenn das Invertierungssignal gleich 1 ist. Es ist eine Option, die Adressbits, die aus den Adressbits abgeleitete Bits und/oder die Indikatorbits bei der Bestimmung der Prüfbits zu invertieren, wenn das Invertierungsbit anzeigt, dass eine Invertierung der Datenbits erfolgt ist.
  • Im nachfolgenden Beispiel werden zur besseren Übersichtlichkeit keine Adressbits, aus Adressbits abgeleitete Bits oder Indikatorbits bei der Bestimmung der Prüfbits berücksichtigt.
  • Als Code C soll beispielhaft der lineare Code verwendet werden, dessen H-Matrix durch Gleichung (6), G-Matrix durch Gleichung (7) und Paritätsmatrix durch Gleichung (8) angegeben ist.
  • In dem Beispiel ist das Invertierungsbit Inv1 = 1, und die invertierten Datenbits und das Invertierungsbit 10 00 01 werden, wie vorstehend beschrieben, in die Datenwits 100 000 001 transformiert.
  • Die Prüfbits c 1 / 1, ..., c 1 / 5 ergeben sich zu c 1 / 1, ..., c 1 / 5 = (f1(x 1, x 2), f1(x 3, x 4), f1(x 5, 1))·P9,5 = = (100 000 001)·P9,5 = 11101.
  • Diese Prüfbits können in die Speicherzellen Z10, ..., Z14 geschrieben werden, der fehlerhaft auf 1 vorbelegte Wert der Speicherzelle Z14 führt hierbei nicht zu einem Konflikt (vergleiche 5b).
  • Die Datenwits 100 000 001 und die Prüfbits 11101 bilden das Codewort
    11101 100 000 001
    des Codes C mit der H-Matrix gemäß Gleichung (6). Tritt ein Fehler beispielsweise im 7-ten Datenwit y * / 7 auf, das den Wert y * / 7 = 0 in y * / 7 = 1 verfälscht, so ergibt sich ein Fehlersyndrom H·(11101 100 000 101)T = (01001)T, das gleich der 12-ten Spalte der H-Matrix gemäß Gleichung (6) ist.
  • Die zunächst fehlerhaften Wits und Prüfbits 11101 100 000 101 werden auf Grund des Fehlersyndromes (01001)T in der 12-ten Spalte der H-Matrix gemäß Gleichung (6) in die korrekten Werte 11101 100 000 001 verbessert, die in die Nutzdatenbits 10 00 01 entsprechend dem WOM-Code transformiert werden. Da das Invertierungsbit, hier das 6-te Bit, gleich 1 ist, werden diese Nutzdatenbits in 01 11 10 invertiert, die gespeichert werden sollten.
  • Insbesondere ist es ein Vorteil, dass das Invertierungsbit über die Fehlerkorrektur der Datenwits, in die es gemeinsam mit den Datenbits transformiert wird, in die Fehlerkorrektur einbezogen ist und gegen Fehler geschützt ist.
  • Es ist möglich, mehrere Invertierungsbits Inv1, ..., Invq mit q > 1 zu verwenden. Beispielsweise kann definiert werden:
    • – Inv1 = 0, ..., Invq = 0, wenn keine Invertierung der Nutzdatenbits erfolgt,
    • – und Inv1 = 1, ..., Invq = 1, wenn eine Invertierung der Nutzdatenbits erfolgt, bevor die Wits aus den Nutzdatenbits und den Invertierungsbits bestimmt werden.
  • Die q Invertierungsbits können in die Bildung der Wits einbezogen sein, so dass nach der Speicherung der Wits, nach dem Auslesen, nach einer Fehlerkorrektur der Wits und nach der Rücktransformation in Nutzdatenbits und Invertierungsbits geprüft werden kann, ob die Invertierungsbits untereinander gleich sind oder nicht.
  • Beträgt z. B. die Zahl der Invertierungsbits q = 3, kann in dem Fall, dass nicht alle 3 Invertierungsbits untereinander gleich sind, mit einem Voter (einer Entscheidungskomponente) mit 3 Eingängen und einem Ausgang der Wert der Invertierungsbits mit hoher Fehlertoleranz bestimmt werden.
  • Es ist auch möglich, mindestens ein Invertierungsbit für je eine Teilmenge von Nutzdatenbits zu verwenden. Anhand dieses mindestens einen Invertierungsbits kann bestimmt werden, ob die entsprechende Teilmenge von Nutzdatenbits invertiert oder nicht invertiert ist. So können beispielsweise Nutzdatenbits x1, ..., x64 durch 4 Invertierungsbits Inv1, Inv2, Inv3, Inv4 wie folgt ergänzt werden: x1, ..., x16, Inv1, x17, ..., x32, Inv2, x33, ..., x48, Inv3, x49, ..., x64, Inv4
  • Dabei sind die Invertierungsbits Inv1, Inv2, Inv3, Inv4 in die Bildung der Datenwits und damit in die Fehlerkorrektur durch den verwendeten Code C einbezogen.
  • Eine andere Option besteht darin, zusätzlich zu Invertierungsbits Adressbits oder aus Adressbits abgeleitete Bits zur Bestimmung der entsprechenden Prüfbits zu verwenden. Ebenso ist es möglich, zusätzlich zu den Invertierungsbits auch Identifikatorbits zur Bildung von Prüfbits zu verwenden.
  • Ferner ist es eine Variante, zusätzlich zu den Invertierungsbits sowohl Adressbits oder aus Adressbits abgeleitete Bits als auch Identifikatorbits zur Bildung von Prüfbits zu verwenden.
  • Weiterhin können anstelle von linearen Codes nichtlineare Codes eingesetzt werden. Beispielsweise ist es möglich, die Prüfbits aus den Wits und die zusätzlichen Bits mit einem Berger-Code zu bestimmen.
  • Beispielhafte Schaltungsanordnung
  • 6 zeigt eine beispielhafte Schaltungsanordnung umfassend eine WOM-Kodiereinheit 601, eine Fehlerkodiereinheit 602 (umfassend eine Fehlererkennungs-Einheit und/oder eine Fehlerkorrigier-Einheit), einen Multiplexer 603 und einen adressierbaren Speicher 604.
  • Der Speicher 604 verfügt über N Speicherzellen 605 zur Speicherung von N Wits in zwei aufeinanderfolgenden Schreibvorgängen unter einer Adresse α, ohne dass der Speicherinhalt nach dem ersten Schreibvorgang gelöscht werden müsste. Weiterhin weist der Speicher 604 m Speicherzellen 606 zur Speicherung von m ersten Prüfbits in einem ersten Schreibvorgang und m Speicherzellen 607 zur Speicherung von m zweiten Prüfbits in einem zweiten Schreibvorgang auf. An einem Adresseneingang 608 liegt der Wert α der aktuellen Adresse an.
  • An einem K·nW-Bit breiten ersten Eingang 609 der WOM-Kodiereinheit 601 liegen K Blöcke [x1], ..., [xK] von hier jeweils nW Bits an, wobei K ≥ 2 und nW ≥ 2 ist. Insgesamt liegen an dem Eingang 609 demnach K·nW Bits an.
  • Die WOM-Kodiereinheit 601 transformiert (oder codiert) die K Blöcke [x1], ..., [xK] von jeweils nW Nutzdatenbits in K Blöcke [y1], ..., [yK] von hier jeweils NW Nutzdatenwits, also in insgesamt N = K·NW Wits y. Diese Wits werden an einen Eingang 610 des Speichers 604 angelegt und in den N Speicherzellen 605 unter der Adresse α gespeichert. Weiterhin werden die N Wits von der WOM-Kodiereinheit 601 an einen N Bit breiten Eingang 611 der Fehlerkodiereinheit 602 gelegt.
  • Die Fehlerkodiereinheit 602 bildet aus den an ihrem Eingang 611 anliegenden N Wits y entsprechend dem verwendeten Code Ci eine Anzahl von m Prüfbits c i / 1, ..., c i / m , die an einen m-Bit breiten Dateneingang 612 des Multiplexers 603 ausgegeben werden. Der Multiplexer 603 verfügt über zwei m-Bit breite Ausgänge, um die von der Fehlerkodiereinheit 602 bereitgestellten Prüfbits entweder in den Speicherzellen 606 als erste Prüfbits oder in den Speicherzellen 607 als zweite Prüfbits zu speichern. Hierbei steht i = 1 für den ersten Schreibvorgang der ersten Prüfbits und i = 2 steht für den zweiten Schreibvorgang der zweiten Prüfbits.
  • Die von der Fehlerkodiereinheit 602 generierten ersten Prüfbits für den ersten Schreibvorgang werden demnach mit c 1 / 1, ..., c 1 / m bezeichnet und die zweiten Prüfbits für den zweiten Schreibvorgang werden mit c 2 / 1, ..., c 2 / m bezeichnet.
  • Für den ersten Schreibvorgang erhält der Multiplexer 603 über einen Eingang 615 ein Steuersignal s = 1 und verbindet den Dateneingang 612 mit einem Datenausgang 613, so dass die ersten Prüfbits c 1 / 1, ..., c 1 / m an m Dateneingängen von m Speicherzellen 606 unter der Adresse α anliegen und in diesen Speicherzellen gespeichert werden können.
  • Für den zweiten Schreibvorgang erhält der Multiplexer 603 über den Eingang 615 ein Steuersignal s = 2 und verbindet den Dateneingang 612 mit einem Datenausgang 614, so dass die zweiten Prüfbits c 2 / 1, ..., c 2 / m an m Dateneingängen von m Speicherzellen 607 unter der Adresse α anliegen und in diesen Speicherzellen gespeichert werden.
  • Die Bildung der Wits durch die WOM-Kodiereinheit 601 erfolgt sowohl in Abhängigkeit von den als Wits zu codierenden Blöcken von Datenbits, die über den Eingang 609 zugeführt werden, als auch in Abhängigkeit von den Werten der Zustände der Speicherzellen 605; letztere Abhängigkeit ist durch eine Verbindung zwischen den Speicherzellen 605 und einem Eingang 616 der WOM-Kodiereinheit 601 dargestellt.
  • In diesem Beispiel gemäß 6 werden die Prüfbits direkt und nicht als Wits codiert in den Speicher 604 geschrieben.
  • Optional kann die Adresse α zur Adressierung des Speichers 604 auch einem Eingang 621 der Fehlerkodiereinheit 602 zugeführt werden. Diese Ausführungsform ist in 6 als Verbindung 620 angedeutet. Somit können die Prüfbits in Abhängigkeit von den N Wits y und von der aktuellen Adresse α mittels der Fehlerkodiereinheit 602 gebildet werden. Gemäß dem hier gezeigten Beispiel kann die Fehlerkodiereinheit 602 die Prüfbits c i / 1, ..., c i / m so erstellen, dass ein Codewort des Codes Ci ist, wobei i = 1 für den ersten Schreibvorgang und i = 2 für den zweiten Schreibvorgang steht.
  • Eine weitere Option besteht darin, dass die Bildung der Prüfbits c i / 1, ..., c i / m von aus Adressbits abgeleiteten Bits und/oder von (beliebigen, z. B. vorgegebenen oder vorgebbaren) Identifikatorbits abhängt. In so einem Fall verfügt die Fehlerkodiereinheit 602 beispielsweise über mindestens einen weiteren Eingang (nicht in 6 dargestellt) zur Eingabe von den aus den Adressbits abgeleiteten Bits und/oder zur Eingabe von Identifikatorbits. Auch kann ein Eingang vorgesehen sein, über den aktuell einzugebende und zu verifizierende Identifikatorbits z. B. von einem Nutzer oder einem Programm bereitgestellt werden können, so dass ein Vergleich von vorgegebenen Identifikatorbits mit aktuell eingegebenen oder erhaltenen Identifikatorbits möglich ist. Der Vergleich, ob die Identifikatorbits korrekt sind, erfolgt durch ein Überprüfen, ob ein Codewort vorliegt.
  • 7 zeigt ein Diagramm einer Schaltungsanordnung zur Korrektur von abgespeicherten und beim Auslesen aus dem Speicher eventuell fehlerhaft erhaltener Wits.
  • Aus dem Speicher 604 werden N Wits y' aus N Speicherzellen 605 und in einem ersten Lesevorgang m erste Prüfbits c1' = c 1' / 1, ..., c 1' / m aus m Speicherzellen 606 und in einem zweiten Lesevorgang m zweite Prüfbits c2' = c 2' / 1, ..., c 2' / m aus m Speicherzellen 607 unter der Adresse α ausgelesen.
  • Die Wits als auch die Prüfbits können fehlerhafte Bits enthalten. Die ersten Prüfbits c1' liegen an einem m-Bit breiten Dateneingang 703 eines Demultiplexers 701 an und die zweiten Prüfbits c2' liegen an einem m-Bit breiten Eingang 704 des Demultiplexers 701 an.
  • Über einen Eingang 706 erhält der Demultiplexer 701 ein Steuersignal sDMUX. Ist sDMUX = 0, ist der Eingang 703 mit einem Ausgang 705 des Demultiplexers 701 verbunden, ist sDMUX = 1, so ist der Eingang 704 mit dem Ausgang 705 verbunden.
  • Der Ausgang 705 des Demultiplexers 701 ist mit einem Eingang 707 einer Korrektureinheit 702 verbunden.
  • Die Korrektureinheit 702 stellt an einem Ausgang 708 einen N-komponentigen Korrekturvektor ec = e c / 1, ..., e c / N zur Korrektur der eventuell fehlerhaften Wits y' = y ' / 1, ..., y ' / N bereit. Die Korrektureinheit 702 weist ferner einen Eingang 709 auf, der mit den Speicherzellen 605 verbunden ist und über diese Verbindung die N Wits erhält.
  • Eine XOR-Schaltung 710 weist zwei N-Bit breite Eingänge 712 und 713 und einen N-Bit breiten Ausgang 714 auf. Der Eingang 712 ist mit den Speicherzellen 605 und der Eingang 713 ist mit dem Ausgang 708 der Korrektureinheit 702 verbunden. Über den Ausgang 714 werden die eventuell fehlerhaften Wits y' = y ' / 1, ..., y ' / N mit dem Korrekturvektor ec komponentenweise zu den korrigierten Wits ycor = y cor / 1, ..., y cor / N XOR-verknüpft, sodass gilt: y' ⊕ ec = y ' / 1 ⊕ e c / 1, ..., y ' / N ⊕ e c / N = ycor
  • Die korrigierten Wits ycor werden über den Ausgang 714 einer Wits-Dekodiereinheit 711 bereitgestellt. Die Wits-Dekodiereinheit bildet aus den korrigierten Wits ycor blockweise die korrigierten Bits xcor. Für i = 1, ...‚ N ist das Bit c cor / i = 1 , wenn das Wit y ' / i korrigiert wird und es ist das Bit c cor / i = 0 , wenn das Wit y ' / i nicht korrigiert wird.
  • In 8 zeigt eine optionale Erweiterung der Schaltungsanordnung aus 7, wobei ein Marker (z. B. in Form von m aufeinanderfolgenden Bits mit dem Wert 1) zur Auswahl der Prüfbits beim Auslesen der Wits und der Prüfbits verwendet werden kann.
  • Die ersten Prüfbits werden aus den Speicherzellen 606 ausgelesen und liegen an einem m-Bit breiten Eingang eines UND-Gatters 801 an. An dem 1-Bit breiten Ausgang des UND-Gatters 801 wird somit der Wert 1 bereitgestellt, wenn alle m-Bits am Eingang des UND-Gatters 801 auch den Wert 1 haben, also wenn die ersten Prüfbits gleich dem Marker sind.
  • Der Ausgang des UND-Gatters 801 ist mit einem ersten Eingang eines ODER-Gatters 802 verbunden, an dessen zweiten Eingang der Wert 0 anliegt. Ein Ausgang des ODER-Gatters 802 ist mit dem Eingang 706 des Demultiplexers 701 verbunden.
  • Sind die ersten Prüfbits ungleich dem Marker, also
    Figure DE102015113414A1_0069
    dann liegt an dem Eingang 706 des Demultiplexers 701 der Steuerwert 0 an. Entsprechen hingegen die ersten Prüfbits dem Marker, also
    Figure DE102015113414A1_0070
    dann liegt am Eingang 706 der Steuerwert 1 an.
  • Der Demultiplexer 701 verbindet den Eingang 703 mit dem Ausgang 705, wenn der Steuerwert 0 anliegt und er verbindet den Eingang 704 mit dem Ausgang 705, wenn der Steuerwert 1 anliegt.
  • Somit werden von dem Demultiplexer 701 an dem Ausgang 705 die ersten eventuell fehlerhaften Prüfbits c1' ausgegeben, wenn die Speicherzellen 606 nicht mit dem Marker belegt sind. An dem Ausgang 705 werden dagegen die zweiten eventuell fehlerhaften Prüfbits c2' ausgeben, wenn die Speicherzellen 606 mit dem Marker belegt sind.
  • Beispielsweise kann eine Speicheranordnung vorgesehen sein, die einen nichtflüchtigen Speicher zur Speicherung der ersten und zweiten Datenwits y1 und y2 und zur Speicherung der entsprechenden ersten und zweiten Prüfbits c1 und c2 aufweist. Auch kann die Speicheranordnung beispielsweise zusätzlich einen flüchtigen Speicher aufweisen zur Speicherung der ersten und zweiten Prüfbits c1 und c2 oder zur temporären Speicherung einer Kopie der ersten und zweiten Prüfbits c1 und c2. In diesem Fall ist es möglich, gezielt Bitmanipulationen an den in dem flüchtigen Speicher abgelegten Prüfbits im Rahmen eines Systemintegrationstests durchzuführen, ohne dass die in dem nichtflüchtigen Speicher abgelegten Prüfbits verändert werden müssten.
  • Der flüchtige Speicher kann beispielsweise ein SRAM oder DRAM umfassen. Der nichtflüchtige Speicher kann z. B. als ein EEPROM ausgeführt sein.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 4691299 [0012]
    • US 2013/0091402 A1 [0051]
  • Zitierte Nicht-Patentliteratur
    • Rivest, R.; Shamir, A.: „How to Reuse a ,Write-Once'-Memory”, Information and Control, Vol. 55, Nos. 1-3, Seiten 1 bis 19, 1982 [0012]
    • http://en.wikipedia.org/wiki/Berger_code [0170]

Claims (37)

  1. Verfahren zum Speichern von Bits in Speicherzellen eines Speichers, – bei dem in zwei aufeinanderfolgenden Schreibvorgängen erste und zweite Wits unter einer gleichen Adresse in gleiche Speicherzellen geschrieben werden, ohne dass die Speicherzellen nach dem ersten Schreibvorgang gelöscht werden, – wobei erste Prüfbits in weitere erste Speicherzellen und zweite Prüfbits in weitere zweite Speicherzellen gespeichert werden.
  2. Verfahren nach Anspruch 1, – bei dem anhand der ersten Wits und der ersten Prüfbits ein erstes Codewort eines ersten Fehlercodes bestimmt wird, – bei dem anhand der zweiten Wits und der zweiten Prüfbits ein zweites Codewort eines zweiten Fehlercodes bestimmt wird.
  3. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Anzahl der ersten Prüfbits kleiner ist als die Anzahl der ersten Wits.
  4. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die ersten Wits und die zweiten Wits basierend auf Nutzdatenbits mittels mindestens eines WOM-Codes bestimmt werden.
  5. Verfahren nach Anspruch 4, bei dem den Nutzdatenbits mindestens ein Invertierungsbit hinzugefügt wird, wobei dem mindestens einem Invertierungsbit eine Teilmenge von Nutzdatenbits zugeordnet ist.
  6. Verfahren nach Anspruch 5, bei dem das mindestens eine Invertierungsbit einen ersten Wert annimmt, wenn die dem Invertierungsbit zugeordneten Nutzdatenbits nicht invertiert sind und das Invertierungsbit einen zweiten davon verschiedenen Wert annimmt, wenn die dem Invertierungsbit zugeordneten Nutzdatenbits invertiert sind.
  7. Verfahren nach Anspruch 6, bei dem unter Verwendung der Nutzdatenbits und des Invertierungsbits die jeweiligen Wits gebildet werden, wobei die dem mindestens einen Invertierungsbit zugeordneten Nutzdatenbits nicht invertiert werden, wenn das Invertierungsbit den ersten Wert aufweist und wobei die dem mindestens einen Invertierungsbit zugeordneten Nutzdatenbits invertiert werden, wenn das Invertierungsbit den zweiten Wert aufweist.
  8. Verfahren nach einem der Ansprüche 5 bis 7, wobei bei dem ersten Schreibvorgang die ersten Prüfbits so bestimmt sind, dass die aus den Nutzdatenbits und dem mindestens einem Invertierungsbit bestimmten ersten Wits und die ersten Prüfbits Bits des ersten Codewortes sind und wobei bei dem zweiten Schreibvorgang unter der gleichen Adresse die zweiten Prüfbits so bestimmt sind, dass die aus den Nutzdatenbits und dem mindestens einem Invertierungsbit bestimmten zweiten Wits und die zweiten Prüfbits Bits des zweiten Codewortes sind.
  9. Verfahren nach einem der Ansprüche 5 bis 8, bei dem die dem mindestens einen Invertierungsbit zugeordneten Nutzdatenbits alle Nutzdatenbits sind.
  10. Verfahren nach einem der Ansprüche 4 bis 9, – bei dem vor dem Schreibvorgang die in zu adressierenden Speicherzellen dort gespeicherte Daten ausgelesen werden, – bei dem die ausgelesenen Daten mit den zu speichernden Daten verglichen werden, – bei dem die zu speichernden Daten invertiert werden, falls die zu speichernden Daten nicht fehlerfrei in den Speicher geschrieben werden können, – bei dem die ersten Wits oder die zweiten Wits basierend auf den invertierten Daten mittels des mindestens einen WOM-Codes bestimmt und in den Speicherzellen gespeichert werden.
  11. Verfahren nach einem der Ansprüche 4 bis 10, bei dem die mittels des mindestens einen WOM-Codes codierten ersten Wits verschieden sind von den mittels des mindestens einen WOM-Codes codierten zweiten Wits.
  12. Verfahren nach einem der Ansprüche 4 bis 11, bei dem mindestens eine Speicherzelle des Speichers vor dem ersten Schreiben nicht vollständig gelöscht ist, wobei basierend auf der mindestens einen nicht vollständig gelöschten Speicherzelle die ersten Wits und die zweiten Wits mittels des mindestens einen WOM-Codes codiert werden.
  13. Verfahren nach einem der Ansprüche 4 bis 12, bei dem die ersten Wits und die zweiten Wits jeweils als Blöcke organisiert sind, wobei jeder Belegung der Bits eines der Blöcke der ersten Wits durch den mindestens einen WOM-Code zwei unterschiedliche Codierungen zugeordnet sind.
  14. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Anzahl der zweiten Prüfbits kleiner als die Anzahl der zweiten Wits ist.
  15. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der erste Fehlercode ein fehlererkennender Code und/oder ein fehlerkorrigierender Code ist und bei dem der zweite Fehlercode ein fehlererkennender Code und/oder ein fehlerkorrigierender Code ist.
  16. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der erste Fehlercode ein Code ist, der einen Codeabstand größer gleich drei aufweist.
  17. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der zweite Fehlercode ein Code ist, der einen Codeabstand größer gleich drei aufweist.
  18. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen voneinander verschieden sind.
  19. Verfahren nach einem der vorhergehenden Ansprüche, bei dem wenn kein Fehler auftritt, die ersten Wits und die ersten Prüfbits eine echte Teilmenge von Bits des ersten Codewortes sind oder dass die zweiten Wits und die zweiten Prüfbits eine echte Teilmenge von Bits des zweiten Codewortes sind oder dass sowohl die ersten Wits und die ersten Prüfbits eine echte Teilmenge der Bits des ersten Codewortes als auch die zweiten Wits und die zweiten Prüfbits eine echte Teilmenge der Bits des zweiten Codewortes sind.
  20. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Länge des ersten Fehlercodes größer ist als die Anzahl der ersten Wits und der ersten Prüfbits und bei dem die Länge des zweiten Fehlercodes größer ist als die Anzahl der zweiten Wits und der zweiten Prüfbits.
  21. Verfahren nach einem der vorhergehenden Ansprüche, bei dem anhand der ersten Wits, der ersten Prüfbits und ersten Zusatzbits das erste Codewort des ersten Fehlercodes bestimmt wird und bei dem anhand der zweiten Wits, der zweiten Prüfbits und zweiten Zusatzbits das zweite Codewort des zweiten Fehlercodes bestimmt wird.
  22. Verfahren nach Anspruch 21, bei dem beim Schreiben in den Speicher und/oder beim Lesen aus dem Speicher die ersten Wits, die ersten Prüfbits und die ersten Zusatzbits das erste Codewort bilden und die zweiten Wits, die zweiten Prüfbits und die zweiten Zusatzbits das zweite Codewort bilden.
  23. Verfahren nach einem der Ansprüche 21 oder 22, bei dem die ersten Zuatzbits und/oder die zweiten Zusatzbits jeweils mindestens auf einer der folgenden Informationen basieren: – einer Adressinformation, – einer Adressinformation betreffend eine Schreibadresse oder eine Leseadresse, – einer aus einer Adressinformation abgeleiteten Information, – einer Identifikatorinformation, – einer Passwortinformation, – einer Invertierungsinformation.
  24. Verfahren nach einem der Ansprüche 21 bis 23, bei dem ein Fehler in den ersten Zusatzbits erkannt und/oder korrigiert wird und/oder bei dem ein Fehler in den zweiten Zusatzbits erkannt und/oder korrigiert wird.
  25. Verfahren nach einem der vorhergehenden Ansprüche, bei dem in den ersten weiteren Speicherzellen eine Markierung gespeichert wird, sofern die zweiten Prüfbits in den weiteren zweiten Speicherzellen gespeichert werden.
  26. Verfahren nach Ansrpuch 25, bei dem die Markierung eine Bitfolge ist, die keine gültige Bitfolge der ersten Prüfbits darstellt.
  27. Verfahren nach einem der vorhergehenden Ansprüche, bei dem ein Teilbereich des adressierbaren Speichers gelöscht wird, der die Adresse umfasst, auf den ein Schreibvorgang angewendet wurde, wenn nach dem Schreibvorgang die abzuspeichernden ersten oder zweiten Wits an dN Positionen nicht den gewünschten Zustand aufweisen und/oder wenn nach dem Schreibvorgang die ersten Prüfbits oder die zweiten Prüfbits an dP Positionen nicht den gewünschten Zustand aufweisen.
  28. Verfahren nach einem der Ansprüche 1 bis 26, bei dem ein zweiter Teilbereich des adressierbaren Speichers genutzt wird, wenn nach dem Schreibvorgang auf einen ersten Teilbereich die abzuspeichernden ersten oder zweiten Wits an dN Positionen nicht den gewünschten Zustand aufweisen und/oder wenn nach dem Schreibvorgang die ersten Prüfbits oder die zweiten Prüfbits an dP Positionen nicht den gewünschten Zustand aufweisen.
  29. Verfahren nach einem der Ansprüche 27 oder 28, bei dem der Teilbereich gelöscht wird oder der zweite Teilbereich anstelle des ersten Teilbereich genutzt wird, wenn gilt dN + dP ≥ S2, wobei S2 ein Schwellenwert ist, für den S2 ≥ 0 gilt.
  30. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen voneinander verschieden sind, wenn sich die ersten Prüfbits durch die zweiten Prüfbits nicht überschreiben lassen ohne dass eine vorgegebene Anzahl fehlerhafter Speicherzellen auftritt.
  31. Verfahren nach Anspruch 30, wobei die vorgegebene Anzahl fehlerhafter Speicherzellen größer gleich Null ist.
  32. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Anzahl der ersten Prüfbits größer eins ist und bei dem die Anzahl der zweiten Prüfbits größer eins ist.
  33. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der adressierbare Speicher mindestens einen der folgenden Typen von Speichern umfasst: – einen flüchtigen Speicher; – einen nichtflüchtigen Speicher.
  34. Vorrichtung zum Speichern von Bits in Speicherzellen eines Speichers mit einer Verarbeitungseinheit, die derart eingerichtet ist, – dass in zwei aufeinanderfolgenden Schreibvorgängen erste und zweite Wits unter einer gleichen Adresse in gleiche Speicherzellen geschrieben werden, ohne dass die Speicherzellen nach dem ersten Schreibvorgang gelöscht werden, – wobei erste Prüfbits in weitere erste Speicherzellen und zweite Prüfbits in weitere zweite Speicherzellen gespeichert werden.
  35. Vorrichtung nach Anspruch 34, bei der die Verarbeitungseinheit derart eingerichtet ist, dass – anhand der ersten Wits und der ersten Prüfbits ein erstes Codewort eines ersten Fehlercodes bestimmt wird, – anhand der zweiten Wits und der zweiten Prüfbits ein zweites Codewort eines zweiten Fehlercodes bestimmt wird.
  36. Vorrichtung nach einem der Ansprüche 34 oder 35, bei der die Vorrichtung den Speicher umfasst, der die weiteren ersten Speicherzellen und die weiteren zweiten Speicherzellen umfasst.
  37. Vorrichtung nach einem der Ansprüche 34 bis 36, bei der der Speicher einen nichtflüchtigen Speicher und/oder einen flüchtigen Speicher umfasst.
DE102015113414.4A 2015-08-14 2015-08-14 Fehlerkorrektur unter Verwendung von WOM-Codes Active DE102015113414B4 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102015113414.4A DE102015113414B4 (de) 2015-08-14 2015-08-14 Fehlerkorrektur unter Verwendung von WOM-Codes
US15/232,323 US10133626B2 (en) 2015-08-14 2016-08-09 Error correction using WOM codes
CN201610658775.7A CN106469099B (zh) 2015-08-14 2016-08-12 在应用wom码的情况下的错误纠正

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102015113414.4A DE102015113414B4 (de) 2015-08-14 2015-08-14 Fehlerkorrektur unter Verwendung von WOM-Codes

Publications (2)

Publication Number Publication Date
DE102015113414A1 true DE102015113414A1 (de) 2017-02-16
DE102015113414B4 DE102015113414B4 (de) 2023-02-23

Family

ID=57908101

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015113414.4A Active DE102015113414B4 (de) 2015-08-14 2015-08-14 Fehlerkorrektur unter Verwendung von WOM-Codes

Country Status (3)

Country Link
US (1) US10133626B2 (de)
CN (1) CN106469099B (de)
DE (1) DE102015113414B4 (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108292260B (zh) * 2016-08-25 2021-01-05 华为技术有限公司 用于软件自测试的装置和方法
CN109213433A (zh) * 2017-07-07 2019-01-15 华为技术有限公司 闪存设备中数据写入的方法及设备
US10802909B2 (en) * 2018-08-17 2020-10-13 Micron Technology, Inc. Enhanced bit flipping scheme
EP3633857B1 (de) * 2018-10-03 2022-01-26 BlackBerry Limited Verfahren und vorrichtungen für zeitgleiche codierer-mapping-aktualisierungen in der punktwolkencodierung
CN109491597B (zh) * 2018-10-11 2022-04-01 中国科学院微电子研究所 一种存储器的联想方法及存储器
CN111352754B (zh) * 2018-12-21 2023-09-15 中国石油天然气集团有限公司 一种数据存储检错纠错方法及数据存储装置
CN112134663B (zh) * 2019-06-25 2021-10-29 大唐移动通信设备有限公司 一种资源复用装置
CN112416665B (zh) * 2019-08-20 2024-05-03 北京地平线机器人技术研发有限公司 检测处理器运行状态的装置和方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4691299A (en) 1982-04-30 1987-09-01 Massachusetts Institute Of Technology Method and apparatus for reusing non-erasable memory media
US20130091402A1 (en) 2010-06-10 2013-04-11 The Regents Of The University Of California Strong single and multiple error correcting wom codes, coding methods and devices

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103218270B (zh) 2013-03-11 2016-08-17 北京忆恒创源科技有限公司 具有多个固态盘的计算机
CN103150261B (zh) 2013-03-11 2017-02-08 北京忆恒创源科技有限公司 用于同时访问多个固态盘的方法与装置
US9607690B2 (en) * 2015-01-19 2017-03-28 Queen's University At Kingston High sum-rate write-once memory
WO2016123590A1 (en) * 2015-01-30 2016-08-04 California Institute Of Technology Rewriting flash memories by message passing
US9772899B2 (en) * 2015-05-04 2017-09-26 Texas Instruments Incorporated Error correction code management of write-once memory codes

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4691299A (en) 1982-04-30 1987-09-01 Massachusetts Institute Of Technology Method and apparatus for reusing non-erasable memory media
US20130091402A1 (en) 2010-06-10 2013-04-11 The Regents Of The University Of California Strong single and multiple error correcting wom codes, coding methods and devices

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
CHO, Sangyeun; LEE, Hyunjin: Flip-N-Write: A Simple Deterministic Technique to Improve PRAM Write Performance, Energy and Endurance. In: 42nd Annual IEEE/ACM International Symposium on Microarchitecture 2009, S. 347-357 *
http://en.wikipedia.org/wiki/Berger_code
Rivest, R.; Shamir, A.: „How to Reuse a ,Write-Once'-Memory", Information and Control, Vol. 55, Nos. 1-3, Seiten 1 bis 19, 1982
RIVEST, Ronald L.; SHAMIR, Adi: How to Reuse a "Write-Once" Memory. In: Information and Control Vol. 55, 1982, S. 1-19. - ISSN 0019-9958 *
RIVEST, Ronald L.; SHAMIR, Adi: How to Reuse a „Write-Once" Memory. In: Information and Control Vol. 55, 1982, S. 1-19. - ISSN 0019-9958

Also Published As

Publication number Publication date
US20170046222A1 (en) 2017-02-16
CN106469099A (zh) 2017-03-01
DE102015113414B4 (de) 2023-02-23
CN106469099B (zh) 2020-06-09
US10133626B2 (en) 2018-11-20

Similar Documents

Publication Publication Date Title
DE102015113414B4 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE102013222321B4 (de) Elektronisches Gerät mit einer Vielzahl von Speicherzellen und mit physikalisch unklonbarer Funktion
DE102013020712B4 (de) Techniken zum Speichern von Bits in Speicherzellen mit Hängenbleiben-auf-0-oder-1-Fehlern
DE102018105434B4 (de) Verfahren und System zum Abtasten von gelöschten Flashspeicherseiten mit Querverweis auf verwandte Anwendungen
DE102015201384A1 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
DE102013016681B4 (de) Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern
DE102005052698A1 (de) Verfahren zur Verarbeitung von nichtflüchtig gespeicherten Daten
DE60103397T2 (de) Gesicherter eeprom-speicher mit fehlerkorrekturschaltung
DE10233642A1 (de) Fehlerkorrektur-Kodierung und -Dekodierung in einer Festkörper-Speicherungsvorrichtung
DE112007003080T5 (de) Verfahren, System und Vorrichtung für den ECC-Schutz von kleinen Datenstrukturen
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE2328869A1 (de) Verfahren zur pruefung eines digitalen speichersystems sowie zur durchfuehrung dieses verfahrens dienendes selbstpruefendes digitales speichersystem
DE102013013047B4 (de) Bestimmung einer Kennung
DE112020004922T5 (de) Speicherungsvorrichtung mit erhöhter beständigkeit
DE102018124836A1 (de) Neuartiger speicherbaustein
DE112020005001T5 (de) Qlc-programmierverfahren mit zurückspeichern von feindaten
DE102013222136B4 (de) Schaltung und Verfahren für die Mehr-Bit-Korrektur
DE102016107285B4 (de) Verfahren zur verwendung einer speichervorrichtung, speichervorrichtung und speichervorrichtungsanordnung
DE102017124313B4 (de) Speicheranordnung und verfahren zum verifizieren eines speicherzugriffs
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE3002048C2 (de)
DE102016123689B4 (de) Speicherschaltung und Verfahren zum Betreiben einer Speicherschaltung
DE102019113970B4 (de) Erkennung von adressfehlern
DE102020100541A1 (de) Bestimmung eines resultierenden datenworts beim zugriff auf einen speicher
DE102010006876B4 (de) Verfahren und Vorrichtung zur Kodierung von Daten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final