DE102018131613A1 - Fehlererkennung mittels Gruppenfehler - Google Patents

Fehlererkennung mittels Gruppenfehler Download PDF

Info

Publication number
DE102018131613A1
DE102018131613A1 DE102018131613.5A DE102018131613A DE102018131613A1 DE 102018131613 A1 DE102018131613 A1 DE 102018131613A1 DE 102018131613 A DE102018131613 A DE 102018131613A DE 102018131613 A1 DE102018131613 A1 DE 102018131613A1
Authority
DE
Germany
Prior art keywords
byte
error
data
bytes
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
DE102018131613.5A
Other languages
English (en)
Inventor
Thomas Kern
Thomas Rabenalt
Michael Gössel
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 JP2019074125A priority Critical patent/JP2019186939A/ja
Priority to US16/380,089 priority patent/US10903859B2/en
Publication of DE102018131613A1 publication Critical patent/DE102018131613A1/de
Priority to JP2023216831A priority patent/JP2024029084A/ja
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/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
    • 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/1048Adding 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 arrangements adapted for a specific error detection or correction feature
    • 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/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1575Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/158Finite field arithmetic processing
    • 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/25Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM]
    • H03M13/251Error detection or forward error correction by signal space coding, i.e. adding redundancy in the signal constellation, e.g. Trellis Coded Modulation [TCM] with block coding
    • 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/27Coding, 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 using interleaving techniques
    • H03M13/2735Interleaver using powers of a primitive element, e.g. Galois field [GF] interleaver

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

Es wird eine Lösung vorgeschlagen zum Verarbeiten von Datenbits, bei dem die Datenbits mittels einer ersten Transformation in erste Datenbytes transformiert werden, bei dem die ersten Datenbytes in einem Speicher gespeichert werden, bei dem zweite Datenbytes aus dem Speicher gelesen werden, bei dem jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist und bei dem pro zweitem Datenbyte ein Fehlersignal bestimmt wird, das angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.

Description

  • Die Aufgabe der Erfindung besteht darin, eine Fehlerkorrektur zu verbessern.
  • Diese Aufgabe wird gemäß den Merkmalen der unabhängigen Ansprüche gelöst. Bevorzugte Ausführungsformen sind insbesondere den abhängigen Ansprüchen entnehmbar.
  • Zur Lösung der Aufgabe wird ein Verfahren vorgeschlagen zum Verarbeiten von Datenbits,
    • - bei dem die Datenbits mittels einer ersten Transformation in erste Datenbytes transformiert werden,
    • - bei dem die ersten Datenbytes in einem Speicher gespeichert werden,
    • - bei dem zweite Datenbytes aus dem Speicher gelesen werden,
    • - bei dem jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist,
    • - bei dem pro zweitem Datenbyte ein Fehlersignal bestimmt wird, das angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.
  • Ein Datenbyte umfasst mehrere Datenbits. Die Datenbits bzw. Datenbytes können beliebige Informationen, z.B. Daten, Programme, Schlüssel, etc. umfassen.
  • Die Datenbits können insbesondere umkehrbar eindeutig in die ersten Datenbytes transformiert werden. Durch die Transformation kann sichergestellt sein, dass jedes der ersten Datenbytes ein Codewort des Block-Fehlercodes bildet. Bei den ersten Datenbytes kann es sich um Bytes von Speicherzellenwerten handeln, die dann in den Speicher geschrieben werden.
  • Die ersten Datenbytes können gleich den zweiten Datenbytes sein. Die zweiten Datenbytes können von den ersten Datenbytes abweichen, wenn beispielsweise der Speicher einen Fehler aufweist oder wenn allgemein beim Lesen der zweiten Datenbytes ein Fehler aufgetreten ist.
  • Im fehlerfreien Fall sind die gelesenen zweiten Datenbytes gleich den geschriebenen ersten Datenbytes. Somit sind die fehlerfreien gelesenen zweiten Datenbytes Codewörter des Block-Fehlercodes (oder der mehreren Block-Fehlercodes, falls z.B. für jedes Datenbyte ein eigener Block-Fehlercode verwendet wird).
  • Jedes der zweiten Datenbytes wird mittels einer eigenen Fehlererkennungsschaltung dahingehend geprüft, ob es ein Codewort ist oder nicht. Es sind also mehrere Fehlererkennungsschaltungen vorgesehen, eine pro zweitem Datenbyte. Es kann mittels der Fehlererkennungsschaltungen geprüft werden, ob die zweiten Datenbytes Codewörter eines Block-Fehlercodes oder mehrere Block-Fehlercodes sind. Beispielsweise kann pro Fehlererkennungsschaltung ein separater Block-Fehlercode geprüft werden.
  • Durch die Transformation können die Datenbits in die ersten Datenbytes derart transformiert werden, dass die Anzahl der Bits der Datenbits geringer ist als die Anzahl der Bits pro transformiertem ersten Datenbyte. Es ist eine Option, dass die Anzahl der Datenbits, die in ein erstes Datenbyte transformiert werden um mindestens zwei Bits geringer ist als die Anzahl der Bits des ersten Datenbytes. So können beispielsweise je 4 Datenbits in erste Datenbytes transformiert werden, die jeweils 6 Datenbits aufweisen; demnach werden je 4 Bits in 6 Bits transformiert, wobei diese 6 Bits (bei erfolgreicher Transformation) ein Codewort des verwendeten Block-Fehlercodes darstellen.
  • Werden beispielsweise 32 Datenbits in erste Datenbytes transformiert, können diese 32 Datenbits in 8 Blöcke unterteilt werden, von denen jeder 4 Bits umfasst. Jeder Block der Größe 4 Bits wird dann in ein erstes Datenbyte transformiert, das beispielhaft 6 Bits umfasst. In Summe werden also die 32 Datenbits, die 8 Blöcke je 4 Datenbits bilden, in 8 erste Datenbytes transformiert, von denen jedes 6 Bits aufweist. Aus den 32 Datenbits ergeben sich also 48 Bits, die in dem Speicher abgelegt werden.
  • Gemäß diesem Beispiel werden dann 8 zweite Datenbytes aus dem Speicher gelesen, jedes der zweiten Datenbytes umfasst wieder 6 Bits. Pro zweitem Datenbyte wird ein Fehlersignal bestimmt, das angibt, ob es sich bei dem jeweiligen zweiten Datenbyte um ein Codewort des (jeweiligen) Block-Fehlercodes handelt.
  • Die zweiten Datenbytes werden sodann in inverse Datenbytes (auch bezeichnet als Bytes gelesener, möglicherweise fehlerhafter Datenbits oder als zurücktransformierte Datenbits bzw. Datenbytes) zurücktransformiert, wobei die inversen Datenbits mittels einer Fehlerkorrektur korrigiert werden können. Bei der Fehlerkorrektur können die Fehlersignale genutzt werden, um die Fehlerkorrektur auf diejenigen inversen Datenbytes (sog. Gruppenfehler) zu konzentrieren, die bereits als fehlerhaft erkannt wurden.
  • Ist beispielsweise eines der zweiten Datenbytes fehlerhaft, so wird dies mittels der inversen Transformation in ein fehlerhaftes inverses Datenbyte zurücktransformiert. Da es sich bei dem zweiten Datenbyte um kein Codewort des Block-Fehlercodes handelt, beträgt beispielsweise der Wert des inversen Datenbytes 0. Damit ist erkennbar, dass hier ein Fehler vorliegt, der nach Möglichkeit korrigiert werden soll.
  • Im Ergebnis ist es somit besonders effizient möglich, Fehler nicht nur zu erkennen, sondern sie auch auf entsprechende Bytes einzugrenzen. Beispielsweise ist es somit möglich, die Datenbits fehlerfreier Bytes zu verwenden oder nur die Datenbits fehlerhafter Datenbytes nicht zu verwenden.
  • Die Korrektur von Gruppenfehlern ist insbesondere effizienter möglich als die Korrektur von Fehlern, deren Byte-Position nicht vorab bekannt ist. Mit bestimmten Fehlercodes können mehr Gruppenfehler korrigiert werden als Fehler, deren Byte-Positionen nicht vorab bekannt sind. Damit ist es möglich, die Zuverlässigkeit der gespeicherten Daten zu verbessern.
  • Jedes Bit und/oder jeder Speicherzellenwert kann zur Speicherung von mindestens zwei Werten vorgesehen sein. Bei mehr als zwei Werten handelt es sich bei jedem Bit um ein Multi-Bit. Insbesondere können Multi-Bit Speicherzellen vorgesehen sein.
  • Es ist ein Weiterbildung, dass die Datenbits in erste Datenbytes transformiert werden mittels des mindestens einen Block-Fehlercodes.
  • Es ist möglich, dass für unterschiedliche erste Datenbytes unterschiedliche Block-Fehlercodes verwendet werden. Auch kann für die ersten Datenbytes der gleiche Block-Fehlercode für die Transformation verwendet werden.
  • Es ist ein Weiterbildung, dass der mindestens eine Block-Fehlercode ein m-aus-n-Code ist.
  • Bei dem m-aus-n-Code wird eine Gruppe von Bits in eine andere Gruppe von Bits eindeutig umkehrbar transformiert, wobei - sofern die Transformation fehlerfrei war - die Gruppe transformierter Bits eine Anzahl von n Bits aufweist mit einer Anzahl m erster Werte und eine zweite Anzahl (n - m) zweiter Werte. In den insgesamt n Bits gibt es also eine Anzahl von m ersten Werten. Bei den ersten Werten kann es sich z.B. um den Wert 0 oder um den Wert 1 handeln, sofern die Werte binär sind.
  • In diesem Beispiel kann das Fehlersignal anzeigen, dass ein Fehler in dem zweiten Datenbyte vorliegt, wenn die Anzahl der ausgelesenen ersten Werte pro zweitem Datenbyte ungleich m ist.
  • Es ist ein Weiterbildung, dass basierend auf dem mindestens einen Fehlersignal eine Fehlerkorrektur durchgeführt wird.
  • Es ist ein Weiterbildung, dass die Datenbits mittels eines Fehlercodes codiert wurden.
  • Der Fehlercode ist beispielsweise basierend auf den Datenbits bestimmt, wobei die Datenbits Gruppen von Bits bilden können.
  • Der Fehlercode ist ein zusätzlicher Fehlercode zu den Block-Fehlercodes. Der Fehlercode ist beispielsweise ein Bytefehler-korrigierender und/oder Bytefehler-erkennender Code. Auch kann es sich bei dem Fehlercode um einen Bitfehler-korrigierenden und/oder Bitfehler-erkennenden Code handeln. Der Fehlercode ist ein den Block-Fehlercodes übergeordneter Code, d.h. der Fehlercode wird zusätzlich zu den Block-Fehlercodes genutzt. Mittels der Block-Fehlercodes wird das Fehlersignal bestimmt und der Fehlercode ermöglicht basierend auf dem Fehlersignal (oder mehreren Fehlersignalen für mehrere zweite Datenbytes) die Korrektur des mindestens einen fehlerhaften zweiten Datenbytes.
  • Der Fehlercode kann verwendet werden, Bytefehler mit bekannter fehlerhafter Byte-Position, sogenannte Gruppenfehler, zu korrigieren. Auch kann der Fehlercode verwendet werden, um Bytefehler mit unbekannter fehlerhafter Byte-Position zu korrigieren.
  • Beispielsweise können die Datenbits Codewörter des Fehlercodes sein oder solche umfassen.
  • Es ist auch möglich, dass jedes der ersten Datenbytes mehrwertig ist. In diesem Fall sind auch die gelesenen zweiten Datenbytes mehrwertig. Somit können beispielsweise pro Speicherzelle des Speichers mehr als zwei digitale Werte gespeichert werden. Somit ist es möglich, dass ein gelesenes zweites Datenbyte beispielsweise eine Anzahl von n1 Nullen, n2 Einsen und n3 Zweien aufweist. Ein Fehler kann dann erkannt werden, wenn die Anzahl der ausgelesenen Nullen ungleich n1, wenn die Anzahl der ausgelesenen Einsen ungleich n2 oder wenn die Anzahl der ausgelesenen Zweien ungleich n3 ist.
  • Es ist eine Weiterbildung, dass der Fehlercode ein Bytefehler-korrigierender Code, insbesondere ein Reed-Solomon-Code ist.
  • Es ist ein Weiterbildung, dass die zweiten Datenbytes in inverse zweite Datenbytes transformiert werden mittels einer zweiten Transformation, die zu der ersten Transformation invers ist.
  • Somit werden mit der ersten Transformation die Datenbits in erste Datenbytes transformiert und mit der zweiten Transformation werden die aus dem Speicher gelesenen und möglicherweise fehlerhaften zweiten Datenbytes in inverse zweite Datenbytes zurücktransformiert. Diese inversen zweiten Datenbytes können nun korrigiert werden mittels des Fehlercodes.
  • Es ist ein Weiterbildung, dass anhand des Fehlersignals eine Korrektur des inversen zweiten Datenbytes mittels des Fehlercodes erfolgt, sofern das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  • Es ist ein Weiterbildung, dass mindestens ein inverses zweites Datenbyte anhand des Fehlersignals mittels des Fehlercodes korrigiert wird, falls das Fehlersignal anzeigt, dass das dem inversen zweiten Datenbyte zugrundeliegende zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  • Es ist ein Weiterbildung, dass, falls Fehlersignale ein fehlerhaftes i-tes und ein fehlerhaftes j-tes zweites Datenbyte anzeigen, ein Byte-Korrekturwert ei für ein i-tes inverses zweites Datenbyte Xi' bestimmt wird in Abhängigkeit von Teilsyndromen s1 und s2 eines Fehlersyndroms, der Byte-Position i und einer komponentenweisen XOR-Summe αi + αj, wobei α das erzeugende Element des verwendeten Galoisfelds ist.
  • Es ist ein Weiterbildung, dass der Byte-Korrekturwert ei zur Korrektur des i-ten inversen zweiten Datenbytes Xi' so bestimmt ist, dass gilt: e i = s 1 + s 2 + α i s 1 α i + α j .
    Figure DE102018131613A1_0001
  • Es ist ein Weiterbildung, dass der Byte-Korrekturwert ei bestimmt ist gemäß: e i = s 1 + s 2 Σ 1 + α i s 1 Σ 1 ,
    Figure DE102018131613A1_0002
    wobei Σ = E O α 0 + E 1 α 1 + + E L 1 α L 1
    Figure DE102018131613A1_0003
    gilt, und wobei E0, E1,..., EL-1 die Block-Fehlersignale für die (L - 1) zweiten Datenbytes bezeichnen.
  • Es ist vorteilhaft, dass der Byte-Korrekturwert ei für das i-te Byte dann, wenn ein Gruppenfehler vorliegt oder wenn zwei Gruppenfehler vorliegen (für das i-te und für das j-te zweite Datenbyte) gemäß einer gleichen funktionalen Beziehung und damit auch mittels eines Schaltungstyps in Abhängigkeit von Σ bestimmt werden kann, wenn Σ als Σ = E 0 α 0 + + E L 1 α L 1 = { α i für Gruppenfehler in i-te , Byte α i + α j für Gruppenfehler in i-tem und j-tem Byte
    Figure DE102018131613A1_0004
    bestimmt ist, wobei Ei und Ej die Fehlersignale für das i-te zweite Datenbyte und für das j-te zweite Datenbyte sind.
  • Wenn nur ein Gruppenfehler an der Position des i-ten zweiten Datenbytes vorliegt, ist das Fehlersignal Ei = 1 und alle anderen Fehlersignale sind gleich 0. Wenn zwei Gruppenfehler an den Positionen des i-ten zweiten Datenbytes und des j-ten zweiten Datenbytes vorliegen, dann sind die Fehlersignale Ei = Ej = 1 und alle anderen Fehlersignale sind gleich 0.
  • Es ist ein Weiterbildung, dass mindestens zwei Byte-Korrekturwerte parallel bestimmt werden, wobei mindestens ein Byte-Korrekturwert für ein inverses zweites Datenbyte bestimmt wird, das korrekt ist und keine Korrektur erfordert.
  • Parallel bedeutet in diesem Zusammenhang insbesondere, dass die Bestimmung und/oder Bereitstellung von Byte-Korrekturwerten mindestens teilweise zeitlich überlappend, insbesondere im Wesentlichen zu gleichen Zeiten, erfolgen kann. Somit ist es eine vorteilhafte Option, dass pro Byte für die Korrektur nur ein Konstantenmultiplizierer, zwei XOR-Schaltungen und eine UND-Schaltung benötigt werden.
  • Es ist ein Weiterbildung, dass
    • - die ersten Datenbytes und erste Prüfbits, die basierend auf den ersten Datenbytes bestimmt werden, in dem Speicher gespeichert werden,
    • - zweite Datenbytes und zweite Prüfbits aus dem Speicher gelesen werden,
    • - anhand des Fehlersignals und anhand der zweiten Prüfbits eine Korrektur des zweiten Datenbytes erfolgt, sofern das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  • Somit wird eine Korrektur basierend auf den zweiten Datenbytes und den Prüfbits vorgenommen. Hierbei werden korrigierte zweite Datenbytes bestimmt. Bei den korrigierten zweiten Datenbytes handelt es sich insbesondere um solche zweiten Datenbytes, die mittels eines Byte-Korrekturwertbildners (siehe z.B. Bezugszeichen 37 in 3b) bearbeitet wurden. Dabei können einzelne Bits des jeweiligen zweiten Datenbytes geändert (d.h. korrigiert) werden. Auch ist es möglich, dass es bei diesem Korrekturschritt zu keine Veränderung (einzelner oder mehrerer) zweiter Datenbytes kommt; trotzdem entsprechen die zweiten Datenbytes nach dem Korrekturschritt (also einer Bearbeitung durch den Byte-Korrekturwertbildner 37 und die XOR-Schaltungen 380 bis 38L-1 gemäß 3b) den nachfolgend bezeichneten „korrigierten zweiten Datenbytes“. Das liegt daran, dass die Korrekturschaltung (umfassend Byte-Korrekturwertbildner 37 und die XOR-Schaltungen 380 bis 38L-1) eine (im Wesentlichen oder tatsächlich) parallele Korrektur der zweiten Datenbytes ermöglicht, auch wenn durch die XOR-Schaltungen sichergestellt ist, dass ein fehlerfreies zweites Datenbyte letztlich nicht geändert wird (der Korrekturwert 0 wird mit dem fehlerfreien zweiten Datenbyte komponentenweise XOR-verknüpft). Insoweit erzeugt die Korrekturschaltung aus den zweiten Datenbytes die erwähnten „korrigierten zweiten Datenbytes“, unabhängig davon, ob das einzelne korrigierte zweite Datenbyte sich von dem zweiten Datenbyte unterscheidet.
  • Es ist eine Option, die Fehlerkorrektur unter Verwendung eines Fehlercodes für die Datenbits und/oder unter Verwendung von Prüfbits für die Datenbytes durchzuführen.
  • Es ist ein Weiterbildung, dass die korrigierten zweiten Datenbytes in inverse korrigierte zweite Datenbytes transformiert werden mittels einer zweiten Transformation, die zu der ersten Transformation invers ist.
  • Eine Weiterbildung ist es, dass mindestens ein zweites Datenbyte anhand des Fehlersignals mittels der Prüfbits korrigiert wird, falls das Fehlersignal anzeigt, dass das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  • Es ist ein Weiterbildung, dass mindestens zwei Byte-Korrekturwerte für mindestens zwei zweite Datenbytes parallel bestimmt werden, wobei mindestens ein Byte-Korrekturwert für ein zweites Datenbyte bestimmt wird, das korrekt ist und keine Korrektur erfordert.
  • Es ist eine Weiterbildung, dass anhand der Prüfbits das zweite Datenbyte, zu dem das Fehlersignal bestimmt wurde, mittels der Prüfbits korrigiert wird.
  • Auch ist es eine Weiterbildung, dass anhand mindestens zweier Fehlersignale diejenigen zweiten Datenbytes, für die diese mindestens zwei Fehlersignale bestimmt wurden, mittels der Prüfbits korrigiert werden.
  • Es ist ein Weiterbildung, dass eine Fehlerkorrektur von mindestens zwei Gruppenfehlern oder von einem Fehler an unbekannter Byte-Position durchgeführt wird.
  • Bei dem Gruppenfehler handelt es sich um einen Fehler, dessen Bytefehler-Position bekannt ist.
  • Es ist ein Weiterbildung, dass dann, wenn das Fehlersignal anzeigt, dass ein bestimmtes zweites Datenbyte kein Codewort des entsprechenden Block-Fehlercodes ist, mindestens ein fehlerhaftes Bit dieses zweiten Datenbytes unter Berücksichtigung des Gruppenfehlers korrigiert wird.
  • Es ist ein Weiterbildung, dass fehlerhafte zweite Datenbytes parallel oder im Wesentlichen parallel korrigiert werden.
  • Parallel bedeutet in diesem Zusammenhang insbesondere, dass die Bestimmung und/oder Bereitstellung von Byte-Korrekturwerten mindestens teilweise zeitlich überlappend, insbesondere im Wesentlichen zu gleichen Zeiten, erfolgen kann.
  • Insbesondere können mehrere Byte-Korrekturwertbildner parallel für zu korrigierende Bytes implementiert sein. Insbesondere können die Byte-Korrekturwerte während mindestens eines Takts, beispielsweise während einer Abfolge gemeinsamer Takte oder während einer Abfolge eines Teils gemeinsamer Takte (also zeitlich überlappend) bestimmt werden. Durch die mindestens teilweise zeitliche Überlappung wird eine parallele Verarbeitung ermöglicht. Hierbei sei angemerkt, dass der Begriff der parallelen Bestimmung insbesondere auch eine teilweise parallele (also z.B. eine teilweise gleichzeitige Bearbeitung) umfasst.
  • Beispielsweise kann für die fehlerhaften zweiten Datenbytes ein Korrekturwert ungleich 0 und für die fehlerfreien zweiten Datenbytes ein Korrekturwert gleich 0 bereitgestellt werden. Somit können für alle zu korrigierenden zweiten Datenbytes Korrekturwerte bestimmt und an verschiedenen Ausgängen einer Korrekturschaltung bereitgestellt werden. Die Korrekturwerte können umkehrbar eindeutig, beispielsweise durch eine XOR-Schaltung, mit den Bits der zu korrigierenden Bytes verknüpft werden. Anhand der Fehlersignale kann bestimmt werden, ob ein zweites Datenbyte korrigiert werden soll. Soll ein zweites Datenbyte nicht korrigiert werden, so können beispielsweise die einzelnen Bits des zweiten Datenbytes mit dem Wert 0 XOR-verknüpft werden.
  • Zeigt das Fehlersignal an, dass ein Gruppenfehler vorliegt an der Byte-Position des betroffenen zweiten Datenbytes, werden die durch die Korrekturschaltung für den Gruppenfehler bestimmten korrigierten Bits mit den Bits des zu korrigierenden Bytes beispielsweise durch eine XOR-Schaltung verknüpft.
  • Zeigt das Fehlersignal an, dass kein Gruppenfehler an der Byte-Position des zweiten Datenbytes vorliegt, können beispielsweise von der Korrekturschaltung Bits mit dem Wert 0 bereitgestellt werden, die mit den fehlerfreien Bits XOR-verknüpft werden können, ohne diese zu verändern.
  • Liegt kein Fehlersignal vor, kann dennoch ein Bytefehler vorliegen, der allerdings durch die Block-Fehlercodes nicht erkannt wurde. In diesem Fall kann der Bytefehler mittels des Fehlercodes ohne Unterstützung einer vorab bestimmten Bytefehler-Position korrigiert werden.
  • Es ist eine Option, die Korrektur von zweiten Datenbytes nur insoweit durchzuführen, als Nutzdatenbits betroffen sind und Prüfbits entsprechend nicht zu korrigieren. Alternativ können auch Nutzdatenbits und Prüfbits korrigiert werden.
  • Es ist ein Weiterbildung, dass weder das erste Datenbyte noch das zweite Datenbyte jeweils mehr als 12 Bits umfasst.
  • Es kann vorteilhaft sein, dass pro erstem und/oder zweitem Datenbyte nicht mehr als 6, 7, 8, 9, 10, 11 oder 12 Bits verwendet werden. Ein Byte wird in dem Reed-Solomon-Code als ein Element des Galoisfelds GF(2b) (wobei hier b die Anzahl der Bits pro Byte bezeichnet) betrachtet. Eine Implementierung, beispielsweise eine parallele Implementierung einer Fehlerkorrekturschaltung, wo Korrekturwerte für einzelne, eventuell fehlerhafte Bytes an unterschiedlichen Ausgängen für die unterschiedlichen Bytes bereitgestellt werden, kann für größere Werte als z.B. 10 Bits oder 12 Bits sehr aufwändig sein.
  • Es ist ein Weiterbildung, dass mindestens zwei Fehlersignale für mindestens zwei der zweiten Datenbytes parallel oder im Wesentlichen parallel bestimmt werden.
  • Parallel bzw. im Wesentlichen parallel bedeutet in diesem Zusammenhang insbesondere, dass die Bestimmung der Fehlersignale mindestens teilweise zeitlich überlappend, insbesondere im Wesentlichen zu gleichen Zeiten, erfolgen kann.
  • Zur Lösung der Aufgabe wird auch eine Vorrichtung vorgeschlagen zum Verarbeiten von Datenbits,
    • - umfassend eine Verarbeitungseinheit, wobei die Verarbeitungseinheit eingerichtet ist
      • - zum Transformieren der Datenbits mittels einer ersten Transformation in erste Datenbytes,
      • - zum Speichern der ersten Datenbytes in dem Speicher,
      • - zum Lesen zweiter Datenbytes aus dem Speicher, wobei jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist,
      • - zum Bestimmen eines Fehlersignals pro zweitem Datenbyte, wobei das Fehlersignal angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.
  • Die hier genannte Verarbeitungseinheit kann insbesondere als eine Prozessoreinheit und/oder eine zumindest teilweise festverdrahtete oder logische Schaltungsanordnung ausgeführt sein, die beispielsweise derart eingerichtet ist, dass das Verfahren wie hierin beschrieben durchführbar ist. Besagte Verarbeitungseinheit kann jede Art von Prozessor oder Rechner oder Computer mit entsprechend notwendiger Peripherie (Speicher, Ein-/Ausgabe-Schnittstellen, Ein-Ausgabe-Geräte, etc.) sein oder umfassen.
  • Es ist Option, dass für jedes zweite Datenbyte eine Fehlererkennungsschaltung vorgesehen ist, die eingerichtet ist zur Bestimmung des Fehlersignals für dieses zweite Datenbyte.
  • Weiterhin ist es eine Option, dass ein Korrekturwertbildner vorgesehen ist zur Korrektur von Speicherzellenwerten. Der Korrekturwertbildner bestimmt beispielsweise dann, wenn ein Fehlersignal anzeigt, dass ein Byte von Speicherzellenwerten fehlerhaft ist, einen Byte-Korrekturwert ungleich 0 zur Korrektur des Bytes fehlerhafter Speicherzellenwerte.
  • Auch ist es eine Option, dass der Korrekturwertbildner zur Korrektur von Datenbits eingesetzt wird. Der Korrekturwertbilder bestimmt beispielsweise dann, wenn ein Fehlersignal anzeigt, dass ein Byte von Speicherzellenwerten fehlerhaft ist, einen Byte-Korrekturwert ungleich 0 zur Korrektur des fehlerhafter Datenbytes, das zuvor in ein fehlerhaftes Byte von Speicherzellenwerten transformiert wurde.
  • Unter Verwendung von Fehlersignalen von Block-Fehlercodes kann für Bytes von Speicherzellenwerten ein kombiniertes Fehlersignal gebildet werden, das einen ersten Wert annimmt, wenn eines der verwendeten Fehlersignale einen Fehler anzeigt und einen zweiten Wert annimmt, wenn alle Fehlersignale keinen Fehler anzeigen.
  • Die Fehlersignale können binär sein und das kombinierte Fehlersignal kann als eine XOR-Kombination oder als eine ODER-Kombination der Fehlersignale bestimmt werden.
  • Die vorstehenden Erläuterungen betreffend das Verfahren gelten für die Vorrichtung entsprechend. Die Vorrichtung kann in einer Komponente oder verteilt in mehreren Komponenten ausgeführt sein.
  • Auch wird die oben genannte Aufgabe gelöst mittels eines Systems umfassend mindestens eine der hier beschriebenen Vorrichtungen.
  • Es ist ein Weiterbildung, dass der Speicher mindestens eine der folgenden Komponenten 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,
    • - ein CB-RAM,
    • - einen Multibit-Speicher,
    • - einen Multilevel-Speicher.
  • Es ist ein Weiterbildung, dass der Speicher Teil der Vorrichtung ist oder separat zu dieser ausgeführt ist.
  • Es ist ein Weiterbildung, dass die Verarbeitungseinheit ferner eingerichtet ist, die zweiten Datenbytes in inverse zweite Datenbytes zu transformieren mittels einer zweiten Transformation, die zu der ersten Transformation invers ist.
  • Es ist ein Weiterbildung, dass die Verarbeitungseinheit ferner eingerichtet ist,
    • - zum Speichern der ersten Datenbytes und erster Prüfbits, wobei die ersten Prüfbits basierend auf den ersten Datenbytes bestimmt werden,
    • - zum Lesen der zweiten Datenbytes und zweiter Prüfbits aus dem Speicher,
    • - zur Korrektur desjenigen zweiten Datenbytes anhand des Fehlersignals und anhand der zweiten Prüfbits, sofern das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  • Ferner wird eine Vorrichtung vorgeschlagen zum Verarbeiten von Datenbits, umfassend
    • - Mittel zum Transformieren der Datenbits mittels einer ersten Transformation in erste Datenbytes,
    • - Mittel zum Speichern der ersten Datenbytes in dem Speicher,
    • - Mittel zum Lesen zweiter Datenbytes aus dem Speicher, wobei jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist,
    • - Mittel zum Bestimmen eines Fehlersignals pro zweitem Datenbyte, wobei das Fehlersignal angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.
  • Weiterhin wird ein Computerprogrammprodukt vorgeschlagen, 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 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 Schaltung zur Speicherung von Daten in einem Speicher;
    • 2a einen ersten Teil eines schematisches Diagramms, das eine Korrektur der Datenbits eines Codeworts veranschaulicht, wobei Prüfbits für Informationsbits genutzt werden;
    • 2b einen zweiten Teil eines schematisches Diagramms, das eine Korrektur der Datenbits eines Codeworts veranschaulicht, wobei Prüfbits für Informationsbits genutzt werden;
    • 3a einen ersten Teil eines schematisches Diagramms, das eine Korrektur der Datenbits eines Codeworts veranschaulicht, wobei insbesondere Prüfbits für Speicherzellenwerte genutzt werden;
    • 3b einen zweiten Teil eines schematisches Diagramms, das eine Korrektur der Datenbits eines Codeworts veranschaulicht, wobei insbesondere Prüfbits für Speicherzellenwerte genutzt werden;
    • 4 eine beispielhafte Schaltungsanordnung zur Bestimmung eines kombinierten Fehlersignals E;
    • 5a eine beispielhafte Umsetzung der in 2a gezeigten Transformationsschaltung 22;
    • 5b eine beispielhafte Umsetzung der in 2b gezeigten inversen Transformationsschaltung 25;
    • 6 eine beispielhafte Fehlererkennungsschaltung;
    • 7 eine beispielhafte Fehlererkennungsschaltung, die alle ungeraden Bitfehler in den Bits des Bytes W1' erkennt;
    • 8 eine beispielhafte Schaltungsanordnung zur Überprüfung einer Fehlerkorrektur, wobei insbesondere geprüft werden kann, ob der Byte-Korrekturwertbildner zur Bestimmung der Korrekturwerte e 0 X bis  e L 1 X
      Figure DE102018131613A1_0005
      korrekt funktioniert;
    • 9a eine beispielhafte Schaltungsanordnung zur Bestimmung eines Byte-Korrekturwertes ek zur Korrektur eines fehlerhaften k-ten Bytes;
    • 9b eine beispielhafte Schaltungsanordnung zur Bildung des Produkts Π = α i α j α k = α ( i + j + k )  mod 15
      Figure DE102018131613A1_0006
      für den Fall, dass ein Bytefehler in den i-ten, j-ten und k-ten Bytes durch die Fehlersignale Ei = Ej = Ek = 1 angezeigt wird;
    • 10 eine beispielhafte Schaltungsanordnung, die den Byte-Korrekturwert für ein beliebiges, eventuell fehlerhaftes l-tes Byte bestimmt unter der Voraussetzung, dass eine fehlerhafte Byte-Position oder zwei fehlerhafte Byte-Positionen bekannt ist/sind und damit ein Gruppenfehler oder zwei Gruppenfehler aufgetreten ist/sind;
    • 11 eine beispielhafte Schaltungsanordnung für eine parallele Realisierung von 15 Byte-Korrekturwertbildnern;
    • 12 eine beispielhafte Schaltungsanordnung zur Bestimmung von Σ-1; 13 eine beispielhafte Implementierung der kombinatorischen Schaltung 121 aus 12 zur Bildung von Σ aus den Fehlersignalen E0 bis E14 mit Hilfe von XOR-Schaltungen;
    • 14 eine beispielhafte Schaltungsanordnung zur Korrektur von Gruppenfehlern in Abhängigkeit von durch die Fehlererkennungsschaltungen 130 bis 13L-1 bestimmten Fehlersignalen E0 bis EL-1 und zur Korrektur von Fehlern, die nicht als Gruppenfehler durch die Fehlererkennungschaltungen 130 bis 13L-1 erkennbar sind;
    • 15 eine beispielhafte Schaltungsanordnung zur Multiplikation zweier Elemente eines Galoisfelds, wobei diese Elemente in ihrer Vektordarstellung gegeben sind;
    • 16a eine mögliche Realisierung für einen Konstantenmultiplizierer für die Konstante α0 mit der Vektordarstellung α = 1000;
    • 16b eine mögliche Realisierung für den Konstantenmultiplizierers für die Konstante α1 mit der Vektordarstellung α = 0100;
    • 16c eine mögliche Realisierung für den Konstantenmultiplizierer für die Konstante α6 mit der Vektordarstellung α = 0011.
  • Allgemeine Anmerkungen zu Fehlercodes
  • Bei den hier verwendeten Fehlercodes (auch bezeichnet als Codes) handelt es sich um lineare oder um nichtlineare Codes.
  • Beispielsweise ist es möglich, einen linearen Code C durch eine Generatormatrix G (auch bezeichnet als G-Matrix) oder durch eine H-matrix H zu beschreiben. In den Beispielen werden zur vereinfachten Darstellung zunächst lineare Codes, insbesondere lineare Codes, bei denen Nutzdaten binäre Nutzdatenbits (bzw. Nutzdatenbytes) sind, betrachtet. Hierbei umfasst ein Byte eine Anzahl von b Bits, wobei b ≥ 2 gilt. Die Nutzdatenbits werden auch als Informationsbits bezeichnet.
  • Weist der Code C eine Anzahl von q Nutzdatenbits u = u 1 , , u q
    Figure DE102018131613A1_0007
    auf, kann ein Codewort x = x 1 , , x k
    Figure DE102018131613A1_0008
    unter Verwendung der Generatormatrix G durch die Beziehung x = x 1 , , x k = u G = [ u 1 , , u q ] G
    Figure DE102018131613A1_0009
    bestimmt sein. Die Generatormatrix G ist eine (q,k)-Matrix.
  • Ist der Code C ein linearer systematischer Code, umfasst ein Codewort des Codes C die q Nutzdatenbits u und zusätzliche p Prüfbits c1,..., cp, wobei die Zahl der Bits des Codeworts durch k = q + p bestimmt ist.
  • Bei der Bildung eines Codeworts eines systematischen Codes werden die Nutzdatenbits durch Prüfbits, die beispielsweise eine Linearkombination von Nutzdatenbits sind, ergänzt.
  • Für einen linearen systematischen Code hat die Generatormatrix die Form G = ( I q , P q , p ) ,
    Figure DE102018131613A1_0010
    wobei Pq,p eine (q, p) -Matrix ist, die auch als Paritätsmatrix des Codes C bezeichnet wird, wobei p = k - q ist und wobei Iq eine q-dimensionale Einheitsmatrix ist.
  • Der Code C ist dann durch eine Menge von Wörtern u 1 , , u q , c 1 , , c p
    Figure DE102018131613A1_0011
    bestimmt, die Codewörter des Codes C sind. Für die Prüfbits c1 bis cp gilt: c 1 , , c p = [ u 1 , , u q ] P q , p .
    Figure DE102018131613A1_0012
  • Ist G = (Iq,Pq,p) die Generatormatrix des Codes C in systematischer Form, dann kann eine H-Matrix H des Codes C gemäß H = ( P p , q T , I p )
    Figure DE102018131613A1_0013
    bestimmt werden, wobei P p , q T
    Figure DE102018131613A1_0014
    die transponierte Matrix der Paritätsmatrix Pq,p und Ip die p-dimensionale Einheitsmatrix ist. Die transponierte Paritätsmatrix P p , q T
    Figure DE102018131613A1_0015
    ergibt sich aus der Paritätsmatrix Pq,p, indem ihre Zeilen und Spalten vertauscht werden.
  • Wie jeder Code kann auch ein linearer Blockcode der Länge k durch die Menge seiner Codewörter beschrieben werden, die eine Teilmenge der Menge aller möglichen k-komponentigen Wörter ist. Mit anderen Worten: Der Code C kann durch die Teilmenge der Wörter x1, ...,xk aller möglichen Wörter der Länge k beschrieben werden, für die die Gleichung H [ x 1 , , x k ] T = 0
    Figure DE102018131613A1_0016
    gilt. Der lineare Code C ist somit durch die Teilmenge aller k-stelligen Wörter bestimmt, für die die Gleichung (4) erfüllt ist. Der Vektor [x1, ... , xk]T ist hierbei der transponierte Spaltenvektor des Zeilenvektors [x1,...,xk].
  • Ein Codewort x1,...,xk mit H · [x1,...,xk] T = 0 kann auch als Codevektor mit k Komponenten x1, ... , xk bezeichnet werden.
  • Eine Komponente xi mit 1 ≤ i ≤ k ist binär, wenn xi nur die Werte 0 oder 1 annehmen kann. Die Komponente xi kann auch mehrwertig sein. Ist die Komponente xi 3-wertig, kann sie drei verschiedene Werte, beispielsweise 0, 1 oder 2, annehmen. Ist die Komponente xi K-wertig (mit K ≥ 2), kann sie K verschiedene Werte, beispielsweise 0,1, ...,K - 1, annehmen.
  • Es ist möglich, dass die Komponente xi des Codeworts ein b-Bit-Byte mit einer Anzahl von b Bits repräsentiert, wie das zum Beispiel bei Bytefehler-korrigierenden oder Bytefehler-erkennenden Codes, wie z.B. bei Reed-Solomon-Codes, der Fall ist.
  • Wie für jeden Code gilt auch für den linearen Code C, dass ein Fehler, der ein Codewort x in ein fehlerhaftes Wort x ' = x ' 1 , , x ' k
    Figure DE102018131613A1_0017
    stört, erkannt werden kann, wenn dieses fehlerhafte Wort kein Codewort des Codes C ist. Der Fehler kann nicht erkannt werden, wenn auch das gestörte Wort x' ein Codewort des Codes C ist.
  • Ist H die H-Matrix des Codes C, dann kann der Fehler daran erkannt werden, dass H [ x ' ] T = s 0
    Figure DE102018131613A1_0018
    gilt. Der Fehler wird hingegen nicht erkannt, wenn H [ x ' ] T = s = 0
    Figure DE102018131613A1_0019
    gilt. Hierbei bezeichnet s ein Fehlersyndrom des fehlerhaften Wortes x'. [x']T ist der transponierte Spaltenvektor des Zeilenvektors x'.
  • Beispiel: Mehrwertiger Code
  • Beispielsweise wird ein Code Cc über einem 3-stelligen Alphabet 0, 1 und 2 beschrieben. Dieser Code ist nicht linear. Der Code Cc kann als ein ( 2,1,1 ) aus 4 Code
    Figure DE102018131613A1_0020
    bezeichnet werden: Ein Codewort dieses Codes Cc weist dann zwei Zweien, eine Eins und eine Null auf. Es gibt ( 4 2 ) ( 2 1 ) = 6 2 = 12
    Figure DE102018131613A1_0021
    Codewörter wie folgt: C c = { 2210,   2201,   2120,   2102,   2021,   2012,   1220,   1202,   0221,   0212,   0122,   1022 } .
    Figure DE102018131613A1_0022
  • Die Menge {0, 1, 2}4 aller Wörter der Länge 4 über dem Alphabet {0,1,2} { 0,   1,   2 } 4 = { 0000,   0001,   0010,   ,   0002,   2222 }
    Figure DE102018131613A1_0023
    weist 34 = 81 Elemente auf. Der Code Cc ist eine Teilmenge dieser Menge {0,1,2}4 aller Wörter der Länge 4.
  • Es ist auch möglich, Codes über einem Alphabet von Bytes zu betrachten, wobei ein Byte b Bits umfassen und b ≥ 2 sein kann. Ein Beispiel für einen derartigen Code ist der Reed-Solomon-Code.
  • Fehlererkennung von Bytes von Speicherzellenwerten
  • 1 zeigt eine beispielhafte Schaltung zur Speicherung von Daten in einem Speicher 11. Der Speicher 11 weist Speicherzellen zur Speicherung von Speicherzellenwerten auf. Ist eine Speicherzelle binär, dann kann sie zwei unterschiedliche Speicherzellenwerte (z.B. 0 oder 1) speichern. Speichert eine Speicherzelle K (mit K > 2) unterschiedliche Speicherzellenwerte, so kann sie als K-wertige Speicherzelle (auch als mehrwertige Speicherzelle oder „Multi-Valued“ Speicherzelle) bezeichnet werden. Die K unterschiedlichen Speicherzellenwerte können beispielsweise 0, 1, 2, ... , K - 1 sein.
  • Der Speicher 11 kann binäre und/oder mehrwertige Speicherzellen aufweisen. Insbesondere ist es eine Option, dass der Speicher 11 K-wertige Speicherzellen aufweist, wobei ein erster Teil der K-wertigen Speicherzellen nur mit einer Teilmenge der mehrwertigen Werte 0,1, ... ,K - 1, beispielsweise nur mit den Werten 0 oder K - 1, und ein zweiter Teil der Speicherzellen mit allen möglichen K unterschiedlichen Speicherzellenwerten beschrieben werden kann.
  • Nachfolgend wird beispielhaft angenommen, dass die Speicherzellen des Speichers 11 binär sind.
  • Weiterhin weist die Schaltung gemäß 1 eine Transformationsschaltung 12 und eine Anzahl von L Fehlererkennungschaltungen FE0 130, FE1 131, ..., FEL-1 13L-1 auf. Hierbei sei angemerkt, dass die Notation einer Zahl in Kombination mit „L-1“ angibt, dass es sich um die L-te Komponente, hier die L-te Fehlererkennungsschaltung, handelt. Gibt es beispielsweise L = 4 Fehlerkennungsschaltungen, so erhalten diese die Bezugszeichen 130, 131, 132 und 133; das letztere Bezugszeichen ergibt sich aus 13L-1 mit L = 4 zu 133. Diese Notation ermöglicht es, eine Vielzahl von L Komponenten anzudeuten, die variabel sein kann und insbesondere für große Werte L unübersichtlich dargestellt werden kann.
  • Die Transformationsschaltung 12 weist einen k-Bit breiten Eingang zur Eingabe von k Datenbits x = x1,..., xk und einen n-Bit breiten Ausgang zur Ausgabe von n Speicherzellenwerten w = w1,...,wn auf.
  • Es ist möglich, dass die k = q + p Datenbits des Codeworts x eine Anzahl von q Informationsbits u1, u2, ... , uq und eine Anzahl von p Prüfbits c1,..., cp eines separierbaren Fehlercodes C1 bilden, so dass x = x 1 , , x k = u 1 , , u q , c 1 , , c p
    Figure DE102018131613A1_0024
    gilt, wobei u 1 , , u q , c 1 , , c p
    Figure DE102018131613A1_0025
    ein Codewort des Fehlercodes C1 ist.
  • Der Fehlercode C1 kann auch als ein Datenbit-Fehlercode bezeichnet werden. Der Fehlercode C1 ist ein Fehler-korrigierender und/oder Fehler-erkennender Code. Die Informationsbits u1, ... , uq werden um die Prüfbits c1, ...,cp zu einem Codewort x des Fehlercodes C1 ergänzt, das am Eingang der Transformationsschaltung 12 anliegt. Beispielsweise ist es möglich, dass der Fehlercode C1 ein Bytefehler-korrigierender und/oder ein Bytefehler-erkennender Code ist. Es ist auch möglich, dass x ein Codewort eines nicht separierbaren Codes ist.
  • Es ist ferner möglich, dass anstatt der k Bits des Codeworts x1 ,...,xk auch q Bits der Nutzdatenbits u1 ,...,uq anliegen. Mit anderen Worten, es ist nicht erforderlich, dass ein Codewort x der Transformationsschaltung 12 zugeführt wird, sondern es könnte auch eine Menge von Nutzdatenbits u sein.
  • Am Eingang der Transformationsschaltung 12 liegen k Datenbits x = x1,...,xk an. Es gilt:
    • - m0 dieser Datenbits bilden ein nulltes Byte X0,
    • - m1 dieser Datenbits bilden ein erstes Byte X1, usw.
    • - bis schließlich mL-1 dieser Datenbits ein (L - 1)-tes Byte bilden.
  • Ferner gelten: m 0 + m 1 + + m L 1 = k , X 0 = x 1 0 , , x m 0 0 , X 1 = x 1 1 , , x m 1 1 , X L 1 = x 1 L 1 , , x m L 1 L 1 ,
    Figure DE102018131613A1_0026
    und x = x 1 , , x k = x 1 0 , , x m 0 0 , x 1 1 , , x m 1 1 , , x 1 L 1 , , x m L 1 L 1 .
    Figure DE102018131613A1_0027
  • Es werden mindestens zwei Bytes von Datenbits gebildet, so dass L ≥ 2 ist. Außerdem weist ein Byte von Datenbits gemäß diesem Ausführungsbeispiel mindestens zwei Bits auf, so dass gilt: m 0 , m 1 , , m L 1 2.
    Figure DE102018131613A1_0028
  • Ein Byte von Datenbits, beispielsweise das „Byte von Datenbits X1 “ wird auch mit „Datenbyte X1 “ oder „Gruppe von Datenbits X1 “ bezeichnet.
  • Es ist möglich aber nicht erforderlich, dass die Bits der Gruppen von Bits oder der Bytes X0 , X1 ,..., XL-1 von Datenbits aufeinanderfolgend angeordnet sind.
  • Lediglich beispielhaft wird in manchen Ausführungsbeispielen davon ausgegangen, dass die Bits eines Bytes von Datenbits jeweils aufeinanderfolgend angeordnet sind und dass x 1 , , x k = x 1 0 , , x m 0 0 , x 1 1 , , x m 1 1 , , x 1 L 1 , , x m L 1 L 1 = X 0 , X 1 , X L 1
    Figure DE102018131613A1_0029
    gilt.
  • Die Transformationsschaltung 12 transformiert die an ihren k Eingängen anliegenden k Datenbits des Codeworts x in n Speicherzellenwerte w = w1,...,wn und gibt sie an ihren n Ausgangsleitungen aus, die mit entsprechenden Dateneingangsleitungen von n Speicherzellen des Speichers 11 verbunden sind. Somit transformiert die Transformationsschaltung 12 Belegungen der Datenbits in Belegungen der Speicherzellenwerte.
  • Tritt nur eine Anzahl Anz1 < 2k von Belegungen der k Datenbits auf, ist es ausreichend, dass die Transformationsschaltung 12 so ausgelegt ist, dass sie die auftretenden Belegungen eineindeutig in entsprechende Belegungen der Speicherzellenwerte transformiert. Für die nicht auftretenden Belegungen kann die Funktionsweise der Transformationsschaltung beliebig festgelegt werden.
  • Die Transformationsschaltung 12 ist so ausgestaltet, dass sie
    • - die Belegungen des nullten Bytes X 0 = x 1 0 , , x m 0 0
      Figure DE102018131613A1_0030
      von Datenbits so in Belegungen eines nullten Bytes W 0 = w 1 0 , w n 0 0
      Figure DE102018131613A1_0031
      von Speicherzellenwerten transformiert, dass die Belegungen der Speicherzellenwerte des nullten Bytes W0 Codewörter eines Fehlercodes CF0 der Länge n0 sind,
    • - die Belegungen des ersten Bytes X 1 = x 1 1 , , x m 1 1
      Figure DE102018131613A1_0032
      von Datenbits so in Belegungen eines ersten Bytes W 1 = w 1 1 , w n 1 1
      Figure DE102018131613A1_0033
      von Speicherzellenwerten transformiert, dass die Belegungen der Speicherzellenwerte des ersten Bytes W1 Codewörter eines Fehlercodes CF1 der Länge n1 sind usw. bis sie schließlich
    • - die Belegungen des (L - 1)-ten Bytes X L 1 = x 1 L 1 , , x m L 1 L 1
      Figure DE102018131613A1_0034
      von Datenbits so in Belegungen eines L - 1-ten Bytes W L 1 = w 1 L 1 , , w n L 1 L 1
      Figure DE102018131613A1_0035
      von Speicherzellenwerten transformiert, dass die Belegungen des nL-1-ten Bytes WL-1 der Speicherzellenwerte Codewörter eines Fehlercodes CFL-1 der Länge nL-1 sind.
  • Der Fehlercode CF0, CF1..., CFL-1 wird jeweils auch als Block-Fehlercode bezeichnet.
  • In dem betrachteten Ausführungsbeispiel gelten: n 0 m 0 , n 1 m 1 , n L 1 m L 1
    Figure DE102018131613A1_0036
    und n = n 0 + n 1 + + n L 1 .
    Figure DE102018131613A1_0037
  • Ein Byte von Speicherzellenwerten kann in einer Gruppe von Speicherzellen gespeichert werden. Dabei sind vorzugsweise mindestens L = 2 Bytes und mindestens 2 Gruppen von Speicherzellen vorhanden, in denen die entsprechenden Bytes von Speicherzellenwerten gespeichert werden können.
  • Es ist auch möglich, dass mehr als 2 Bytes von Datenbits und von Speicherzellenwerten vorhanden sind. Beispielsweise können unterschiedliche Anzahlen von Bytes vorhanden sein, wobei jedes Byte in ein entsprechendes Byte von Speicherzellenwerten transformiert wird und die Speicherzellenwerte eines Bytes Codewörter eines Block-Fehlercodes sind.
  • Ein Byte von Speicherzellen weist vorzugsweise mindestens 3 Speicherzellenwerte auf.
  • Der Speicher 11 weist mindestens n = n0 + n1 + ... + nL-1 Speicherzellen auf. Der Block-Fehlercode CF0 ist ein Blockcode der Länge n0 , der Block-Fehlercode CF1 ist ein Blockcode der Länge n1 usw. bis zu dem Block-Fehlercode CFL-1, der ein Blockcode der Länge nL-1 ist.
  • Es ist möglich, dass beispielsweise der Block-Fehlercode CF1 ein q1 -aus-n1 -Code ist, so dass ein Codewort dieses Block-Fehlercodes eine Anzahl von q1 Einsen und eine Anzahl von n1 - q1 Nullen aufweist.
  • Auch ist es möglich, dass beispielsweise der Block-Fehlercode CF2 als eine bestimmte Teilmenge der Menge aller n2 -stelligen Binärwörter bestimmt ist.
  • Beispielsweise können die Codewörter des Block-Fehlercodes 3-aus-6-Codewörter sein, die jeweils 3 Einsen und 3 Nullen aufweisen. Insgesamt gibt es 20 derartige Codewörter. Beispielhaft sollen 4-Bit-Bytes von Datenbits in 6-Bit-Bytes von Speicherzellenwerten transformiert werden. Es gibt 24 = 16 unterschiedliche 4-Bit-Bytes, die umkehrbar eindeutig in 16 der insgesamt 20 6-Bit-Bytes von Speicherzellenwerten transformiert werden. Es werden somit (20 - 16 =) 4 der 3-aus-6-Codewörter bei der Transformation nicht verwendet. Der Block-Fehlercode CF2 umfasst somit nur eine Teilmenge der 3-aus-6-Codewörter des 3-aus-6-Codes. In diesem Beispiel besteht der Block-Fehlercode CF2 aus den 16 3-aus-6-Codewörtern, in die eines der möglichen 16 Datenbytes transformiert wird.
  • Ein Block-Fehlercode einer Länge n* kann eine echte Teilmenge von n*-stelligen Binärwörter sein; beispielsweise kann der Block-Fehlercode der Länge n* = 6 eine Teilmenge von 16 der 20 möglichen Codewörter des 3-aus-6-Codes sein. Die 20 möglichen Codewörter sind wiederum eine Teilmenge der 26 = 64 möglichen Binärwörtern der 6 Bit der Speicherzellenwerte.
  • Beispielsweise handelt es sich bei dem Block-Fehlercode um einen Bergercode oder einen sonstigen bekannten Code.
  • Eine Option ist es, dass n0 = n2 = ... = nL-1 gilt, so dass alle Block-Fehlercodes die gleiche Blocklänge aufweisen. Auch ist es möglich, dass CF0 = CF1 = ... = CFL-1 gilt und die verwendeten Block-Fehlercodes für die L Bytes von Speicherzellenwerten gleich sind und für jede der Belegungen der L Bytes von Datenbits die gleiche Transformation mittels der Transformationsschaltung 12 durchgeführt wird.
  • Es ist ferner möglich, dass verschiedene Bytes von Datenbits durch unterschiedliche Transformationen in Bytes von Speicherzellenwerten transformiert werden.
  • Eine andere Option besteht darin, dass nur eine Anzahl Anz0 von Belegungen des nullten Bytes X0 von Datenbits mit Anz0 < 2m 0 an den m0 ersten Eingängen der Transformationsschaltung 12 auftritt und nur die auftretenden Belegungen umkehrbar eindeutig in Anz0 Belegungen des Bytes von Speicherzellenwerten durch die Transformationsschaltung 12 transformiert werden und dass die Transformation für Belegungen, die nicht an den entsprechenden Eingängen auftreten, nicht definiert sein muss. Entsprechendes kann für die jeweiligen anderen Bytes von Datenbits gelten.
  • Die von der Transformationsschaltung 12 an ihren entsprechenden Ausgängen bereitgestellten Speicherzellenwerte W 0 = w 1 0 , , w n 0 0
    Figure DE102018131613A1_0038
    W0 können in n0 Speicherzellen, die als nullte Speicherzellen bezeichnet werden, gespeichert werden.
  • Die von der Transformationsschaltung 12 an ihren entsprechenden Ausgängen bereitgestellten Speicherzellenwerte W 1 = w 1 1 , w n 1 1
    Figure DE102018131613A1_0039
    können in n1 Speicherzellen, die als erste Speicherzellen bezeichnet werden, gespeichert werden.
  • Dies wird fortgesetzt bis schließlich die von der Transformationsschaltung 12 an ihren entsprechenden Ausgängen bereitgestellten Speicherzellenwerte WL-1 in nL-1 Speicherzellen gespeichert werden, die auch als (L - 1)-te Speicherzellen bezeichnet werden.
  • Aus den n0 nullten Speicherzellen können die in ihnen gespeicherten Speicherzellenwerte W 0 ' = w 1 0 ' , , w n 0 0 '
    Figure DE102018131613A1_0040
    ausgelesen werden.
  • Aufgrund eines Fehlers können sich die ausgelesenen Speicherzellenwerte W0 ' von den zuvor geschriebenen Speicherzellenwerten W0 unterscheiden.
  • Liegt kein Fehler vor, gilt W0 = W0 ' und die ausgelesenen Speicherzellenwerte W0 ' bilden ein Codewort des Block-Fehlercodes CF0 . Bilden die ausgelesenen Speicherzellenwerte W0 ' kein Codewort des Block-Fehlercodes CF0 , dann liegt ein Fehler vor, der mittels des Block-Fehlercodes CF0 erkannt werden kann. Die aus den ersten n0 Speicherzellen ausgelesenen Speicherzellenwerte W0 ' liegen an einem n0 -Bit breiten Eingang der Fehlererkennungsschaltung FE0 130 an. Diese Fehlererkennungsschaltung FE0 130 ist derart eingerichtet, dass sie an ihrem Ausgang einen ersten Wert eines Fehlersignals E0 ausgibt, wenn der ausgelesene Speicherzellenwert W0 ' ein Codewort des Block-Fehlercodes CF0 ist und einen zweiten Wert an ihrem Ausgang ausgibt, wenn der ausgelesene Speicherzellenwert W0 ' kein Codewort des Block-Fehlercodes CF0 ist. Die Ausgabe des zweiten Wertes zeigt somit an, dass die von den nullten n0 Speicherzellen ausgegebenen Speicherzellenwerte fehlerhaft sind.
  • Aus den n1 ersten Speicherzellen bis nL-1 (L- 1)-ten Speicherzellen können die in ihnen gepeicherten Speicherzellenwerte W1 ' bis WL-1 ' ausgelesen werden. Es ist möglich, dass sich die ausgelesenen Speicherzellenwerte W1 ',...,WL-1 ' von den eingeschriebenen Speicherzellenwerten W1 ,..., WL-1 auf Grund eines Fehlers unterscheiden.
  • Liegt kein Fehler vor, dann sind die eingeschriebenen Speicherzellenwerte gleich den ausgelesenen Speicherzellenwerten und die ausgelesenen Speicherzellenwerte bilden jeweils ein Codewort des entsprechenden Block-Fehlercodes.
  • Die vorstehenden Ausführungen gelten für die verbleibenden Fehlererkennungsschaltungen FE1 131 bis FEL-1 13L-1 entsprechend: Die Fehlererkennungsschaltung FE1 131 bestimmt anhand ausgelesener Speicherzellenwerte W1 ' ein Fehlersignal E1 (basierend auf dem Block-Fehlercode CF1 ) und die Fehlererkennungsschaltung FEL-1 13L-1 bestimmt anhand ausgelesener Speicherzellenwerte WL-1 ' ein Fehlersignal EL-1 (basierend auf dem Block-Fehlercode CFL-1 ).
  • Fig.2a und Fig.2b: Prüfbits für Informationsbits u
  • Die aus dem Speicher ausgegebenen Speicherzellenwerte bilden Bytes oder Gruppen von Speicherzellenwerten W0 '..... WL-1 '. Sind nicht alle Bits eines solchen Bytes fehlerfrei, liegt ein sogenannter Gruppenfehler vor.
  • Sind beispielsweise nicht alle Werte w 1 i ' , , w n 1 i '
    Figure DE102018131613A1_0041
    des ausgelesenen Bytes Wi' fehlerfrei, so liegt ein Gruppenfehler in dem i-ten Byte der ausgelesenen Speicherzellenwerte (auch bezeichnet als die i-te Gruppe der ausgelesenen Speicherzellenwerte) vor.
  • Der Gruppenfehler des i-ten Bytes gibt an, dass mindestens ein Speicherzellenwert dieses Bytes fehlerhaft ist. Bei dem Gruppenfehler handelt es sich somit um einen Fehler mit erkannter Byte-Position, d.h. der Gruppenfehler zeigt an, dass ein bestimmtes Byte fehlerhaft ist. Allerdings zeigt der Gruppenfehler alleine noch nicht an, welches Bit oder welche Bits fehlerhaft ist/sind.
  • Mit anderen Worten liefert der Gruppenfehler eine Information, welches Byte oder welche Bytes aus einer Menge von Bytes fehlerhaft ist oder sind.
  • Beispielsweise zeigt bei einem 3-aus-6-Code der Gruppenfehler ein 6-Bit-Byte an, das fehlerhaft ist, ohne bereits aufzuzeigen, welches mindestens eine Bit der 6 Bits tatsächlich fehlerhaft ist.
  • Das Vorliegen eines Gruppenfehlers kann auch durch ein Bytefehler-Positionssignal angezeigt werden, wie dies im Folgenden beispielhaft beschrieben ist.
  • 2a zeigt ein schematisches Diagramm, das eine Korrektur der Datenbits eines Codeworts veranschaulicht. 2a umfasst eine Kodiereinheit 21, eine Transformationsschaltung 22 sowie einen Speicher 23.
  • Die Nutzdatenbits u werden durch die Kodiereinheit 21 mittels eines Fehlercodes in Datenbits eines Codeworts x codiert. Anschließend wird das Codewort x der Transformationsschaltung 22 zugeführt, anhand derer sie in zu schreibende Speicherzellenwerte W0 , W1 ,..., WL-1 transformiert werden.
  • In diesem Beispiel ist die Kodiereinheit 21 derart eingerichtet, dass die Nutzdatenbits u in das Codewort x mit x = x 1 , , x k = u 1 , , u q , c 1 , , c p = X 0 , X 1 , , X L 1
    Figure DE102018131613A1_0042
    (umfassend die Nutzdatenbits u sowie Prüfbits c) des Fehlercodes C1 transformiert werden. Das Codewort x umfasst somit
    • - m1 Bits, die eine Gruppe X0 von Datenbits bilden,
    • - m2 Bits, die eine Gruppe X1 von Datenbits bilden, usw.
    • - mL Bits, die eine Gruppe XL-1 von Datenbits bilden.
  • Damit gilt: m 1 + m 2 + + m L = k ,
    Figure DE102018131613A1_0043
    wobei k die Anzahl der Bits des Codeworts x ist.
  • Das Codewort umfasst Nutzdatenbits und Prüfbits, wenn der Fehlercode C1 ein separierbarer Code ist. Auch ist es möglich, dass nicht zwischen Nutzdatenbits und Prüfbits eines Codeworts unterschieden wird, wenn der Fehlercode C1 ein nicht separierbarer Code ist.
  • Es ist möglich, dass m1 = m2 = ... = mL = b gilt und X0 ,X1 ,...,XL-1 jeweils ein Byte aus b Bits bilden, wobei b ≥ 2 ist.
  • Bei den Gruppen X0 ,X1,...,XL- 1 handelt es sich um Bytes, wobei jedes Byte mindestens zwei Bits umfasst. Die Bits der Bytes X0 ,X1,...,XL-1 liegen an entsprechenden m1 -Bit, m2 -Bit,..., mL -Bit breiten Eingängen der Transformationsschaltung 22 an. Die Transformationsschaltung 22 stellt an ihrem n1 -Bit breiten Ausgang n1 zu schreibende Speicherzellenwerte W0 , an ihrem n2 -Bit breiten Ausgang n2 Speicherzellenwerte W1 bereit usw. bis sie an ihrem nL -Bit breiten Ausgang nL Speicherzellenwerte WL-1 ausgibt.
  • Die Transformationsschaltung ist dabei vorzugsweise so ausgestaltet, dass es sich bei
    • - der Menge der zu schreibenden Speicherzellenwerte W0 um je ein Codewort des Block-Fehlercodes CF0 ,
    • - der Menge der zu schreibenden Speicherzellenwerte W1 um je ein Codewort des Block-Fehlercodes CF1 , usw.
    • - der Menge der zu schreibenden Speicherzellenwerte WL-1 um je ein Codewort des Block-Fehlercodes CFL-1
    handelt.
  • Die Transformationsschaltung 22 ist mit dem Speicher 23 derart gekoppelt, dass die zu schreibenden Speicherzellenwerte W0 , W1 ..., WL-1 in Speicherzellen des Speichers 23 geschrieben werden können.
  • Es ist möglich, dass der Speicher 23 ein adressierbarer Speicher, ein Registerarray und/oder ein Register umfasst.
  • Aus dem Speicher 23 können Speicherzellenwerte W0 ', W1 ',..., WL-1 ' ausgelesen werden. Wie vorstehend erläutert, können die ausgelesenen Speicherzellenwerte fehlerhaft sein. Handelt es sich bei einem der Bytes von ausgelesenen Speicherzellenwerte W0 ', W1 ',..., WL-1 ' nicht um ein Codewort des jeweiligen Block-Fehlercodes (siehe obige Ausführungen), wird ein Fehler in dem Byte des ausgelesenen Blocks erkannt.
  • 2b zeigt beispielhaft eine schematische Schaltungsanordnung umfassend den Speicher 23, eine Vielzahl von L Fehlererkennungsschaltungen 240, 241, ..., 24L-1, eine inverse Transformationsschaltung 25, einen Byte-Korrekturwertbildner 26 und L Exklusiv-Oder-Schaltungen 270, 271, ..., 27L-1.
  • An den Ausgängen des Speichers 23 werden die ausgelesenen Speicherzellenwerte W0 ',W1 ',...,WL-1 ' bereitgestellt. Diese werden entsprechenden Eingängen der inversen Transformationsschaltung 25 zugeführt. Auch wird jeder dieser ausgelesenen Speicherzellenwerte einer der Fehlererkennungsschaltungen 240 bis 24L-1 zugeführt. Jede der Fehlererkennungsschaltungen 240 bis 24L-1 stellt an ihrem Ausgang ein Fehlersignal E0 bis EL-1 bereit. Das Fehlersignal zeigt an, ob die ausgelesenen Speicherzellenwerte W0 ' bis WL-1 ' Codewörter der Block-Fehlercodes CF0 bis CFL-1 sind.
  • Beispielsweise gilt für die ausgelesenen Speicherzellenwerte W0 ', die der Fehlererkennungsschaltung 240 zugeführt werden: Das Fehlersignal E0 nimmt den ersten Wert an, wenn die ausgelesenen Speicherzellenwerte W0 ' ein Codewort des Block-Fehlercodes CF0 darstellen; ansonsten nimmt das Fehlersignal E0 den zweiten Wert an.
  • Somit kann mittels der Fehlererkennungsschaltungen 240 bis 24L-1 bestimmt werden, ob die jeweiligen ausgelesenen Bytes von Speicherzellenwerten W0 ' bis WL-1 ' fehlerhaft sind oder nicht.
  • Die Fehlersignale E0 bis EL-1 der Fehlererkennungsschaltungen 240 bis 24L-1 werden dem Byte-Korrekturwertbildner 26 zugeführt.
  • Die inverse Transformationsschaltung 25 ist so ausgestaltet, dass sie Bytes von eventuell fehlerhaften ausgelesenen Speicherzellenwerten W0 'W1 ',..., WL-1 ' in Bytes von gelesenen Datenbits X' = X0 ',X1 ', ... , XL-1 ' so transformiert, dass gilt: X 0 = X 0 ' , X 1 = X 1 ' , , X L 1 = X L 1 '
    Figure DE102018131613A1_0044
    für W 0 = W 0 ' , W 1 = W 1 ' , , W L 1 = W L 1 '
    Figure DE102018131613A1_0045
  • Sind keine Fehler aufgetreten, dann gilt: Durch die Transformationsschaltung 22 werden die Bytes X0 ,...,XL-1 in Bytes von Speicherzellenwerten W0 ,..., WL-1 transformiert und in Speicherzellen des Speichers 23 gespeichert. Die aus dem Speicher 23 ausgelesenen Bytes von Speicherzellenwerten W0 ',..., WL-1 ' werden durch die inverse Transformationsschaltung 25 in die Bytes X0 ',...,XL-1 ' transformiert.
  • Die Bytes von gelesenen Datenbits X' werden von der inversen Transformationsschaltung 25 dem Byte-Korrekturwertbildner 26 bereitgestellt. Auch werden diese Bytes von gelesenen Datenbits X' an erste Eingänge der Exklusiv-Oder-Schaltungen (auch bezeichnet als XOR-Schaltungen) 270 bis 27L-1 geführt.
  • Der Byte-Korrekturwertbildner 26 ist derart eingerichtet, dass in Abhängigkeit von den an seinen Eingängen anliegenden
    • - Fehlersignalen E0 bis EL-1 und
    • - Bytes von gelesenen (und ggf. fehlerhaften) Datenbits X'
  • Byte-Korrekturwerte e 0 X , e 1 X , , e L 1 X
    Figure DE102018131613A1_0046
    entsprechend dem Fehlercode C1 zur Korrektur von Datenbytes an seinen Ausgängen bereitgestellt werden. Hierzu sind die Ausgänge des Byte-Korrekturwertbildners 26 mit zweiten Eingängen der XOR-Schaltungen 270 bis 27L-1 verbunden. An den Ausgängen der XOR-Schaltungen 270 bis 27L-1 werden korrigierte Bytes X c o r = X c o r 0 ,   X c o r 1 , X c o r L 1
    Figure DE102018131613A1_0047
    bereitgestellt, wobei gilt: X c o r 0 = X 0 ' + e 0 X , X c o r 1 = X 1 ' + e 1 X , X c o r L 1 = X L 1 ' + e L 1 X .
    Figure DE102018131613A1_0048
    Weiterhin gilt X c o r 0 = X 0 , X c o r 1 = X 1 , , X c o r L 1 = X L 1 ,
    Figure DE102018131613A1_0049
    wenn der eventuell aufgetretene Fehler durch den jeweiligen Fehlercode C1 korrigierbar ist.
  • Beispielsweise kann die Transformationsschaltung 22 so ausgestaltet sein, dass das Byte von Speicherzellenwerten W0 allein durch das Byte X0 von Datenbits bestimmt ist und von weiteren Datenbits nicht abhängt. Entsprechendes kann für die anderen Bytes von Speicherzellenwerten W1 bis WL-1 in Bezug auf deren Abhängigkeiten von den Bytes X1 bis XL-1 gelten.
  • Ist das Byte der gelesenen Speicherzellenwerte gleich dem Byte der zu schreibenden Speicherzellenwerte, d.h. W 0 ' = W 0 ,
    Figure DE102018131613A1_0050
    so liegt in dem gelesenen Byte kein Fehler vor, d.h. das Fehlersignal E0 der Fehlererkennungsschaltung 240 entspricht dem ersten Wert, der anzeigt, dass das Byte der gelesenen Speicherzellenwerte W0 ' ein Codewort des Block-Fehlercodes CF0 ist. Eine Korrektur ist damit nicht erforderlich.
  • Gilt hingegen W 0 ' W 0 ,
    Figure DE102018131613A1_0051
    so ist das Byte der gelesenen Speicherzellenwerte W0 ' kein Codewort des Block-Fehlercodes CF0 . Das Fehlersignal E0 entspricht dem zweiten Wert. Der Byte-Korrekturwertbildner 26 generiert das Korrektursignal e 0 X 0
    Figure DE102018131613A1_0052
    zur Korrektur von Bits des 0-ten gelesenen Bytes X0 ' und führt es der XOR-Schaltung 270 zu. Dabei ist das Korrektursignal e 0 X
    Figure DE102018131613A1_0053
    so bestimmt, dass für einen korrigierbaren Fehler des Fehlercodes das korrigierbare Byte bestimmt ist zu: X c o r 0 = X 0 ' + e 0 X = X 0 .
    Figure DE102018131613A1_0054
    Entsprechendes gilt für die weiteren Bytes der gelesenen Speicherzellenwerte, d.h. für WL ' bis WL-1 '.
  • Wenn die Fehlersignale E0 bis EL-1 durch ihren ersten Wert anzeigen, dass die entsprechenden gelesenen Bytes Codewörter der entsprechenden Block-Fehlercodes sind, dann werden von dem Byte-Korrekturwertbildner 26 keine Byte-Korrekturwerte, die von Null verschieden sind, bestimmt. Ein Byte-Korrekturwert von Null, der einem Eingang (von zwei Eingängen) einer XOR-Schaltung zugeführt wird, führt dazu, dass an dem Ausgang der XOR-Schaltung das Signal des anderen Eingangs ausgegeben wird. Mit anderen Worten verändert der Byte-Korrekturwert Null nicht den Ausgang der XOR-Schaltung. Dies ist auch gewünscht, da ja in diesem Fall kein Fehler korrigiert werden soll.
  • Entsprechend wird eine Korrektur durchgeführt, wenn das Fehlersignal E0 bis EL-1 den zweiten Wert ausgibt. Dann ist das betroffene Byte von Datenbits zu korrigieren.
  • Im Ergebnis wird also durch die Fehlersignale E0 bis EL-1 angezeigt, ob und wenn ja welche Bytes korrigiert werden müssen. Hierdurch kann vorteilhaft die Korrekturfähigkeit des Fehlercodes erhöht werden.
  • Ein weiterer Vorteil ist es, dass die Fehlersignale E0 bis EL-1 aus den Bytes von gelesenen Speicherzellenwerten bestimmt werden können, ehe die Speicherzellenwerte durch die inverse Transformationsschaltung 25 in Bytes von Datenbits X' transformiert werden.
  • Hier bilden beispielhaft die Nutzdatenbits u = u1 ,...,uq und die Prüfbits c = c1,..., cp Datenbits x = x 1 , , x k = u 1 , , u q , c 1 , , c p
    Figure DE102018131613A1_0055
    des Fehlercodes C1 , der ein Bytefehler-korrigierender und/oder Bytefehler-erkennender Code ist.
  • Die Datenbits x werden in Bytes X0 ,...,XL-1 unterteilt, die anhand der Transformationsschaltung 22 in Bytes W0 ,..., WL-1 von Speicherzellenwerten transformiert werden. Diese Bytes W0 bis WL-1 sind dabei Codewörter der Block-Fehlercodes CF0 bis CFL-1 und werden in Speicherzellen des Speichers 23 gespeichert.
  • Aus dem Speicher 23 werden Bytes von eventuell fehlerhaften Speicherzellenwerten W1 ' bis WL-1 ' ausgelesen und anhand der Fehlererkennungsschaltungen 240 bis 24L-1 wird pro Byte W1 ' bis WL-1 ' geprüft, ob es sich jeweils um ein Codewort des Block-Fehlercodes CF0 bis CFL-1 handelt. Mittels der Fehlersignale E0 bis EL-1 wird angezeigt, ob das jeweils ausgelesene (und möglicherweise fehlerhafte) Byte W1 ' bis WL-1 ' ein Codewort ist oder nicht.
  • Diese Bytes eventuell fehlerhafter Speicherzellenwerte W1 ' bis WL-1 ' werden durch die inverse Transformationsschaltung 25 in eventuell fehlerhafte Bytes X0 ' bis XL-1 ' von Datenbits transformiert. Mittels der jeweiligen Fehlersignale E0 bis EL-1 wird dem Byte-Korrekturwertbildner 26 angezeigt, für welches der Bytes X0 ' bis XL-1 ' ein Gruppenfehler erkannt wurde und für welches Byte kein solcher Gruppenfehler erkannt wurde. Es ist auch möglich, dass für ein Byte kein Gruppenfehler erkannt wurde, obwohl diese Byte fehlerhaft ist (z.B. dann, wenn aufgrund mehrerer Fehler ein Codewort ein weiteres Codewort verfälscht wurde).
  • Die eventuell fehlerhaften Bytes X0' bis XL-1 ' und die Fehlersignale E0 bis EL-1 werden dem Byte-Korrekturwertbildner 26 zugeführt, der daraus Byte-Korrekturwerte e 0 X  bis e L 1 X
    Figure DE102018131613A1_0056
    entsprechend dem Fehlercode C1 bildet, die anhand der XOR-Schaltungen 270 bis 27L-1 mit den Bytes X0' bis XL-1 ' komponentenweise XOR-verknüpft werden.
  • Die Fehlerkorrektur und damit auch die Bestimmung der Byte-Korrekturwerte erfolgt unter Verwendung des Fehlercodes C1 . Anhand der Fehlererkennungsschaltungen 240 bis 24L-1 und mittels der Block-Fehlercodes CF0 bis CFL-1 können Gruppenfehler bestimmt werden, so dass für die Fehlerkorrektur anhand des Fehlercodes C1 bekannt ist, welches Byte bzw. welche Bytes fehlerhaft ist/sind und somit korrigiert werden muss/müssen.
  • Mit anderen Worten: Die Fehlerkorrektur eventuell fehlerhafter Datenbytes erfolgt unter Verwendung des Fehlercodes C1 . Die Erkennung der Gruppenfehler in den ausgelesenen Datenbytes kann unter Verwendung der Block-Fehlercodes CF0 bis CFL-1 erfolgen noch bevor sie in fehlerhafte Bytes zurücktransformiert werden.
  • Es ist eine Option, mindestens eine der Fehlererkennungsschaltungen 240 bis 24L-1 und die inverse Transformationsschaltung 25 gemeinsam zu realisieren, so dass zumindest Teile der Schaltungen gemeinsam verwendet werden können.
  • Fig.3a und Fig.3b: Prüfbits für Speicherzellenwerte
  • Nachfolgend werden beispielhaft Prüfbits Pr für Speicherzellenwerte (im Gegensatz zu Prüfbits für Datenbits wie in 2a) gebildet. Die Prüfbits der Speicherzellenwerte können z.B. nach ihrer Bildung in Speicherzellenwerte transformiert und dann gespeichert werden.
  • Die Prüfbits der Speicherzellenwerte können auf gleiche oder unterschiedliche Weise wie die Datenbits in Speicherzellenwerte transformiert werden.
  • 3a zeigt eine schematische Schaltungsanordnung umfassend eine Transformationsschaltung 31, einen Prüfbitbildner 32, eine Prüfbittransformationsschaltung 33 und einen Speicher 34.
  • Am Eingang der Transformationsschaltung 31 liegen die in Bytes X unterteilten Datenbits des Codeworts x des Fehlercodes C1 an, die hier beispielhaft die Nutzdatenbits u sowie die Prüfbits c umfassen.
  • Alternativ ist es möglich, der Transformationsschaltung 31 nur die Nutzdatenbits u, unterteilt in Bytes, zuzuführen.
  • Die Transformationsschaltung 31 stellt an ihrem Ausgang Bytes W0 bis WL-1 von zu speichernden Speicherzellenwerten bereit. Die zu speichernden Speicherzellenwerte W0 bis WL-1 haben eine jeweilige Wortbreite von n1 bis nL-1 . Weiterhin sind die zu speichernden Speicherzellenwerte W0 bis WL-1 Codewörter der jeweiligen Block-Fehlercodes CF0 bis CFL-1 .
  • Ausgangsseitig ist die Transformationsschaltung 31 mit dem Speicher 34 und mit dem Prüfbitbildner 32 verbunden.
  • Der Prüfbitbildner 32 ist derart eingerichtet, dass er Prüfbits Pr so bestimmt, dass die Speicherzellenwerte der Bytes W0 , W1 ,..., WL-1 und die Prüfbits Pr ein Codewort W 0 W 1 W L 1   P r
    Figure DE102018131613A1_0057
    eines Fehlercodes C2 bilden.
  • Der Ausgang des Prüfbitbildners 32 ist mit dem Eingang der Prüfbittransformationsschaltung 33 verbunden. Die Prüfbittransformationsschaltung 33 ist derart eingerichtet, dass sie die an ihrem Eingang anliegenden Prüfbits Pr in Speicherzellenwerte W [Pr] transformiert. Diese Speicherzellenwerte W [Pr] werden zusammen mit den Speicherzellenwerte W0 bis WL-1 in dem Speicher 34 gespeichert.
  • Weisen beispielsweise die Bytes X0 bis XL-1 alle dieselbe Anzahl von 4 Bits auf, d.h. m0 = m1 = ... = mL-1 = 4 und haben beispielsweise alle Speicherzellenwerte W0 bis WL-1 eine Wortbreite von 6 Bits, d.h. n0 = n1 = ... = nL-1 = 6, dann bilden die Bytes X0 bis XL-1 jeweils 4-Bit-Bytes mit 24 = 16 möglichen Belegungen.
  • Es ist dann möglich, dass die Block-Fehlercodes CF0 bis CFL-1 jeweils 3-aus-6-Codes mit ( 6 3 ) = 20
    Figure DE102018131613A1_0058
    Codewörtern sind. Die 16 möglichen Belegungen der 4-Bit-Bytes können durch die Transformationsschaltung 31 umkehrbar eindeutig auf 16 der 20 möglichen 3-aus-6-Codewörter abgebildet werden.
  • In diesem Beispiel bestimmt der Prüfbitbildner 32 aus den an seinem Eingang anliegenden 6 · L Bits der Speicherzellenwerte W0 bis WL-1 die Prüfbits Pr entsprechend dem Fehlercode C2 . Beispielsweise kann der Prüfbitbildner 32 das erste Prüfbit als XOR-Summe der jeweils ersten Bits der Speicherzellenwerte der Bytes W0 bis WL-1 bestimmen, das zweite Prüfbit als XOR-Summe der jeweils zweiten Bits der Speicherzellenwerte der Bytes W0 bis WL-1 usw. bestimmen bis zu dem sechsten Prüfbit, das als XOR-Summe der jeweils sechsten Bits der Speicherzellenwerte der Bytes W0 bis WL-1 gebildet wird. Es ergeben sich somit sechs Prüfbits P r = P r 0 , P r 1 , P r 2 , P r 3 , P r 4 , P r 5 .
    Figure DE102018131613A1_0059
  • Diese können, müssen aber nicht, ein Codewort des 3-aus-6 Codes bilden.
  • Weiterhin werden in diesem Beispiel mittels der Transformationsschaltung die sechs Prüfbits Pr0 bis Pr5 in zwei 3-aus-6-Codewörter transformiert, indem die ersten drei Prüfbits mittels einer 0 zu einem 4-Bit-Byte P r 0 , P r 1 , P r 2 ,0
    Figure DE102018131613A1_0060
    ergänzt und die letzten drei Prüfbits ebenfalls mittels einer 0 zu einem weiteren 4-Bit-Byte P r 3 , P r 4 , P r 5 ,0
    Figure DE102018131613A1_0061
    ergänzt werden. Diese beiden 4-Bit-Bytes werden anhand der Prüfbittransformationsschaltung 33 in Codewörter des 3-aus-6-Codes transformiert. Gemäß diesem Beispiel werden dann diese beiden Codewörter des 3-aus-6-Codes in den Speicher 34 geschrieben.
  • Es ist beispielsweise auch möglich, dass anhand der Prüfbittransformationsschaltung 33 die sechs Prüfbits Pr0 bis Pr5 in die folgenden Prüfbits transformiert werden: P r 0 , P r 0 ¯ , P r 1 , P r 1 , ¯ P r 2 , P r 2 ¯ , P r 3 , P r 3 ¯ , P r 4 , P r 4 ¯ , P r 5 , P r 5 ¯ .
    Figure DE102018131613A1_0062
    In diesem Beispiel werden die Prüfbits gedoppelt, indem für jedes Prüfbit Pr0 bis Pr5 ein invertiertes Prüfbit P r 0 ¯  bis  P r 5 ¯
    Figure DE102018131613A1_0063
    bestimmt wird. Somit werden also zwei Speicherzellen pro Prüfbit in dem Speicher 34 gespeichert.
  • Gemäß einem weiteren Beispiel können die Prüfbits Pr0 bis Pr5 auch verdreifacht abgespeichert werden: P r 0 , P r 0 , P r 0 , P r 1 , P r 1 , P r 1 , P r 2 , P r 2 , P r 2 , P r 3 , P r 3 , P r 3 , P r 4 , P r 4 , P r 4 , P r 5 , P r 5 , P r 5 .
    Figure DE102018131613A1_0064
  • Beim Auslesen eventuell fehlerhafter Prüfbits aus dem Speicher 34 kann dann beispielsweise eine Korrektur ggf. fehlerhafter Prüfbits unter Anwendung einer Mehrheitsentscheidung erfolgen.
  • Auch ist es ein Beispiel, dass die Prüfbittransformationsschaltung 33 derart eingerichtet ist, dass die Prüfbits Pr0 bis Pr5 mit (mindestens) einem zusätzlichen Paritätsbit Pa gemäß P a = P r 0 + P r 1 + P r 2 + P r 3 + P r 4 + P r 5
    Figure DE102018131613A1_0065
    ergänzt werden, wobei dann W [ P r ] = P r 0 , P r 1 , P r 2 , P r 3 , P r 4 , P r 5 , P a
    Figure DE102018131613A1_0066
    in den Speicher 34 geschrieben wird. Hierbei bezeichnet „+“ die Addition modulo 2. Beim Auslesen von eventuell fehlerhaften Prüfbits kann ein ungerader Fehler in den Prüfbits anhand des Paritätsbits erkannt werden. Wird ein Fehler in den Prüfbits erkannt, kann beispielsweise ein solcher Fehler angezeigt werden, es kann aber auf eine Korrektkur von Speicherzellenwerten verzichtet werden.
  • Die Prüfbits Pr des Fehlercodes C2 werden hier beispielhaft unter Verwendung der Speicherzellenwerte der Bytes W0 bis WL-1 und nicht unmittelbar aus den Bytes X0 bis XL-1 gebildet. Die Prüfbits Pr können vor ihrer Speicherung in entsprechende Speicherzellenwerte transformiert werden.
  • Beim Auslesen aus dem Speicher 34 werden an den entsprechenden Ausgängen des Speichers 34 eventuell fehlerhafte Speicherzellenwerte W0 ', W1 ' ..., WL-1 ', W[Pr]' ausgegeben.
  • 3b zeigt ein schematisches Schaltbild mit Komponenten zur Korrektur der möglicherweise fehlerhaften Speicherzellenwerte W0 ', W1 ', ..., WL-1 ', W[Pr]'.
  • 3b zeigt den Speicher 34, eine Vielzahl von L Fehlererkennungsschaltungen 350 bis 35L-1, eine Fehlererkennungsschaltung 40, eine inverse Prüfbittransformationsschaltung 36, eine Anzahl von L XOR-Schaltungen 380 bis 38L-1, eine inverse Transformationsschaltung 39 und einen Byte-Korrekturwertbildner 37.
  • Der Byte-Korrekturwertbildner 37 weist L Eingänge zur Eingabe von L Fehlersignalen E0 bis EL-1 , einen Eingang zur Eingabe eines Fehlersignals EPr , L Eingänge zur Eingabe eventuell fehlerhafter Speicherzellenwerte W0 ' bis WL-1 ‚und einen Eingang zur Eingabe eventuell fehlerhafter Prüfbits Pr‘ auf. Weiterhin weist der Byte-Korrekturwertbildner 37 L Ausgänge zur Ausgabe von L Byte-Korrekturwerten e 0 W , e 1 W , , e L 1 W
    Figure DE102018131613A1_0067
    zur Korrektur der eventuell fehlerhaften Speicherzellenwerte W0 ', W1 '..., WL-1 ' auf.
  • Aus dem Speicher 34 werden die eventuell fehlerhaften Speicherzellenwerte W0 ', W1 ',..., WL-1 ' und W[Pr]' ausgelesen.
  • Die ausgelesenen Speicherzellenwerte W0 ' bis WL-1 ' werden einerseits an den Byte-Korrekturwertbildner 37 geführt und andererseits wird jeder dieser Speicherzellenwerte an einen ersten Eingang einer XOR-Schaltung 380 bis 38L-1 geführt, wobei jedem der Speicherzellenwerte eine XOR-Schaltung zugeordnet ist.
  • Der ausgelesene Speicherzellenwert W [Pr]' ist mit dem Eingang der inversen Prüfbittransformationsschaltung 36 und mit dem Eingang der Fehlererkennungsschaltung 40 verbunden.
  • Die Fehlererkennungsschaltungen 350 bis 35L-1 stellen die Fehlersignale E0 bis EL-1 bereit und die Fehlererkennungsschaltung 40 stellt ein Fehlersignal EPr bereit. Alle diese Fehlersignale werden an den Byte-Korrekturwertbildner 37 angelegt.
  • Der Ausgang der inversen Prüfbittransformationsschaltung 36 stellt die eventuell fehlerhaften Prüfbits Pr' dem Byte-Korrekturwertbildners 37 bereit.
  • Zeigt das Fehlersignal EPr einen Fehler an, so kann der Byte-Korrekturwertbildner 37 bestimmen, dass der Fehler angezeigt wird und dass keine Korrektur eines Fehlers erfolgt.
  • Der Byte-Korrekturwertbildner 37 ist derart eingerichtet, dass er dann, wenn das Fehlersignal EPr einen Fehler anzeigt, entsprechend dem Fehlercode C2 Byte-Korrekturwerte e 0 W , e 1 W , , e L 1 W
    Figure DE102018131613A1_0068
    zur Korrektur der eventuell fehlerhaften Speicherzellenwerte W0 ', W1 ',..., WL-1 ' bestimmt und an seinen L Ausgängen bereitstellt. Jeder der L Ausgänge ist mit einem zweiten Eingang einer der XOR-Schaltungen 380 bis 38L-1 verbunden.
  • Die XOR-Schaltungen 380, 381, ..., 38L-1 stellen an ihren Ausgängen die korrigierten Speicherzellenwerte W c o r 0 = W 0 ' + e 0 W , W c o r 1 = W 1 ' + e 1 W , W c o r L 1 = W L 1 ' + e L 1 W
    Figure DE102018131613A1_0069
    bereit. Ist ein Fehler durch den Fehlercode C2 korrigierbar, so ergibt sich W c o r 0 = W 0 ' , W c o r 1 = W 1 ' , W c o r L 1 = W L 1 ' .
    Figure DE102018131613A1_0070
  • Die Ausgänge der XOR-Schaltungen 380 bis 38L-1 sind mit entsprechenden Eingängen der inversen Transformationsschaltung 39 verbunden. Diese inverse Transformationsschaltung 39 stellt an ihren Ausgängen die korrigierten Bytes X c o r 0
    Figure DE102018131613A1_0071
    bis X c o r L 1
    Figure DE102018131613A1_0072
    bereit. Ist der Fehler durch den Fehlercode C2 korrigierbar, so ergibt sich X c o r 0 = X 0 , X c o r 1 = X 1 , X c o r L 1 = X L 1 .
    Figure DE102018131613A1_0073
  • Fig.4: Bildung des Fehlersignals
  • Nachfolgend wird erläutert, wie aus den einzelnen Fehlersignalen E0 bis EL-1 ein kombiniertes Fehlersignal E bestimmt wird.
  • 4 zeigt eine beispielhafte Schaltungsanordnung mit dem Speicher 11 und den Fehlererkennungsschaltungen 130 bis 13L-1 aus 1. Zusätzlich zu den bereits in 1 gezeigten Komponenten ist in 4 eine Fehlererkennungsschaltung 41 dargestellt, an deren L Eingängen die Fehlersignale E0 ,E1 ,..., EL-1 der Fehlererkennungsschaltungen 130 bis 13L-1 anliegen. Die Fehlererkennungsschaltung 41 stellt an ihrem Ausgang das kombinierte Fehlersignal E bereit.
  • Die Fehlererkennungsschaltung 41 ist derart eingerichtet, dass
    • - das kombinierte Fehlersignal E einen ersten Wert annimmt und damit anzeigt, dass kein Fehler von den Fehlererkennungsschaltungen 130 bis 13L-1 erkannt wurde, wenn alle an ihren Eingängen anliegenden Fehlersignale E0 bis EL-1 ihren ersten Wert annehmen bzw.
    • - das kombinierte Fehlersignal E einen zweiten Wert annimmt und damit anzeigt, dass mindestens ein Fehler von den Fehlererkennungsschaltungen 130 bis 13L-1 erkannt wurde wenn mindestens eines der an ihren Eingängen anliegenden Fehlersignale E0 bis EL-1 seinen zweiten Wert annimmt.
  • Wird für die Fehlersignale E0 bis EL-1 als erster Wert der binäre Wert 0 und als zweiter Wert der binäre Wert 1 verwendet, kann die Fehlererkennungschaltung 41 als ODER-Schaltung (auch bezeichnet als OR-Schaltung) mit L Eingängen und einem Ausgang realisiert sein. In diesem Beispiel ergibt sich als erster Wert des kombinierten Fehlersignals E der binäre Wert 0 und als dessen zweiter Wert der binäre Wert 1.
  • Es ist auch möglich, dass die Fehlererkennungsschaltung 41 an ihrem Ausgang ein kombiniertes Fehlersignal E ausgibt, das mehr als zwei unterschiedliche Werte annehmen kann. Beispielsweise könnte die Fehlererkennungssschaltung 41 derart eingerichtet sein, dass
    • - sie eine Anzahl der zweiten Werte der Fehlersignale E0 bis EL-1 bestimmt und als Fehlersignal E ausgibt, oder
    • - sie einen binären Wert 1 ausgibt, wenn mehr als eine vorgegebene Anzahl Sw der Fehlersignale E0 bis EL-1 den zweiten Wert annehmen und somit einen Fehler in den jeweils durch die Fehlererkennungsschaltung 41 überprüften Bytes der gelesenen Speicherzellenwerte W0 ' bis WL- 1 ' anzeigen, wobei die vorgegebene Anzahl Sw größer oder gleich 1 sein kann. Insbesondere kann als Fehlererkennungsschaltung 41 jede Schaltung verwendet werden, die in Abhängigkeit von den an ihren Eingängen anliegenden Fehlersignalen das kombinierte Fehlersignal E bereitstellt. Vorzugsweise sind die Fehlersignale an den Eingängen der Fehlererkennungsschaltung 41 als Fehlersignale von Fehlern in Bytes (d.h. Gruppen) von Speicherzellenwerten bestimmt. Wie bereits ausgeführt wurde, umfasst hierbei jedes Byte mindestens zwei Bits.
  • Fig.5a und Fig.5b: Transformationsschaltungen
  • 5a zeigt eine beispielhafte Umsetzung der in 2a gezeigten Transformationsschaltung 22. Wie bereits ausgeführt wurde, transformiert die Transformationsschaltung 22 die Bytes der Datenbits des Codeworts X = X 0 , X 1 , , X L 1
    Figure DE102018131613A1_0074
    in Bytes von Speicherzellenwerten W = W 0 , W 1 , , W L 1 .
    Figure DE102018131613A1_0075
  • In diesem Beispiel weisen die Bytes X0 bis XL-1 jeweils eine gleiche Anzahl µ Datenbits auf. Auch weisen beispielhaft die Bytes W0 bis WL-1 jeweils eine gleiche Anzahl v Speicherzellenwerte auf. Die Speicherzellenwerte sind beispielhaft binär.
  • Weiterhin wird beispielhaft für die Block-Fehlercodes CF0 bis CFL-1 der gleiche Block-Fehlercode CF verwendet, so dass jedes der Bytes X0 bis XL-1 jeweils durch eine funktional gleiche Transformation in die Bytes von Speicherzellenwerten transformiert werden kann. In diesem Sinn zeigt 5a funktional gleiche Transformationsschaltungen 510 bis 51L-1: Für jedes der Bytes X0 bis XL-1 werden die µ anliegenden Bits in je ein Byte W0 bis WL-1 mit jeweils v Speicherzellenwerten (hier beispielhaft binäre Speicherzellenwerte) transformiert.
  • 5b zeigt eine beispielhafte Umsetzung der in 2b gezeigten inversen Transformationsschaltung 25. Wie bereits ausgeführt wurde, transformiert die inverse Transformationsschaltung 25 die gelesenen Bytes der Speicherzellenwerte W ' = W 0 ' , W 1 ' , , W L 1 '
    Figure DE102018131613A1_0076
    in gelesene Bytes des Codeworts X ' = X 0 ' , X 1 , , X L 1 ' .
    Figure DE102018131613A1_0077
  • Sowohl die gelesenen Bytes der Speicherzellenwerte W' als auch die gelesenen Bytes des Codeworts X' können Fehler aufweisen. Diese Fehler werden beispielsweise dadurch erkannt, dass kein Codewort vorliegt.
  • Die inverse Transformationsschaltung 25 weist funktional gleiche inverse Transformationsschaltungen 520 bis 52L-1 auf. Für jedes der gelesenen (möglicherweise fehlerhaften) Bytes W0 ' bis WL-1 ' werden die v anliegenden Bits in je ein Byte X0 ' bis XL-1 ' der gelesenen Bytes mit jeweils µ Bits des Codeworts, das möglicherweise fehlerhaft ist, transformiert.
  • Beispiel: 3-aus-6-Code:
  • Als Beispiel sollen Bytes X0 bis XL-1 von Codewörtern mit je µ = 4 Bits und Bytes W0 bis WL-1 mit je v = 6 (binären) Speicherzellenwerten betrachtet werden. Als Block-Fehlercode CF wird eine Teilmenge von 16 6-Bit-Wörtern verwendet, wobei jedes dieser Wörter genau drei Einsen und genau drei Nullen aufweist.
  • Bei dem 3-aus-6-Code gibt es ( 3 6 ) = 20
    Figure DE102018131613A1_0078
  • Wörter mit je 6 Bits, in denen genau dreimal der Wert 1 und dreimal der Wert 0 vorkommt. Die Menge dieser 20 Wörter wird auch als 3-aus-6-Code bezeichnet.
  • Der in diesem Beispiel verwendete Block-Fehlercode CF ist eine Teilmenge mit nur 16 dieser 20 möglichen Codewörter.
  • Eine nachfolgend dargestellte Tabelle 1 beschreibt eine beispielhafte Transformation T der 16 möglichen Belegungen der 4 Bits der Bytes X0 bis XL-1 in die 16 der insgesamt 20 möglichen Codewörter der 6 Bit-Speicherzellen-Bytes W0 bis WL-1 , so dass sich die 16 Codewörter des Block-Fehlercodes CF ergeben. Jede der 16 Belegungen der vier Datenbits ist umkehrbar eindeutig einem der 16 Codewörter des Block-Fehlercodes CF zugeordnet. Ein Codewort des Block-Fehlercodes CF ist ein Codewort des 3-aus-6-Codes und bildet ein Byte von Speicherzellenwerten. Tabelle 1: Beispiel für eine Transformation T
    x1 x2 x3 x4 w1 w2 w3 w4 w5 w6
    0 0 0 0 1 1 1 0 0 0
    1 1 1 1 0 0 0 1 1 1
    0 0 0 1 1 1 0 1 0 0
    1 1 1 0 0 0 1 0 1 1
    0 0 1 0 1 1 0 0 1 0
    1 1 0 1 0 0 1 1 0 1
    0 0 1 1 1 1 0 1 0 0
    1 1 0 0 0 0 1 0 1 1
    0 1 0 0 1 0 1 0 1 0
    1 0 1 1 0 1 0 1 0 1
    0 1 0 1 1 0 1 0 1 0
    1 0 1 0 0 1 0 1 0 1
    0 1 1 0 1 0 1 0 0 1
    1 0 0 1 0 1 0 1 1 0
    0 1 1 1 1 0 0 1 1 0
    1 0 0 0 0 1 1 0 0 1
  • Die durch die Tabelle 1 beschriebene Transformation T hat die folgende Eigenschaft: Werden die Bits x1 bis x4 eines der Bytes X0 bis XL-1 in die Speicherzellenwerte W1 bis w6 eines der Bytes W0 bis WL-1 von Speicherzellenwerten transformiert, dann werden auch die invertierten Bits x 1 , ¯ x 2 , ¯ x 3 , ¯ x 4 ¯
    Figure DE102018131613A1_0079
    in die invertierten Speicherzellenwerte w 1 ¯ , w 2 ¯ , w 3 ¯ , w 4 ¯ , w 5 ¯ , w 6 ¯
    Figure DE102018131613A1_0080
    transformiert.
  • Es sei angemerkt, dass in diesem Beispiel jedes der aus dem Speicher gelesenen Bytes W0 ' bis WL-1 ' sechs möglicherweise fehlerhafte Bits w 1 '  bis w 6 '
    Figure DE102018131613A1_0081
    aufweist und dass jedes der transformierten möglicherweise fehlerhaften Bytes X0 ' bis XL-1 ' vier möglicherweise fehlerhafte Bits x 1 '  bis  x 4 '
    Figure DE102018131613A1_0082
    aufweist.
  • Eine nachfolgend dargestellte Tabelle 2 beschreibt eine mögliche inverse Transformation T-1 pro gelesenem Byte an (binären) Speicherzellen w 1 '  bis w 6 '
    Figure DE102018131613A1_0083
    in Bytes möglicherweise fehlerhafter Bits x 1 '  bis  x 4 ' .
    Figure DE102018131613A1_0084
    Hierbei sei angemerkt, dass die Tabelle 2 lediglich einen Ausschnitt mit 16 der insgesamt 64 möglichen Belegungen der Bits w 1 '  bis w 6 '
    Figure DE102018131613A1_0085
    zeigt. Alle in der Tabelle 2 gezeigten Belegungen der Bits w 1 '  bis w 6 '
    Figure DE102018131613A1_0086
    sind Codewörter. Die restlichen 64 - 16 = 48 (nicht dargestellten) Belegungen der Bits w 1 '  bis w 6 '
    Figure DE102018131613A1_0087
    sind keine Codewörter. Für diese 48 Belegungen sind die Bits x 1 '  bis  x 4 '
    Figure DE102018131613A1_0088
    jeweils 0. Tabelle 2: Inverse Transformation T-1, Ausschnitt
    w 1 '
    Figure DE102018131613A1_0089
    w 2 '
    Figure DE102018131613A1_0090
    w 3 '
    Figure DE102018131613A1_0091
    w 4 '
    Figure DE102018131613A1_0092
    w 5 '
    Figure DE102018131613A1_0093
    w 6 '
    Figure DE102018131613A1_0094
    x 1 '
    Figure DE102018131613A1_0095
    x 2 '
    Figure DE102018131613A1_0096
    x 3 '
    Figure DE102018131613A1_0097
    x 4 '
    Figure DE102018131613A1_0098
    1 1 1 0 0 0 0 0 0 0
    0 0 0 1 1 1 1 1 1 1
    1 1 0 1 0 0 0 0 0 1
    0 0 1 0 1 1 1 1 1 0
    1 1 0 0 1 0 0 0 1 0
    0 0 1 1 0 1 1 1 0 1
    1 1 0 0 0 1 0 0 1 1
    0 0 1 1 1 0 1 1 0 0
    1 0 1 1 0 0 0 1 0 0
    0 1 0 0 1 1 1 0 1 1
    1 0 1 0 1 0 0 1 0 1
    0 1 0 1 0 1 1 0 1 0
    1 0 1 0 0 1 0 1 1 0
    0 1 0 1 1 0 1 0 0 1
    1 0 0 1 1 0 0 1 1 1
    0 1 1 0 0 1 1 0 0 0
  • Für die nicht in der Tabelle 2 aufgeführten Werte der Speicherzellenwerte w 1 '    bis w 6 '
    Figure DE102018131613A1_0099
    können zugehörige Werte von Bits x 1 ' , x 2 ' , x 3 ' , x 4 '
    Figure DE102018131613A1_0100
    für die Synthese der inversen Transformationsschaltung T-1 beliebig vorgegeben werden. Es ist beispielsweise möglich, diese Werte als unbestimmte Werte (auch bezeichnet als „don't-care“-Werte) bei einer Optimierung durch ein Synthesetool festlegen zu lassen. Es ist beispielsweise auch möglich, diese Werte auf 0 zu setzen.
  • Fig.6: Fehlererkennungsschaltung für einen Block-Fehlercode
  • 6 zeigt eine beispielhafte Fehlererkennungsschaltung 61, für das Byte W1 ' von eventuell fehlerhaften 6 Speicherzellenwerten W 1 ' = w 1 ' , w 2 ' , w 3 ' , w 4 ' , w 5 ' , w 6 '
    Figure DE102018131613A1_0101
    gemäß dem obigen Beispiel. Hierbei ist der Block-Fehlercode CF ein 3-aus-6-Code mit 16 Codewörtern.
  • Am Eingang der Fehlererkennungsschaltung 61 liegen die Speicherzellenwerte W1 ' an. Die Fehlererkennungsschaltung 61 ist beispielhaft derart eingerichtet, dass sie, wenn an ihrem Eingang ein Codewort des Block-Fehlercodes CF anliegt, ein Fehlersignal E1 = 0 ausgibt, das anzeigt, dass kein Fehler vorliegt. Falls am Eingang der Fehlererkennungsschaltung 61 kein Codewort des Block-Fehlercodes CF anliegt, gibt sie ein Fehlersignal E1 = 1 aus, anhand dessen das Vorliegen eines Fehlers angezeigt wird.
  • Eine Tabelle 3 zeigt die 16 Belegungen der Speicherzellenwerte w 1 '  bis  w 6 ' ,
    Figure DE102018131613A1_0102
    für die das Fehlersignal E1 gleich 0 ist (Off-Set der Booleschen Funktion). Für alle anderen, nicht in der Tabelle 3 aufgeführten Belegungen der Speicherzellenwerte ist das Fehlersignal E1 gleich 1; dies entspricht einem On-Set der Booleschen Funktion (dieser On-Set ist nicht in der Tabelle 3 dargestellt). Tabelle 3: Fehlersignal E1 = 0 (Off-Set)
    w 1 '
    Figure DE102018131613A1_0103
    w 2 '
    Figure DE102018131613A1_0104
    w 3 '
    Figure DE102018131613A1_0105
    w 4 '
    Figure DE102018131613A1_0106
    w 5 '
    Figure DE102018131613A1_0107
    w 6 '
    Figure DE102018131613A1_0108
    E1
    1 1 1 0 0 0 0
    0 0 0 1 1 1 0
    1 1 0 1 0 0 0
    0 0 1 0 1 1 0
    1 1 0 0 1 0 0
    0 0 1 1 0 1 0
    1 1 0 0 0 1 0
    0 0 1 1 1 0 0
    1 0 1 1 0 0 0
    0 1 0 0 1 1 0
    1 0 1 0 1 0 0
    0 1 0 1 0 1 0
    Tabelle 3: Fehlersignal E1 = 0 (Off-Set), Fortsetzung
    w 1 '
    Figure DE102018131613A1_0109
    w 2 '
    Figure DE102018131613A1_0110
    w 3 '
    Figure DE102018131613A1_0111
    w 4 '
    Figure DE102018131613A1_0112
    w 5 '
    Figure DE102018131613A1_0113
    w 6 '
    Figure DE102018131613A1_0114
    E1
    1 0 1 0 0 1 0
    0 1 0 1 1 0 0
    1 0 0 1 1 0 0
    0 1 1 0 0 1 0
  • Entsprechend der Tabelle 3 zeigt die Fehlererkennungsschaltung 61 einen Fehler an,
    • - wenn eines der 16 Codewörter des Block-Fehlercodes CF in ein 6-Bit-Wort verfälscht wird, dass kein Codewort ist oder
    • - wenn eines der 16 Codewörter des Block-Fehlercodes CF in eines der vier 3-aus-6-Wörter verfälscht wird, das jeweils kein Codewort des Block-Fehlercodes ist.
  • Fig.7: Fehlererkennungsschaltung für 1-Bit-Fehler
  • 7 zeigt eine beispielhafte Fehlererkennungsschaltung 71, die alle ungeraden Bitfehler in den Bits des Bytes W1 ' erkennt. Die Fehlererkennungsschaltung 71 umfasst hierzu eine invertierte XOR-Schaltung, so dass für ein am Ausgang der Fehlererkennungsschaltung 71 anliegendes Fehlersignal E 1 *
    Figure DE102018131613A1_0115
    gilt: E 1 * = w 1 1 ' + w 2 1 ' + w 3 1 ' + w 4 1 ' + w 5 1 ' + w 6 1 ' ¯ .
    Figure DE102018131613A1_0116
    Hierbei bezeichnet „+“ die Addition modulo 2.
  • Für die in der Tabelle 3 gezeigten Belegungen der Speicherzellenwerte w 1 '  bis w 6 '
    Figure DE102018131613A1_0117
    und für eine ungerade Anzahl von Bitfehlern in diesen Speicherzellenwerten stimmen die Fehlersignale E1 und E 1 *
    Figure DE102018131613A1_0118
    überein. Für eine gerade Anzahl von Bitfehlern, die ein Codewort des 3-aus-6-Codes in eine Bitkombination verfälschen, die kein Codewort dieses 3-aus-6-Codes ist, gilt hingegen: E1 = 1 und E 1 * = 0.
    Figure DE102018131613A1_0119
    Die Fehlererkennungsschaltung 71 kann vorteilhaft angewendet werden, falls (fast) ausschließlich 1-Bit-Fehler auftreten.
  • Fig.8: Überprüfung, ob Korrektur möglich ist
  • 8 zeigt eine beispielhafte Schaltungsanordnung zur Überprüfung einer Fehlerkorrektur. Insbesondere kann hiermit geprüft werden, ob der Byte-Korrekturwertbildner 26 zur Bestimmung der Korrekturwerte e 0 X  bis e L 1 X
    Figure DE102018131613A1_0120
    korrekt funktioniert.
  • Hierzu weist die in 8 gezeigte Schaltungsanordnung eine Vielzahl von L NICHT-ODER-Schaltungen (auch bezeichnet als NOR-Schaltungen) 810 bis 81L-1, eine Vielzahl von UND-Schaltungen 820 bis 82L-1 und eine ODER-Schaltung 83 auf.
  • Nachfolgend wird eine UND-Verknüpfung auch mit dem Symbol „Λ“ abgekürzt. Entsprechend wird eine ODER-Verknüpfung mit dem Symbol „V“ abgekürzt.
  • Jeder Byte-Korrekturwert e 0 X  bis e L 1 X
    Figure DE102018131613A1_0121
    wird an einen Eingang einer zugehörigen NICHT-ODER-Schaltung 810 bis 81L-1 geführt. Der Ausgang dieser NICHT-ODER-Schaltungen 810 bis 81L-1 ist mit einem ersten Eingang einer zugehörigen UND-Schaltung 820 bis 82L-1 verbunden. Je eines der Fehlersignale E0 bis EL-1 liegt an dem zweiten Eingang der UND-Schaltungen 820 bis 82L-1 an. Die Ausgänge der UND-Schaltungen 820 bis 82L-1 sind mit den Eingängen der ODER-Schaltung 83 verbunden. Am Ausgang der ODER-Schaltung 83 wird ein kombiniertes Fehlersignal E bereitgestellt.
  • Bei den Fehlersignalen E0 ,E1 ,...,EL-1 handelt es sich um die Fehlersignale der Fehlererkennungsschaltungen 240 bis 24L-1 gemäß 2b.
  • Zeigt beispielsweise das Fehlersignal E0 mit einem Wert E0 = 1 an, dass die Datenbits des Bytes X0 ' kein Codewort des Block-Fehlercodes CF0 sind, dann muss für eine erfolgreiche Fehlerkorrektur das Byte X0 ' mit dem Byte-Korrekturwert e 0 X 0
    Figure DE102018131613A1_0122
    korrigiert werden. Eine erfolgreiche Korrektur kann nur dann erfolgen, wenn der Korrekturwertbildner 26 einen Byte-Korrekturwert e 0 X 0
    Figure DE102018131613A1_0123
    bereitstellt, so dass die XOR-Schaltung 270 den korrigierten Bytewert X c o r 0 = X 0 ' + e 0 X
    Figure DE102018131613A1_0124
    bereitstellt. Es gilt X 0 = X c o r 0
    Figure DE102018131613A1_0125
    dann, wenn der aufgetretene Fehler durch den Fehlercode C1 korrigierbar ist.
  • Gilt für das Fehlersignal E0 = 1 und für den Byte-Korrekturwert e 0 X 0,
    Figure DE102018131613A1_0126
    dann wird ein Fehler in X0 ' durch die Fehlererkennungsschaltung 240 erkannt und der Byte-Korrekturwertbildner 26 erzeugt für X0 ' das Korrektursignal e 0 X 0.
    Figure DE102018131613A1_0127
    In diesem Fall liefert die UND-Schaltung 820 an ihrem Ausgang den Wert 0.
  • Gilt für das Fehlersignal E0 = 1 und für den Byte-Korrekturwert e 0 X = 0,
    Figure DE102018131613A1_0128
    dann wird ein Fehler in X0 ' durch die Fehlererkennungsschaltung 240 erkannt und der Byte-Korrekturwertbildener 26 erzeugt für X0 ' das Korrektursignal e 0 X = 0,
    Figure DE102018131613A1_0129
    so dass das Byte X0 ', obwohl es fehlerhaft ist, nicht korrigiert wird. In diesem Fall wird der Fehler zwar erkannt, eine Korrektur ist jedoch nicht möglich. Die UND-Schaltung 820 liefert an ihrem Ausgang den Wert 1. Das kombinierte Fehlersignal E nimmt den Wert E = 1 an. Damit zeigt das kombinierte Fehlersignal mit einem Wert 1 an, dass ein Fehler in der Korrektur vorliegt bzw. eine Korrektur mindestens eines der Bytes X0 ' bis XL-1 ' nicht möglich ist. Eine mögliche Ursache ist, dass der Byte-Korrekturwertbildner 26 fehlerhaft ist und/oder dass ein Fehler vorliegt, der unter Verwendung des Fehlercodes C1 nicht korrigierbar ist.
  • Wird kein Fehler von der Fehlererkennungsschaltung 240 erkannt und ist das Fehlersignal E1 = 0 liegt auch am Ausgang der UND-Schaltung 820 der Wert 0 an.
  • Die vorstehenden Ausführungen gelten für die weiteren Fehlersignale E2 bis EL-1 bzw. die weiteren Byte-Korrekturwerte e 1 X  bis e L 1 X
    Figure DE102018131613A1_0130
    unter Bezugnahme auf die Schaltungen 811 bis 81L-1, 821 bis 82L-1 und 83 entsprechend.
  • Somit gibt die ODER-Schaltung 83 an ihrem Ausgang nur dann den Wert 0 für das kombinierte Fehlersignal E aus, wenn an allen seinen L Eingängen der Wert 0 anliegt. Liefert die ODER-Schaltung 83 an ihrem Ausgang den Wert 1, dann bedeutet dies, dass mindestens eines der Bytes X0 ' bis X-1L' durch eine der Fehlererkennungsschaltungen 240 bis 24L-1 als fehlerhaft erkannt wurde und nicht durch den Byte-Korrekturwertbildner 26 korrigierbar ist. Damit kann beispielsweise die Funktionsfähigkeit des Byte-Korrekturwertbildners 26 im laufenden Betrieb geprüft werden.
  • Diese Ausführungen lassen sind analog auf den Byte-Korrekturwertbildner 37 anwenden.
  • Reed-Solomon-Code
  • Nachfolgend soll als Beispiel ein Reed-Solomon-Code verwendet werden.
  • Ein 1-Bytefehler-korrigierender Reed-Solomon-Code kann beispielsweise gemäß [1] durch eine H-Matrix H B y t e = ( α 0   α 0   α 0     α 0 α 0   α 1   α 2     α n 1 ) = ( H 1 H 2 )
    Figure DE102018131613A1_0131
    mit n = 2m - 1 beschrieben werden, wobei H 1 = ( α 0 α 0 α 0   α 0 )
    Figure DE102018131613A1_0132
    und H 2 = ( α 0 α 1 α 2   α n 1 )
    Figure DE102018131613A1_0133
    gelten. Dabei sind αi Elemente des Galoisfelds GF(2r), beispielsweise in der Exponentialdarstellung. α ist ein erzeugendes Element des Galoisfelds und ist hier als ein primitives Element des Galoisfelds GF(2r) gewählt. In Gleichung (5) ist das 1-Element des Galoisfelds als α0 bezeichnet. Das 1-Element des Galoisfelds kann auch mit 1 bezeichnet werden.
  • Der durch die H-Matrix gemäß Gleichung (5) beschriebene Reed-Solomon-Code kann einen 1-Bytefehler an einer unbekannten Byte-Position oder einen 2-Bytefehler in zwei bekannten fehlerhaften Byte-Positionen oder zwei Gruppenfehler korrigieren.
  • Die Exponenten von α sind modulo 2r - 1 zu interpretieren, und ein Exponent i kann die Werte 0, 1, ... , 2r - 2 annehmen.
  • In einem Ausführungsbeispiel sei r = 4, so dass das Galoisfeld aus 24 = 16 Elementen besteht. Die Exponenten von αi sind modulo 15 zu interpretieren und die H-Matrix gemäß Gleichung (5) weist 24 - 1 = 15 Spalten auf. Eine Spalte entspricht jeweils einem 4-Bit-Byte. Die Datenbits eines Codeworts x = x1 ,...,xk mit k = 60 des Fehlercodes C1 bilden 15 Bytes X0 ,X1 ,... ,X14 mit je 4 Bits. Es gilt somit: x 1 , , x k = X 0 , X 1 , , X 14
    Figure DE102018131613A1_0134
    mit X 0 = x 1 , x 2 , x 3 , x 4 X 1 = x 5 , x 6 , x 7 , x 8 X 14 = x 57 , x 58 , x 59 , x 60
    Figure DE102018131613A1_0135
  • Im fehlerfreien Fall handelt es sich bei x = X0,... ,X14 um ein Codewort des Reed-Solomon-Codes, so dass für ein Fehlersyndrom s mit s = [s1,s2] T s 1 = H 1 x = α 0 X 0 + α 0 X 1 + + α 0 X 14 = X 0 + X 1 + + X 14 = 0
    Figure DE102018131613A1_0136
    s 2 = H 2 x = α 0 X 0 + α 1 X 1 + + α 14 X 14 = 0
    Figure DE102018131613A1_0137
    gilt, wobei s1 als erstes Teilsyndrom und s2 als zweites Teilsyndrom des Fehlersyndroms s bezeichnet wird.
  • Wird ein Vektor von rechts mit einer Matrix multipliziert, so ist er als Spaltenvektor zu verstehen. Soll für einen Vektor besonders hervorgehoben werden, dass es sich um einen Spaltenvektor handelt, so kann dieser Vektor als transponierter Vektor bezeichnet werden. Wird ein Vektor von links mit einer Matrix multipliziert, so ist er als Zeilenvektor zu verstehen.
  • Die Bytes X0 bis X14 können als Elemente des Galoisfelds GF(24) in ihrer Vektordarstellung als 4-Bit-Vektoren beschrieben sein. Zur Berechnung der Teilsyndrome s1 und s2 nach Gleichung (6) und Gleichung (7) können diese Bytes in ihrer Polynomdarstellung oder in ihrer Exponentialdarstellung verwendet werden.
  • Verschiedene Darstellungen von Elementen des Galoisfelds GF(24) und ihre Verwendung zur Multiplikation und Addition in einem Galoisfeld sind beispielsweise in [2] beschrieben.
  • Beispielsweise kann das Codewort x mit einem Fehler e 0
    Figure DE102018131613A1_0138
    gestört sein gemäß x + e = X 0 + e 0 , X 1 + e 1 , , X 14 + e 14
    Figure DE102018131613A1_0139
    mit e 0 = e 1 , e 2 , e 3 , e 4 e 1 = e 5 , e 6 , e 7 , e 8 e 14 = e 57 , e 58 , e 59 , e 60.
    Figure DE102018131613A1_0140
  • Aufgrund von H1 · xT = 0 und H2 · xT = 0 ergibt sich damit aus Gleichung (6) und Gleichung (7): s 1 = H 1 ( x + e ) = H 1 e = α 0 e 0 + α 0 e 14 = e 0 + + e 14 ,
    Figure DE102018131613A1_0141
    s 2 = H 2 ( x + e ) = H 2 e = α 0 e 0 + α 1 e 1 + + α 14 e 14 .
    Figure DE102018131613A1_0142
  • Dabei sollen die 4-Bit-Bytes e0 ,..., e14 als Byte-Korrekturwerte der Byte-Positionen 0 bis 14 bezeichnet werden.
  • Für einen 1-Bytefehler, bei dem 1 Bit, 2 Bits, 3 Bits oder 4 Bits eines Bytes an der Byte-Position i fehlerhaft sind, gilt: s 1 = e i ,
    Figure DE102018131613A1_0143
    s 2 = α i e i .
    Figure DE102018131613A1_0144
  • Entsprechend gilt für einen 2-Bytefehler in den Byte-Positionen i und j: s 1 = e i + e j ,
    Figure DE102018131613A1_0145
    s 2 = α i e i + α j e j .
    Figure DE102018131613A1_0146
  • Im Falle eines 1-Bytefehlers lassen sich die fehlerhafte Byte-Position i und der Byte-Korrekurwert ei aus den beiden Teilsyndromen entsprechend der Gleichungen (10) und (11) bestimmen.
  • Der Byte-Korrektkurwert ei ist gleich der ersten Syndromkomponente s1 und die fehlerhafte Byte-Position i in ihrer Exponentialdarstellung ai kann beispielsweise als eine Lösung y der Gleichung s 1 y + s 2 = 0
    Figure DE102018131613A1_0147
    bestimmt sein. Aus den beiden Gleichungen (10) und (11) können die beiden Unbekannten ai und ei bestimmt werden.
  • Im Falle eines 2-Bytefehlers ist es nicht möglich, die beiden Byte-Korrekturwerte ei und ej und die beiden fehlerhaften Byte-Positionen i und j, etwa in ihrer Exponentialdarstellung ai und aj aus den beiden Gleichungen (12) und (13) zu bestimmen, da es vier Unbekannte für lediglich zwei Gleichungen gibt.
  • Es ist aber möglich, bei bekannten fehlerhaften Byte-Positionen i und j und der somit bekannten Exponentialdarstellungen ai und aj die entsprechenden Byte-Korrekturwerte ei und ej unter Verwendung der beiden Gleichungen (12) und (13) zu bestimmen. Ist die fehlerhafte Byte-Position bekannt und ist weiter der entsprechende Byte-Korrekturwert zu bestimmen, entspricht dies einem Gruppenfehler.
  • Beispielsweise können die fehlerhaften Byte-Positionen durch die Block-Fehlersignale der Fehlererkennungsschaltungen 140 bis 14L-1 aus 1 erkannt werden. Mit den bekannten fehlerhaften Byte-Positionen, etwa zweier fehlerhafter Byte-Positionen i und j, sind dann die Byte-Korrekturwerte ei und ei bereits durch die beiden Gleichungen (12) und (13) bestimmbar. Die Fehlersyndrome s1 und s2 weisen in diesem Beispiel jeweils nur 4 Bit auf; es gibt also 2 Bytes mit insgesamt 8 Bits.
  • Für einen 2-Bytefehler an den Byte-Positionen i und j oder zwei Gruppenfehler in den Byte-Positionen i und j gilt für die Byte-Korrekturwerte ei und ej: e i = s 1 + s 2 + α i s 1 α i + α j = s 1 + s 2 ( α i + α j ) 1 + α i s 1 ( α i + α j ) 1
    Figure DE102018131613A1_0148
    e j = s 1 + s 2 + α j s 1 α i + α j = s 1 + s 2 ( α i + α j ) 1 + α i s 1 ( α i + α j ) 1 .
    Figure DE102018131613A1_0149
  • Die Gleichung (14) kann wie folgt hergeleitet werden: s 1 = e i + e j ;
    Figure DE102018131613A1_0150
    s 2 = α i e i + α j e j ;
    Figure DE102018131613A1_0151
    e j = s 1 + e i ;
    Figure DE102018131613A1_0152
    s 2 = α i e i + α j ( s 1 + e i ) = α i e i + α j e i + α j s 1 = e i ( α i + α j ) + α j s 1 ;
    Figure DE102018131613A1_0153
    e i ( α i + α j ) = s 2 + α j s 1 ;
    Figure DE102018131613A1_0154
    e i = s 2 + α j s 1 α i + α j = s 2 + α j s 1 + α i s 1 + α i s 1 = 0 α i + α j = = s 2 + s 1 ( α i + α j ) + α i s 1 α i + α j = = s 1 + s 2 + α i s 1 α i + α j ;
    Figure DE102018131613A1_0155
  • Analog hierzu ergibt sich Formel (15).
  • Für einen 1-Bytefehler in der Byte-Position i kann der Byte-Korrekturwert ei durch e i = s 1 + s 2 + α i s 1 α i = s 1 + s 2 ( α i ) 1 + α i s 1 ( α i ) 1 = s 2 α i
    Figure DE102018131613A1_0156
    bestimmt werden. Dies folgt unmittelbar aus s1 = ei und s2 = ai · ei.
  • Eine Summe Σ mit Σ = E 0 α 0 + E 1 α 1 + + E 14 α 14
    Figure DE102018131613A1_0157
    ergibt für einen 1-Bytefehler in der Byte-Position i Σ = α i
    Figure DE102018131613A1_0158
    und für einen 2-Bytefehler in den Byte-Positionen i und j Σ = α i + α j .
    Figure DE102018131613A1_0159
  • Unter Verwendung des inversen Wertes Σ-1 der Summe Σ gilt für den Byte-Korrekturwert ei in der Byte-Position i sowohl für einen 1-Bytefehler in der Byte-Position i als auch für einen 2-Bytefehler in den Byte-Positionen i und j e i = s 1 + s 2 Σ 1 + α i s 1 Σ 1 ,
    Figure DE102018131613A1_0160
    so dass im Falle eines Bytefehlers in der Byte-Position i auf Grund eines 1-Bytefehlers in dieser Byte-Position i oder eines 2-Bytefehlers in dieser Byte-Positon i und einer anderen Byte-Position, der Byte-Korrekturwert ei nach Gleichung (17) durch die Teilsyndrome s1 und s2 , den Wert von Σ-1 und die Fehlerposition i in ihrer Exponentialdarstellung αi bestimmt ist.
  • Drei Gruppenfehler
  • Für einen Reed-Solomon-Code zur Korrektur von 3 Bytefehlern, für die die fehlerhaften drei Byte-Positionen bekannt sind, kann eine H-Matrix H B y t e = ( α 0 α 0 α 0 α 0 α 0 α 1 α 2 α n 1 α 0 α 02 α 4 α 2 ( n 1 ) )
    Figure DE102018131613A1_0161
    mit n = 2m - 1 genutzt werden, wie sie beispielsweise in [Fujiwara, E.: „Code Design for Dependable Systems“, Wiley, 2006, Seite 65] einschließlich einer allgemeinen Form für eine H-Matrix eines Reed-Solomon-Codes dargestellt ist.
  • Werden Spalten in der H-Matrix gemäß Gleichung (18) gestrichen, so kann man von einem verkürzten Code sprechen. Um die Länge des verwendeten Codes an die erforderliche Wortbreite anzupassen, ist es möglich, derart verkürzte Codes zu verwenden.
  • Das in [1] mit 1 bezeichnete 1-Element des Galoisfelds ist in der Gleichung (18) mit α0 bezeichnet.
  • Bytefehler, für die die fehlerhaften Byte-Positionen bekannt sind, können, wie schon ausgeführt wurde, als Gruppenfehler bezeichnet werden.
  • Im Falle von 3 Gruppenfehlern, d.h. Bytefehlern an den fehlerhaften Byte-Positionen i, j und k mit den Byte-Korrektkurwerten ei , ej und ek , gilt dann: s 1 = e i + e j + e k ,
    Figure DE102018131613A1_0162
    s 2 = α i e i + α j e j + α k e k ,
    Figure DE102018131613A1_0163
    s 3 = α 2 i e i + α 2 j e j + α 2 k e k .
    Figure DE102018131613A1_0164
  • Durch Auflösung der Gleichungen (19) bis (21) nach ei, ej und ek ergibt sich: e i = s 3 + α j α k s 1 + ( α j + α k ) s 2 ( α j + α i ) ( α k + α i ) ,
    Figure DE102018131613A1_0165
    e j = s 3 + α i α k s 1 + ( α i + α k ) s 2 ( α i + α j ) ( α k + α j ) ,
    Figure DE102018131613A1_0166
    e k = s 3 + α i α j s 1 + ( α i + α j ) s 2 ( α i + α k ) ( α j + α k ) .
    Figure DE102018131613A1_0167
  • Die Gleichung (24) kann wie folgt hergeleitet werden:
  • Aus Gleichung (19) folgt für ei e i = s 1 + e j + e k .
    Figure DE102018131613A1_0168
  • Die Gleichung (25) wird in die Gleichung (20) eingesetzt, woraus folgt: s 2 = α i ( s 1 + e j + e k ) + α j e j + α k e k , s 2 = α i s 1 + α i e j + α i e k + α j e j + α k e k , e j ( α i + α j ) = s 2 + α i s 1 + α i e k + α k e k .
    Figure DE102018131613A1_0169
  • Entsprechend wird die Gleichung (25) in die Gleichung (21) eingesetzt, so dass gilt: s 3 = α 2 i ( s 1 + e j + e k ) + α 2 j e j + α 2 k e k , s 3 = α 2 i s 1 + α 2 i e j + α 2 i e k + α 2 j e j + α 2 k e k , e j ( α 2 i + α 2 j ) = s 3 + α 2 i s 1 + α 2 i e k + α 2 k e k .
    Figure DE102018131613A1_0170
    Nun kann die Gleichung (27) durch die Gleichung (26) geteilt werden, so dass mit ( α i + α j ) 2 = ( α i + α j ) ( α i + α j ) = α 2 i + α i α j + α i α j + α 2 j = α 2 i + α 2 j
    Figure DE102018131613A1_0171
    folgt: e j ( α 2 i + α 2 j ) e j ( α i + α j ) = ( α i + α j ) 2 α i + α j = = α i + α j = s 3 + α 2 i s 1 + α 2 i e k + α 2 k e k s 2 + α i s 1 + α i e k + α k + e k .
    Figure DE102018131613A1_0172
    Mit ( α i α k + α i α j + α j α k + α 2 k ) = ( α i + α k ) ( α j + α k )
    Figure DE102018131613A1_0173
    ergibt sich durch Ausmultiplizieren, Zusammenfassen und Auflösen nach ek: α i s 2 + α 2 i s 1 + α 2 i e k + α i α k e k + + α j s 2 + α i α j s 1 + α i α j e k + α j α k e k + + s 3 + α 2 i s 1 + α 2 i e k + α 2 k e k = 0,
    Figure DE102018131613A1_0174
    e k ( α i α k + α i α j + α j α k + α 2 k ) = = s 3 + α j s 2 + α i s 2 + α i α j s 1 ,
    Figure DE102018131613A1_0175
    e k = s 3 + ( α i + α j ) s 2 + α i α j s 1 ( α i + α k ) ( α j + α k ) .
    Figure DE102018131613A1_0176
  • Dies entspricht der Gleichung (24). Die anderen beiden Gleichungen (22) und (23) können entsprechend hergeleitet werden.
  • Die Summe Σ mit Σ = E 0 α 0 + E 1 α 1 + + E 14 α 14
    Figure DE102018131613A1_0177
    ergibt für einen 3-Bytefehler in den Byte-Positionen i, j, k: Σ = α i + α j + α k .
    Figure DE102018131613A1_0178
  • Im Falle eines Bytefehlers in drei Byte-Positionen i, j und k kann auch das Produkt Π der fehlerhaften Byte-Positionen in ihrer Exponentialdarstellung verwendet werden: Π = α i α j α k .
    Figure DE102018131613A1_0179
  • Nachfolgend wird der Fall betrachtet, dass die drei Byte-Positionen i, j, k mit ihrer Exponentialdarstellung αi, αj, αk fehlerhaft sind.
  • Aus der Summe Σ und der fehlerhaften Byte-Position k in ihrer Exponentialdarstellung αk ist die Summe αi + αj für die beiden anderen fehlerhaften Byte-Positionen i und j bestimmbar gemäß α i + α j = Σ + α k .
    Figure DE102018131613A1_0180
  • Aus der Summe Σ und der fehlerhaften Byte-Position j in ihrer Exponentialdarstellung αj ist die Summe αi + αk für die beiden anderen fehlerhaften Byte-Positionen i und k bestimmbar gemäß α i + α k = Σ + α j .
    Figure DE102018131613A1_0181
  • Aus der Summe Σ und der fehlerhaften Byte-Position i in ihrer Exponentialdarstellung αi ist die Summe αj + αk für die beiden anderen fehlerhaften Byte-Positionen j und k bestimmbar gemäß α j + α k = Σ + α i .
    Figure DE102018131613A1_0182
  • Aus dem Produkt Π und der fehlerhaften Byte-Position k in ihrer Exponentialdarstellung αk ist das Produkt αi · αj für die beiden anderen fehlerhaften Byte-Positionen i und j bestimmbar gemäß α i α j = Π α k .
    Figure DE102018131613A1_0183
  • Aus dem Produkt Π und der fehlerhaften Byte-Position j in ihrer Exponentialdarstellung αj ist das Produkt αi · αk für die beiden anderen fehlerhaften Byte-Positionen i und j bestimmbar gemäß α i α k = Π α j .
    Figure DE102018131613A1_0184
  • Aus dem Produkt Π und der fehlerhaften Byte-Position i in ihrer Exponentialdarstellung αi ist dann das Produkt αj · αk für die beiden anderen fehlerhaften Byte-Positionen j und k bestimmbar gemäß α j α k = Π α i .
    Figure DE102018131613A1_0185
  • Beispielhaft wird die Darstellung des Byte-Korrekturwertes ek in der fehlerhaften Byte-Position k nach Gleichung (24) e k = s 3 + α i α j s 1 + ( α i + α j ) s 2 ( α i + α k ) ( α j + α k ) ,
    Figure DE102018131613A1_0186
    betrachtet. Es gilt für den Nenner von Gleichung (24) ( α i + α k ) ( α j + α k ) = ( α i + α j ) α k + α i α j + α 2 k = ( Σ+ α k ) α k + Π α k + α 2 k = Σ α k + Π α k
    Figure DE102018131613A1_0187
    und damit für den Byte-Korrekturwert ek e k = s 3 + Π α k s 1 + ( Σ+ α k ) s 2 Σ α k + Π α k .
    Figure DE102018131613A1_0188
  • Nach Gleichung (36) ist somit möglich, den Byte-Korrekturwert ek für das k-te Byte durch die Syndromkomponenten s1 , s2 , s3 , die Werte von Σ und Π und durch die zu bestimmende Bytefehler-Position k zu bestimmen. Die fehlerhaften Byte-Positionen i und j sind für die Bestimmung des Byte-Korrekturwertes ek für das k-te Byte nicht erforderlich.
  • Damit ist es möglich, mittels beispielsweise zentral bestimmter und bereitgestellter Werte der Syndromkomponenten s1 , s2 , s3 und der Werte Σ und Π lokal für jede mögliche Bytefehler-Position k einen entsprechenden Byte-Korrekturwert zu bestimmen und auf Grund des Wertes des entsprechenden Bytefehler-Positionssignals zu bestimmen, ob der so bestimmte Byte-Korrekturwert ek tatsächlich zur Fehlerkorrektur verwendet werden soll. Das Bytefehler-Positionssignal eines Bytes (z.B. einer Gruppe von Bits) zeigt dabei an, ob für dieses Byte ein Gruppenfehler vorliegt (oder nicht).
  • Korrektur eines Gruppenfehlers bei drei Gruppenfehlern
  • 9a zeigt eine beispielhafte Schaltungsanordnung zur Bestimmung eines Byte-Korrekturwertes ek zur Korrektur eines fehlerhaften k-ten Bytes. Hiermit wird ein Gruppenfehler korrigiert bei insgesamt drei vorliegenden Gruppenfehlern.
  • Beispielhaft sind das i-te, das- j-te und das k-te Byte fehlerhaft. Die Fehlersignale Ei = Ej = Ek = 1 zeigen demnach an, dass drei Gruppenfehler vorliegen. In diesem Beispiel sind die übrigen Fehlersignale gleich 0, also liegen keine weiteren Gruppenfehler vor. Als Beispiel wird das Galoisfeld GF(24) betrachtet.
  • Die in 9a gezeigte Anordnung umfasst
    • - vier Konstantenmultiplizierer 91, 94, 97 und 99 mit jeweils einem ersten 4-Bit breiten Eingang, einem zweiten 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang,
    • - drei XOR-Schaltungen 92, 95, 98 mit jeweils einem ersten 4-Bit breiten Eingang, einem zweiten 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang,
    • - einen Invertierer 96 im Galoisfeld GF(24) mit einem 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang,
    • - einen Galoisfeld-Multiplizierer 93 mit einem ersten 4-Bit breiten Eingang, einem zweiten 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang und
    • - fünf jeweils 4-Bit breite Eingänge 910, 911, 912, 913, 914, an denen die Werte s2 , Π, Π · s1 , Σ, Σ · s2 anliegen.
  • Der Eingang 912 ist mit dem ersten Eingang des Konstantenmultiplizierers 91 verbunden, an dessen zweitem Eingang der Wert α-k anliegt und dessen Ausgang an den ersten Eingang der XOR-Schaltung 92 geführt ist.
  • Der Eingang 910 ist mit dem ersten Eingang des Konstantenmultiplizierers 94 verbunden, an dessen zweitem Eingang der Wert αk anliegt und dessen Ausgang mit dem ersten Eingang der XOR-Schaltung 95 verbunden ist.
  • Der Eingang 914 ist mit dem zweiten Eingang der XOR-Schaltung 95 verbunden, deren Ausgang mit dem zweiten Eingang der XOR-Schaltung 92 verbunden ist. Der Ausgang der XOR-Schaltung 92 ist mit dem ersten Eingang des Galoisfeld-Multiplizierers 93 verbunden.
  • Der Eingang 913 ist mit dem ersten Eingang des Konstantenmultiplizierers 97 verbunden, an dessen zweitem Eingang der Wert αk anliegt und dessen Ausgang mit dem ersten Eingang der XOR-Schaltung 98 verbunden ist.
  • Der Eingang 911 ist mit dem ersten Eingang des Konstantenmultiplizierers 99 verbunden, an dessen zweitem Eingang der Wert α-k anliegt und dessen Ausgang mit dem zweiten Eingang der XOR-Schaltung 98 verbunden ist. Der Ausgang der XOR-Schaltung 98 ist mit dem Eingang des Invertierers 96 verbunden.
  • Der Ausgang des Invertierers 96 ist mit dem zweiten Eingang des Galoisfeld-Multiplizierers 93 verbunden, dessen Ausgang den Byte-Korrekturwert ek bereitstellt.
  • Die an den Schaltungseingängen 910, 911, 912, 913 und 914 anliegenden Werte s2 , Π, Π·s1, Σ, Σ·s2 können für die Bildung unterschiedlicher Byte-Korrekturwerte e0 , e1 , ... , ek ,... verwendet werden. Es kann somit effizient sein, diese nur einmal zu bestimmen.
  • 9b zeigt eine beispielhafte Schaltungsanordnung zur Bildung des Produkts Π= α i α j α k = α ( i + j + k )  mod 15
    Figure DE102018131613A1_0189
    für den Fall, dass ein Bytefehler in den i-ten, j-ten und k-ten Bytes durch die Fehlersignale Ei = Ej = Ek = 1 angezeigt wird. Es liegt also beispielhaft der gleiche Fehlerfall wie im Beispiel zu obiger 9a vor.
  • Die in 9b gezeigte Anordnung umfasst
    • - eine Teilschaltung 915 mit einem 8-Bit breiten Eingang zur Eingabe der Fehlersignale E0 bis E7 und einen 4-Bit breiten Ausgang zur Ausgabe eines 4-Bit breiten Signals ESu0,7 ,
    • - eine Teilschaltung 916 mit einem 7-Bit breiten Eingang zur Eingabe der Fehlersignale E8 ,E9 ,...,E14 und einen 4-Bit breiten Ausgang zur Ausgabe eines 4-Bit breiten Signals ESu8,14 ,
    • - einen Addierer 917 mit einem ersten 4-Bit breiten Eingang, einem zweiten 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang, an dem ein Wert [ E   S u 0,7 + E   S u 8,14 ] mod 15
      Figure DE102018131613A1_0190
      bereitgestellt wird, und
    • - eine kombinatorische Schaltung 918 mit einem 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang zur Ausgabe des Werts Π = αi · αj · αk.
  • Der Ausgang der Teilschaltung 915 ist mit dem ersten Eingang des Addierers 917 verbunden. Der Ausgang der Teilschaltung 916 ist mit dem zweiten Eingang des Addierers 917 verbunden. Der Ausgang des Addierers 917 ist mit dem Eingang der kombinatorischen Schaltung 918 verbunden.
  • Der Addierer 917 führt eine Addition modulo 15 aus. Er kann beispielsweise als 4-Bit Addierer so implementiert sein, dass das auslaufende Carry-Bit der vierten Addierstufe in das einlaufende Carry-Bit der ersten Addierstufe geführt ist. Der Addierer 917 kann als ein sogenannter Carry-End-Around-Addierer ausgeführt sein.
  • Die erste Teilschaltung 915 ist derart eingerichtet, dass sie bei Eingabe der Fehlersignale E0 bis E7 das Signal E   S u 0,7 = [ 0 E 0 + 1 E 1 + 2 E 2 + + 7 E 7 ]  mod 15
    Figure DE102018131613A1_0191
    an ihrem Ausgang bereitstellt.
  • Durch die Gleichung (37) ist jedem binären 8-Tupel E0 ,E1,...,E7 ein 4-Bit Wert bzw. ein 4-Tupel ESu0,7 zugeordnet, wobei diese Zuordnung als Tabelle darstellbar ist und als kombinatorische Schaltung beispielsweise unter Verwendung eines Synthesetools erstellt werden kann.
  • Die zweite Teilschaltung 916 ist derart eingerichtet, dass sie bei Eingabe der Fehlersignale E8 bis E14 an ihrem Ausgang E   S u 8,14 = [ 8 E 8 + 9 E 9 + 14 E 14 ]  mod 15
    Figure DE102018131613A1_0192
    ausgibt.
  • Durch die Gleichung (38) ist jedem binären 7-Tupel E8 , E9 ,..., E14 ein 4-Bit Wert bzw. 4-Tupel ESu8,14 zugeordnet, wobei diese Zuordnung als Tabelle darstellbar ist und als kombinatorische Schaltung beipielsweise unter Verwendung eines Synthesetools erstellt werden kann.
  • Der Addierer 917 stellt an seinem Ausgang den Wert [ E   S u 0,7 + E   S u 8,14 ] mod 15 = [ 0 E 0 + 1 E 1 + 2 E 2 + + 14 E 14 ] mod 15
    Figure DE102018131613A1_0193
    bereit. Wenn für die Fehlersignale Ei = Ej = Ek = 1 und El = 0 für l ≠ i, j, k gilt, liegt am Ausgang des Addierers 917 der Wert [ i + j + k ] mod 15
    Figure DE102018131613A1_0194
    an, der dem Exponenten von α i α j α k = α [ i + j + k ]  mod 15 .
    Figure DE102018131613A1_0195
    entspricht.
  • Die kombinatorische Schaltung 918 ist so ausgestaltet, dass sie dem an ihrem Eingang anliegenden Wert [ESu0,7 + ESu8,14] mod 15 das Element α [ E   S u 0,7 + E   S u 8,14 ] mod 15 = α [ i + j + k ] mod 15 = α i α j α k
    Figure DE102018131613A1_0196
    in der Exponentialdarstellung zuordnet, so dass an ihrem Ausgang der Wert Π= α i α j α k
    Figure DE102018131613A1_0197
    bereitgestellt wird.
  • Fig. 10: Korrektur von einem Gruppenfehler oder zwei Gruppenfehlern
  • 10 zeigt eine beispielhafte Schaltungsanordnung, die den Byte-Korrekturwert für ein beliebiges, eventuell fehlerhaftes l-tes Byte bestimmt unter der Voraussetzung, dass eine fehlerhafte Byte-Position oder zwei fehlerhafte Byte-Positionen bekannt ist/sind und damit ein Gruppenfehler oder zwei Gruppenfehler aufgetreten ist/sind. Die fehlerhaften mindestens eine Byte-Position ist hierbei durch die Werte der Fehlersignale bekannt.
  • Für jedes zu korrigierende Byte wird der Byte-Korrekturwert unter Verwendung der beiden Werte s 1 + s 2 Σ 1 ,
    Figure DE102018131613A1_0198
    s 1 Σ 1
    Figure DE102018131613A1_0199
    ermittelt, die jeweils nur einmal (z.B. zentral) bestimmt werden müssen und zur Korrektur aller Bytes verwendet werden können. Die Bildung dieser Werte erfordert einen verhältnismäßig großen Hardwareaufwand in Form eines Galoisfeld-Multiplizierers. Vorteilhaft können insgesamt nur zwei Galoisfeld-Multiplikatoren für alle Byte-Korrekturen in den verschiedenen Byte-Positionen eingesetzt werden.
  • Der für die unterschiedlichen Byte-Positionen unterschiedliche Byte-Korrekturwert ergibt sich lediglich aus der Verwendung eines der jeweiligen Byte-Position entsprechenden Konstantenmultiplizierers, der mit geringerem Hardwareaufwand realisierbar ist als der Galoisfeld-Multiplizierer (für das l-te Byte wird eine Multiplikation mit αl anhand des Konstantenmultiplizierers 102 durchgeführt).
  • Auch ist es ein Vorteil, dass die gleiche Schaltung sowohl für einen 1-Bytefehler mit bekannter Bytefehler-Position als auch für 2-Bytefehler mit bekannten Bytefehler-Positionen genutzt werden kann. Es werden somit ein oder zwei Gruppenfehler korrigiert. Wie bereits ausgeführt wurde, ist ein Gruppenfehler ein Bytefehler mit bekannter Byte-Position und zu bestimmendem Korrekturwert (also der Korrektur der Bits innerhalb der fehlerhaften Byte-Position).
  • Im Gegensatz zu 10 benötigt die Korrektur von 3 Gruppenfehlern gemäß 9a in jeder zu korrigierenden Byte-Position einen Galoisfeld-Multiplizierer 93.
  • 10 zeigt eine beispielhafte Implementierung basierend auf der Gleichung (17) zum Bestimmen des Byte-Korrekturwerts el zur Korrektur eines eventuell fehlerhaften l-ten Datenbytes Xl '. In dem vorliegenden Beispiel umfasst ein Datenbyte vier Bits und das Galoisfeld ist GF(24). 10 umfasst einen Byte-Korrekturwertbildner 101 mit einem Konstantenmultiplizierer 102, einer XOR-Schaltung 103 und einer UND-Schaltung 104. Weiterhin ist in 10 eine XOR-Schaltung 105 gezeigt.
  • An einer Eingangsleitung 106 liegt das 4-Bit breite Signal s1 + s2 · Σ-1 an. Die Eingangsleitung 106 ist mit einem ersten 4-Bit breiten Eingang der XOR-Schaltung 103 verbunden.
  • An einer Eingangsleitung 107 liegt das 4-Bit breite Signal s1 · Σ-1 an. Die Eingangsleitung 107 ist mit einem ersten Eingang des Konstantenmultiplizierers 102 verbunden. An dem zweiten Eingang des Konstantenmultiplizierers 102 liegt die Konstante αl an.
  • An dem 4-Bit breiten Ausgang des Konstantenmultiplizierers 102 wird somit der Wert α l s 1 Σ 1
    Figure DE102018131613A1_0200
    bereitgestellt. Der Ausgang des Konstantenmultiplizierers 102 ist mit dem zweiten Eingang der XOR-Schaltung 103 verbunden. An dem 4-Bit breiten Ausgang der XOR-Schaltung 103 wird das Signal s 1 + s 2 Σ 1 + α l s 1 Σ 1
    Figure DE102018131613A1_0201
    bereitgestellt.
  • Der Ausgang der XOR-Schaltung 103 ist mit dem ersten 4-Bit breiten Eingang der UND-Schaltung 104 verbunden. An dem zweiten Eingang der UND-Schaltung 104 liegt das Fehlersignal El an. An dem 4-Bit breiten Ausgang der UND-Schaltung 104 wird der Byte-Korrekturwert el zur Korrektur des eventuell fehlerhaften l-ten Bytes Xl ' bereitgestellt, wobei gilt e l = E l [ s 1 + s 2 Σ 1 + α l s 1 Σ 1 ] .
    Figure DE102018131613A1_0202
  • Der Ausgang der UND-Schaltung 104 ist mit dem ersten 4-Bit breiten Eingang der XOR-Schaltung 105 verbunden. An dem zweiten 4-Bit breiten Eingang der XOR-Schaltung 104 liegt das zu korrigierende Byte Xl ' an. An dem 4-Bit breiten Ausgang der XOR-Schaltung 105 wird das korrigierte l-te Byte X c o r l = X l ' + e l
    Figure DE102018131613A1_0203
    ausgegeben.
  • Ist das Fehlersignal El gleich 0, dann erfolgt keine Korrektur des l-ten Bytes.
  • Die XOR-Schaltungen bilden die komponentenweise XOR-Summe der jeweils an ihren Eingängen anliegenden 4 Bit breiten Eingangssignale.
  • Die UND-Schaltung 104 realisiert eine komponentenweise UND-Verknüpfung ihrer vier an ihrem ersten Eingang anliegenden binären Werte mit dem Fehlersignal El . Ist das Fehlersignal El gleich 0, dann gibt die UND-Schaltung 104 auf ihrem 4-Bit breiten Ausgang jeweils den Wert 0 aus. Ist das Fehlersignal El gleich 1, dann gibt die UND-Schaltung 104 an ihrem 4-Bit breiten Ausgang die Werte aus, die an ihrem ersten Eingang anliegen.
  • Der Byte-Korrekturwertbildner 101 realisiert eine Galoisfeld-Multiplikation des Signals s1 · Σ-1 mit der Konstanten αl. Eine solche Galoisfeld-Multiplikation kann mittels einer linearen Schaltung unter Verwendung von XOR-Gattern realisiert werden, was nachfolgend noch näher erläutert wird.
  • Der Byte-Korrekturwertbildner 101 stellt somit die Funktion einer Byte-Korrektur für das l-te Byte bereit. Der Byte-Korrekturwertbildner stellt dann, wenn das Fehlersignal El = 1 einen Fehler für das l-te Byte, d.h. für die l-te Byte-Position, anzeigt, einen Byte-Korrekturwert el an seinem Ausgang bereit. Der Byte-Korrekturwert el ist gleich 0, wenn das Fehlersignal El gleich 0 ist.
  • Die einzugebenden Signale s1 + s2 · Σ-1 und s1 · Σ-1 können einmal bestimmt und für mehrere Byte-Korrekturwertbildner und somit für unterschiedliche ggf. zu korrigierende Bytes verwendet werden.
  • Auch ist es ein Vorteil, dass die Schaltungsanordnung sowohl für die Korrektur von 1-Bytefehlern als auch zur Korrektur von 2-Bytefehlern eingesetzt werden kann, wenn die mindestens eine fehlerhafte Byte-Position des einen fehlerhaften Bytes oder der zwei fehlerhaften Bytes anhand der Werte der Fehlersignale bekannt ist.
  • Somit können effizient für unterschiedliche Bytes, die eventuell fehlerhaft sind, Byte-Korrekturwerte parallel bestimmt werden.
  • Parallel bedeutet in diesem Zusammenhang insbesondere, dass die Bestimmung und/oder Bereitstellung der Byte-Korrekturwerte zumindest teilweise zeitlich überlappend, insbesondere im Wesentlichen zu gleichen Zeiten, erfolgen kann. Somit ist es eine vorteilhafte Option, dass pro Byte für die Korrektur nur ein Konstantenmultiplizierer, zwei XOR-Schaltungen und eine UND-Schaltung benötigt werden, wie dies beispielhaft in 10 für das l-te Byte dargestellt ist.
  • Insbesondere können mehrere Byte-Korrekturwertbildner parallel für zu korrigierende Bytes implementiert sein. Insbesondere können die Byte-Korrekturwerte während mindestens eines Takts, beispielsweise während einer Abfolge gemeinsamer Takte oder während einer Abfolge eines Teils gemeinsamer Takte (also zeitlich überlappend) bestimmt werden. Durch die mindestens teilweise zeitliche Überlappung wird eine parallele Verarbeitung ermöglicht. Hierbei sei angemerkt, dass der Begriff der parallelen Bestimmung insbesondere auch eine teilweise parallele (also z.B. eine teilweise gleichzeitige Bearbeitung) umfasst.
  • Liegt kein Fehler vor, dann sind alle Fehlersignale E0 ,...,E14 gleich 0 und alle Byte-Korrekturwerte sind gleich 0, so dass keine Fehlerkorrektur erfolgt.
  • Fig. 11: Parallele Realisierung der Korrekturwertbildner
  • 11 zeigt eine beispielhafte Schaltungsanordnung für eine parallele Realisierung von 15 Byte-Korrekturwertbildnern. Somit können 15 eventuell fehlerhafte Bytes X0 ',X1 ' , ... ,X14 ' korrigiert werden. Jedes Byte hat beispielhaft eine Wortbreite von 4.
  • Für jedes der 15 Bytes X0 ' ,X1 ', ... ,X14 ' ist in 11 ein Byte-Korrekturwertbildner BK0 111, BK1 112 bis BK14 113 zur Bildung der Byte-Korrekturwerte e0 bis e14 gezeigt. Die Byte-Korrekturwerte e0 bis e14 werden mit den gelesenen und eventuell fehlerhaften Bytes X0 ' bis X14 ' in 15 XOR-Schaltungen 114, 115, 116 komponentenweise zu den korrigierten Bytes X c o r 0  bis  X c o r 14
    Figure DE102018131613A1_0204
    verknüpft.
  • Hierbei sei angemerkt, dass es jeweils 15 Byte-Korrekturwertbildner und 15 XOR-Schaltungen gibt, von denen zur besseren Übersicht jeweils drei dargestellt sind. Die Byte-Korrekturwertbildner 111 bis 113 können dabei gemäß dem in 10 dargestellten Byte-Korrekturwertbildner 101 aufgebaut sein.
  • Fig. 12: Bildung von Σ-1
  • 12 zeigt eine beispielhafte Schaltungsanordnung zur Bestimmung von Σ-1, wobei Σ-1 der inverse Wert von Σ in dem beispielhaft angenommenen Galoisfeld GF(24) ist.
  • 12 umfasst eine kombinatorische Schaltung 121 und einen Invertierer 122.
  • Die kombinatorische Schaltung 121 liefert an ihrem 4-Bit breiten Ausgang den Wert Σ gemäß Σ= Ε 0 α 0 + Ε 1 α 1 + + E 14 α 14
    Figure DE102018131613A1_0205
    in Abhängigkeit von den hier beispielhaft beschriebenen binären Fehlersignalen E0 bis E14 . Dabei sind α0 bis α14 in ihrer jeweiligen Vektordarstellung 4-komponentige Binärvektoren.
  • Der Ausgang der kombinatorischen Schaltung 121 ist mit einem 4-Bit breiten Eingang des Invertieres 122 verbunden. Der Invertierer 122 ist ein Invertierer im Galoisfeld GF(24). Am 4-Bit breiten Ausgang des Invertierers wird der 4-Bit breite Wert Σ-1 gemäß Σ Σ 1 = α 0
    Figure DE102018131613A1_0206
  • Fig. 13: Bildung von Σ
  • 13 zeigt eine beispielhafte Implementierung der kombinatorischen Schaltung 121 aus 12 zur Bildung von Σ aus den Fehlersignalen E0 bis E14 mit Hilfe von XOR-Schaltungen. Das hier gezeigte Beispiel betrifft wieder das Galoisfeld GF(24).
  • Die 4 Komponenten Σ0 , Σ1 , Σ2 , Σ3 von Σ= ( Σ 0 , Σ 1 , Σ 2 , Σ 3 )
    Figure DE102018131613A1_0207
    werden durch XOR-Verknüpfungen der Fehlersignale E0 bis E14 bestimmt.
  • Die Anordnung von 13 zeigt vier Ausgänge, wobei ein erster Ausgang das Signal Σ0 , ein zweiter Ausgang das Signal Σ1 , ein dritter Ausgang das Signal Σ2 und ein vierter Ausgang das Signal Σ 3 bereitstellt.
  • Ist für 0 ≤ i ≤ 14 das Fehlersignal Ei gleich 1, dann liefern die Komponenten von αi, die gleich 1 sind, in Gleichung (40) einen Beitrag zu den entsprechenden Komponenten von Σ. Die Komponenten αi, die gleich 0 sind, liefern keinen Beitrag zu den entsprechenden Komponenten von Σ.
  • Gilt beispielsweise für das Fehlersignal E0 = 1 mit α0 = [1000]T, dann liefert das Fehlersignal E0 einen Beitrag in der XOR-Summe für die erste Komponente E0 von Σ. Der Eingang, der E0 führt, ist somit mit dem ersten Ausgang verbunden. Das Fehlersignal E0 liefert keinen Beitrag in der XOR-Summe für die zweite Komponente Σ1, die dritte Komponente Σ2 und die vierte Komponente Σ3 von Σ. Entsprechend ist die Leitung, die das Fehlersignal E0 führt, nicht mit diesen Ausgängen verbunden.
  • Gilt beispielsweise für das Fehlersignal E5 = 1 mit α5 = [0110]T, dann liefert das Fehlersignal E5 einen Beitrag für die zweite Komponente Σ1 und die dritte Komponente Σ2 von Σ. Entsprechend ist die Leitung, die das Fehlersignal E5 führt, über eine XOR-Schaltung 1325 mit dem zweiten Ausgang verbunden, die den Wert Σ1 führt, und über eine XOR-Schaltung 1335 mit dem dritten Ausgang verbunden, der den Wert Σ2 führt. Das Fehlersignal E5 liefert keinen Beitrag in der XOR-Summe für die erste Komponente Σ0 und die vierte Komponente Σ3 von Σ. Entsprechend ist die Leitung, die das Fehlersignal E5 führt, nicht mit diesen Ausgängen verbunden.
  • Für Σ0 gilt: Σ 0 = E 0 + E 4 + E 7 + E 8 + E 10 + E 12 + E 13 + E 14 .
    Figure DE102018131613A1_0208
  • Die XOR-Verknüpfungen der Fehlersignale E0 , E4 , E7 , E8 , E10 , E12 , E13 , E14 gemäß der Gleichung (42) zu E0 erfolgen durch die XOR-Schaltungen 1314, 1317, 1318, 13110, 13112, 13113, 13114 mit jeweils zwei Eingängen und einem Ausgang.
  • Für Σ1 gilt: Σ 1 = E 1 + E 4 + E 5 + E 7 + E 9 + E 10 + E 11 + E 12 .
    Figure DE102018131613A1_0209
  • Die XOR-Verknüpfungen der Fehlersignale E1 , E4 , E5 , E7 , E9 , E10 , E11 , E12 gemäß der Gleichung (43) zu Σ1 erfolgen durch die XOR-Schaltungen 1324, 1325, 1328, 1329, 13210, 13211, 13212 mit jeweils zwei Eingängen und einem Ausgang.
  • Für Σ2 gilt: Σ 2 = E 2 + E 5 + E 6 + E 8 + E 10 + E 11 + E 12 + E 13 .
    Figure DE102018131613A1_0210
  • Die XOR-Verknüpfungen der Fehlersignale E2 , E5 , E6 , E8 , E10 , E11 , E12 , E13 gemäß der Gleichung (44) zu Σ2 erfolgen durch die XOR-Schaltungen 1335, 1336, 1338, 13310, 13311, 13312, 13313 mit jeweils zwei Eingängen und einem Ausgang.
  • Für Σ3 gilt: Σ 3 = E 3 + E 6 + E 7 + E 9 + E 11 + E 12 + E 13 + E 14 .
    Figure DE102018131613A1_0211
  • Die XOR-Verknüpfungen der Fehlersignale E3 , E6 , E7 , E9 , E11 , E12 , E13 , E14 gemäß der Gleichung (45) zu Σ3 erfolgen durch die XOR-Schaltungen 1346, 1347, 1349, 13411, 13412, 13413, 13414 mit jeweils zwei Eingängen und einem Ausgang.
  • Fig. 14: Bildung des Byte-Korrektursignals
  • Nachfolgend wird eine Kombination der Korrektur eines Bytefehlers für eine bekannte fehlerhafte Byte-Position (Gruppenfehler-Korrektur) mit einer Korrektur eines Bytefehlers, wenn die fehlerhafte Byte-Position nicht bekannt ist (Korrektur allgemeiner Bytefehler), beschrieben.
  • Ist die fehlerhafte Byte-Position mittels des Gruppenfehlers bekannt, reicht es aus, nur den Byte-Korrekturwert für das fehlerhafte Byte zu bestimmen.
  • Ist die fehlerhafte Byte-Position nicht bekannt, dann ist zu prüfen, ob die Byte-Position fehlerhaft und es ist auch der Byte-Korrekturwert zu bestimmen, wenn die Byte-Position fehlerhaft ist.
  • Beispielhaft wird ein Reed-Solomon-Code verwendet, der zwei Gruppenfehler oder einen Bytefehler korrigieren kann. Der eine Bytefehler wird korrigiert, wenn kein Gruppenfehler erkannt wurde.
  • In dem hier verwendeten Beispiel wird das kombinierte Fehlersignal E aus den Fehlersignalen E0 bis E14 gebildet. Das kombinierte Fehlersignal E zeigt an, ob irgendein Fehlersignal für eines der Bytes einen Gruppenfehler anzeigt. Wenn dem so ist, dann wird entweder ein Gruppenfehler oder es werden zwei Gruppenfehler korrigiert.
  • Wenn durch das kombinierte Fehlersignal E angezeigt wird, dass kein Gruppenfehler durch eines der Fehlersignale E0 bis E14 bestimmt wurde, dann erfolgt eine Fehlerkorrektur mit unbestimmter Bytefehler-Position; dies ergibt keine Korrektur, sofern kein Fehler vorliegt.
  • Gemäß einem Beispiel können durch den Fehlercode C1 in Kombination mit den Block-Fehlercodes CF0 bis CF14 die folgenden Fehler korrigiert werden:
    • - Es können ein bis zwei durch die Block-Fehlercodes erkannte Gruppenfehler wie folgt korrigiert werden:
      • Die Fehlersignale E0 bis E14 der Fehlererkennungsschaltungen 130 bis 13L-1 (mit L = 14) gemäß 1 bestimmen die Position des einen Bytes oder die Positionen der beiden Bytes, die (jeweils) einen Gruppenfehler aufweisen.
      • Für diejenigen Byte-Positionen, für die ein Gruppenfehler bestimmt wurde, wird unter Verwendung des Fehlercodes C1 der Byte-Korrekturwert (also der Korrekturwert für das betroffene als fehlerhaft identifizierte Byte) bestimmt. Insbesondere ist es von Vorteil, wenn ein solcher Fehler an der vorab bestimmten Position des Gruppenfehlers korrigiert wird.
    • - Es kann auch ein einzelner Bytefehler, der nicht von einer der Fehlererkennungsschaltungen 130 bis 13L-1 als Gruppenfehler erkannt worden ist, unter Verwendung des Fehlercodes C1 korrigiert werden. Mittels des Fehlercodes C1 wird in diesem Fall sowohl die Byte-Position des einen fehlerhaften Bytes als auch der entsprechende Byte-Korrekturwert bestimmt, und es wird der Fehler korrigiert. In diesem Fall muss mittels des Fehlercodes C1 sowohl die Byte-Position des fehlerhaften Bytes als auch der Byte-Korrekturwert für das fehlerhafte Byte bestimmt werden. Damit kann im Unterschied zu dem vorhergehenden Fall, bei dem die Positionen eines fehlerhaften Bytes oder zweier fehlerhafter Bytes als Gruppenfehler bestimmt wurde(n), nur noch ein einzelner Bytefehler mit diesem Fehlercode C1 korrigiert werden. Hierbei zeigen die Fehlersignale E0 bis E14 der Fehlererkennungsschaltungen FE0 bis FE14 keinen Fehler an. Eine mögliche Ursache ist es, dass ein Codewort des Block-Fehlercodes in ein anderes Codewort dieses Bock-Fehlercodes verfälscht wurde. Ist beispielsweise der Block-Fehlercode ein 3-aus-6-Code, so kann die Fehlererkennungsschaltung keinen Fehler feststellen, falls ein bestimmtes Codewort in ein anderes Codewort dieses 3-aus-6-Codes geändert wurde.
  • In dem hier näher erläuterten Beispiel wird ein kombiniertes Fehlersignal aus einer ODER-Verknüpfung der Fehlersignale E0 bis E14 gebildet, wobei jedes der Fehlersignale im Fehlerfall den Wert 1 annimmt und den Wert 0 annimmt, wenn kein Fehler erkannt wurde.
  • Somit zeigt das kombinierte Fehlersignal E = E 0 E 1 E 14
    Figure DE102018131613A1_0212
    an, ob irgendeines der Fehlersignale E0 bis E14 einen Gruppenfehler bestimmt hat.
  • Wird ein Gruppenfehler angezeigt, so wird dieser Gruppenfehler mittels des Fehlercodes C1 korrigiert. Werden zwei Gruppenfehler angezeigt, dann werden diese beiden Gruppenfehler anhand des Fehlercodes C1 korrigiert.
  • Wird durch keines der Fehlersignale E0 bis E14 ein Gruppenfehler angezeigt, so zeigt auch das kombinierte Fehlersignal E keinen Fehler an. In diesem Fall liegt entweder kein Fehler vor oder es liegt mindestens ein Bytefehler an einer unbekannten Fehlerposition vor, wobei ein Codewort des Block-Fehlercodes in ein anderes Codewort dieses Block-Fehlercodes verfälscht wurde.
  • Liegt mindestens ein solcher Bytefehler vor, dann wird er allein unter Verwendung des Fehlercodes C1 korrigiert, sofern dies möglich ist. Wie erläutert dabei sowohl die fehlerhafte Byte-Position als auch der entsprechende Byte-Korrekturwert allein mittels des Fehlercodes C1 zu bestimmen (weil ja kein Gruppenfehler durch die Block-Fehlercodes angezeigt wurde).
  • Die durch die Fehlererkennungsschaltungen FE0 bis FE14 bestimmten Fehlersignale E0 bis E14 und das daraus abgeleitete kombinierte Fehlersignal E bestimmen, ob eine Korrektur eines einzelnen Gruppenfehlers oder von zwei Gruppenfehlern oder eine Korrektur eines Bytefehlers mit zu bestimmender Byte-Position erfolgt.
  • Treten Fehler, die Codewörter eines Block-Codes in Nicht-Codewörter des gleichen Blockcodes verfälschen und die somit als Gruppenfehler anhand der Fehlererkennungsschaltungen der Block-Fehlercodes erkennbar sind, häufiger auf als Fehler, die Codewörter eines Block-Fehlercodes in andere Codewörter des gleichen Block-Fehlercodes verfälschen, dann kann es vorteilhaft sein, eine Schaltungsanordnung zu verwenden, die mit einer festen Anzahl von Prüfbits mehr Gruppenfehler korrigieren kann als Bytefehler, für die die fehlerhafte Byte-Position nicht im Voraus bestimmt worden ist. Mit anderen Worten ist es von Vorteil, dass bei mittels der Block-Fehlercodes erkanntem mindestens einen Gruppenfehler der Fehlercode C1 eine größere Anzahl von Bytefehlern korrigieren kann als wenn kein Gruppenfehler erkannt wurde, obwohl (mindestens) ein Bytefehler vorliegt, der dann allein durch den Fehlercode C1 erkannt und korrigiert werden muss.
  • Mit einer relativ kleinen Anzahl von Prüfbits des Fehlercodes C1 können in dem hier erläuterten Beispiel somit bis zu zwei Gruppenfehler oder aber ein Bytefehler ohne vorab bekannte Fehlerposition korrigiert werden.
  • In der nachfolgend beispielhaft angegebenen Schaltungsanordnung gemäß 14 werden in Abhängigkeit von durch die Fehlererkennungsschaltungen 130 bis 13L-1 bestimmten Fehlersignalen E0 bis EL-1 eine erste Anzahl von Fehlern, die sogenannten Gruppenfehler, und eine zweite Anzahl von Fehlern, die nicht als Gruppenfehler durch die Fehlererkennungschaltungen 130 bis 13L-1 erkennbar sind, unter Verwendung des Fehlercodes C1 korrigiert.
  • Optional kann bestimmt werden, ob mehr als zwei der Fehlersignale E0 bis E14 einen Fehler anzeigen. In so einem Fall werden mindestens drei Gruppenfehler erkannt und es kann gemäß dem vorliegenden Beispiel ein nicht korrigierbarer Fehler angezeigt werden (in dem hier gewählten Beispiel können bis zu zwei Bytefehler, die als Gruppenfehler erkannt wurden oder ein Bytefehler, sofern dieser nicht als Gruppenfehler erkannt wurde, mittels des Fehlercodes C1 korrigiert werden).
  • Grundsätzlich können je nach Beispiel, Einsatzgebiet sowie gewählten Block-Fehlercodes und Fehlercodes unterschiedliche Kombinationen von Anzahlen von erkannten Gruppenfehlern, nicht erkannten Gruppenfehlern und Bytefehlern erkannt und/oder korrigiert werden.
  • Beispielsweise ist es möglich, eine Schaltungsanordnung für den Fehlercode C1 zu verwenden, die unter Verwendung von Fehlersignalen E0 bis EL-1 mindestens eine folgende Korrekturen erlaubt:
    • - eine Korrektur von bis zu einer ersten Anzahl von Gruppenfehlern und keine weiteren Bytefehler;
    • - eine Korrektur von bis zu einer zweiten Anzahl von Gruppenfehlern und bis zu einer dritten Anzahl von Bytefehlern, wobei für die dritte Anzahl von Bytefehlern keine Gruppenfehler angezeigt werden;
    • - eine Korrektur von bis zu einer vierten Anzahl von Bytefehlern für die keine Gruppenfehler angezeigt werden.
  • 14 zeigt eine beispielhafte Schaltungsanordnung zur Bildung eines Byte-Korrektursignals für ein eventuell fehlerhaftes Datenbyte Xl '. Beispielhaft wird ein Bytefehler-korrigierender Code mit einer H-Matrix gemäß Gleichung (5) verwendet. Es wird weiterhin beispielhaft das Galoisfeld GF(24) angenommen.
  • Es ist möglich, dass das Fehlersignal El einen Fehler des l-ten Bytes anzeigt und dass eine Korrektur dieses Fehlers dadurch erfolgt, dass ein in 10 beschriebener Byte-Korrekturwertbildner KBl gemäß dem Byte-Korrekturwertbildner 101 ein Byte-Korrektursignal el bereitstellt, das mit dem zu korrigierendes Datenbyte Xl ' zu X k o r l = X l ' + e l
    Figure DE102018131613A1_0213
    komponentenweise XOR-verknüpft wird.
  • Beispielhaft wird angenommen, dass für El = 1 ein Fehler des l-ten Bytes und für El = 0 kein Fehler des l-ten Bytes angezeigt wird.
  • Ein kombiniertes Fehlersignal E kann entsprechend 4 als Ausgangssignal der Fehlererkennungsschaltung 41 bereitgestellt werden. Dabei ist die Fehlererkennungsschaltung 41 derart eingerichtet, dass für das kombinierte Fehlersignal E gilt: E = E 0 E 1 E 14
    Figure DE102018131613A1_0214
  • Gilt für das Fehlersignal El = 1, dann ergibt sich auch für das kombinierte Fehlersignal E = 1. Das Datenbyte Xl ist hier ein 4-Bit-Byte, das beispielsweise in ein Codewort Wl eines 3-aus-6-Codes von Speicherzellenwerten unter Verwendung des Block-Fehlercodes BFl codiert worden ist. Das Fehlersignal El zeigt durch den Wert 1 an, dass das Codewort Wl des 3-aus-6-Codes durch einen Fehler in eine Bitfolge Wl ' gestört wurde, die kein Codewort des 3-aus-6-Codes ist.
  • Insbesondere wird ein Fehler durch das Fehlersignal El = 1 angezeigt, wenn ein 1-Bitfehler vorliegt und das Byte Wl ' anstelle von drei Einsen genau zwei Einsen aufweist.
  • Es ist aber auch möglich, dass das Byte Wl in ein fehlerhaftes Byte Wl ' gestört wird, das ein Codewort des Block-Fehlercodes BCl ist. Beispielsweise kann ein korrektes Byte Wl = 111000 in ein fehlerhaftes Byte Wl ' = 100101 gestört werden; bei beiden handelt es sich um Codeworte des Block-Fehlercodes BCl . In diesem Fall ist das Fehlersignal El gleich 0, es wird kein Fehler erkannt. Das fehlerhafte Byte Wl ' von Speicherzellenwerten kann durch eine entsprechende Transformationsschaltung in ein fehlerhaftes Datenbyte Xl' transformiert werden.
  • Ist der Fehlercode C1 ein Bytefehler-korrigierender Code, kann das ggf. fehlerhafte Datenbyte Xl ' unter Verwendung dieses Fehlercodes korrigiert werden, obwohl das Fehlersignal El gleich 0 ist.
  • Eine Korrektur des möglicherweise fehlerhaften Bytes Xl ' bei unbekannter Bytefehler-Position kann unter Verwendung des Fehlercodes C1 erfolgen, wenn das Bytefehler-Signal El = 0 ist und auch kein anderes Bytefehler-Signal ungleich 0 ist.
  • Ist ein kombiniertes Fehlersignal E durch die Gleichung (46) bestimmt, dann gibt der Wert 0 für das kombinierte Fehlersignal E an, dass keines der Fehlersignale E0 bis E14 einen Fehler in einem der Bytes der Speicherzellenwerte anzeigt.
  • Anhand der in 14 gezeigten Schaltungsanordnung ist es möglich, einen Fehler in einem l-ten fehlerhaften Datenbyte Xl ' zu korrigieren, wenn das entsprechende Bytefehlersignal El des Block-Fehlercodes CFl einen Bytefehler in dem l-ten gelesenen Byte Wl ' von Speicherzellenwerten anzeigt. Dabei ist es möglich, dass höchstens ein weiterers Bytefehlersignal einen Bytefehler in einem von dem l-ten Byte verschiedenen Byte anzeigt oder dass kein weiteres Bytefehlersignal eines weiteren Block-Fehlercodes einen Bytefehler anzeigt. Für die Korrektur des fehlerhaften Bytes Xl ' unter Verwendung des Fehlercodes C1 ist hier durch den Wert des Fehlersignals El bekannt, dass in dem l-ten Datenbyte ein Fehler zu korrigieren ist. Dies entspricht der Korrektur eines Gruppenfehlers. Mit hier beispielhaft verwendeten Bytefehler-korrigierenden Codes ist es möglich, einen oder zwei Gruppenfehler zu korrigieren.
  • Mittels des Block-Fehlercodes CFl ist das Fehlersignal El für l ∈ {0,... , L - 1} durch die Fehlererkennungsschaltung FEl bestimmt (siehe z.B. 1). Der Byte-Korrekturwert el bzw. der Byte-Korrekturwert el' ist unter Verwendung des Fehlercodes C1 bestimmt. Ist das Fehlersignal El = 1, dann liegt ein Gruppenfehler vor und der Fehlercode C1 bestimmt in diesem Fall nur den Byte-Korrekturwert el ≠ 0, der am Ausgang des Byte-Korrekturwertbildners 101 bereitgestellt wird. Ist das Fehlersignal El = 0, dann gibt der Byte-Korrekturwertbildner 101 den Byte-Korrekturwert el = 0 aus.
  • Liegt, wenn das Fehlersignal El = 0 ist, ein Bytefehler an der l + 1-ten Byte-Position vor, dann ist das l+ 1-te Byte, das im fehlerfreien Fall ein bestimmtes Codewort des Block-Fehlercodes CFl ist, fehlerhaft in ein anderes Codewort dieses Block-Fehlercodes CFl verfälscht. Die NICHT-ODER-Schaltung 144 gibt den Wert 1 aus, der über die UND-Schaltung 138 wegen des kombinierten Fehlersignals E = 0 über die UND-Schaltung 148 geleitet wird. Somit stellt die UND-Schaltung 145 an ihrem Ausgang den Wert s1 bereit, der gleich dem Byte-Korrekturwert el' ist, der wegen el = 0 am Ausgang der XOR-Schaltung 146 ausgegeben wird und in der XOR-Schaltung 147 mit dem zu korrigierenden Byte Xl' zu dem korrigierten Byte X c o r l
    Figure DE102018131613A1_0215
    XOR-verknüpft wird.
  • Auch kann dann, wenn das l-te Datenbyte fehlerhaft in Xl ' gestört ist und wenn kein Bytefehlersignal eines Block-Fehlercodes einen Bytefehler anzeigt, das fehlerhafte Datenbyte korrigiert werden, sofern der Fehler unter Verwendung des Fehlercodes C1 korrigierbar ist. In diesem Fall wird mittels der in 14 gezeigten Schaltungsanordnung bestimmt, dass ein Fehler in der l-ten Byte-Position vorliegt. Mit dem hier beispielhaft verwendeten Bytefehler-korrigierenden Fehlercode C1 ist es möglich, einen Bytefehler an einer zu bestimmenden Byte-Position zu korrigieren.
  • Die Fehlerkorrektur des l-ten Datenbytes Xl ' mit dem Byte-Korrekturwert el erfolgt, wenn das Fehlersignal El gleich 1 ist; entsprechend erfolgt eine Korrektur mit einem Byte-Korrekturwert el' , wenn das kombinierte Fehlersignal E gleich 0 ist und wenn s 1 α l + s 2 = 0  mit  s 1 0
    Figure DE102018131613A1_0216
  • 14 umfasst
    • - den Byte-Korrekturwertbildner 101 mit zwei 4-Bit breiten Eingängen, einem 1-Bit breiten Eingang, an dem das Fehlersignal El anliegt, und einem 4-Bit breiten Ausgang, die den Byte-Korrekturwert el bereitstellt,
    • - 4-Bit breite Eingangsleitungen 1410 bis 1413,
    • - einen Konstantenmultiplizierer 142 mit einem 4-Bit breiten, einem 1-Bit breiten zweiten Eingang und einem 4-Bit breiten Ausgang,
    • - XOR-Schaltungen 143, 146 und 147, jeweils mit zwei 4-Bit breiten Eingängen und einem 4-Bit breiten Ausgang,
    • - eine NICHT-ODER-Schaltung 144 mit einem 4-Bit breiten Eingang und einem 1-Bit breiten Ausgang,
    • - eine UND-Schaltungen 145 mit einem 4-Bit breiten ersten Eingang, einem 1-Bit breiten zweiten Eingang und einem 4-Bit breiten Ausgang,
    • - eine UND-Schaltung 148 mit zwei 1-Bit breiten Eingängen und einem 1-Bit breiten Ausgang und
    • - einen Invertierer 149 mit einem 1-Bit breiten Eingang und einem 1-Bit breiten Ausgang.
  • Der Byte-Korrekturwertbildner 101 ist beispielsweise auch in 10 dargestellt.
  • Gilt für das Fehlersignal El = 0, dann ist der 4-bit breite Byte-Korrekturwert el gleich 0000.
  • An den Eingangsleitungen 1410 bis 1413 liegen (in der Reihenfolge der genannten Anschlüsse) die 4-Bit breiten Signalwerte: s1 + s2 · Σ-1, s1 · Σ-1, s2 und s1 an.
  • Die beiden Eingänge des Byte-Korrekturwertbildners 101 sind mit den Eingangsleitungen 1410 und 1411 verbunden.
  • Die Eingangsleitung 1412 ist mit dem ersten Eingang der XOR-Schaltung 143 verbunden, mit deren zweiten Eingang der Ausgang des Konstantenmultiplizierers 142 verbunden ist. Der erste Eingang des Konstantenmultiplizierers 142 ist mit der Eingangsleitung 1413 verbunden und an dem zweitem Eingang des Konstantenmultiplizierers 142 liegt die Konstante αl an. Der Ausgang der XOR-Schaltung 143 ist mit dem Eingang der NICHT-ODER-Schaltung 144 verbunden.
  • Die NICHT-ODER-Schaltung 144 gibt den Wert 1 aus, wenn an ihrem Eingang der Wert 0000 anliegt und sie gibt den Wert 0 aus, wenn an ihrem Eingang ein Wert ungleich 0000 anliegt.
  • Der Ausgang der NICHT-ODER-Schaltung 144 ist mit dem ersten Eingang der UND-Schaltung 148 verbunden; der zweite Eingang der UND-Schaltung 148 ist mit dem Ausgang des Invertierers 149 verbunden, an dessen Eingang das kombinierte Fehlersignal E anliegt.
  • Der Ausgang der UND-Schaltung 148 ist mit dem 1-Bit breiten zweiten Eingang der UND-Schaltung 145 verbunden, deren 4-Bit breiter erster Eingang mit der Eingangsleitung 1413 verbunden ist. Der Ausgang der UND-Schaltung 145 ist mit dem ersten Eingang der XOR-Schaltung 146 verbunden. Der zweite Eingang der XOR-Schaltung 146 ist mit dem Ausgang des Byte-Korrekturwertbildners 101 verbunden.
  • Die UND-Schaltung 145 ist derart eingerichtet, dass sie an ihrem 4-Bit breiten Ausgang den Wert 0000 ausgibt, wenn an ihrem zweiten Eingang das binäre Signal 0 anliegt. Entsprechend stellt die UND-Schaltung 145 an ihrem Ausgang den Wert s1 bereit, wenn an ihrem zweiten Eingang das binäre Signal 1 anliegt.
  • Der Ausgang der XOR-Schaltung 146 ist mit dem ersten Eingang der XOR-Schaltung 147 verbunden. An dem zweiten Eingang der XOR-Schaltung 147 liegt das eventuell fehlerhafte und zu korrigierende Datenbyte Xl ' an. An dem Ausgang der XOR-Schaltung 147 wird das korrigierte Datenbyte X c o r l
    Figure DE102018131613A1_0217
    ausgegeben.
  • Wenn der Wert des Fehlersignals El = 1 einen Fehler des l-ten Bytes Wl ' der Speicherzellenwerte anzeigt, kann eine Korrektur des entsprechenden l-ten Datenbytes Xl ' anhand des von dem Byte-Korrekturwertbildner 101 bestimmten Byte-Korrekturwerts el erfolgen. In diesem Fall ist das kombinierte Fehlersignal E = 1 und die UND-Schaltung 145 gibt den Wert 0000 aus. Liegt nur ein Fehler in dem l-ten Byte der Speicherzellenwerte oder ein Fehler in dem l-ten Byte und einem weiteren Byte der Speicherzellenwerte vor, dann ist der korrigierte Wert X c o r l
    Figure DE102018131613A1_0218
    gleich dem fehlerfreien Wert Xl, da der hier beispielhaft verwendete Fehlercode C1 ein Byte-korrigierender Code ist, der einen oder zwei Bytefehler mit bekannten fehlerhaften Byte-Positionen oder anders gesagt, zwei Gruppenfehler, korrigieren kann.
  • Ist der Wert des Fehlersignals El = 0, dann wird von dem Block-Fehlercode CFl kein Fehler in dem l-ten Byte erkannt und der Bytefehler-Korrekturwert el ist gleich 0000.
  • Gilt also für das kombinierte Fehlersignal E = 0, dann wurde in keinem der Bytes der Speicherzellenwerte ein Fehler durch die entsprechenden Block-Fehlercodes erkannt. Ist außerdem die Bedingung gemäß Gleichung (47) erfüllt, liegt an dem zweiten 1-Bit breiten Eingang der UND-Schaltung 145 der Wert 1 an, so dass die UND-Schaltung 145 an ihrem Ausgang den Wert el' = s1 bereitstellt. In diesem Fall ist das Datenbyte Xl ' fehlerhaft und das gelesene Byte Wl ' der Speicherzellenwerte ist ein fehlerhaftes Codewort (d.h. ein Codewort des Block-Fehlercodes, das durch mehrere Bitfehler aus dem eigentlich richtigen Codewort hervorgegangen ist) des Block-Fehlercodes CFl , so dass der Fehler nicht durch den Block-Fehlercode CFl erkannt werden kann. Die XOR-Schaltung 146 gibt dann den Wert el' = s1 aus, der in der XOR-Schaltung 147 mit dem zu korrigierenden Datenbyte Xl ' zu X c o r l = X l ' + e l '
    Figure DE102018131613A1_0219
    verknüpft wird. Der verwendete Datenbit-Fehlercode C1 ist in diesem Ausführungsbeispiel ein 1-Bytefehler-korrigierender Code, der ein fehlerhaftes Datenbyte Xl ' in den fehlerfreien Wert Xl korrigiert, sofern kein weiterer Fehler vorliegt.
  • Es ist möglich, für die zu korrigierenden Byte-Positionen 0,...,14 die in 14 für l mit 0 ≤ l ≤ 14 dargestellte Schaltungsanordnung zur Korrektur der eventuell fehlerhaften Bytes X0 ' bis X14 ' parallel bereit zustellen oder parallel zu implementieren, so dass die Bestimmung der erforderlichen Byte-Korrekturwerte für verschiedene Bytes parallel durchgeführt wird. Zur Auslegung des Begriffs „parallel“ wird auf die vorstehenden Ausführungen verwiesen.
  • Gilt für das Fehlersignal El = 1 und sind die Fehlersignale für die anderen Bytes gleich 0, dann stellt die l-te Schaltungsanordnung an ihrem Ausgang den Byte-Korrekturwert el ≠ 0000 bereit, während alle übrigen Schaltungsanordnungen parallel den Byte-Korrekturwert 0000 bereitstellen.
  • Gelten
    • - für das Fehlersignal El = 1,
    • - für ein weiteres Fehlersignal EK = 1 mit l ≠ K und
    • - sind alle anderen Fehlersignale gleich 0,
    dann
    • - stellt die l-te Schaltungsanordnung an ihrem Ausgang den Byte-Korrekturwert el ≠ 0000 und
    • - die K-te Schaltungsanordnung an ihrem Ausgang den Byte-Korrekturwert eK ≠ 0000 bereit,
    • - wohingegen alle anderen übrigen Schaltungsanordnungen (parallel) den Byte-Korrekturwert 0000 bereitstellen.
  • Sind alle Fehlersignale E0 , ... , E14 gleich 0 und liegt ein 1-Bytefehler in dem N-ten Byte XN ' vor, dann stellt die N-te Schaltungsanordnung an ihrem Ausgang den Byte-Korrekturwert eN' ≠ 0000 bereit, während alle übrigen Schaltungsanordnungen parallel einen Byte-Korrekturwert 0000 bereitstellen.
  • In dem vorliegenden Beispiel wurde beispielhaft von einer Wortbreite von 4-Bit und dem Galoisfeld GF(24) ausgegangen. Dabei handelt es sich lediglich um Beispiele, die zur Veranschaulichung dienen. Es ist entsprechend möglich, andere Wortbreiten und andere Galoisfelder zu nutzen. Weiterhin können andere Fehlercodes, insbesondere solche Fehlercodes, die mehrere Bytefehler erkennen und/ oder korrigieren, eingesetzt werden.
  • Weiterhin wurde beispielhaft ein unverkürzter Code als Fehlercode verwendet. Es ist entsprechend möglich, einen verkürzten Code zu verwenden, bei dem Spalten der H-Matrix des unverkürzten Codes gestrichen wurden.
  • Galoisfeld
  • Die nachfolgenden Beispiele beziehen sich insbesondere auf ein hier als Beispiel genanntes Galoisfeld GF(24).
  • Für ein Galoisfeld GF(2r), in dem vorliegenden Beispiel mit r = 4, werden nachfolgend einige Grundbegriffe von Galoisfeldern, z.B. verschiedene Darstellungen der Elemente des Galoisfelds und von Operationen im Galoisfeld beschrieben. Beispielsweise sei in diesem Zusammenhang verwiesen auf [3]. Dort werden Implementierungen von Galoisfeld-Operationen unter Verwendung von Nur-Lese-Speichern (ROMs) beschrieben.
  • In Bezug auf das Galoisfeld GF(24) zeigt die Tabelle 4 die (24 =) 16 Elemente des Galoisfelds in ihrer Exponentialdarstellung als Potenz eines erzeugenden Elementes α, als Polynom dritten Grades und als Binärvektor mit vier Komponenten. Als Modularpolynom wird ein Polynom M ( z ) = z 4 + z + 1
    Figure DE102018131613A1_0220
    verwendet. Tabelle 4: Elemente des Galoisfelds GF(24)
    Exponentialdarstellung Polynomdarstellung Vektordarstellung
    0 0 0000
    α0 z0 mod M(z) = 1 1000
    α1 z1 mod M(z) = z 0100
    α2 z2 mod M(z) = z2 0010
    α3 z3 mod M(z) = z3 0001
    α4 z4 mod M(z) = 1 + z 1100
    α5 z5 mod M(z) = z+z2 0110
    α6 z6 mod M(z) = z2 + z3 0011
    α7 z7 mod M(z) = 1 +z+z3 1101
    α8 z8 mod M(z) = 1 +z2 1010
    α9 z9 mod M(z) = z+z3 0101
    α10 z10 mod M(z) = 1 +z+z2 1110
    α11 z11 mod M(z) = z+z2 +z3 0111
    α12 z12 mod M(z) = 1 +z+z2 + z3 1111
    α13 z13 mod M(z) = 1 + z2 + z3 1011
    Tabelle 4: Elemente des Galoisfelds GF(24), Fortsetzung
    Exponentialdarstellung Polynomdarstellung Vektordarstellung
    α14 z14 mod M(z) = 1 + z3 1001
  • Eine Darstellung der Elemente eines Galoisfelds als Potenzen der Begleitmatrix eines beispielsweise primitiven Modularpolynoms ist beispielsweise aus [4] bekannt. Dies erlaubt in speziellen Anwendungsfällen vorteilhafte Ausprägungen der H-Matrix und der G-Matrix eines Bytefehler-erkennenden und Bytefehler-korrigierenden Codes.
  • Alle 16 Polynome dritten Grades mit binären Koeffizienten stellen jeweils ein Element des Galoisfelds GF(24) dar. Sie sind in der zweiten Spalte der Tabelle 4 als Polynome in z aufgeführt. Die binären Koeffizienten der Potenzen z0 , z1 , z2 , z3 der Polynome sind die Komponenten der Vektordarstellung.
  • Die erste Spalte der Tabelle 4 zeigt die Exponentialdarstellung der Elemente des im Galoisfeld GF(24) als Potenzen α0 bis α14 eines erzeugenden Elements α. Für das Element 0 in der Polynomdarstellung oder 0000 in der Vektordarstellung gibt es keine Darstellung in der Exponentialdarstellung.
  • Dem Element αi in der Exponentialdarstellung entspricht das Polynom z i  mod  ( M ( z ) )
    Figure DE102018131613A1_0221
    in der Polynomdarstellung, wobei M(z) das Modularpolynom des Galoisfelds, hier das Modularpolynom M(z) = z4 +z + 1, ist.
  • So entspricht beispielsweise α3 in der Exponentialdarstellung dem Polynom z 3  mod  ( z 4 + z + 1 ) = z 3
    Figure DE102018131613A1_0222
    in der Polynomdarstellung.
  • Für die Multiplikation zweier Elemente αi und αj in der Exponentialdarstellung gilt mit 2r - 1 = 15: α i α j = α [ i + j ]  mod  ( 2 r 1 ) = α [ i + j ]  mod 15 ,
    Figure DE102018131613A1_0223
    so dass die Multiplikation zweier Elemente in der Exponentialdarstellung einer Addition ihrer Exponenten modulo (2r - 1) entspricht. So gilt beispielsweise auch: α 9 α 10 = α 19  mod 15 = α 4 .
    Figure DE102018131613A1_0224
  • Das inverse Element αq des Elements αi ist durch die Beziehung α i α q = α [ 0 ]  mod  ( 2 r 1 ) = α [ 0 ] mod 15
    Figure DE102018131613A1_0225
    oder i + q = [ 0 ]  mod  ( 2 r 1 ) = [ 0 ]  mod 15
    Figure DE102018131613A1_0226
    (50) bestimmt. Das inverse Element eines Elements αi wird auch als α-i bezeichnet.
  • So gilt beispielsweise α 5 = α 10
    Figure DE102018131613A1_0227
    wegen α 5 α 10 = α [ 15 ]  mod 15 = α 0 .
    Figure DE102018131613A1_0228
  • Die Tabelle 5 zeigt eine Darstellung zueinander inverser Elemente in der Vektordarstellung für das Galoisfeld GF(24), wobei das Element 0000 der Vektordarstellung kein inverses Element aufweist. Tabelle 5: Inverse in Vektordarstellung des Galoisfelds GF(24)
    Element inverses Element
    1000 1000
    0100 1001
    0010 1011
    0001 1111
    1100 0111
    0110 1110
    0011 0101
    1101 1010
    1010 1101
    0101 0011
    1110 0110
    0111 1100
    1111 0001
    Tabelle 5: Inverse in Vektordarstellung des Galoisfelds GF(24), Fortsetzung
    Element inverses Element
    1011 0010
    1001 0100
  • So sind beispielsweise entsprechend der vierten Zeile von Tabelle 5 „0001“ und „1111“ die Vektordarstellungen zueinander inverser Elemente. Gemäß Tabelle 4 ist die Vektordarstellung von 0001 α3 und die Vektordarstellung von 1111 α12; es gilt: α 3 α 12 = α 0  oder 3 + 12 = 15  mod 15 = 0.
    Figure DE102018131613A1_0229
  • Tabelle 6 zeigt für die Vektordarstellung der Elemente des Galoisfelds GF(24) Werte der Exponenten der Elemente in der Exponentialdarstellung. Diese Zuordnung soll als Funktion LOG bezeichnet werden. Die inverse Zuordnung, die einem Exponenten eines Elements in der Exponentialdarstellung gemäß Tabelle 6 die entsprechende Vektordarstellung zuordnet, soll als Funktion EXP bezeichnet werden. Tabelle 6: Funktion LOG für das Galoisfeld GF(24)
    Element LOG
    1000 0
    0100 1
    0010 2
    0001 3
    1100 4
    0110 5
    0011 6
    1101 7
    1010 8
    0101 9
    1110 10
    0111 11
    1111 12
    1011 13
    1001 14
  • So ist beispielsweise dem Element 0001 in der Vektordarstellung durch die Funktion LOG(0001) = 3 der Wert 3 zugeordnet, da α3 die Vektordarstellung 0001 aufweist. Entsprechend gilt EXP(3) = 0001, da LOG(001) = 3 ist.
  • Die Funktion LOG bildet somit die Vektordarstellung der Elemente in die Exponenten der Exponentialdarstellung ab. Die Funktion EXP ist die inverse Transformation der Transformation LOG. Sie bildet die Exponenten der Elemente in ihrer Exponentialdarstellung in die Vektordarstellung dieser Elemente ab.
  • In der Polynomdarstellung werden die 16 Elemente durch die 16 Polynome dritten Grades mit binären Koeffizienten dargestellt. Die Multiplikation zweier Elemente in dem Galoisfeld kann auch in ihrer Polynomdarstellung durchgeführt werden. Der Multiplikation zweier Elemente P1(z) und P2(z) der Polynomdarstellung entspricht die Multiplikation der Polynome modulo des Modularpolynomes M(z), so dass mit M(z) = z4 + z + 1 gilt: P 1 ( z ) P 2 ( z ) = [ P 1 ( z ) P 2 ( z ) ]  mod  ( z 4 + z + 1 ) .
    Figure DE102018131613A1_0230
  • So gilt beispielsweise: [ ( z + z 2 + z 3 ) z ]  mod  ( z 4 + z + 1 ) = [ z 2 + z 3 + z 4 ]  mod  ( z 4 + z + 1 ) = = 1 + z + z 2 + z 3 .
    Figure DE102018131613A1_0231
  • Der Addition zweier Elemente in der Vektordarstellung entspricht der komponentenweisen Addition modulo 2 der Komponenten. Der Addition zweier Elemente in der Polynomdarstellung entspricht die Addition der Koeffizienten der Polynome modulo 2.
  • Fig.15:Galoisfeldmultiplizierer in GF(24)
  • Nachfolgend wird eine beispielhafte Realisierung eines Galoisfeld-Multiplizierers in GF(24) beschrieben. Es erfolgt eine Transformation der Vektordarstellung in die Exponentialdarstellung, eine Addition der Exponenten modulo 15 und eine Rücktransformation des Exponenten in die Vektordarstellung. Hierbei ist das Element 0, für das es keine Exponentialdarstellung gibt, gesondert zu berücksichtigen.
  • 15 zeigt eine beispielhafte Schaltungsanordnung zur Multiplikation zweier Elemente eines Galoisfelds, wobei diese Elemente in ihrer Vektordarstellung gegeben sind. Als Beispiel wird wieder das Galoisfeld GF(24) verwendet. Eine solche Schaltungsanordnung kann als Galoisfeld-Multiplikator oder Galoisfeld-Multiplizierer bezeichnet werden.
  • Die in 15 gezeigte Schaltungsanordnung umfasst
    • - zwei Transformationsschaltungen 151, 152 mit jeweils einem 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang zur Realisierung der Funktion LOG,
    • - eine Addierschaltung 153 mit zwei 4-Bit breiten Eingängen und einem 4-Bit breiten Ausgang,
    • - eine Transformationsschaltung 156 mit einem 4-Bit breiten Eingang und einem 4-Bit breiten Ausgang zur Realisierung der Funktion EXP,
    • - eine UND-Schaltung 158 mit einem ersten 4-Bit breiten Eingang, einem zweiten 1-Bit breiten Eingang und einem 4-Bit breiten Ausgang,
    • - zwei NICHT-ODER-Schaltungen 154, 155 mit jeweils einem 4-Bit breiten Eingang und einem 1-Bit breiten Ausgang,
    • - eine NICHT-ODER-Schaltung 157 mit zwei 1-Bit breiten Eingängen und einem 1-Bit breiten Ausgang.
  • Der Eingang der Transformationsschaltung 151 ist mit dem Eingang der NICHT-ODER-Schaltung 154 verbunden. An dem Eingang der Transformationsschaltung 151 liegen die vier Komponenten v1 , v2 , v3 , v4 eines Elements v = v 1 , v 2 , v 3 , v 3 , v 4
    Figure DE102018131613A1_0232
    des Galoisfelds GF(24) in Vektordarstellung an. Die Transformationsschaltung 151 gibt an ihrem Ausgang, der mit dem ersten Eingang der Addierschaltung 153 verbunden ist, das 4-Bit breite Signal LOG(v) aus.
  • Der Eingang der Transformationsschaltung 152 ist mit dem Eingang der NICHT-ODER-Schaltung 155 verbunden. An dem Eingang der Transformationsschaltung 152 liegen die vier Komponenten v 1 * , v 2 * , v 3 * , v 4 *
    Figure DE102018131613A1_0233
    eines Elements v * = v 1 * , v 2 * , v 3 * , v 4 *
    Figure DE102018131613A1_0234
    des Galoisfelds GF(24) in Vektordarstellung an. Die Transformationsschaltung 152 gibt an ihrem Ausgang, der mit dem zweiten Eingang der Addierschaltung 153 verbunden ist, das 4-Bit breite Signal LOG(v*) aus.
  • Die Addierschaltung 153 ist derart eingerichtet, dass sie für v 0000  und  v * 0000
    Figure DE102018131613A1_0235
    eine Summe [ L O G ( v ) + L O G ( v * ) ] mod 15
    Figure DE102018131613A1_0236
    bildet und an ihrem Ausgang bereitstellt. Der Ausgang der Addierschaltung 153 ist mit dem Eingang der Transformationsschaltung 156 verbunden, die für v 0000  und  v * 0000
    Figure DE102018131613A1_0237
    einen Wert E X P ( [ L O G ( v ) + L O G ( v * ) ] mod 15 )
    Figure DE102018131613A1_0238
    bildet und an ihrem Ausgang bereitstellt. Dieser Wert ist gleich dem Produkt von v und v* im Galoisfeld GF(24), sofern v, v* ≠ 0 gilt.
  • Der Ausgang der Transformationsschaltung 156 ist mit dem ersten Eingang der UND-Schaltung 158 verbunden, die an ihrem Ausgang das Ergebnis der Multiplikation v · v* im Galoisfeld GF(24) bereitstellt.
  • Der Ausgang der NICHT-ODER-Schaltung 154 ist mit dem ersten Eingang der NICHT-ODER-Schaltung 157 verbunden und der Ausgang der NICHT-ODER-Schaltung 155 ist mit dem zweiten Eingang der NICHT-ODER-Schaltung 157 verbunden. Der Ausgang der NICHT-ODER-Schaltung 157 ist mit dem zweiten Eingang der UND-Schaltung 158 verbunden.
  • Die UND-Schaltung 158 ist damit derart eingerichtet, dass sie dann, wenn an ihrem zweiten Eingang der binäre Wert 0 anliegt, an ihrem Ausgang den Wert 0000 ausgibt bzw. dass sie, wenn an ihrem zweiten Eingang der binäre Wert 1 anliegt, den Wert, der an dem ersten Eingang anliegt, an ihrem Ausgang bereitstellt.
  • Ist v = 0000, dann gibt die NICHT-ODER-Schaltung 154 den Wert 1 aus und die NICHT-ODER-Schaltung 157 gibt an ihrem Ausgang das Signal 0 aus, so dass die UND-Schaltung 158 den Wert 0000 ausgibt.
  • Ist v* = 0000 dann gibt die NICHT-ODER-Schaltung 155 den Wert 1 aus und die NICHT-ODER-Schaltung 157 gibt an ihrem Ausgang das Signal 0 aus, so dass die UND-Schaltung 158 den Wert 0000 ausgibt.
  • Sind beide Multiplikatoren v und v* von dem Wert 0000 verschieden, dann liefern die NICHT-ODER-Schaltungen 154 und 155 jeweils den Wert 0. Infolgedessen liefert die NICHT-ODER-Schaltung 157 an ihrem Ausgang den binären Wert 1, so dass die UND-Schaltung 158 an ihrem Ausgang den Wert ausgibt, der an ihrem ersten Eingang anliegt.
  • Mit anderen Worten wird somit anhand der NICHT-ODER-Schaltungen 154, 155 und 157 der undefinierte Fall maskiert, bei dem mindestens einer der Multiplikatoren gleich 0000 ist.
  • Ist der Wert des Multiplikators v* konstant, erfolgt eine Multiplikation von v mit einer Konstanten im Galoisfeld.
  • Konstantenmultiplizierer im Galoisfeld
  • Nachfolgend werden Beispiele für Konstantenmultiplizierern im Galoisfeld gezeigt, die als lineare Schaltungen mittels XOR-Schaltungen ausgeführt sind.
  • Die Multiplikation eines beliebigen Elements mit einer Konstanten wird in der Polynomdarstellung beschrieben. Das Polynom des beliebigen Elements und das Polynom der Konstanten werden modulo des Modularpolynomes des Galoisfelds multipliziert. Die Komponenten des resultierenden Polynoms bilden die Komponenten der Vektordarstellung des Produkts. Die Komponenten der Vektordarstellung des Produktes sind XOR-Verknüpfungen der Koeffizienten wie nachfolgend gezeigt wird.
  • Somit kann der Konstantenmultiplizierer als eine lineare Schaltung beschrieben werden. Hierbei können die Ausgänge des jeweiligen Konstantenmultiplizierers als XOR-Verknüpfungen von Eingängen bestimmt sein.
  • Ein mit einer Konstanten im Galoisfeld zu multiplizierendes beliebiges Element des Galoisfelds GF(2r) wird beispielhaft mit v bezeichnet. In Vektordarstellung gilt: v = v 1 , , v r .
    Figure DE102018131613A1_0239
  • Als Beispiel des Galoisfelds wird GF(24) gewählt. Damit ergibt sich v in seiner Vektordarstellung als ein 4-Bit breiter Vektor (Binärvektor) v = v 1 , v 2 , v 3 , v 4 .
    Figure DE102018131613A1_0240
  • Dabei werden v1 bis v4 als Komponenten von v bezeichnet. Die Konstante, mit der v multipliziert wird, wird mit a bezeichnet, wobei in Vektordarstellung a = a 1 , a 2 , a 3 , a 4
    Figure DE102018131613A1_0241
    und in Exponentialdarstellung a = α i
    Figure DE102018131613A1_0242
    gilt.
  • Das Produkt der Multiplikation wird in Vektordarstellung mit y = y 1 , y 2 , y 3 , y 4
    Figure DE102018131613A1_0243
    angegeben, wobei y1 bis y4 die Komponenten des Produkts y sind.
  • Wie schon ausgeführt wurde, kann eine Multiplikation zweier Elemente in dem Galoisfeld GF(2r) auch unter Verwendung der Polynomdarstellung realisiert werden. Beispielhaft betrachten wir wieder das Galoisfeld GF(24).
  • Nachfolgend soll das Element v mit dem konstanten Element a (beide in Vektordarstellung) multipliziert werden. In Polynomdarstellung gilt: v ( z ) = v 1 + v 2 z + v 3 z 2 + v 4 z 3 ,
    Figure DE102018131613A1_0244
    a ( z ) = a 1 + a 2 z + a 3 z 2 + a 4 z 3 ,
    Figure DE102018131613A1_0245
    y ( z ) = y 1 + y 2 z + y 3 z 2 + y 4 z 3 .
    Figure DE102018131613A1_0246
  • Durch die Multiplikation der Elemente v und a folgt: v ( z ) a ( z )  mod  [ M ( z ) ] = = ( v 1 + v 2 z + v 3 z 2 + v 4 z 3 ) ( a 1 + a 2 z + a 3 z 2 + a 4 z 3 )  mod  [ z 4 + z + 1 ] .
    Figure DE102018131613A1_0247
  • Dabei sind die Komponenten a1 bis a4 binäre Werte, d.h. entweder 0 oder 1.
  • Ist beispielsweise a1 , a2 , a3 , a4 = 1,0,0,0 die Vektordarstellung von α0, dann ist die Polynomdarstellung von α0 gleich 1. Somit gilt in der Polynomdarstellung y 1 + y 2 z + y 3 z 2 + y 4 z 3 = ( v 1 + v 2 z + v 3 z 2 + v 4 z 3 ) ( 1 )  mod  [ z 4 + z + 1 ] = v 1 + v 2 z + v 3 z 2 + v 4 z 3
    Figure DE102018131613A1_0248
    und damit y 1 = v 1 y 2 = v 2 y 3 = v 3 y 4 = v 4 .
    Figure DE102018131613A1_0249
    so dass in diesem Falle der Vektor v unverändert bleibt und y = v gilt. Die Ausgänge des Konstantenmultiplizierers für die Konstante α 0 sind direkt mit den entsprechenden Eingängen verbunden.
  • 16a zeigt eine mögliche Realisierung für einen Konstantenmultiplizierer entsprechend der Gleichung (53) für die Konstante α0 mit der Vektordarstellung a = 1000.
  • Hierbei sind die Eingänge des Konstantenmultiplizierers, die die Komponenten v1 , v2 , v3 , v4 der Vektordarstellung des mit der Konstanten α0 zu multiplierenden Elements v des Galoisfelds tragen, direkt mit den Ausgängen verbunden, die die Komponenten y1 , y2 , y3 , y4 des Produkts y bereitstellen.
  • Als weiteres Beispiel wird die Multiplikation mit der Konstanten α1 betrachtet. Die Vektordarstellung von α1 ist a = 0100 und die Polynomdarstellung von α1 ist z. Somit gilt in Polynomdarstellung: y 1 + y 2 z + y 3 z 2 + y 4 z 3 = ( v 1 + v 2 z + v 3 z 2 + v 4 z 3 ) ( z ) mod  [ z 4 + z + 1 ] = v 1 z + v 2 z 2 + v 3 z 3 + v 4 z 4  mod  [ z 4 + z + 1 ] = v 4 + ( v 1 + v 4 ) z + v 2 z 2 + v 3 z 3 .
    Figure DE102018131613A1_0250
  • Damit ergibt sich: y 1 = v 4 y 2 = v 1 + v 4 y 3 = v 2 y 4 = v 3 .
    Figure DE102018131613A1_0251
  • 16b zeigt eine mögliche Realisierung für den Konstantenmultiplizierers entsprechend der Gleichung (54) für die Konstante α1 mit der Vektordarstellung a = 0100.
  • Der Eingang, der die Komponente v1 führt, ist mit dem ersten Eingang einer XOR-Schaltung 161 verbunden. Der zweite Eingang der XOR-Schaltung 161 ist mit der Komponente v4 verbunden. Die Komponente v4 liegt auch an dem Ausgang an, der die Komponente y1 führt. Der Ausgang der XOR-Schaltung 161 ist mit dem Ausgang verbunden, der die Komponente y2 führt.
  • Der Eingang, der die Komponente v2 führt ist mit dem Ausgang verbunden, der die Komponente y3 führt und der Eingang, der die Komponente v3 führt, ist mit dem Ausgang verbunden, der die Komponente y4 führt.
  • Als zusätzliches Beispiel wird die Multiplikation mit der Konstanten α6 betrachtet. Die Vektordarstellung von α6 ist a = 0011 und die Polynomdarstellung von α6 ist z2 + z3. Somit gilt in Polynomdarstellung: y 1 + y 2 z + y 3 z 2 + y 4 z 3 = ( v 1 + v 2 z + v 3 z 2 + v 4 z 3 ) ( z 2 + z 3 ) mod  [ z 4 + z + 1 ] = v 1 z 2 + v 2 z 3 + v 3 z 4 + v 4 z 5   + v 1 z 3 + v 2 z 4 + v 3 z 5 + v 4 z 6  mod  [ z 4 + z + 1 ] = v 1 z 2 + v 2 z 3 + v 3 ( 1 + z ) + v 4 ( z + z 2 ) + v 1 z 3 + v 2 ( 1 + z ) + v 3 ( z + z 2 ) + v 4 ( z 2 + z 3 ) = v 2 + v 3 + ( v 2 + v 4 ) z + ( v 1 + v 3 ) z 2 + ( v 1 + v 2 + v 4 ) z 3 .
    Figure DE102018131613A1_0252
  • Damit ergibt sich: y 1 = v 2 + v 3 y 2 = v 2 + v 4 y 3 = v 1 + v 3 y 4 = v 1 + v 2 + v 4 .
    Figure DE102018131613A1_0253
  • 16c zeigt eine mögliche Realisierung für den Konstantenmultiplizierer entsprechend der Gleichung (55) für die Konstante α6 mit der Vektordarstellung a = 0011.
  • Hierzu umfasst der Konstantenmultiplizierer fünf XOR-Schaltungen 162, 163, 164, 165, 166.
  • Der Eingang, der die Komponente v1 führt, ist mit dem ersten Eingang der XOR-Schaltung 164 und mit dem ersten Eingang der XOR-Schaltung 165 verbunden. Der Ausgang der XOR-Schaltung 165 ist in den ersten Eingang der XOR-Schaltung 166 geführt. Der Eingang, der die Komponente v2 führt, ist mit dem ersten Eingang der XOR-Schaltung 162, mit dem ersten Eingang der XOR-Schaltung 163 und mit dem zweiten Eingang der XOR-Schaltung 165 verbunden. Der Eingang, der die Komponente v3 führt, ist mit dem zweiten Eingang der XOR-Schaltung 162 und mit dem zweiten Eingang der XOR-Schaltung 164 verbunden. Der Eingang, der die Komponente v4 führt, ist mit dem zweiten Eingang der XOR-Schaltung 163 und mit dem zweiten Eingang der XOR-Schaltung 166 verbunden.
  • Der Ausgang der XOR-Schaltung 162 ist mit dem Ausgang des Konstantenmultiplizierers verbunden, der die Komponente y1 führt. Der Ausgang der XOR-Schaltung 163 ist mit dem Ausgang des Konstantenmultiplizierers verbunden, der die Komponente y2 führt. Der Ausgang der XOR-Schaltung 164 ist mit dem Ausgang des Konstantenmultiplizierers verbunden, der die Komponente y3 führt. Der Ausgang der XOR-Schaltung 166 ist mit dem Ausgang des Konstantenmultiplizierers verbunden, der die Komponente y4 führt.
  • Adressfehlererkennung
  • Eine Option besteht darin, dass die Datenbits eine Adressinformation umfassen. Bei der Adressinformation kann es sich um Adressbits, um Gruppen von Adressbits, um aus Adressbits abgeleitete Bits oder um Gruppen von aus Adressbits abgeleitete Bits handeln. Die Gruppe von Adressbits kann auch Adressbyte bezeichnet werden.
  • Hiermit ist es möglich, auch Adressfehler effizient zu erkennen.
  • Eine Speicheradresse ad kann insbesondere n Adressbits ad0 , ... , adn-1 aufweisen, so dass gilt a d = a d 0 , , a d n 1 ,
    Figure DE102018131613A1_0254
    wobei n beispielsweise größer oder gleich 2 · m ist. Dabei ist m die Anzahl der Bits eines Bytes.
  • Die Speicheradresse ad wird durch eine Transformation Tr in L Adressbytes A d = A d 0 , , A d L 1
    Figure DE102018131613A1_0255
    transformiert, wobei L ≥ 2 gilt. Weiterhin gilt: A d = A d 0 , , A d L 1 = T r ( a d ) = T r ( a d 0 , , a d n 1 ) .
    Figure DE102018131613A1_0256
  • Ein Adressbyte weist hierbei beispielhaft m Bits auf.
  • Die zu speichernden Datenbits bilden Datenbytes U. Aus diesen Datenbytes U und aus den Adressbytes Ad werden Prüfbytes C so bestimmt, dass die Datenbytes, die Adressbytes und die Prüfbytes ein Codewort eines Fehlercodes Cod bilden. Die Prüfbytes C hängen somit sowohl von den Datenbytes U als auch von den Adressbytes Ad ab.
  • Der Fehlercode Cod kann ein Fehlercode sein, der entweder Bytefehler korrigiert oder Bytefehler erkennt und korrigiert. Beispielsweise kann der Fehlercode ein Reed-Solomon-Code oder ein verallgemeinerter Reed-Solomon-Code sein.
  • Beim Schreiben in einen adressierbaren Speicher werden Datenbytes U und entsprechende Prüfbytes C unter der Adresse ad gespeichert. Die Prüfbytes C sind so bestimmt, dass die Datenbytes U, die Adressbytes Ad und die Prüfbytes C ein Codewort des Fehlercodes Cod bilden.
  • Dabei werden die Adressbits ad0 ,..., adn-1 der Schreibadresse ad durch eine Transformation Tr in die L Adressbytes Ad0 , ... ,AdL-1 transformiert.
  • Adressbytes oder Adressbits oder aus den Adressbits abgeleitete Bits werden hierbei beispielhaft nicht abgespeichert, weil die Adresse beim Lesezugriff bereitgestellt wird und damit bei der Rücktransformation entsprechend berücksichtigt werden kann.
  • Beim Lesezugriff wird auf den Speicher unter einer Leseadresse ad' zugegriffen. Dabei werden eventuell fehlerhafte Datenbytes U' und entsprechende eventuell fehlerhafte Prüfbytes C' gelesen. Die Adressbits a d 0 ' , , a d n 1 '
    Figure DE102018131613A1_0257
    der Leseadresse ad' werden beim Lesezugriff bereitgestellt und mittels der Transformation Tr in L Adressbytes Ad' transformiert. Auch hierbei gilt wieder L ≥ 2.
  • Liegt ein Fehler in den Datenbytes vor, so wird der Fehler in mindestens einem der Datenbytes korrigiert, sofern dieser Fehler anhand des Fehlercodes korrigierbar ist (und auch korrigiert werden soll).
  • Liegt ein Fehler in den Prüfbytes vor, ist es eine Option, auch einen Fehler in mindestens einem Prüfbyte zu korrigieren, sofern der Fehler durch den Fehlercode korrigierbar ist.
  • Zusätzlich wird auch ein beliebiger Fehler in den L Adressbytes unter Verwendung des Fehlercodes erkannt.
  • Ein Adressfehler liegt dann vor, wenn der Lesezugriff auf die Speicheradresse ad erfolgen soll, tatsächlich aber auf die Speicheradresse ad' ≠ ad umgelenkt wird. Ein solcher Fehler wird erkannt, da die codierte Speicheradresse ad in diesem Fall nicht gleich der tatsächlich verwendeten Speicheradresse ad' ist. Mit anderen Worten kann also ein Adressfehler festgestellt werden, wenn die beiden Speicheradressen ad und ad' nicht gleich sind.
  • Ist der Fehlercode Cod ein τ-Bytefehler-korrigierender Code mit τ ≥ 2 und sind L = τ Adressbytes vorhanden, in die die fehlerhaften Adressbits durch die Transformation Tr transformiert werden, dann wird ein Adressfehler in folgender Weise erkannt: Wird für wenigstens eines der τ Adressbytes ein Bytefehler-Positionssignal bestimmt, dass einen Bytefehler anzeigt, dann wird der Fehler erkannt. Da der Fehlercode ein τ-Bytefehler korrigierende Code ist, wird jeder Adressfehler erkannt, der mindestens eines der L = τ Adressbytes verfälscht.
  • Die Adressbytes sind Bytes des Fehlercodes, für die Bytefehler-Positionssignale bestimmt werden und keine Byte-Korrekturwerte bestimmt werden müssen.
  • Tritt ein Adressfehler auf, der mindestens eines der Adressbytes verfälscht, dann ist der Adressfehler anhand der Bytefehler-Positionssignale für die Adressbytes eindeutig als Adressfehler identifizierbar.
  • Ist der Fehlercode Cod ein t-Bytefehler-korrigierender und (t + 1)-Bytefehler-erkennender Code mit t ≥ 1 und L = t + 1 ≥ 2 und sind L = t + 1 Adressbytes vorhanden, in die die fehlerhaften Adressbits durch die Transformation Tr transformiert werden, dann kann ein Adressfehler wie folgt erkannt werden:
    1. 1. Wird für wenigstens eines der t + 1 Adressbytes ein Bytefehler-Positionssignal bestimmt, das einen Bytefehler anzeigt, dann wird der Fehler erkannt. Da der Fehlercode ein t-Bytefehler-korrigierender Code ist, wird jeder Adressfehler erkannt, der höchstens t Adressbytes verfälscht.
    2. 2. Werden alle L = t + 1 Adressbytes durch einen Adressfehler verfälscht, dann liegt ein (t + 1)-Bytefehler vor. Da der Fehlercode ein (t + 1)-Bytefehlererkennender Code ist, wird in diesem Fall der (t + 1)-Bytefehler erkannt. Dabei wird nicht zwischen einem möglichen anderen (t + 1)-Bytefehler beispielsweise in den Datenbytes oder den Prüfbytes und einem Fehler in den Adressbytes unterschieden. Da es sich um einen erkennbaren, aber nicht korrigierbaren Fehler handelt, ist eine derartige Unterscheidung auch nicht erforderlich.
  • Die Adressbytes sind, wie ausgeführt, Bytes des Fehlercodes für die Bytefehler-Positionssignale bestimmt werden aber keine Byte-Korrekturwerte bestimmt werden müssen. Es reicht in diesem Fall aus zu erkennen, dass ein Adressfehler, also ein Zugriff auf eine falsche Adresse, vorliegt.
  • Bytefehler-Positionssignale für die L Adressbytes können zumindest teilweise zeitgleich (also zeitlich parallel im weiteren Sinne) bestimmt werden. Entsprechend ist es auch möglich, dass mindestens zwei der Bytefehler-Positionssignale zeitgleich bestimmt werden.
  • Bisher wurde eine Variante beschrieben, bei der die Adressbits ad durch eine Transformation Tr in L Adressbytes Ad transformiert werden und die Adressbits der transformierten Adressbytes nicht in dem Speicher abgelegt werden. Vielmehr wird die Adresse beim Lesen der Daten, beispielsweise von einem Adressgenerator, bereitgestellt.
  • Es ist eine andere Variante, auch die Adressbits (vollständig oder teilweise) in dem Speicher abzuspeichern. Alternativ oder zusätzlich können auch aus den Adressbits abgeleitete Bits, z.B. Paritätsbits der Adressbits, in dem Speicher abgelegt werden.
  • Weiterhin ist es eine Option, ein Byte aus Adressbits und/oder ein Byte basierend auf aus den Adressbits abgeleiteten Bits in dem Speicher abzuspeichern.
  • Ferner ist eine Option, Bits von Adressbytes mit Bits von Datenbytes und/oder mit Bits von Prüfbits logisch zu verknüpfen, beispielsweise durch eine komponentenweise XOR-Operation, und die verknüpften Bits in dem Speicher zu speichern.
  • Die Transformation der Speicheradresse in Adressbytes kann durch unterschiedliche Schaltungen, beispielsweise eine kombinatorische Schaltung oder eine sequentielle Schaltung, beispielsweise unter Verwendung rückgekoppelter Schieberegister oder mit Hilfe einer Verarbeitungseinheit, z.B. einer Prozessoreinheit, eines Mikroprozessors und/oder eines Mikrocontrollers, erfolgen.
  • So ist es eine Option, die Adressbits durch eine lineare Schaltung unter Verwendung von XOR-Gattern in Adressbytes zu transformieren.
  • Auch ist es eine Option, die Adressbits durch eine nichtlineare Schaltung in Form eines Nur-Lese-Speichers (ROM) in Adressbytes zu transformieren.
  • Weiterhin ist es eine Option, die Adressbits unter Verwendung einer Prozessoreinheit, eines Mikroprozessors und/oder eines Mikrocontrollers in Adressbytes zu transformieren.
  • Ferner ist es eine Option, die Adressbits mittels eines Computerprogrammes in Adressbytes zu transformieren.
  • Somit kann also beispielsweise auch ein Verfahren vorgeschlagen werden zum Verarbeiten von Datenbits, so dass eine Erkennung von Adressfehlern ermöglicht wird,
    • - bei dem die Datenbits mittels einer ersten Transformation in erste Datenbytes transformiert werden,
    • - bei dem Adressbits einer ersten Speicheradresse in erste Adressbytes transformiert werden,
    • - bei dem erste Prüfbytes unter Verwendung der ersten Datenbytes und der ersten Adressbytes so bestimmt werden, dass die ersten Datenbytes, die ersten Adressbytes und die ersten Prüfbytes ein Codewort eines Fehlercodes bilden,
    • - bei dem die ersten Datenbytes und die ersten Prüfbytes in einem Speicher gespeichert werden,
    • - bei dem zweite Datenbytes und zweite Prüfbytes an einer vorgegebenen zweiten Speicheradresse aus dem Speicher gelesen werden,
    • - bei dem Adressbits der zweiten Speicheradresse in zweite Adressbytes transformiert werden,
    • - bei dem geprüft wird, ob die zweiten Datenbytes, die zweiten Adressbytes und die zweiten Prüfbytes ein Codewort des Fehlercodes bilden,
    • - bei dem falls kein Codewort vorliegt, ein Bytefehler-Positionssignal für die Adressbytes bestimmt wird.
  • Anhand des Bytefehler-Positionssignals für die Adressbytes kann bestimmt werden, ob ein Adressfehler vorliegt oder nicht.
  • Es ist eine Option, dass Bytefehler-Positionssignale für mindestens zwei Adressbytes bestimmt werden.
  • Es ist eine andere Option, dass mindestens zwei der Bytefehler-Positionssignale zumindest teilweise zeitlich überlappend oder zeitgleich bestimmt werden. Entsprechend ist es auch eine Möglichkeit, dass mindestens zwei der Bytefehler-Positionssignale zeitlich nacheinander bestimmt werden.
  • Ferner ist es eine Option, dass die Transformation der Adressbits in die Adressbytes unter Verwendung einer linearen Transformation erfolgt. Die lineare Transformation kann als eine kombinatorische Schaltung implementiert sein.
  • Hierbei ist es von Vorteil, dass durch die beschriebene Adressfehlererkennung effizient verhindert wird, dass aufgrund einer fehlerhaften Adresse auf die falschen Daten zugegriffen wird, was ansonsten durch eine nachgeordnete Fehlererkennungsschaltung nicht entdeckt würde, da die fälschlicherweise selektierten Daten ja an sich korrekt sind.
  • Durch den hier beschriebenen Ansatz ist es möglich, zusätzlich mehrere Fehler innerhalb einer Gruppe von Adressbits oder Fehler in mehreren Gruppen von Adressbits zu detektieren.
  • Terminologie
  • Nachfolgend sind einige der hierin verwendeten Bezeichnungen und Relationen zur Übersicht wiedergegeben:
    Fehlercode C, Ci
    Block - Fehlercode CFi
    Informationsbits (auch: Nutzdatenbits) u = u1,...,uk
    Codewort x = x1,...,xk
    Prüfbits c1,...,cp
    k = q + p
    Fehlersyndrom s
    Teilsyndrom (Syndromkomponente) s1, s2,...
    Speicherzellenwerte w = w1,...,wn
    Anzahl der Speicherzellen n
    nulltes Byte umfassend m0 Datenbits X 0 = x 1 0 , , x m 0 0
    Figure DE102018131613A1_0258
    (L-1)-tes Byte umfassend mL-1 Datenbits X L 1 = x 1 L 1 , , x m L 1 L 1
    Figure DE102018131613A1_0259
    nulltes Byte von Speicherzellenwerten W 0 = w 1 0 , , w n 0 0
    Figure DE102018131613A1_0260
    Block - Fehlercode CF0
    Länge der Codewörter des Block-Fehlercodes CF0 n0
    (L - 1)-tes Byte von Speicherzellenwerten W L 1 = w 1 L 1 , w n L 1 L 1
    Figure DE102018131613A1_0261
    Block - Fehlercode CFL-1
    Länge der Codewörter des Block-Fehlercodes CFL-1 nL-1
    nulltes Byte von gelesenen Speicherzellenwerten W 0 ' = w 1 0 ' , , w n 0 0 '
    Figure DE102018131613A1_0262
    Bytes des Codeworts X = X0,X1,...XL-1
    Bytes gelesener (ggf. fehlerhafter) Datenbits X’ = X0’,X1’,...XL-1
    Fehlersignale E0 bis EL-1
    kombiniertes Fehlersignal E
    Byte- Korrekturwerte e 0 X , e 1 X , , e L 1 X
    Figure DE102018131613A1_0263
    korrigierte Bytes X c o r = X c o r 0 , X c o r 1 , , X c o r L 1
    Figure DE102018131613A1_0264
    Prüfbits für die Speicherzellenwerte Pr
    Speicherzellenwerte für zu schreibende Prüfbits W[Pr]
    gelesene Speicherzellenwerte der Püfbits W[Pr]’
    Byte- Korrekturwerte e 0 W , e 1 W , , e L 1 W
    Figure DE102018131613A1_0265
    korrigierte Speicherzellenwerte W c o r 0 , W c o r 1 , , W c o r L 1
    Figure DE102018131613A1_0266
  • Bezugszeichenliste
  • 11
    Speicher
    12
    Transformationsschaltung
    130 bis 13L-1
    Fehlererkennungsschaltung
    21
    Kodiereinheit
    22
    Transformationsschaltung
    23
    Speicher
    240 bis 24L-1
    Fehlererkennungsschaltung
    25
    inverse Transformationsschaltung
    26
    Byte-Korrekturwertbildner
    270 bis 27L-1
    XOR-Schaltung
    31
    Transformationsschaltung
    32
    Prüfbitbildner
    33
    Prüfbittransformationsschaltung
    34
    Speicher
    350 bis 35L-1
    Fehlererkennungsschaltung
    36
    inverse Prüfbittransformationsschaltung
    37
    Byte-Korrekturwertbildner
    380 bis 38L-1
    XOR-Schaltung
    39
    inverse Transformationsschaltung
    40
    Fehlererkennungsschaltung
    41
    Fehlererkennungsschaltung
    510 bis 51L-1
    Transformationsschaltung (pro Byte)
    520 bis 52L-1
    inverse Transformationsschaltung (pro Byte)
    61
    Fehlererkennungsschaltung
    71
    Fehlererkennungsschaltung
    810 bis 81L-1
    NICHT-ODER-Schaltung
    820 bis 82L-1
    UND-Schaltung
    83
    ODER-Schaltung
    910
    Eingang
    911
    Eingang
    912
    Eingang
    913
    Eingang
    914
    Eingang
    91
    Konstantenmultiplizierer
    92
    XOR-Schaltung
    93
    Galoisfeld-Multiplizierer
    94
    Konstantenmultiplizierer
    95
    XOR-Schaltung
    96
    Invertierer
    97
    Konstantenmultiplizierer
    98
    XOR-Schaltung
    99
    Konstantenmultiplizierer
    915
    Teilschaltung
    916
    Teilschaltung
    917
    Addierer
    918
    kombinatorische Schaltung
    101
    Byte-Korrekturwertbildner
    102
    Konstantenmultiplizierer
    103
    XOR-Schaltung
    104
    UND-Schaltung
    105
    XOR-Schaltung
    106
    Eingangsleitung
    107
    Eingangsleitung
    111
    Byte-Korrekturwertbildner
    112
    Byte-Korrekturwertbildner
    113
    Byte-Korrekturwertbildner
    114
    XOR-Schaltung
    115
    XOR-Schaltung
    116
    XOR-Schaltung
    121
    kombinatorische Schaltung
    122
    Invertierer
    1314
    XOR-Schaltung
    1317
    XOR-Schaltung
    1318
    XOR-Schaltung
    1324
    XOR-Schaltung
    1325
    XOR-Schaltung
    1328
    XOR-Schaltung
    1329
    XOR-Schaltung
    1335
    XOR-Schaltung
    1336
    XOR-Schaltung
    1338
    XOR-Schaltung
    1346
    XOR-Schaltung
    1347
    XOR-Schaltung
    1349
    XOR-Schaltung
    13110
    XOR-Schaltung
    13112
    XOR-Schaltung
    13113
    XOR-Schaltung
    13114
    XOR-Schaltung
    13210
    XOR-Schaltung
    13211
    XOR-Schaltung
    13212
    XOR-Schaltung
    13310
    XOR-Schaltung
    13311
    XOR-Schaltung
    13312
    XOR-Schaltung
    13313
    XOR-Schaltung
    13211
    XOR-Schaltung
    13411
    XOR-Schaltung
    13412
    XOR-Schaltung
    13413
    XOR-Schaltung
    13414
    XOR-Schaltung
    1410
    Eingangsleitung
    1411
    Eingangsleitung
    1412
    Eingangsleitung
    1413
    Eingangsleitung
    142
    Konstantenmultiplizierer
    143
    XOR-Schaltung
    144
    NICHT-ODER-Schaltung
    145
    UND-Schaltung
    146
    XOR-Schaltung
    147
    XOR-Schaltung
    148
    UND-Schaltung
    149
    Invertierer
    151
    Transformationsschaltung
    152
    Transformationsschaltung
    153
    Addierschaltung
    154
    NICHT-ODER-Schaltung (NOR-Schaltung)
    155
    NICHT-ODER-Schaltung (NOR-Schaltung)
    156
    Transformationsschaltung
    157
    NICHT-ODER-Schaltung (NOR-Schaltung)
    158
    UND-Schaltung
    161
    XOR-Schaltung
    162
    XOR-Schaltung
    163
    XOR-Schaltung
    164
    XOR-Schaltung
    165
    XOR-Schaltung
    166
    XOR-Schaltung
  • Literaturverzeichnis:
    1. [1] Fujiwara, E.: „Code Design for Dependable Systems“, Wiley 2006, Seite 65
    2. [2] Lin, S.; Costello, D.: „Error Control Coding“, Prentice Hall 1983, Seiten 32 und 33
    3. [3] Okano, H.; Imai, H.: „A Construction Method for High-Speed Decoders Using ROM's for Bose-Chaudhuri-Hocquenghem and Reed-Solomon Codes", Trans. Computers, C-36, Seiten 1165 bis 1171, 1987
    4. [4] Rao, T.; Fujiwara, E.: „Error Control codes for Computer Systems", Prentice Hall 1989, Seiten 222 bis 226
  • 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
    • Okano, H.; Imai, H.: „A Construction Method for High-Speed Decoders Using ROM's for Bose-Chaudhuri-Hocquenghem and Reed-Solomon Codes“, Trans. Computers, C-36, Seiten 1165 bis 1171, 1987 [0511]
    • Rao, T.; Fujiwara, E.: „Error Control codes for Computer Systems“, Prentice Hall 1989, Seiten 222 bis 226 [0511]

Claims (26)

  1. Verfahren zum Verarbeiten von Datenbits, - bei dem die Datenbits mittels einer ersten Transformation in erste Datenbytes transformiert werden, - bei dem die ersten Datenbytes in einem Speicher gespeichert werden, - bei dem zweite Datenbytes aus dem Speicher gelesen werden, - bei dem jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist, - bei dem pro zweitem Datenbyte ein Fehlersignal bestimmt wird, das angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.
  2. Verfahren nach Anspruch 1, bei dem die Datenbits in erste Datenbytes transformiert werden mittels des mindestens einen Block-Fehlercodes.
  3. Verfahren nach Anspruch 2, bei dem der mindestens eine Block-Fehlercode ein m-aus-n-Code ist.
  4. Verfahren nach einem der vorhergehenden Ansprüche, bei dem basierend auf dem mindestens einen Fehlersignal eine Fehlerkorrektur durchgeführt wird.
  5. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Datenbits mittels eines Fehlercodes codiert wurden.
  6. Verfahren nach Anspruch 5, bei dem die zweiten Datenbytes in inverse zweite Datenbytes transformiert werden mittels einer zweiten Transformation, die zu der ersten Transformation invers ist.
  7. Verfahren nach Anspruch 6, bei dem anhand des Fehlersignals eine Korrektur des inversen zweiten Datenbytes mittels des Fehlercodes erfolgt, sofern das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  8. Verfahren nach einem der Ansprüche 6 oder 7, bei dem mindestens ein inverses zweites Datenbyte anhand des Fehlersignals mittels des Fehlercodes korrigiert wird, falls das Fehlersignal anzeigt, dass das dem inversen zweiten Datenbyte zugrundeliegende zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  9. Verfahren nach einem der Ansprüche 6 bis 8, bei dem, falls Fehlersignale ein fehlerhaftes i-tes und ein fehlerhaftes j-tes zweites Datenbyte anzeigen, ein Byte-Korrekturwert ei für ein i-tes inverses zweites Datenbyte X1 ' bestimmt wird in Abhängigkeit von Teilsyndromen s1 und s2 eines Fehlersyndroms, der Byte-Position i und einer komponentenweisen XOR-Summe αi + αj, wobei α das erzeugende Element des verwendeten Galoisfelds ist.
  10. Verfahren nach Anspruch 9, bei dem der Byte-Korrekturwert ei zur Korrektur des i-ten inversen zweiten Datenbytes X1 ' so bestimmt ist, dass gilt: e i = s 1 + s 2 + α i s 1 α i + α j .
    Figure DE102018131613A1_0267
  11. Verfahren nach Anspruch 9, bei dem der Byte-Korrekturwert ei bestimmt ist gemäß: e i = s 1 + s 2 Σ 1 + α i s 1 Σ 1 ,
    Figure DE102018131613A1_0268
    wobei Σ = E O α 0 + E 1 α 1 + + E L 1 α L 1
    Figure DE102018131613A1_0269
    gilt, und wobei E0, E1,... ,EL_1 die Block-Fehlersignale für die (L - 1) zweiten Datenbytes bezeichnen.
  12. Verfahren nach einem der Ansprüche 9 bis 11, bei dem mindestens zwei Byte-Korrekturwerte parallel bestimmt werden, wobei mindestens ein Byte-Korrekturwert für ein inverses zweites Datenbyte bestimmt wird, das korrekt ist und keine Korrektur erfordert.
  13. Verfahren nach einem der vorhergehenden Ansprüche, - bei dem die ersten Datenbytes und erste Prüfbits, die basierend auf den ersten Datenbytes bestimmt werden, in dem Speicher gespeichert werden, - bei dem zweite Datenbytes und zweite Prüfbits aus dem Speicher gelesen werden, - bei dem anhand des Fehlersignals und anhand der zweiten Prüfbits eine Korrektur des zweiten Datenbytes erfolgt, sofern das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  14. Verfahren nach Anspruch 13, bei dem die korrigierten zweiten Datenbytes in inverse korrigierte zweite Datenbytes transformiert werden mittels einer zweiten Transformation, die zu der ersten Transformation invers ist.
  15. Verfahren nach einem der Ansprüche 13 oder 14, bei dem mindestens zwei Byte-Korrekturwerte für mindestens zwei zweite Datenbytes parallel bestimmt werden, wobei mindestens ein Byte-Korrekturwert für ein zweites Datenbyte bestimmt wird, das korrekt ist und keine Korrektur erfordert.
  16. Verfahren nach einem der vorhergehenden Ansprüche, bei dem eine Fehlerkorrektur von mindestens zwei Gruppenfehlern oder von einem Fehler an unbekannter Byte-Position durchgeführt wird.
  17. Verfahren nach Anspruch 16, bei dem dann, wenn das Fehlersignal anzeigt, dass ein bestimmtes zweites Datenbyte kein Codewort des entsprechenden Block-Fehlercodes ist, mindestens ein fehlerhaftes Bit dieses zweiten Datenbytes unter Berücksichtigung des Gruppenfehlers korrigiert wird.
  18. Verfahren nach einem der Ansprüche 13 bis 17, bei dem fehlerhafte zweite Datenbytes parallel oder im Wesentlichen parallel korrigiert werden.
  19. Verfahren nach einem der vorhergehenden Ansprüche, bei dem weder das erste Datenbyte noch das zweite Datenbyte jeweils mehr als 12 Bits umfasst.
  20. Verfahren nach einem der vorhergehenden Ansprüche, bei dem mindestens zwei Fehlersignale für mindestens zwei der zweiten Datenbytes parallel oder im Wesentlichen parallel bestimmt werden.
  21. Vorrichtung zum Verarbeiten von Datenbits, - umfassend eine Verarbeitungseinheit, wobei die Verarbeitungseinheit eingerichtet ist - zum Transformieren der Datenbits mittels einer ersten Transformation in erste Datenbytes, - zum Speichern der ersten Datenbytes in einem Speicher, - zum Lesen zweiter Datenbytes aus dem Speicher, wobei jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist, - zum Bestimmen eines Fehlersignals pro zweitem Datenbyte, wobei das Fehlersignal angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.
  22. Vorrichtung nach Anspruch 21, wobei der Speicher mindestens eine der folgenden Komponenten 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, - ein CB-RAM, - einen Multibit-Speicher, - einen Multilevel-Speicher.
  23. Vorrichtung nach einem der Ansprüche 21 oder 22, bei dem der Speicher Teil der Vorrichtung ist oder separat zu dieser ausgeführt ist.
  24. Vorrichtung nach einem der Ansprüche 21 bis 23, wobei die Verarbeitungseinheit ferner eingerichtet ist, die zweiten Datenbytes in inverse zweite Datenbytes zu transformieren mittels einer zweiten Transformation, die zu der ersten Transformation invers ist.
  25. Vorrichtung nach einem der Ansprüche 21 bis 24, wobei die Verarbeitungseinheit ferner eingerichtet ist, - zum Speichern der ersten Datenbytes und erster Prüfbits, wobei die ersten Prüfbits basierend auf den ersten Datenbytes bestimmt werden, - zum Lesen der zweiten Datenbytes und zweiter Prüfbits aus dem Speicher, - zur Korrektur desjenigen zweiten Datenbytes anhand des Fehlersignals und anhand der zweiten Prüfbits, sofern das zweite Datenbyte kein Codewort des Block-Fehlercodes ist.
  26. Vorrichtung zum Verarbeiten von Datenbits, umfassend - Mittel zum Transformieren der Datenbits mittels einer ersten Transformation in erste Datenbytes, - Mittel zum Speichern der ersten Datenbytes in einem Speicher, - Mittel zum Lesen zweiter Datenbytes aus dem Speicher, wobei jedes der zweiten Datenbytes im fehlerfreien Fall ein Codewort eines Block-Fehlercodes ist, - Mittel zum Bestimmen eines Fehlersignals pro zweitem Datenbyte, wobei das Fehlersignal angibt, ob dieses zweite Datenbyte ein Codewort ist oder nicht.
DE102018131613.5A 2018-04-10 2018-12-10 Fehlererkennung mittels Gruppenfehler Pending DE102018131613A1 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2019074125A JP2019186939A (ja) 2018-04-10 2019-04-09 グループ誤りを用いる誤り検出
US16/380,089 US10903859B2 (en) 2018-04-10 2019-04-10 Error detection by means of group errors
JP2023216831A JP2024029084A (ja) 2018-04-10 2023-12-22 グループ誤りを用いる誤り検出

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE102018108446.3 2018-04-10
DE102018108446 2018-04-10

Publications (1)

Publication Number Publication Date
DE102018131613A1 true DE102018131613A1 (de) 2019-10-10

Family

ID=67991460

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018131613.5A Pending DE102018131613A1 (de) 2018-04-10 2018-12-10 Fehlererkennung mittels Gruppenfehler

Country Status (3)

Country Link
US (1) US10903859B2 (de)
JP (2) JP2019186939A (de)
DE (1) DE102018131613A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102020120719A1 (de) 2020-08-05 2022-02-10 Infineon Technologies Ag Zugriff auf einen speicher
DE102022101798B3 (de) 2022-01-26 2023-07-20 Infineon Technologies Ag Fehlerverarbeitung
US20240028247A1 (en) * 2022-07-19 2024-01-25 Micron Technology, Inc. Efficient error signaling by memory

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59201557A (ja) * 1983-04-28 1984-11-15 Matsushita Electric Ind Co Ltd 送受信システム
JPH1145188A (ja) * 1997-07-25 1999-02-16 Sony Corp エラー訂正装置およびその方法、ならびに、ディジタル信号再生装置およびその方法
KR100265769B1 (ko) * 1998-05-19 2000-09-15 윤종용 광 디스크 시스템에서의 에러 정정 장치 및 그 에러 정정 방법
JP4048617B2 (ja) * 1998-09-07 2008-02-20 ソニー株式会社 誤り訂正符号の復号方法および復号装置
US6615387B1 (en) * 1998-09-22 2003-09-02 Seagate Technology Llc Method and apparatus for error detection
KR100917883B1 (ko) * 2003-02-25 2009-09-16 삼성전자주식회사 에러 정정을 위한 에러 플래그 생성 장치 및 그 방법
US7861141B2 (en) * 2005-10-21 2010-12-28 Mediatek Inc. Method and device for error analysis of optical disc
US7739434B2 (en) * 2008-01-11 2010-06-15 International Business Machines Corporation Performing a configuration virtual topology change and instruction therefore
JP2010257523A (ja) * 2009-04-24 2010-11-11 Panasonic Corp データテープ制御装置
US8605489B2 (en) * 2011-11-30 2013-12-10 International Business Machines Corporation Enhanced data retention mode for dynamic memories
US20140013181A1 (en) * 2012-07-04 2014-01-09 Lisa Fredrickson Error Correction Coding Using Large Fields
JP6209880B2 (ja) * 2013-07-04 2017-10-11 富士通株式会社 データ管理装置、及びデータ管理装置の制御方法
US9594642B1 (en) * 2016-01-05 2017-03-14 International Business Machines Corporation Iterative decode and post-decode microcode cut and paste optimization

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Okano, H.; Imai, H.: „A Construction Method for High-Speed Decoders Using ROM's for Bose-Chaudhuri-Hocquenghem and Reed-Solomon Codes", Trans. Computers, C-36, Seiten 1165 bis 1171, 1987
Rao, T.; Fujiwara, E.: „Error Control codes for Computer Systems", Prentice Hall 1989, Seiten 222 bis 226

Also Published As

Publication number Publication date
JP2024029084A (ja) 2024-03-05
US20190312601A1 (en) 2019-10-10
US10903859B2 (en) 2021-01-26
JP2019186939A (ja) 2019-10-24

Similar Documents

Publication Publication Date Title
DE102011085602B4 (de) Vorrichtung und Verfahren zum Korrigieren zumindest eines Bitfehlers in einer codierten Bitsequenz
DE102013215055B4 (de) Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
DE102017125617B4 (de) Bestimmung und Verwendung von Bytefehlerpostionssignalen
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE102015113414B4 (de) Fehlerkorrektur unter Verwendung von WOM-Codes
DE2060643B2 (de) Schaltungsanordnung zur Korrektur von Einzelfehlern
DE102018131613A1 (de) Fehlererkennung mittels Gruppenfehler
EP0400179B1 (de) Verfahren und Vorrichtung zum internen Paralleltest von Halbleiterspeichern
DE102006005817B4 (de) Fehlererkennungsvorrichtung für einen Adressdecoder und Vorrichtung zur Fehlererkennung für einen Adressdecoder
DE102005022107B9 (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
DE102020110787B3 (de) Schaltung und verfahren zum kodieren oder dekodieren eines datenworts
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE102013219088B9 (de) Schaltungsanordnung und Verfahren zur Realisierung von Prüfbitkompaktierung für Cross-Parity-Codes
DE102019113970B4 (de) Erkennung von adressfehlern
DE102021109391B3 (de) Multibytefehler-Erkennung
DE102018126685B3 (de) Verarbeitung von Daten
DE102015118668B4 (de) Fehlerkorrektur
DE102015121646B4 (de) Fehlerkorrektur
DE102022101798B3 (de) Fehlerverarbeitung
DE102021123727B4 (de) Bytefehlerkorrektur
EP1579230B1 (de) Vorrichtung und verfahren zur bildung einer signatur
DE102020120719A1 (de) Zugriff auf einen speicher
DE102013112020B4 (de) Verfahren und Vorrichtung zum Erkennen von Bitfehlern
DE102022111624B4 (de) Fehlerkorrektur mit schneller Syndromberechnung

Legal Events

Date Code Title Description
R012 Request for examination validly filed