DE102013215055A1 - Schaltungsanordnung und Verfahren mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern - Google Patents

Schaltungsanordnung und Verfahren mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern Download PDF

Info

Publication number
DE102013215055A1
DE102013215055A1 DE102013215055.5A DE102013215055A DE102013215055A1 DE 102013215055 A1 DE102013215055 A1 DE 102013215055A1 DE 102013215055 A DE102013215055 A DE 102013215055A DE 102013215055 A1 DE102013215055 A1 DE 102013215055A1
Authority
DE
Germany
Prior art keywords
code
memory
word
codeword
error
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102013215055.5A
Other languages
English (en)
Other versions
DE102013215055B4 (de
Inventor
Günther Nieß
Sven Hosp
Michael Gössel
Klaus Oberländer
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 DE102013215055.5A priority Critical patent/DE102013215055B4/de
Priority to CN201410371682.7A priority patent/CN104376877B/zh
Priority to US14/447,806 priority patent/US9646716B2/en
Publication of DE102013215055A1 publication Critical patent/DE102013215055A1/de
Application granted granted Critical
Publication of DE102013215055B4 publication Critical patent/DE102013215055B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/10Test algorithms, e.g. memory scan [MScan] algorithms; Test patterns, e.g. checkerboard patterns 
    • 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/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/263Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Detection And Correction Of Errors (AREA)
  • Sorting Of Articles (AREA)

Abstract

Eine Schaltungsanordnung zur Erkennung von Speicherfehlern wird bereitgestellt. Die Schaltungsanordnung umfasst einen Speicher (11) und eine Fehlererkennungsschaltung (12). Die Schaltungsanordnung ist dafür ausgebildet, ein Codewort eines fehlererkennenden Codes (C) oder ein in einer Teilmenge (M) von Bits invertiertes Codewort in dem Speicher (11) an einem Speicherort zu speichern und ein Datenwort aus dem Speicher (11) von dem Speicherort auszulesen. Die Fehlererkennungsschaltung (12) ist dafür ausgebildet, für den Fall, dass ein anliegendes Steuersignal einen ersten Wert annimmt, einen Speicherfehler anzuzeigen, wenn dass Datenwort kein Codewort des fehlererkennenden Codes (C) ist. Ferner ist die Fehlererkennungsschaltung (12) dafür ausgebildet, für den Fall, dass das anliegende Steuersignal einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist, und an den Speicherort das in der Teilmenge (M) von Bits invertierte Codewort geschrieben wurde, anhand des aus dem Speicher (11) ausgelesenen Datenworts zu bestimmen, ob ein Speicherfehler vorliegt, wenn das in der Teilmenge (M) von Bits invertierte Codewort kein Codewort des fehlererkennenden Codes (C) ist.

Description

  • Die Anmeldung betrifft Fehlererkennung, insbesondere Fehlererkennung in Halbleiterspeichern, und, im Speziellen, eine Schaltungsanordnung und ein Verfahren mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern.
  • Auf Grund des zunehmenden hohen Integrationsgrades von Halbleiterspeichern nimmt die Häufigkeit von Fehlern in Speichern zu.
  • Halbleiterspeicher werden zunehmend auch in sicherheitskritischen Anwendungsbereichen, wie etwa im Automobilbereich verwendet, in denen eine korrekte Funktionsweise erforderlich ist.
  • Um zu erreichen, dass die eingesetzten Speicher möglichst fehlerfrei sind, wird üblicherweise vor ihrem Einsatz ein Off-line Test durchgeführt. Dabei wird eine spezielle Testfolge in den Halbleiterspeicher eingegeben und die tatsächliche Testantwort wird mit der erwarteten Testantwort verglichen. Wird eine Nichtübereinstimmung von tatsächlicher und erwarteteter Testantwort festgestellt, ist der Speicher fehlerhaft. In dem zu testenden Speicher werden dabei die einzelnen Speicherzellen auf eine bestimmte Weise beschrieben und gelesen und die ausgelesenen Werte werden oftmals zu einer Signatur akkumuliert. Verschiedene Speichertests sind dem Fachmann bekannt. Im Off-line Test können nur Fehler gefunden werden, die permanent vorhanden sind.
  • Im laufenden Betrieb kann eine On-line Fehlererkennung und Fehlerkorrektur angewandt werden.
  • Zur On-line Fehlererkennung und On-line Fehlerkorrektur werden im laufenden Betrieb fehlerkorrigierende Codes angewandt, um Fehler zu korrigieren und zu erkennen. Sind k Bit breite Daten u = u1, ..., uk abzuspeichern, dann werden sie zunächst als ein n Bit breites Codewort v = v1, ..., vn eines fehlerkorrigierenden Codes C codiert und in codierter Form unter einer Adresse a in den Speicher geschrieben. Aus dem Speicher wird ein n-Bit Wort v' = v ' / 1, v ' / 2, ..., v ' / n, unter der Adresse a ausgelesen. Auf Grund eines Fehlers kann sich dabei v' von v unterscheiden. Unterscheiden sich v und v' in B Bits, dann liegt ein B-Bit Fehler vor. Unter Verwendung des Codes C können dann B Fehler korrigiert werden, wenn 2·B < d ist, wobei d der Codeabstand des Codes C ist. Können alle Fehler in v' korrigiert werden, dann wirkt sich der entsprechende Fehler, dass anstelle des korrekten Codewortes v das fehlerhafte Wort v' ausgelesen wurde, auf die Funktionsweise nicht aus.
  • Wird der Code C nur zur Fehlererkennung verwendet, dann können d – 1 Fehler erkannt werden. Wird ein Code zur Fehlererkennung und nicht zur Fehlerkorrektur verwendet, dann wird der Code fehlererkennender Code genannt.
  • Die On-line Fehlererkennung und die On-line Fehlerkorrektur dient zum Erkennen und Korrigieren von nicht permanenten Fehlern, sogenannten transienten oder flüchtigen Fehlern, obwohl natürlich auch permanente Fehler erkannt und korrigiert werden können.
  • Ist ein permanenter 1-Bit Fehler, beispielsweise ein Stuck-at-Fehler, nach dem Off-line Test entstanden und kann der Code C 1-Bit Fehler korrigieren, so wirkt sich der permanente 1-Bit Fehler auf das Verhalten nicht aus. Tritt aber nun ein flüchtiger 1-Bit Fehler zusätzlich auf, dann kann ein 2-Bit Fehler vorliegen, den der Code C nun nicht mehr richtig korrigieren kann. Der entstandene permanente 1-Bit Fehler führt dazu, dass der Code C nicht mehr ausreichend ist, um flüchtige 1-Bit Fehler zu korrigieren.
  • Um eine hohe Zuverlässigkeit zu erreichen, ist es daher sinnvoll, in gewissen zeitlichen Abständen einen Speicher auf permanente Fehler zu testen. Wendet man dann einen üblichen Off-line Test an, so sind bestimmte Testfolgen in den Speicher einzugeben und die entsprechenden Testantworten auszuwerten. Nachteilig ist hier insbesondere, dass die Daten, die in dem Speicher aktuell gespeichert sind, durch die Daten der Testfolge im Off-line Test zu überschreiben sind, sodass die aktuell gespeicherten Daten, die weiterhin verwendet werden sollen, ausgelesen und zwischengespeichert werden müssen.
  • So sollten z. B. SRAM Speicher in komplizierten Mikrocontroller Produkten in sicherheitskritischen Anwendungen in häufigen Zeiträumen während der Applikation getestet werden, um harte neu entstehende Fehler und softe Fehler im Speicher zu detektieren, zu korrigieren und zu registrieren. Dies sollte in kurzen regelmäßigen Zeitscheiben passieren. Rechenzeit, die hierfür benötigt wird, steht der eigentlichen Anwendung nicht mehr zur Verfügung. Je weniger Zeit die regelmäßigen Tests der Speicher erfordern, umso mehr Zeit und Performance steht für die eigentliche Anwendung zur Verfügung.
  • Ein Ansatz wäre, dass Module, deren SRAM (statischer Speicher mit wahlfreiem Zugriff; englisch: Static Random-Access Memory) getestet werden sollen, erst einmal funktional abgeschaltet werden, dass dann der Speicher über den Bus zugreifbar gemacht wird, dass dann der eigentliche Anwendungsinhalt in einen anderen noch freien Speicher umgelagert (umkopiert) wird und dass dann der zu testende Speicher mit einem vordefinierten Algorithmus und/oder mit einer vordefinierten physikalischen Belegung getestet wird. Nach dem Test wird der eigentliche Inhalt wieder zurückkopiert.
  • Das Umlagern der Original-Anwenderdaten über einen Bus ist sehr zeitraubend. Zudem ist ein derartiger Test, der häufig über die CPU (Hauptprozessor; englisch: Central Processing Unit) durchgeführt wird, oftmals auch nicht hinreichend geeignet, die kritischen Bedingungen während des aktiven Betriebes zu simulieren, da die CPU über einen langsamen Bus mit Wartezyklen auf den Speicher während des Testes zugreift, also mit Zyklen ohne Zugriff auf den Speicher, während das Modul, das den Speicher benutzt unter Umständen in jedem Zyklus, oder in mehreren aufeinanderfolgende Zyklen auf den Speicher zugreift.
  • Aufgabe der vorliegenden Erfindung ist es, verbesserte Konzepte zur Fehlererkennung bereitzustellen.
  • Eine Schaltungsanordnung nach Anspruch 1, eine Schaltungsanordnung nach Anspruch 19, eine Schaltungsanordnung nach Anspruch 21, eine Schaltungsanordnung nach Anspruch 23, ein Verfahren nach Anspruch 25, ein Verfahren nach Anspruch 26 und ein Computerprogramm nach Anspruch 27 wird bereitgestellt.
  • Eine Schaltungsanordnung zur Erkennung von Speicherfehlern wird bereitgestellt. Die Schaltungsanordnung umfasst einen Speicher und eine Fehlererkennungsschaltung. Die Schaltungsanordnung ist dafür ausgebildet, ein Codewort eines fehlererkennenden Codes (C) oder ein in einer Teilmenge (M) von Bits invertiertes Codewort in dem Speicher an einem Speicherort zu speichern und ein Datenwort aus dem Speicher von dem Speicherort auszulesen. Die Fehlererkennungsschaltung ist dafür ausgebildet, für den Fall, dass ein anliegendes Steuersignal einen ersten Wert annimmt, einen Speicherfehler anzuzeigen, wenn dass Datenwort kein Codewort des fehlererkennenden Codes (C) ist. Ferner ist die Fehlererkennungsschaltung dafür ausgebildet, für den Fall, dass das anliegende Steuersignal einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist, und an den Speicherort das in der Teilmenge (M) von Bits invertierte Codewort geschrieben wurde, anhand des aus dem Speicher ausgelesenen Datenworts zu bestimmen, ob ein Speicherfehler vorliegt, wenn das in der Teilmenge (M) von Bits invertierte Codewort kein Codewort des fehlererkennenden Codes (C) ist.
  • Gemäß einer Ausführungsform kann die Schaltungsanordnung ferner n Daten-Eingangsleitungen, und n Daten-Ausgangsleitungen umfassen, wobei die Schaltungsanordnung ausgebildet sein kann, von dem Speicherort des Speichers das Datenwort v' = v ' / 1, ... v ' / n , das n-stellig ist, auf den n Daten-Ausgangsleitungen auszulesen, wobei in den Speicherort des Speichers vor dem Auslesen dieses Datenwortes das auf den n Daten-Eingangsleitungen anliegende Codewort vi-1 = v i-1 / 1, ..., v i-1 / n des fehlererkennenden Codes (C) an diesen Speicherort geschrieben wurde, oder wobei in den Speicherort des Speichers ein Wort v i-1 / M geschrieben wurde, das n-stellig ist, wobei das Wort v i-1 / M durch Invertieren der Bits der Teilmenge (M) von Bits, wobei die Teilmenge (M) von Bits eine nichtleere Teilmenge (M) von Bits ist, aus einem Codewort vi-1 des Codes (C) gebildet ist, wobei, nachdem das Wort vi-1 oder das Wort v i-1 / M an einen Speicherort in den Speicher geschrieben wurde, kein weiteres Datenwort an diesen Speicherort in den Speicher geschrieben wurde, bis das Datenwort vi von diesem Speicherort aus dem Speicher gelesen wurde.
  • In einer Ausführungsform kann der Code (C) einen Codeabstand d, d ≥ 2, aufweisen, wobei i ≥ 2 und n ≥ 4 sind.
  • Gemäß einer Ausführungsform kann die Fehlererkennungsschaltung FEm dafür ausgebildet sein, in Abhängigkeit von dem Wert des Steuersignals (mod) dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi ein n-stelliges Codewort vi-1 des Codes (C) in den Speicher geschrieben wurde, einen Fehler anzuzeigen, wenn das ausgelesene Datenwort vi kein Codewort des Codes (C) ist; wobei die Fehlererkennungsschaltung FEm dafür ausgebildet sein kann, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher geschrieben wurde, wenn v i-1 / M Codewort des Codes (C) ist, und wenn M nicht alle n Bits umfasst, einen Fehler anzuzeigen, wenn das aus dem Speicher ausgelesene Wort vi kein Codewort des Codes (C) ist, wobei die Fehlererkennungsschaltung FEm dafür ausgebildet sein kann, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher geschrieben wurde, wenn v i-1 / M kein Codewort des Codes (C) ist, einen Fehler anzuzeigen, wenn das aus dem aus dem Speicher ausgelesenen Wort vi gebildete Wort v i / M , das aus vi dadurch gebildet wird, dass die Bits, die zu der Teilmenge M gehören, invertiert sind, kein Codewort des Codes (C) ist, wobei das Steuersignal mod den ersten Wert annimmt, wenn vor dem Auslesen des Datenwortes ein Codewort vi-1 des Codes (C) eingegeben wurde, oder wenn vor dem Auslesen des Datenwortes ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge M gehören, aus einem Codewort des Codes (C) gebildet wird, in den Speicher eingegeben wurde und wenn das Wort v i-1 / M ein Codewort des Codes (C) ist, wobei dann wenn v i-1 / M ein Codewort des Codes (C) ist, M eine echte Teilmenge aller Bits ist, und wobei das Steuersignal mod den zweiten Wert, der von dem ersten Wert verschieden ist, annimmt, wenn vor dem Auslesen des Datenwortes vi ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge M gehören, aus einem Codewort des Codes (C) gebildet wird, in den Speicher eingegeben wurde und das Wort v i-1 / M kein Codewort des Codes (C) ist.
  • In einer Ausführungsform kann die nichtleere Teilmenge M aus allen n Bits bestehen und
    Figure DE102013215055A1_0002
    gilt.
  • Gemäß einer Ausführungsform kann die nichtleere Teilmenge M jedes zweite Bit umfassen und entweder kann
    Figure DE102013215055A1_0003
    oder
    Figure DE102013215055A1_0004
    gelten.
  • Gemäß einer Ausführungsform kann der Speicher ein adressierbarer Speicher sein, der einen Adresseneingang aufweist, wobei der Speicherort, an den gechrieben wird und der Speicherort, von dem gelesen wird, durch eine Adresse bestimmt ist.
  • In einer Ausführungsform kann der Speicher ein RAM (Random Access Memory) sein.
  • Gemäß einer Ausführungsform kann der Speicher ein MRAM (Magnetoresistive RAM) sein.
  • In einer Ausführungsform kann der Speicher ein Registerarray sein.
  • Gemäß einer Ausführungsform kann der Speicher ein Register mindestens der Länge n des Code (C) sein.
  • In einer Ausführungsform kann kann das Register aus Flip-Flops aufgebaut sein.
  • Gemäß einer Ausführungsform kann das Register aus Latches aufgebaut ist.
  • In einer Ausführungsform ist z. B. ein stellenweise invertiertes Wort v i-1 = v i-1 / 1 ..., v i-1 / n eines Codewortes vi-1 = v i-1 / 1 ..., v i-1 / n kein Codewort des Codes (C).
  • Gemäß einer Ausführungsform kann eine nichtleere Teilmenge von Eingangsleitungen des Speichers Sp Inverter vorgeschaltet sein und den entsprechenden Ausgangsleitungen des Speichers Sp Negatoren nachgeschaltet sein.
  • Gemäß einer Ausführungsform kann der Code (C) ein nichtlinearer Code ist.
  • In einer Ausführungsform kann der Code (C) ein linearer Code sein.
  • In einer Ausführungsform kann der Code (C) ein linearer Code der Länge n mit k Datenbits sein, und der Code (C) eine H-Matrix H mit k Zeilen und n Spalten aufweisen, wobei k < n ist, und
    wobei die Fehlererkennungsschaltung FEm als Teilschaltung einen Syndromgenerator Syn aufweist, der so konfiguriert ist, dass er in Abhängigkeit von den aus dem Speicher ausgelesenen Daten vi = v i / 1, ..., v i / n und einer binären Steuervariablen mod ein k-stelliges Fehlersyndrom s(vi) nach der Beziehung s(vi) = H·[vi ⊕ mod·(u1, ..., un)]T = H·(vi)T ⊕ {mod·H·(u1, ...,un)T}, bestimmt,
    wobei mod = 0 ist, wenn ein Codewort vi-1 des Codes (C) unter der Adresse a in den Speicher eingeschrieben wurde oder wenn ein n-stelliges Wort v i-1 / M in den Speicher geschrieben wurde, wobei das Wort v i-1 / M durch Invertieren der Bits einer nichtleeren Teilmenge M von Bits aus einem Codewort vi-1 des Codes (C) gebildet ist und v i-1 / M ein Codewort des Codes (C) ist, und mod = 1 ist, wenn ein n-stelliges Wort v i-1 / M in den Speicher geschrieben wurde, wobei das Wort v i-1 / M durch Invertieren der Bits einer nichtleeren Teilmenge M von Bits aus einem Codewort vi-1 des Codes (C) gebildet ist und v i-1 / M kein Codewort des Codes (C) ist, und
    wobei (vi)T ein n-komponentiger binärer Spaltenvektor aus den Komponenten ist und (u1, ..., un)T ein n-komponentiger binärer Spaltenvektor aus den Komponenten u1, ..., un ist, wobei für i = 1, ..., n gilt: ui = 1 für ui ∈ M und ui = 0 für ui ∉ M, und wobei H·(vi)T ⊕ {mod·H·(u1, ..., un)T} die komponenteweise XOR-Verknüpfung der k-stelligen Vektoren H·(vi)T und {mod·H·(u1, ..., un)T} darstellt und [vi ⊕ mod·(u1, ..., un)]T die stellenweise XOR-Verknüpfung der n-stelligen Vektoren vi und mod·(u1, ..., un)T ist und mod = 1 gilt, wenn H·(u1, ..., un)T ≠ 0 gilt.
  • Gemäß einer weiteren Ausführungsform wird eine Schaltungsanordnung, umfassend einen Speicher und eine Fehlererkennungsschaltung, zum Testen und Erkennen von Speicherfehlern in dem Speicher unter Verwendung von in dem Speicher gespeicherten beliebigen Nutzdaten bereitgestellt. Die Schaltungsanordnung ist dafür ausgebildet, ein Codewort eines fehlererkennenden Codes an einen Speicherort des Speichers zu schreiben und zu speichern, wobei die Schaltungsanordnung ferner dafür ausgebildet ist, ein Datenwort, das in dem Speicher an einem Speicherort gespeichert ist, auszulesen, und wobei die Schaltungsanordnung ferner dafür ausgebildet ist, eine nichtleere Teilmenge von Bits eines Datenwortes, das aus dem Speicher ausgelesen wurde, zu invertieren und das ausgelesene Datenwort, dessen nichtleere Teilmenge von Bits invertiert wurden, an den Speicherort zu schreiben, an dem das ausgelesene Datenwort gespeichert war. Die Fehlererkennungsschaltung ist dafür ausgebildet, in Abhängigkeit von einem Wert eines Steuersignales einen Fehler anzuzeigen, wobei die Fehlererkennungsschaltung ferner dafür ausgebildet ist, wenn das Steuersignal einen ersten Wert annimmt, einen Speicherfehler anzuzeigen, wenn das aus dem Speicher ausgelesene Datenwort kein Codewort des fehlererkennenden Codes ist, wobei die Fehlererkennungsschaltung dafür ausgebildet ist, wenn das Steuersignal einen zweiten Wert annimmt, einen Speicherfehler anzuzeigen, wenn das aus dem Speicher ausgelesene und in der Teilmenge M von Bits invertierte Datenwort kein Codewort des fehlererkennenden Codes ist. Das Steuersignal nimmt den ersten Wert an, wenn ein Codewort an den Speicherort des Speichers geschrieben wurde, von dem das Datenwort ausgelesen wurde. Das Steuersignal nimmt den zweiten Wert an, wenn das in der Teilmenge M von Bits invertierte, aus dem Speicher ausgelesene Datenwort an den Speicherort geschrieben wurde von dem das Datenwort ausgelesen wird und wenn ein in der Teilmenge M von Bits invertiertes Codewort des fehlererkennenden Codes kein Codewort des fehlererkennenden Codes ist, wobei der erste Wert des Steuersignales von dem zweiten Wert des Steuersignales verschieden ist, und wobei die Teilmenge M eine echte Teilmenge aller Bits eines Datenwortes ist, wenn ein in der Teilmenge M von Bits invertiertes Codewort ein Codewort des fehlererkennenden Codes ist.
  • Dabei kann beispielsweise in einer Ausführungsform der Code ein linearer Code sein.
  • In einer Ausführungsform wird eine Schaltungsanordnung bereitgestellt. Die Schaltungsanordnung umfasst einen Speicher, eine Fehlererkennungsschaltung, n Daten-Eingangsleitungen, und n Daten-Ausgangsleitungen. Die Schaltungsanordnung ist dafür ausgebildet, von dem Speicherort des Speichers das Datenwort vi = v i / 1, ..., v i / n, das n-stellig ist, auf den n Daten-Ausgangsleitungen auszulesen, wobei in den Speicherort des Speichers vor dem Auslesen dieses Datenwortes das auf den n Daten-Eingangsleitungen anliegende Codewort vi-1 = v i-1 / 1, ..., v i-1 / n des fehlererkennenden Codes an diesen Speicherort geschrieben wurde, oder wobei in den Speicherort des Speichers ein Wort v i-1 / M geschrieben wurde, das n-stellig ist, wobei das Wort v i-1 / M durch Invertieren der Bits einer nichtleeren Teilmenge M von Bits aus einem Codewort vi-1 des Codes gebildet ist, wobei, nachdem das Wort vi-1 oder das Wort v i-1 / M an einen Speicherort in den Speicher geschrieben wurde, kein weiteres Datenwort an diesen Speicherort in den Speicher geschrieben wurde, bis das Datenwort vi von diesem Speicherort aus dem Speicher gelesen wurde, wobei der Code einen Codeabstand d, d ≥ 2, aufweist, i ≥ 2 und n ≥ 4 sind. Die Fehlererkennungsschaltung ist dafür ausgebildet, in Abhängigkeit von dem Wert des Steuersignals (mod) dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi ein n-stelliges Codewort vi-1 des Codes in den Speicher geschrieben wurde, einen Fehler anzuzeigen, wenn das ausgelesene Datenwort vi kein Codewort des Codes ist; und wobei die Fehlererkennungsschaltung dafür ausgebildet ist, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher geschrieben wurde, wenn v i-1 / M Codewort des Codes ist, und wenn M nicht alle n Bits umfasst, einen Fehler anzuzeigen, wenn das aus dem Speicher ausgelesenen Wort vi kein Codewort des Codes ist, wobei die Fehlererkennungsschaltung dafür ausgebildet ist, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher geschrieben wurde, wenn v i-1 / M kein Codewort des Codes ist, einen Fehler anzuzeigen, wenn das aus dem aus dem Speicher ausgelesene Wort vi gebildete Wort v i / M , das aus vi dadurch gebildet wird, dass die Bits, die zu der Teilmenge M gehören, invertiert sind, kein Codewort des Codes ist, wobei das Steuersignal mod den ersten Wert annimmt, wenn vor dem Auslesen des Datenwortes ein Codewort vi-1 des Codes eingegeben wurde, oder wenn vor dem Auslesen des Datenwortes ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge M gehören, aus einem Codewort des Codes gebildet wird, in den Speicher eingegeben wurde und wenn das Wort v i-1 / M ein Codewort des Codes ist, wobei dann wenn v i-1 / M ein Codewort des Codes ist, M eine echte Teilmenge aller Bits ist, und wobei das Steuersignal mod den zweiten Wert, der von dem ersten Wert verschieden ist, annimmt, wenn vor dem Auslesen des Datenwortes vi ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge M gehören, aus einem Codewort des Codes gebildet wird, in den Speicher eingegeben wurde und das Wort v i-1 / M kein Codewort des Codes ist.
  • Dabei kann beispielsweise in einer Ausführungsform der Code ein linearer Code sein.
  • Ferner wird in einer weiteren Ausführungsform eine Schaltungsanordnung zur Erkennung von Speicherfehlern bereitgestellt, wobei die Schaltungsanordnung einen Speicher und eine Fehlererkennungsschaltung umfasst. Die Fehlererkennungsschaltung ist zur Bestimmung von Fehlern in dem Speicher eingerichtet. Der Speicher ist dafür ausgebildet, dass in dem Speicher Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits mit dem Codeabstand d ≥ 2 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n, Codewort des Codes (C) ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind. Die Vorrichtung ist dafür ausgebildet, in einem ersten Schritt, ein Codewort v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher zu speichern, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem zweiten Schritt, ein Wort v2 = v 2 / 1, ..., v 2 / n, das unter der Adresse a in dem Speicher gespeichert ist, auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den zweiten Schritt nach dem ersten Schritt durchzuführen, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird, wobei die Fehlererkennungsschaltung dafür ausgebildet ist, in einem dritten Schritt, zu prüfen, ob v2 Codewort des Codes (C) ist, und, wenn v2 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen und die Verarbeitung zu beenden, und, wenn v2 Codewort des Codes (C) ist, keinen Fehler anzuzeigen und die Verarbeitung fortzusetzen, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem vierten Schritt, ein Codewort v3 = (v2)M1 unter der Adresse a im Speicher zu speichern, wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert sind, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert sind, wenn in dem dritten Schritt festgestellt worden ist, dass v2 Codewort des Codes (C) ist, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem fünften Schritt, ein unter der Adresse a gespeichertes Wort v4 auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den fünften Schritt nach dem vierten Schritt durchzuführen, und wobei zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird, und wobei die Fehlererkennungsschaltung ferner dafür ausgebildet ist, in einem sechsten Schritt zu prüfen, ob v4 Codewort des Codes (C) ist, und, wenn v4 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen und das Verfahren zu beenden, und, wenn v4 Codewort des Codes (C) ist, keinen Fehler anzuzeigen.
  • Ferner wird in einer weiteren Ausführungsform eine Schaltungsanordnung zur Erkennung von Speicherfehlern bereitgestellt, wobei die Schaltungsanordnung einen Speicher und eine Fehlererkennungsschaltung umfasst. Die Fehlererkennungsschaltung ist zur Bestimmung von Fehlern in dem Speicher eingerichtet. Der Speicher ist dafür ausgebildet, dass in dem Speicher Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits mit dem Codeabstand d ≥ 2 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n Codewort des Codes (C) ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind. Die Vorrichtung ist dafür ausgebildet, in einem ersten Schritt, ein Codewort v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher zu speichern, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem zweiten Schritt, ein Wort v2 = v 2 / 1, ..., v 2 / n das unter der Adresse a in dem Speicher gespeichert ist, auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den zweiten Schritt nach dem ersten Schritt durchzuführen, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird, wobei die Fehlererkennungsschaltung dafür ausgebildet ist, in einem dritten Schritt, zu prüfen, ob v2 Codewort des Codes (C) ist, und, wenn v2 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen, und, wenn v2 Codewort des Codes (C) ist, keinen Fehler anzuzeigen, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem vierten Schritt, der nach dem dritten Schritt erfolgt, ein Codewort v3 = (v2)M1 unter der Adresse a im Speicher zu speichern, wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert sind, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert sind, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem fünften Schritt, ein unter der Adresse a gespeichertes Wort v4 auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den fünften Schritt nach dem vierten Schritt durchzuführen, und wobei zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird, und wobei die Fehlererkennungsschaltung ferner dafür ausgebildet ist, in einem sechsten Schritt zu prüfen, ob v4 Codewort des Codes (C) ist, und, wenn v4 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen, und, wenn v4 Codewort des Codes (C) ist, keinen Fehler anzuzeigen.
  • Dabei kann beispielsweise in einer Ausführungsform der Code ein linearer Code sein.
  • Ferner wird ein Verfahren zur Erkennung von Speicherfehlern bereitgestellt, wobei das Verfahren umfasst:
    • – Speichern eines Codeworts eines fehlererkennenden Codes (C) oder eines in einer Teilmenge (M) von Bits invertiertem Codeworts in dem Speicher an einem Speicherort,
    • – Auslesen eines Datenworts aus dem Speicher von dem Speicherort,
    • – Anzeigen eines Speicherfehlers, wenn dass Datenwort nicht ein Codewort des fehlererkennenden Codes (C) ist, wenn ein Steuersignal einen ersten Wert annimmt, und,
    • – für den Fall, dass das Steuersignal einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist, und an den Speicherort das in der Teilmenge (M) von Bits invertierte Codewort geschrieben wurde, Bestimmen anhand des aus dem Speicher ausgelesenen Datenworts, ob ein Speicherfehler vorliegt, wenn das in der Teilmenge (M) von Bits invertierte Codewort kein Codewort des fehlererkennenden Codes (C) ist.
  • Ferner wird ein Verfahren zur Bestimmung von Fehlern in einem Speicher Sp bereitgestellt, in dem Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines (n, k)-Codes C mit dem Codeabstand d ≥ 3 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten eines Codewortes v = v1, ..., vn gibt, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes C ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n Codewort des Codes C ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind, dadurch gekennzeichnet, dass das Verfahren mindestens folgende Verfahrensschritte aufweist:
    • 1. Speichern eines Codewortes v1 = v 1 / 1, ..., v 1 / n des Codes C unter einer Adresse a in dem Speicher Sp.
    • 2. Auslesen eines Wortes v2 = v 2 / 1, ..., v 2 / n, das unter der Adresse a in dem Speicher Sp gespeichert ist, wobei dieser 2. Schritt nach dem ersten Schritt erfolgt und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wurde.
    • 3. Prüfen, ob v2 Codewort des Codes C ist. Ist v2 nicht Codewort des Codes C, dann wird ein Fehler angezeigt und das Verfahren kann beendet werden. Ist v2 Codewort des Codes C, dann wird kein Fehler angezeigt und das Verfahren wird fortgesetzt.
    • 4. Ist im 3. Schritt festgestellt worden, dass v2 Codewort des Codes C ist, dann wird das Codewort v3 = (v2)M1 unter der Adresse a im Speicher Sp gespeichert, wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert werden, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert werden.
    • 5. Auslesen des unter der Adresse a gespeicherten Wortes v4, wobei der 5. Schritt nach dem 4. Schritt erfolgt und zwischen den 4. Schritt und dem 5. Schritt unter der Adresse a kein weiteres Wort in den Speicher Sp 13 geschrieben wird.
    • 6. Prüfen, ob v4 Codewort des Codes C ist. Ist v4 nicht Codewort des Codes C, dann wird ein Fehler angezeigt und das Verfahren kann beendet werden. Ist v4 Codewort des Codes C, dann wird kein Fehler angezeigt.
  • Des Weiteren wird ein Verfahren zur Bestimmung von Fehlern in einem Speicher, in dem Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits und mit dem Codeabstand d ≥ 2 gespeichert werden, bereitgestellt, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n Codewort des Codes (C) ist und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind, wobei das Verfahren mindestens die folgenden Schritte umfasst:
    • – In einem ersten Schritt, Speichern eines Codewortes v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher.
    • – In einem zweiten Schritt, Auslesen eines Wortes v2 = v 2 / 1, ..., v 2 / n, das unter der Adresse a in dem Speicher gespeichert ist, wobei dieser zweite Schritt nach dem ersten Schritt erfolgt, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wurde.
    • – In einem dritten Schritt, Prüfen, ob v2 Codewort des Codes (C) ist, wobei, wenn v2 nicht Codewort des Codes (C) ist, ein Fehler angezeigt wird, und wobei, wenn v2 Codewort des Codes (C) ist, kein Fehler angezeigt wird.
    • – In einem vierten Schritt, Speichern eines Codeworts v3 = (v2)M1 unter der Adresse a im Speicher, wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert werden, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert werden.
    • – In einem fünften Schritt, Auslesen eines unter der Adresse a gespeicherten Wortes v4, wobei der fünfte Schritt nach dem vierten Schritt erfolgt und zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird. Und:
    • – In einem sechsten Schritt, Prüfen, ob v4 Codewort des Codes (C) ist, wobei, wenn v4 nicht Codewort des Codes (C) ist, ein Fehler angezeigt wird, und wobei, wenn v4 Codewort des Codes (C) ist, kein Fehler angezeigt wird.
  • Ferner wird ein Computerprogramm mit einem Programmcode zur Durchführung der obigen Verfahren bereitgestellt.
  • Ausführungsformen nutzen die für Testzwecke nach Fertigung ohnehin vorhandene MBIST Einheit (eingebaute Kontrolleinheit zum Speicher-Selbsttest; englisch: Memory Built-In Self Test Controller). Außerdem benützt sie die für Reliability-Zwecke ohnehin vorhandene ECC (Fehlerkorrekturcode; englisch: Error Correction Code) Detektions- und Korrektureinheit (eine ECC Einheit). Diese korrigiert bzw. zeigt Ein- und Zwei-Bit Fehler während des Betriebes an.
  • Beide Einheiten zusammen, die MBIST Einheit und die ECC Einheit, können bevorzugt in Kombination mit einen Online Test während der Laufzeit eingesetzt werden. Die MBIST Einheit erlaubt für normale Testzwecke ohnehin einen schnellen schreibenden und lesenden Zugriff auf den Speicher, und die ECC Einheit ist bestens dafür geeignet, um für jegliche Datenwörter eventuelle Fehler zu erkennen.
  • Um das zeitraubende Umkopieren von Nutzercode zu verhindern, kann die MBIST Einheit gemäß Ausführungsformen dafür eingerichtet sein, lesend über den ganzen Speicherinhalt laufen. Die ECC Einheit kann dafür eingerichtet sein, im Speicher vorhandene Fehler zu finden, und dann in dem ohnehin vorhandenen Speicher für Adressen fehlerhafter Wörter zu registrieren (dieser Speicher kann z. B. als Art Minicache während des Testes des Speichers verwendet werden, um fehlerhafte SRAM Wörter dort per Software Installation nach jedem Bootvorgang vom Flash über diese Mini-Cache zu maskieren).
  • Ein Problem, das sich nun ergibt, ist, dass, wenn der Nutzercode verwendet wird, sogenannte harte „stuck-at” Fehler (Haftfehler) eventuell nicht gefunden werden, wenn ein solcher Fehler die gleiche Polarität hat, wie das User-Bit an dieser Stelle. Bei einem stuck-at Fehler nimmt ein Signalpegel entgegen seiner Sollfunktion ständig den gleichen Wert ein, z. B. ständig 0 (stuck at 0) oder ständig 1 (stuck at 1). Bei einem normalen MBIST Test lässt man daher mehrere Tests mit verschiedenen Dateninhalten und Polaritäten über den Speicher laufen, um diese Fehler dennoch zu finden. Das geht natürlich mit dem Nutzercode nicht.
  • Ausführungsformen setzen nun ein effizienteres Konzept ein: Beim Lesen wird das komplette Nutzer-Wort invertiert und im nächsten Zyklus in den Speicher zurückgeschrieben. Dies wird für alle Wörter im Speicher in Durchgang 1 gemacht. Dabei werden alle Fehler einer bestimmten Polarität durch den ECC Dekoder gleichzeitig gefunden.
  • Dann startet man mit dem nun komplett invertierten Speicherinhalt die Prozedur ein zweites Mal und liest wieder alle nun invertierten Wörter aus, benutzt den ECC Dekoder wieder zur Fehlerdetektion und invertiert das Wort für jede Adresse und schreibt es also wieder invertiert zurück.
  • Nach diesem zweiten Durchgang hat man den Originalinhalt des Speichers wiederhergestellt und dennoch einfache harte und weiche 1- und 2-Bit und sogar je nach Algorithmus alle 3 Bit stuck-at Fehler gefunden (Fehler mit beiden Polaritäten). Zudem hat man den Speicherinhalt durch den Einsatz dieses Konzeptes komplett erhalten, d. h. es ist kein aufwändiges, zeitraubendes Umkopieren erforderlich. Jede Adresse wird dadurch genau 2× gelesen und 2× geschrieben.
  • In einer speziellen weiteren Ausführungsform wird ein Teilwort des Speicherinhaltes so invertiert, dass das teilweise invertierte Wort ein gültiges Codewort ist. Im zweiten Schritt wird ein zweites Teilwort wiederum so invertiert, dass das teilweise invertierte Wort wieder ein gültiges Codewort ist. Die zwei Teilinvertierungen erfolgen so, dass jedes Bit mindestens einmal invertiert wird. Eine Modifikation der ECC Schaltung (die ECC Einheit) ist mit diesem Verfahren nicht erforderlich. Hierdurch werden leichte Zeitvorteile erzielt, besonders wichtig bei Anwendungen, die sehr zeitkritisch sind, insbesondere zeitkritisch im Sinne der Zykluszeit (englisch: Cycletime). Dies wird für alle Wörter im Speicher gemacht in Durchgang 1 und 2. Der dritte Durchgang garantiert das korrekte Rückschreiben der Nutzerdaten. Mit anderen Worten, der dritte Durchgang wird so ausgeführt, dass die Nutzerdaten wieder so zurückgeschrieben werden, dass alle Bits wieder ihren ursprünglichen Wert annehmen.
  • Mit dem Konzept dieser speziellen weiteren Ausführungsform werden alle Fehler einer bestimmten Polarität durch den ECC Dekoder gefunden. Nach dem 3. Durchgang hat man den Originalinhalt des Speichers wiederhergestellt und dennoch einfache harte und weiche 1- und 2-Bit und sogar je nach Algorithmus alle 3 Bit stuck-at Fehler gefunden (Fehler mit beiden Polaritäten) und hat den Speicherinhalt durch den Einsatz dieses Konzepts komplett erhalten. In Ausführungsformen wird bei Einsatz dieses Konzepts in jede Adresse genau dreimal geschrieben, und von jeder Adresse wird genau dreimal gelesen.
  • Die oben beschriebenen Konzepte sind besonders zeiteffizient und stellen einen sehr schnellen Test bereit (viel schneller als über einen langsamen Bus per CPU). Es wird bereits für andere Zwecke vorhandene Hardware, Fläche und Power für den oben beschriebenen Test eingesetzt. Die oben beschriebenen Konzepte sind besonders vorteilhaft für häufige, regelmäßige Tests von Speichern während der Laufzeit.
  • Ausführungsformen stellen einen ECC Code bereit, der „symmetrisch” für diesen Non-Destructive Test ist, der also ein „invertierbarer” Code ist, der in beiden Polaritäten zum gleichen Ergebnis (single fault, double fault) führt. Ein solcher symmetrischer Code hat also die Eigenschaft, dass jedes Codewort, wenn es bitweise invertiert ist, wieder zu einem Codewort wird. Das ist möglich durch geschickte Selektion des Codes und eventuell durch Erweiterung um ein Bit, falls nötig.
  • Bei Codes, die ein zusätzliches Bit benötigen, würde durch diese Anforderung auch ein um ein Bit breiterer Speicher erforderlich werden, der zu zusätzlicher Overhead Fläche und Power führt. In bevorzugten Ausführungsformen ist dieses zusätzliche Bit nicht erforderlich. Von besonderem Interesse ist hier die Datenbreite 32, die mit der allgemeinen symmetrischen Ausführung 8 Bit ECC statt der normalen 7 Bit ECC führt. Dies stellt einen Flächennachteil von 1/39 dar. Hier ist es in einer speziellen Ausführungsform möglich, dass die ursprüngliche Codebreite beibehalten wird, und beim Invertieren, der Syndromgenerator im ECC Dekoder leicht beeinflusst wird.
  • Mit diesem Verfahren ist z. B. ein 32 Bit Datenwort mit 7 ECC Checkbits realisierbar, das dennoch alle positiven Vorteile des allgemeinen Verfahrens aufweist. Damit erreicht man allgemein auch für „nicht-symmetrische” Codes, die gleichen positiven Eigenschaften, wie für die oben erwähnten „symmetrischen” Codes.
  • Ein wichtiges Anwendungsfeld der oben beschriebenen Ausführungsformen ergibt sich auch bei Cross Parity Codes und Codes, die im jetzigen Entwurf der Aurix Familie verwendet werden, z. B. auf den Hsiao Code, beispielsweise den „shortened Hsiao” Code.
  • Die oben beschriebenen Konzepte lassen sich auf beliebige lineare Codes und ggf. auch auf nichtlineare Codes anwenden.
  • Manche Ausführungsformen realisieren ein zweimaliges Invertieren beim Lesen mit anschließendem sofortigen, invertierten Zurückschreiben („modifizierte Signatur”). Andere Ausführungsformen („Teilwort invertieren”) realisieren ein dreimaliges selektives Invertieren beim Lesen mit anschließendem sofortigen Zurückschreiben. Ausführungsformen können eine vorhandene MBIST Einheit, eine vorhandene ECC Einheit und User Code/Data für den Online Anwender Test während der Applikation mit vollem User-Datenerhalt und ohne Auslagerung/Einlagerung der Userdaten einsetzen.
  • Ausführungsformen realisieren ein Finden von harten und soften 1-, 2- und 3-Bit Fehlern. Ferner realisieren manche der Ausführungsformen eine mögliche Korrektur von soffen Fehlern durch zusätzliche Software (SW) und Error Tracking Register, die in sicherheitskritischen Anwendungen (Safety Anwendungen) eventuell bereits vorhanden sind. Ausführungsformen stellen einen schnellen Test bereit, der insbesondere gegenüber Umkopieren von Nutzerdaten (User Daten) und Nutzercode (User Code) besonders vorteilhaft ist. Besondere Vorteile zeigen sich für Safety-Anwendungen mit häufigen Tests des Speichers während der Laufzeit der Anwendung, wobei eine normale CPU Performance erhalten bleibt. Die spezielle Ausführungsform, die ein dreimaliges Lesen und ein dreimaliges Schreiben vorsieht, hat im Gegensatz zu der Ausführungsform mit dem zweimaligen Lesezugriff und dem zweimaligen Schreibzugriff jedoch einen 50-prozentigen Testzeitnachteil. (3 Durchläufe statt 2 Durchläufe).
  • Ein wichtiger Vorteil ergibt sich daraus, dass keine weiteren Anforderungen an den ursprünglichen linearen Code zu stellen sind.
  • In besonderen Ausführungsformen steuert eine MBIST Einheit den Speicher mit einem endlichen Automat (englisch: State Machine) an. Dabei könnte in einer speziellen Ausführungsform ein Zähler vorgesehen sein, um fortlaufende Adressen am Speicher zu erzeugen. Andere, komplexere Varianten zur Erzeugung der Speicheradressen sind denkbar.
  • Ferner kann ein ECC Dekoder vorgesehen sein, der dafür eingerichtet ist, Fehler während des Lesens des Speichers zu detektieren. Fehlerhafte Adressen werden in Error Tracking Register geschrieben. Daten werden invertiert und zurück geschrieben. Dieser Prozess des Lesens und invertierten Schreibens wird wiederholt, so dass am Schluss die Originaldaten im Speicher stehen. Ein beliebiger linearer Code kann verwendet werden, um beide Polaritäten von Fehlern mit beliebigen vorgegebenen Userdaten zu detektieren. Beim Lesen der einmal invertierten Nutzerdaten wird der Syndromgenerator durch ein Steuersignal modifiziert.
  • In der speziellen Ausführungsform, die dreimaliges Lesen und dreimaliges Schreiben vorsieht, wird beim Lesen der einmal bzw. zweimal selektiv invertierten Userdaten jeweils nur ein Teilwort invertiert.
  • Eine weitgehende Verwendung der aktuell in dem Speicher abgelegten Daten und der für die On-line Fehlererkennung vorhandenen Fehlererkennungsschaltung für den Test ist in Ausführungsformen vorgesehen.
  • Ausführungsformen der Erfindung werden unter Bezugnahme auf die Zeichnungen beschrieben.
  • In den Zeichnungen ist dargestellt:
  • 1 zeigt eine Schaltungsanordnung zur Erkennung von Speicherfehlern gemäß einer Ausführungsform,
  • 2a eine erfindungsgemäße Fehlererkennungsschaltung, die an einen Speicher angeschlossen ist,
  • 2b ein Ausführungsbeispiel einer Schaltungsanordnung zur Fehlererkennung
  • 2c ein Ausführungsbeispiel einer Schaltungsanordnung mit einem adressierbaren Speicher
  • 3 eine Ausgestaltung einer Schaltungsanordnung zur Fehlererkennung bei der eine Teilmenge von Eingangsleitungen und von Ausgangsleitungen eines Speichers invertiert sind,
  • 4 eine weitere spezielle Ausgestaltung einer Schaltungsanordnung zur Fehlererkennung,
  • 5 eine spezielle Ausgestaltung einer Fehlererkennungsschaltung,
  • 6 eine spezielle Ausgestaltung wobei neben einer Fehlererkennungsschaltung auch eine Fehlerkorrekturschaltung vorhanden ist,
  • 7 eine spezielle Ausgestaltung wobei eine erfindungsgemäße Fehlererkennungsschaltung mit einer Fehlerkorrekturschaltung gemeinsam implementiert sind,
  • 8 eine spezielle Ausgestaltung einer Fehlererkennungs- und Korrekturschaltung die mögliche Fehlerpositionen anzeigt,
  • 9 eine spezielle Ausgestaltung einer Fehlererkennungs- und Korrekturschaltung die gemeinsam implementiert wurden,
  • 10 ein Ausführungsbeispiel einer Schaltungsanordnung zur Fehlererkennung und Fehlerkorrektur bei der die Invertierung des Speicherworts in zwei Schritten erfolgt.
  • 1 zeigt eine Schaltungsanordnung zur Erkennung von Speicherfehlern zur Erkennung von Speicherfehlern in einem Speichertest, unter Verwendung der aktuellen im Speicher abgespeicherten Daten, gemäß einer Ausführungsform. Die Schaltungsanordnung umfasst einen Speicher 11 und eine Fehlererkennungsschaltung 12.
  • Eine Schaltungsanordnung zur Erkennung von Speicherfehlern wird bereitgestellt. Die Schaltungsanordnung umfasst einen Speicher 11 und eine Fehlererkennungsschaltung 12. Die Schaltungsanordnung ist dafür ausgebildet, ein Codewort eines fehlererkennenden Codes C oder ein in einer Teilmenge M von Bits invertiertes Codewort in dem Speicher 11 an einem Speicherort zu speichern und ein Datenwort aus dem Speicher 11 von dem Speicherort auszulesen.
  • Die Fehlererkennungsschaltung 12 ist dafür ausgebildet, für den Fall, dass ein anliegendes Steuersignal einen ersten Wert annimmt, einen Speicherfehler anzuzeigen, wenn dass Datenwort kein Codewort des fehlererkennenden Codes C ist. Ferner ist die Fehlererkennungsschaltung 12 dafür ausgebildet, für den Fall, dass das anliegende Steuersignal einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist, und an den Speicherort das in der Teilmenge M von Bits invertierte Codewort geschrieben wurde, anhand des aus dem Speicher 11 ausgelesenen Datenworts zu bestimmen, ob ein Speicherfehler vorliegt, wenn das in der Teilmenge M von Bits invertierte Codewort kein Codewort des fehlererkennenden Codes C ist.
  • Das Steuersignal (mod), das an der Fehlererkennungsschaltung 12 anliegt, zeigt zum Beispiel an, ob ein Codewort an dem Speicherort gespeichert werden sollte (durch einen ersten Wert des Steuersignals) oder ob ein Nicht-Codewort an dem Speicherort gespeichert werden sollte (durch einen zweiten Wert des Steuersignals). War also das, was an dem Speicherort gespeichert werden sollte, ein Codewort, so nimmt das Steuersignal beispielsweise einen ersten Wert an. War jedoch das, was an dem Speicherort gespeichert werden sollte, ein Nicht-Codewort, so nimmt das Steuersignal beispielsweise einen zweiten Wert an, der von dem ersten Wert verschieden ist.
  • Der hier verwendete Begriff „Datenwort”, bezeichnet das, was aus dem Speicher 11 von dem Speicherort ausgelesen wurde. Was aus dem Speicher 11 von dem Speicherort ausgelesen wird, kann ein Codewort sein oder eben auch kein Codewort sein. Beispielsweise kann ein Codewort an dem Speicherort gespeichert worden sein, und dieses Codewort wird verfälscht, so dass ein Nicht-Codewort ausgelesen wird. Oder es liegt ein Fall vor, bei dem beispielsweise an dem Speicherort gar kein Codewort gespeichert wurde. In diesem Fall wird, wenn das gespeicherte Codewort nicht verfälscht wird, ebenfalls kein Codewort ausgelesen. Der Begriff des „Datenworts” umfasst also sowohl den Fall, dass dass Datenwort ein Codewort ist, als auch den Fall, dass das Datenwort kein Codewort ist.
  • Bevor einige spezielle Ausführungsformen detailliert beschrieben werden, werden zunächst einige Grundbegriffe und Zusammenhänge der Codierungstheorie beschrieben. Die Grundbegriffe sind dem Fachmann bekannt, und sie sind darüberhinaus in Lehrbüchern, beispielsweise in dem Buch Lin, S. Costello D. "Error Control Coding", Prentice Hall, 1983 beschrieben, auf die ausdrücklich Bezug genommen wird, wobei hier insbesondere auf die Seiten 51–81 hingewiesen sei.
  • Im Folgenden wird zunächst der Fall beschrieben, dass ein Code C ein linearer fehlerkorrigierender (n, k)-Code mit dem Codeabstand d, mit der Generatormatrix G und der H-Matrix H ist, obwohl Ausführungsformen auch unter Verwendung von nichtlinearen Codes anwendbar sind.
  • Codewörter der Form v1, ..., vn des Codes C haben die Wortlänge n, da sie n Bits aufweisen. Ein Codewort v = V1, ..., Vn kann aus den k Datenbits u = u1, ..., uk nach der Beziehung v = v1, ..., vn = (u1, ..., uk)·G gebildet werden, wobei die (k, n)-Matrix G die Generatormatrix des Codes C ist.
  • Hat die Generatormatrix G die Form G = (Ik, Pk,n-k), dann ist sie in systematischer Form. Dabei ist Ik die k-dimensionale Einheitsmatrix, und die (k, n – k)-Matrix Pk,n-k heißt Paritätsmatrix des Codes C.
  • Die H-Matrix H ist eine (n – k, n)-Matrix. In systematischer Form gilt H = (P T / n-k,k, In-k), wobei P T / n-k,k die transponierte Matrix der Paritätsmatrix Pk,n-k ist, die durch Vertauschen von Spalten und Zeilen aus Pk,n-k bestimmt ist. In-k ist die (n – k)-dimensionale Einheitsmatrix. Der Code weist dann m = n – k Prüfbits auf.
  • Für einen linearen Code C ist bekannt, dass gilt:
    Sind v = v1, ..., vn und w = w1, ..., wn Codewörter des linearen Codes C, dann ist y = y1, ..., yn = w ⊕ v = w1 ⊕ v1, ..., wn ⊕ vn ebenfalls Codewort des Codes C.
  • Gilt für das Codewort w = w1, ..., wn, dass w = 0 ist, dann ist yi = vi, und gilt wi = 1, dann ist yi = vi ⊕ 1 = vi.
  • Als spezieller Fall ergibt sich: Ist
    Figure DE102013215055A1_0005
    Codewort des Codes C, dann ist (A11 – 1) ⊕ v = 1 ⊕ v1, ..., 1 ⊕ vn = v1, ..., vn ebenfalls Codewort des Codes C, wenn v Codewort des Codes C ist.
  • Ist
    Figure DE102013215055A1_0006
    nicht Codewort des Codes C, dann ist (A11 – 1) ⊕ v = 1 ⊕ v1, ..., 1 ⊕ vn = v1, ..., vn ebenfalls nicht Codewort des Codes C, wenn v Codewort des Codes C ist.
  • Fehler können unter Verwendung der H-Matrix H und des Fehlersyndromes s erkannt und korrigiert werden.
  • Ist v' = v ' / 1, v ' / 2, ..., v ' / n Wort der Länge n, dann ist sT = (s1, ..., sm)T = H·(v')T das Fehlersyndrom des Wortes v'. Dabei ist sT der transponierte Spaltenvektor des Zeilenvektors s = s1, ..., sm und (v')T der transponierte Spaltenvektor des Zeilenvektors v' = v ' / 1, v ' / 2, ..., v ' / n, wobei m = n – k gilt.
  • Das Fehlersyndrom eines Vektors v' ist genau dann gleich
    Figure DE102013215055A1_0007
    wenn v' Codewort des Codes C ist.
  • Ist v' = v ' / 1, v ' / 2, ..., v ' / n ein n-stelliges Binärwort, ist v = v1, ..., vn ein Codewort des Codes C und gilt e = e1, ..., en = v ⊕ v' = v1 ⊕ v ' / 1, ...,vn ⊕ v ' / n dann ist das Fehlersyndrom von v' allein durch e bestimmt und es gilt sT = H·(v')T = H·(v ⊕ e)T H·eT
  • Dabei heißt e Fehlervektor. Gilt für eine Komponente ei = 1, dann unterscheidet sich v' in der i-ten Komponente v ' / i von der i-ten Komponente vi des Codewortes v. Gilt für eine Komponente ej = 0, dann unterscheidet sich v' nicht in der j-ten Komponente v ' / j von der j-ten Komponente vj des Codewortes v.
  • Ist C ein B-Bit-Fehler korrigierender Code, dann sind die Fehlersyndrome für alle 1-Bit, 2-Bit, ... B-Bit-Fehler paarweise unterschiedlich, und die Fehlerkorrektur kann auf Grund des Fehlersyndromes eindeutig vorgenommen werden, wenn nur 1-Bit, 2-Bit, ... B-Bit-Fehler aufgetreten sind.
  • Der Abstand zweier Wörter v = v1, ..., vn und w = w1, ..., wn, der auch Hammingabstand genannt wird, ist gleich der Anzahl ihrer Komponenten, in denen sie sich unterscheiden. Der Abstand d eines Codes ist gleich dem minimalen Abstand zwischen zwei seiner Codewörter.
  • Ist C ein linearer Code mit dem Codeabstand d, dann gilt für alle 1-Bit, 2-Bit, ... (d – 1)-Bit Fehler, dass das Fehlersyndrom s ungleich 0 ist.
  • Wir betrachten einen linearen (n, k)-Code C der Länge n und k Informationsbits, der einen Codeabstand d ≥ 3 hat. Beispiele für derartige Codes sind Hamming-Codes mit einem Codeabstand d = 3, Hsiao-Codes und Odd-Even Codes, die einen Codeabstand 4 haben und BCH-Codes.
  • Ein Codewort v = v1, ..., vn ist aus den k Informationsbits zu v = v1, ..., vn = u·G = (u1, ..., uk)·G bestimmt, wobei
    Figure DE102013215055A1_0008
    ist und g1, ..., gk n-stellige Zeilenvektoren sind.
  • Wir betrachten zwei Fälle:
    • 1. Ist v = v1, ..., vn ein Codewort des Codes C, dann ist v = v1, ..., vn ebenfalls Codewort des Codes C.
    • 2. Ist v = v1, ..., vn ein Codewort des Codes C, dann ist v = v1, ..., vn nicht Codewort des Codes C.
  • Folgendes Vorgehen ist möglich, um Fehler in einem Speicher zu ermitteln:
    In einen Speicher Sp wird unter einer Adresse a ein Codewort v1 = v 1 / n, ..., v 1 / n geschrieben/gespeichert, dass Codewort eines linearen Codes C mit der H-Matrix H.
  • Unter der Adresse a wird dann das Wort v2 = V 2 / 1, ..., v 2 / n ausgelesen. Es wird also ausgelesen, was unter der Adresse a im Speicher liegt. Hat das Speichern von v1 korrekt funktioniert und ist es im Speicher zu keinen Verfälschungen gekommen, müsste unter der Adresse a immer noch v1 vorliegen. Ist dies nicht der Fall, so weicht, das ausgelesene v2 von v1 ab. Da v1 Codewort des Codes war, ist auch v2 Codewort des Codes, wenn es zu keinen Speicherfehlern gekommen ist. Ist jedoch v2 kein Codewort des Codes mehr, so kann daraus sicher geschlossen werden, dass ein Speicherfehler vorliegt. Es wird also geprüft, ob v2 Codewort des Codes C ist. Dies erfolgt, indem s(v2) = H·(v2)T = H·(e1,2)T bestimmt wird. Dabei ist e1,2 = v1 ⊕ v2.
  • Ist s(v2) ≠ 0, dann wurde ein Fehler erkannt und weitere Schritte sind nicht notwendig.
  • Ist s(v2) = 0, dann wurde kein Fehler erkannt und es wird angenommen, dass v2 = v1 gilt. Die Tests, ob der Speicher fehlerhaft ist, werden mit dem nachfolgenden Schritt fortgesetzt, denn es kann sein, dass sich ein Speicherfehler im ersten Testschritt nicht gezeigt hat. Möglicherweise liegt zum Beispiel an der Speicherposition, unter v 1 / i der gespeichert wurde, ein stuck-at-0 Fehler vor. Ist der Wert von v 1 / i aber selbst 0, so zeigt sich dieser Fehler im ersten Schritt nicht. Ein weiterer Test, bei dem zum Beispiel der invertierte Wert von v 1 / i also 1, unter derselben Speicheradresse gespeichert und wieder gelesen wird, deckt diesen stuck-at-0 Fehler aber auf.
  • Somit werden in einem nächsten Schritt nun die Bits von v2 = v1 invertiert, wodurch man v3 erhält:
    Figure DE102013215055A1_0009
    v3 wird dann unter der Adresse a in den Speicher geschrieben/gespeichert.
  • Nun wird v4 unter der Adresse a aus dem Speicher ausgelesen. Es wird also ausgelesen, was unter der Adresse a im Speicher liegt.
  • Für v4 gilt:
    Figure DE102013215055A1_0010
  • Hat das Speichern von v3 korrekt funktioniert und ist es im Speicher zu keinen Verfälschungen gekommen, müsste unter der Adresse a immer noch v3 vorliegen. Ist dies nicht der Fall, so weicht, das ausgelesene v4 von v3 ab.
  • Da zur Bestimmung des Syndroms s(v4)T s(v4)T = H·[(v4) ⊕ (1, ..., 1)]T = H·(v4)T ⊕ H·(1, ..., 1)T. gebildet wird und wegen v4 = v1 ⊕ (1, ..., 1) ⊕ e3,4 s(v4)T = H·(v1)T ⊕ H·(1, ..., 1)T ⊕ H·(1, ..., 1)T ⊕ H·(e3,4)T und damit wegen H·(v1)T = 0 und H·(1, ..., 1)T ⊕ H·(1, ..., 1)T = 0 s(v4)T = H·(e3,4) gilt, kann v3 Codewort sein oder nicht, und das Syndrom s(v4)T ist genau dann gleich 0, wenn e3,4 Codewort des Codes C ist.
  • Liegt nun z. B. ein n-Bit Stuck-at Fehler auf den Speicherausgängen vor, dann sind die n1 Bitpositionen der Komponenten des Fehlervektors e1,2 gleich 1, in denen sich die Werte v 1 / i von den Stuck-at Werten unterscheiden. Ebenso sind die n2 Bitpositionen der Komponenten des Fehlervektors e3,4 gleich 1, in denen sich die Werte
    Figure DE102013215055A1_0011
    von den Stuck-at Werten unterscheiden. Dabei ist 0 ≤ n1, n2 ≤ n und n1 + n2 = n.
  • Ist der Code C ein B Bit fehlererkennender Code, dann werden alle 1-, 2-, ..., B-Bit Stuck-at Fehler sicher erkannt.
  • Eine weiteres mögliches Vorgehen, um Fehler in einem Speicher zu ermitteln, ergibt sich aus den folgenden Überlegungen:
    Es ist möglich, aus einem Codewort v = v1, ..., vn des Codes C ein Wort vM zu bilden, indem die Komponenten von v invertiert werden, die zu der Menge M gehören. Dabei ist M ⊆ {v1, ..., vn} eine Teilmenge der Komponenten von v. Ist M = {v1, ..., vn}, dann ist vM = v = v1, ..., vn. Ist beispielsweise M = {v1, v2}, dann ist vM = v1, v2, v3, ..., vn.
  • Die Menge M kann durch einen n-komponentigen binären Zeilenvektor u = u1, ...,un beschreiben werden, für den gilt:
    Für i = 1, ..., n ist ui = 1, wenn vi ∈ M ist und ui = 0, wenn vi ∉ M ist.
  • Das Wort vM kann dann aus dem Codewort v durch vM = v ⊕ u = v1 ⊕ u1, ..., vn ⊕ un gebildet werden.
  • Ist u Codewort des Codes C, dann ist vM ebenfalls Codewort des Codes C. Ist u nicht Codewort des Codes C, dann ist vM ebenfalls nicht Codewort des Codes C. Für das Fehlersyndrom von s(vM) gilt s(vM) = H·(v ⊕ u) = H·v ⊕ H·u = H·u
  • Folgendes Vorgehen ist beispielsweise möglich:
    In einen Speicher Sp wird unter einer Adresse a ein Codewort v1 = v 1 / 1, ...,v 1 / n eines linearen Codes C mit der H-Matrix H geschrieben.
  • Unter der Adresse a wird das Wort v2 = v 2 / 1, ..., v 2 / n , gelesen und es wird geprüft, ob v2 Codewort des Codes C ist, indem s(v2) = H·(v2)T = H·(e1,2)T bestimmt wird. Dabei ist e1,2 = v1 ⊕ v2.
  • Ist s(v2) ≠ 0, dann wurde ein Fehler erkannt und weitere Schritte sind nicht notwendig.
  • Ist s(v2) = 0, dann wurde kein Fehler erkannt und es wird angenommen, dass dann v2 = v1 gilt.
  • Es wird nun v3 = v2 ⊕ u = v1 ⊕ u gebildet und v3 wird unter der Adresse a in den Speicher geschrieben.
  • Nun wird v4 unter der Adresse a aus dem Speicher ausgelesen.
  • Es gilt: v4 = v3 ⊕ e3,4 = v1 ⊕ u ⊕ e3,4. wobei e3,4 = v3 ⊕ v4 ist. Man bildet: s(v4)T = H·(v4)T ⊕ H·(u)T = H·(v3 ⊕ e3,4 ⊕ u)T = H·(v1 ⊕ u ⊕ u ⊕ e3,4)T = H·(e3,4)T, und es wird dann nicht auf einen Fehler geschlossen, wenn e3,4 ein Codewort des Codes C ist.
  • Ist e3,4 Codewort des Codes C, dann wird geschlossen, dass kein Fehler vorliegt, und v4 ist Codewort des Codes C.
  • Es werden dann permanente stuck-at-0 und stuck-at-1 Fehler in den Bitpositionen erkannt, für die ui = 1 gilt. Je nachdem welche Belegungen in den nicht invertierten Bitpositionen vorhanden sind, werden stuck-at-0 oder stuck-at-1 Fehler in den Bitpositionen erkannt, die durch die komponentenweise XOR-Verknüpfung mit u nicht invertiert werden.
  • Wählt man die Menge M der zu invertierenden Bits so, dass der entsprechende Zeilenvektor u ein Codewort des Codes C ist, dann ist H·(u)T = 0 und s(v4) kann einfach zu s(v4) = H·(v4)T = H·(v3 ⊕ e3,4)T = H·(e3,4)T bestimmt werden. Es ist dann, wie weiter unten erläutert, kein mod Signal erforderlich.
  • Es kann nun ein weiteres Wort
    Figure DE102013215055A1_0012
    mit M1 ≠ M gebildet werden, wobei die Menge M1 durch einen Zeilenvektor u1 = u 1 / 1, ..., u 1 / n beschrieben wird, für den i = 1, ..., n gilt.
  • Dann ist u 1 / i = 1 , wenn vi ∈ M1 gilt und es ist u 1 / i = 0 wenn vi ∉ M1 gilt.
  • Es ist möglich, den Vektor u1 beispielsweise so wählen, dass u1 ein Codewort des Codes C ist. Ist C ein systematischer Code, dann kann das einfach dadurch geschehen, indem man beliebige Informationsbits eines Codewortes als 1 wählt und für die restlichen Informationsbits 0 wählt und die zugehörigen Prüfbits über die Generatormatrix des Codes bestimmt. Die Wahl der korrekten Prüfbits stellt somit sicher, dass u1 ein Codewort des Codes ist.
  • Wird beim Auslesen kein Fehler erkannt, kann man ein weiteres Wort
    Figure DE102013215055A1_0013
    mit M2 ≠ M bilden, wobei die Menge M2 durch einen Zeilenvektor u2 = u 2 / 1, ..., u 2 / n beschrieben wird, für den für i = 1, ..., n gilt, dass u 2 / i = 1 ist, wenn vi ∈ M2 gilt, und dass u 1 / i = 0 ist, wenn vi ∉ M2 gilt.
  • Beispielsweise kann u2 wieder als Codevektor des Codes C gewählt werden. Auf diese Weise kann man fortfahren, bis beispielsweise alle Bits von v1, ..., vn wenigstens einmal invertiert worden sind.
  • Gilt nach dem K-ten Schritt {v1, ..., vn} = M ∪ M1 ∪ M2 ∪ ..., ∪ MK, dann wird jedes Bit des Vektors v mindestens einmal invertiert, und es ist möglich, permanente stuck-at-0 Fehler und permanente Stuck-at-1 Fehler in jeder Bitposition zu erkennen. Ist der Code C ein B Bit fehlererkennender Code, dann werden alle 1-, 2-, ..., B-Bit Stuck-at Fehler sicher erkannt.
  • Spezielle Ausführungsbeispiele werden nun an Hand der Zeichnungen erläutert.
  • In 2a ist ein adressierbarer Speicher Sp 11 dargestellt, an dessen n-Bit breitem Eingang ein n-stelliges Datenwort vi-1 = v i-1 / 1, ..., v i-1 / n anliegt.
  • Ist das Write-Enable Signal WE (Schreiben-aktiviert-Signal) aktiviert und liegt an der Adressenleitung eine Adresse a an, dann wird das Datenwort vi-1 unter der Adresse a in die entsprechenden Speicherzellen des Speicher Sp geschrieben.
  • Ist zu einem späteren Zeitpunkt das Read-Enable Signal (Lesen-aktiviert-Signal) aktiviert und liegt die Adresse a an, dann wird aus den entsprechenden Speicherzellen das unter der Adresse a gespeicherte Wort ausgelesen, so dass an den n Ausgangsleitungen des Speichers Sp 11 ein Datenwort vi = v i / 1, ..., v i / n ausgegeben wird.
  • Wird zwischen dem Einschreiben von vi-1 und den Auslesen von vi kein weiteres Datenwort unter der Adresse a in den Speicher eingeschrieben, so ist vi = vi-1, wenn kein Fehler aufgetreten ist. Ist ein Fehler aufgetreten, beispielsweise ein Stuck-at Fehler auf den Eingangsleitungen oder auf den Ausgangsleitungen des Speichers Sp, dann kann vi ≠ vi-1 gelten. Dabei ist das eingegebene Datenwort vi-1 ein Codewort eines Codes C.
  • Die Fehlererkennungsschaltung FEm 12 prüft, ob vi ein Codewort des Codes C ist. Ist kein Fehler aufgetreten, dann gilt vi = vi-1 und vi ist Codewort.
  • Ist ein Fehler in dem Speicher aufgetreten, der zu einem ausgegebenen Nicht-Codewort vi führt, dann wird dieser Fehler durch die Fehlererkennungsschaltung FEm 12 erkannt und durch das r-Bit breite Fehlersignal E = Eerror angezeigt. Dabei ist die Wortbreite des Fehlersignales r ≥ 1. Das Steuersignal mod der Fehlererkennungsschaltung FEm 12 nimmt hier einen ersten Wert, z. B. den binären Wert mod = 0 an.
  • Ist das eingegebene Datenwort vi-1 ein stellenweise invertiertes Codewort des Codes C und kein Codewort des Codes C und tritt kein Fehler auf, dann ist das ausgegebene komponentenweise invertierte Wort v i Codewort des Codes C.
  • Die Fehlererkennungsschaltung FEm 12 prüft nun, ob das komponentenweise invertierte Wort v i ein Codewort des Codes C ist. Das Steuersignal mod nimmt hier einen zweiten Wert, z. B. den binären Wert mod = 1 an. Ist ein Fehler in dem Speicher aufgetreten, der zu einem Nicht-Codewort v i führt, dann wird dieser Fehler durch die Fehlererkennungsschaltung FEm 12 erkannt und durch das r-Bit breite Fehlersignal E = Eerror angezeigt. Dabei ist r ≥ 1.
  • Mit anderen Worten: Die Fehlererkennungsschaltung FEm 12 kann über einen Eingang mod verfügen. Liegt an diesem Eingang ein erster Wert (z. B. 0) an, so zeigt dies an, dass unter der Adresse a mit dem Wort vi-1 ein Codewort des Codes gespeichert wurde, und dass somit auch das Ausgabewort vi ein Codewort des Codes ist, wenn es zu keinem Fehler gekommen ist. Liegt an dem Eingang dagegen ein zweiter Wert (z. B. 1) an, so zeigt dies an, dass unter der Adresse a mit dem Wort vi-1 gerade kein Codewort des Codes gespeichert wurde. Wenn es zu keinem Fehler gekommen ist, dann ist auch das Ausgabewort vi kein Codewort des Codes. In diesem Fall ist aber das komponentenweise invertierte Wort v i, das entsteht, wenn das Wort vi komponentenweise invertiert wird, ein Codewort des Codes.
  • Tritt kein Fehler auf, dann wird von der Fehlererkennungsschaltung FEm 12 das Signal E = Enonerror ausgegeben.
  • Die Eingabe eines Codewortes im ersten Schritt beispielsweise eines Tests und die Eingabe des komponentenweise invertierten Codewortes im zweiten Schritt eines Tests in den Speicher erlaubt es, beispielsweise beliebige einzelne Stuck-at-0 oder Stuck-at-1 Fehler zu erkennen, da das Vorhandensein eines solchen Fehlers bei einem der eingegebenen, zueinander invertierten Worte zu einer fehlerhaften Ausgabe führt.
  • Ist das eingegebene Datenwort vi-1 ein stellenweise invertiertes Codewort des Codes C und ebenfalls Codewort des Codes C, dann prüft die Fehlererkennungsschaltung FEm 12, ob das ausgegebene Datenwort vi ein Codewort des Codes C ist. In diesem Fall ist es ausreichend, dass das Steuersignal mod nur einen Wert annimmt.
  • Die beschriebene Fehlererkennung kann man besonders vorteilhaft in einem Test verwenden, wenn der Speicher Sp 11 im Programmablauf nicht benötigt wird, wobei es nicht erforderlich ist, die Daten, die aufgrund des Programmzustandes in dem Speicher Sp 11 gespeichert sind, durch spezielle Testdaten zu ersetzten, was vorteilhaft ist.
  • Dabei wird davon ausgegangen, dass die in dem Speicher Sp 11 abgelegten Daten mit einem fehlererkennenden Code C codiert sind. Sind die Daten mit einem fehlerkorrigierenden Code codiert, dann wird der Code in dem Test nur als fehlererkennender Code verwendet, was eine hohe Fehlererüberdeckung zur Folge hat.
  • Die Vorgehensweise soll nun anhand von 2b erläutert werden.
  • Die in 2b dargestellte Schaltungsanordnung beteht aus einem Coder Cod 21 mit k binären Eingängen und n binären Ausgängen, die in den ersten, n-Bit breiten Dateneingang eines Multiplexers 22 mit zwei n-Bit breiten Dateneingängen, einem n-Bit breiten Datenausgang und einem 1-Bit breiten Steuereingang, der ein Steuersignal st führt, geführt sind.
  • Der n-Bit breite Ausgang des Multiplexers 22 ist mit dem n-Bit breiten Dateneingang eines Speichers Sp 23 verbunden, der einen n-Bit breiten Datenausgang, aufweist.
  • Der Datenausgang des Speichers Sp 23 ist gleichzeitig über eine Inverterschaltung 24 mit dem zweiten Dateneingang des Multiplexers 22 und mit einem ersten n-Bit breiten Eingang einer Fehlererkennungsschaltung FEm 25 verbunden, an deren zweitem, 1-Bit breiten Eingang das Steuersignal mod anliegt und an deren r Bit breiten Ausgang ein r Bit breites Fehlersignal E ausgibt.
  • Die Inverterschaltung 24 kann beispielsweise durch n Invertoren realisiert sein, die an jede der Datenausgangsleitungen des Speichers Sp 23 angeschlossen sind und deren jeweilige Ausgänge in den zweiten n Bit breiten Dateneingang des Multiplexers 22 geführt sind.
  • Die Fehlererkennungsschaltung FEm 25 ist in 2b aus einer Fehlererkennungseinheit FE 27 und einer vorgeschalteten XOR-Schaltung 26 aufgebaut, wobei die XOR-Schaltung 26 aus n XOR-Gattern XORi, i = 1, ..., n mit jeweils zwei Eingängen und einem Ausgang aufgebaut ist. An jedem ersten Eingang jedes der n XOR-Gatter liegt das 1-Bit breite Steuersignal mod an. Für i = 1, ..., n ist die i-te Komponente des insgesamt n Bit breiten Datenausganges des Speichers Sp 23 in den zweiten Eingang des XOR-Gatter XORi geführt. Die Ausgänge der n XOR-Gatter sind mit den n Eingängen der Fehlererkennungsschaltung FE verbunden. Die Fehlererkennungseinheit FE 27 prüft, ob das an ihren n Eingängen anliegende Signal ein Codewort des Codes C ist. Liegt an ihren Eingängen ein Codewort an, dann gibt sie ein Fehlersignal Enonerror aus. Liegt an ihren Eingängen ein Nicht-Codewort an, dann gibt sie ein Fehlersignal Eerror aus.
  • Die Funktionsweise der Schaltungsanordnung von 2b soll nun beschrieben werden.
  • Im normalen Funktionsmode wird der Speicher mit Codewörtern belegt und aus dem Speicher Sp werden Codewörter ausgelesen, wenn kein Fehler aufgetreten ist.
  • Dieser Funktionsmode soll nun erläutert werden.
  • Ist das Steuersignal st des Mutliplexers 22 gleich 0, dann ist der Ausgang des Coders Cod 21 über den Multiplexer 22 mit den Dateneingang des Speichers Sp 23 verbunden. Liegt nun am Eingang des Coders Cod ein k Bit breites Datenwort u = u1, ..., uk an, so bildet der Coder Cod 21 aus dem Datenwort ein Codewort v1, ..., vn des Codes C, das über den Multiplexer 22 an den Eingangsleitungen des Speichers Sp 23 anliegt und an einem bestimmten Speicherort des Speichers Sp 23 abgespeichert wird. Das an dem genannten Speicherort gespeicherte Datenwort wird nun an den Datenausgangsleitungen des Speichers Sp 23 ausgegeben.
  • Liegt kein Fehler vor, dann ist das ausgelesene Wort ein Codewort des Codes C. Ist das Steuersignal mod gleich 0, dann wird durch die Fehlererkennungsschaltung FEm 25 kein Fehler angezeigt, da durch die XOR-Gatter 26 das aus dem Speicher Sp ausgegebene Signal nicht modifiziert wird und die Fehlererekennungseinheit FE 27 ein Fehlersignal E = Enonerror ausgibt, das anzeigt, dass ein Codewort vorliegt.
  • Liegt ein Fehler vor, der ein Codewort des Codes C in ein Nicht-Codewort des Codes C verfälscht und ist das Steuersignal mod der Fehlererkennungsschaltung FEm gleich 0, dann gibt die Fehlererkennungseinheit FE 27 ein Fehlersignal E = Eerror aus, das anzeigt, dass ein Nicht-Codewort vorliegt.
  • Der Speicher Sp 23 wird im normalen Funktionsmode mit Daten belegt, die im fehlerfreien Fall Codewörter sind.
  • Die Schaltungsanordnung kann nun in einem Testmode permanente Fehler, wie beispielsweise Stuck-at Fehler an den Dateneingangsleitungen oder den Datenausgangsleitungen erkennen, was jetzt beschrieben werden soll.
  • Aus dem Speicher Sp 23 wird ein Wort vi ausgelesen, das an einem bestimmten Speicherort gespeichert worden ist, wobei in einem, vorhergehenden Zeitpunkt das Codewort vi-1 eingeschreiben wurde. Das Steuersignal mod der Fehlererkennungsschaltung FEm 25 ist dabei gleich 0. Ist das ausgelesene Wort vi ein Codewort des Codes C, dann zeigt die Fehlererkennungsschaltung FE an ihrem Ausgang keinen Fehler an. Das Steuersignal st des Multiplexers 22 wird nun als st = 1 gewählt und das vom Speicher Sp ausgegebene Wort vi, das ein Codewort ist, wird durch die Inverterschaltung 24 komponentenweise invertiert und als bitweise invertiertes Codewort an den gleichen Ort in den Speicher gechrieben. Das nun gespeicherte Wort, das im fehlerfreien Fall ein bitweise invertiertes Codewort des Codes C ist wird nun ausgelesen. Es sind nun in Abhängigkeit von dem verwendeten Code C zwei Fälle möglich.
    • 1. Das bitweise invertierte Codewort vi ist kein Codewort des Codes C.
    • 2. Das bitweise invertierte Codewort vi ist Codewort des Codes C
  • Wir betrachten zunächst den Fall, dass das bitweise invertierte Codewort vi kein Codewort des Codes C ist.
  • Das Steuersignal der Fehlererkennungsschaltung FEm 25 wird als mod = 1 gewählt und das von dem Speicher Sp 23 ausgelesene Wort liegt am Eingang der Fehlererkennungsschaltung FEm 25 an. Es wird in der XOR-Schaltung 26 bitweise invertiert. Liegt kein Fehler vor, dann ist das insgesamt zweimal bitweise invertierte Codewort wieder Codewort des Codes C und die Fehlererkennungseinheit FE 27 gibt kein Fehlersinal aus.
  • Liegt ein erkennbarer Fehler vor, dann wird er dadurch erkannt, dass das aus dem Speicher Sp 23 ausgelesene und bitweise invertierte Wort, kein Codewort des Codes C ist, was von der Fehlererkennungseinheit FE 27 erkannt wird.
  • Es soll nun der Fall betrachtet werden, dass ein bitweise invertiertes Codewort wieder Codewort des Codes C ist. In diesem Fall, da das bitweise invertierte Codewort vi wieder Codewort des Codes C ist, ist es ausreichend nur ein Steuersignal mod, beispielsweise das Steuersignal mod = 0 zu verwenden. Die XOR-Schaltung kann dann einfach weggelassen werden.
  • Liegt ein Fehler vor, der zu einem Nicht-Codewort führt, dann wird der Fehler am Ausgang der Fehlererkennungsschaltung FEm 25 durch ein Fehlersignal Eerror erkannt.
  • Wird kein Fehler erkannt, so ist das ausgelesene Wort vi ein Codewort des Codes C.
  • Der in 2b dargestellte Speicher Sp 23 kann dabei ein adressierbarer Speicher wie ein RAM, ein Registerfile oder einfach ein Register einer Wortbreite sein, die gleich der Länge n des Codes C ist. Das Register kann beispielsweise aus Flip-Flops oder Latches aufgebaut sein und der Ausgang des Speichers Sp 23 kann beispielsweise auf einen Bus geführt sein oder mit einer CPU verbunden sein.
  • Die Schaltungsanordnung von 2c unterscheidet sich von der Schaltungsanordnung von 2b dadurch, dass der Speicher 23 der 2b in 2c als adressierbarer Speicher Sp 23a realisiert ist. In 2c weist der adressierbare Speicher Sp 23a einen Adresseneingang, der das Adressensignal a führt, einen Eingang für ein Read-Enable Signal RE, und einen Eingang für ein Write-Enable Signal WE auf.
  • Ansonsten entspricht der Schaltungsaufbau der Schaltungsanordnung von 2c dem der Schaltungsanordnung von 2b, und er soll deshalb nicht noch einmal detailiert beschrieben werden.
  • Die Funktionsweise der Schaltungsanordnung von 2c soll nun unter Verwendung der Read-Enable und Write-Enable Signale und des Adressensignales beschrieben werden.
  • Im normalen Funktionsmode wird der Speicher mit Codewörtern belegt und aus dem Speicher Sp werden Codewörter ausgelesen, wenn kein Fehler aufgetreten ist.
  • Ist das Steuersignal st des Multiplexers 22 gleich 0, dann ist der Ausgang des Coders Cod 21 über den Multiplexer 22 mit den Dateneingang des Speichers Sp 23a verbunden. Liegt nun am Eingang des Coders Cod ein k Bit breites Datenwort u = u1, ..., uk an, so bildet der Coder Cod 21 aus dem Datenwort ein Codewort v = v1, ..., vn des Codes C, das über den Multiplexer 22 an den Eingangsleitungen des Speichers Sp 23a anliegt, und dann, wenn das Write-Enable Signal WE aktiviert ist und an dem Andresseneingang eine Adresse a anliegt, unter der Adresse a in den Speicher Sp 23a geschrieben wird.
  • Ist das Read-Enable Signal RE aktiv und liegt eine Adresse a am Adresseneingang des Speicher Sp 23a an, dann wird das unter der Adresse a gespeicherte Wort ausgelesen.
  • Liegt kein Fehler vor, dann ist das ausgelesene Wort ein Codewort des Codes C. Ist das Steuersignal mod gleich 0, dann wird durch die Fehlererkennungsschaltung FEm 25 kein Fehler angezeigt, da durch die XOR-Gatter 26 das aus dem SpeicherSp 23a ausgegebene Signal nicht modifiziert wird und die Fehlererekennungseinheit FE 27 ein Fehlersignal E = Enonerror ausgibt, das anzeigt, dass ein Codewort vorliegt.
  • Liegt ein Fehler vor, der ein Codewort des Codes C in ein Nicht-Codewort des Codes C verfälscht und ist das Steuersignal mod der Fehlererkennungsschaltung FEm 25 gleich 0, dann gibt die Fehlererkennungseinheit FE 27 ein Fehlersignal E = Eerror aus, das anzeigt, dass ein Nicht-Codewort vorliegt.
  • Der Speicher Sp 23a wird im normalen Funktionsmodus mit Daten belegt, die im fehlerfreien Fall Codewörter sind.
  • Die Schaltungsanordnung kann nun in einem Testmode permanente Fehler, wie beispielsweise Stuck-at Fehler an den Dateneingangsleitungen oder den Datenausgangsleitungen erkennen, was jetzt beschrieben werden soll.
  • Aus dem Speicher Sp 23a wird unter einer Adresse a ein Wort vi ausgelesen, wobei unter der Adresse a in einem vorhergehenden Zeitpunkt das Codewort vi-1 eingeschreiben wurde. Das Steuersignal mod der Fehlererkennungsschaltung FEm 25 ist dabei gleich 0. Ist das ausgelesene Wort vi ein Codewort des Codes C, dann zeigt die Fehlererkennungseinheit FE 27 an ihrem Ausgang keinen Fehler an.
  • Das Steuersignal st des Multiplexers 22 wird nun als st = 1 gewählt und das vom Speicher Sp ausgegebene Wort vi, das ein Codewort ist, wird durch die Inverterschaltung 24 komponentenweise invertiert und als bitweise invertiertes Codewort unter der gleichen Adresse a in den Speicher geschrieben. Das unter des Adresse a nun gespeicherte Wort, das im fehlerfreien Fall ein bitweise invertiertes Codewort des Codes C ist wird nun ausgelesen. Es sind nun in Abhängigkeit von dem verwendeten Code C zwei Fälle möglich.
    • 1. Das bitweise invertierte Codewort vi ist kein Codewort des Codes C.
    • 2. Das bitweise invertierte Codewort vi ist Codewort des Codes C
  • Wir betrachten zunächst den Fall, dass das bitweise invertierte Codewort vi kein Codewort des Codes C ist.
  • Das Steuersignal der Fehlererkennungsschaltung FEm 25 wird als mod = 1 gewählt und das von dem Speicher Sp 23a ausgelesene Wort liegt am Eingang der Fehlererkennungsschaltung FEm 25 an. Es wird in der XOR-Schaltung 26 bitweise invertiert. Liegt kein Fehler vor, dann ist das insgesamt zweimal bitweise invertierte Codewort wieder Codewort des Codes C und die Fehlererkennungseinheit FE 27 gibt kein Fehlersinal aus.
  • Liegt ein erkennbarer Fehler vor, dann wird er durch die Fehlererkennungseinheit FE 27 dadurch erkannt, dass das aus dem Speicher Sp 23a ausgelesene und bitweise invertierte Wort, kein Codewort des Codes C ist.
  • Es soll nun der Fall betrachtet werden, dass ein bitweise invertiertes Codewort wieder Codewort des Codes C ist. In diesem Fall, da das bitweise invertierte Codewort vi wieder Codewort des Codes C ist, ist es ausreichend nur ein Steuersignal mod, beispielsweise das Steuersignal mod = 0 zu verwenden. Die XOR-Schaltung 26 kann dann einfach weggelassen werden.
  • Indem man eine Adresse a des Speichers anlegt und das Read-Enable Signal aktiviert, wird ein Datenwort unter der Adresse a ausgelesen, wobei das Steuersignal mod beipielsweise den Wert mod = 0 hat. Liegt ein Fehler vor, der zu einem Nicht-Codewort führt, dann wird der Fehler am Ausgang der Fehlererkennungsschaltung FEm 25 durch ein Fehlersignal Eerror erkannt. Wird kein Fehler erkannt, so ist das ausgelesene Wort vi ein Codewort des Codes C.
  • Eine Modifikation der Schaltungsanordnung von 2b ist in 3 dargestellt.
  • Diejenigen Schaltungsteile von 3, die den beschriebenen Schaltungsteilen von 2b entsprechen, sind in 3 mit den gleichen Bezugszeichen wie in 2b bezeichnet, und sollen nicht ein weiteres Mal beschrieben werden.
  • Im Unterschied zu 2b wird eine Teilmenge der n Ausgangsleitungen des Multiplexers 22 über Negatoren 31 (Inverter 31), die z. B. die an ihrer jeweiligen Eingangsleitung anliegenden Signalwerte invertieren, mit den entsprechenden Dateneingangsleitungen des Speichers Sp 23 verbunden. Die entsprechenden Datenausgangsleitungen werden ebenfalls über Inverter 32 geführt und werden von diesen Invertern 32 invertiert, wobei die Schaltungsausgänge, mit den entsprechenden Eingängen der Inverterschaltung 24 und mit den entsprechenden Eingängen der Fehlererkennungsschaltung FEm 25 verbunden sind.
  • Wird beispielsweise ein Codewort v vom Coder 21 ausgegeben und dann, wenn das Steuersignal st des Multiplexers 22 gleich 0 ist, am Ausgang des Multiplexers 22 ausgegeben, dann werden die Komponenten von v, die über einen Inverter 31 mit den entsprechenden Dateneingängen des Speichers 23 verbunden sind, invertiert, und im Speicher Sp 23 gespeichert.
  • Es sei zum Beispiel der erste binäre Ausgang und der dritte binäre Ausgang des Multiplexers 22 über jeweils einen Inverter 31 mit dem ersten und dritten binären Dateneingang des Speichers 23 verbunden.
  • Wird von dem Coder Cod 21 das Codewort v = v1, v2, ..., vn ausgegeben, dann wird in den Speicher Sp 23 das Wort v' = v 1, v2, v 3, v4, v5, ..., vn unter der Adresse a gespeichert, wenn das Write-Enabled Signal WE aktiv ist und die Adresse a am Adresseneingang anliegt.
  • Ist nun das Read-Enabled Signal RE aktiv und liegt am Adresseneingang die Adresse a an, so wird dann, wenn kein Fehler aufgetreten ist, das in den entsprechenden Speicherzellen gespeicherte Wort v' = v 1, v2, v 3, v4, v5, ..., vn über die Inverter der ersten und dritten Datenausgangsleitung ausgegeben, so dass am Schaltungsausgang und an den Eingängen der Inverterschaltung 24 und der Fehlererkennungsschaltung FEm 25 das Wort v 1, v2, v 3, v4, v5, ..., vn = v1, v2, v3, v4, v5, ..., vn = v zur Verfügung steht.
  • Eine derartige Verwendung von Inverter 31 und 32 kann vorteilhaft sein, da sie es erlaubt, Speicherfehler zu erkennen, die dazu führen, dass alle Speicherzellen beispielsweise fehlerhaft den Wert 0 annehmen, was sich dann als ein durch die Fehlererkennungsschaltung FEm 25 erkennbaren Fehler auswirkt, wenn das Wort 0, das an den Positionen, in denen Inverter angebracht sind, invertiert ist, kein Codewort des Codes C ist.
  • Eine weitere Modifikation der Schaltungsanordnung von 2b ist in 4 dargestellt.
  • Diejengen Schaltungsteile von 4, die den schon beschriebenen Schaltungsteilen von 2b entsprechen, sind in 4 mit den gleichen Bezugszeichen wie in 2b beschrieben und sollen nicht ein weiteres Mal beschrieben werden.
  • Im Unterschied zu 2b ist die Inverterschaltung 24 der 2b durch die gesteuerte XOR-Schaltung 28 ersetzt, wobei die XOR-Schaltung 28 aus n XOR-Gattern mit jeweils zwei Eingängen und einem Ausgang aufgebaut sind.
  • Der jeweils erste Eingang der n XOR-Gatter 28 ist mit jeweils einem binären Ausgang des Multiplexers 22 verbunden, während der jeweils zweite Eingang der XOR-Gatter an den Steuereingang, der das Signal mod' trägt, angeschlossen ist. Ist also das Signal mod' = 1, dann wird das am Ausgang des Multiplexers 22 ausgegebene Signal invertiert in den Speicher 23 geschrieben.
  • Die n Ausgänge der XOR-Gatter sind mit den n Dateneingängen des Speichers Sp 23 verbunden.
  • Beispielsweise kann, wenn ein entsprechendes Steuersignal st am Multiplexers 22 anliegt, von den Ausgängen des Multiplexers 22 das n Bit breite Wort ausgegeben werden, dessen n Komponenten an den n ersten Eingängen der n XOR-Gatter das n-Bit breite Wort v anliegen. Ferner kann an den n zweiten Eingängen der n XOR-Gatter das Signal mod' anliegen.
  • Zunächst kann der Wert des Signals mod' beispielsweise einen ersten Wert, z. B. 0 annehmen. Dann bleibt das Wort v unverändert und wird in n Speicherzellen des Speichers 23 geschrieben. Dann werden die n Speicherzellen aus dem Speicher 23 ausgelesen. Die n ausgelesenen Werte der n Speicherzellen liegen dann an der Fehlererkennungsschaltung FEm 25 an. Ferner liegt ein Steuersignal mod an der Fehlererkennungsschaltung FEm 25 an, das beispielsweise ebenfalls den oben angesprochenen ersten Wert, z. B. 0 annimmt, und hierdurch anzeigt, dass an der XOR-Schaltung 28 das Signal mod' mit dem ersten Wert 0 angelegen hat, als das Datenwort v dort XOR-verknüpft wurde. Die Fehlererkennungsschaltung FEm 25 betreibt dann Fehlererkennung unter Nutzung dieser Information des Steuersignals mod.
  • Ferner liegen die n aus den Speicherzellen ausgelesenen Werte quasi rückgekoppelt an dem Multiplexer 22 an. Das Signal mod' kann nun auf einen zweiten Wert gesetzt werden, beispielsweise auf den Wert 1. Das Steuersignal st des Multiplexers kann nun so geändert werden, dass, statt des n-Bit breiten Worts v, die aus dem Speicher 23 ausgelesenen n Werte der n Speicherzellen zu der XOR-Schaltung 28 durchgeschaltet werden. Da das Signal mod' nun den Wert 1 annimmt, werden die n Werte, die aus den n Speicherzellen ausgelesen wurden, nun jeweils mit 1 XOR-verknüpft, also invertiert. Die so invertierten Werte werden dann wiederum in die n Speicherzellen des Speichers 23 geschrieben. Daraufhin werden die Werte der n Speicherzellen wiederum ausgelesen und die ausgelesenen Werte liegen dann an der Fehlererkennungsschaltung FEm 25 an. Ferner ist das Steuersignal mod, das an der Fehlererkennungsschaltung FEm 25 anliegt, auf den oben angesprochenen zweiten Wert 1 zu setzen, wodurch der Fehlererkennungsschaltung FEm 25 angezeigt wird, dass an der XOR-Schaltung 28 das Signal mod' mit dem zweiten Wert 1 angelegen hat, dass also an der XOR-Schaltung 28 invertiert wurde.
  • Bei diesem Ablauf ist die zeitliche Reihenfolge zu beachten. Um die „rückgekoppelten” ausgelesenen n Werte der n Speicherzellen zu invertieren, muss das Signal mod' auf den Wert 1 gesetzt werden, bevor die „rückgekoppelten” ausgelesenen n Werte der n Speicherzellen die XOR-Schaltung 28 passieren. Zu diesem Zeitpunkt liegen die ausgelesenen n Werte der n Speicherzellen aber noch in ihrer „nicht-invertierten Form” an der Fehlererkennungsschaltung FEm 25 an. Es ist also darauf zu achten, dass das Steuersignal mod der Fehlererkennungsschaltung FEm 25 zum richtigen Zeitpunkt von 0 auf 1 gesetzt wird.
  • In einer Ausführungsform wird z. B. das Steuersignal mod der Fehlererkennungsschaltung FEm 28 später als das Signal mod' auf den Wert 1 gesetzt.
  • In einer anderen Ausführungsform werden z. B. das Signal mod der XOR-Schaltung 28 und das Steuersignal mod der Fehlererkennungsschaltung FEm 28 zeitgleich von 0 auf 1 gesetzt, aber es ist, z. B. durch ein entsprechendes Taktsignal an der Fehlererkennungsschaltung FEm 28 gewährleistet, dass die Fehlererkennungsschaltung FEm 28 erst dann Fehlererkennung basierend auf dem neuen Wert 1 des Steuersignals mod betreibt, wenn die nun invertierten Werte aus dem Speicher ausgelesen wurden und an der Fehlererkennungsschaltung FEm 28 anliegen.
  • 5 zeigt eine spezielle Ausgestaltung einer Fehlererkennungsschaltung FEm 12 von 2a für einen binären linearen fehlererkennenden Code C.
  • Die Fehlererkennungsschaltung FEm 12 umfasst einen Syndromgenerator Syn 51, einen partiellen Inverter paInv 52 und eine OR-Schaltung 53.
  • Die n binären Ausgänge des Speichers Sp 11 sind wie in 2a dargestellt, mit den Eingangsleitungen der Fehlererkennungsschaltung FEm 12 verbunden, die in die n Eingänge des Syndromgenerators Syn 51 geführt werden und sich auf die m = n – k binäre Ausgangsleitungen auswirken.
  • Der Syndromgenerator Syn 51 ist so ausgestaltet, dass er aus den an seinen Eingängen anliegenden Binärwerten vi = v i / 1, v i / 2, ..., v i / n ein m-stelliges Syndrom s = s1, s2, ..., sm nach der Beziehung sT = H·(vi)T bildet, wobei H eine (m, n)-Prüfmatrix des Codes C ist, sT ein Spaltenvektor mit den m Komponenten s1, s2, ..., sm ist, und (vi)T ein Spaltenvektor mit n Komponenten v i / 1, v i / 2, ..., v i / n ist.
  • Der partielle Inverter paInv 52 ist so ausgestaltet, dass bei deaktiviertem mod Signal die m Werte der Eingänge s1, s2, ..., sm direkt an die Ausgänge s* = s * / 1, s * / 2, ..., s * / m weitergegeben werden.
  • Ist hingegen das mod Signal aktiviert, so wird aus den an seinen m Eingängen anliegenden Komponenten s1, s2, ..., sm des Syndroms s ein modifiziertes Syndrom s* = s * / 1, s * / 2, ..., s * / m gebildet. Dabei ist s * / j = sj ⊕ tj oder
    Figure DE102013215055A1_0014
    wobei tj durch
    Figure DE102013215055A1_0015
    bestimmt ist und t somit das Syndrom des Datenworts
    Figure DE102013215055A1_0016
    ist.
  • Der partielle Invertierer für j = 1, 2, ..., m paInv 52 kann beispielsweise realisiert werden, indem die j-te Ausgangsleitung des Syndromgenerators, die die Komponente sj des Syndroms s trägt, in den ersten Eingang eines XOR-Gatters XORj mit zwei Eingängen und einem Ausgang verbunden wird, an dessen zweiten Eingängen das Steuersignal mod anliegt und dessen Ausgang der j-te Ausgang des partiellen Inverters paInv 52 ist, wenn tj = 1 ist. Ist tj = 0, dann ist die j-te Eingangsleitung, die die Komponente sj des Syndroms s führt, direkt, ohne Invertierung mit dem j-ten Ausgang des partiellen Inverters paInv 52 verbunden.
  • Das modifizierte Syndrom s* ist aus vi durch den Syndromgenerator Syn 51 und den partiellen Inverter paInv 52 nach der Beziehung (s*)T = H·(vi)T ⊕ H·(1, 1, ..., 1)T = H·(vi ⊕ (1, 1, ..., 1))T bestimmt.
  • Die OR-Schaltung 53 weist m binäre Eingänge und einen binären Ausgang auf, der das Fehlersignal E trägt, wobei gilt
    Figure DE102013215055A1_0017
  • Die OR-Schaltung 53 kann beispielsweise als ein Baum aus OR-Gattern mit 2 Eingängen und einem Ausgang aufgebaut sein, wie das dem Fachmann bekannt ist.
  • 6 zeigt ein Ausführungsbeispiel wobei der Code C sowohl zur Fehlererkennung als auch zur Fehlerkorrektur Verwendung finden kann.
  • Die Schaltungsteile von 6, die den Schaltungsteilen von 2b entsprechen, sind mit den gleichen Bezugszeichen versehen und sie sollen nicht noch ein weiteres Mal beschrieben werden.
  • Zusätzlich zu einer Fehlererkennungsschaltung FEm 25 ist in dem Ausführungsbeispiel von 6 ein Korrektor Kor 61 vorhanden, der so konfiguriert ist, dass er aus dem vom Speicher Sp 23 ausgegebenem Wert vi einen n-stelligen binären Korrekturvektor e = e1, e2, ..., en bestimmt, der in einer XOR-Schaltung 62 mit dem vom Speicher Sp 23 ausgegebenen Wert vi komponentenweise zu vi(cor) verknüpft wird.
  • Der Korrektor Kor 61 findet im Funktionsmodus der Schaltung Verwendung.
  • Es ist nicht nötig, einen vom Speicher ausgelesenen Wert im Testmodus zu korrigieren, so dass der Korrektor Kor 61 im Testmodus abgeschaltet werden kann.
  • Der Entwurf eines Korrektors Kor 61 für einen fehlerkorrigierenden Code C ist einem Fachmann bekannt.
  • 7 zeigt für ein Ausführungsbeispiel, wie die Fehlererkennungsschaltung FEm 74 und ein Korrektor Kor 72 im Falle eines binären Codes C gemeinsam realisiert werden können.
  • Die Fehlererkennungsschaltung FEm 74 in 7 und die Fehlererkennungsschaltung FEm 12 in 5 sind dabei in gleicher Weise aus Teilschaltungen Syn 51, paInv 52 und der OR-Schaltung 53 aufgebaut, so dass der Aufbau der Fehlererkennungsschaltung FEm 74 in 7 nicht ein weiteres Mal beschrieben werden soll.
  • Der Ausgang des Syndromgenerators Syn 51 ist in 7 gleichzeitig mit einem ersten n-Bit breitem Eingang eines partiellen Inverters paInv 52 und mit dem n-Bit breiten Eingang eines Decoders Dec 71 verbunden, der so konfiguriert ist, dass er aus dem an seinem Eingang anliegenden, von dem Syndromgenerator ausgegebenen Syndrom s einen n-Bit breiten Korrekturvektor e = e1, e2, ..., en bestimmt, der mit der XOR-Schaltung 73 komponentenweise mit vi zu dem korrigierten Wort vi(corr) XOR-verknüpft wird.
  • Der Korrektor Kor 72 umfasst hier den Syndromgenerator Syn 51, der auch Teil der Fehlererkennungsschaltung FEm 74 ist und den Decoder Dec 71, so dass der Korrektor Kor 72 und die Fehlererkennungsschaltung FEm 74 gemeinsam realisiert sind, was zur Verringerung des Schaltungsaufwandes führt und somit vorteilhaft ist.
  • 8 zeigt eine Modifikation der Schaltungsanordnung von 6, wobei ein Korrektor Kor 81 den Fehlervektor e mit den Fehlerpositionen sowohl für nicht invertierte, als auch für invertierte Speicherwörter bestimmt.
  • Diejenigen Schaltungsteile von 8, die den beschriebenen Schaltungsteilen von 6 entsprechen, sind in 8 mit den gleichen Bezugszeichen wie in 6 bezeichnet, und werden hier nicht ein weiteres Mal beschrieben.
  • Die Fehlerkorrekturschaltung 61, die in 6 nur im Betriebsmodus und nicht im Testmodus aktiviert ist, ist in 8 durch eine modifizierte Fehlerkorrekturschaltung Kor 81 ersetzt, die auch für invertierte Codewörter einen Fehlervektor e und somit die betroffenen fehlerhaften Speicherpositionen bestimmt.
  • Die Fehlerkorrekturschaltung Kor 81 ist so konfiguriert, dass sie dem aus dem Speicher SP 23 ausgelesenen n-stelligen Speicherwort vi = v i / 1, v i / 2, ..., v i / n einen n-stelligen Fehlervektor e = e1, e2, ..., en zuordnet. Dabei wird bei einem ersten mod Signal, also zum Beispiel mod = 0, angenommen, dass im Speicher Sp 23 ein Codewort abgelegt wurde, wird hingegen ein zweites mod Steuersignal angelegt, also zum Beispiel mod = 1, wird angenommen, dass im Speicher Sp 23 ein invertiertes Codewort abgelegt wurde.
  • Der n-stellige Ausgang e wird mit einer XOR-Schaltung 62 mit dem vom Speicher Sp 23 ausgelesenen n-stelligem Wort vi komponentenweise zu vi(cor) verknüpft und mögliche 1, 2, ..., B-Bit-Fehler somit korrigiert.
  • Der Korrektor findet im Betriebs- oder Funktionsmodus der Schaltung zur Korrektur des Speicherwortes Anwendung, und kann im Testmodus dazu benutzt werden um die fehlerhaften Speicherzellen zu lokalisieren.
  • Eine Möglichkeit die Korrekturschaltung Kor 81 zu implementieren wird mit Hilfe von 9 erläutert.
  • 9 zeigt eine weitere gemeinsame Realisierung der Fehlererkennungsschaltung FEm 91 und der Fehlerkorrekturschaltung Kor 81, wobei der Korrektor Kor 81 den Fehlervektor e mit den Fehlerpositionen sowohl für nicht invertierte, als auch für invertierte Speicherwörter anzeigt.
  • Die Fehlererkennungsschaltung FEm 91, sowie die Fehlerkorrekturschaltung Kor 81 umfassen dabei dieselben Teilschaltungen Syndromgenerator Syn 51, partiellen Inverter paInv 52, OR-Schaltung 53 und Decoder Dec 71, wie die Fehlererkennungsschaltung FEm 74 und Fehlerkorrekturschaltung Kor 72 aus 7.
  • In 9 wird der m-Bit breite Ausgang des partiellen Inverters paInv 52 gleichzeitig in den m-Bit breiten Eingang des Decoders 71 und in den m-Bit breiten Eingang der OR-Schaltung 53 geführt.
  • Ist das Steuersignal mod gleich 0, dann liegen die nicht invertierten Ausgangswerte des Syndromgenerators Syn 51 direkt an den m Eingängen des Decoders 71 an, und der Decoder 71 bestimmt einen n-Bit breiten Korrekturvektor e = e1, ..., en, der in der XOR-Schaltung 62 mit vi zu vi(corr) XOR-verknüpft wird.
  • Ist das Steuersignal mod gleich 1, dann ist vi ein aus dem Speicher ausgegebenes Datenwort, in den ein invertiertes Codewort eingegeben wurde.
  • Liegt kein Fehler vor, dann ist vi ein komponentenweise invertiertes Codewort des Codes C.
  • Liegt ein Fehler in dem ausgegebenen Datenwort vi vor, dann unterscheidet sich vi um einen Fehlervektor e = e1, ..., en von einem komponentenweise invertierten Codewort des Codes C.
  • Am Ausgang des partiellen Invertierers paInv 52 werden die teilweise invertierten Syndromkomponenten des Datenwortes vi ausgegeben, die in die m Eingänge des Decoders 71 und gleichzeitig in die m Eingänge der OR-Schaltung 53 geführt sind, welche an ihrem Ausgang ein Fehlersignal E ausgibt.
  • Der Decoder Dec 71 bildet einen n-Bit breiten Korrekturvektor e = e1, ..., en, der in der XOR-Schaltung 62 mit dem Datenwort vi komponentenweise zu vi(cor) XOR-verknüpft wird, wobei vi(cor) das korrigierte Datenwort bildet. Dabei wurde hier angenommen, dass der durch den Fehlervektor e beschriebene Fehler in dem Datenwort vi ein durch den Code C korrigierbarer Fehler ist, so dass der Korrekturvektor gleich dem Fehlervektor ist. Zum Zwecke der Diagnose kann der Korrekturvektor e, der im Falle eines durch den Code C korrigierbaren Fehlers gleich dem Fehlervektor ist, an einem Ausgang 92 ausgelesen werden.
  • 10 zeigt eine Schaltungsanordnung, bei dem ein n-stelliger Speicher 23 mit Hilfe eines Coders 21, einer Fehlererkennungsschaltung FEm 140 und der Fehlerkorrekturschaltung Kor 150 geschützt ist. Ein Speicherwort kann mit Hilfe der partiellen Invertierer paInv1 110 und paInv2 120 in zwei Schritten invertiert werden.
  • Dabei ist der n-stellige Ausgang des Speichers 23 mit den n-stelligen Eingängen der patiellen Invertieren paInv1 110 und paInv2 120 verbunden. Die Ausgänge der partiellen Invertierer sind über einen Multiplexer 130 an den n-stelligen Eingang des Speichers Sp 23 verbunden. Die partiellen Invertierer 110, 120 invertieren zwei Teilmengen der Eingangsleitungen, wobei die Vereinigung beider Teilmengen alle Eingangsleitungen umfassen.
  • Ist das Speicherwort nicht invertiert, so liegt ein Steuersignal mod gleich 0 an der Fehlererkennungsschaltung FEm 140 an. Ist das Speicherwort mit Hilfe des partiellen Invertierers paInv1 invertiert, so liegt ein Steuersignal mod gleich 1 an der Fehlererkennungsschaltung FEm 140 an, und ist das Speicherwort mit Hilfe des partiellen Invertieres paInv2 invertiert, so liegt ein Steuersignal mod gleich 2 an der Fehlererkennungsschaltung FEm 140 an.
  • Der Korrektor Kor 150 bestimmt den Fehlervektor e mit den Fehlerpositionen sowohl für nicht invertierte, als auch für teilweise invertierte Speicherwörter, wobei das Steuersignal mod anzeigt, ob es nicht invertiert ist, mit Hilfe des ersten partiellen Invertierers paInv1 110 invertiert ist, oder ob es mit Hilfe des zweiten partiellen Invertierers paInv2 120 invertiert ist.
  • Ausführungsformen sollen nun für spezielle Codes erläutert werden. Table 1:
    u1 u2 u3 u4 c1 c2 C3
    0 0 0 0 0 0 0
    0 0 0 1 0 0 1
    0 0 1 0 0 0 1
    0 0 1 1 0 1 0
    0 1 0 0 0 0 1
    0 1 0 1 0 1 0
    0 1 1 0 0 1 0
    0 1 1 1 0 1 1
    1 0 0 0 0 0 1
    1 0 0 1 0 1 0
    1 0 1 0 0 1 0
    1 0 1 1 0 1 1
    1 1 0 0 0 1 0
    1 1 0 1 0 1 1
    1 1 1 0 0 1 1
    1 1 1 1 1 0 0
  • Tabelle 1 zeigt die Codewörter eines Berger-Codes, der statt Nullen die Einsen zählt, mit 4 Datenbits u1, u2, u3, u4 und drei Prüfbits c1, c2, c3. Die Prüfbits c1,c2,c3 sind eine binäre Darstellung der Anzahl der Einsen der Datenbits u1, u2, u3, u4. So sind etwa in Zeile 1 der Datenbits u1, u2, u3, u4 = 0, 0, 0, 0 die Prüfbits c1, c2, c3 = 0, 0, 0 und in Zeile 16 den Datenbits u1, u2, u3, u4 = 1, 1, 1, 1 die Prüfbits c1, c2, c3 = 1, 1, 0, 0 zugeordnet, wobei 0, 0, 0 der binären Darstellung von 0 und 1, 0, 0 der binären Darstellung von 4 entspricht.
  • Der Code ist nichtlinear, da die komponentenweise XOR-Summe beispielsweise der Codewörter (0001001) ⊕ (0010001) = (0011000) kein Codewort des Berger Codes ergibt.
  • Der Codeabstand des Codes ist 2, da sich die Codewörter 0001001 und 0010001 in 2 Bits unterscheiden und sich ein neues Codewort nicht nur durch Änderung eines Bits eines bestehenden Codeworts ergeben kann.
  • Beispielsweise könnte in einer speziellen Ausführungsform von 2c der Coder Cod 21 in 2c für den beschriebenen Berger-Code aus den Datenbits u1, u2, ..., uk = u1, u2, u3, u4 ein Codewort u1, u2, u3, u4, c1, c2, c3 nach Tabelle 1 bilden.
  • Ist das Steuersignal st des Multiplexers 22 gleich 0, liegt die Adresse a an den Adresseingängen an, und ist das Write-Enabled-Signal WE aktiviert, dann wird vi = u1, u2, u3, u4, c1, c2, c3 unter der Adresse a im Speicher Sp 23a gespeichert. Als Beispiel betrachten wir die Datenbits 0100 denen nach Tabelle 1 die Prüfbits 001 zugeordnet sind, so dass vi = 0100001 in den Speicher Sp 23a geschrieben wird.
  • Ist nun das Read-Enabled-Signal RE aktiviert, liegt die Adresse a an und liegt ein Stuck-At-O-Fehler auf der ersten Datenleitung, die das Bit u1 führt vor, dann wird 0100001 aus dem Speicher Sp 23a ausgelesen.
  • Ist nun das Steuersignal st = 1, das Steuersignal mod = 0 und das Write-Enabled-Signal WE aktiviert, dann wird das Wort 0100001 in der Inverterschaltung 24 in 1011110 invertiert und unter der Adresse a in den Speicher Sp 23a geschrieben.
  • Da das Steuersignal mod = 0 ist, wird das ausgelesene Wort 0100001, das in der Fehlererkennungsschaltung FEm 25 eingegeben wird, unverändert durch die XOR-Schaltung 26 an den Eingang der Fehlererkennungseinheit FE 27 geleitet, die prüft, ob 0100001 ein Codewort des Berger-Codes ist. Da dies der Fall ist, gibt sie das Fehlersignal E = Enonerror aus.
  • Nun wird das Read-Enabled-Signal RE des Speichers Sp 23a aktiviert, an dessen Adresseneingängen die Adresse a anliegt. Da ein Stuck-At-0-Fehler auf der ersten Datenleitung vorliegt, wird von dem Speicher Sp 23a das Wort 0011110 ausgelesen, das am Eingang der Fehlererkennungsschaltung FEm 25 anliegt.
  • Das Steuersignal mod ist gleich 1, und das durch die XOR-Schaltung 26 bitweise invertierte Wort 1100001 liegt am Eingang der Fehlererkennungseinheit FE 27 an, die prüft, ob 1100001 Codewort des Berger-Codes ist. Das ist nicht der Fall, so dass die Fehlererkennungseinheit FE 27 ein Fehlersignal E = Eerror ausgibt, was einen Fehler anzeigt. Der Stuck-At-0-Fehler auf der ersten Datenleitung ist erkannt worden.
  • Als ein weiteres Ausführungsbeispiel soll nun ein verkürzter Hamming-Code mit drei Datenbits u1, u2, u3 und drei Prüfbits c1, c2, c3 mit der H-Matrix
    Figure DE102013215055A1_0018
    betrachtet werden.
  • Das Fehlersyndrom s = (s1, s2, s3) ist durch sT = H·(u1, u2, u3, c1, c2, c3)T mit s1 = u1 ⊕ u2 ⊕ u3 ⊕ c1 s2 = u1 ⊕ u3 ⊕ c2 s3 = u2 ⊕ u3 ⊕ c3 bestimmt und es gilt H·(1, 1, 1, 1, 1, 1)T = (0, 1, 1)T.
  • Die Generatormatrix G ergibt sich in systematischer Form aus der H-Matrix zu
  • Figure DE102013215055A1_0019
  • Durch die G-Matrix ist aus den Datenbits u1, u2, u3 ein Codewort v = v1, v2, ..., v6 = u1, u2, u3, c1, c2, c3 als v = u·G und somit c1 = u1 ⊕ u2 ⊕ u3 c2 = u1 ⊕ u3 c3 = u2 ⊕ u3.
  • Als Beispiel betrachte man ein Datenwort u1, u2, u3 = 1, 0, 1 das durch den Codierer Cod 21 in das Codewort vi-1 = (1, 0, 1)·G = (1, 0, 1, 0, 0, 1) codiert wird.
  • Ist das Steuersignal st = 0, ist das Write-Enabled Signal WE aktiviert und liegt an den Adressleitungen des Speichers Sp 23a die Adresse a an, dann wird das Codewort 101001 unter der Adresse a gespeichert, wenn kein Fehler vorliegt.
  • Nehmen wir nun an, dass die erste Eingangsleitung, die das Datenbit u1 führt, einen Stuck-At-1 Fehler aufweist. Da das eingeschriebene Bit u1 = 1 ist, wirkt sich dieser Fehler zunächst nicht aus.
  • Ist nun das Read-Enabled Signal aktiviert und liegt die Adresse a auf den Adressleitungen des Speichers Sp 23a an, dann wird vi = 101001 auf den Ausgangsleitungen des Speichers Sp 23a ausgegeben. Dieser Wert 101001 liegt nun am Eingang der Fehlererkennungsschaltung FEm 25 und gleichzeitig am Eingang der Negatorschaltung 24 an.
  • Das Steuersignal mod ist gleich 0, so dass die XOR-Schaltung 26 das Signal 101001 unverändert an den Eingang der Fehlererkennungseinheit FE 27 weitergibt. Da 101001 Codewort des betrachteten Codes ist, gibt die Fehlererkennungseinheit FE 27 ein Fehlersignal E = Enonerror aus, so dass kein Fehler angezeigt wird.
  • Am Ausgang der Negatorschaltung 24 wird der Wert 010110 bereitgestellt.
  • Ist das Steuersignal des Multiplexers 22 st = 1, ist das Write-Enabled Signal WE aktiviert und liegt an den Adresseingängen die Adresse a an, dann wird das Signal 110110 im Speicher Sp 23a gespeichert, wobei die erste Komponente wegen des vorhandenen Stuck-At-1-Fehlers gleich 1 ist.
  • Ist nun das Read-Enabled Signal RE aktiviert und liegt die Adresse a an den Adressleitungen des Speichers Sp 23a an, dann wird aus dem Speicher Sp 23a das Signal 110110 ausgelesen, das am Eingang der Fehlererkennungsschaltung FEm 25 anliegt.
  • Das Steuersignal mod ist jetzt gleich 1, so dass 110110 in der XOR-Schaltung 26 in 001001 invertiert wird und am Eingang der Fehlererkennungseinheit FE 27 anliegt.
  • Da 001001 kein Codewort des betrachteten Codes ist, gibt die Fehlererkennungseinheit FE 27 ein Fehlersignal E = Eerror aus, was einen Fehler anzeigt.
  • Beispielsweise könnte in einer speziellen Ausführungsform von 5, die 5 eine Ausgestaltung der Fehlererkennungsschaltung FEm 12, bzw. 25 für einen linearen Code zeigen.
  • Eine solche spezielle Ausführungsform könnte einem Syndromgenerator Syn 51, einen partiellen Inverter paInv 52 und eine OR-Schaltung 53 umfassen.
  • In einer derartigen speziellen Ausführungsform der 5 könnte der Syndromgenerator 51 die Gleichungen s1 = u1 ⊕ u2 ⊕ u3 ⊕ c1, s2 = u1 ⊕ u3 ⊕ c2, s3 = u2 ⊕ u3 ⊕ c3. implementieren.
  • Da H·(1, 1, 1, 1, 1, 1)T = (0, 1, 1)T gilt, invertiert der partielle Inverter paInv 52 die zweite und dritte Komponente des Syndroms s = s1, s2, s3, wenn mod = 1 ist.
  • Das modifizierte Syndrom s* = (s * / 1, s * / 2, s * / 3) ist dann durch s * / 1 = s1 = u1 ⊕ u2 ⊕ u3 ⊕ c1 s * / 2 = s2 ⊕ mod = u1 ⊕ u3 ⊕ c2 ⊕ mod s * / 3 = s3 ⊕ mod = u2 ⊕ u3 ⊕ c3 ⊕ mod bestimmt, so dass die Bits s2 und s3 des Syndroms invertiert werden.
  • Liegt nun am Eingang der Fehlererkennungsschaltung FEm 12 das Wort 101001 an und ist das Steuersignal mod = 0, dann bildet der Syndromgenerator das Syndrom (s1, s2, s3) = H·(1, 0, 1, 0, 0, 1)T = (0, 0, 0), das durch den partiellen Inverter paInv nicht modifiziert wird, so dass s* = s = (0, 0, 0) gilt.
  • Die OR-Schaltung bildet das Fehlersignal OR(0, 0, 0) = 0 = Enonerror, so dass kein Fehler angezeigt wird.
  • Liegt nun (statt des korrekten invertierten Werts 010110) der Wert 110110 am Eingang des Syndromgenerators Syn 51 an, so gibt der Syndromgenerator Syn 51 an seinem Ausgang das Syndrom s = H·(110110)T = (101)T aus. Da das Steuersignal mod = 1 ist, wird das zweite und das dritte Bit invertiert, so dass s* = s ⊕ 011 = 110 gilt und die OR-Schaltung 53 ein Fehlersignal E = 1 = Eerror ausgibt, so dass der Fehler, dass am ersten Dateneingang des Speichers ein Stuck-At-1-Fehler vorliegt, erkannt wird.
  • Beispielsweise könnte in einer speziellen Ausführungsform von 10 die 10 ein Ausführungsbeispiel zeigen, bei dem die Invertierung des Speicherwortes in zwei Schritten vollzogen wird. Beispielhaft könnte man z. B. annehmen, dass der partielle Invertierer parinv1 110 z. B. jedes zweite Bit invertiert, also auf das Speicherwort v den Vektor (101010) addiert und der partielle Invertierer parinv2 120 im zweiten Schritt z. B. die anderen Eingänge invertiert, also auf das Speicherwort vi den Vektor (010101) addiert.
  • Da mit der obigen H-Matrix H gilt: (101010)·H = (011) (010101)·H = (000) kann das modifizierte Syndrom wie folgt angegeben werden: s * / 1 = s1 = u1 ⊕ u2 ⊕ u3 ⊕ c1 s * / 2 = s2 ⊕ mod = u1 ⊕ u3 ⊕ c2 ⊕ mod s * / 3 = s3 ⊕ mod = u2 ⊕ u3 ⊕ c3 ⊕ mod so dass die Bits s2 und s3 des Syndroms invertiert werden. Dieses modifizierte Syndrom kommt sowohl bei der Fehlererkennungsschaltung FEm 140, als auch bei der Korrekturschaltung Kor 150 zum Einsatz. Da (010101)·H = (000) und somit das modifizierte Syndrom für die Werte mod = 0 und mod = 2 dieselben Werte annehmen, wird keine zweite Steuerungsleitung mod benötigt und sie kann im Falle des verwendeten Codes weggelassen werden.
  • Als weiteres Ausführungsbeispiel betrachten wir nun einen Hsiao-Code mit 4 Datenbits u1, u2, u3, u4 und vier Prüfbits c1, c2, c3, c4 mit der H-Matrix
    Figure DE102013215055A1_0020
  • Für diesen Code ist der A11-1 Vektor (1, 1, 1, 1, 1, 1, 1, 1) Codewort, da H·(1, 1, 1, 1, 1, 1, 1, 1)T = (0, 0, 0, 0)T ist. Die Generatormatrix dieses Codes ist
    Figure DE102013215055A1_0021
  • Das Datenwort (u1, u2, u3, u4) = (1, 1, 0, 0) wird in das Codewort (1, 1, 0, 0)·G = (1, 1, 0, 0, 0, 0, 1, 1) überführt. Da (1, 1, 1, 1, 1, 1, 1, 1) Codewort ist, ist auch (11000011) ⊕ (11111111) = (00111100) Codewort.
  • Beispielsweise könnte man zur Erläuterung auf 2c beispielhaft bezugnehmen und annehmen, dass das Codewort (11000011) in dem Speicher Sp 23a unter der Adresse a gespeichert ist und dass kein Fehler vorliegt.
  • Liegt die Adresse a an den Adressleitungen des Speichers Sp 23a an und ist das Read-Enabled Signal RE aktiviert, dann wird das Wort 11000011 auf den Datenleitungen des Speichers Sp 23a ausgegeben und dieses Wort liegt somit am Eingang der Inverterschaltung 24 und am Eingang der Fehlererkennungsschaltung FEm 25 an. Das Steuersignal mod ist gleich 0 und die Fehlererkennungseinheit FE 27 gibt ein Fehlersingal E = Enonerror aus, wodurch angezeigt wird, dass kein Fehler vorliegt, da 11000011 Codewort ist.
  • Am Ausgang der Inverterschaltung 24 wird das Wort 00111100 gebildet. Ist das Steuersignal st = 1, das Write-Enabled Signal WE aktiviert und liegt die Adresse a an den Adresseingängen des Speichers Sp 23a an, dann wird nun das Wort 00111100 unter der Adresse a im Speicher Sp 23a gespeichert.
  • Wird nun das Read-Enabled Signal RE aktiviert und liegt die Adresse a weiterhin am Adresseingang des Speichers Sp 23a an, dann wird das Wort 00111100 aus dem Speicher Sp 23a ausgelesen, das am Eingang der Fehlererkennungsschaltung FEm 25 anliegt. Ist das Steuersignal mod gleich 1, dann wird das Codewort 00111100 in das Codewort 11000011 invertiert und dieses Wort liegt an der Fehlererkennungseinheit FE 27 an, die prüft, ob 00111100 Codewort ist.
  • Da das der Fall ist, gibt die Fehlererkennungsschaltung FE 27 ein Fehlersignal E = Enonerror aus, das anzeigt, dass kein Fehler vorliegt.
  • Das gleiche Resultat ergibt sich auch dann, wenn das Steuersignal mod gleich 0 gewählt wird, da 11000011 Codewort und auch 11111111 Codewort ist.
  • Ist also 11111111 Codewort des betrachteten binären Codes, dann ist es nicht notwendig, verschiedene Steuersignale mod = 0 oder mod = 1 anzuwenden.
  • Es ist dann möglich, stets das Steuersignal mod = 0 zu verwenden oder die XOR-Schaltung 26 einfach wegzulassen.
  • Wird das Speicherwort wie im Ausführungsbeispiel nach 10 in zwei Schritten invertiert, so wird beispielsweise hingegen das Steuersignal mod benötigt.
  • Gilt zum Beispiel: (10101010)·H = (1111)T (01010101)·H = (1111)T kann das modifizierte Syndrom wie folgt angegeben werden s * / 1 = s1 ⊕ mod = u1 ⊕ u2 ⊕ u3 ⊕ c1 ⊕ mod s * / 2 = s2 ⊕ mod = u1 ⊕ u2 ⊕ u4 ⊕ c2 ⊕ mod s * / 3 = s3 ⊕ mod = u1 ⊕ u3 ⊕ u4 ⊕ c3 ⊕ mod s * / 4 = s3 ⊕ mod = u2 ⊕ u3 ⊕ u4 ⊕ c4 ⊕ mod so dass die Bits s1, s2, s3 und s4 des Syndroms für die Fehlererkennungsschaltung FEm 140 und die Fehlerkorrekturschaltung Kor 150 invertiert werden.
  • Obwohl manche Aspekte im Zusammenhang mit einer Vorrichtung beschrieben wurden, versteht es sich, dass diese Aspekte auch eine Beschreibung des entsprechenden Verfahrens darstellen, sodass ein Block oder ein Bauelement einer Vorrichtung auch als ein entsprechender Verfahrensschritt oder als ein Merkmal eines Verfahrensschrittes zu verstehen ist. Analog dazu stellen Aspekte, die im Zusammenhang mit einem oder als ein Verfahrensschritt beschrieben wurden, auch eine Beschreibung eines entsprechenden Blocks oder Details oder Merkmals einer entsprechenden Vorrichtung dar. Einige oder alle der Verfahrensschritte können durch einen Hardware-Apparat (oder unter Verwendung eines Hardware-Apparats), wie zum Beispiel einen Mikroprozessor, einen programmierbaren Computer oder einer elektronischen Schaltung durchgeführt werden. Bei einigen Ausführungsbeispielen können einige oder mehrere der wichtigsten Verfahrensschritte durch einen solchen Apparat ausgeführt werden.
  • Je nach bestimmten Implementierungsanforderungen können Ausführungsbeispiele der Erfindung in Hardware oder in Software implementiert sein. Die Implementierung kann unter Verwendung eines digitalen Speichermediums, beispielsweise einer Floppy-Disk, einer DVD, einer BluRay Disc, einer CD, eines ROM, eines PROM, eines EPROM, eines EEPROM oder eines FLASH-Speichers, einer Festplatte oder eines anderen magnetischen oder optischen Speichers durchgeführt werden, auf dem elektronisch lesbare Steuersignale gespeichert sind, die mit einem programmierbaren Computersystem derart zusammenwirken können oder zusammenwirken, dass das jeweilige Verfahren durchgeführt wird. Deshalb kann das digitale Speichermedium computerlesbar sein.
  • Manche Ausführungsbeispiele gemäß der Erfindung umfassen also einen Datenträger, der elektronisch lesbare Steuersignale aufweist, die in der Lage sind, mit einem programmier-baren Computersystem derart zusammenzuwirken, dass eines der hierin beschriebenen Verfahren durchgeführt wird.
  • Allgemein können Ausführungsbeispiele der vorliegenden Erfindung als Computerprogrammprodukt mit einem Programmcode implementiert sein, wobei der Programmcode dahin gehend wirksam ist, eines der Verfahren durchzuführen, wenn das Computerprogrammprodukt auf einem Computer abläuft.
  • Der Programmcode kann beispielsweise auch auf einem maschinenlesbaren Träger gespeichert sein.
  • Andere Ausführungsbeispiele umfassen das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren, wobei das Computerprogramm auf einem maschinen-lesbaren Träger gespeichert ist. Mit anderen Worten ist ein Ausführungsbeispiel des erfindungsgemäßen Verfahrens somit ein Computerprogramm, das einen Programmcode zum Durchführen eines der hierin beschriebenen Verfahren aufweist, wenn das Computerprogramm auf einem Computer abläuft.
  • Ein weiteres Ausführungsbeispiel der erfindungsgemäßen Verfahren ist somit ein Datenträger (oder ein digitales Speichermedium oder ein computerlesbares Medium), auf dem das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren aufgezeichnet ist.
  • Ein weiteres Ausführungsbeispiel des erfindungsgemäßen Verfahrens ist somit ein Datenstrom oder eine Sequenz von Signalen, der bzw. die das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren darstellt bzw. darstellen. Der Datenstrom oder die Sequenz von Signalen kann bzw. können beispielsweise dahin gehend konfiguriert sein, über eine Datenkommunikationsverbindung, beispielsweise über das Internet, transferiert zu werden.
  • Ein weiteres Ausführungsbeispiel umfasst eine Verarbeitungseinrichtung, beispielsweise einen Computer oder ein programmierbares Logikbauelement, die dahin gehend konfiguriert oder angepasst ist, eines der hierin beschriebenen Verfahren durchzuführen.
  • Ein weiteres Ausführungsbeispiel umfasst einen Computer, auf dem das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren installiert ist.
  • Ein weiteres Ausführungsbeispiel gemäß der Erfindung umfasst eine Vorrichtung oder ein System, die bzw. das ausgelegt ist, um ein Computerprogramm zur Durchführung zumindest eines der hierin beschriebenen Verfahren zu einem Empfänger zu übertragen. Die Übertragung kann beispielsweise elektronisch oder optisch erfolgen. Der Empfänger kann beispielsweise ein Computer, ein Mobilgerät, ein Speichergerät oder eine ähnliche Vorrichtung sein. Die Vorrichtung oder das System kann beispielsweise einen Datei-Server zur Übertragung des Computerprogramms zu dem Empfänger umfassen.
  • Bei manchen Ausführungsbeispielen kann ein programmierbares Logikbauelement (beispielsweise ein feldprogrammierbares Gatterarray, ein FPGA) dazu verwendet werden, manche oder alle Funktionalitäten der hierin beschriebenen Verfahren durchzuführen. Bei manchen Ausführungsbeispielen kann ein feldprogrammierbares Gatterarray mit einem Mikroprozessor zusammenwirken, um eines der hierin beschriebenen Verfahren durchzuführen. Allgemein werden die Verfahren bei einigen Ausführungsbeispielen seitens einer beliebigen Hardwarevorrichtung durchgeführt. Diese kann eine universell einsetzbare Hardware wie ein Computerprozessor (CPU) sein oder für das Verfahren spezifische Hardware, wie beispielsweise ein ASIC.
  • Die oben beschriebenen Ausführungsbeispiele stellen lediglich eine Veranschaulichung der Prinzipien der vorliegenden Erfindung dar. Es versteht sich, dass Modifikationen und Variationen der hierin beschriebenen Anordnungen und Einzelheiten anderen Fachleuten einleuchten werden. Deshalb ist beabsichtigt, dass die Erfindung lediglich durch den Schutzumfang der nachstehenden Patentansprüche und nicht durch die spezifischen Einzelheiten, die anhand der Beschreibung und der Erläuterung der Ausführungsbeispiele hierin präsentiert wurden, beschränkt sei.
  • Literatur
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • Lin, S. Costello D. ”Error Control Coding”, Prentice Hall, 1983 beschrieben, auf die ausdrücklich Bezug genommen wird, wobei hier insbesondere auf die Seiten 51–8 [0086]

Claims (29)

  1. Schaltungsanordnung zur Erkennung von Speicherfehlern, umfassend: einen Speicher (Sp; 11; 23; 23a) und eine Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140), wobei die Schaltungsanordnung dafür ausgebildet ist, ein Codewort eines fehlererkennenden Codes (C) oder ein in einer Teilmenge (M) von Bits invertiertes Codewort in dem Speicher (Sp; 11; 23; 23a) an einem Speicherort zu speichern und ein Datenwort aus dem Speicher (Sp; 11; 23; 23a) von dem Speicherort auszulesen, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, für den Fall, dass ein anliegendes Steuersignal einen ersten Wert annimmt, einen Speicherfehler anzuzeigen, wenn dass Datenwort kein Codewort des fehlererkennenden Codes (C) ist, und wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, für den Fall, dass das anliegende Steuersignal einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist, und an den Speicherort das in der Teilmenge (M) von Bits invertierte Codewort geschrieben wurde, anhand des aus dem Speicher (Sp; 11; 23; 23a) ausgelesenen Datenworts zu bestimmen, ob ein Speicherfehler vorliegt, wenn das in der Teilmenge (M) von Bits invertierte Codewort kein Codewort des fehlererkennenden Codes (C) ist.
  2. Schaltungsanordnung nach Anspruch 1, wobei die Schaltungsanordnung ferner umfasst: n Daten-Eingangsleitungen und n Daten-Ausgangsleitungen, wobei die Schaltungsanordnung ausgebildet ist, von dem Speicherort des Speichers (Sp; 11; 23; 23a) das Datenwort vi = v i / 1, ..., v i / n, das n-stellig ist, auf den n Daten-Ausgangsleitungen auszulesen, wobei in den Speicherort des Speichers (Sp; 11; 23; 23a) vor dem Auslesen dieses Datenwortes das auf den n Daten-Eingangsleitungen anliegende Codewort vi-1 = v i-1 / 1, ..., v i-1 / n des fehlererkennenden Codes (C) an diesen Speicherort geschrieben wurde, oder wobei in den Speicherort des Speichers (Sp; 11; 23; 23a) ein Wort v i-1 / M geschrieben wurde, das n-stellig ist, wobei das Wort v i-1 / M durch Invertieren der Bits der Teilmenge (M) von Bits, wobei die Teilmenge (M) von Bits eine nichtleere Teilmenge (M) von Bits ist, aus einem Codewort vi-1 des Codes (C) gebildet ist, wobei, nachdem das Wort vi-1 oder das Wort v i-1 / M an einen Speicherort in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, kein weiteres Datenwort an diesen Speicherort in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, bis das Datenwort vi von diesem Speicherort aus dem Speicher (Sp; 11; 23; 23a) gelesen wurde.
  3. Schaltungsanordnung nach Anspruch 2, wobei der Code (C) einen Codeabstand d, d ≥ 2, aufweist, i ≥ 2 und n ≥ 4 sind.
  4. Schaltungsanordnung nach Anspruch 2 oder 3, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, in Abhängigkeit von dem Wert des anliegenden Steuersignals (mod) dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi ein n-stelliges Codewort vi-1 des Codes (C) in den Speicher (11; 23; 23a) geschrieben wurde, einen Fehler anzuzeigen, wenn das ausgelesene Datenwort vi kein Codewort des Codes (C) ist; und wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, wenn v i-1 / M Codewort des Codes (C) ist, und wenn M nicht alle n Bits umfasst, einen Fehler anzuzeigen, wenn das aus dem Speicher (Sp; 11; 23; 23a) ausgelesene Wort vi kein Codewort des Codes (C) ist, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, wenn v i-1 / M kein Codewort des Codes (C) ist, einen Fehler anzuzeigen, wenn das aus dem aus dem Speicher (Sp; 11; 23; 23a) ausgelesenen Wort vi gebildete Wort v i / M , das aus vi dadurch gebildet wird, dass die Bits, die zu der Teilmenge M gehören, invertiert sind, kein Codewort des Codes (C) ist, wobei das anliegende Steuersignal mod den ersten Wert annimmt, wenn vor dem Auslesen des Datenwortes ein Codewort vi-1 des Codes (C) eingegeben wurde, oder wenn vor dem Auslesen des Datenwortes ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge (M) gehören, aus einem Codewort des Codes (C) gebildet wird, in den Speicher (Sp; 11; 23; 23a) eingegeben wurde und wenn das Wort v i-1 / M ein Codewort des Codes (C) ist, wobei dann wenn v i-1 / M ein Codewort des Codes (C) ist, die Teilmenge (M) eine echte Teilmenge aller Bits ist, und wobei das anliegende Steuersignal mod den zweiten Wert, der von dem ersten Wert verschieden ist, annimmt, wenn vor dem Auslesen des Datenwortes vi ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge (M) gehören, aus einem Codewort des Codes (C) gebildet wird, in den Speicher (Sp; 11; 23; 23a) eingegeben wurde und das Wort v i-1 / M kein Codewort des Codes (C) ist.
  5. Schaltungsanordnung nach einem der Ansprüche 2 bis 4, wobei die nichtleere Teilmenge (M) aus allen n Bits besteht und
    Figure DE102013215055A1_0022
    gilt.
  6. Schaltungsanordnung nach einem der Ansprüche 2 bis 4, wobei die nichtleere Teilmenge (M) jedes zweite Bit umfasst und entweder
    Figure DE102013215055A1_0023
    gilt.
  7. Schaltungsanordnung nach einem der vorherigen Ansprüche, wobei der Speicher (Sp; 11; 23; 23a) ein adressierbarer Speicher ist, der einen Adresseneingang aufweist, wobei der Speicherort, an den geschrieben wird und der Speicherort, von dem gelesen wird, durch eine Adresse bestimmt ist.
  8. Schaltungsanordnung nach Anspruch 7, wobei der Speicher (Sp; 11; 23; 23a) ein RAM ist.
  9. Schaltungsanordnung nach Anspruch 7, wobei der Speicher (Sp; 11; 23; 23a) ein MRAM ist.
  10. Schaltungsanordnung nach Anspruch 7, wobei der Speicher (Sp; 11; 23; 23a) ein Registerarray ist.
  11. Schaltungsanordnung nach einem der Ansprüche 1 bis 6, wobei der Speicher (Sp; 11; 23; 23a) ein Register mindestens der Länge n des Code (C) ist.
  12. Schaltungsanordnung nach Anspruch 11, wobei das Register aus Flip-Flops aufgebaut ist.
  13. Schaltungsanordnung nach Anspruch 11, wobei das Register aus Latches aufgebaut ist.
  14. Schaltungsanordnung nach einem der vorhergehenden Ansprüche, wobei ein stellenweise invertiertes Wort v i-1 = v i-1 / 1, ..., v i-1 / n eines Codewortes vi-1 = v i-1 / 1 ..., v i-1 / n kein Codewort des Codes (C) ist.
  15. Schaltungsanordnung nach einem der vorhergehenden Ansprüche, wobei einer nichtleeren Teilmenge von Eingangsleitungen des Speichers (Sp; 11; 23; 23a) Inverter vorgeschaltet sind und den entsprechenden Ausgangsleitungen des Speichers (Sp; 11; 23; 23a) Negatoren nachgeschaltet sind.
  16. Schaltungsanordnung nach einem der vorhergehenden Ansprüche, wobei der Code (C) ein nichtlinearer Code ist.
  17. Schaltungsanordnung nach einem der Ansprüche 1 bis 15, wobei der Code (C) ein linearer Code ist.
  18. Schaltungsanordnung nach Anspruch 17, wobei der Code (C) ein linearer Code der Länge n mit k Datenbits ist, und der Code (C) eine H-Matrix H mit k Zeilen und n Spalten aufweist, wobei k < n ist, und wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) als Teilschaltung einen Syndromgenerator Syn aufweist, der so konfiguriert ist, dass er in Abhängigkeit von den aus dem Speicher (Sp; 11; 23; 23a) ausgelesenen Daten vi = v i / 1, ..., v i / n und einer binären Steuervariablen mod ein k-stelliges Fehlersyndrom s(vi) nach der Beziehung s(vi) = H·[vi ⊕ mod·(u1, ..., un)]T = H·(vi)T ⊕ {mod·H·(u1, ..., un)T}, bestimmt, wobei mod = 0 ist, wenn ein Codewort vi-1 des Codes (C) unter der Adresse a in den Speicher (Sp; 11; 23; 23a) eingeschrieben wurde oder wenn ein n-stelliges Wort v i-1 / M in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, wobei das Wort v i-1 / M durch Invertieren der Bits einer nichtleeren Teilmenge (M) von Bits aus einem Codewort vi-1 des Codes (C) gebildet ist und v i-1 / M ein Codewort des Codes (C) ist, und mod = 1 ist, wenn ein n-stelliges Wort v i-1 / M in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, wobei das Wort v i-1 / M durch Invertieren der Bits einer nichtleeren Teilmenge (M) von Bits aus einem Codewort vi-1 des Codes (C) gebildet ist und v i-1 / M kein Codewort des Codes (C) ist, und wobei (vi)T ein n-komponentiger binärer Spaltenvektor aus den Komponenten v i / 1, ..., v i / n ist und (u1, ..., un)T ein n-komponentiger binärer Spaltenvektor aus den Komponenten u1, ..., un ist, wobei für i = 1, ..., n gilt: ui = 1 für ui ∈ M und ui = 0 für ui ∉ M, und wobei H·(vi)T ⊕ {mod·H·(u1, ..., un)T} die komponenteweise XOR-Verknüpfung der k-stelligen Vektoren H·(vi)T und {mod·H·(u1, ..., un)T} darstellt und [vi ⊕ mod·(u1, ..., un)]T die stellenweise XOR-Verknüpfung der n-stelligen Vektoren vi und mod·(u1, ..., un)T ist und mod = 1 gilt, wenn H·(u1, ..., un)T ≠ 0 gilt.
  19. Schaltungsanordnung zum Testen und Erkennen von Speicherfehlern in einem Speicher (Sp; 11; 23; 23a) unter Verwendung von in dem Speicher (Sp; 11; 23; 23a) gespeicherten beliebigen Nutzdaten umfassend den Speicher (Sp; 11; 23; 23a) und eine Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140), wobei die Schaltungsanordnung dafür ausgebildet ist, ein Codewort eines fehlererkennenden Codes (C) an einen Speicherort des Speichers (Sp; 11; 23; 23a) zu schreiben und zu speichern, wobei die Schaltungsanordnung ferner dafür ausgebildet ist, ein Datenwort, das in dem Speicher (Sp; 11; 23; 23a) an einem Speicherort gespeichert ist, auszulesen, und wobei die Schaltungsanordnung ferner dafür ausgebildet ist, eine nichtleere Teilmenge von Bits eines Datenwortes, das aus dem Speicher (Sp; 11; 23; 23a) ausgelesen wurde, zu invertieren und das ausgelesene Datenwort, dessen nichtleere Teilmenge von Bits invertiert wurden, an den Speicherort zu schreiben, an dem das ausgelesene Datenwort gespeichert war, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist in Abhängigkeit von einem Wert eines Steuersignales einen Fehler anzuzeigen, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, wenn das Steuersignal einen ersten Wert annimmt, einen Speicherfehler anzuzeigen, wenn das aus dem Speicher (Sp; 11; 23; 23a) ausgelesene Datenwort kein Codewort des fehlererkennenden Codes (C) ist, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, wenn das Steuersignal einen zweiten Wert annimmt, einen Speicherfehler anzuzeigen, wenn das aus dem Speicher (Sp; 11; 23; 23a) ausgelesene und in der Teilmenge (M) von Bits invertierte Datenwort kein Codewort des fehlererkennenden Codes (C) ist, wobei das Steuersignal den ersten Wert annimmt, wenn ein Codewort an den Speicherort des Speichers (Sp 11, 23, 23a) geschrieben wurde, von dem das Datenwort ausgelesen wurde, wobei das Steuersignal den zweiten Wert annimmt, wenn das in der Teilmenge M von Bits invertierte, aus dem Speicher (Sp; 11; 23; 23a) ausgelesene Datenwort an den Speicherort geschrieben wurde von dem das Datenwort ausgelesen wird und wenn ein in der Teilmenge M von Bits invertiertes Codewort des fehlererkennenden Codes (C) kein Codewort des fehlererkennenden Codes (C) ist, wobei der erste Wert des Steuersignales von dem zweiten Wert des Steuersignales verschieden ist, und wobei die Teilmenge M eine echte Teilmenge aller Bits eines Datenwortes ist, wenn ein in der Teilmenge M von Bits invertiertes Codewort ein Codewort des fehlererkennenden Codes (C) ist.
  20. Schaltungsanordnung nach Anspruch 19, wobei der Code (C) ein linearer Code ist.
  21. Schaltungsanordnung, wobei die Schaltungsanordnung umfasst: einen Speicher (Sp; 11; 23; 23a), eine Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140), n Daten-Eingangsleitungen und n Daten-Ausgangsleitungen, wobei die Schaltungsanordnung ausgebildet ist, von dem Speicherort des Speichers (Sp; 11; 23; 23a) das Datenwort vi = v i / 1, ..., v i / n, das n-stellig ist, auf den n Daten-Ausgangsleitungen auszulesen, wobei in den Speicherort des Speichers (Sp; 11; 23; 23a) vor dem Auslesen dieses Datenwortes das auf den n Daten-Eingangsleitungen anliegende Codewort vi-1 = v i-1 / 1, ..., v i-1 / n des fehlererkennenden Codes (C) an diesen Speicherort geschrieben wurde, oder wobei in den Speicherort des Speichers (Sp; 11; 23; 23a) ein Wort v i-1 / M geschrieben wurde, das n-stellig ist, wobei das Wort v i-1 / M durch Invertieren der Bits einer nichtleeren Teilmenge M von Bits aus einem Codewort vi-1 des Codes (C) gebildet ist, wobei, nachdem das Wort vi-1 oder das Wort v i-1 / M an einen Speicherort in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, kein weiteres Datenwort an diesen Speicherort in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, bis das Datenwort vi von diesem Speicherort aus dem Speicher (Sp; 11; 23; 23a) gelesen wurde, wobei der Code (C) einen Codeabstand d, d ≥ 2, aufweist, i ≥ 2 und n ≥ 4 sind, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, in Abhängigkeit von dem Wert des Steuersignals (mod) dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi ein n-stelliges Codewort vi-1 des Codes (C) in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, einen Fehler anzuzeigen, wenn das ausgelesene Datenwort vi kein Codewort des Codes (C) ist; und wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, wenn v i-1 / M Codewort des Codes (C) ist, und wenn M nicht alle n Bits umfasst, einen Fehler anzuzeigen, wenn das aus dem Speicher (Sp; 11; 23; 23a) ausgelesenen Wort vi kein Codewort des Codes (C) ist, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, dann, wenn vor dem Auslesen des n-stelligen Datenwortes vi das Wort v i-1 / M , das n-stellig ist, in den Speicher (Sp; 11; 23; 23a) geschrieben wurde, wenn v i-1 / M kein Codewort des Codes (C) ist, einen Fehler anzuzeigen, wenn das aus dem aus dem Speicher (Sp; 11; 23; 23a) ausgelesene Wort vi gebildete Wort v i / M , das aus vi dadurch gebildet wird, dass die Bits, die zu der Teilmenge M gehören, invertiert sind, kein Codewort des Codes (C) ist, wobei das Steuersignal mod den ersten Wert annimmt, wenn vor dem Auslesen des Datenwortes ein Codewort vi-1 des Codes (C) eingegeben wurde, oder wenn vor dem Auslesen des Datenwortes ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge M gehören, aus einem Codewort des Codes (C) gebildet wird, in den Speicher (Sp; 11; 23; 23a) eingegeben wurde und wenn das Wort v i-1 / M ein Codewort des Codes (C) ist, wobei dann wenn v i-1 / M ein Codewort des Codes (C) ist, M eine echte Teilmenge aller Bits ist, und wobei das Steuersignal mod den zweiten Wert, der von dem ersten Wert verschieden ist, annimmt, wenn vor dem Auslesen des Datenwortes vi ein Wort v i-1 / M das durch Invertieren der Bits, die zu der Teilmenge M gehören, aus einem Codewort des Codes (C) gebildet wird, in den Speicher (Sp; 11; 23; 23a) eingegeben wurde und das Wort v i-1 / M kein Codewort des Codes (C) ist.
  22. Schaltungsanordnung nach Anspruch 21, wobei der Code (C) ein linearer Code ist.
  23. Schaltungsanordnung zur Erkennung von Speicherfehlern, umfassend: einen Speicher (Sp; 11; 23; 23a) und eine Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140), wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) zur Bestimmung von Fehlern in dem Speicher (Sp; 11; 23; 23a) eingerichtet ist, wobei der Speicher (Sp; 11; 23; 23a) dafür ausgebildet ist, dass in dem Speicher (Sp; 11; 23; 23a) Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits mit dem Codeabstand d ≥ 2 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n Codewort des Codes (C) ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind, und wobei die Vorrichtung dafür ausgebildet ist, in einem ersten Schritt, ein Codewort v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher (Sp; 11; 23; 23a) zu speichern, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem zweiten Schritt, ein Wort v2 = v 2 / 1, ..., v 2 / n das unter der Adresse a in dem Speicher (Sp; 11; 23; 23a) gespeichert ist, auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den zweiten Schritt nach dem ersten Schritt durchzuführen, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, in einem dritten Schritt, zu prüfen, ob v2 Codewort des Codes (C) ist, und, wenn v2 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen und die Verarbeitung zu beenden, und, wenn v2 Codewort des Codes (C) ist, keinen Fehler anzuzeigen und die Verarbeitung fortzusetzen, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem vierten Schritt, ein Codewort v3 = (v2)M1 unter der Adresse a im Speicher (Sp; 11; 23; 23a) zu speichern, wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert sind, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert sind, wenn in dem dritten Schritt festgestellt worden ist, dass v2 Codewort des Codes (C) ist, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem fünften Schritt, ein unter der Adresse a gespeichertes Wort v4 auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den fünften Schritt nach dem vierten Schritt durchzuführen, und wobei zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher (Sp; 11; 23; 23a) geschrieben wird, und wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) ferner dafür ausgebildet ist, in einem sechsten Schritt zu prüfen, ob v4 Codewort des Codes (C) ist, und, wenn v4 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen und das Verfahren zu beenden, und, wenn v4 Codewort des Codes (C) ist, keinen Fehler anzuzeigen.
  24. Schaltungsanordnung zur Erkennung von Speicherfehlern, umfassend: einen Speicher (Sp; 11; 23; 23a) und eine Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140), wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) zur Bestimmung von Fehlern in dem Speicher (Sp; 11; 23; 23a) eingerichtet ist, wobei der Speicher (Sp; 11; 23; 23a) dafür ausgebildet ist, dass in dem Speicher (Sp; 11; 23; 23a) Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits mit dem Codeabstand d ≥ 2 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n Codewort des Codes (C) ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind, und wobei die Vorrichtung dafür ausgebildet ist, in einem ersten Schritt, ein Codewort v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher (Sp; 11; 23; 23a) zu speichern, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem zweiten Schritt, ein Wort v2 = v 2 / 1, ..., v 2 / n, das unter der Adresse a in dem Speicher (Sp; 11; 23; 23a) gespeichert ist, auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den zweiten Schritt nach dem ersten Schritt durchzuführen, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wird, wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) dafür ausgebildet ist, in einem dritten Schritt, zu prüfen, ob v2 Codewort des Codes (C) ist, und, wenn v2 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen, und, wenn v2 Codewort des Codes (C) ist, keinen Fehler anzuzeigen, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem vierten Schritt, der nach dem dritten Schritt erfolgt, ein Codewort v3 = (v2)M1 unter der Adresse a im Speicher (Sp; 11; 23; 23a) zu speichern, wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert sind, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert sind, wobei die Vorrichtung ferner dafür ausgebildet ist, in einem fünften Schritt, ein unter der Adresse a gespeichertes Wort v4 auszulesen, wobei die Vorrichtung dafür eingerichtet ist, den fünften Schritt nach dem vierten Schritt durchzuführen, und wobei zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher (Sp; 11; 23; 23a) geschrieben wird, und wobei die Fehlererkennungsschaltung (FEm; 12; 25; 74; 91; 140) ferner dafür ausgebildet ist, in einem sechsten Schritt zu prüfen, ob v4 Codewort des Codes (C) ist, und, wenn v4 nicht Codewort des Codes (C) ist, einen Fehler anzuzeigen, und, wenn v4 Codewort des Codes (C) ist, keinen Fehler anzuzeigen.
  25. Schaltungsanordnung nach Anspruch 23 oder 24, wobei der Code (C) ein linearer Code ist.
  26. Verfahren zur Erkennung von Speicherfehlern, umfassend: Speichern eines Codeworts eines fehlererkennenden Codes (C) oder eines in einer Teilmenge (M) von Bits invertiertem Codeworts in dem Speicher (Sp; 11; 23; 23a) an einem Speicherort, Auslesen eines Datenworts aus dem Speicher (Sp; 11; 23; 23a) von dem Speicherort, Anzeigen eines Speicherfehlers, wenn dass Datenwort nicht ein Codewort des fehlererkennenden Codes (C) ist, wenn ein Steuersignal einen ersten Wert annimmt, und, für den Fall, dass das Steuersignal einen zweiten Wert annimmt, der von dem ersten Wert verschieden ist, und an den Speicherort das in der Teilmenge (M) von Bits invertierte Codewort geschrieben wurde, Bestimmen anhand des aus dem Speicher (Sp; 11; 23; 23a) ausgelesenen Datenworts, ob ein Speicherfehler vorliegt, wenn das in der Teilmenge (M) von Bits invertierte Codewort kein Codewort des fehlererkennenden Codes (C) ist.
  27. Verfahren zur Bestimmung von Fehlern in einem Speicher (Sp; 11; 23; 23a), in dem Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits und mit dem Codeabstand d ≥ 2 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v i / n Codewort des Codes (C) ist und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind, wobei das Verfahren mindestens die folgenden Schritte umfasst: In einem ersten Schritt, Speichern eines Codewortes v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher (Sp; 11; 23; 23a), in einem zweiten Schritt, Auslesen eines Wortes v2 = v 2 / 1, ..., v 2 / n, das unter der Adresse a in dem Speicher (Sp; 11; 23; 23a) gespeichert ist, wobei dieser zweite Schritt nach dem ersten Schritt erfolgt, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wurde, in einem dritten Schritt, Prüfen, ob v2 Codewort des Codes (C) ist, wobei, wenn v2 nicht Codewort des Codes (C) ist, ein Fehler angezeigt wird und das Verfahren beendet wird, und wobei, wenn v2 Codewort des Codes (C) ist, kein Fehler angezeigt wird und das Verfahren fortgesetzt wird, in einem vierten Schritt, Speichern eines Codeworts v3 = (v2)M1 unter der Adresse a im Speicher (Sp; 11; 23; 23a), wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v2 mit i ∈ {1, ..., n} von v2 invertiert werden, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert werden, wenn in dem dritten Schritt festgestellt worden ist, dass v2 Codewort des Codes (C) ist, in einem fünften Schritt, Auslesen eines unter der Adresse a gespeicherten Wortes v4, wobei der fünfte Schritt nach dem vierten Schritt erfolgt und zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher (Sp; 11; 23; 23a) geschrieben wird, und in einem sechsten Schritt, Prüfen, ob v4 Codewort des Codes (C) ist, wobei, wenn v4 nicht Codewort des Codes (C) ist, ein Fehler angezeigt wird und das Verfahren beendet wird, und wobei, wenn v4 Codewort des Codes (C) ist, kein Fehler angezeigt wird.
  28. Verfahren zur Bestimmung von Fehlern in einem Speicher (Sp; 11; 23; 23a), in dem Nutzdatenbits u = u1, ..., uk als Codewort v = v1, ..., vn eines Codes (C) der Länge n mit k Informationsbits und mit dem Codeabstand d ≥ 2 gespeichert werden, wobei es q Teilmengen M1 = {v1,1, ..., v1,n1}, ..., Mq = {vq,1, ..., vq,nq} mit q ≥ 1 und ni ≤ n für i = 1, ..., q der Menge M = {v1, ..., vn} der n Komponenten des Codewortes v = v1, ..., vn gibt, wobei M1 ∪ M2 ∪ ..., ∪ Mk = M gilt und so, dass, wenn v = v1, ..., vn Codewort des Codes (C) ist für i = 1, ..., q auch vMi = v i / 1, ..., v in Codewort des Codes (C) ist und mindestens einer der Werte n1, ..., nq kleiner als n ist, wobei vMi aus v so gebildet ist, dass die Komponenten von v, die Element von Mi sind, invertiert sind und die Komponenten von v, die nicht Element von Mi sind, nicht invertiert sind, wobei das Verfahren mindestens die folgenden Schritte umfasst: In einem ersten Schritt, Speichern eines Codewortes v1 = v 1 / 1, ..., v 1 / n des Codes (C) unter einer Adresse a in dem Speicher (Sp; 11; 23; 23a), in einem zweiten Schritt, Auslesen eines Wortes v2 = v 2 / 1, ..., v 2 / n, das unter der Adresse a in dem Speicher (Sp; 11; 23; 23a) gespeichert ist, wobei dieser zweite Schritt nach dem ersten Schritt erfolgt, und wobei zwischen dem ersten Schritt und dem zweiten Schritt unter der Adresse a kein weiteres Wort in den Speicher geschrieben wurde, in einem dritten Schritt, Prüfen, ob v2 Codewort des Codes (C) ist, wobei, wenn v2 nicht Codewort des Codes (C) ist, ein Fehler angezeigt wird, und wobei, wenn v2 Codewort des Codes (C) ist, kein Fehler angezeigt wird, in einem vierten Schritt, Speichern eines Codeworts v3 = (v2)M1 unter der Adresse a im Speicher (Sp; 11; 23; 23a), wobei v3 = (v2)M1 aus v2 so bestimmt ist, dass die Komponenten v 2 / i mit i ∈ {1, ..., n} von v2 invertiert werden, die zu M1 gehören und alle die Komponenten, die nicht zu M1 gehören, nicht invertiert werden, in einem fünften Schritt, Auslesen eines unter der Adresse a gespeicherten Wortes v4, wobei der fünfte Schritt nach dem vierten Schritt erfolgt und zwischen den vierten Schritt und dem fünften Schritt unter der Adresse a kein weiteres Wort in den Speicher (Sp; 11; 23; 23a) geschrieben wird, und in einem sechsten Schritt, Prüfen, ob v4 Codewort des Codes (C) ist, wobei, wenn v4 nicht Codewort des Codes (C) ist, ein Fehler angezeigt wird, und wobei, wenn v4 Codewort des Codes (C) ist, kein Fehler angezeigt wird.
  29. Computerprogramm mit einem Programmcode zur Durchführung des Verfahrens nach einem der Ansprüche 26 bis 28.
DE102013215055.5A 2013-07-31 2013-07-31 Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern Active DE102013215055B4 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102013215055.5A DE102013215055B4 (de) 2013-07-31 2013-07-31 Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
CN201410371682.7A CN104376877B (zh) 2013-07-31 2014-07-31 对存储器中的永久错误进行错误识别的电路装置和方法
US14/447,806 US9646716B2 (en) 2013-07-31 2014-07-31 Circuit arrangement and method with modified error syndrome for error detection of permanent errors in memories

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102013215055.5A DE102013215055B4 (de) 2013-07-31 2013-07-31 Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern

Publications (2)

Publication Number Publication Date
DE102013215055A1 true DE102013215055A1 (de) 2015-02-05
DE102013215055B4 DE102013215055B4 (de) 2021-01-28

Family

ID=52341905

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102013215055.5A Active DE102013215055B4 (de) 2013-07-31 2013-07-31 Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern

Country Status (3)

Country Link
US (1) US9646716B2 (de)
CN (1) CN104376877B (de)
DE (1) DE102013215055B4 (de)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102017115056B3 (de) * 2017-07-05 2018-11-15 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb
DE102017115057A1 (de) * 2017-07-05 2019-01-10 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb durch Vergleich zweier Schreibvorgänge mit unterschiedlichem Inversionsstatus
DE102017115058A1 (de) * 2017-07-05 2019-01-10 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb und Herbeiführung der Ausfallsicherheit
CN109215723A (zh) * 2017-07-05 2019-01-15 艾尔默斯半导体股份公司 检查寄存器单元或存储器单元的固定故障的方法
CN110543790A (zh) * 2018-05-29 2019-12-06 英飞凌科技股份有限公司 访问存储器的方法、装置、设备和计算机可读介质

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9813080B1 (en) 2013-03-05 2017-11-07 Microsemi Solutions (U.S.), Inc. Layer specific LDPC decoder
US10230396B1 (en) 2013-03-05 2019-03-12 Microsemi Solutions (Us), Inc. Method and apparatus for layer-specific LDPC decoding
US9703989B1 (en) * 2014-12-23 2017-07-11 Altera Corporation Secure physically unclonable function (PUF) error correction
US10332613B1 (en) * 2015-05-18 2019-06-25 Microsemi Solutions (Us), Inc. Nonvolatile memory system with retention monitor
US9799405B1 (en) 2015-07-29 2017-10-24 Ip Gem Group, Llc Nonvolatile memory system with read circuit for performing reads using threshold voltage shift read instruction
US9886214B2 (en) 2015-12-11 2018-02-06 Ip Gem Group, Llc Nonvolatile memory system with erase suspend circuit and method for erase suspend management
US9892794B2 (en) 2016-01-04 2018-02-13 Ip Gem Group, Llc Method and apparatus with program suspend using test mode
US9899092B2 (en) 2016-01-27 2018-02-20 Ip Gem Group, Llc Nonvolatile memory system with program step manager and method for program step management
US20170324425A1 (en) 2016-05-06 2017-11-09 Infineon Technologies Ag Embedded parity matrix generator
US10291263B2 (en) 2016-07-28 2019-05-14 Ip Gem Group, Llc Auto-learning log likelihood ratio
US10157677B2 (en) 2016-07-28 2018-12-18 Ip Gem Group, Llc Background reference positioning and local reference positioning using threshold voltage shift read
US10236915B2 (en) 2016-07-29 2019-03-19 Microsemi Solutions (U.S.), Inc. Variable T BCH encoding
JP6841698B2 (ja) * 2017-03-21 2021-03-10 ルネサスエレクトロニクス株式会社 半導体装置
IT201700050153A1 (it) * 2017-05-09 2018-11-09 St Microelectronics Srl Modulo hardware di sicurezza, relativo sistema di elaborazione, circuito integrato e dispositivo
JP7329876B2 (ja) * 2018-09-07 2023-08-21 イリディア・インコーポレイテッド ポリマーに記憶されたデータの書込みおよび読出しのための改善されたシステムおよび方法
US20240013847A1 (en) * 2021-09-29 2024-01-11 Dream Chip Technologies Gmbh Electronic circuit and method for self-diagnosis of a data memory

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120131418A1 (en) * 2009-09-09 2012-05-24 Kabushiki Kaisha Toshiba Memory device

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0563491A1 (de) * 1992-03-31 1993-10-06 International Business Machines Corporation Verfahren und Vorrichtung zur Ausführung eines Kodes, der Dreifachfehler erkennt und Zweifachfehler korrigiert
US5644583A (en) * 1992-09-22 1997-07-01 International Business Machines Corporation Soft error correction technique and system for odd weight row error correction codes
US6275965B1 (en) * 1997-11-17 2001-08-14 International Business Machines Corporation Method and apparatus for efficient error detection and correction in long byte strings using generalized, integrated, interleaved reed-solomon codewords
JP4602246B2 (ja) * 2005-12-28 2010-12-22 株式会社東芝 半導体集積回路
US20080115029A1 (en) * 2006-10-25 2008-05-15 International Business Machines Corporation iterative test generation and diagnostic method based on modeled and unmodeled faults
WO2009051917A1 (en) * 2007-10-15 2009-04-23 Joseph Schweiray Lee Providing error correction to unwritten pages and for identifying unwritten pages in flash memory
EP2063432B1 (de) * 2007-11-15 2012-08-29 Grundfos Management A/S Verfahren zum Prüfen eines Arbeitsspeichers
US8612828B2 (en) * 2009-12-22 2013-12-17 Intel Corporation Error correction mechanisms for 8-bit memory devices
CN103077095B (zh) * 2012-12-28 2015-05-27 华为技术有限公司 内存数据的纠错方法及装置及计算机系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120131418A1 (en) * 2009-09-09 2012-05-24 Kabushiki Kaisha Toshiba Memory device

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Carter, W. C. und McCarthy, C. E., "Implementation of an Experimental Fault-Tolerant Memory System", IEEE Trans. Computers C-25, 557-568, Juni 1976
Chen, C. und Hsiao, M. "Error Correcting Codes for Semiconductor Memory Application, a State of the Art Review", IBM Research and Development, Vol. 28, No. 2, März 1984
Lin, S. Costello D. "Error Control Coding", Prentice Hall, 1983
Lin, S. Costello D. "Error Control Coding", Prentice Hall, 1983 beschrieben, auf die ausdrücklich Bezug genommen wird, wobei hier insbesondere auf die Seiten 51-8
Sundberg, C. -E. W., "Erasure and Error Decoding for Semiconductor Memories", IEEE Trans. Computers C-27, 696-705, August 1978

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102017115056B3 (de) * 2017-07-05 2018-11-15 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb
DE102017115057A1 (de) * 2017-07-05 2019-01-10 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb durch Vergleich zweier Schreibvorgänge mit unterschiedlichem Inversionsstatus
DE102017115058A1 (de) * 2017-07-05 2019-01-10 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb und Herbeiführung der Ausfallsicherheit
CN109215723A (zh) * 2017-07-05 2019-01-15 艾尔默斯半导体股份公司 检查寄存器单元或存储器单元的固定故障的方法
DE102017115057B4 (de) 2017-07-05 2019-03-07 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb durch Vergleich zweier Schreibvorgänge mit unterschiedlichem Inversionsstatus
DE102017115058B4 (de) 2017-07-05 2019-03-07 Elmos Semiconductor Aktiengesellschaft Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb und Herbeiführung der Ausfallsicherheit
CN110543790A (zh) * 2018-05-29 2019-12-06 英飞凌科技股份有限公司 访问存储器的方法、装置、设备和计算机可读介质
CN110543790B (zh) * 2018-05-29 2023-12-12 英飞凌科技股份有限公司 访问存储器的方法、装置、设备和计算机可读介质

Also Published As

Publication number Publication date
CN104376877A (zh) 2015-02-25
DE102013215055B4 (de) 2021-01-28
CN104376877B (zh) 2018-05-22
US9646716B2 (en) 2017-05-09
US20150039952A1 (en) 2015-02-05

Similar Documents

Publication Publication Date Title
DE102013215055B4 (de) Schaltungsanordnung, Vorrichtung, Verfahren und Computerprogramm mit modifiziertem Fehlersyndrom zur Fehlererkennung von permanenten Fehlern in Speichern
DE102015201384B4 (de) Vorrichtung und Verfahren zum Verbessern der Datenspeicherung durch Dateninvertierung
DE60117066T2 (de) Verfahren und Vorrichtung zum Überprüfen von fehlerkorrigierenden Codes
DE102013211077B4 (de) Verfahren zum Testen eines Speichers und Speichersystem
DE102011085602B4 (de) Vorrichtung und Verfahren zum Korrigieren zumindest eines Bitfehlers in einer codierten Bitsequenz
DE102005028221B4 (de) Vorrichtung und Verfahren zum Schutz der Integrität von Daten
DE102019123642A1 (de) Speicherfehlererkennung und korrektur
DE102007058828A1 (de) Speicherbauelement und Fehlerkorrekturverfahren
DE102013016681B4 (de) Codieren und Decodieren von Daten zum Vornehmen von Anpassungen für Speicherzellen mit Haftfehlern
DE102006005817B4 (de) Fehlererkennungsvorrichtung für einen Adressdecoder und Vorrichtung zur Fehlererkennung für einen Adressdecoder
DE102015215401A1 (de) Speichervorrichtung und Verfahren zum Korrigieren einer gespeicherten Bitfolge
DE102017103347A1 (de) Verarbeitung von daten in speicherzellen eines speichers
DE112004001843T5 (de) System und Verfahren zum automatischen Erkennen von Softfehlern in Latches einer integrierten Schaltung
DE102011087634B4 (de) Vorrichtung und verfahren zum erfassen eines fehlers in einem codierten binärwort
DE60215687T2 (de) Fehlerkorrektion von multibit-baueinheiten mit unbeschränkter erkennung von doppelfehlern
DE102016104012A1 (de) Verarbeitung eines Datenworts
DE102011087457A1 (de) Vorrichtung und verfahren zum erfassen eines fehlers in einer mehrzahl von codierten binärwörtern, die durch einen fehlerkorrekturcode codiert sind
DE112019001968B4 (de) Gemeinsame korrekturlogik für hohe und niedrige zufalls-bitfehlerraten
DE102011080659B4 (de) Vorrichtung und verfahren zum testen einer zu testenden schaltung
DE102019113970B4 (de) Erkennung von adressfehlern
DE2742881C2 (de)
DE102017107431B4 (de) Verfahren und Vorrichtungen zur Fehlerkorrekturcodierung beruhend auf hochratigen verallgemeinerten verketteten Codes
EP1579230B1 (de) Vorrichtung und verfahren zur bildung einer signatur
EP0491073B1 (de) Verfahren und Schaltungsanordnung zur Datensicherung in Speichereinheiten
DE102017115058B4 (de) Verfahren zur Überprüfung sicherheitsrelevanter Register- oder Speicherzellen auf Stuck-At-Fehler im Betrieb und Herbeiführung der Ausfallsicherheit

Legal Events

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