-
Die
vorliegende Erfindung bezieht sich auf das technische Gebiet der
Halbleiterspeicher und insbesondere bezieht sich die vorliegende
Erfindung auf das technische Teilgebiet der Überprüfung der Integrität von Halbleiterspeichern
für Sensoren,
wie sie beispielsweise in der Kraftfahrzeugelektronik eingesetzt
werden.
-
Moderne
integrierte Sensoren enthalten einen kleinen Datenspeicher in der
Größe von 10
Bit bis 1000 Bit, um damit die Kalibrierdaten eines Sensors am Chip
zu speichern. Für
Automotiv-Anwendungen wird dabei eine hohe Zuverlässigkeit
gefordert, so dass es erforderlich ist, die Integrität der Daten
mit bekannten Verfahren fehlererkennender und fehlerkorrigierender
Codes (FEC-Codes = forward error correcting codes = vorwärts fehlerkorrigierende Codes)
zu gewährleisten.
-
Da
die Speichergröße also
im Vergleich zu heute üblichen
Datenerhaltungssystemen sehr gering ist und man andererseits aus
Gründen
der Ökonomie
gezwungen ist, ein möglichst
einfaches System zu implementieren, ist als FEC-Verfahren der Matrix-Parity-Check
weit verbreitet. Um den Matrix-Parity-Check näher zu erläutern, ist in 6 ein Speicher 600 symbolisch
dargestellt. Der Speicher 600 hat eine Wortbreite von 16
Bit, wobei die einzelnen Bits der Worte durch die Bitnummern 602 bezeichnet
werden, wie sie in 6 in
der Zeile über dem
Speicher 600 dargestellt sind (d.h. die Spalten 0 bis 15
bezeichnen die einzelnen Bits der entsprechenden Worte). Ferner
umfasst der Speicher 600 einen Adressbereich von 15 Wörtern, wobei
jedes Wort in eine Zeile 604 eingeschrieben werden kann,
wodurch die 15 Wörter
in dem Speicher 600 durch die Zeilenadresse addr i = 0
... 14 adressiert werden können.
Die Aufteilung in zwei Datenbereiche (user und precal data) kann hier
ignoriert werden. Auf der Adresse 0 werden Zeilenparity-Bits gespeichert,
auf der Spalte 15, die durch das Bezugszeichen 606 gekennzeichnet
ist, werden entsprechende Spaltenparity-Bits gespeichert. Weiter
ist mit der Bezeichnung „row
parity" (Bezugszeichen 608)
die errechnete Parity pro Zeile dargestellt (diese wird jedoch nicht
abgespeichert, sondern beim Auslesen einer Zeile berechnet). Ebenso
ist mit „column
parity" (Bezugszeichen 610)
die errechnete Parity pro Spalte dargestellt (diese wird ebenfalls
nicht abgespeichert, sondern beim Auslesen der Zeile berechnet).
-
Die
Funktionsweise des vorstehend beschriebenen Matrix-Parity-Checks kann
wie folgt beschrieben werden. Die für einen Sensor benötigen Kalibrierdaten
werden in die Adressen 1 bis 14 und die Spalten 0 bis 14 einprogrammiert.
Jedes Wort wird mit einem Parity-Bit versehen, das in der Spalte 15
einprogrammiert wird. Das Parity-Bit ist so zu wählen, dass die Anzahl der Einsen
pro Zeile gerade ist (= even parity). In Adresse 0 wird die Parityzeile – das heißt die Gesamtheit
aller Spaltenparitybits – gespeichert;
diese wird so berechnet, dass die Anzahl der Einsen pro Spalte ebenso
gerade ist. Hierbei ist anzumerken, dass als Spaltenparity die Parity
aller Zellen einer Spalte (also für die Zeilen 1 ... 15) und
als Zeilenparity die Parity aller Zellen einer Zeile (also für alle Spalten
0 .. 15 einer Zeile) bezeichnet wird. Im gegensatz dazu wird als
Parityzeile diejenige Zeile (in dem Beispiel in der Adresse 0 gespeichert)
bezeichnet, in der keine Daten stehen sondern nur Spaltenparitybits,
d.h. die Redundanzinformation zur Fehlererkennung und -korrektur
enthalten. Analog wird als Parityspalte diejenige Spalte (im Beispiel
die Spalte mit der Adresse 0) bezeichnet, die keine Daten sondern
nur Zeilenparitybits enthält,
die Redundanzinformation zur Fehlererkennung bzw. -korrektur enthalten.
-
Beim
Auslesen der Daten wird die Anzahl der Einsen pro Spalte und Zeile
gezählt.
Ist sie ungerade, so muss zumindest ein Bit in der betreffenden
Zeile oder Spalte gekippt sein. Wie dies beispielsweise in 7 anhand des Bits in Spalte
Nummer 7 und Zeile Nummer 10 dargestellt ist. Technisch ist das
Zählen der
Anzahl an Einsen im gesamten Speicher umständlich. Daher wird nur die
Anzahl der Einsen pro Spalte andauernd berechnet, indem die Bits
einer Spalte mit einem EXKLUSIV-ODER-Gatter verknüpft werden (beispielweise in
Form einer hard coded logic). Dies bedeutet dann, dass beispielsweise
das Bit der Adresse 0, Spalte 7 mit dem Bit der Adresse 1, Spalte
7, dem Bit der Adresse 2, Spalte 7, ..., und dem Bit der Adresse
14, Spalte 7 EXKLUSIV-ODER verknüpft
wird, um das Bit in der Column-Parity-Zeile (d.h. das Bit Nr. 7
der Zeile 610) für
die Spalte 7 zu erreichen. Formal kann eine derartige Operation
folgendermaßen
dargestellt werden:
Bit (Adresse 0, Spalte 7) ⊕ Bit (Adresse
1, Spalte 7) ⊕ ... ⊕ Bit (Adresse
14, Spalte 7) = Columnparity <7>. Dabei bedeutet das
Symbol ⊕ eine
XOR-Verknüpfung
(=EXKLUSIV-ODER-Verknüpfung),
was einer Addition Modul 2 gleichkommt. Ist Columnparity <7> = 0, so ist die Anzahl
der Einsen in der Spalte 7 gerade, d.h. es wurde kein Bitfehler
in dieser Spalte entdeckt.
-
Ist
Columnparity <7> = 1, so ist die Anzahl der
Einsen in der Spalte 7 ungerade, d.h. es wurde ein Bitfehler in
dieser Spalte entdeckt. Beim Auslesen einer Zeile – wie sie
in 7 durch die hervorgehobene
Adressezeile 10 markiert ist – wird
diese in ein Ausleseregister 612 kopiert, wo alle Zellen
dieses Registers mit XOR (= EXKLUSIV-ODER) verknüpft werden, um die Zeilenparity
zu berechnen. Formal lässt
sich eine derartige Operation zur Ermittlung des Reiehenparitätsbits 614 durch
die folgende Gleichung beschreiben:
Row parity = Bit <0> ⊕ Bit <1> ⊕ ... ⊕ Bit <15>.
-
Weiterhin
ist in den 6 und 7 noch dargestellt, wie im
Falle einer Fehlerdetektion, (d.h. wenn die Row parity = 1 ist)
ein erkannter Fehler automatisch korrigiert werden kann.
-
Dies
erfolgt dadurch, dass das Rowparity-Bit 614 in einem UND-Gatter 616 mit
einem Fehlerkorrektur-Enable-Signal fec_en_i verknüpft wird,
wobei das Fehlerkorrektur-Enable-Signal
einen logischen Wert von 1 annimmt, wenn eine Vorwärtsfehlerkorrektur
durchgeführt
werden soll. Das aus dem UND-Gatter 616 resultierende Signal
wird als Eingangssignal eines weiteren UND-Gatters 618 verwendet,
an dessen zweiten Eingang die Werte der Columnparity 610 angelegt
werden, so dass als Ausgangssignal des UND-Gatters 618 ein
16 Bit breites Wort ausgegeben wird, in welchem die Stellen des
in der entsprechenden Adresszeile addr_i, die korrigiert werden
sollen, mit einem binären
Wert von 1 codiert sind, während
die nicht zu korrigierenden Stellen mit dem binären Wert von 0 codiert sind.
Dieses Ausgangssignal des UND-Gatters 618 wird dann als
ein Eingangssignal einem EXKLUSIV-ODER-Gatters 620 zugeführt, an
dessen zweitem Eingang das 16 Bit breite Wort aus dem Register 612 angelegt
wird. Hierbei wird eine spaltenweise EXKLUSIV-ODER-Verknüpfung durchgeführt, wobei
die entsprechend gekippten Bits des in dem Register 612 gespeicherten
Wortes korrigiert werden können.
-
Zur
Verdeutlichung wird nochmals angeführt, dass als Parity eigentlich
die Anzahl der Einsen in einem Datenwort bezeichnet wird. Even parity
ist dann gegeben, wenn diese Anzahl gerade is, sonst ist odd parity
gegeben. Der Speicherinhalt besteht daher aus Nutzdaten und zusätzlichen
Paritybits.
-
In
dem vorstehend dargestellten Beispiel waren die Zeile auf Adresse
0 sowie in allen anderen Adressen die Spalte 15 Patitybits. Die
Nutzdaten waren in den Spalten 0 ... 14 und in den Zeilen 1 .. 14 angeordnet.
Die Parityberechnung erstreckt sich über die Nutzdaten plus Paritybit
plus Paritymaske.
-
Die
Eigenschaften des Matrix-Parity-Checks zur Fehlererkennung lassen
sich wie folgt zusammenfassen. Es kann mit Sicherheit erkannt werden, wenn
ein oder zwei Bits gekippt sind; kippt nur ein Bit, so stimmt die
Parity in der betref fenden Zeile und Spalte nicht, sind zwei Bits
in unterschiedlichen Spalten und Zeilen gekippt, so zeigen alle
Spalten und Zeilen das durch eine falsche Parity in den entsprechenden
Zeilen und Spalten an. Sind zwei Bits in der gleichen Zeile gekippt,
so stimmt zwar die Zeilenparity, nicht aber die Spaltenparity. Analoges
gilt auch für das
Kippen von zwei Bits in der gleichen Spalte. Auch beim Kippen von
drei Bits wird sicher zumindest ein gekipptes Bit als fehlerhaft
erkannt.
-
Außerdem kann
ein einzelnes gekipptes Bit sogar automatisch korrigiert werden,
da seine Position durch die falsche Zeilen- und Spaltenparity ermittelt
werden kann, kann es beim Auslesen invertiert und somit der ursprüngliche
Zustand wieder hergestellt werden (= automatische Fehlerkorrektur).
-
Ein
solches Verfahren eignet sich somit vorzüglich, um kleine Defekte, die
nur wenige Bits betreffen, anzuzeigen und eventuell sogar zu beheben (wenn
nämlich
nur 1 Bit gekippt ist). Somit können Ausfälle, die
durch heute übliche
kleine Defektdichteprobleme zustanden kommen, behoben werden.
-
Problematisch
erweist sich das oben beschriebene Verfahren jedoch darin, dass
der Ausfall des ganzen Speichers oder eines Teilbereichs des Speichers
mit geradzahliger Anzahl an Zeilen und Spalten nicht erkannt werden
kann. Im Folgenden wird ein derartiger Teilbereich eines Speichers
als „gerader
Block" bezeichnet.
-
Ein
solcher Ausfall eines geraden Blocks kann beispielsweise durch einen
Kurzschluss aller Zellen einer Spalte nach Masse (= stuck-at-low)
oder nach Betriebsspannung (=stuck-at-high) verursacht sein. Ebenso
ist es denkbar, dass der Lesestrom zum Auslesen der Zellen durch
einen Defekt zu klein oder zu groß wird, was dazu führen kann,
dass alle Zellen als digitale „1" oder digitale „0" ausgelesen werden. Eventuell
kann der gesamte Speicher durch unzulässig hohe ESD- (ESD = e lectrostatic
discharge = elektrostatische Entladung) oder EMV-Belastung (EMV
= elektromagnetische Verträglichkeit)
ungewollt auf „1" oder „0" programmiert werden.
-
Eine
mögliche
Lösung
gegen derartige Probleme könnte
darin bestehen, dass durch geeignete Codierung der zu speichernden
Daten sichergestellt ist, dass die Speicherinhalte „alles
1" bzw. „alles
0" kein gültiger Datensatz
sind, d.h. diese Speicherinhalte nie programmiert werden. Eine Auswerteschaltung
müsste
dann im Betrieb kontinuierlich alle Daten auslesen und die Anzahl
der Einsen und Nullen aufsummieren. Wenn diese ein festgesetztes
Limit überschreiten,
wird dieses als Fehler erkannt. Diese Auswerteschaltung ist jedoch
aufwendig, kompliziert und fehleranfällig (weil sie sequentiell
arbeitend eine hohe Anzahl von Arbeitsschritten ausführen muss), relativ
viel Platz auf dem Chip einnimmt verglichen mit dem kleinen Datenspeicher
und ferner auch ineffizient ist, da sie nur den vollkommen gelöschten oder gesetzten
Speicher erkennen kann, nicht aber den Ausfall eines geraden Blocks.
-
Die
Aufgabe der vorliegenden Erfindung besteht daher darin, eine Möglichkeit
zu schaffen, den Ausfall eines Teilbereichs eines Speichers auf
einfache, sichere und kostengünstige
Weise zu erkennen, um die vorstehend genannten Probleme im Stand
der Technik zu vermeiden.
-
Diese
Aufgabe wird durch eine Speicherüberprüfungsvorrichtung
gemäß Anspruch
1, eine Verfahren zum Überprüfen eines
Speichers gemäß Anspruch
10, eine Speicherbelegungsvorrichtung gemäß Anspruch 11 oder ein Verfahren
zum Belegen eines Speichers gemäß Anspruch
22 gelöst.
-
Die
vorliegende Erfindung schafft eine Speicherüberprüfungseinrichtung für einen
Speicher mit Speicherzellen, die in Speicherzeilen und Speicherspalten
angeordnet sind und binäre
Speicherwerte aufweisen, wobei der Speicher in einem integeren Zustand
derart belegt ist, dass Paritätswerte
für zwei Speicherzeilen
oder für
zwei Speicherspalten bei gleichen Paritätswertberechnungsvorschriften
voneinander unterschiedlich sind oder bei unterschiedlichen Paritätswertberechnungsvorschriften
gleich sind, wobei die Speicherüberprüfungsvorrichtung
folgende Merkmale umfasst:
einen Leser zum Auslesen der binären Speicherwerte
der zwei Speicherspalten oder der zwei Speicherzeilen; und
eine
Prüfeinrichtung,
die ausgebildet ist, um für
die zwei Speicherspalten oder die zwei Speicherzeilen den Paritätswert gemäß der für die entsprechende Speicherspalte
oder die entsprechende Speicherzeile gültigen Berechnungsvorschrift
zu berechnen und mit einem erwarteten Paritätswert für den integeren Zustand zu
vergleichen und im Falle einer Abweichung einen Hinweis auf einen
Fehler in einer der Speicherzeilen oder einer der Speicherspalten
zu liefern, um hierdurch den Speicher zu überprüfen.
-
Ferner
schafft die vorliegende Erfindung ein Verfahren zum Überprüfen eines
Speichers mit Speicherzellen, die in Speicherzeilen und Speicherspalten
angeordnet sind und binäre
Speicherwerte aufweisen, wobei der Speicher in einem integeren Zustand
derart belegt ist, dass sich Paritätswerte für zwei Speicherzeilen oder
für zwei
Speicherspalten bei gleichen Paritätswertberechnungsvorschriften voneinander
unterscheiden oder bei unterschiedlichen Paritätswertberechnungsvorschriften
gleich sind, wobei die das Verfahren die folgenden Schritte umfasst:
Auslesen
der binären
Speicherwerte der zwei Speicherspalten oder der zwei Speicherzeilen;
und
Berechnen des Paritätswertes
für die
zwei Speicherspalten oder die zwei Speicherzeilen gemäß der für die entsprechende
Speicherspalte oder die entsprechende Spei cherzeile gültigen Berechnungsvorschrift
und Vergleichen der berechneten Paritätswerte mit einem erwarteten
Paritätswert
für den
integeren Zustand;
Liefern eines Hinweises auf einen Fehler
in einer der Speicherzeilen oder einer der Speicherspalten im Falle
einer Abweichung des berechneten Paritätswertes von einem erwarteten
Paritätswert
für den
integeren Zustand, um hierdurch den Speicher zu überprüfen.
-
Ferner
schafft die vorliegende Erfindung eine Speicherbelegungsvorrichtung
für einen
Speicher mit Speicherzellen, die in Speicherzeilen und Speicherspalten
angeordnet sind und binäre
Speicherwerte speichern können,
wobei die Speicherbelegungsvorrichtung folgende Merkmale aufweist:
eine
Einrichtung zum Bestimmen der Speicherwerte, die in den entsprechenden
Speicherzellen des Speichers abzuspeichern sind, wobei die Einrichtung
zum Bestimmen ausgebildet ist, um die Speicherwerte derart zu bestimmen,
dass Paritätswerte
für zwei Speicherzeilen
oder für
zwei Speicherspalten bei gleicher Paritätswertberechnungsvorschrift
voneinander unterschiedlich sind oder bei unterschiedlichen Paritätswertberechnungsvorschriften
gleich sind; und
einem Schreiber zum Einschreiben der durch
die Einrichtung zum Bestimmen bestimmter Speicherwerte in die entsprechenden
Speicherzellen des Speichers, um den Speicher zu belegen.
-
Ferner
schafft die vorliegende Erfindung ein Verfahren zum Belegen von
Speicherzellen eines Speichers, die in Speicherzeilen und Speicherspalten
in dem Speicher angeordnet sind und binäre Speicherwerte speichern
können,
wobei das Verfahren folgenden Schritte aufweist:
Bestimmen
der Speicherwerte, die in den entsprechenden Speicherzellen des
Speichers abzuspeichern sind, wobei das Bestimmen derart erfolgt,
dass Paritätswerte
für zwei
Speicherzeilen oder für
zwei Speicherspalten bei gleicher Paritätswertberechnungsvorschrift
voneinander unterschiedlich sind oder bei unterschiedlichen Paritätswertberechnungsvorschriften
gleich sind; und
Einschreiben der bestimmten Speicherwerte
in die entsprechenden Speicherzellen des Speichers, um den Speicher
zu belegen.
-
Der
vorliegenden Erfindung liegt die Erkenntnis zugrunde, dass ein Fehler
in einem geraden Block dann erkannt werden kann, wenn zwei Zeilenparities
für zwei
Zeilen des betrachteten geraden Blocks oder zwei Spaltenparities
für zwei
Spalten des betrachteten geraden Blocks bei gleicher Berechnungsvorschrift
für die
entsprechenden Zeilenparities bzw. Spaltenparities gleich sind.
Dies setzt voraus, dass die in den Speicherzellen des Speichers
eingespeicherten Werte derart ausgewählt wurden, dass bei einem
integereren Zustand, d.h. bei einem fehlerfreien Zustand des Speichers,
die entsprechenden Zeilenparities für die betrachteten Speicherzeilen voneinander
unterschiedlich sind oder die entsprechenden Spaltenparities für die betreffenden
Speicherspalten voneinander unterschiedlich sind. In einem bevorzugten
Ausführungsbeispiel
können
die zwei betrachteten Zeilen oder die zwei betrachteten Spalten
des Speichers direkt benachbart angeordnet sein. Wird beispielsweise
für eine
erste Zeile eine Zeilenparity von 1 bestimmt, während für die direkt benachbarte Zeile
des Speichers eine Zeilenparity von 0 bestimmt, kann bei einem stuck-at-low-Fehler des
geraden Blocks mit den beiden Zeilen dann ein Fehler erkannt werden,
wenn die beiden Zeilenparities den binären Wert von 0 haben. In diesem
Fall wird nämlich
für die
erste Zeile kein binärer
Wert von 1 in dieser ersten Zeile enthalten sein, wodurch auch die
Zeilenparity für
diese erste Zeile 0 sein wird. Andererseits wird auch in der zweiten
Zeile des durch einen stuck-at-low-Fehlers beeinträchtigen
geraden Blocks ebenfalls kein logischer Wert von 1 enthalten sein,
so dass auch die Zeilenparity für
die zweite Zeile den Wert von 0 aufweist. Wenn jedoch durch eine entsprechende
Belegung der Speicherwerte des Speichers eine Zeilenparity von 1
für die
zweite Zeile resultieren müsste,
kann somit durch die Detektion des tatsächlichen Wertes der Zeilenparity
von 0 für die
zweite Zeile ein Fehler erkannt werden. Analoges gilt gleichfalls
auch für
die Detektion von Fehlern in einem geraden Block, wenn diese Detektion
auf der Basis von Spalten und entsprechenden Spaltenparities erfolgt.
Allgemein gesagt kann somit durch eine entsprechende Vorbelegung
des Speichers unter Verwendung von unterschiedlichen Parities für die einzelnen
Zeilen des Speichers ein Fehler in einem geraden Block bzw. einem
Teilspeicher erkannt werden.
-
Abhängig von
der Berechnungsvorschrift für die
entsprechenden Zeilen- bzw. Spaltenparities kann auch ein Fehler
erkannt werden, wenn die beiden Zeilenparities für zwei Zeilen des zu untersuchenden
geraden Blocks voneinander verschieden sind. Dies kann beispielsweise
dadurch bedingt sein, dass die Zeilenparity für die erste Zeile durch eine EXKLUSIV-ODER-Verknüpfung der
einzelnen Speicherwerte durchgeführt
wird, die in den Speicherzellen der ersten Speicherzeile gespeichert
sind. Für
die Berechnung der zweiten Zeilenparity für die zweite Zeile kann dann
beispielsweise wiederum eine EXKLUSIV-ODER-Verknüpfung der Speicherwerte erfolgen,
die in den einzelnen Speicherzellen der zweiten Speicherzeile gespeichert
sind. Hiernach kann jedoch dann eine Invertierung des aus der EXKLUSIV-ODER-Verknüpfung der
Speicherwerte der zweiten Speicherzeile erhaltenen Wertes erfolgen,
um die Zeilenparity für
die zweite Speicherzeile zu erhalten. In diesem Fall würde dann
die Parityberechnungsvorschrift für die erste Speicherzeile und
die zweite Speicherzeile voneinander unterschiedlich sein, wodurch
dann ein Fehler erkannt wird, wenn sich die beiden berechneten Zeilenparities
voneinander unterscheiden. In diesem Fall bräuchte nicht einmal der Speicher anders
belegt zu werden, sondern es ist lediglich die Berechnungsvorschrift
für die
einzelnen Zeilenparities in den entsprechenden Zeilen mit der zugehörigen Auswertungsvorschrift
zu beachten. Die gleiche Argumentation gilt natürlich auch bei der Erkennung
von Fehlern eines geraden Blocks unter Verwendung von zwei Spalten
und zwei entsprechenden Spaltenparities.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend anhand der beiliegenden
Zeichnungen näher
erläutert.
Es zeigen:
-
1A ein
Blockdiagramm eines Ausführungsbeispiels
der erfindungsgemäßen Speicherüberprüfungsvorrichtung;
-
1B ein
Blockschaltbild eines Ausführungsbeispiels
der erfindungsgemäßen Speicherbelegungsvorrichtung;
-
2 eine
tabellarische Darstellung zur Belegung des Speichers, um den erfindungsgemäßen Ansatz
umsetzen zu können;
-
3 eine
weitere tabellarische Darstellung, um die Belegung des Speichers
zu erläutern,
die notwendig ist, um den erfindungsgemäßen Ansatz einsetzen zu können;
-
4 eine
Darstellung einer Herleitung für eine
Berechnungsvorschrift für
die Belegung des Speichers, um den erfindungsgemäßen Ansatz umsetzen zu können;
-
5 eine
Darstellung einer weiteren Belegungsvorschrift, um den Speicher
zu belegen, damit der erfindungsgemäße Ansatz eingesetzt werden kann;
-
6 eine
Darstellung einer Speicherbelegung gemäß einem herkömmlichen
Ansatz sowie eine Darstellung eines Blockdiagramms zur Korrektur
eines Einzelbitfehlers in der Belegung des Speichers; und
-
7 eine
Darstellung, wie sich das Auftreten eines Einzelbitfehlers in dem
Speicher auf die entsprechenden Spalten- und Zeilenparities auswirkt sowie
ein Blockdiagramm zur Korrektur eines entsprechend aufgetretenen
Einzelbitfehlers.
-
In
der nachfolgenden Beschreibung von bevorzugten Ausführungsbeispielen
werden gleiche oder ähnliche
Elemente mit gleichen oder ähnlichen Bezugszeichen
versehen, wobei auf eine wiederholte Beschreibung dieser Elemente
verzichtet wird.
-
Die 1 zeigt ein Blockschaltbild eines Ausführungsbeispiels
der erfindungsgemäßen Speicherüberprüfungsvorrichtung.
Hierbei weist die Speicherüberprüfungsvorrichtung
einen Leser 100 auf, der ausgebildet ist, um binäre Speicherwerte
von zwei Speicherspalten oder von zwei Speicherzeilen des Speichers 600 auszulesen.
Der Speicher 600 sollte derart mit Speicherwerten belegt
sein, dass die beiden Parities für
je eine der beiden Speicherzeilen oder für je eine der beiden Speicherspalten
bei gleichen Parityberechnungsvorschriften voneinander unterschiedlich
sind oder bei unterschiedlichen Parityberechnungsvorschriften gleich
sind. Die von dem Leser 100 ausgelesenen Speicherwerte
des Speichers 600 werden dann an die Prüfeinrichtung 102 übertragen,
die ausgebildet ist, um für
die zwei Speicherspalten oder die zwei Speicherzeilen je einen Paritätswert gemäß der für die entsprechenden
Speicherspalten oder Speicherzeilen gültigen Parityberechnungsvorschrift
zu berechnen und mit einer erwarteten Parity für den integeren Zustand zu
vergleichen und im Falle einer Abweichung einen Hinweis auf einen
Fehler in einer der Zeilen oder einer der Spalten zu liefern, um
hierdurch den Speicher zu überprüfen.
-
Dieser
Hinweis auf einen Fehler in einer der Zeilen oder einer der Spalten
kann dann als Ausgangssignal der Prüfeinrichtung 102 ausgegeben werden.
-
In 1B ist
ein Blockschaltbild eines Ausführungsbeispiels
der erfindungsgemäßen Speicherbelegungsvorrichtung
dargestellt. Die Speicherbelegungsvorrichtung umfasst eine Einrichtung 150 zum Bestimmen
der Speicherwerte, die in entsprechenden Speicherzellen des Speichers 600 abzuspeichern
sind. Hierbei ist die Einrichtung 150 zum Bestimmen ausgebildet,
um die Speicherwerte derart zu bestimmen, dass Parities für zwei Speicherzeilen oder
für zwei
Speicherspalten bei gleichen Parityberechnungsvorschriften voneinander
unterschiedlich sind oder bei unterschiedlichen Parityberechnungsvorschriften
gleich sind. Die bestimmten Speicherwerte werden nachfolgend von
der Einrichtung 150 zum Bestimmen an einen Schreiber 152 übertragen, durch
welchen die durch die Einrichtung 150 bestimmten Speicherwerte
in die entsprechenden Speicherzellen des Speichers 600 eingeschrieben
werden, um den Speicher 600 zu belegen.
-
Hierbei
ist anzumerken, dass vorzugsweise die Speicherbelegungsvorrichtung,
wie sie beispielsweise in 1B dargestellt
ist, werkseitig eingesetzt werden kann, um den Speicher vor der
Auslieferung an einen Endkunden oder an einen Zwischenhändler zu
beschreiben. Vor der Auslieferung des Speichers 600 kann
dadurch sichergestellt werden, dass der Speicher entsprechend der
gewünschten
Parity-Maske belegt ist, wodurch sich ein Ausfall von Speicherteilen
bzw. geraden Blöcken
erkennen lässt. Demgegenüber kann
die Speicherüberprüfungsvorrichtung,
wie sie beispielsweise in 1A dargestellt ist,
anwenderseitig eingesetzt werden, beispielsweise in einem Kraftfahrzeug,
wenn der Speicher 600 als Speicher für Kalibrierwerte eines Sensors
in einer Kraftfahrzeugelektronik eingesetzt wird. Jedoch kann die
Speicherüberprüfungsvorrichtung
ebenfalls werkseitig eingesetzt werden, beispielsweise im Zusammenhang
mit einer entsprechenden Spei cherbelegungsvorrichtung oder wenn
die Speicherüberprüfungsvorrichtung
weiterhin einen Schreiber zum Einschreiben von Speicherwerten umfasst.
Dies bietet dann den Vorteil, vor einem Beschreiben des Speichers 600 ein Überprüfen durchzuführen, ob
der Speicher 600 bereits beschrieben ist oder ob einzelne
gerade Blöcke
fehlerbehaftet sind. Als Anwendungsbereich einer solchen erweiterten
Speicherbelegungsvorrichtung wäre
beispielsweise die Verwendung einer derartigen Speicherbelegungsvorrichtung denkbar,
die in Kraftfahrzeugwerkstätten
zur Umprogrammierung des Sensorkalibriermesswertspeichers eingesetzt
werden könnten,
wenn der Speicher zur Speicherung von Kalibriermesswerten eines
Kraftfahrzeugelektroniksensors eingesetzt wird.
-
Im
Folgenden wird der Grundgedanke der vorliegenden Erfindung detaillierter
erläutert.
Entgegen dem herkömmlichen
Ansatz, für
alle Zeilen und Spalten eine gerade Parity, d.h. ein Parity-Signal
mit einem einzigen logischen Wert (immer 0 oder immer 1) zu verwenden,
besteht der Kern der vorliegenden Erfindung darin, unterschiedliche
Spalten bzw. unterschiedliche Zeilen mit unterschiedlichen Parities
zu versehen, wenn eine Berechnungsvorschrift für die Parities identisch ist
oder die entsprechenden Zeilen bzw. Spalten des Speichers derart
zu belegen, dass sich gleiche Parities ergeben, wenn die Parityberechnungsvorschrift
für die
Zeilen bzw. Spalten unterschiedlich ist. Beispielsweise kann eine
Folge von alternierenden Parities verwendet werden, derart, dass Spalten
mit gerader Spaltennummer, d.h. die Spalten 0, 2, 4, 6, ... mit
gerader Parity versehen werden, wogegen Spalten mit ungerader Spaltennummer,
d.h. die Spalten 1, 3, 5, ..., mit ungerader Parity versehen werden.
Als gerade Parity wird dabei ein Zustand bezeichnet, bei der eine
gerade Anzahl an Einsen in der betreffenden Zeile/Spalte eingetragen
ist, wogegen als ungerade Parity ein Zustand bezeichnet wird, bei dem
die Parity einen logischen Zustand von 1 aufweist. Um eine derartige
Speicherbelegung zu erreichen, wird eine Parity-Maske vorge sehen,
die jeder Spalte ein Parity-Masken-Bit zuordnet, wie es in 2 durch
die Parity-Maske 200 erfolgt ist.
-
In 2 ist
ein Speicher mit 16 Spalten und 6 Zeilen gezeigt. Die Spalten sind
in der obersten Zeile mit Spaltennummern versehen. Die Zeilen sind
in der rechtesten Spalte mit Zeilennummern versehen. In der zweiten
Zeile sind in fetter Schrift die alternierenden Bits der Parity-Maske
aufgetragen, die definieren, dass die Spalten 15, 13, ..., ein mit
even parity und die Spalten 14, 12, ..., 2, 0 mit odd parity zu
rechnen sind. Die Spalte 15 sowie die Zeile 5 sind wieder die im
Speicher selbst abgelegten Parity-Bits, die so gewählt werden,
dass z. B. in Spalte 15 die Anzahl der Einsen gerade ist und in
Spalte 14 dagegen ungerade ist.
-
Ist
das Parity-Masken-Bit gleich 1, so wird die Spalte mit ungerader
Parity (auch als odd parity bezeichnet) versehen; ist das Parity-Masken-Bit gleich
0, so wird die Spalte mit even parity (d.h. gerader Parität) berechnet.
Diese Änderung
gegenüber dem
Stand der Technik benötigt
keine zusätzlich Chipfläche, weil
die in der Speichermatrix vorhandenen EXOR-Gatter (EXOR = EXKLUSIV-ODER) der Adresse
0 mit einem Eingang an den Wert des Bits und mit dem zweiten Eingang
an den Wert der Parity-Maske gelegt werden. Demgegenüber liegt
im Stand der Technik der zweite Eingang stattdessen immer auf dem
logischen Wert LOW. Als Beispiel kann hier die Bestimmung der Speichereinträge für die fünfte Spalte
formelhaft dargestellt werden:
Column parity <5> = parity mask <5> ⊕ Bit (Adresse 0, Spalte 5) ⊕ Bit (Adresse
1, Spalte 5) ⊕ ... ⊕ Bit (Adresse
5, Spalte 5).
-
Tritt
im gesamten Speicher ein Defekt auf, so dass alle Bits zu 0 ausgelesen
werden, wird das bei der Berechnung der Spaltenparity der Spalten
14, 12, 10, ..., 2, 0 bemerkt, da die Anzahl der Einsen in diesen
Spalten keinen ungeraden Wert hat, da alle Bits den binären Wert
0 aufweisen. Selbst wenn nur eine einzige Spalte mit „stuck-at-low" ausfällt, wird
das erkannt, solange die Spalte eine gerade Nummer (also eine ungerade
Parity) hat. Ungerade Spalten werden so jedoch nicht erkannt. Homogene
Blöcke
von „stuck-at-low" Ausfällen werden
jedoch sicher erkannt, wenn sie zumindest zwei Spalten betreffen.
-
Ähnlich verhält es sich,
wenn eine Spalte durch einen „stuck-at-high"-Fehler ausfällt, da
diese bei ungeraden Spalten (also bei jenen mit gerader Parity)
erkannt wird, bei einzelnen Spalten mit ungerader Parity jedoch
nicht, wohl aber, wenn homogene Blöcke von mindestens zwei Spalten
ausfallen. Diese alternierende Parity-Codierung ist also recht mächtig, da
sie alle Ausfälle
von zwei oder mehr (vorzugsweise benachbarten) Spalten sowie die
Hälfte
aller möglichen
Ausfälle
einzelner Spalten erkennt.
-
Es
kann weiterhin auch eine Erkennung von defekten Zeilen auf eine
analoge Art erfolgen, wie dies durch die Parity-Maske für die Spalten
möglich ist.
Hierzu wäre
dann eine entsprechende Parity-Maske für die entsprechenden Zeilen
analog zu verwenden.
-
Um
neben Ausfällen
von Spalten zugleich auch Ausfälle
von Zeilen erkennen zu können,
lässt sich
auch das vorstehend vorgestellte Konzept derart erweitern, dass
sowohl Spalten als auch Zeilen mit alternierender Parity versehen
werden. Ein derartiger Ansatz ist beispielsweise in 3 tabellarisch
dargestellt, wobei neben der Parity-Maske 200 für die Spalten
auch eine Parity-Maske 300 für die Zeilen verwendet wird.
Die oberste Zeile des Speichers, welche in 3 durch
das Bezugszeichen 302 gekennzeichnet ist, hat beispielsweise
eine Parity-Maske mit einem binären
Wert von 1 und wird somit mit ungerader Parity berechnet, d.h. die
Anzahl der Einen in dieser Zeile muss ungerade sein. Hierfür zählen jedoch
nur die programmierten Bits inklusive dem Parity-Bit in Spalte 15,
d.h. der logische Wert von 1 der Parity-Maske ist exkludiert. Wenn
zwei oder mehr benachbarte Zeilen „stuck-at-high"-
oder „stuck-at-low"-Ausfälle zeigen,
wird dies durch die falsche Parity erkannt. Eine Einzelzeile wird
dann erkannt, wenn sie einen stuck-at-low-Ausfall zeigt und zugleich
ungerade Parity haben soll (wobei dann immer ein Fehler angezeigt
wird) bzw. wenn sie einen „stuck-at-high"-Ausfall zeigt und
zugleich gerade Parity haben soll, was nur für eine ungerade Anzahl der Bits
in einer Zeile erfüllt
ist. Bei einer geraden Anzahl von Bits in einer Zeile ist die Parity
gerade bei stuck-at-high-Fehlern, wobei dann kein Fehler auf Grund
der Parity der entsprechenden Zeile erkannt werden kann. Verallgemeinert
lässt sich
dieser Zusammenhang folgendermaßen
darstellen: Ist die Parity-Maske 1 so wird mit Sicherheit ein stuck-at-low-Fehler
erkannt; ein stuck-at-high-Fehler wird jedoch nur bei gerader Anzahl
von Bits in der entsprechenden Zeile/Spalte erkannt, nicht jedoch bei
einer ungeraden Anzahl. Ist der Wert der Parity-Maske in der entsprechenden
Zeile/Spalte 0, so ist ein stuck-at-low-Fehler in dieser Zeile/Spalte
alleine weder für
eine gerade noch eine ungerade Anzahl erkennbar, ein stuck-at-high-Fehler
wird allerdings für eine
ungerade, nicht jedoch für
eine gerade Anzahl erkannt.
-
Die
alternierende Zeilenparity-Berechnung kann wiederum sehr einfach
und billig realisiert werden, indem bei der Modulo-2-Addition aller Bits
einer Zeile auch noch das invertierte LSB (LSB = least significant
bit = geringstwertiges Bit) der Zeilenadresse hinzuaddiert wird.
Dieser Zusammenhang kann durch die nachfolgende Formel verdeutlich
werden:
row parity = NOT (address <0> ⊕ bit <0> ⊕ bit <1> ⊕ ... ⊕ bit <15>.
-
Die
Zeilenparity-Maske und die Spaltenparity-Maske sind jedoch nicht
beliebig wählbar,
sondern müssen
aufeinander abgestimmt werden. Dies wird im Folgenden anhand der 4 und
5 näher
beschrieben. Im Wesentlichen betrifft die Abstimmung der Zeilenparity-Maske
und der Spaltenparity-Maske dasjenige Feld, welches im Kreuzungspunkt
der Zeilen- und Spaltenparity steht. Dieses Parity-Bit kann auf
zwei Weisen berechnet werden. Einerseits muss es die Parity-Bedingung
der Zeile erfüllen,
andererseits die Parity-Bedingung der Spalte. Beide Bedingungen
dürfen
sich nicht widersprechen. Das kann nur dann erreicht werden, wenn
die Parity-Masken den im Folgenden abgeleiteten Bedingungen gehorchen.
-
In 4 ist
im oberen Teil ein erster Fall für einen
Speicher dargestellt, der eine gerade Spaltenanzahl und eine ungerade
Zeilenanzahl aufweist. Dasjenige Feld, welches durch Benutzerdatenbits belegt
werden kann, ist durch eine Schraffur von links unten nach rechts
oben gekennzeichnet. Auf der rechten Seite ist die Spaltenparity-Maske
dargestellt, welche durch eine Schraffur von links oben nach rechts
unten gekennzeichnet ist. Auf der linken Seite ist die Spalte Nr.
15 als Spaltenparity ausgebildet und durch eine vertikale Schraffur
gekennzeichnet. In die Speicherzellen der Spalten 15 werden diejenigen Bits
eingespeichert, die bei einer EXKLUSIV-ODER-Verknüpfung der Benutzerdatenbits
für eine
Zeile erforderlich sind, um das entsprechende Bit (d.h. c oder d)
der Spaltenparity-Maske zu erreichen. Weiterhin werden in die Speicherzellen
der Zeile 6 diejenigen binären
Werte eingespeichert, die bei einer EXKLUSIV-ODER-Verknüpfung der
Speicherwerte der einzelnen Spalten erforderlich sind, um die Werte
a oder b der entsprechenden Zeilenparity-Maske zu erreichen, wie
sie in der obersten Zeile des oberen Teils der 4 dargestellt
ist. Wie die einzelnen Werte in den entsprechenden Feldern berechnet
werden, kann aus den schematischen Darstellungen im Abschnitt 400 der 4 entnommen werden,
wobei das Zeichen ⊕ eine
Modulo-2-Addition symbolisiert. Als Ergebnis resultiert, dass bei
einer geraden Spaltenanzahl und einer ungeraden Zeilenanzahl, die
Parity-Maske für
die Parity-Zeile den logischen Wert 1 aufweisen muss, d.h. dass
der Wert c = 1 betragen muss.
-
Im
unteren Teil der 4 ist derjenige Fall dargestellt,
bei dem der Speicher eine gerade Spaltenanzahl und eine gerade Zeilenanzahl
aufweist. In diesem Fall ergibt die Berechnung, dass es bei gerader
Spalten- und Zeilenzahl keine Einschränkung für die Parity-Masken gibt, d.h.
dass für
die Werte a und b sowie c und d sowohl die logischen Werte 1 oder
0 in Frage kommen, jedoch mit der Einschränkung, dass a und b voneinander
unterschiedlich sind und c und d ebenfalls voneinander unterschiedlich
sind.
-
Bezüglich eines
dritten Falls, bei dem der Speicher eine ungerade Spaltenanzahl
und eine gerade Zeilenanzahl aufweist, ergibt die vorstehende Berechnung,
dass die Parity-Maske in der Parity-Spalte einen logischen Wert
von 1 aufweisen muss. Hieraus resultiert, dass die Variable b einen
logischen Wert von 1 annehmen muss. Ein derartiger Fall ist in 5 im
oberen Teil dargestellt.
-
In 5 im
unteren Teil ist schließlich
der vierte Fall dargestellt, bei dem ein Speicher eine ungerade
Spaltenanzahl und eine ungerade Zeilenanzahl aufweist. Die Berechnung
bezüglich
des vierten Falles ergibt, dass nur dann eine Lösung gefunden werden kann,
wenn die Variable a einen Wert aufweist, der gleich dem Wert der
Variablen d ist und zugleich die Variable b einen Wert aufweist,
der identisch mit dem Wert der Variablen c ist. Dies bedeutet, dass
entweder a = 1, b = 0, c = 0 und d = 1 oder a = 0, b = 1, c = 1
und d = 0 gilt.
-
Daraus
folgt die allgemeine Regel, dass die Parity-Maske in der Parity-Zeile
und in der Parity-Spalte einen logischen wert 1 annehmen sollte. Dies
funktioniert für
alle vier unterschiedlichen Fälle, wie
sie vorstehend dargestellt wurden. Für einzelne Varianten sind auch
andere Lösungen
möglich – wie oben
ausführlich
abgeleitet wurde, diese funktionieren aber dann nicht für alle vier
Fälle zugleich.
-
Die
Zeilenparity muss auch nicht in der höchsten Adresse stehen, sie
kann beispielsweise auch an der Adresse 3 oder irgendeiner anderen Adresse
im Speicher stehen. Die Spaltenparity muss ebenfalls nicht in der
höchstwertigen
Spalte stehen, sie kann beispielsweise auch in Spalte 8 oder irgendeiner
anderen Spalte eingetragen sein.
-
Zuletzt
kann noch erwähnt
werden, dass ein eventuelles Lockbit zur Sperrung einer Schreiboperation
auf den Speicher, vorzugsweise in Zeilen mit bestimmter Parity platziert
werden sollte. Ein Lockbit ist dafür vorgesehen, den Speicher
nach dem Programmieren des Lockbits unwiderruflich zu sperren, so
dass beispielsweise nach erfolgter Kalibrierung des Sensors keine
irrtümliche
Umprogrammierung mehr erfolgen kann. Wenn ein solches Lockbit bei
einem logischen Wert von 1 locken sollen (d.h. high aktiv sein soll),
sollte es sich in einer Zeile befinden, die eine ungerade Parität (d.h.
eine odd parity) hat und ebenso in einer Spalte angeordnet sein,
die auch eine ungerade Parität
aufweist. Alternativ kann auch das Lockbit lediglich in einer Zeile
angeordnet sein, die odd parity hat und nicht in einer Spalte angeordnet
sein, die odd parity hat, wobei dann lediglich ein Schutz gegen
einen Ausfall der betreffenden Zeile gegeben ist, nicht jedoch ein
Schutz gegen den Ausfall der entsprechenden Spalte. Analoges gilt
auch für die
Anordnung des Lockbits in einer entsprechenden Spalte, die odd parity
hat und einer Zeile, die keine odd parity hat. Wenn somit später eine
ganze Zeile oder Spalte ausfällt
(d.h. einen „stuck-at-low"- oder einen „stuck-at-high"-Fehler aufweist),
so wird dieser Ausfall erkannt, wenn die Zeile bzw. Spalte lediglich einen
binären
Wert von 0 in den Speicherzellen aufweist (d.h. wenn also der Speicher
nicht schreibgeschützt
wäre).
Wenn in der entsprechenden Zeile oder Spalte ein stuck-at-high-Fehler
auftritt, würde dies
jedoch dazu führen,
dass der integrierte Schaltkreis als schreibgeschützt angesehen
wird und zumindest nicht mehr irrtümlich umprogrammiert werden
kann. Umgekehrt gilt auch Ana loges, d.h. wenn ein Lockbit bei einem
binären
Wert von 0 locken soll (d.h. low aktiv sein soll), so soll es sich
in einer Zeile und Spalte befinden, die beide even parity und eine ungerade
Anzahl von Zellen pro Spalte/Zeile haben.
-
Abhängig von
den Gegebenheiten kann das erfindungsgemäße Verfahren zum Überprüfen eines Speichers
oder das Verfahren zum Belegen eines Speichers in Hardware oder
in Software implementiert werden. Die Implementierung kann auf einem
digitalen Speichermedium, insbesondere einer Diskette oder CD mit
elektronisch auslesbaren Steuersignalen erfolgen, die so mit einem
programmierbaren Computersystem zusammenwirken können, dass das entsprechende
Verfahren ausgeführt
wird. Allgemein besteht die Erfindung somit auch in einem Computerprogrammprodukt
mit einem auf einem maschinenlesbaren Träger gespeicherten Programmcode zur
Durchführung
des erfindungsgemäßen Verfahrens,
wenn das Computerprogrammprodukt auf einem Rechner abläuft. Mit
anderen Worten ausgedrückt,
kann die Erfindung somit als ein Computerprogramm mit einem Programmcode
zur Durchführung
des Verfahrens realisiert werden, wenn das Computerprogramm auf
einem Computer abläuft.
-
Zusammenfassend
lässt sich
anmerken, dass die Erfindung im Wesentlichen darin besteht, dass
ein Matrix-Parity-Check dadurch erweitert wird, dass den Spalten
und/oder Zeilen alternierende bzw. zumindest zwei voneinander unterschiedliche
Paritätswerte
zugeordnet werden. Damit können
Ausfälle ganzer
Zeilen und ganzer Spalten erkannt werden. Eine derartige Paritätswertverteilung
wird implementiert, indem beispielsweise eine Parity-Maske Modulo-2
addiert wird zur Summe der Spaltenbits sowie das invertierte oder
nicht-invertierte LSB der Adresse zur Summe der Zeilenbits Modulo-2
addiert wird.
-
Ferner
kann auch ein high-aktives Lockbit in einer Zeile und Spalte mit
ungerader Parity untergebracht sein oder ein low-aktives Lockbit in einer Zeile und/oder
Spalte mit gerader Parity untergebracht sein.
-
Der
Kern der vorliegenden Erfindung besteht somit darin, dass die Paritymaske
bei gleicher Berechnungsvorschrift sowohl Einsen und Nullen oder bei
unterschiedlicher Berechnungsvorschrift gleiche Werte enthält. Vorzugsweise
können
diese Werte bzw. Berechnungsvorschriften alternierend aufeinanderfolgenden
Zeilen/Spalten zugewiesen sein. Als Parityzeile wurde in dem beschriebenen
Beispiel die Zeile mit der Adresse 0 gewählt, als Parityspalte wurde
die Spalte 15 gewählt.
Demgegenüber
bezeichnet der Begriff „Zeilenparity" das Ergebnis der
Berechnung der Parity beispielsweise einer ganzen Zeile (inclusive
dem Paritybit in dieser Zeile). Analog bezeichnet der Begriff „Spaltenparity" das Ergebnis der
Berechnung beispielsweise einer ganzen Spalte inclusive des Paritybits
in der entsprechenden Spalte.
-
- 100
- Leser
- 102
- Prüfeinrichtung
- 150
- Einrichtung
zum Bestimmen der Speicherwerte, die in
-
- entsprechenden
Speicherzellen des Speichers zu
-
- speichern
sind
- 200
- Parity-Maskenzeile
- 300
- Parity-Maskenspalte
- 302
- erste
Zeile des Speichers
- 400
- schematisch
dargestellte Berechnungsvorschriften
-
- für Spaltenparity
oder Zeilenparity
- 600
- Speicher
- 602
- Spaltennummer
- 604
- Adresszeile
- 606
- letzte
Spalte des Speichers 600
- 608
- Parity
für Zeilen
(Zeilenparity, Row Parity)
- 610
- Parity
für Spalten
(Spaltenparity, Column Parity)
- 612
- Register
- 614
- Aus
dem Register 612 ermittelter Zeilenparitätswert
- 616
- UND-Gatter
- 618
- UND-Gatter
- 620
- XOR-Gatter