DE102016104012A1 - Verarbeitung eines Datenworts - Google Patents

Verarbeitung eines Datenworts Download PDF

Info

Publication number
DE102016104012A1
DE102016104012A1 DE102016104012.6A DE102016104012A DE102016104012A1 DE 102016104012 A1 DE102016104012 A1 DE 102016104012A1 DE 102016104012 A DE102016104012 A DE 102016104012A DE 102016104012 A1 DE102016104012 A1 DE 102016104012A1
Authority
DE
Germany
Prior art keywords
bits
check bits
data word
error
code
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.)
Pending
Application number
DE102016104012.6A
Other languages
English (en)
Inventor
Thomas Kern
Michael Gössel
Roland Brachmann
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 DE102016104012.6A priority Critical patent/DE102016104012A1/de
Priority to US15/449,029 priority patent/US10567007B2/en
Publication of DE102016104012A1 publication Critical patent/DE102016104012A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • 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/29Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2942Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes wherein a block of parity bits is computed only from combined information bits or only from parity bits, e.g. a second block of parity bits is computed from a first block of parity bits obtained by systematic encoding of a block of information bits, or a block of parity bits is obtained by an XOR combination of sub-blocks of information bits

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

Es wird ein Verfahren vorgeschlagen zum Verarbeiten eines Datenworts, bei dem das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, bei dem für das erste Teildatenwort erste Prüfbits bestimmt werden, wobei das erste Teildatenwort und die ersten Prüfbits ein erstes Codewort ergeben, bei dem für das zweite Teildatenwort zweite Prüfbits bestimmt werden, wobei das zweite Teildatenwort und die zweiten Prüfbits ein zweites Codewort ergeben, bei dem für das Datenwort dritte Prüfbits bestimmt werden, wobei mindestens (i) das Datenwort, (ii) eine Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits und (iii) die dritten Prüfbits Teile eines drittes Codeworts sind.

Description

  • Es ist bekannt, dass in elektronischen Schaltungen und in Speichern permanente bzw. transiente Fehler auftreten können. Derartige Fehler können zu Bitfehlern in binären Wörtern führen. Ein binäres Wort umfasst hierbei mehrere Bits, z.B. 8 Bits, 16 Bits, oder allgemein eine Vielzahl von Bits.
  • Die Aufgabe der Erfindung besteht darin, eine Möglichkeit für eine effiziente Fehlererkennung und/oder Fehlerkorrektur bereitzustellen.
  • 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 zum Verarbeiten eines Datenworts vorgeschlagen
    • – bei dem das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst,
    • – bei dem für das erste Teildatenwort erste Prüfbits bestimmt werden, wobei das erste Teildatenwort und die ersten Prüfbits ein erstes Codewort ergeben,
    • – bei dem für das zweite Teildatenwort zweite Prüfbits bestimmt werden, wobei das zweite Teildatenwort und die zweiten Prüfbits ein zweites Codewort ergeben,
    • – bei dem für das Datenwort dritte Prüfbits bestimmt werden, wobei mindestens – das Datenwort, – eine Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits und – die dritten Prüfbits
    Teile eines drittes Codeworts sind.
  • Hierbei sei angemerkt, dass die einzelnen Codewörter basierend auf Prüfbits, Teildatenwörtern oder dem Datenwort und ggf. weiteren Bits bestimmt werden. Insoweit ist die hier vorgeschlagene Aufzählung nicht abschließend zu verstehen, sondern umfasst (nicht abschließend) die Bestimmung des jeweiligen Codeworts die hier genannten Bits.
  • Ferner sei angemerkt, dass die jeweiligen Prüfbits beliebige Prüfwerte aufweisen können. Insbesondere kann die Information eines Prüfbits oder eines Prüfwerts in mindestens einer Speicherzelle gespeichert werden.
  • Auch sei angemerkt, dass das Datenwort ein in einem Speicher gespeichertes oder in einem Speicher zu speicherndes Datenwort sein kann. Dieses Datenwort wird beispielsweise derart verarbeitet, dass erste, zweite und dritte Prüfbits gemäß der obigen Vorschrift generiert und zumindest teilweise in diesem Speicher oder in einem weiteren Speicher abgespeichert werden. Insbesondere kann es sich bei dem Verfahren also um ein Verfahren zur Erstellung von zu dem Datenwort gehörenden Prüfbits und zum Abspeichern von solchen Prüfbits handeln.
  • Es ist eine Weiterbildung, dass mindestens zwei Bits der ersten Prüfbits und mindestens zwei Bits der zweiten Prüfbits verknüpft werden.
  • Es ist eine Weiterbildung, dass die ersten Prüfbits, die zweiten Prüfbits und die dritten Prüfbits in mindestens einem Speicher gespeichert werden.
  • Es ist eine Weiterbildung, dass die Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits eine der folgenden Möglichkeiten umfasst:
    • – eine Exklusiv-Oder-Verknüpfung,
    • – eine Exklusiv-Nicht-Oder-Verknüpfung,
    • – eine Kombination oder Aneinanderreihung der ersten Prüfbits und der zweiten Prüfbits.
  • Es ist eine Weiterbildung, dass das erste Teildatenwort und das zweite Teildatenwort gespeichert werden.
  • Es ist eine Weiterbildung, dass das erste Codewort ein Codewort eines ersten Fehlercodes und bei dem das zweite Codewort ein Codewort eines zweiten Fehlercodes ist.
  • Es ist eine Weiterbildung, dass der erste Fehlercode und der zweite Fehlercode jeweils ein fehlererkennender oder ein fehlerkorrigierender Code ist.
  • Optional kann der erste Fehlercode gleich dem zweiten Fehlercode sein. Eine weitere Option besteht darin, dass der erste Fehlercode und der zweite Fehlercode einen Codeabstand von mindestens 3 aufweisen.
  • Es ist eine Weiterbildung, dass das dritte Codewort ein Codewort eines dritten Fehlercodes ist.
  • Es ist eine Weiterbildung, dass der dritte Fehlercode ein fehlerkorrigierender Code ist.
  • Es ist eine Weiterbildung, dass der dritte Fehlercode einen Codeabstand größer gleich drei oder größer gleich fünf aufweist.
  • Der erste Fehlercode oder der zweite Fehlercode kann beispielsweise ein linearer Code mit einer vorgegebenen Anzahl von Prüfbits, beispielsweise 7 Prüfbits, ein Hamming-Code, ein Hsiao-Code oder ein BCH-Code sein. Die Anzahl der Prüfbits bestimmt eine Fehlererkennungswahrscheinlichkeit. Der dritte Fehlercode kann beispielsweise ein t-Bitfehler korrigierender Code oder ein t-Bitfehler korrigierender und t + 1-Bitfehler erkennender Code, beispielsweise ein BCH-Code, sein, wobei t ≥ 1 gilt.
  • Optional können der erste Fehlercode und der zweite Fehlercode (nur) zur Fehlererkennung verwendet werden oder teilweise zur Fehlerkorrektur und teilweise zur Fehlererkennung verwendet werden. Beispielsweise kann ein Hsiao-Code zur Korrektur von 1-Bitfehlern und zum Erkennen von 2-Bitfehlern verwendet werden. Der 2-Bitfehler kann dann mit dem dritten Fehlercode, z.B. einem 2-Bitfehler korrigierenden BCH-Code, korrigiert werden.
  • Es ist eine Weiterbildung, dass die Anzahl der ersten Prüfbits größer gleich zwei ist oder bei dem die Anzahl der zweiten Prüfbits größer gleich zwei ist.
  • Es ist eine Weiterbildung, dass die ersten Prüfbits, die zweiten Prüfbits und/oder die dritten Prüfbits Adressbits oder aus Adressbits abgeleitete Bits umfassen.
  • Adressbits oder aus Adressbits abgeleitete Bits können abgespeichert und als Prüfbits insbesondere für die Richtigkeit der angelegten Adresse verwendet werden. So kann beispielsweise beim Schreiben die Parität der Schreibadresse bestimmt und unter der Schreibadresse abgespeichert werden. Beim Lesen kann die Parität der Leseadresse gebildet und mit der gespeicherten Parität der Schreibadresse verglichen werden. Ein Unterschied zeigt dann einen Fehler in der Adressierung an.
  • Es gibt die Möglichkeit, dass die Adressbits beim Lesen oder Schreiben von einem Adressgenerator bereitgestellt werden und als Informationsbits neben den Datenbits verwendet werden, um die Prüfbits aus Datenbits und Adressbits zu bestimmen.
  • Beispielsweise werden beim Schreiben die Adressbits vom Adressengenerator als Schreibadresse bereitgestellt, aus den Datenbits und den Adressbits werden die Prüfbits berechnet und zusammen mit den Datenbits abgespeichert. Die Adressbits müssen hierbei nicht abgespeichert werden.
  • Insbesondere ist es eine Option, dass Bits aus Speicherzellen ausgelesen werden können, die mehr als ein Bit speichern oder weniger als ein Bit speichern.
  • Weiterhin ist es eine Option, dass Datenwörter oder Teile von Datenwörtern auch invertiert in den Speicher geschrieben werden können.
  • Es ist eine Weiterbildung, dass das erste Teildatenwort, die ersten Prüfbits und Adressbits oder aus Adressbits abgeleitete Bits das erste Codewort ergeben.
  • Es ist eine Weiterbildung, dass das zweite Teildatenwort, die zweiten Prüfbits und Adressbits oder aus Adressbits abgeleitete Bits das zweite Codewort ergeben.
  • Es ist eine Weiterbildung, dass
    • – das Datenwort,
    • – die Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits,
    • – die dritten Prüfbits und
    • – Adressbits oder aus Adressbits abgeleitete Bits
    das dritte Codewort ergeben.
  • Eine Option besteht darin, dass die Adressbits oder die aus Adressbits abgeleitete Bits in einem Speicher abgespeichert werden.
  • Es ist eine Weiterbildung, dass die ersten Prüfbits, die zweiten Prüfbits und/oder die dritten Prüfbits an unterschiedlichen Adressen eines Speichers gespeichert werden.
  • Es ist zum Beispiel möglich, das erste Teildatenwort unter einer Adresse a und das zweite Teildatenwort unter einer invertierten Adresse a zu speichern, wobei die invertierte Adresse a aus der Adresse a bestimmt werden kann, indem alle Adressbits der Adresse a invertiert werden.
  • Es ist eine Weiterbildung, dass das erste Teildatenwort und das zweite Teildatenwort an unterschiedlichen Adressen des Speichers gespeichert werden.
  • Es ist eine Weiterbildung, dass die unterschiedlichen Adressen sich in deren niederwertigstem Bit oder in allen Bits unterscheiden.
  • Das niederwertigste Bit wird auch als „least significant Bit“ (LSB) bezeichnet.
  • Es ist eine Weiterbildung, dass die Teilwörter unter einer Adresse in verschiedenen Bitpositionen in dem Speicher gespeichert werden.
  • Es ist eine Weiterbildung, dass der Speicher einen Speicher folgenden Typs umfasst:
    • – einen Cache-Speicher,
    • – ein Register oder ein Register-Array,
    • – einen Flash-Speicher,
    • – ein MRAM,
    • – ein SRAM,
    • – ein RE-RAM,
    • – ein PC-RAM,
    • – ein FE-RAM.
  • Auch wird zur Lösung der obigen Aufgabe ein Verfahren vorgeschlagen zum Verarbeiten eines Datenworts, wobei das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, umfassend die Schritte:
    • – Bestimmen einer ersten Bitfolge mindestens basierend auf ersten Prüfbits und dem ersten Teildatenwort,
    • – Überprüfen, ob die erste Bitfolge ein Codewort ist,
    • – falls die erste Bitfolge kein Codewort ist: Durchführen einer Fehlerkorrektur des Datenworts mindestens basierend auf den ersten Prüfbits und auf weiteren Prüfbits, wobei die weiteren Prüfbits unter Verwendung der ersten Prüfbits bestimmt werden.
  • Beispielsweise kann für das in einem Speicher gespeicherte Datenwort eine Überprüfung auf Fehler durchgeführt werden, indem die in diesem Speicher oder in mindestens einem anderen Speicher gespeicherten Prüfbits zur Fehlererkennung genutzt werden. Eine Fehlerkorrektur kann durchgeführt werden, wenn ein Fehler erkannt wurde. Insbesondere ist es eine Option, dass durch die Fehlerkorrektur das Datenwort korrigiert und nach der Korrektur weiter verarbeitet wird. Beispielsweise kann im Rahmen eines Lese-, Schreib- oder Löschzugriffs auf den Speicher das Datenwort geprüft werden.
  • Ein Vorteil dieser Lösung besteht darin, dass ein Fehler in einem Teil des Datenworts erkannt werden kann und nur dann eine Korrektur durchgeführt wird. Die Korrektur erfordert einen Zugriff auf weitere Bits, d.h. den (mindestens einen) weiteren Teil des Datenworts sowie die weiteren Prüfbits. Ein solcher Zugriff fällt vorteilhaft nicht an, wenn für das erste Teildatenwort kein Fehler festgestellt wurde.
  • Grundsätzlich wäre es möglich, noch zu überprüfen, ob die zweite Bitfolge ein weiteres Codewort ist, und, falls die zweite Bitfolge kein weiteres Codewort ist, die Fehlerkorrektur des Datenworts durchzuführen. Da jedoch die erste Bitfolge kein Codewort ergeben hat, wurde ein Fehler in dem Datenwort (genauer: dem ersten Teildatenwort des Datenworts) erkannt. Dieser Fehler wird nun mittels der weiteren Prüfbits korrigiert.
  • Somit ist das Verfahren geeignet zur Fehlererkennung und Fehlerkorrektur in dem Datenwort. Beispielsweise werden für das erste Teildatenwort die ersten Prüfbits bestimmt, wobei im fehlerfreien Fall die Bits des ersten Teildatenworts und die ersten Prüfbits ein erstes Codewort eines ersten Fehlercodes bilden. Beispielsweise werden für das zweite Teildatenwort zweite Prüfbits bestimmt, wobei im fehlerfreien Fall die Bits des zweiten Teildatenworts und die zweiten Prüfbits ein zweites Codewort eines zweiten Fehlercodes bilden. Weiterhin kann beispielsweise für das gesamte Datenwort geprüft werden, ob die Bits des Datenworts in Kombination mit Gesamt-Prüfbits, die auf den ersten Prüfbits, den zweiten Prüfbits und dritten Prüfbits basieren, im fehlerfreien Fall ein drittes Codewort eines dritten Fehlercodes bilden.
  • Beispielsweise sind mindestens zwei Bits und weniger als alle Bits der Gesamt-Prüfbits sind als eine bitweise (eindeutig umkehrbare) Verknüpfung von entsprechenden Prüfbits von mindestens zwei Teildatenwörtern bestimmt.
  • Sind beispielsweise ein erstes und ein zweites Teildatenwort des Datenworts vorhanden, und weisen der erste Fehlercode und der zweite Fehlercode beispielsweise jeweils l erste Prüfbits und l zweite Prüfbits mit l ≥ 2 auf, und weist der dritte Fehlercode L Prüfbits mit L > l auf, dann können beispielsweise l dritte Prüfbits der L Prüfbits des dritten Fehlercodes als komponentenweise XOR-Verknüpfung der l ersten Prüfbits und der l zweiten Prüfbits bestimmt sein. Von den L Prüfbits des dritten Fehlercodes können dann lediglich L – l Prüfbits abgespeichert werden, da die übrigen l Prüfbits der L Prüfbits bereits aus den l ersten Prüfbits und den l zweiten Prüfbits bestimmt sind.
  • Es ist auch möglich, dass mehr als zwei Teildatenwörter verwendet werden. Mindestens zwei und weniger als alle Prüfbits des Datenworts können in diesem Fall als eine komponentenweise Verknüpfung von Prüfbits der mehr als zwei Teildatenwörter bestimmt werden.
  • Der vorstehend erläuterte Ansatz ermöglicht es, dass dann, wenn in Bits des Datenworts, die Bits des ersten Teildatenworts sind, unter Verwendung des ersten Fehlercodes ein Fehler erkannt und nicht korrigiert wird oder in Bits des Datenworts, die Bits des zweiten Teildatenworts sind unter Verwendung des zweiten Fehlercodes ein Fehler erkannt und nicht korrigiert wird, ein Fehler in dem Datenwort unter Verwendung des dritten Fehlercodes korrigiert wird (sofern der aufgetretene Fehler mittels des dritten Fehlercodes korrigierbar ist).
  • Es ist beispielsweise möglich, dass der erste Fehlercode ein τ-Bitfehler korrigierender und t-Bitfehler erkennender Fehlercode ist, wobei 0 < τ < t ≥ 2 gilt. Der dritte Fehlercode ist ein T-Bitfehler korrigierender Fehlercode mit T ≥ t, wobei dann, wenn in Bits des Datenworts, die Bits des ersten Teildatenworts sind, unter Verwendung des ersten Fehlercodes ein t-Bit-Fehler erkannt wurde, der unter Verwendung des ersten Fehlercodes nicht korrigierbar ist, der t-Bitfehler in dem Datenwort unter Verwendung des dritten Fehlercodes korrigiert wird.
  • Auch ist es möglich, dass der zweite Fehlercode ein τ-Bitfehler korrigierender und t-Bitfehler erkennender Code ist, wobei 0 < τ < t ≥ 2 gilt. Der dritte Fehlercode ist ein T-Bit Fehler korrigierender Code mit T > t, wobei dann, wenn in Bits des Datenworts, die Bits des zweiten Teildatenworts sind, unter Verwendung des zweiten Fehlercodes ein t-Bitfehler erkannt wurde, der unter Verwendung des zweiten Fehlercodes nicht korrigierbar ist, der t-Bitfehler in dem Datenwort unter Verwendung des dritten Fehlercodes korrigiert wird. Dabei können Prüfbits des dritten Fehlercodes beispielsweise als XOR-Verknüpfung von entsprechenden Prüfbits des ersten und des zweiten Fehlercodes bestimmt sein.
  • Es ist eine Weiterbildung, dass die weiteren Prüfbits unter Verwendung von mindestens zwei ersten Prüfbits bestimmt werden.
  • Es ist eine Weiterbildung, dass die ersten Prüfbits mit dem ersten Teildatenwort assoziiert sind.
  • Es ist eine Weiterbildung, dass
    • – die weiteren Prüfbits zweite Prüfbits und dritte Prüfbits umfassen,
    • – wobei die zweiten Prüfbits mit dem zweiten Teildatenwort assoziiert sind und
    • – wobei die dritten Prüfbits mit dem Datenwort assoziiert sind.
  • Es ist eine Weiterbildung, dass die Fehlerkorrektur des Datenworts basierend auf einer Verknüpfung der ersten Prüfbits und der zweiten Prüfbits sowie der dritten Prüfbits durchgeführt wird.
  • Es ist eine Weiterbildung, dass die Anzahl der ersten Prüfbits größer gleich zwei ist oder bei dem die Anzahl der zweiten Prüfbits größer gleich zwei ist.
  • Es ist eine Weiterbildung, dass das Verfahren den Schritt umfasst: falls die erste Bitfolge ein Codewort ist: Durchführen einer vorgegebenen ersten Aktion.
  • Die vorgegebene erste Aktion kann eine Aktion sein, die durchgeführt wird, wenn kein Fehler (in dem ersten Teildatenwort) erkannt wurde. Entsprechend kann mit hoher Wahrscheinlichkeit angenommen werden, dass kein Lesefehler vorliegt. Beispielsweise kann eine Überprüfung eines Speichers oder ein Lesevorgang fortgesetzt werden.
  • Es ist eine Weiterbildung, dass das Verfahren den Schritt umfasst: falls die erste Bitfolge kein Codewort ist: Durchführen einer Korrektur des ersten Teildatenworts basierend auf den ersten Prüfbits.
  • Es ist eine Weiterbildung, dass die ersten Prüfbits das erste Teildatenwort, das zweite Teildatenwort und die weiteren Prüfbits aus einem Speicher gelesen werden.
  • Es ist eine Weiterbildung, dass das Codewort ein Codewort eines fehlerkorrigierenden Codes ist.
  • Es ist eine Weiterbildung, dass das Verfahren den Schritt umfasst: falls die erste Bitfolge kein Codewort ist: Durchführen der Fehlerkorrektur des Datenworts basierend auf den ersten Prüfbits und den weiteren Prüfbits sowie basierend auf Adressbits oder auf aus Adressbits abgeleiteten Bits.
  • Beim Lesen werden die Adressbits beispielsweise von dem Adressengenerator als Leseadresse bereitgestellt und aus den eventuell fehlerhaften Datenbits und den Adressbits der Leseadresse werden die Prüfbits berechnet und mit den eventuell fehlerhaften ausgelesenen Prüfbits verglichen.
  • Weiterhin ist es auch möglich, Adressbits der Schreibadresse oder aus den Adressbits der Schreibadresse abgeleitete Bits in dem Speicher zu speichern und beim Lesen die unter einer Leseadresse ausgelesenen Adressbits der Schreibadresse mit den angelegten Bits der Leseadresse zu vergleichen.
  • Es ist eine Weiterbildung, dass das Verfahren den Schritt umfasst: Bestimmen der ersten Bitfolge basierend auf den ersten Prüfbits, dem ersten Teildatenwort und auf Adressbits oder aus Adressbits abgeleiteten Bits.
  • Eine Option besteht darin, dass die Adressbits oder die aus Adressbits abgeleiteten Bits aus dem Speicher gelesen oder von einem Adressengenerator bereitgestellt werden.
  • Auch wird eine Schaltungsanordnung vorgeschlagen zum Verarbeiten eines Datenworts, wobei das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, wobei die Schaltungsanordnung eingerichtet ist
    • – für das erste Teildatenwort erste Prüfbits zu bestimmen, wobei das erste Teildatenwort und die ersten Prüfbits ein erstes Codewort ergeben,
    • – für das zweite Teildatenwort zweite Prüfbits zu bestimmen, wobei das zweite Teildatenwort und die zweiten Prüfbits ein zweites Codewort ergeben,
    • – für das Datenwort dritte Prüfbits zu bestimmen, wobei mindestens – das Datenwort, – eine Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits und – die dritten Prüfbits
    Teile eines drittes Codeworts sind.
  • Weiterhin wird eine Vorrichtung vorgeschlagen zum Verarbeiten eines Datenworts, wobei das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, wobei die Vorrichtung eine Verarbeitungseinheit umfasst, die eingerichtet ist zur Durchführung der Schritte:
    • – Bestimmen einer ersten Bitfolge mindestens basierend auf ersten Prüfbits und dem ersten Teildatenwort,
    • – Überprüfen, ob die erste Bitfolge ein Codewort ist,
    • – falls die erste Bitfolge kein Codewort ist: Durchführen einer Fehlerkorrektur des Datenworts mindestens basierend auf den ersten Prüfbits und auf weiteren Prüfbits, wobei die weiteren Prüfbits unter Verwendung der ersten Prüfbits bestimmt werden.
  • Hierbei sei angemerkt, dass die Schaltungsanordnung beispielsweise als eine Prozessoreinheit und/oder eine zumindest teilweise festverdrahtete oder logische Schaltungsanordnung ausgeführt sein kann, die beispielsweise derart eingerichtet ist, dass das Verfahren wie hierin beschrieben durchführbar ist.
  • Die Schaltungsanordnung kann als eine Verarbeitungseinheit ausgeführt sein und insbesondere jede Art von Prozessor oder Rechner oder Computer mit entsprechend notwendiger Peripherie (Speicher, Input/Output-Schnittstellen, Ein-Ausgabe-Geräte, etc.) sein oder umfassen.
  • Die vorstehenden Erläuterungen betreffend das Verfahren gelten für die Vorrichtung, hier beispielhaft die erwähnte Schaltungsanordnung entsprechend. Die Vorrichtung kann in einer Komponente oder verteilt in mehreren Komponenten ausgeführt sein.
  • Auch wird die oben genannte Aufgabe gelöst mittels eines Systems umfassend mindestens eine der hier beschriebenen Vorrichtungen.
  • Weiterhin wird zur Lösung der Aufgabe ein Computerprogrammprodukt angegeben, das direkt in einen Speicher eines digitalen Computers ladbar ist, umfassend Programmcodeteile, die dazu geeignet sind, Schritte des hier beschriebenen Verfahrens durchzuführen.
  • Auch wird zur Lösung der Aufgabe ein computerlesbares Speichermedium angegeben, umfassend von einem Computer ausführbare Anweisungen, die dazu geeignet sind, dass der Computer Schritte des hier beschriebenen Verfahrens durchführt.
  • Die oben beschriebenen Eigenschaften, Merkmale und Vorteile dieser Erfindung sowie die Art und Weise, wie diese erreicht werden, werden nachfolgend beschrieben im Zusammenhang mit einer schematischen Beschreibung von Ausführungsbeispielen, die im Zusammenhang mit den Zeichnungen näher erläutert werden. Dabei können zur Übersichtlichkeit gleiche oder gleichwirkende Elemente mit gleichen Bezugszeichen versehen sein.
  • Es zeigen:
  • 1 eine beispielhafte Schaltungsanordnung zur Bildung von Prüfbits,
  • 2 ein Ausführungsbeispiel für eine Schaltungsanordnung zur Bildung von Prüfbits,
  • 3 ein weiteres Ausführungsbeispiel einer Schaltungsanordnung zur Bildung von Prüfbits,
  • 4A ein Diagramm zur Veranschaulichung einer Belegung von Speicherzellen eines Speichers mit Datenbits, Prüfbits zweier fehlererkennender Codes und eines fehlerkorrigierenden Codes unter Verwendung von zwei Adressen,
  • 4B ein Diagramm zur Veranschaulichung einer Belegung von Speicherzellen eines Speichers mit Datenbits, Prüfbits zweier fehlererkennender Codes und eines fehlerkorrigierenden Codes, wobei die Prüfbits des fehlerkorrigierenden Codes an einer zusätzlichen Adresse abgelegt sind,
  • 4C ein Diagramm zur Veranschaulichung einer Belegung von Speicherzellen eines Speichers mit Datenbits, Prüfbits zweier fehlererkennender Codes und eines fehlerkorrigierenden Codes unter einer einzigen Adresse,
  • 5A eine Schaltungsanordnung zur Fehlererkennung in einem ersten Teildatenwort unter Verwendung eines ersten fehlererkennenden Codes,
  • 5B eine Schaltungsanordnung zur Fehlererkennung in einem zweiten Teildatenwort unter Verwendung eines zweiten fehlererkennenden Codes,
  • 6 eine beispielhafte Schaltungsanordnung zur Korrektur von Fehlern in Datenbits,
  • 7 eine Tabelle, die unterschiedliche Darstellungsformen von Elementen eines Galoisfeldes GF(2m) mit m = 4 veranschaulicht.
  • Eine Fehlerkorrektur und/oder eine Fehlererkennung erfolgt/erfolgen in den hier erläuterten Beispielen unter Verwendung von Codes. Ein solcher Code, auch bezeichnet als Fehlercode, kann zur Fehlererkennung und/oder zur Fehlerkorrektur eingesetzt werden.
  • Beispielhaft können sogenannte binäre Codes betrachtet werden, bei denen für Datenbits (die ein Datenwort oder ein Teildatenwort bilden können), Prüfwerte oder Prüfbits bestimmt werden, die ggf. in Kombination miteinander im fehlerfreien Fall ein Codewort des betrachteten Fehlercodes bilden. Die Komponenten eines Datenworts und die einzelnen Prüfwerte sind beispielsweise binär als Bits ausgeführt. Darüber hinaus ist es eine Option, dass die Bestandteile des Datenworts und/oder die Prüfwerte nicht binär sind, sondern beispielsweise Bytes oder mehrwertige Werte annehmen können. Somit können auch generell mehrwertige Datenwörter und/oder mehrwertige Prüfwerte verwendet werden.
  • In den hier erläuterten Ausführungsformen werden die Komponenten der betrachteten Datenwörter sowie die einzelnen Prüfwerte beispielhaft als binär (Bits) angenommen. Ohne Einschränkung auf derartig binäre Werte ist die hierin beschriebene Lösung auch auf Datenwörter und Prüfwerte mit mehrwertigen Komponenten, z.B. Bytes einer vorgegebenen Länge anwendbar. Hierbei sei angemerkt, dass beispielhaft ein Byte 8 Bit aufweist, aber auch eine andere Anzahl von Bits aufweisen kann.
  • Beispielhaft wird nachfolgend als ein fehlerkorrigierender Code ein 2-Bitfehler korrigierender BCH-Code mit einbezogener Gesamtparität genutzt. Als Beispiele für fehlererkennende Codes werden Hamming-Codes verwendet.
  • Zur Fehlerkorrektur zufällig verteilter Mehrbitfehler können BCH-Codes verwendet werden. Dies ist beispielsweise in [Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seiten 141 bis 170] beschrieben.
  • Ein BCH-Code mit einbezogener Gesamtparität ist ein zyklischer Code und kann, wie jeder zyklische Code, durch sein Generatorpolynom G(z) beschrieben werden. Für einen BCH-Code, der 1-Bitfehler und 2-Bitfehler korrigieren sowie 3-Bitfehler erkennen soll, hat das Generatorpolynom G(z) die Form G(z) = G1(z)·G3(z)·P(z). (1)
  • Dabei gilt
    • – G1(z) ist das Modularpolynom k1-ten Grades des betrachteten Galoisfeldes GF(
      Figure DE102016104012A1_0002
      ) mit der Wurzel α = z.G1(z) wird hier beispielhaft als primitives Polynom gewählt.
    • – G3(z) ist das Minimalpolynom der Wurzel α3 = z3, das vom Grad k2 mit k2 ≤ k1 ist.
    • – P(z) = (z + 1) ist das Polynom zur Berücksichtigung der Gesamtparität.
  • Allgemein kann beispielsweise ein t-Bitfehler korrigierender BCH-Code mit einem Generatorpolynom G(z) = G1(z)·G3(z)·...·G2t-1·P(z) und t > 2 verwendet werden. Auch ist es möglich, einen 3-Bitfehler korrigierender Reed-Muller-Code oder einen sonstigen fehlerkorrigierenden Code zu verwenden.
  • Als Beispiel für einen 2-Bitfehler korrigierenden BCH-Code ergibt sich mit k1 = 4 und G1(z) = z4 ⊕ z ⊝ 1 (Modularpolynom des Galoisfeldes GF(24)), G3(z) = z4 ⊕ z3 ⊕ z2 ⊕ z ⊕ 1 (Minimalpolynom der Wurzel α3 = z3) mit k2 = k1 = 4: G(z) = G1(z)·G2(z)·P(z) = z9 ⊕ z6 ⊕ z5 ⊕ z4 ⊕ z ⊕ 1. (2)
  • Die Länge des unverkürzten Codes, d.h. die Länge der Codewörter des unverkürzten Codes, ist n = 24 – 1 = 15, die Anzahl der Prüfbits des Codes ist m = k1 + k2 + 1 = 4 + 4 + 1 = 9 und die Anzahl der Informationsbits beträgt k = n – m = 15 – 9 = 6.
  • Die Polynome G1 und G2 können für k1 = 4 beispielsweise anhand der Tabelle in [Peterson, W. and Weldon, E.: „Error-Correcting Codes ", MIT Press, 1972, S. 476, Anhang C] in der Form [2,3]octal = 010011 ~ z4 + z + 1 = G1(z) und [3,7]octal = 011111 ~ z4 + z3 + z2 + z + 1 = G2(z) bestimmt werden. Der Codeabstand ist dmin = 6, und der Code – mit der zusätzlichen Gesamtparität – erlaubt eine Korrektur aller 1-Bifehler und 2-Bitfehler sowie ein Erkennen aller 3-Bitfehler.
  • Das Galoisfeld GF(24) ist ein endlicher Körper mit 24 = 16 Elementen. Das Modularpolynom des Galoisfelds GF(24) mit 16 Elementen ist das primitive Polynom G1(z) = z4 + z + 1.
  • Elemente eines Galoisfelds können auf unterschiedliche Arten dargestellt werden. Beispielhaft werden hier verschiedene Darstellungen für das Galoisfeld GF(24) angegeben: Die 16 Elemente des Galoisfelds GF(24) = GF(16) können
    • – als Wert 0 und als die Potenzen einer Variablen z, d.h. durch 0, z0, z1, z2, ..., z14 oder 0, α0, α1, α2, ..., α14, wobei α ein primitives Element des Galoisfelds ist,
    • – als 24 = 16 Polynome 3-ten Grades in z mit binären Koeffizienten oder
    • – als 24 = 16 vierstellige Binärvektoren (0,0,0,0), (0,0,0,1), ..., (1,1,1,1), wobei die Komponenten der Binärvektoren den Koeffizienten der jeweiligen Polynome entsprechen,
    dargestellt werden. Die Verwendung verschiedener Darstellungen ist für technische Anwendungen nützlich, je nachdem, welche Operationen zwischen den Elementen durchzuführen sind.
  • Aus zi wird durch zi modulo G1(z), d.h. durch einen Rest der Division zi:(z4 + z + 1) die zugeordnete Polynomdarstellung bestimmt. Die binären Koeffizienten des Polynoms bilden den 4-stelligen Binärvektor der Vektordarstellung. Die in 7 gezeigte Tabelle veranschaulicht diesen Zusammenhang.
  • Die Potenzdarstellung eignet sich beispielsweise zur Beschreibung oder Implementierung der Multiplikation. Es gilt zi·zj = z(i+j)modulo 15.
  • Mit der Bezeichnung i = log(zi) gilt
    Figure DE102016104012A1_0003
    und die Multiplikation zweier Elemente in der Exponentdarstellung kann auf die Addition modul
    Figure DE102016104012A1_0004
    der Exponenten zurückgeführt werden, die z.B. mit einem sogenannten „End-Around-Carry“-Addierer realisiert werden kann.
  • Die Polynom- oder Vektordarstellung kann genutzt werden, um eine effiziente Implementierung der Addition zu erreichen, bei der die Koeffizienten der Polynome bzw. die Komponenten der Vektoren modulo 2 addiert werden. Dies kann beispielsweise mittels Exklusiv-Oder-Gattern realisiert werden. So gilt beispielsweise: z6 + z8 = (z3 + z2) + (z2 + 1) = z3 + 1 = z14 bzw. 1100 + 0101 = 1 ⊕ 0, 1 ⊕ 1, 0 ⊕ 0, 0 ⊕ 1 = 1001.
  • Die Addition, die durch eine komponentenweise Addition modulo 2 bestimmt ist, kann mittels eines XOR-Gatters (Exklusiv-Oder-Gatters) realisiert werden.
  • Der Übergang von der Exponentialdarstellung in die Polynom- oder Vektordarstellung kann ebenso wie der Übergang der Polynomdarstellung oder Vektordarstellung in die Exponentialdarstellung mittels eines Speichers, z.B. eines Nur-Lese-Speichers (ROM), umgesetzt werden.
  • Ein BCH-Code kann durch sein Generatorpolynom G(z), eine Generatormatrix G und eine H-Matrix H beschrieben werden. Die Generatormatrix wird auch G-Matrix genannt. Die G-Matrix kann in systematischer oder in nicht systematischer Form verwendet werden.
  • Aus dem Generatorpolynom G(z) kann die G-Matrix des BCH-Codes in ihrer systematischen Form bestimmt werden. Wird die G-Matrix in ihrer systematischen Form verwendet, können die Informationsbits eines Codeworts unverändert im Speicher gespeichert und im fehlerfreien Fall unverändert ausgelesen werden.
  • Die H-Matrix des Codes kann ebenfalls in systematischer Form oder in nicht systematischer Form verwendet werden. Wird die G-Matrix in systematischer Form verwendet, ist es möglich, die H-Matrix in systematischer Form oder in nicht systematischer Form zu verwenden.
  • In einem Beispiel wird die G-Matrix in ihrer systematischen Form und die H-Matrix sowohl in ihrer systematischen Form als auch in ihrer nicht systematischen Form verwendet. Die H-Matrix in nicht systematischer Form wird auch als separierte H-Matrix bezeichnet.
  • Für einen zyklischen Code bilden die Koeffizienten eines Codepolynoms, d.h. eines Polynoms, das ohne Rest durch das Generatorpolynom des Codes teilbar ist, einen Codevektor.
  • Da ein BCH-Code ein spezieller zyklischer Code ist, ist das beschriebene Vorgehen zur Bestimmung der G-Matrix für jeden BCH-Code anwendbar.
  • Um die G-Matrix in systematischer Form aus dem Generatorpolynom G(z) eines gegebenen zyklischen Codes abzuleiten, wird zunächst zn-k+i für i = 0, 1, ..., k – 1 = 0, 1, ..., 5 dargestellt als zn-k+i = ai(z)·G(z) + bi(z). (3)
  • Dies ist beispielsweise in [Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seite 94] beschrieben. Dabei ist bi(z) der Rest der Division von zn-k+i durch G(z).
  • G(z) ist ein Polynom vom Grad k = 9, so dass bi(z) ein Polynom höchstens vom Grad k – 1 = 8 ist.
  • Aus Gleichung (3) folgt zn-k+i + bi(z) = ai(z)·G(z). (4)
  • Da zn-k+i + bi(z) nach Gleichung (3) durch G(z) ohne Rest teilbar ist, ist zn-k+i + bi(z) ein Codepolynom. Das diesem Codepolynom zn-k+i + bi(z) zugeordnete Codewort hat folgende Eigenschaften:
    • – Das dem Rest der Division bi(z) entsprechende Teildatenwort des Codeworts hat nur Komponenten ≠ 0 in den ersten k – 1 = 8 Spalten der G-Matrix.
    • – Das der Potenz zn-k+i zugeordnete Teildatenwort des Codeworts hat nur eine Komponente mit dem Wert 1, nämlich die (n – k + i)-te Komponente. Alle anderen Komponenten haben den Wert 0. Für i = 0, ..., k – 1 bilden diese Komponenten die k-dimensionale Einheitsmatrix Ik als rechten Teil der G-Matrix.
  • Für i = 0, ..., k – 1 sind die Koeffizienten der Polynome zn-k+i + bi(z) Codewörter, die die Zeilen der G-Matrix des BCH-Codes in systematischer Form bilden, so dass aus dem Generatorpolynom des BCH-Codes die systematische Form der G-Matrix des Codes bestimmt ist. Dies ist beispielsweise in [Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seite 94] beschrieben.
  • Für das Beispiel des betrachteten konkreten Codes können die Zeilen der G-Matrix in systematischer Form wie folgt bestimmt werden: Es gilt z9:G(z) = z9:z9 + z6 + z5 + z4 + z + 1 = 1 Rest z6 + z5 + z4 + z + 1, und z9 + {z6 + z5 + z4 + z + 1} ist das erste Codepolynom. Entsprechend gilt: z10:G(z) = 1010:z9 + z6 + z5 + z4 + z + 1 = z Rest z7 + z6 + z5 + z2 + z, und z10 + {z7 + z6 + z5 + z2 + z} ist das zweite Codepolynom. Entsprechend können insgesamt k = 6 durch G(z) ohne Rest teilbare Codepolynome {1 + z + z4 + z5 + z6} + z9 {z + z2 + 75 + z6 + z7} + z10 {z2 + z3 + z6 + z7 + z8} + z11 {1 + z + z3 + z5 + z6 + 77 + z8} + z12 {1 + z2 + z5 + z7 + 78} + z13 {1 + z3 + z4 + z5 + z8} + z14 bestimmt werden, deren Koeffizienten die (linear unabhängigen) Code-Vektoren
    Figure DE102016104012A1_0005
    sind, die die Zeilen der G-Matrix bilden. Der Koeffizient der niederwertigsten Potenz z0 steht hier links.
  • Die G-Matrix in systematischer Form ist
    Figure DE102016104012A1_0006
    und ein Codevektor v = v0, ..., v14 ist bestimmt durch (u0, u1, u2, u3, u4, u5)·G = v0, v1, ... v14 = c0, ..., c8, u0, u1, ..., u5. (6)
  • Dabei sind u0, ..., u5 die 6 Informationsbits und c0, ..., c8 die 9 Prüfbits des Codes.
  • Die der G-Matrix zugeordnete (9,15)-H-Matrix H = (I9, P T / 9,6) in systematischer Form ist
    Figure DE102016104012A1_0007
  • Wird die H-Matrix, die hier in ihrer systematischen Form vorliegt, mit einem gültigen Codevektor v multipliziert, so ergibt sich das Syndrom 0.
  • Eine H-Matrix eines BCH-Codes kann auch in der separierten Form als
    Figure DE102016104012A1_0008
    dargestellt werden. Dabei gilt: H1 = (α0, α1, ..., αn-1), H3 = ((α0)3, (α1)3, ..., (αn-1)3),
    Figure DE102016104012A1_0009
  • Ferner gilt
    Figure DE102016104012A1_0010
    und die Exponenten von α werden modulo n betrachtet. Für den betrachteten Code ergibt sich damit die H-Matrix in separierter Form als
    Figure DE102016104012A1_0011
    wobei die Elemente αj des Galoisfelds GF(24) in ihrer Vektordarstellung gemäß 7 verwendet worden sind.
  • Die Fehlererkennung und Fehlerkorrektur erfolgt aufgrund des Fehlersyndroms. Wird ein Vektor r = r0, r1, ..., rn-1 auf Fehler überprüft, wird allgemein das Fehlersyndrom sT = H·rT gebildet, wobei rT der Spaltenvektor des Zeilenvektors r ist. Im Falle der betrachteten separierten H-Matrix besteht das Syndrom s aus drei Komponenten s1, s3 und sP mit s T / 1 = H1·rT, s T / 3 =H3·rT, sP = P·rT = v0 ⊕ v1 ⊕ ... ⊕ vn-1.
  • Die Verwendung der systematischen G-Matrix zur Codierung erlaubt beispielsweise ein nicht modifiziertes Schreiben der Informations- oder Datenbits in einen Speicher und ein nicht modifiziertes Lesen der Informationsbits aus dem Speicher, solange kein Fehler vorliegt.
  • Beispielhaft wird davon ausgegangen, dass Informationsbits u0, ..., u5, die ein Informationswort (auch bezeichnet als Datenwort) bilden, aus zwei Teildatenwörtern (auch bezeichnet als Teilwörtern) x = x0, x1, x2 = u0, u1, u2 und y = y0, y1, y2 = u3, u4, u5 mit u = x, y bestehen. Wird die G-Matrix in ihrer systematischen Form gemäß Gleichung (5) verwendet, so gilt gemäß der Beziehung (6) für die Prüfbits c0, c1, ..., c8 des 2-Bitfehler korrigierenden BCH-Codes c0 = u0 + u3 + u4 + u5, (9) c1 = u0 + u1 + u3, (10) c2 = u1 + u2 + u4, (11) c3 = u2 + u3 + u5, (12) c4 = u0 + u5, (13) c5 = u0 + u1 + u3 + u4 + u5, (14) c6 = u0 + u1 + u2 + u3, (15) c7 = u1 + u2 + u3 + u4, (16) c8 = u2 + u3 + u4 + u5. (17)
  • In dem vorliegenden Beispiel ist das Datenwort u0, u1, ..., u5 aus den zwei Teilwörtern u0, u1, u2 = x0, x1, x2 = x und u3, u4, u5 = y0, y1, y2 = y zusammengesetzt.
  • Für das Teildatenwort x wird ein fehlererkennender Code Cdet1 bestimmt mit Prüfbits γ0, γ1, γ2 und für das Teildatenwort y wird ein fehlererkennender Code Cdet2 bestimmt mit Prüfbits δ0, δ1, δ2. Vorzugsweise umfasst jeder der fehlererkennenden Codes mindestens zwei Prüfbits.
  • Für die Prüfbits des Codes Cdet1 gilt γ0 = u0 = x0, (18) γ1 = u0 + u1 = x0 + x1, (19) γ2 = u1 + u2 = x0 + x2. (20)
  • Die Gleichungen (18), (19) und (20) für die Prüfbits des fehlerekennenden Codes Cdet1 ergeben sich aus den Gleichungen (9), (10) und (11) für die Prüfbits des fehlerkorrigierenden Codes Ccor, indem die Bits u3, u4, u5 des zweiten Teildatenworts gleich 0 gesetzt und die Prüfbits c0, c1, c2 durch die Prüfbits γ0, γ1, γ2 ersetzt werden.
  • Für die Prüfbits des Codes Cdet2 gilt δ0 = u3 + u4 + u5 = y0 + y1 + y2, (21) δ1 = u3 = y0, (22) δ2 = u4 = y1. (23)
  • Die Gleichungen (21), (22) und (23) für die Prüfbits des fehlerekennenden Codes Cdet2 ergeben sich aus den Gleichungen (9), (10) und (11) für die Prüfbits des fehlerkorrigierenden Codes Ccor, indem die Bits u0, u1, u2 des ersten Teildatenworts gleich 0 gesetzt und die Prüfbits c0, c1, c2 durch die Prüfbits δ0, δ1, δ2 ersetzt werden.
  • Aus den Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 und den Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 sind die Prüfbits c0, c1, c2 des fehlerkorrigierenden Codes Ccor eindeutig bestimmt. In dem vorliegenden Anwendungsbeispiel gilt: c0 = γ0 + δ0, c1 = γ1 + δ1, c2 = γ2 + δ2. (24)
  • Somit werden die Prüfbits c0, c1, c2 des fehlerkorrigierenden Codes Ccor in die Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 und die Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 aufgeteilt.
  • Die Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 hängen nur von den Bits des ersten Teildatenworts und die Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 hängen nur von den Bits des zweiten Teildatenworts ab.
  • Die Prüfbits c3, ..., c8 des fehlerkorrigierenden Codes Ccor werden beispielsweise unverändert beibehalten und nicht aufgespalten. Weiterhin werden diese Prüfbits in dem Speicher abgespeichert.
  • Insgesamt sind die Prüfbits c0, c1, ..., c8 des fehlerkorrigierenden Codes Ccor durch die Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 und die Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 sowie die weiteren Prüfbits c3, ..., c8 eindeutig bestimmt.
  • Datenbits und Prüfbits können unter entsprechenden Adressen in einem adressierbaren Speicher abgespeichert sein.
  • Dabei ist es möglich, dass ein Speicher Speicherzellen aufweist, die mindestens ein Bit pro Speicherzelle speichern können. Insbesondere ist es eine Option, dass ein Informationsbit oder ein Informationswert unter Verwendung von mehreren Speicherzellen gespeichert wird.
  • Beispielsweise können ein erstes Teildatenwort u0, u1, u2 und die zugehörigen Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 unter einer Adresse a1 in einen Speicher geschrieben werden. Nach einer Weile können eventuell fehlerhafte Datenbits u ′ / 0, u ′ / 1, u ′ / 2 des Teildatenworts und eventuell fehlerhafte Prüfbits γ ′ / 0, γ ′ / 1, γ ′ / 2 unter der Adresse a1 ausgelesen werden. Für die ausgelesenen Bits kann geprüft werden, ob ein Codewort des Codes Cdet1 vorliegt. Handelt es sich um ein solches Codewort, wird kein Fehler erkannt; handelt es sich hingegen nicht um ein Codewort, wird ein Fehler erkannt.
  • Weiterhin ist es möglich, ein zweites Teildatenwort u3, u4, u5 und die zugehörigen Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 unter einer Adresse a2 in den Speicher zu schreiben. Nach einer Weile können eventuell fehlerhafte Datenbits u ′ / 3, u ′ / 4, u ′ / 5 des Teildatenworts und eventuell fehlerhafte Prüfbits δ ′ / 0, δ ′ / 1, δ ′ / 2 unter der Adresse a2 ausgelesen werden. Für die ausgelesenen Bits kann geprüft werden, ob ein Codewort des Codes Cdet2 vorliegt. Handelt es sich um ein solches Codewort, wird kein Fehler erkannt; handelt es sich hingegen nicht um ein Codewort, wird ein Fehler erkannt.
  • Ferner ist es eine Option, die Prüfbits c3, c4, c5 ebenfalls unter der Adresse a1 zu speichern und die Prüfbits c6, c7, c8 unter der Adresse a2 zu speichern.
  • Ist eine Fehlerkorrektur erforderlich, sind sowohl das erste Teildatenwort und die entsprechenden Prüfbits unter der Adresse a1 als auch das zweite Teildatenwort und die entsprechenden Prüfbits unter der Adresse a2 auszulesen. Aus den unter der Adresse a1 ausgelesenen Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 und aus den unter der Adresse a2 ausgelesenen Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 werden die Prüfbits c0, c1, c2 bestimmt. Die Prüfbits c3, c4, c5 werden beispielsweise unter der Adresse a1 und die Prüfbits c6, c7, c8 werden beispielsweise unter der Adresse a2 ausgelesen, so dass nach dem Auslesen der Adressen a1 und a2 alle erforderlichen Bits zur Korrektur eines Fehlers unter Verwendung des Codes Ccor zur Verfügung stehen.
  • Es ist möglich, dass die Adresse a1 und die Adresse a2 sich nur in ihrem jeweiligen niederwertigsten Bit unterscheiden. Optional können sich die beiden Adressen a1 und a2 auch in allen Bits oder in anderen vorgegebenen Adressbits unterscheiden.
  • Weiterhin ist es eine Möglichkeit, das Teildatenwort u0, u1, u2, die zugehörigen Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1, das Teildatenwort u3, u4, u5, die zugehörigen Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 und die Prüfbits c3, ..., c8 unter einer (gemeinsamen) Adresse a eines Speichers mit entsprechend großer Wortbreite zu speichern. Bei einem Lesezugriff auf das erste Teildatenwort sind dann unter der Adresse a nur die Bits des ersten Teildatenworts zu prüfen (d.h. ob diese Bits des ersten Teildatenworts und die zugehörigen Prüfbits ein Codewort des fehlererkennenden Codes Cdet1 sind). Entsprechend sind bei einem Lesezugriff auf das zweite Teildatenwort unter der Adresse a nur die Bits des zweiten Teildatenworts zu prüfen (d.h. ob diese Bits des zweiten Teildatenworts und die zugehörigen Prüfbits ein Codewort des fehlererkennenden Codes Cdet2 sind). Im Falle einer Fehlerkorrektur unter Verwendung des Codes Ccor sind dann die Prüfbits c0, c1, c2 aus den Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 und den Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 bestimmt. Die Prüfbits c3, ..., c8 können direkt unter der Adresse a ausgelesen werden.
  • Werden unter einer Leseadresse a1 ein eventuell fehlerhaftes Teildatenwort u ′ / 0, u ′ / 1, u ′ / 2 und eventuell fehlerhafte Prüfbits γ ′ / 0, γ ′ / 1, γ ′ / 2 gelesen, so ist es möglich, unter Verwendung dieser Bits zu überprüfen, ob die Bitkombination γ ′ / 0, γ ′ / 1, γ ′ / 2, u ′ / 0, u ′ / 1, u ′ / 2 ein Codewort des fehlererkennenden Codes Cdet1 ist. Das ist dann der Fall, wenn gilt: γ ′ / 0 + u ′ / 0 = 0, γ ′ / 1 + u ′ / 0 + u ′ / 1 = 0, γ ′ / 2 + u ′ / 1 + u ′ / 2 = 0, bzw. wenn für den fehlererkennenden Code Cdet1 mit der H-Matrix H1 ein Fehlersyndrom sdet1
    Figure DE102016104012A1_0012
    mit
    Figure DE102016104012A1_0013
    gleich 0 ist.
  • Ist das Fehlersyndrom sdet1 = 0, wird angenommen, dass kein Fehler in den ausgelesenen Bits u ′ / 0, u ′ / 1, u ′ / 2 vorliegt. Die ausgelesenen Bits u ′ / 0, u ′ / 1, u ′ / 2 des ersten Teildatenworts können also verwendet werden, ohne dass sie durch den fehlerkorrigierenden Code Ccorr korrigiert werden.
  • Werden nur die Bits des ersten Teildatenworts benötigt, ist es nicht erforderlich, die Bits u ′ / 3, u ′ / 4, u ′ / 5 des zweiten Teildatenworts auszulesen. Insoweit ist es von Vorteil, dass ein Auslesen von nur einem Teildatenwort (gegenüber dem Auslesen des gesamten Datenworts) im fehlerfreien Fall möglich ist.
  • Hierbei ist es insbesondere von Vorteil, dass die Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 nicht von Bits abhängen, die unter einer zweiten Adresse a2 gespeichert sind.
  • Werden unter der Leseadresse a2 ein eventuell fehlerhaftes Teildatenwort u ′ / 3, u ′ / 4, u ′ / 5 und eventuell fehlerhafte Prüfbits δ ′ / 0, δ ′ / 1, δ ′ / 2 gelesen, so ist es möglich, unter Verwendung dieser Bits zu überprüfen, ob die Bitkombination δ ′ / 0, δ ′ / 1, δ ′ / 2, u ′ / 3, u ′ / 4, u ′ / 5 ein Codewort des fehlererkennenden Codes Cdet2 ist. Das ist dann der Fall, wenn gilt: δ ′ / 0 + u ′ / 3 + u ′ / 4 + u ′ / 5 = 0, δ ′ / 1 + u ′ / 3 = 0, δ ′ / 2 + u ′ / 4 = 0, bzw. für den fehlererkenndenden Code Cdet2 mit der H-Matrix H2 ein Fehlersyndrom sdet2
    Figure DE102016104012A1_0014
    mit
    Figure DE102016104012A1_0015
    gleich 0 ist.
  • Ist das Fehlersyndrom sdet2 = 0, wird angenommen, dass kein Fehler in den ausgelesenen Bits u ′ / 3, u ′ / 4, u ′ / 5 vorliegt. Die ausgelesenen Bits u ′ / 3, u ′ / 4, u ′ / 5 des zweiten Teildatenworts können also verwendet werden, ohne dass sie durch den fehlerkorrigierenden Code Ccorr korrigiert werden.
  • Werden nur die Bits des zweiten Teildatenworts benötigt, ist es nicht erforderlich, die Bits u ′ / 0, u ′ / 1, u ′ / 2 des ersten Teildatenworts auszulesen. Insoweit ist es von Vorteil, dass ein Auslesen von nur einem Teildatenwort (gegenüber dem Auslesen des gesamten Datenworts) im fehlerfreien Fall möglich ist.
  • Hierbei ist es insbesondere von Vorteil, dass die Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 nicht von Bits abhängen, die unter der ersten Adresse a1 gespeichert sind.
  • Wird ein Fehler beim Auslesen der Bits des ersten Teildatenworts unter der Adresse a1 oder der Bits des zweiten Teildatenworts unter der Adresse a2 erkannt, dann können sowohl die unter der Adresse a1 als auch der Adresse a2 gespeicherten Bits ausgelesen werden.
  • Neben den Bits γ ′ / 0, γ ′ / 1, γ ′ / 2, u ′ / 0, u ′ / 1, u ′ / 2 und δ ′ / 0, δ ′ / 1, δ ′ / 2, u ′ / 3, u ′ / 4, u ′ / 5 werden dann auch die zusätzlichen Prüfbits c ′ / 3, c ′ / 4, c ′ / 5, c ′ / 6, c ′ / 7, c ′ / 8, die z.B. unter den Adressen a1 und a2 gespeichert sind, ausgelesen.
  • Aus den Prüfbits γ ′ / 0, γ ′ / 1, γ ′ / 2 und δ ′ / 0, δ ′ / 1, δ ′ / 2 werden die Prüfbits c ′ / 0, c ′ / 1, c ′ / 2 gebildet gemäß c ′ / 0 = γ ′ / 0 + δ ′ / 0, c ′ / 1 = γ ′ / 1 + δ ′ / 1, c ′ / 2 = γ ′ / 2 + δ ′ / 2, so dass nach dem Auslesen der Bits unter den Adressen a1 und a2 die erforderlichen Prüfbits c ′ / 0, ..., c ′ / 8 des hier beispielhaft eingesetzten 2-Bitfehler korrigierenden BCH-Codes Ccor für die Datenbits u ′ / 0, ..., u ′ / 5 zur Verfügung stehen.
  • 1-Bitfehler und 2-Bitfehler in den Bits c ′ / 0, ..., c ′ / 8, u ′ / 0, ..., u ′ / 5 können mittels eines bekannten Verfahrens zur Fehlerkorrektur unter Verwendung von BCH-Codes vorgenommen werden. Beispielhaft sei hier verwiesen auf
    • Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seiten 151 bis 155 oder
    • Okano, H., Imai, H.: „A Construction Method of High-Speed Decoders Using ROM’s for Bose-Chaudhuri-Hocquengiem and Reed-Solomon Codes", IEEE Transactions on Computers, VOL. C-36, NO. 10, Oktober 1987, Seiten 1165 bis 1171.
  • Durch die Wahl von mindestens zwei Prüfbits des ersten fehlererkennenden Codes oder des zweiten fehlererkennenden Codes können spezielle Fehler in den Datenbits, z.B. alle 1-Bitfehler, 2-Bitfehler, 3-Bitfehler sicher bzw. beliebige Bitfehler mit hoher Wahrscheinlichkeit erkannt werden. Dies ergibt sich daraus, dass die Wahrscheinlichkeit des Erkennens eines beliebigen Fehlers von der Anzahl der Prüfbits eines fehlererkennenden Codes abhängt.
  • Es ist möglich, dass sich die Adresse a1 und die Adresse a2 nur in einem Bit, beispielsweise in ihrem niederwertigsten Bit (LSB) unterscheiden; in diesem Fall gilt beispielsweise für die Adressbits der Adressen a1 und a2: a1 = a 1 / l-1, ..., a 1 / 1,0 und a2 = a 1 / l-1, ..., a 1 / 1,1.
  • Auch ist es eine Option, die Bits γ0, ..., γ2, u0, ..., u2, δ0, ..., δ2, u3, ..., u5, c3, ..., c8 unter einer gemeinsamen Adresse abzuspeichern und nur die jeweils benötigten Bits aus dem Speicher auszulesen, z.B. die Bits γ0, ..., γ2, u0, ..., u2, wenn das erste Teildatenwort benötigt wird oder die Bits δ0, ..., δ2, u3, ..., u5, wenn das zweite Teildatenwort benötigt wird. Wird ein Fehler durch einen der fehlererkennenden Codes erkannt, werden insbesondere die Bits beider Teildatenwörter ausgelesen.
  • Eine weitere Option besteht darin, die zusätzlichen Bits c3, ... c8 oder einen Teil der zusätzlichen Bits unter einer weiteren Adresse abzuspeichern, um die Wortbreite des auszulesenden Speichers klein zu halten, solange kein Fehler auftritt.
  • Einbeziehung der Adresse in die Fehlererkennung
  • In einem zusätzlichen Beispiel wird gezeigt, wie eine Adresse in die Fehlererkennung einbezogen werden kann. Beispielhaft wird ein 2-Bitfehler korrigierender BCH-Code über dem Galoisfeld GF(24) mit 8 Prüfbits und 7 Informationsbits betrachtet. Als Generatorpolynom G(z) wird G(z) = (z4 + z + 1)·(z4 + z3 + z2 + z + 1) = z8 + z7 + z6 + z4 + 1 (25) verwendet. Dabei ist (z4 + z + 1) das Modularpolynom von GF(24) mit der primitiven Wurzel α = z und (z4 + z3 + z + 1) ist das Minimalpolynom mit der Wurzel α3 = z3.
  • Eine Gesamtparität wird bei diesem Code beispielhaft nicht benutzt.
  • Wie bereits beschrieben (siehe auch: Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, Seite 94) kann aus dem Generatorpolynom die Generatormatrix G in ihrer systematischen Form als G = (P7,8, I7) (26) mit
    Figure DE102016104012A1_0016
    bestimmt werden; hieraus folgt die H-Matrix in ihrer systematischen Form H = (I8, P T / 8,7) (28) zu
    Figure DE102016104012A1_0017
  • Diese (8,15)-H-Matrix H8,15 kann in eine (8,12)-H-Matrix H8,12 verkürzt werden, indem die letzten 3 Spalten gestrichen werden:
    Figure DE102016104012A1_0018
  • Beispielhaft sollen 4 Datenbits u0, u1, u2, u3 und 8 Prüfbits c0, ..., c7 des fehlerkorrigierenden BCH-Codes Ccor verwendet werden, wobei die betrachteten Adressen in diesem Beispiel aus 3 Bits a1, a2, a3 gebildet sind.
  • Die 4 Datenbits bilden ein Datenwort u = u0, u1, u2, u3, umfassend
    • – ein erstes Teildatenwort x = u0, u1, das durch einen fehlererkennenden Code Cdet1 geschützt wird und
    • – ein zweites Teildatenwort y = u2, u3, das durch einen fehlererkennenden Code Cdet2 geschützt wird.
  • Das erste Teildatenwort x wird zusammen mit Prüfbits unter einer Adresse ax = a x / 0, a x / 1, a x / 2 in einem Speicher gespeichert und das zweite Teildatenwort y wird zusammen mit Prüfbits unter einer Adresse ay = a y / 0, a y / 1, a y / 2 in dem Speicher gespeichert.
  • Beispielhaft gilt a y / 0, a y / 1, a y / 2 = a x / 0, a x / 1, a x / 2, so dass a x / 0 = 0 und a y / 0 = 1 sind. Die Adressen ax und ay unterscheiden sich in diesem Beispiel nur in ihrem jeweiligen niederwertigsten Bit (LSB, least significant bit). Allgemein sind natürlich auch andere Abhängigkeiten zwischen den Bits der Adressen ax und ay möglich.
  • Die Prüfbits γ0, γ1, γ2 des fehlererkennenden Codes Cdet1 werden in Abhängigkeit der Datenbits u0, u1 des ersten Teildatenworts x und der Adresse ax gebildet, unter der das Teildatenwort x gespeichert ist.
  • Die Prüfbits δ0, δ1, δ2 des fehlererkennenden Codes Cdet2 werden in Abhängigkeit der Datenbits u3, u4 des zweiten Teildatenworts y und der Adresse ay gebildet, unter der das Teildatenwort y gespeichert ist.
  • Die Prüfbits c0, ..., c7 des fehlerkorrigierenden Codes Ccor werden in diesem Beispiel in Abhängigkeit von den Datenbits u0, ..., u3 gebildet.
  • Die Prüfbits c0, ..., c7 sind den Spalten 0 bis 7 und die Datenbits u0, ..., u3 sind den Spalten 8 bis 11 der H-Matrix H8,12 gemäß Gleichung (30) zugeordnet.
  • Weiterhin sind die Prüfbits c0, ..., c7 des fehlerkorrigierenden Codes Ccor durch folgende Beziehungen bestimmt: c0 = u0 + u1 + u3, c1 = u1 + u2, c2 = u2 + u3, c3 = u3, c4 = u0 + u1 + u3, c5 = u1 + u2, c6 = u0 + u1 + u2, c7 = u0 + u2.
  • Diese Beziehungen ergeben sich auch aus den Zeilen der H-Matrix H8,12 gemäß Gleichung (30).
  • Die Prüfbits c0, c1, c4, c7 des fehlerkorrigierenden Codes Ccor werden in die Prüfbits γ0, γ1, γ2, γ3 des fehlererkennenden Codes Cdet1 und in die Prüfbits δ0, δ1, δ2, δ3 des fehlererkennenden Codes Cdet2 aufgespalten.
  • Die Prüfbits γ0, γ1, γ2, γ3 des ersten fehlererkennenden Codes Cdet1 sind durch die Bits des ersten Teildatenworts x = u0, u1 und die Bits a x / 0, a x / 1, a x / 2 der Adresse ax bestimmt, unter der das Teildatenwort x gespeichert ist, wobei hier γ0 = u0 + u1 + ∆ x / 0, γ1 = u1 + ∆ x / 1, γ2 = u0 + u1 + ∆ x / 2, γ3 = u0 + ∆ x / 3 mit (∆ x / 0, ∆ x / 1, ∆ x / 2, ∆ x / 3) = (a x / 0, a x / 1, a x / 2)·A (31) und mit
    Figure DE102016104012A1_0019
    gilt, woraus sich für die H-Matrix Hdet1 des fehlererkennenden Codes Cdet1
    Figure DE102016104012A1_0020
    ergibt. Da alle Spalten der Matrix Hdet1 verschieden sind, ist durch die Matrix Hdet1 ein Hamming-Code beschrieben.
  • Die Spalten der H-Matrix Hdet1 entsprechen in ihrer Anordnung den Bits γ0, γ1, γ2, γ3, u0, u1, a x / 0, a x / 1, a x / 2.
  • Die Prüfbits δ0, δ1, δ2, δ3 des fehlerekennenden Codes Cdet2 sind durch die Bits des zweiten Teildatenworts y = u2, u3 und die Bits a y / 0, a y / 1, a y / 2 der Adresse ay bestimmt, unter der das Teildatenwort y gespeichert ist, wobei hier δ0 = u3 + ∆ y / 0, δ1 = u2 + ∆ y / 1, δ2 = u3 + ∆ y / 2, δ3 = u2 + ∆ y / 3 mit (∆ y / 0, ∆ y / 1, ∆ y / 2, ∆ y / 3) = (a y / 0, a y / 1, a y / 2)·A (34) und mit
    Figure DE102016104012A1_0021
    gilt, woraus sich für die H-Matrix Hdet2 des fehlererkennenden Codes Cdet2
    Figure DE102016104012A1_0022
    ergibt. Da alle Spalten der Matrix Hdet2 verschieden sind, ist durch Hdet2 ein Hamming-Code beschrieben.
  • Die Spalten der H-Matrix Hdet2 entsprechen in ihrer Anordnung den Bits δ0, δ1, δ2, δ3, u2, u3, a y / 0, a y / 1, a y / 2.
  • Hierbei wurde beispielhaft angenommen, dass
    • – das erste Teildatenwort x unter der Adresse ax = a0, a1, a2 und
    • – das zweite Teildatenwort y unter der Adresse ay = a 0, a1, a2
    gespeichert ist.
  • Die Bits γ0, γ1, γ2, γ3, u0, u1, a0, a1, a2 bilden im fehlerfreien Fall ein Codewort des fehlererkennenden Codes Cdet1.
  • Werden unter der eventuell fehlerhaften Leseadresse a ′ / 0, a ′ / 1, a ′ / 2 eventuell fehlerhafte Bits γ ′ / 0, γ ′ / 1, γ ′ / 2, γ ′ / 3, u ′ / 0, u ′ / 1, c ′ / 2, c ′ / 3 ausgelesen, so kann mit einer üblichen Fehlererkennungsschaltung geprüft werden, ob die Bits γ ′ / 0, γ ′ / 1, γ ′ / 2, γ ′ / 3, u ′ / 0, u ′ / 1, a ′ / 0, a ′ / 1, a ′ / 2 ein Codewort des fehlererkennenden Codes Cdet1 darstellen.
  • Wird kein Fehler erkannt, dann werden die ausgelesenen Bits u0, u1 des ersten Teildatenworts als korrekt angenommen, es erfolgt keine Korrektur dieser Bits.
  • Stimmt beispielsweise die an den Speicherzellen anliegende Adresse a0, a1, a2 beim Schreiben nicht mit der Adresse a ′ / 0, a ′ / 1, a ′ / 2 beim Lesen überein, so wird der Fehler erkannt, wenn der Fehler in den Adressbits von dem Code Cdet1 erkannt werden kann. In dem vorliegenden Beispiel werden alle 1-Bit-Adressenfehler erkannt.
  • Werden unter der eventuell fehlerhaften Leseadresse a ′ / 0, a ′ / 1, a ′ / 2 eventuell fehlerhafte Bits δ ′ / 0, δ ′ / 1, δ ′ / 2, δ ′ / 3, u ′ / 2, u ′ / 3, c ′ / 5, c ′ / 6 ausgelesen, so kann mit einer üblichen Fehlererkennungsschaltung geprüft werden, ob die Bits δ ′ / 0, δ ′ / 1, δ ′ / 2, δ ′ / 3, u ′ / 2, u ′ / 3, a ′ / 0, a ′ / 1, a ′ / 2 ein Codewort des fehlererkennenden Codes Cdet1 darstellen.
  • Wird kein Fehler erkannt, dann werden die ausgelesenen Bits u2, u3 des zweiten Teildatenworts als korrekt angenommen, es erfolgt keine Korrektur dieser Bits.
  • Beispiel: Korrektur eines Fehlers in den Datenbits und Erkennung eines Adressbitfehlers
  • Nachfolgend wird erläutert, wie ein Fehler mindestens in den Datenbits korrigiert werden kann und wie erkannt werden kann, dass ein Fehler in den Adressbits vorliegt.
  • Es wird beispielhaft der Fall betrachtet, das beim Auslesen des ersten Teildatenworts mit Prüfbits c ′ / 2, c ′ / 3 γ ′ / 0, γ ′ / 1, γ ′ / 2, γ ′ / 3, u ′ / 0, u ′ / 1, c ′ / 2, c ′ / 3 unter der Adresse ax = a x / 0, a x / 1, a x / 2 = a0, a1, a2 ein Fehler in den Bits γ ′ / 0, γ ′ / 1, γ ′ / 2, γ ′ / 3, u ′ / 0, u ′ / 1, a0, a1, a2 aufgetreten ist. Der Fehler wurde mittels des fehlererkennenden Codes Cdet1 erkannt.
  • Infolge des erkannten Fehlers wird unter der Adresse ay = a y / 0, a y / 1, a y / 2 = a 0, a1, a2 das zweite Teildatenwort mit Prüfbits c ′ / 5, c ′ / 6 δ ′ / 0, δ ′ / 1, δ ′ / 2, δ ′ / 3, u ′ / 2, u ′ / 3, c ′ / 5, c ′ / 6 ausgelesen.
  • Es wird die Bitfolge c ′ / 0, c ′ / 1, c ′ / 2, c ′ / 3, c ′ / 4, c ′ / 5, c ′ / 6, c ′ / 7, u ′ / 0, u ′ / 1, u ′ / 2, u ′ / 3 bestimmt mit c ′ / 0 = γ ′ / 0 + δ ′ / 0, c ′ / 1 = γ ′ / 1 + δ ′ / 1, c ′ / 4 = γ ′ / 2 + δ ′ / 2, c ′ / 7 = γ ′ / 3 + δ ′ / 3.
  • Somit werden die Prüfbits c ′ / 0, c ′ / 1, c ′ / 4, c ′ / 7 des fehlerkorrigierenden Codes Ccor aus den Prüfbits γ ′ / 0, ..., γ ′ / 3 des fehlererkennenden Codes Cdet1 und den Prüfbits δ ′ / 0, ..., δ ′ / 3 des fehlererkennenden Codes Cdet2 bestimmt, während die restlichen Prüfbits c ′ / 2, c ′ / 3, c ′ / 5, c ′ / 6 des fehlerkorrigierenden Codes Ccor als Bits des ersten und des zweiten Teildatenworts aus dem Speicher ausgelesen werden.
  • Aus den Prüfbits γ ′ / 0, γ ′ / 1, γ ′ / 2, γ ′ / 3 und den Prüfbits δ ′ / 0, δ ′ / 1, δ ′ / 2, δ ′ / 3 zur Fehlererkennung in den zwei Teilwörtern und aus den zusätzlichen Prüfbits c ′ / 2, c ′ / 3, c ′ / 5, c ′ / 6 sind die zur Fehlerkorrektur der Datenbits mit einem fehlerkorrigierenden Code Ccor erforderlichen Prüfbits c ′ / 0, ..., c ′ / 7 des entsprechenden Datenworts im fehlerfreien Fall eindeutig bestimmt.
  • Der Einfluss der Adressbits auf die Prüfbits kompensiert sich hier durch die Wahl der Adressen, unter denen das erste Teildatenwort und das zweite Teildatenwort gespeichert sind.
  • Sind die Prüfbits c ′ / 0, ..., c ′ / 7 bestimmt, kann die Fehlerkorrektur beispielsweise der Datenbits mit dem fehlerkorrigierenden Code Ccor erfolgen. In dem beschriebenen Ausführungsbeispiel sind das die Datenbits u ′ / 0, ..., u ′ / 3. Ebenso ist eine Fehlerkorrektur der Prüfbits c ′ / 0, ..., c ′ / 7 mit Hilfe des fehlerkorrigierenden Codes Ccor möglich. Die Fehlerkorrektur erfolgt, wie das bei der Fehlerkorrektur mit fehlerkorrigierenden Codes üblich ist. Beispielsweise sei hier auf [Okano, H., Imai, H.: „A Construction Method of High-Speed Decoders Using ROM’s for Bose-Chaudhuri-Hocquengiem and Reed-Solomon Codes", IEEE Transactions on Computers, VOL. C-36, NO. 10, Oktober 1987, Seiten 1165 bis 1171] verwiesen.
  • Es ist eine Option, die Prüfbits c0, c1, c4, c7 des fehlerkorrigierenden Codes Ccor nicht im Speicher abzuspeichern, da sie aus den Prüfbits γ0, γ1, γ2, γ3 des fehlererkennenden Codes Cdet1 und den Prüfbits δ0, δ1, δ2, δ3 des fehlererkennenden Codes Cdet2 bestimmbar sind. Entsprechend ist es eine Option, diese Prüfbits abzuspeichern.
  • Verwendung von aus Adressbits abgeleiteten Bits
  • Ein weiteres Beispiel beschreibt die Verwendung von aus Adressbits abgeleiteten Bits.
  • Der verwendete 2-Bitfehler korrigierende (15,7)-Code Ccor mit der H-Matrix H8,15 in systematischer Form
    Figure DE102016104012A1_0023
    ist ein unverkürzter BCH-Code der Länge 15 mit 7 Informationsbits u0, u1, u2, u3, a0, a1, a2 und 8 Prüfbits c0, ..., c7. Die Bits u0, u1, u2, u3 sind Datenbits und die Bits a0, a1, a2 sind Adressbits. Die Datenbits bilden ein Datenwort w = u0, u1, u2, u3, das aus den beiden Teildatenwörtern w1 = x = u0, u1 und w2 = y = u2, u3 besteht.
  • Das Wort c0, ..., c7, u0, u1, u2, u3, a0, a1, a2 ist ein Codewort des fehlerkorrigierenden Codes Ccor, wenn gilt:
    Figure DE102016104012A1_0024
  • Die Prüfbits c0, ..., c7 des 2-Bitfehler korrigierenden BCH-Codes Ccor sind hier entsprechend der H-Matrix gemäß Gleichung (37) zu c0 = u0 + u1 + u3, c1 = u1 + u2 + a0, c2 = u2 + u3 + a1, c3 = u3 + a0 + a2, c4 = u0 + u1 + u3 + a0 + a1, c5 = u1 + u2 + a0 + a1 + a2, c6 = u0 + u1 + u2 + a1 + a2, c7 = u0 + u2 + a2 bestimmt.
  • Nachfolgend wird erläutert, wie die Prüfbits γ0, γ1, γ2, γ3 des fehlererkennenden Codes Cdet1 für das erste Teildatenwort und die Prüfbits δ0, δ1, δ2, δ3 des fehlererkennenden Codes Cdet2 für das zweite Teildatenwort bestimmt werden können.
  • Hierzu werden die Adressbits a x / 0, a x / 1, a x / 2 in modifizierte Adressbits A x / 0, A x / 1, A x / 2 transformiert gemäß der Beziehung A x / 0, A x / 1, A x / 2 = (a x / 0, a x / 1, a x / 2)·Mx. (39)
  • Ebenso werden die Adressbits a y / 0, a y / 1, a y / 2 in modifizierte Adressbits A y / 0, A y / 1, A y / 2 transformiert gemäß A y / 0, A y / 1, A y / 2 = (a y / 0, a y / 1, a y / 2)·My. (40)
  • Beispielhaft sind die Matrizen Mx und My quadratische (3 × 3)-Matrizen mit der Eigenschaft, dass Mx + My = I3 gilt, wobei I3 die 3-dimensionale Einheitsmatrix ist.
  • Hieraus ergibt sich: A x / 0 + A y / 0, A x / 1 + A y / 1, A x / 2 + A y / 2 = (a x / 0, a x / 1, a x / 2)·[Mx + My] = (a x / 0, a x / 1, a x / 2), (41) wobei wieder angenommen wird, dass (a x / 0, a x / 1, a x / 2) = (a y / 0, a y / 1, a y / 2) gilt.
  • Es kann vorteilhaft sein, sowohl die Matrix Mx als auch die Matrix My als invertierbare Matrizen zu wählen, da sich dann jeder Fehler in den Adressbits auch als ein Fehler in den entsprechenden modifizierten Adressbits ausdrückt. Das ist zum Beispiel dadurch möglich, dass man die Matrix Mx als eine bekannte Begleitmatrix (auch bezeichnet als „companion matrix“) eines primitiven Polynoms wählt. Dies ist z.B. beschrieben in [Rao, R., Fujiwara, E.: „Error Control Coding for Computer Systems", Prentice Hall, 1983, Seite 222].
  • Beispielhaft wird ein primitives Polynom q-ten Grades verwendet, zum Beispiel ein Modularpolynom des entsprechenden Galoisfelds GF(2q). Ist P(z) = zq + rq-1zq-1 + rq-2zq-2 + ... + r1z1 + 1 ein primitives Polynom q-ten Grades mit binären Koeffizienten rq-1, ..., r1, dann ist die Begleitmatrix dieses Polynoms
    Figure DE102016104012A1_0025
  • Ein primitives Polynom dritten Grades mit q = 3 ist z3 + z + 1, und die entsprechende Begleitmatrix Mx ist dann
    Figure DE102016104012A1_0026
    und My ergibt sich zu
    Figure DE102016104012A1_0027
  • Sowohl die Matrix Mx als auch die Matrix My sind invertierbar. Dies kann z.B. dadurch nachgeprüft werden, dass die Determinante der jeweiligen Matrix bestimmt wird, die ungleich 0 ist.
  • Die modifizierten Adressbits ergeben sich in diesem Beispiel zu:
    Figure DE102016104012A1_0028
  • Die Prüfbits γ0, γ1, γ2, γ3 des fehlererkennenden Codes Cdet1 und die Prüfbits δ0, δ1, δ2, δ3 des fehlererkennenden Codes Cdet2 werden so gewählt, dass c4 = γ0 + δ0, c5 = γ1 + δ1, c6 = γ2 + δ2, c7 = γ3 + δ3 (44) gilt. Dann gilt weiter γ0 = u0 + u1 + A x / 0 + A x / 1, γ1 = u1 + A x / 0 + A x / 1 + A x / 2, γ2 = u0 + u1 + A x / 1 + A x / 2, γ3 = u0 + A x / 2, (45) δ0 = u3 + A y / 0 + A y / 1, δ1 = u2 + A y / 0 + A y / 1 + A y / 2, δ2 = u2 + A y / 1 + A y / 2, δ3 = u2 + A y / 2. (46)
  • Somit ergibt sich z.B. für c4 unter Verwendung der Gleichungen (42), (43), (44), (45) und (46): c4 = γ0 + δ0 = = u0 + u1 + u3 + A x / 0 + A y / 0 + A x / 1 + A y / 1 = = u0 + u1 + u3 + a x / 1 + a y / 0 + a y / 1 + a x / 2 + a y / 1 + a y / 2.
  • Mit a x / 0, a x / 1, a x / 2 = a y / 0, a y / 1, a y / 2 folgt c4 = u0 + u1 + u3 + a x / 0 + a x / 1.
  • Entsprechendes gilt für die übrigen Beziehungen der Gleichung (44). In den Speicher wird unter der Adresse ax = a x / 0, a x / 1, a x / 2 die Bitfolge u0, u1, γ0, γ1, γ2, γ3, c0, c1 gespeichert, wobei gilt: c0 = u0 + u1 + u3, c1 = u1 + u1 + a x / 0, γ0 = u0 + u1 + A x / 0+ A x / 1, γ1 = u1 + A x / 0 + A x / 1 + A x / 2, γ2 = u0 + u1 + A x / 1 + A x / 2, γ3 = u0 + A x / 2. (47)
  • Unter der Adresse ay = a x / 0, a x / 1, a x / 2 wird die Bitfolge u2, u3, δ0, δ1, δ2, δ3, c2, c3 gespeichert, wobei gilt: c2 = u2 + u3 + a y / 1, c3 = u3 + a y / 0 + a y / 2, δ0 = u3 + A y / 0 + A y / 1, δ1 = u2 + A y / 0 + A y / 1 + A y / 2, δ2 = u2 + A y / 1 + A y / 2, δ3 = u2 + A y / 2. (48)
  • Die Prüfbits γ0, γ1, γ2, γ3 des fehlererkennenden Codes Cdet1 hängen nur von den Datenbits u0, u1 des ersten Teildatenworts und den modifizierten Adressbits A x / 0, A x / 1, A x / 2 ab, die aus den Adressbits a x / 0, a x / 1, a x / 2 eindeutig bestimmt sind. Die Prüfbits δ0, δ1, δ2, δ3 des fehlererkennenden Codes Cdet2 hängen nur von den Datenbits u2, u3 des zweiten Teildatenworts und den modifizierten Adressbits A y / 0, A y / 1, A y / 2 ab, die aus den Adressbits a y / 0, a y / 1, a y / 2 eindeutig bestimmt sind. Dadurch ist es möglich, allein aus den unter der Adresse ax = a x / 0, a x / 1, a x / 2 ausgelesenen Bits unter Verwendung des fehlererkennenden Codes Cdet1 zu prüfen, ob die Datenbits des ersten Teildatenworts fehlerfrei sind. Ebenso ist es möglich, allein aus den unter der Adresse ay = a y / 0, a y / 1, a y / 2 ausgelesenen Bits unter Verwendung des fehlererkennenden Codes Cdet2 zu prüfen, ob die Datenbits des zweiten Teildatenworts fehlerfrei sind.
  • Dabei kann die Anzahl der Prüfbits des fehlererkennenden Codes Cdet1 und des fehlererkennenden Codes Cdet2 so gewählt werden, dass eine gewünschte Fehlerüberdeckung erreicht wird. Die Anzahl der Prüfbits der beiden fehlererkennenden Codes kann gleich oder verschieden sein.
  • Beträgt die Anzahl der Datenbits eines Datenworts beispielsweise 256, kann ein erstes und ein zweites Teildatenwort jeweils 128 Datenbits aufweisen. Es kann vorteilhaft sein, die Anzahl der Prüfbits beider fehlererkennender Codes gleich 8 zu wählen, um eine entsprechend hohe Fehlerüberdeckung für beliebige Fehler, auch Adressfehler, zu erreichen.
  • Wird ein 2-Bitfehler korrigierender BCH-Code als fehlerkorrigierender Code verwendet, kann dieser Code 18 Prüfbits aufweisen. 8 der Prüfbits des fehlerkorrigierenden Codes können dann jeweils als XOR-Verknüpfungen von jeweils einem Prüfbit des fehlerkennenden Codes Cdet1 und des fehlererkennenden Codes Cdet2 gebildet werden, so dass insgesamt 8 + 8 + 10 = 26 Prüfbits verwendet werden.
  • Wird zusätzlich die Gesamtparität in die Fehlererkennung einbezogen, dann wird ein weiteres Prüfbit, das sogenannte Paritätsbit, verwendet.
  • Wird ein 3-Bitfehler korrigierender BCH-Code als fehlerkorrigierender Code verwendet, kann dieser Code 27 Prüfbits aufweisen. 8 dieser Prüfbits werden dann jeweils als XOR-Verknüpfung von jeweils einem Prüfbit des fehlerkennenden Codes Cdet1 und des fehlererkennenden Codes Cdet2 gebildet, so dass insgesamt 8 + 8 + 19 = 35 Prüfbits verwendet werden.
  • Beispielweise ist es auch möglich das Datenwort in mehr als zwei Teilwörter zu unterteilen. Wird beispielsweise von 256 Datenbits u = u0, ..., u255 ausgegangen, ist folgende Unterteilung in vier Teildatenwörter möglich: x = x0, ..., x63 = u0, ..., u63, x = y0, ..., y63 = u64, ..., u127, z = z0, ..., z63 = u128, ..., u191, q = q0, ..., q63 = u192, ..., u255.
  • Beispielsweise können wie folgt Prüfbits ergänzt werden:
    • – für das Teildatenwort x: Prüfbits γ = γ0, ..., γr-1 eines fehlererkennenden Codes Cdet1;
    • – für das Teildatenwort y: Prüfbits δ = δ0, ..., δr-1 eines fehlererkennenden Codes Cdet2;
    • – für das Teildatenwort z: Prüfbits φ = φ0, ..., φs-1 eines fehlererkennenden Codes Cdet3;
    • – für das Teildatenwort q: Prüfbits µ = µ0, ..., µs-1 eines fehlererkennenden Codes Cdet4.
  • Die Bits x, y, z, q, c0, ..., cr-1, cr,..., cr+s-1, cr+s ..., cm-1 können ein Codewort eines fehlerkorrigierenden Codes Ccor bilden, wobei
    Figure DE102016104012A1_0029
    gelten kann.
  • Es ist beispielsweise auch möglich, mit r = s die Prüfbits γ, δ, φ, µ so zu wählen, dass
    Figure DE102016104012A1_0030
    gilt.
  • Tritt ein Fehler in einem der ausgelesen Teilwörter auf, der von dem entsprechenden fehlererkennenden Code erkannt wurde, dann sind beispielsweise alle 4 Teilwörter auszulesen, um den Fehler mit dem fehlerkorrigierenden Code Ccor zu korrigieren.
  • In dem Beispiel, in dem das Datenwort (nur) zwei Teildatenwörter umfasst, kann das Lesen der Daten aus dem Speicher, das Erkennen von Fehlern und das Korrigieren von Fehlern unter Berücksichtigung der folgenden Schritte erfolgen.
  • Schritt 1: Auswählen einer Adresse a = a0, a1, ..., aK-1 unter der Daten ausgelesen werden.
  • Schritt 2: Ist das niederwertigste Bit LSB(a) = a0 = 0, dann Fortsetzen mit dem Schritt 3 mit a = ax = 0, a1, ..., aK-1; ist das niederwertigste Bit LSB(a) = a0 = 1, dann Fortsetzen mit Schritt 12 mit a = ay.
  • Schritt 3: Lesen der Daten aus dem Speicher unter der Adresse ax.
  • Schritt 4: Bilden die ausgelesenen Bits des ersten Teildatenworts, die entsprechenden Prüfbits des fehlererkennenden Codes Cdet1 und die aus ax abgeleiteten Bits ein Codewort des Codes Cdet1 dann Fortsetzen mit Schritt 5; hierbei sei angemerkt, dass die aus den Adressbits ax abgeleiteten Bits Ax zusammen mit den Datenbits des ersten Teildatenworts die Informationsbits des Codes Cdet1 bilden.
    Bilden die ausgelesenen Bits des ersten Teildatenworts, die entsprechenden Prüfbits des fehlererkennenden Codes Cdet1 und die aus ax abgeleiteten Bits kein Codewort des Codes Cdet1, dann Fortsetzen mit Schritt 7.
  • Schritt 5: Ausgeben der Datenbits des ersten Teildatenworts.
  • Schritt 6: Ende.
  • Schritt 7: Auslesen der Daten unter der Adresse ay = 1, a1, ..., aK-1.
  • Schritt 8: Bilden eines fehlerhaften Codeworts des fehlerkorrigierenden Codes Ccor aus folgenden Bits:
    • – den Bits des unter der Adresse ax ausgelesenen ersten Teildatenworts,
    • – den entsprechenden Prüfbits des fehlererkennenden Codes Cdet1,
    • – den weiteren unter der Adresse ax gespeicherten Prüfbits,
    • – den Bits des unter der Adresse ay ausgelesenen zweiten Teildatenworts,
    • – den entsprechenden Prüfbits des fehlererkennenden Codes Cdet2,
    • – den weiteren unter der Adresse ay gespeicherten Prüfbits und
    • – den Bits der Adresse ax.
  • Schritt 9: Korrigieren der korrigierbaren Fehler mindestens in den Bits des ersten Teildatenworts.
  • Schritt 10: Ausgeben der korrigierten Bits des ersten Teildatenworts.
  • Schritt 11: Gehe zu Schritt 6 (Ende).
  • Schritt 12: Lesen der Daten aus dem Speicher unter der Adresse ay.
  • Schritt 13: Bilden die ausgelesenen Bits des zweiten Teildatenworts, die entsprechenden Prüfbits des fehlererkennenden Codes Cdet2 und die aus ay abgeleiteten Bits ein Codewort des Codes Cdet2 dann Fortsetzen mit Schritt 14;
    Bilden die ausgelesenen Bits des zweiten Teildatenworts, die entsprechenden Prüfbits des fehlererkennenden Codes Cdet2 und die aus ay abgeleiteten Prüfbits kein Codewort des Codes Cdet2, dann Fortsetzen mit Schritt 16.
  • Schritt 14: Ausgeben der Datenbits des zweiten Teildatenworts.
  • Schritt 15: Gehe zu Schritt 6 (Ende).
  • Schritt 16: Auslesen der Daten unter der Adresse ax = 0, a1, ..., aK-1.
  • Schritt 17: Bilden eines fehlerhaften Codeworts des fehlerkorrigierenden Codes Ccor aus folgenden Bits:
    • – den Bits des unter der Adresse ax ausgelesenen ersten Teildatenworts,
    • – den entsprechenden Prüfbits des fehlererkennenden Codes Cdet1,
    • – den weiteren unter der Adresse ax gespeicherten Prüfbits,
    • – den Bits des unter der Adresse ay ausgelesenen zweiten Teildatenworts,
    • – den entsprechenden Prüfbits des fehlererkennenden Codes Cdet2,
    • – weiteren unter der Adresse ay gespeicherten Prüfbits und
    • – den Bits der Adresse ax.
  • Schritt 18: Korrigieren der korrigierbaren Fehler mindestens in den Bits des zweiten Teildatenworts.
  • Schritt 19: Ausgeben der korrigierten Bits des zweiten Teildatenworts.
  • Schritt 20: Gehe zu Schritt 6 (Ende).
  • Beispielhafte Schaltungsanordnungen
  • Nachfolgend werden einige beispielhafte Schaltungsanordnungen gezeigt und erläutert.
  • 1 zeigt eine Schaltungsanordnung 101 zur Erstellung von Prüfbits. Die Schaltungsanordnung 101 kann auch als Encoder, Kodiereinheit oder Coder bezeichnet werden. Die Schaltungsanordnung 101 umfasst die Teilschaltungen 102 bis 104. Die Teilschaltung 102 nutzt einen fehlererkennenden Code Cdet1, die Teilschaltung 103 nutzt einen fehlererkennenden Code Cdet2 und die Teilschaltung 104 nutzt einen fehlerkorrigierenden Code Ccor.
  • Die Teilschaltung 102 hat einen l-Bit breiten Eingang und einen p-Bit breiten Ausgang. Die Teilschaltung 103 hat einen (k – l)-Bit breiten Eingang und einen p-Bit breiten Ausgang. Die Teilschaltung 104 hat einen l-Bit breiten und einen (k – l)-Bit breiten Eingang sowie einen (m – p)-Bit breiten Ausgang.
  • Eine Bitfolge x mit x = u0, ..., ul-1 umfassend l Bits liegt sowohl an dem l-Bit breiten Eingang der Teilschaltung 102 als auch an dem l-Bit breiten Eingang der Teilschaltung 104.
  • Eine Bitfolge y mit y = ul, ..., uk-1 umfassend k – l Bits liegt sowohl an dem (k – l)-Bit breiten Eingang der Teilschaltung 103 als auch an dem (k – l)-Bit breiten Eingang der Teilschaltung 104.
  • Die Teilschaltung 102 bildet Prüfbits γ0, ..., γp-1, so dass eine Folge von Bits u0, ..., ul-1, γ0, ..., γp-1 ein Codewort des fehlererkennenden Codes Cdet1 bilden. Die Teilschaltung 103 bildet Prüfbits δ0, ..., δp-1, so dass eine Folge von Bits ul, ..., uk-1, δ0, ..., δp-1 ein Codewort des fehlererkennenden Codes Cdet2 bilden.
  • Prüfbits eines Datenworts u0, ..., ul-1, ul, ..., uk-1 des beispielhaft mindestens 2-Bitfehler korrigierenden Codes Ccor sind c0, ..., cp-1, cp, ..., cm-1.
  • Beispielhaft sind die Prüfbits γ0, ..., γp-1 und des fehlererkennenden Codes Cdet1 und die Prüfbits δ0, ..., δp-1 des fehlererkennenden Codes Cdet2 so bestimmt, dass für eine Zahl erster p Prüfbits gilt
    Figure DE102016104012A1_0031
  • Die Teilschaltung 104 bildet die restlichen Prüfbits cp, ..., cm-1 aus den Datenbits u0, ..., uk, so dass insgesamt
    Figure DE102016104012A1_0032
    die Prüfbits der Datenbits u0, ..., ul-1, ul, ..., uk-1 des fehlerkorrigierenden Codes Ccor sind.
  • Die Teilschaltungen 102 bis 104 sind lineare binäre Schaltungen zur Realisierung der entsprechenden Prüfbits der Codes Cdet1, Cdet2 und Ccor. Entsprechend den zugrundeliegenden binären Gleichungen, die durch die H-Matrizen der entsprechenden Codes bestimmt sind, können die binären Schaltungen z.B. mittels eines Synthesetools realisiert werden.
  • Beispielsweise sind die Prüfbits der fehlererkennenden Codes Cdet1 und Cdet2 so gewählt, dass die ersten p Prüfbits c0, ..., cp-1 des fehlerkorrigierenden Codes Ccor durch komponentenweise XOR-Verknüpfung der Prüfbits γ0, γ1, ..., γp-1 und der Prüfbits δ0, δ1, ..., δp-1 gebildet werden.
  • Es ist auch möglich, beliebige p Püfbits
    Figure DE102016104012A1_0033
    als komponentenweise XOR- Verknüpfung von Prüfbits von fehlererkennenden Codes Cdet1 und Cdet2 zu bilden. Dabei kann p so gewählt werden, dass 1 < p ≤ m gilt. Ein größerer Wert von p führt dazu, dass eine Fehlererkennungswahrscheinlichkeit von Fehlern in den Teildatenwörtern größer ist. Da insgesamt m + p + k Bits zu speichern sind, ergibt ein größerer Wert für p jedoch auch einen erhöhten Aufwand in Hinblick auf die Wortbreite des verwendeten Speichers.
  • 2 zeigt eine Schaltungsanordnung 201 zur Erstellung von Prüfbits. Die Schaltungsanordnung 201 umfasst die Teilschaltungen 202 bis 204. Die Teilschaltung 202 nutzt einen fehlererkennenden Code Cdet1, die Teilschaltung 203 nutzt einen fehlererkennenden Code Cdet2 und die Teilschaltung 204 nutzt einen fehlerkorrigierenden Code Ccor. Die Schaltungsanordnung 201 unterscheidet sich von der Schaltungsanordnung 101 gemäß 1 dadurch, dass in 2 Adressbits in die Bestimmung der Prüfbits einbezogen werden.
  • Die Teilschaltung 202 hat einen l-Bit breiten Eingang und einen p-Bit breiten Ausgang. Weiterhin hat die Teilschaltung 202 einen Eingang der Wortbreite K zur Berücksichtigung von K Adressbits ax = a x / 0, ..., a x / K-1.
  • Die Teilschaltung 203 hat einen (k – l)-Bit breiten Eingang und einen p-Bit breiten Ausgang. Weiterhin hat die Teilschaltung 203 einen Eingang der Wortbreite K zur Berücksichtigung von K Adressbits ay = a y / 0, ..., a y / K-1.
  • Die Teilschaltung 204 hat einen l-Bit breiten und einen (k – l)-Bit breiten Eingang sowie einen (m – p)-Bit breiten Ausgang.
  • Die Teilschaltung 202 bildet die Prüfbits γ0, ..., γp-1 in Abhängigkeit von Adressbits ax = a x / 0, ..., a x / K-1 des Teildatenworts x = u0, ..., ul-1 und den Bits u0, ..., ul-1, so dass die Folge von Bits γ0, ..., γp-1, u0, ..., ul-1, a x / 0, ..., a x / K-1 ein Codewort des fehlererkennenden Codes Cdet1 bilden. Dabei ist K > 1 die Wortbreite der Adresse ax.
  • Die Teilschaltung 203 bildet die Prüfbits δ0, ..., δp-1 in Abhängigkeit von Adressbits ay = a y / 0, ..., a y / K-1 des Teildatenworts y = ul, ..., uk und den Bits ul, ..., uk, so dass die Folge von Bits δ0, ..., δp-1, ul, ..., uk, a y / 0, ..., a y / K-1 ein Codewort des fehlererkennenden Codes Cdet2 bilden.
  • Die Teilschaltung 204 bildet die Prüfbits cp, ..., cm-1 in Abhängigkeit von den Bits u0, ..., ul-1 des Teildatenworts x und den Bits ul, ..., uk-1 des Teildatenworts y so, dass die Folge von Bits γ0 + δ0, ..., γp-1 + δp-1, cp, ..., cm, u0, ..., ul-1, ul, ..., uk-1 ein Codewort des fehlererkorrigierenden Codes Ccor ist.
  • In diesem Beispiel hängen die Prüfbits cp, ..., cm-1 des fehlerkorrigierenden Codes Ccor nicht von den entsprechenden Adressbits ab. Ebenso hängen auch die Prüfbits c0, ..., cp-1 des fehlerkorrigierenden Codes Ccor nicht von Adressbits ab. Diese Prüfbits sind, wie beschrieben, durch die komponentenweise Addition (modulo 2) der Prüfbits
    Figure DE102016104012A1_0034
    bestimmt. Durch diese komponentenweise Addition hebt sich die Abhängigkeit der Prüfbits γ0, ..., γp-1 und der Prüfbits δ0, ..., δp-1 von den Adressbits ax und ay auf.
  • Dabei ist beispielhaft der Fall betrachtet, dass sich die Adressbits ax und ay in einer festen Bitposition unterscheiden, z.B. in ihrem niederwertigsten Bit, so dass gilt: ax = a x / 0, a x / 1, ..., a x / K-1 ay = a y / 0, a y / 1, ..., a y / K-1 = a x / 0, a x / 1, ..., a x / K-1
  • Die Teilschaltungen 202 bis 204 können z.B. basierend auf XOR-Schaltungen umgesetzt sein.
  • 3 zeigt eine Schaltungsanordnung 301 zur Erstellung von Prüfbits. Die Schaltungsanordnung 301 umfasst die Teilschaltungen 302 bis 304. Die Teilschaltung 302 nutzt einen fehlererkennenden Code Cdet1, die Teilschaltung 303 nutzt einen fehlererkennenden Code Cdet2 und die Teilschaltung 304 nutzt einen fehlerkorrigierenden Code Ccor. Weiterhin sind eine Teilschaltung 305 zur Erstellung von abgeleiteten Adressbits Ay basierend auf Adressbits ay und eine Teilschaltung 306 zur Erstellung von abgeleiteten Adressbits Ax basierend auf Adressbits ax gezeigt.
  • Die Adressbits ay werden durch die Teilschaltung 305 entsprechend der Beziehung Ay = ay·My in modifizierte Adressbits Ay transformiert. Diese modifizierten Adressbits Ay werden der Teilschaltung 303 zugeführt, die daraus zusammen mit dem zweiten Teildatenwort y = ul, ..., uk-1 die Prüfbits δ0, ..., δp-1 bildet.
  • Die Adressbits ax werden durch die Teilschaltung 306 entsprechend der Beziehung Ax = ax·Mx in modifizierte Adressbits Ax transformiert. Diese modifizierten Adressbits Ax werden der Teilschaltung 302 zugeführt, die daraus zusammen mit dem ersten Teildatenwort x = u0, ..., ul-1 die Prüfbits γ0, ..., γp-1 bildet.
  • Die Teilschaltung 302 bildet die Prüfbits γ = γ0, ..., γp-1, so dass die Folge von Bits γ0, ..., γp-1, u0, ..., ul-1, A x / 0, ..., A x / K-1 ein Codewort des fehlererkennenden Codes Cdet1 ist. Dabei ist K > 1 die Wortbreite der Adresse ax.
  • Die Teilschaltung 303 bildet die Prüfbits δ = δ0, ..., δp-1, so dass die Folge von Bits δ0, ..., δp-1, ul, ..., uk-1, A y / 0, ..., A y / K-1 ein Codewort des fehlererkennenden Codes Cdet2 ist.
  • Die Teilschaltung 304 bildet die Prüfbits cp, ..., cm-1 in Abhängigkeit von
    • – den Bits u0, ..., ul-1 des Teildatenworts x,
    • – den Bits ul, ..., uk-1 des Teildatenworts y und
    • – Adressbits ax,
    so dass die Bitfolge γ0 + δ0, ..., γp-1 + δp-1, cp, ..., cm-1, u0, ..., uk-1, a x / 0 ..., a x / K-1 ein Codewort des fehlerkorrigierenden Codes Ccor ist.
  • Für den Code Cdet1 gilt für die Prüfbits γ = γ0, ..., γp-1 γ = x·Px + Ax·A = x·Px + ax·Mx·A.
  • Dabei ist Px eine (l, p)-Matrix, die eine Teilmatrix der Paritätsmatrix P1 des Codes Cdet1 ist. Die (K, p)-Matrix A, die die Abhängigkeit der Prüfbits γ = γ0, ..., γp-1 von den aus den Adressbits abgeleiteten Bits A x / 0, ..., A x / K-1 bestimmt, ist ebenfalls eine Teilmatrix der Paritätsmatrix P1. Die Generatormatrix G1 des Codes Cdet1 ist G1 = (P1, Il+K), wobei Il+K die (l + K)-dimensionale Einheitsmatrix ist und für P1 gilt
    Figure DE102016104012A1_0035
  • Ein Codewort des Codes Cdet1 ist zu [x, Ax]·G1 = [x, Ax]·(P1, Il+K) = γ0, ..., γp-1, x0, ..., xl-1, A x / 0, ..., A x / K-1 bestimmt.
  • Für den Code Cdet2 gilt für die Prüfbits δ = δ0, ..., δp-1 δ = y·Py + Ay·A = y·Py + ax·My·A.
  • Dabei ist der Fall betrachtet, dass ay sich von ax nur in dem niederwertigsten Bit unterscheidet und dass somit die aus den Adressbits ay = a y / 0, ..., a y / K-1 = a x / 0, a x / 1, ..., a x / K-1 abgeleiteten Bits A y / 0, ..., A y / K-1 durch die Beziehung A y / 0, ..., A y / K-1 = [a y / 0, a y / 1, ..., aK-1]·My = [a x / 0, a x / 1, ..., a x / K-1]·My = ax·My bestimmt sind.
  • Die Matrix Py ist eine (l, p)-Matrix, die eine Teilmatrix der Paritätsmatrix P2 des Codes Cdet2 ist. Die (K, p)-Matrix A, die auch die Abhängigkeit der Prüfbits γ = γ0, ..., γp-1 von den aus den Adressbits abgeleiteten Bits A y / 0, ..., A y / K-1 bestimmt, ist ebenfalls eine Teilmatrix der Paritätsmatrix P2. Die Generatormatrix G2 des Codes Cdet2 ist G2 = (P2, Il+K), wobei Il+K die (l + K)-dimensionale Einheitsmatrix ist und für P2 gilt
    Figure DE102016104012A1_0036
  • Ein Codewort des Codes Cdet2 ist zu [y, Ay]·G2 = [y, Ay]·(P2, Il+K) = δ0, ..., δp-1, y0, ..., yl-1, A y / 0, ..., A y / K-1 bestimmt.
  • Die Matrizen P1 und P2 weisen die gleiche Matrix A auf, die die Abhängigkeit der Prüfbits von den abgeleiteten Adressenbits Ax und Ay bestimmen.
  • Ein Codewort des Codes Ccor weist die Prüfbits c0, ..., cp-1, cp, ..., cm-1 auf. Für die Prüfbits c0, ..., cp-1 des Codes Ccor gilt c0, ..., cp-1 = (γ0 ..., γp-1) + (δ0, ..., δp-1) = = x·Px + y·Py + ax(Mx + My)·A = = x·Px + y·Py + ax·A, da Mx + My = IK gilt, so dass die Prüfbits c0, ..., cp-1 von den Bits x und y des Datenworts und von den Adressbits ax = a x / 0, ..., a x / K-1 abhängen. Dies ist von Vorteil, da deren Korrektheit unter Verwendung des Codes Ccor bei der Fehlerkorrektur beispielsweise der Datenbits des Datenwortes mit überprüft werden kann. Hierbei ist IK die K-dimensionale Einheitsmatrix.
  • Die Prüfbits δ0 ..., δp-1 des Codes Cdet2 hängen von den aus den Adressbits abgeleiteten Bits A y / 0, ..., A y / K-1 ab, während die Prüfbits γ0, ..., γp-1 des Codes Cdet1 von den aus den Adressbits abgeleiteten Bits A x / 0, ..., A x / K-1 abhängen.
  • Die restlichen Prüfbits cp, ..., cm-1 des Codes Ccor hängen von den Datenbits x und y des Datenworts und von den Adressbits ax in der Form cp, ..., cm-1 = (x, y, ax)·PRest ab, wobei PRest eine (2·p + K, m – p)-Matrix ist. PRest ist eine Teilmatrix der Paritätsmatrix P des Codes Ccor.
  • Die Paritätsmatrix des Codes Ccor kann in der Form
    Figure DE102016104012A1_0037
    dargestellt werden.
  • Die Matrizen Px und Py können aus der Paritätsmatrix P des Codes Ccor bestimmt werden, wobei P eine (2·l + K, m)-Matrix ist.
  • Die (l, p)-Matrix Px kann aus der Matrix P bestimmt werden, indem alle Zeilen bis auf die erste bis l-te Zeile und alle Spalten bis auf die erste bis p-te Spalte der Matrix P gestrichen werden.
  • Die (l, p)-Matrix Py kann aus der Matrix P bestimmt werden, indem alle Zeilen bis auf die l + 1-te bis 2·l-te Zeile und alle Spalten bis auf die erste bis p-te Spalte der Matrix P gestrichen werden.
  • Die Matrix PRest kann aus der Matrix P bestimmt werden, indem die ersten p Spalten und die letzten K Zeilen der Matrix P gestrichen werden.
  • Die Matrix A kann aus der Matrix P bestimmt werden, indem die ersten 2·l Zeilen und die letzten m – p Spalten der Matrix P gestrichen werden.
  • Die Matrix A* kann aus der Matrix P bestimmt werden, indem die ersten 2·l Zeilen und die ersten p Spalten der Matrix P gestrichen werden.
  • Zur Vereinfachung der Beschreibung wurde hier beispielhaft davon ausgegangen, dass die ersten p Prüfbits c0, ..., cp-1 des Codes Ccor in die Prüfbits γ0, ..., γp-1 des Codes Cdet1 und die Prüfbits δ0, ..., δp-1 des Codes Cdet2 aufgespalten werden. Werden andere Prüfbits des Codes Ccor aufgespalten, so können die Spalten der Paritätsmatrix P so permutiert werden, dass nach der Permutation die ersten Prüfbits aufgespalten werden. Es kann vorteilhaft sein, die aufzuspaltenden Prüfbits so zu wählen, dass der Hardwareaufwand für die Realisierung der entsprechenden Encoder oder Decoder möglichst gering ist.
  • In dem Beispiel hängen die Prüfbits cp, ..., cm-1 des fehlerkorrigierenden Codes Ccor von den entsprechenden nicht modifizierten Adressbits ab. Auch die Prüfbits c0 bis cp-1 des fehlerkorrigierenden Codes Ccor hängen in diesem Ausführungsbeispiel von den nicht modifizierten Adressbits ab. Diese Prüfbits sind, wie beschrieben, durch die komponentenweise Addition (modulo 2) der Prüfbits
    Figure DE102016104012A1_0038
    bestimmt. Die komponentenweise Addition der modifizierten Adressbits ergibt gerade die nicht modifizierten Adressbits ax.
  • Nachfolgend werden einige beispielhafte Realisierungen aufgezeigt, die entsprechenden Bits in einem Speicher abzuspeichern.
  • 4A zeigt zwei Adressen ax und ay eines Speichers. Eine Bitfolge γ0, ..., γp-1, cp, ..., cp+q-1, u0, ..., ul-1 ist in Speicherzellen 401 unter der Adresse ax gespeichert und eine Bitfolge δ0, ..., δp-1, cp+q, ..., cm-1, ul, ..., uk-1 ist in Speicherzellen 402 unter der Adresse ay gespeichert. Beispielhaft sei angenommen, dass jeweils LSB(ax) = 0 und LSB(ay) = 1 gilt, wobei LSB(a) das niederwertigste Bit der Adresse a bezeichnet. Auch ist es möglich, dass sich die Adressen ax und ay in einem anderen Bit, zum Beispiel in ihrem höchstwertigen Bit (MSB: most significant bit) unterscheiden. Hierbei ist insbesondere 1 < q < m.
  • Beispielsweise hängen die Prüfbits cp, ..., cp+q-1 auch von den Bits ul, ..., uk-1 des zweiten Teildatenworts y ab, so dass bei Schreiben des ersten Teildatenworts x = u0, ..., ul-1 und der Prüfbits γ0, ..., γp-1 in den Speicher unter der Adresse ax vorzugsweise auch die Bits des zweiten Teildatenworts y bekannt sind.
  • Beispielsweise hängen die Prüfbits cp+q, ..., cm-1 auch von den Bits u1, ..., ul-1 des ersten Teildatenworts x ab, so dass bei Schreiben des zweiten Teildatenworts y = ul, ..., uk-1 und der Prüfbits δ0, ..., δp-1 in den Speicher unter der Adresse ay vorzugsweise auch die Bits des ersten Teildatenworts x bekannt sind.
  • In 4B sind die Prüfbits γ0, ..., γp-1 des fehlererkennenden Codes Cdet1 und die Datenbits u0, ..., ul-1 des ersten Teildatenworts x in Speicherzellen 403 unter der Adresse ax gespeichert. Die Prüfbits δ0, ..., δp-1, des fehlererkennenden Codes Cdet2 und die Datenbits ul, ..., uk-1 des zweiten Teildatenworts y sind in Speicherzellen 404 unter der Adresse ay gespeichert. Weitere Prüfbits cp, ..., cm-1 des fehlerkorrigierenden Codes Ccor sind in Speicherzellen 405 unter einer weiteren Adresse az(x,y) gespeichert.
  • 4C zeigt Speicherzellen 406, auf die über eine Adresse a = ax = ay zugegriffen werden kann. In diesen Speicherzellen 406 sind
    • – die Prüfbits γ0, ..., γp-1 und die Datenbits u0, ..., ul-1 des ersten Datenworts x,
    • – die Prüfbits δ0, ..., δp-1 und die Datenbits ul, ..., uk-1 des zweiten Datenworts y und
    • – die restlichen Prüfbits cp, ..., cm-1
    gespeichert. Beim Auslesen der entsprechenden Teilwörter und zugehörigen Prüfbits können die benötigten Bits beispielsweise unter Verwendung eines Multiplexers selektiert werden.
  • 5A zeigt eine beispielhafte Anordnung einer Teilschaltung zur Fehlererkennung beim Auslesen eines ersten Teildatenworts x′ unter Verwendung des fehlererkennenden Codes Cdet1. Die Teilschaltung umfasst einen Syndromgenerator 501 zur Bestimmung eines Fehlersyndroms sx für einen fehlererkennenden Code Cdet1, eine NOR-Schaltung 502 (NOR: Nicht-Oder) und eine UND-Schaltung 503. Die UND-Schaltung 503 umfasst beispielhaft eine Anzahl von l UND-Gattern mit jeweils zwei Eingängen und einem Ausgang.
  • Der Syndromgenerator 501 umfasst insbesondere die folgenden Eingänge:
    • – einen K-Bit breiten Eingang, an dem die eventuell fehlerhaften Bits ax′ = a x′ / 0, ..., a x′ / K-1 der Leseadresse anliegen,
    • – einen p-Bit breiten Eingang, an dem die eventuell fehlerhaften Prüfbits γ′ = γ ′ / 0, ..., γ ′ / p-1 anliegen,
    • – einen l-Bit breiten Eingang, an dem die eventuell fehlerhaften Datenbits x′ = u ′ / 0, ..., u ′ / l-1 des ersten Teildatenworts anliegen.
  • Die fehlerhaften Datenbits x′ = u ′ / 0, ..., u ′ / l-1 des ersten Teildatenworts werden auch an die l ersten Eingänge der UND-Schaltung 503 geführt.
  • Dabei ist K die Wortbreite der Leseadresse ax. Der Syndromgenerator 501 bildet ein Fehlersyndrom sx entsprechend der H-Matrix des fehlererkennenden Codes Cdet1 und stellt es an seinem Ausgang bereit. Der Ausgang des Syndromgenerators 501 ist mit dem Eingang der NOR-Schaltung 502 verbunden, die
    • – den Wert Ex = 1 ausgibt, wenn sx = 0, ..., 0 ist, und
    • – den Wert Ex = 0 ausgibt, wenn sx ≠ 0, ..., 0 ist.
  • Der 1 Bit breite Ausgang der NOR-Schaltung 502 ist mit jeweils einem ersten Eingang der l UND-Gatter der UND-Schaltung 503 verbunden, wobei die die Datenbits x′ = u ′ / 0, ..., u ′ / l-1 tragenden Leitungen jeweils mit dem zweiten Eingang eines entsprechenden UND-Gatters der UND-Schaltung 503 verbunden sind, die an ihrem l-Bit breiten Ausgang die korrekten Werte x = u0, ..., ul-1 ausgibt, wenn kein Fehler in den eventuell fehlerhaften Bits x′ = u ′ / 0, ..., u ′ / l-1 erkannt wurde und Ex = 1 ist. Die UND-Schaltung 503 gibt
    Figure DE102016104012A1_0039
    aus, wenn von der in 5A gezeigten Teilschaltung zur Fehlererkennung ein Fehler erkannt wurde. Diese l-fache Ausgabe des Werts 0, also ein Wert 0 an jeder Bitposition der l-Bits, wird auch mit {0}l abgekürzt.
  • 5B zeigt ein Beispiel für eine Teilschaltung zur Fehlererkennung beim Auslesen eines zweiten Teildatenworts y′ unter Verwendung des fehlererkennenden Codes Cdet2. Die Teilschaltung umfasst einen Syndromgenerator 505 zur Bestimmung eines Fehlersyndroms sy für einen fehlererkennenden Code Cdet2, eine NOR-Schaltung 506 und eine UND-Schaltung 507. Die UND-Schaltung 507 umfasst beispielhaft eine Anzahl von (k – l) UND-Gattern mit jeweils zwei Eingängen und einem Ausgang.
  • Der Syndromgenerator 505 umfasst insbesondere die folgenden Eingänge:
    • – einen K-Bit breiten Eingang, an dem die eventuell fehlerhaften Bits ay′ = a y′ / 0, ..., a y′ / K-1 der Leseadresse anliegen,
    • – einen p-Bit breiten Eingang, an dem die eventuell fehlerhaften Prüfbits δ′ = δ ′ / 0, ..., δ ′ / p-1 anliegen,
    • – einen k-Bit breiten Eingang, an dem die eventuell fehlerhaften Datenbits y′ = u ′ / l, ..., u ′ / k-1
    des zweiten Teildatenworts anliegen.
  • Die eventuell fehlerhaften Datenbits y′ = u ′ / l, ..., u ′ / k-1 des zweiten Teildatenworts werden auch an die (k – l) ersten Eingänge der UND-Schaltung 507 geführt.
  • Der Syndromgenerator 505 bildet ein Fehlersyndrom sy entsprechend der H-Matrix des fehlererkennenden Codes Cdet2 und stellt es an seinem Ausgang bereit. Der Ausgang des Syndromgenerators 505 ist mit dem Eingang der NOR-Schaltung 506 verbunden, die
    • – den Wert Ey = 1 ausgibt, wenn sy = 0, ..., 0 ist, und
    • – den Wert Ey = 0 ausgibt, wenn sy ≠ 0, ..., 0 ist.
  • Der 1 Bit breite Ausgang der NOR-Schaltung 506 ist mit jeweils einem ersten Eingang der k – l UND-Gatter der UND-Schaltung 507 verbunden, wobei die die Datenbits u ′ / l, ..., u ′ / k-1 tragenden Leitungen jeweils mit dem zweiten Eingang eines entsprechenden UND-Gatters der UND-Schaltung 507 verbunden sind, die an ihrem (k – l) Bit breiten Ausgang die korrekten Werte y = ul, ..., uk-1 ausgibt, wenn kein Fehler in den eventuell fehlerhaften Bits y′ = u ′ / l, ..., u ′ / k-1 erkannt wurde und Ey = 1 ist. Die UND-Schaltung 507 gibt {0}k-l aus, wenn von der in 5B gezeigten Teilschaltung ein Fehler erkannt wurde.
  • Die Syndromgeneratoren 501 und 505 können die möglicherweise fehlerhaften Adressbits ax′ = a x′ / 0, ..., a x′ / K-1 bzw. ay′ = a y′ / 0, ..., a y′ / K-1 berücksichtigen, wie dies in 5A und 5B beispielhaft gezeigt ist. Anstatt dieser Leseadressen können
    • – der Syndromgenerator 501 an seinem Eingang eine Anzahl von L eventuell fehlerhaften modifizierten Bits Ax′ = A x′ / 0, ..., A x′ / L-1 der Leseadresse und
    • – der Syndromgenerator 505 an seinem Eingang eine Anzahl von L eventuell fehlerhaften modifizierten Bits Ay′ = A y′ / 0, ..., A y′ / L-1 der Leseadresse
    berücksichtigen.
  • 6 zeigt eine beispielhafte Schaltungsanordnung 600 zur Fehlerkorrektur umfassend einen Prüfbitkombinierer 601 sowie eine Korrekturschaltung 605 umfassend einen Syndromgenerator 603, einen Decoder 604 sowie XOR-Schaltungen 606, 607.
  • Ist ein Fehler beim Auslesen eines eventuell fehlerhaften ersten Teildatenworts x′ unter einer eventuell fehlerhaften Adresse ax′ oder beim Auslesen eines eventuell fehlerhaften zweiten Teildatenworts y′ unter einer eventuell fehlerhaften Adresse ay′ erkannt worden, kann der Fehler, falls er durch den fehlerkorrigierenden Code Ccor korrigierbar ist, durch die Schaltungsanordnung 600 korrigiert werden.
  • Der Prüfbitkombinierer 601 umfasst eine XOR-Schaltung 602 aus p XOR-Gattern mit jeweils zwei Eingängen und einem Ausgang, anhand derer eine komponentenweise XOR-Verknüpfung der Prüfbits γ ′ / 0, ..., γ ′ / p-1 mit den Prüfbits δ ′ / 0, ..., δ ′ / p-1 zu
    Figure DE102016104012A1_0040
    erfolgt. Hierzu weist der Prüfbitkombinierer 601
    • – einen p-Bit breiten Eingang auf, an dem die eventuell fehlerhaften Prüfbits γ ′ / 0, ..., γ ′ / p-1 anliegen, die entsprechend dem ersten fehlererkennenden Code Cdet1 gebildet sind,
    • – einen p-Bit breiten Eingang auf, an dem die eventuell fehlerhaften Prüfbits δ ′ / 0, ..., δ ′ / p-1 anliegen, die entsprechend dem zweiten fehlererkennenden Code Cdet2 gebildet sind,
    • – einen p-Bit breiten Ausgang auf, an dem die eventuell fehlerhaften Prüfbits c ′ / 0, ..., c ′ / p-1 bereitgestellt werden, die Prüfbits des fehlerkorrigiernden Codes Ccor sind.
  • Der Syndromgenerator 603 weist
    • – einen p-Bit breiten Eingang auf, der mit dem Ausgang des Prüfbitkombinierers 601 verbunden ist,
    • – einen q-Bit breiten Eingang auf, an dem die eventuell fehlerhaften Prüfbits c ′ / p, ..., c ′ / p+q-1 bereitgestellt werden,
    • – einen (m – q – p)-Bit breiten Eingang auf, an dem die eventuell fehlerhaften Prüfbits c ′ / p+q, ..., c ′ / m-1 bereitgestellt werden,
    • – einen l-Bit breiten Eingang auf, an dem die eventuell fehlerhaften Datenbits u ′ / 0, ..., u ′ / l-1 des ersten Teildatenworts anliegen,
    • – einen (k – l)-Bit breiten Eingang auf, an dem die eventuell fehlerhaften Datenbits u ′ / l ..., u ′ / k-1 des zweiten Teildatenworts anliegen,
    • – einen L-Bit breiten Eingang auf, an dem die L eventuell fehlerhaften Adressbits ax′ anliegen,
    • – einen Ausgang auf, an dem entsprechend der H-Matrix des fehlerkorrigierenden Codes Ccor ein Fehlersyndrom scor bereitgestellt wird.
  • Der Ausgang des Syndromgenerators 603 ist mit dem Eingang des Decoders 604 verbunden. Der Decoder 604 bildet einen Korrekturvektor ex, ey und gibt an einem l-Bit breiten Ausgang den Korrekturvektor ex und an einem (k – l)-Bit breiten Ausgang den Korrekturvektor ey aus.
  • An dem ersten Eingang der XOR-Schaltung 606 liegen die eventuell fehlerhaften Datenbits u ′ / 0, ..., u ′ / l-1 des ersten Teildatenworts x′ an, an dem zweiten Eingang der XOR-Schaltung 606 liegt der Korrekturvektor ex an. An dem l-Bit breiten Ausgang der XOR-Schaltung 606 werden die korrigierten Datenbits
    Figure DE102016104012A1_0041
    bereitgestellt.
  • An dem ersten Eingang der XOR-Schaltung 607 liegen die eventuell fehlerhaften Datenbits u ′ / l, ..., u ′ / k-1 des zweiten Teildatenworts y′ an, an dem zweiten Eingang der XOR-Schaltung 607 liegt der Korrekturvektor ey an. An dem (k – l)-Bit breiten Ausgang der XOR-Schaltung 607 werden die korrigierten Datenbits
    Figure DE102016104012A1_0042
    bereitgestellt.
  • In dem Fall, dass die Adressbits ax nicht Bits eines Codeworts des fehlerkorrigierenden Codes Ccor sind, kann der Eingang des Syndromgenerators 603 entfallen, über den die Adressbits bereitgestellt werden.
  • In dem Ausführungsbeispiel ist die Korrekturschaltung 605 beispielhaft unter Verwendung des Syndromgenerators 603 und des Decoders 604 realisiert. Es ist auch möglich, die Korrekturschaltung auf andere Weise zu realisieren. Beispielsweise kann für spezielle Codes (z.B. für einen Reed-Muller-Code oder für einen Cross-Parity-Code) der Decoder als ein Mehrheits-Decoder (Majority-Decoder) umgesetzt sein.
  • Weitere Vorteile und optionale Ausführungsformen
  • Der hier beschriebene Ansatz eignet sich beispielsweise für beliebige Refresh-Speicher, also Speicher, deren Inhalt zu vorgegebenen Zeitpunkten wiederhergestellt wird.
  • Beispielsweise könnte im Rahmen eines (beliebigen) anfallenden Lesezugriffs auf den Speicher geprüft werden, ob ein Fehler in einem der Teildatenworte und damit in dem Datenwort selbst vorliegt. Hierbei kann in einer möglichen Realisierung ggf. vereinfachend von der Annahme ausgegangen werden, dass kein Fehler in dem Datenwort vorliegt, wenn in mindestens einem Teildatenwort kein Fehler erkannt wurde. Dies funktioniert besonders vorteilhaft für Speicher oder für entsprechend ausgelegte fehlerunanfällige Anwendungen, die eine verhältnismäßig niedrige Fehlerwahrscheinlichkeit aufweisen. Insbesondere kann es hierbei eine Option sein, dass mehr oder weniger regelmäßig (z.B. zu vorgegebenen Zeitpunkten oder aber basierend auf vorgegebenen Ereignissen) eines der Teildatenworte geprüft wird. Wie beschrieben wird geprüft, ob die zu dem Teildatenwort gehörenden Prüfbits und die Bits des Teildatenworts ein Codewort eines fehlererkennenden Codes darstellen. Ist dies der Fall, so liegt in dem Teildatenwort kein Bitfehler vor.
  • Als eine Erweiterung kann z.B. ein Überprüfungsalgorithmus für das Datenwort derart ausgeführt sein, dass zu unterschiedlichen Zeitpunkten unterschiedliche Teildatenwörter des Datenworts geprüft werden: Umfasst gemäß einem Beispiel das Datenwort zwei Teildatenwörter, so könnte in einem ersten Durchgang das erste Teildatenwort geprüft und in einem zweiten Durchgang das zweite Teildatenwort geprüft werden. Der erste und der zweite Durchgang können sich beispielsweise (regelmäßig oder unregelmäßig) abwechseln bzw. wiederholen. Somit kann im Prinzip zu unterschiedlichen Zeitpunkten (ggf. wiederholt) das Datenwort dadurch (teil-)überprüft werden, dass nur eines oder mindestens eines (falls das Datenwort mehr als zwei Teildatenwörter umfasst) seiner Teildatenwörter geprüft wird. Diese Teilüberprüfung hat den Vorteil, dass sie weniger Zeit erfordert als wenn das gesamte Datenwort auf Fehler überprüft würde. Insbesondere kann für bestimmte Speicherarchitekturen ein Zugriff auf nur einen Teil des Datenworts (also das Teildatenwort) effizienter erfolgen als der Zugriff auf das Datenwort, der ggf. mehrere Zugriffe auf den physikalischen Speicher erfordert. Insbesondere ist es eine Option, den Zugriff auf die restlichen Bits des Datenworts nur dann durchzuführen, wenn ein Fehler erkannt wurde.
  • In einem nächsten Schritt kann in so einem Fall – wie vorstehend beschrieben – versucht werden, den Fehler zu korrigieren. Vorteilhaft kann die Fehlerkorrektur nur dann versucht werden, wenn zuvor bestimmt wurde, dass der Fehler auch korrigierbar ist. Optional kann, falls ermittelt wurde, dass es sich um einen (mittels der vorhandenen Fehlerkorrektur) nicht korrigierbaren Fehler handelt, z.B. eine Fehlermeldung oder ein Fehlersignal ausgegeben, eine Reparatur durchgeführt oder eine sonstige vorgebbare Aktion eingeleitet werden.
  • Beispielweise eignet sich der hier beschriebene Ansatz insbesondere für die Erkennung und ggf. Korrektur von zeitlich vorübergehenden (sogenannten transienten) Speicherfehlern. So können bei einem transienten Speicherfehler für eine Speicherzelle bei unterschiedlichen Lesevorgänge unterschiedliche Inhalte bestimmt werden. Dieser transiente Speicherfehler kann mittels der beschriebenen Fehlererkennung (für ein Teilwort) erkannt und ggf. mittels der beschriebenen Fehlerkorrektur korrigiert werden.
  • Auch ist es möglich, dass mit dem hier erläuterten Ansatz entsprechend statische Fehler in Speichern erkannt (und ggf. korrigiert) werden können.
  • 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 Nicht-Patentliteratur
    • Lin, S., Costello, D.: „Error Control Coding“, Prentice Hall, 1983, vgl. z.B. Seiten 141 bis 170 [0088]
    • Peterson, W. and Weldon, E.: „Error-Correcting Codes “, MIT Press, 1972, S. 476, Anhang C [0094]
    • Lin, S., Costello, D.: „Error Control Coding“, Prentice Hall, 1983, vgl. z.B. Seite 94 [0110]
    • Lin, S., Costello, D.: „Error Control Coding“, Prentice Hall, 1983, vgl. z.B. Seite 94 [0114]
    • Lin, S., Costello, D.: „Error Control Coding“, Prentice Hall, 1983, vgl. z.B. Seiten 151 bis 155 [0155]
    • Okano, H., Imai, H.: „A Construction Method of High-Speed Decoders Using ROM’s for Bose-Chaudhuri-Hocquengiem and Reed-Solomon Codes“, IEEE Transactions on Computers, VOL. C-36, NO. 10, Oktober 1987, Seiten 1165 bis 1171 [0155]
    • Lin, S., Costello, D.: „Error Control Coding“, Prentice Hall, 1983, Seite 94 [0162]
    • Okano, H., Imai, H.: „A Construction Method of High-Speed Decoders Using ROM’s for Bose-Chaudhuri-Hocquengiem and Reed-Solomon Codes“, IEEE Transactions on Computers, VOL. C-36, NO. 10, Oktober 1987, Seiten 1165 bis 1171 [0193]
    • Rao, R., Fujiwara, E.: „Error Control Coding for Computer Systems“, Prentice Hall, 1983, Seite 222 [0204]

Claims (34)

  1. Verfahren zum Verarbeiten eines Datenworts, – bei dem das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, – bei dem für das erste Teildatenwort erste Prüfbits bestimmt werden, wobei das erste Teildatenwort und die ersten Prüfbits ein erstes Codewort ergeben, – bei dem für das zweite Teildatenwort zweite Prüfbits bestimmt werden, wobei das zweite Teildatenwort und die zweiten Prüfbits ein zweites Codewort ergeben, – bei dem für das Datenwort dritte Prüfbits bestimmt werden, wobei mindestens – das Datenwort, – eine Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits und – die dritten Prüfbits Teile eines drittes Codeworts sind.
  2. Verfahren nach Anspruch 1, bei dem mindestens zwei Bits der ersten Prüfbits und mindestens zwei Bits der zweiten Prüfbits verknüpft werden.
  3. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die ersten Prüfbits, die zweiten Prüfbits und die dritten Prüfbits gespeichert werden.
  4. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits eine der folgenden Möglichkeiten umfasst: – eine Exklusiv-Oder-Verknüpfung, – eine Exklusiv-Nicht-Oder-Verknüpfung, – eine Kombination oder Aneinanderreihung der ersten Prüfbits und der zweiten Prüfbits.
  5. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das erste Teildatenwort und das zweite Teildatenwort gespeichert werden.
  6. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das erste Codewort ein Codewort eines ersten Fehlercodes und bei dem das zweite Codewort ein Codewort eines zweiten Fehlercodes ist.
  7. Verfahren nach Anspruch 6, bei dem der erste Fehlercode und der zweite Fehlercode jeweils ein fehlererkennender oder ein fehlerkorrigierender Code ist.
  8. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das dritte Codewort ein Codewort eines dritten Fehlercodes ist.
  9. Verfahren nach Anspruch 8, bei dem der dritte Fehlercode ein fehlerkorrigierender Code ist.
  10. Verfahren nach einem der Ansprüche 8 oder 9, bei dem der dritte Fehlercode einen Codeabstand größer gleich drei oder größer gleich fünf aufweist.
  11. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Anzahl der ersten Prüfbits größer gleich zwei ist oder bei dem die Anzahl der zweiten Prüfbits größer gleich zwei ist.
  12. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die ersten Prüfbits, die zweiten Prüfbits und/oder die dritten Prüfbits Adressbits oder aus Adressbits abgeleitete Bits umfassen.
  13. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das erste Teildatenwort, die ersten Prüfbits und Adressbits oder aus Adressbits abgeleitete Bits das erste Codewort ergeben.
  14. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das zweite Teildatenwort, die zweiten Prüfbits und Adressbits oder aus Adressbits abgeleitete Bits das zweite Codewort ergeben.
  15. Verfahren nach einem der vorhergehenden Ansprüche, bei dem – das Datenwort, – die Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits, – die dritten Prüfbits und – Adressbits oder aus Adressbits abgeleitete Bits das dritte Codewort ergeben.
  16. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die ersten Prüfbits, die zweiten Prüfbits und/oder die dritten Prüfbits an unterschiedlichen Adressen eines Speichers gespeichert werden.
  17. Verfahren nach Anspruch 16, bei dem das erste Teildatenwort und das zweite Teildatenwort an unterschiedlichen Adressen des Speichers gespeichert werden.
  18. Verfahren nach Anspruch 17, bei dem die unterschiedlichen Adressen sich in deren niederwertigstem Bit oder in allen Bits unterscheiden.
  19. Verfahren nach Anspruch 16, bei dem die Teilwörter unter einer Adresse in verschiedenen Bitpositionen in dem Speicher gespeichert werden.
  20. Verfahren nach einem der Ansprüche 16 bis 19, bei dem der Speicher einen Speicher folgenden Typs umfasst: – einen Cache-Speicher, – ein Register oder ein Register-Array, – einen Flash-Speicher, – ein MRAM, – ein SRAM, – ein RE-RAM, – ein PC-RAM, – ein FE-RAM.
  21. Verfahren zum Verarbeiten eines Datenworts, wobei das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, umfassend die Schritte: – Bestimmen einer ersten Bitfolge mindestens basierend auf ersten Prüfbits und dem ersten Teildatenwort, – Überprüfen, ob die erste Bitfolge ein Codewort ist, – falls die erste Bitfolge kein Codewort ist: Durchführen einer Fehlerkorrektur des Datenworts mindestens basierend auf den ersten Prüfbits und auf weiteren Prüfbits, wobei die weiteren Prüfbits unter Verwendung der ersten Prüfbits bestimmt werden.
  22. Verfahren nach Anspruch 21, bei dem die weiteren Prüfbits unter Verwendung von mindestens zwei ersten Prüfbits bestimmt werden.
  23. Verfahren nach einem der Ansprüche 21 oder 22, bei dem die ersten Prüfbits mit dem ersten Teildatenwort assoziiert sind.
  24. Verfahren nach einem der Ansprüche 21 bis 23, – bei dem die weiteren Prüfbits zweite Prüfbits und dritte Prüfbits umfassen, – wobei die zweiten Prüfbits mit dem zweiten Teildatenwort assoziiert sind und – wobei die dritten Prüfbits mit dem Datenwort assoziiert sind.
  25. Verfahren nach Anspruch 24, bei dem die Fehlerkorrektur des Datenworts basierend auf einer Verknüpfung der ersten Prüfbits und der zweiten Prüfbits sowie der dritten Prüfbits durchgeführt wird.
  26. Verfahren nach einem der Ansprüche 24 oder 25, bei dem die Anzahl der ersten Prüfbits größer gleich zwei ist oder bei dem die Anzahl der zweiten Prüfbits größer gleich zwei ist.
  27. Verfahren nach einem der Ansprüche 21 bis 26, umfassend den Schritt: falls die erste Bitfolge ein Codewort ist: Durchführen einer vorgegebenen ersten Aktion.
  28. Verfahren nach einem der Ansprüche 21 bis 27, umfassend den Schritt: falls die erste Bitfolge kein Codewort ist: Durchführen einer Korrektur des ersten Teildatenworts basierend auf den ersten Prüfbits.
  29. Verfahren nach einem der Ansprüche 21 bis 28, bei dem die ersten Prüfbits das erste Teildatenwort, das zweite Teildatenwort und die weiteren Prüfbits aus einem Speicher gelesen werden.
  30. Verfahren nach einem der Ansprüche 21 bis 29, bei dem das Codewort ein Codewort eines fehlerkorrigierenden Codes ist.
  31. Verfahren nach einem der Ansprüche 21 bis 30, umfassend den Schritt: falls die erste Bitfolge kein Codewort ist: Durchführen der Fehlerkorrektur des Datenworts basierend auf den ersten Prüfbits und den weiteren Prüfbits sowie basierend auf Adressbits oder auf aus Adressbits abgeleiteten Bits.
  32. Verfahren nach einem der Ansprüche 21 bis 31, umfassend den Schritt: Bestimmen der ersten Bitfolge basierend auf den ersten Prüfbits, dem ersten Teildatenwort und auf Adressbits oder aus Adressbits abgeleiteten Bits.
  33. Schaltungsanordnung zum Verarbeiten eines Datenworts, wobei das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, wobei die Schaltungsanordnung eingerichtet ist – für das erste Teildatenwort erste Prüfbits zu bestimmen, wobei das erste Teildatenwort und die ersten Prüfbits ein erstes Codewort ergeben, – für das zweite Teildatenwort zweite Prüfbits zu bestimmen, wobei das zweite Teildatenwort und die zweiten Prüfbits ein zweites Codewort ergeben, – für das Datenwort dritte Prüfbits zu bestimmen, wobei mindestens – das Datenwort, – eine Verknüpfung der ersten Prüfbits mit den zweiten Prüfbits und – die dritten Prüfbits Teile eines drittes Codeworts sind.
  34. Vorrichtung zum Verarbeiten eines Datenworts, wobei das Datenwort ein erstes Teildatenwort und ein zweites Teildatenwort umfasst, wobei die Vorrichtung eine Verarbeitungseinheit umfasst, die eingerichtet ist zur Durchführung der Schritte: – Bestimmen einer ersten Bitfolge mindestens basierend auf ersten Prüfbits und dem ersten Teildatenwort, – Überprüfen, ob die erste Bitfolge ein Codewort ist, – falls die erste Bitfolge kein Codewort ist: Durchführen einer Fehlerkorrektur des Datenworts mindestens basierend auf den ersten Prüfbits und auf weiteren Prüfbits, wobei die weiteren Prüfbits unter Verwendung der ersten Prüfbits bestimmt werden.
DE102016104012.6A 2016-03-04 2016-03-04 Verarbeitung eines Datenworts Pending DE102016104012A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102016104012.6A DE102016104012A1 (de) 2016-03-04 2016-03-04 Verarbeitung eines Datenworts
US15/449,029 US10567007B2 (en) 2016-03-04 2017-03-03 Device and method of processing a data word using checkbits

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102016104012.6A DE102016104012A1 (de) 2016-03-04 2016-03-04 Verarbeitung eines Datenworts

Publications (1)

Publication Number Publication Date
DE102016104012A1 true DE102016104012A1 (de) 2017-09-07

Family

ID=59651272

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016104012.6A Pending DE102016104012A1 (de) 2016-03-04 2016-03-04 Verarbeitung eines Datenworts

Country Status (2)

Country Link
US (1) US10567007B2 (de)
DE (1) DE102016104012A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019120801B3 (de) * 2019-08-01 2020-12-03 Infineon Technologies Ag Vorrichtungen und Verfahren zur Datenspeicherung

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10552260B2 (en) * 2017-06-12 2020-02-04 Cirrus Logic, Inc. Detection of double bit errors and correction of single bit errors in a multiword array
TWI695378B (zh) * 2017-12-15 2020-06-01 群聯電子股份有限公司 位元標記方法、記憶體控制電路單元以及記憶體儲存裝置
US11694761B2 (en) * 2021-09-17 2023-07-04 Nxp B.V. Method to increase the usable word width of a memory providing an error correction scheme

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4596014A (en) * 1984-02-21 1986-06-17 Foster Wheeler Energy Corporation I/O rack addressing error detection for process control
DE3709524A1 (de) * 1987-03-23 1988-10-06 Bosch Gmbh Robert Verfahren zur ueberpruefung der speicherzelleninhalte eines programmspeichers
US5717394A (en) * 1993-02-10 1998-02-10 Ricoh Company Ltd. Method and apparatus for encoding and decoding data
WO2006045755A2 (de) * 2004-10-25 2006-05-04 Robert Bosch Gmbh Verfahren und vorrichtung zur erhöhung der verfügbarkeit für eine speicher-einheit und speichereinheit

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6996743B2 (en) * 2002-07-26 2006-02-07 Sun Microsystems, Inc. Method for implementing a redundant data storage system
US8607121B2 (en) * 2011-04-29 2013-12-10 Freescale Semiconductor, Inc. Selective error detection and error correction for a memory interface
US8880977B2 (en) * 2011-07-22 2014-11-04 Sandisk Technologies Inc. Systems and methods of storing data
US8954822B2 (en) * 2011-11-18 2015-02-10 Sandisk Enterprise Ip Llc Data encoder and decoder using memory-specific parity-check matrix
US8924815B2 (en) * 2011-11-18 2014-12-30 Sandisk Enterprise Ip Llc Systems, methods and devices for decoding codewords having multiple parity segments
US9048876B2 (en) * 2011-11-18 2015-06-02 Sandisk Enterprise Ip Llc Systems, methods and devices for multi-tiered error correction
JP5794240B2 (ja) * 2013-02-05 2015-10-14 ソニー株式会社 誤り検出訂正装置、誤り検出訂正方法、情報処理装置、および、プログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4596014A (en) * 1984-02-21 1986-06-17 Foster Wheeler Energy Corporation I/O rack addressing error detection for process control
DE3709524A1 (de) * 1987-03-23 1988-10-06 Bosch Gmbh Robert Verfahren zur ueberpruefung der speicherzelleninhalte eines programmspeichers
US5717394A (en) * 1993-02-10 1998-02-10 Ricoh Company Ltd. Method and apparatus for encoding and decoding data
WO2006045755A2 (de) * 2004-10-25 2006-05-04 Robert Bosch Gmbh Verfahren und vorrichtung zur erhöhung der verfügbarkeit für eine speicher-einheit und speichereinheit

Non-Patent Citations (9)

* Cited by examiner, † Cited by third party
Title
Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, Seite 94
Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seite 94
Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seiten 141 bis 170
Lin, S., Costello, D.: „Error Control Coding", Prentice Hall, 1983, vgl. z.B. Seiten 151 bis 155
Okano, H., Imai, H.: „A Construction Method of High-Speed Decoders Using ROM’s for Bose-Chaudhuri-Hocquengiem and Reed-Solomon Codes", IEEE Transactions on Computers, VOL. C-36, NO. 10, Oktober 1987, Seiten 1165 bis 1171
Peterson, W. and Weldon, E.: „Error-Correcting Codes ", MIT Press, 1972, S. 476, Anhang C
Rao, R., Fujiwara, E.: „Error Control Coding for Computer Systems", Prentice Hall, 1983, Seite 222
WIKIPEDIA: Hamming-Code. 19.02.2016. Im Internet: < URL: https://de.wikipedia.org/w/index.php?title=Hamming­Code&oldid=151674725> *
WIKIPEDIA: Kreuzsicherung. 07.11.2015. Im Internet: < URL: https://de.wikipedia.org/w/index.php?title=Kreuzsicherung&oldid=14780121> *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019120801B3 (de) * 2019-08-01 2020-12-03 Infineon Technologies Ag Vorrichtungen und Verfahren zur Datenspeicherung
US11327835B2 (en) 2019-08-01 2022-05-10 Infineon Technologies Ag Devices and methods for data storage

Also Published As

Publication number Publication date
US20170257120A1 (en) 2017-09-07
US10567007B2 (en) 2020-02-18

Similar Documents

Publication Publication Date Title
DE102013215055B4 (de) Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
DE102011085602B4 (de) Vorrichtung und Verfahren zum Korrigieren zumindest eines Bitfehlers in einer codierten Bitsequenz
DE3854393T2 (de) Verfahren und gerät zur fehlerkorrektur mit mehrfachdurchlauf für produktkode.
DE112011101116B4 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
DE3882223T2 (de) Ausgebreitete Fehlerkorrekturvorrichtung mit Einzel-Paket-Fehlerkorrektur und Doppel-Paket-Fehlerdetektionscoden.
DE102015201384A1 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE102007038114A1 (de) Fehlerkorrekturschaltung, Halbleiterspeicherelement und Fehlerkorrekturverfahren
DE102015113414B4 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE102006005817B4 (de) Fehlererkennungsvorrichtung für einen Adressdecoder und Vorrichtung zur Fehlererkennung für einen Adressdecoder
DE102015215401A1 (de) Speichervorrichtung und Verfahren zum Korrigieren einer gespeicherten Bitfolge
DE102005022107B4 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines Bitfehlers in einer Bitfolge
DE102011087634B9 (de) Vorrichtung und verfahren zum erfassen eines fehlers in einem codierten binärwort
DE102013222136B4 (de) Schaltung und Verfahren für die Mehr-Bit-Korrektur
DE102018131613A1 (de) Fehlererkennung mittels Gruppenfehler
DE102013109315B4 (de) Verfahren und Datenverarbeitungseinrichtung zum Rekonstruieren eines Vektors
DE102011087457A1 (de) Vorrichtung und verfahren zum erfassen eines fehlers in einer mehrzahl von codierten binärwörtern, die durch einen fehlerkorrekturcode codiert sind
DE102020111321A1 (de) System und verfahren zur erkennung und berichtigung von datenfehlern eines transparenten registers
DE102013219088B9 (de) Schaltungsanordnung und Verfahren zur Realisierung von Prüfbitkompaktierung für Cross-Parity-Codes
DE102021109391B3 (de) Multibytefehler-Erkennung
DE102019113970B4 (de) Erkennung von adressfehlern
DE102018126685B3 (de) Verarbeitung von Daten
DE102011080659B4 (de) Vorrichtung und verfahren zum testen einer zu testenden schaltung
DE102015121646B4 (de) Fehlerkorrektur

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication