-
Die Erfindung betrifft ein Verfahren zum Erkennen von Bitfehlern in einem Ergebnis einer auf einer Rechenmaschine ausgeführten, arithmetischen Inkrement- oder Dekrementoperation einer Bitsequenz. Die Erfindung betrifft ebenso ein Computerprogramm, eine Halbleiterschaltung sowie ein Computersystem hierzu.
-
Es ist allgemein bekannt, dass auch bei Computerprogrammen, die hinsichtlich ihrer semantischen Vorgabe mathematisch korrekt sind, Fehler auftreten können, deren Ursprünge meist nicht mehr feststellbar sind. Derartige Fehler bei der Ausführung von Computerprogrammen in Rechenmaschinen können beispielsweise durch äußere Einflüsse, Erwärmungen oder auch Hardwaredefekte entstehen und können temporär oder von dauerhafter Natur sein. Insbesondere in sicherheitskritischen Anwendungen ist es daher notwendig, derartige Fehler sicher und schnell erkennen zu können.
-
So ist es beispielsweise bekannt, dass sicherheitskritische Systeme redundant ausgelegt werden, so dass jedes der Systeme einzeln für sich die Berechnung durchführt und anschließend durch Vergleich der Ergebnisse festgestellt werden kann, ob ein Fehler in einer der Berechnungen aufgetreten ist. Sind beide Ergebnisse identisch, so wird von keinem Fehler ausgegangen.
-
Bei der Übertragung von Daten werden beispielsweise sogenannte CRC-Summen (Cyclic Redundancy Check) eingesetzt, die durch erzeugende Polyname gebildet werden. Hierdurch lassen sich bestimmte Arten von Fehlern zuverlässig erkennen.
-
Bei dem Fehlererkennungsverfahren durch redundante Ausführung ist ein Nachteil jedoch darin zu sehen, dass aufgrund der Mehrfachausführung der Systeme auch entsprechend mehr Hardware bereitgestellt werden muss. Darüber hinaus benötigen derartige Systeme auch signifikant mehr elektrische Energie für den Betrieb, so dass diese Art der Fehlererkennung hinsichtlich des Einsatzgebietes Beschränkungen unterliegt. Wird die Redundanz der Berechnung auf ein und demselben Mikroprozessor untergebracht, so ist hierfür meist eine wesentlich höhere Siliziumfläche notwendig, was sich in einigen Einsatzgebieten ebenfalls als nachteilig erwiesen hat. Demgegenüber steht jedoch der unübersehbare Vorteil, dass mit Hilfe der redundanten Ausführung (auch mehrfach redundant) Rechenfehler innerhalb des Mikroprozessors zuverlässig erkannt werden können.
-
Ein Standardfall bei der Ausführung eines Computerprogramms durch einen Mikroprozessor stellt dabei die arithmetische Inkrement- oder Dekrementoperation des Programm Counters dar. In dem Programm Counter ist die Speicheradresse hinterlegt, in der der nächste abzuarbeitende Befehl für den Mikroprozessor hinterlegt ist. Die Erhöhung des Programm Counters um eine Befehlsbreite (Inkrementoperation) führt zum Verweis auf die nächstfolgende Speicherstelle und somit zur Abarbeitung des nächstfolgenden Maschinenbefehls. Einmal abgesehen von relativen Adressierungen sowie absoluten Sprungbefehlen stellt das einfache Inkrement um eine Befehlsbreite ca. 80% aller Instruktionen im Programmablauf dar.
-
Unter der arithmetischen Inkrement- oder Dekrementoperation im Sinne der vorliegenden Erfindung wird dabei eine arithmetische Operation verstanden, bei der zu einer Mehrbitsequenz eine Ganzzahl ≧ 1 addiert bzw. subtrahiert wird. Den einfachsten Fall stellt dabei das Inkrement bzw. Dekrement um 1 an der Bitstelle 2° dar. Denkbar sind aber auch das Inkrement bzw. Dekrement um Werte, die einer ganzzahligen Potenz von 2 entsprechen bzw. um Werte, die einer nicht ganzzahligen Potenz von 2 entsprechen. Insbesondere das Inkrement bzw. Dekrement um einen Wert, der einer ganzzahligen Potenz von 2 entspricht, wird häufig bei der Erhöhung bzw. Verringerung des Programm Counters um eine ganze Befehlsbreite verwendet, wenn die Befehlsbreite beispielsweise 16 oder 32 Bit entspricht.
-
Aus der
US 6,990,507 B2 ist ein Verfahren bekannt, bei dem die Parität eines Ergebnisses eines Inkrementes um 1 einer Mehrbitsequenz vorhergesagt werden kann, so dass sich ein Bitfehler durch Vergleich der vorhergesagten Parität mit der berechneten Parität aus der Ergebnis-Bitsequenz ermitteln lässt. Dabei wird zunächst die Parität der Eingangs-Bitsequenz ermittelt und anschließend überprüft, ob eine ungerade Anzahl von Bits aufgrund des Übertrags bei der Inkrementoperation ihren Bitwert ändern, so dass die vorhergesagte Parität dann durch Umkehr der Parität der Eingangs-Bitsequenz berechnen lässt. Ist die Anzahl der Bits, die sich aufgrund des Übertrags bei der Inkrementoperation ändern werden, gerade, so entspricht die vorhergesagte Parität der Ausgangsparität.
-
Für eine 8 Bit Sequenz, deren Wert um 1 inkrementiert werden soll, ergibt sich somit folgende Formel zur Bestimmung der Parität:
wobei p die Parität der 8 bit Eingangs-Bitsequenz darstellt, b[0] das niederwertigste Bit der Bitsequenz und b[7] das höchstwertigste Bit darstellen. Das Symbol O ist dabei die XOR Operation.
-
Demnach kann die Parität einer Bitsequenz dadurch ermittelt werden, dass sämtliche Bits der Bitsequenz XOR verknüpft werden. Die booleschen Operation XOR ist dabei immer dann 0 (false), wenn die beiden Operanden gleich sind, sonst 1 (true). Die ermittelte Parität p ist in diesem Beispiel 0 (false), wenn eine gerade Anzahl von Bits der Bitsequenz 1 sind, sonst ist die Parität 1 (true). Im o. g. Beispiel entspricht dies der even-Parität.
-
Mittels der nachstehenden Formel
bei der p die vorhergesagte Parität des Ergebnisses darstellt, not die Invertierung des Bits, + das logische OR und * das logische AND ist, lässt sich die Parität des Ergebnisses der Inkrementoperation um 1 vorhersagen, indem festgestellt wird, ob eine ungerade Anzahl von Bits aufgrund des Übertrags der arithmetischen Operation ihren Bitwert ändern. Sind b[0] und b[1] gleich 1 und ist b[2] gleich 0, so ergibt sich bei einem Inkrement um 1, das sich die Bits 0, 1, und 2 in ihrem Bitwert ändern, was einer ungeraden Anzahl von Bits entspricht und was somit zu einem Wechsel der Parität der Eingangs-Bitsequenz führt.
-
Der große Nachteil dieses Verfahrens besteht jedoch darin, dass hiermit keine 2 Bit-Fehler erkannt werden können, da durch den doppelten Wechsel der Fehlerbits sich die Parität in der Ergebnis-Bitsequenz gegenüber der Eingangs-Bitsequenz nicht ändert. Letztlich lassen sich alle geraden Mehrbitfehler nicht erkennen, so dass mit diesem System nicht hinreichend sicher jegliche Formen von Bitfehlern erkannt werden können, so dass sich dieses Verfahren nicht als Ersatz für die redundante Ausführung zur Erkennung von Bitfehlern eignet.
-
Vor diesem Hintergrund ist es Aufgabe der vorliegenden Erfindung, ein verbessertes Verfahren und eine verbesserte Vorrichtung anzugeben, mit denen neben 1 Bit Fehlern und ungeraden Mehrbitfehlern insbesondere auch 2 Bit Fehler sicher erkannt werden können.
-
Die Aufgabe wird mit dem Verfahren gemäß Anspruch 1 erfindungsgemäß gelöst. Die Aufgabe wird auch mit dem Computerprogramm gemäß Anspruch 10 sowie der Halbleiterschaltung gemäß Anspruch 11 erfindungsgemäß gelöst. Die Aufgabe wird im übrigen auch mit dem Computersystem gemäß Anspruch 13 erfindungsgemäß gelöst.
-
Gemäß Anspruch 1 wird ein Verfahren zum Erkennen von Bitfehlern in einem Ergebnis einer auf einer Rechenmaschine mittels eines Mikroprozessors ausgeführten, arithmetischen Inkrement- oder Dekrementoperation einer Bitsequenz vorgeschlagen, bei dem ein Paritätscode des Ergebnisses aus der Eingangs-Bitsequenz zu einem vorhergesagt und zum anderen aus der Ergebnis-Bitsequenz berechnet wird. Durch Vergleich der vorhergesagten und berechneten Paritätscodes kann dann auf einen entsprechenden Bitfehler geschlossen werden.
-
Bei der Eingangs-Bitsequenz im Sinne der vorliegenden Erfindung handelt es sich um diejenige Bitsequenz, auf der die arithmetische Inkrement- oder Dekrementoperation angewendet werden soll, um die Ergebnis-Bitsequenz zu erhalten. Die Eingangs-Bitsequenz stellt somit die Bitsequenz dar, die dem System als Eingang zur Durchführung der Operation zugeführt und bereitgestellt wird und stellt somit einen Teil der Operanden dar. Die Rechenoperation erfolgt dabei in der Regel bitweise.
-
Erfindungsgemäß wird vorgeschlagen, dass aus der Eingangs-Bitsequenz, auf der die arithmetische Inkrement- oder Dekrementoperation durchgeführt werden soll, ein Eingangs-Paritätscode berechnet wird. Ein derartiger Paritätscode enthält eine Mehrzahl von Paritätsbits, wobei jedes Paritätsbit in Abhängigkeit von den Bitwerten eines Teils der Bits der Eingangs-Bitsequenz berechnet wird. Ein derartiger Paritätscode kann beispielsweise ein Hamming-Code sein, bei dem die einzelnen Paritätsbits jeweils aus einer Kombination verschiedener Bits der Eingangs-Bitsequenz berechnet werden. Bei dem Paritätscode handelt es sich somit um eine Folge von mehreren Bits, die jeweils für sich ein Paritätsbit darstellen, das sich aus einem Teil der Bits der Eingangs-Bitsequenz berechnen lässt. Die Anwendung des Schemas zur Berechnung des Paritätscodes auf die Eingangs-Bitsequenz erzeugt somit dann im Ergebnis den sogenannten Eingangs-Paritätscode.
-
Im nächsten Schritt wird nun basierend auf dem Eingangs-Paritätscode ein Vorausberechnungs-Paritätscode berechnet, der eine Vorausberechnung der einzelnen Paritätsbits des Eingangs-Paritätscodes darstellt, so als ob die Inkrement- oder Dekrementoperation auf der Eingangs-Bitsequenz angewendet und der Paritätscode aus dem Ergebnis berechnet werden würde. Der Vorausberechnungs-Paritätscode stellt somit eine Vorausschau der Paritätsbits des Paritätscodes dar, so als ob die Paritätsbits entsprechend des Schemas des Paritätscodes aus der Ergebnis-Bitsequenz berechnet würden, ohne dass tatsächlich das Ergebnis berechnet und der Paritätscode dann ermittelt wird.
-
Der Vorausberechnungs-Paritätscode enthält somit jene Paritätsbits, die sich ergeben, wenn man den Paritätscode des Ergebnisses der Inkrement- oder Dekrementoperation berechnet.
-
Dabei wird für jedes Paritätsbit des Eingangs-Paritätscodes festgestellt, ob eine ungerade Anzahl von des jeweilige Paritätsbit betreffenden Bits der Eingangs-Bitsequenz einen Bitwert aufweisen, welcher aufgrund einer arithmetischen Rechenregel der Inkrement- oder Dekrementoperation zu einer Umkehrung führen wird. Eine solche Rechenregel ist beispielsweise der Übertrag, wenn die beiden Operanden der Addition eins sind. Die Feststellung, ob eine ungerade Anzahl von des jeweiligen Paritätsbit betreffenden Bits der Eingangs-Bitsequenz ihren Bitwert ändern wird, lässt sich mit Hilfe einer Booleschen Algebra der in der Eingangs-Bitsequenz enthaltenen Bitwerte ermitteln.
-
Dabei wird für jedes Paritätsbit des Eingangs-Paritätscodes untersucht, ob eine ungerade Anzahl von Bits, die zur Berechnung des jeweiligen Paritätsbits des Paritätscodes aus der Eingangs-Bitsequenz benötigt werden, ihren Bitwert aufgrund der anzuwendenden arithmetischen Inkrement- oder Dekrementoperation ihren Bitwert ändern. Wurde eine solche Feststellung, beispielsweise mit Hilfe einer Booleschen Algebra, festgestellt, so wird das entsprechende Paritätsbit des Vorausberechnungs-Paritätscodes durch Umkehr des Paritätsbits des Eingangs-Paritätscodes ermittelt. Denn ändert sich eine ungerade Anzahl von denjenigen Bits, die zur Berechnung des entsprechenden Paritätsbits des Paritätscodes notwendig sind, ihren Bitwert, so hat dies bei der Berechnung des Paritätsbits eine Umkehr der Parität zur Folge. Mit anderen Worten, die Paritätsbits des Vorausberechnungs-Paritätscodes entsprechen der umgekehrten Parität der Paritätsbits des Eingangs-Paritätscodes, wenn für das jeweilige Paritätsbit eine solche ungerade Anzahl von das jeweilige Paritätsbit betreffenden Bits, die einen Bitwert ändern werden, festgestellt wurde. Andernfalls entspricht das jeweilige Paritätsbit des Vorausberechnungs-Paritätscodes den entsprechenden Paritätsbit des Eingangs-Paritätscodes.
-
In einem zweiten Weg, der vorher parallel oder im Nachgang zu dem oben Genannten durchgeführt werden kann, wird eine Ergebnis-Bitsequenz berechnet, indem die Inkrement- oder Dekrementoperation auf die Eingangs-Bitsequenz angewendet wird. Anschließend wird ein Ergebnis-Paritätscode aus der Ergebnis-Bitsequenz entsprechend dem Berechnungsschema für den Eingangs-Paritätscode in Abhängigkeit von den jeweiligen Bitwerten der Ergebnis-Bitsequenz berechnet, so dass aus der Ergebnis-Bitsequenz ebenfalls die entsprechenden Paritätsbits des anzuwendenden Paritätscodes vorliegen. Das Berechnungsschema, d. h. die Art und Weise, wie die Paritätsbits des Paritätscodes berechnet werden, muss sowohl für den Eingangs-Paritätscode als auch den Ergebnis-Paritätscode identisch sein.
-
Nunmehr liegen die Ergebnisparitäten der Ergebnis-Bitsequenz sowie die Vorausberechnungs-Paritäten der Eingangs-Bitsequenz vor, so dass durch einen Vergleich der jeweiligen Vorausberechnungs-Paritäten mit den entsprechenden Ergebnis-Paritäten mögliche Bitfehler erkannt werden können. Sind sämtliche Paritätsbits des Vorausberechnungs-Paritätscodes mit den entsprechenden Paritätsbits des Ergebnis-Paritätscodes identisch, so liegt kein Fehler vor. Weist jedoch mindestens ein Paritätsbit des Vorausberechnungs-Paritätscodes einen anderen Wert auf als das entsprechende Paritätsbit des Ergebnis-Paritätscodes, so liegt ein Bitfehler vor. Dabei ist es unter Umständen sogar möglich, entsprechende Bitfehler zu korrigieren, wenn anhand des verwendeten Paritätscodes und eines erkannten Fehlers auf das entsprechende fehlerhafte Bit in der Bitsequenz geschlossen werden kann, was beispielsweise bei der Verwendung eines Hamming-Codes als Paritätscode möglich ist.
-
Die vorliegende Erfindung hat dabei den wesentlichen Vorteil, dass bei der Durchführung von arithmetischen Inkrement- oder Dekrementoperationen neben den klassischen Einbit-Fehlern auch Zweibit-Fehler und Dreibit-Fehler sicher erkannt werden können, ohne dass es hierfür den Aufbau einer redundanten Ausführung bedarf. Dabei wurde erkannt, dass durch die Verwendung eines entsprechenden Paritätscodes auch Zweibit-Fehler und einige Mehrbit-Fehler sicher erkannt werden können. Dabei wird angenommen, dass die Vorausberechnung immer korrekt arbeitet. Bei einem erkannten Fehler kann dann das Gesamtsystem in einen sicheren Zustand überführt werden.
-
Durch die Reduzierung der Abfrage für die Feststellung der prognostizierten Bitwertänderung, beispielsweise mittels Minimierung anhand einer Common Path Expression, kann der Kostenaufwand der Vorausberechnung unter den Kostenaufwand für eine redundante Ausführung gedrückt werden, so dass das vorliegende Verfahren beispielsweise deutlich weniger Siliziumfläche benötigt als eine redundante Ausführung der Berechnung.
-
Zweckmäßigerweise wird für jedes Paritätsbit des Vorausberechnungs-Paritätscodes ein Fehlersyndrom in Abhängigkeit von dem jeweiligen Paritätsbit des Vorausberechnungs-Paritätscodes und dem entsprechenden Paritätscode des Ergebnis-Paritätscodes berechnet, wobei ein Bitfehler dann erkannt wird, wenn zumindest eines der Fehlersyndrome eine Fehlererkennung enthält. Hierzu weist das jeweilige Fehlersyndrom eine Fehlererkennung auf, die angibt, ob ein Fehler vorliegt oder nicht und gegebenenfalls was für ein Fehler vorliegt. Wird für die Ermittlung der Syndrome die XOR-Operation verwendet, so liegt ein Bitfehler immer dann vor, wenn zumindest eines der Syndrome der Paritäten des Paritätscodes ≠ 0 ist. Bei einem linearen Code ist ein Syndrom definiert als eine Operation eines empfangenen, gegebenenfalls ungültigen Codeworts am Empfänger mit einer Kontrollmatrix. Der einfachste Fall einer Syndrom-Operation ist die XOR-Operation.
-
In einer vorteilhaften Ausführungsform wird vorgeschlagen, dass die Eingangs-Bitsequenz, auf der die arithmetische Inkrement- oder Dekrementoperation angewendet werden soll und welche den arithmetischen Wert in binärer Form enthält, in einer Eingangs-Matrix so angeordnet wird, dass die Bits der Eingangs-Bitsequenz nacheinander zeilenweise in die Eingangs-Matrix eingeschrieben werden. So kann eine 32 Bit Eingangs-Bitsequenz in vier Zeilen à 8 Bit angeordnet werden, wobei die unterste Zeile die Bits 0 bis 7, die nächstfolgende Zeile die Bits 8 bis 15, die dritte Zeile die Bits 16 bis 23 und die vierte Zeile die Bits 24 bis 31 enthält.
-
Die Bits werden dabei in der Matrix so angeordnet, dass sie zeilenweise angeordnet werden, d. h. die Bits werden jeweils ihrer Reihenfolge nacheinander in eine Zeile geschrieben, bis diese Zeile keine weiteren Bits mehr aufnehmen kann, so dass die nächsten Bits am Anfang der nächsten Zeile wieder der Reihenfolge nach folgend eingeordnet werden.
-
Die Bits einer 32 Bit Sequenz können beispielsweise wie folgt angeordnet werden:
-
Im nächsten Schritt wird der Eingangs-Paritätscode berechnet, indem für jede Zeile und jede Spalte der Eingangs-Matrix ein Paritätsbit, das Bestandteil des Eingangs-Paritätscodes ist, in Abhängigkeit von den Bitwerten der die jeweilige Zeile oder Spalte betreffenden Bits der Eingangs-Bitsequenz berechnet wird. Somit ergeben sich für die jeweils vier Zeilen und die jeweils acht Spalten des oben genannten Beispiels insgesamt 12 Paritätsbits, die zusammen den Eingangs-Paritätscode bilden. Die Paritätsbits des Eingangs-Paritätscodes in dieser Form werden somit zeilen- und spaltenweise aus der Matrixanordnung berechnet.
-
Für das o. g. Beispiel einer 32 Bit Eingangs-Bitsequenz ergibt sich somit folgendes Schema:
-
Dabei sind pr[0] bis pr[3] die Paritätsbits für die jeweiligen Zeilen und pc[0] bis pc[7] die Paritätsbits der jeweiligen Spalten der Eingangs-Matrix. Die Parität der jeweiligen Zeile oder Spalte lässt sich dabei anhand der bekannten Verfahren ermitteln, beispielsweise mittels der XOR-Operation. Für das o. g. Beispiel ergibt sich somit für die erste Zeile folgende Eingangs-Paritätsberechnung:
-
Im nächsten Schritt wird nun ein Vorausberechnungs-Paritätscode berechnet, indem für jede Zeile und jede Spalte ein Vorausberechnungs-Paritätsbit auf Basis des Eingangs-Paritätscodes der Eingangs-Matrix berechnet wird, wobei die Vorausberechnungs-Paritätsbits diejenige Parität der jeweiligen Zeile oder Spalte darstellt, die nach der arithmetischen Inkrement- oder Dekrementoperation aus der Matrix berechnet werden würde. Die Vorausberechnungs-Paritäten für jede Zeile und jede Spalte stellen somit jene Paritäten dar, die sich ergeben, wenn man die Paritäten der Zeilen und Spalten des Ergebnisses der Inkrement- oder Dekrementoperation berechnet.
-
Bei der Berechnung der Vorausberechnungs-Paritätsbits wird dabei für jede Zeile und jede Spalte festgestellt, ob eine ungerade Anzahl von die jeweilige Zeile oder Spalte betreffenden Bits einen Bitwert aufweisen, welcher aufgrund einer arithmetischen Rechenregel der Inkrement- oder Dekrement-Operation zu einer Umkehrung führen wird. Die Feststellung, ob eine ungerade Anzahl von Bits ihren Bitwert ändern wird, lässt sich mit Hilfe einer boolesche Algebra der in der Eingangs-Bitsequenz enthaltenen Bitwerte ermitteln.
-
Wird für die betreffende Zeile oder Spalte eine solche ungerade Anzahl von Bits festgestellt, so wird das Vorausberechnungs-Paritätsbit durch Umkehr des Eingangs-Paritätsbits der jeweiligen Zeile oder Spalte ermittelt, und sonst durch Nicht-Umkehr des entsprechenden Eingangs-Paritätsbit. Mit anderen Worten, die Vorausberechnungs-Parität einer Spalte oder Zeile entspricht der umgekehrten Eingangs-Parität der entsprechenden Zeile oder Spalte, wenn eine ungerade Anzahl von Bits ihren Bitwert ändern werden. Die Vorausberechnungs-Parität der jeweiligen Zeile oder Spalte entspricht der Eingangs-Parität der entsprechenden Zeile oder Spalte dann, wenn eine solche ungerade Anzahl von Bits, deren Bitwert sich ändern soll, nicht festgestellt wurde.
-
Für das oben angesprochene Beispiel der 32 Eingangs-Bitsequenz lässt sich für die erste Zeile folgende Formel zur Berechnung der Vorausberechnungs-Parität bei einer Inkrement um 1 angeben:
-
pr'[0] ist dabei die Vorausberechnungs-Parität der ersten Zeile der Eingangs-Matrix. Die o. g. Formel ermittelt dabei, ob gerade Anzahlen von Bits mit einem Bitwert = 1 existieren, so dass durch die Addition von 1 aufgrund des Übertrags sich sämtliche dieser Bits auf 0 ändern und dass sich an diese einer Folge anschließende abschließende Bit aufgrund des letzten Übertrages auf 1 ändert, so dass eine ungerade Anzahl von Bitwertänderungen feststellbar ist.
-
Nach Berechnung der Ergebnis-Bitsequenz wird nun gemäß dem Schema der Eingangs-Matrix die Ergebnis-Bitsequenz in einer Ergebnis-Matrix angeordnet, wobei auch hier die entsprechenden Paritäten der Zeilen und Spalten, beispielsweise mittels der XOR-Operation berechnet werden. Demnach liegen nunmehr der Ergebnis-Paritätscode vor, der die Ergebnis-Paritäten der Ergebnis-Bitsequenz enthält, sowie der Vorausberechnungs-Paritätscode, der die Vorausberechnungs-Paritäten der Eingangs-Bitsequenz enthält, so dass durch einen entsprechenden Vergleich der jeweiligen Vorausberechnungs-Paritäten mit den entsprechenden Ergebnis-Paritäten Bitfehler erkannt werden können.
-
Sind sämtliche Vorausberechnungs-Paritäten mit den entsprechenden Ergebnis-Paritäten identisch, so liegt kein Fehler vor. Weist jedoch mindestens eine Vorausberechnungs-Parität einer Zeile oder Spalte einen anderen Wert auf als die entsprechende Ergebnis-Parität, so liegt ein Bitfehler vor.
-
Hierdurch wird es möglich, dass bei der Durchführung von arithmetischen Inkrement- oder Dekrementoperationen neben den klassischen Einbit-Fehlern auch Zweibit- und Dreibit-Fehler sicher erkannt werden können, ohne dass es hierfür den Aufbau einer redundanten Ausführung bedarf. Dabei wurde erkannt, dass durch die spalten- und zeilenweise Berechnung der Paritäten Zweibit-Fehler und einige Mehrbit-Fehler sicher erkannt werden können, da sich die Paritäten nicht gegenseitig aufheben können. Werden beispielsweise zwei Bit in einer Spalte ungewollt verändert, so schlägt sich dies zwar nicht in der Parität der betreffenden Spalte nieder, so dass an dieser Stelle noch nicht sicher ein Fehler erkannt werden könnte. Allerdings sind dann zumindest zwei Zeilen-Paritäten derart betroffen, dass deren Wert von den entsprechenden Ergebnis-Paritäten abweicht.
-
Hierbei ist es vorteilhaft, wenn festgestellt wird, ob genau ein Spalten-Syndrom aus den Syndromen der Spalten eine Fehlerkennung aufweist und genau ein Zeilen-Syndrom der Syndrome der Zeilen eine Fehlerkennung aufweist, was auf einen 1 Bit-Fehler schließen lässt, und wobei in Abhängigkeit der Zeile und der Spalte der Syndrome, die eine Fehlerkennung aufweisen, das entsprechende Fehlerbit in der Ergebnis-Bitsequenz lokalisiert wird.
-
In diesem Fall ist es möglich, den 1 Bit-Fehler aufgrund der Lokalisierung der Fehlerquelle innerhalb der Bitsequenz zu korrigieren.
-
Hiermit lassen sich auch ungerade Mehrbitfehler korrigieren, die in einer gemeinsamen Zeile oder einer gemeinsamen Spalte liegen. Hierfür wird ermittelt, ob genau ein Spalten-Syndrom und eine ungerade Anzahl von Zeilen-Syndromen eine Fehlerkennung aufweisen oder ob genau ein Zeilen-Syndrom und eine ungerade Anzahl von Spalten-Syndromen eine Fehlerkennung aufweisen.
-
Vorteilhafterweise wird für die Berechnung der Vorausberechnungs-Paritäten festgestellt, ob ausgehend von einem Pivot-Bit (das mit dem geringsten Wert), an dem die arithmetische Inkrement- oder Dekrement-Operation durchgeführt wird oder beginnt, in der Eingangs-Bitsequenz eine zusammenhängende Teil-Bitsequenz existiert, bei der sich aufgrund der arithmetischen Rechenregel alle Bitwerte ändern und ob eine ungerade Anzahl von Bits der zusammenhängenden Teil-Bitsequenz der entsprechenden Zeile zugeordnet ist. Hierdurch lassen sich auch ungerade Anzahlen von Bitwertänderungen innerhalb einer Zeile feststellen, die in der Reihenfolge nach den Zeilen kommt, in der das Pivot-Bit liegt. Denn aufgrund der arithmetischen Rechenregel kann sich eine Bitwertänderung in einer Zeile bis in eine andere Zeile und darüber hinaus aufsummieren.
-
Entsprechendes gilt auch für die jeweiligen Spalten, wobei auch hier festgestellt wird, ob ausgehend von einem Pivot-Bit, an dem die arithmetische Inkrement- oder Dekrementoperation durchgeführt wird, in der Eingangs-Bitsequenz eine zusammenhängende Teil-Bitsequenz existiert, bei der sich alle Bitwerte ändern und bei der zumindest eine ungerade Anzahl von Bits der entsprechenden Spalte zugeordnet ist.
-
Mit Hilfe dieser Grundsätze lassen sich somit für jede Zeile und jede Spalte die Paritäten des Ergebnisses der Inkrement- oder Dekrementoperation vorausberechnen, ohne dass die arithmetische Inkrement- oder Dekrementoperation tatsächlich durchgeführt werden muss.
-
In einer alternativen Ausführungsform wird als Eingangs-Paritätscode ein linearer Block-Code, beispielsweise ein Hamming-Code, aus der Eingangs-Bitsequenz berechnet, indem jedes Paritätsbit des linearen Block-Codes in Abhängigkeit von den Bitwerten der für das jeweilige Paritätsbit des linearen Block-Codes vorgegebenen Bits der Eingangs-Bitsequenz berechnet wird. Anschließend wird der so aus der Eingangs-Bitsequenz berechnete lineare Block-Code als Vorausberechnungs-Paritätscode vorausberechnet, indem, entsprechend dem bereits Vorhergesagten, festgestellt wird, ob eine ungerade Anzahl von das jeweilige Paritätsbit des linearen Block-Codes betreffenden Bits der Eingangs-Bitsequenz einen Bitwert aufweisen, welcher aufgrund der arithmetischen Rechenregel der Inkrement- oder Dekrementoperation zu einer Umkehrung führen wird, wobei das vorausberechnete Paritätsbit des linearen Block-Codes durch Umkehrung des entsprechenden Paritätsbits des linearen Bock-Codes als Eingangs-Paritätscode berechnet wird.
-
Mit anderen Worten, es wird für ein Paritätsbit des linearen Block-Codes überprüft, ob sich eine ungerade Anzahl derjenigen Bits, aus denen das Paritätsbit entsprechend des Berechnungsschemas des linearen Block-Codes berechnet wird, aufgrund der arithmetischen Rechenregel ihren Bitwert ändern oder nicht. Wird eine solche ungerade Anzahl festgestellt, so wird das aus der Ergebnis-Bitsequenz ermittelte Paritätsbit des linearen Block-Codes umgekehrt, um das Paritätsbit vorauszuberechnen. Andernfalls verbleibt es unverändert. Eine derartige Abfrage kann beispielsweise mit Hilfe einer Booleschen Algebra über die betreffenden Bits der jeweiligen Paritätsbits des linearen Block-Codes durchgeführt werden.
-
Nach Berechnung der Ergebnis-Bitsequenz wird ein linearer Block-Code als Ergebnis-Paritätscode berechnet, und zwar aus der Ergebnis-Bitsequenz, und mit den vorausberechneten Paritäten des linearen Block-Codes verglichen, wobei hierbei nicht nur Fehler erkannt werden können, sondern gegebenenfalls auch korrigiert werden können, wenn der lineare Block-Code auch Bitfehler korrigieren kann. Je nach Paritätsbit, das einen entsprechenden Fehler zeigt, kann dann auf einen entsprechenden Fehler geschlossen werden.
-
Grundsätzlich schließt das Korrigieren eines Bitfehlers per Definition auch das Erkennen eines Bitfehlers mit ein.
-
In dieser Ausführungsform ist es besonders vorteilhaft, wenn der lineare Block-Code ein Hamming-Code ist, der vielfältig Anwendung findet und teilweise auch als Hardware-Implementation vorliegt. Beim Hamming-Code wird je nach Länge der Eingangs-Bitsequenz eine vorgegebene Anzahl von Paritätsbits aus der Eingangs-Bitsequenz erzeugt, wobei für jedes Paritätsbit eine unterschiedliche Kombination von Bits aus der Eingangs-Bitsequenz verwendet wird. Bei einer 32-Bit-Eingangs-Bitsequenz ergibt sich dabei das erste Paritätsbit p
1 des Hamming-Codes wie folgt:
-
Um nun dieses Paritätsbit p
1 des Hamming-Codes für ein 32-Bit-Eingang-Bitsequenz vorauszuberechnen, wird festgestellt, ob aus der Menge der zur Berechnung von p
1 notwendigen Bits der Eingangs-Bitsequenz eine ungerade Anzahl von Bits aufgrund der arithmetischen Rechenoperation ihren Bitwert ändern. So kann das Paritätsbit p
1 des Hamming-Codes mit Hilfe der nachstehenden Formel vorausberechnet werden:
-
Gemäß dieser Formel führt die Parität p1 zu einer Umkehr, wenn eine ungerade Anzahl von Bits, die für die Berechnung des ersten Paritätsbit des Hamming-Paritätscodes notwendig sind, entsprechend festgestellt wurde. Dann wird der Ausdruck hinter dem XOR logisch 1, was zu einer Umkehrung von p1 führt.
-
Gemäß diesem Prinzip lassen sich somit alle weiteren Paritätsbits des Hamming-Codes vorausberechnen, indem jedes Mal festgestellt wird, ob eine ungerade Anzahl von die jeweiligen Paritätsbits betreffenden Bits der Eingangs-Bitsequenz ihren Bitwert ändern.
-
In einer weiteren vorteilhaften Ausführungsform, die zusätzlich zu den beiden vorherigen Ausführungsformen oder auch alternativ dazu gesehen werden kann, wird zusätzlich ein erweitertes Eingangs-Paritätsbit berechnet, welches in Abhängigkeit von den Bitwerten aller Bits der Eingangs-Bitsequenz und aller Paritätsbits des Eingangs-Paritätscodes berechnet wird. Dieses erweiterte Eingangs-Paritätsbit kann dann als Erweiterung des Eingangs-Paritätscodes betrachtet werden. So kann beispielsweise bei einem Hamming-Code über eine 32-Bit-Eingangs-Bitsequenz dieses zusätzliche erweiterte Eingangs-Paritätsbit durch die nachstehende Formel ermittelt werden:
wobei sich die zugrunde gelegten Bits der Eingangs-Bitsequenz auf die angegebenen Bits aufgrund der Redundanz des Paritätscodes reduzieren lassen.
-
Dieses erweiterte Eingangs-Paritätsbit lässt sich dann ebenso wie die übrigen Paritätsbits vorausberechnen, indem ebenfalls festgestellt wird, ob die betreffenden Bits zur Berechnung des erweiterten Paritätsbits eine ungerade Anzahl von Bits aufweisen, die aufgrund der arithmetischen Rechenoperation zu einer Umkehrung führen würden. Durch Vergleich dieses vorausberechneten erweiterten Paritätsbits mit dem berechneten erweiterten Ergebnis-Paritätsbits lässt sich dann sicher Zweibit-Fehler detektieren und gegebenenfalls korrigieren.
-
Um den Aufwand bei der Erkennung von Bitfehlern gemäß der vorliegenden Erfindung zu reduzieren, wird des Weiteren vorteilhafterweise vorgeschlagen, dass ein derartiges Verfahren nicht jedes Mal durchgeführt wird, sondern lediglich in Situationen, in denen die Vorausberechnung des Paritätscodes relativ einfach realisiert werden kann. So führt bei einer einfachen Inkrementoperation die Tatsache, dass das Pivot-Bit eine logische „0” aufweist, in der Regel lediglich dazu, dass sämtliche Paritätsbits des Paritätscodes, die sich auf das Pivot-Bit beziehen, ihre Parität umkehren, während die übrigen Paritätsbits des Paritätscodes unverändert verbleiben. Ein solcher Fall liegt in 50% der Fälle vor. Das Gleiche gilt beispielsweise bei der Konstellation, bei dem das Pivot-Bit eine logische „1” aufweist und das nachfolgende Bit eine logische „0” aufweist, so dass auch hier nur diejenigen Paritätsbits des Paritätscodes vorausberechnet werden müssen, die sich auf diese beiden Bits beziehen. Bei der Verwendung eines Hamming-Codes als Paritätscode wären dies immerhin lediglich nur die ersten beiden Paritätsbits des Hamming-Codes.
-
Es ist daher ganz besonders vorteilhaft, wenn zunächst festgestellt wird, ob sich innerhalb einer zusammenhängenden Teil-Bitsequenz der Eingangs-Bitsequenz, die eine vorgegebene Bitlänge aufweist, die Umkehrung der arithmetischen Rechenwege der Inkrement- oder Dekrementoperation erschöpft, d. h. dass aufgrund der arithmetischen Rechenregel ein Übertrag außerhalb der Teil-Bitsequenz mit vorgegebener Bitlänge nicht erfolgt. Wurde eine derartige Feststellung getroffen, d. h. dass eine Umkehrung nur innerhalb einer vorgegebenen Teil-Bitsequenz erfolgt, so werden letztendlich für die Vorausberechnung der einzelnen Paritätsbits zur Ermittlung des Vorausberechnungs-Paritätscodes nur diejenigen Paritätsbits vorausberechnet, bei denen mindestens ein Bit der Eingangs-Bitsequenz zur Berechnung des jeweiligen Paritätsbits in der Teil-Bitsequenz liegt. Die übrigen Paritätsbits müssen demnach dann nicht vorausberechnet werden, da diese Paritätsbits ohne die Bits der Teil-Bitsequenz berechnet werden und es somit unabhängig von dem Ergebnis nie zu einem Paritätswechsel bei diesen Paritätsbits kommen kann.
-
Dies hat den entscheidenden Vorteil, dass eine Überprüfung des Ergebnisses und somit ein Erkennen der Bitfehler relativ schnell und ohne viel Aufwand durchgeführt werden kann, was sich jedoch mit der Tatsache erkauft wird, dass eine derartige Bitfehlererkennung nicht immer durchgeführt werden kann.
-
Die Aufgabe wird im übrigen auch mit einem Computerprogramm mit Programmcodemitteln, insbesondere auch einem maschinenlesbaren Träger gespeichert, eingerichtet zur Durchführung des Verfahrens gelöst, wenn das Computerprogramm auf einer Datenverarbeitungsanlage abläuft.
-
Die Erfindung wird im Übrigen auch mit einer Halbleiterschaltung gemäß Anspruch 7, eingerichtet zur Durchführung des Verfahrens, gelöst. Vorteilhafte Ausgestaltungen der Halbleiterschaltung befinden sich in den entsprechenden Unteransprüchen.
-
Die Aufgabe wird im übrigen auch mit einem Computersystem gemäß Anspruch 9 gelöst, wobei das Computersystem eingerichtet ist, mittels eines Mikroprozessors das vorstehend beschriebene Verfahren durchzuführen.
-
Die Erfindung wird anhand der beigefügten Zeichnung beispielhaft näher erläutert. Es zeigt:
-
1 schematische Darstellung der Einbettung der vorliegenden Erfindung im Bereich der arithmetischen Rechenoperationen;
-
2 schematische Darstellung der Einbettung der vorliegenden Erfindung in den Bereich des Programm Counters.
-
1 zeigt schematisch die Einbettung der vorliegenden Erfindung im Bereich der schematischen Rechenoperationen eines Computersystems, insbesondere eines Mikroprozessors bzw. einer Halbleiterschaltung. Kernstück ist die sog. ALU (Arithmetic Logic Unit), die als Eingang zwei Operanden erhält, und hieraus je nach Funktion eine Inkrement- oder Dekrementoperation durchführt. Bei einer Inkrementoperation würde im Ausführungsbeispiel der 1 zu der Eingangs-Bitsequenz b[0...n] der Wert des Operanden OPP hinzuaddiert werden. Im einfachsten Beispiel ist der Operand 1, so dass zu der Eingangs-Bitsequenz b[0...n] der Wert 1 hinzuaddiert wird. Denkbar ist allerdings auch, dass der Operand OPP beliebige Werte enthält, so dass beliebige Werte zu der Eingangs-Bitsequenz hinzuaddiert oder auch subtrahiert werden.
-
Als Ergebnis liefert die ALU eine Ergebnis-Bitsequenz r[0...n], die das Resultat der arithmetischen Inkrement- oder Dekrementoperation enthält.
-
Um nun bei einer derartigen arithmetischen Rechenoperation Bitfehler bei der Berechnung in der ALU feststellen zu können, wird parallel zu der ALU eine Paritäts-Vorausberechnungsbaugruppe 1 vorgesehen, die als Eingang die beiden Operanden der ALU erhält. Die Paritäts-Vorausberechnungsbaugruppe 1 berechnet nun gemäß dem Verfahren der vorliegenden Erfindung die entsprechenden Vorausberechnungs-Paritäten des Paritätscodes, und liefert diese als Eingang einer Bitfehler-Erkennungsbaugruppe 2. Die Bitfehler-Erkennungsbaugruppe 2 erhält als zweiten Eingang das Berechnungsergebnis der ALU, nämlich die Ergebnis-Bitsequenz r[0...n].
-
Die Bitfehler-Erkennungsbaugruppe 2 berechnet nun die Ergebnis-Paritäten des Paritätscodes aus der Ergebnis-Bitsequenz, die es von der ALU erhalten hat, und vergleicht diese Ergebnis-Paritäten mit den Vorausberechnungs-Paritäten der Paritäts-Vorausberechnungsbaugruppe 1.
-
Die Bitfehler-Erkennungsbaugruppe 2 kann je nach Fehlertyp, beispielsweise 1 Bit-Fehler, 2 Bit-Fehler, 3 Bit-Fehler oder Mehrbit-Fehler einen entsprechenden Errorcode ausgeben, der dann beispielsweise über eine Exception im Programmablauf des übergeordneten Computerprogramms abgefangen werden kann.
-
Eine solche Einbettung ist beispielsweise im Bereich des Programm Counters vorteilhaft, der in 2 dargestellt ist. Hierbei erhält die ALU als Operand den Wert 1, um den Programm Counter in die nächste Befehlszeile zeigen zu lassen. Wird während der Addition hierbei ein Fehler festgestellt, so wird ein entsprechender Error ausgegeben.
-
1. Ausführungsbeispiel
-
Das nachfolgende Beispiel zeigt die Berechnung der Vorausberechnungs-Paritäten eines matrixartigen Paritätscodes bei einer 32 Bit Eingangs-Bitsequenz.
-
Zunächst wird die Eingangs-Bitsequenz b[0...31] in einer Matrix zeilenweise und aufeinander folgend angeordnet, so wie nachfolgend gezeigt.
-
-
Anschließend wird für jede Zeile und jede Spalte die Parität berechnet. Die Eingangs-Paritäten der Zeilen ergeben sich dabei wie folgt:
-
Die Eingangs-Paritäten für die Spalten ergeben sich dabei aus den folgenden Gleichungen:
-
Die Eingangs-Paritäten für die Spalten und die Zeilen ergeben zusammen den Eingangs-Paritätscode.
-
Die Vorausberechnungs-Paritäten dieses Paritätscodes werden nun derart berechnet, dass zunächst festgestellt wird, ob in der entsprechenden Zeile oder Spalte eine ungerade Anzahl von Bits vorhanden ist, deren Bitwerte sich aufgrund der Rechenwege ändern werden, wobei dann die Vorausberechnungs-Parität aus der Umkehr der entsprechenden Eingangs-Parität berechnet wird, und ansonsten aus der Nicht-Umkehr der Eingangs-Paritäten.
-
Für die Vorausberechnungs-Paritäten der Zeilen ergeben sich demnach folgende Gleichungen:
-
Für die Vorausberechnungs-Paritäten der Spalten ergeben sich die folgenden Gleichungen:
-
Anschließend werden aus der Ergebnis-Bitsequenz, die sich durch Anwendung der Inkrement- oder Dekrementoperation auf die Eingangs-Bitsequenz ergibt, ebenfalls der Paritätscode gemäß dem Eingangs-Paritätscode berechnet, indem die Ergebnis-Bitsequenz zeilenweise in einer Matrix angeordnet wird und dann die Zeilen- und Spaltenparitäten entsprechend des Eingangs-Paritätscodes berechnet werden.
-
Durch Vergleich der Vorausberechnungs-Paritäten pc' und pr' mit den Ergebnis-Paritäten pc'' und pr'' der Ergebnis-Bitsequenz lässt sich sodann feststellen, ob ein Bitfehler vorhanden ist oder nicht. Dabei lassen sich auch Zweibit-Fehler, Dreibit-Fehler und einige Mehrbit-Fehler mit Sicherheit erkennen.
-
Eine derartige Erkennung kann beispielsweise mit Hilfe von Fehlersyndromen gemäß den folgenden Gleichungen ermittelt werden:
-
Jedes Syndrom (XOR-Operation) liefert somit 1 als Fehlerkennung, wenn ein Fehler vorliegt oder 0, wenn kein Fehler vorliegt. Durch Aufsummierung (OR-Operation) lässt sich somit eine gesamte Fehlerkennung ermitteln.
-
Für die Vorausberechnungs-Paritäten der Zeilen ergeben sich für eine Dekrementoperation um 1 in Bezug auf eine 32 Bit Eingangs-Bitsequenz folgende Gleichungen:
-
Für die Vorausberechnungs-Paritäten der Spalten bei einer Dekrement-Operation um 1 ergeben sich demnach die folgenden Gleichungen:
-
2. Ausführungsbeispiel
-
Gemäß der zweiten Alternative kann der zugrunde gelegte Paritätscode ein linearer Block-Code sein. Nachfolgend wird die vorliegende Erfindung anhand des Hamming-Codes als Paritätscode beispielhaft näher erläutert.
-
Bei der Berechnung des Hamming-Codes für eine 32-Bit-Bitsequenz werden zunächst insgesamt sechs Paritätsbits benötigt, die sich jeweils aus unterschiedlichen Bits der 32-Bit-Bitsequenz berechnen. Wie in der nachstehenden Tabelle gezeigt, wird die 32-Bit-Bitsequenz d
0 bis d
31 um zusätzliche sechs Paritätsbits an entsprechenden Stellen erweitert:
-
Die Paritätsbits p
1 bis p
6 des Hamming-Codes werden dann wie folgt berechnet:
-
Somit wurde im ersten Schritt aus der 32-Bit-Eingangs-Bitsequenz b0 bis b31 der Hamming-Code als Eingangs-Paritätscode mit den Paritätsbits p1 bis p6 entsprechend den vorgegebenen Formeln berechnet.
-
Im anschließenden Schritt wird dieser Eingangs-Paritätscode mit seinen Paritätsbits vorausberechnet, indem für jedes Paritätsbit des Hamming-Codes der Wert des Paritätsbits entsprechend vorausberechnet wird. Hierbei liegt die Idee zugrunde, dass diejenigen Bits der einzelnen Paritätsbits, die für die Berechnung des jeweiligen Paritätsbits notwendig sind, entsprechend so untersucht werden, dass festgestellt wird, ob sich eine ungerade Anzahl von Bits der für die Berechnung des jeweiligen Paritätsbits notwendigen Bits zu einer Umkehrung führen wird, so dass im Ergebnis auch das jeweilige Paritätsbit eine Umkehrung in seinem Wert erfährt.
-
Für die Vorausberechnungs-Paritäten des Vorausberechnungs-Paritätscodes in Form eines Hamming-Codes ergeben sich demnach folgende Gleichungen:
-
Demgegenüber wird nun aus der Ergebnis-Bitsequenz ebenfalls der Hamming-Code mit seinen Paritätsbits p1'' bis p6'' ermittelt, sodass nunmehr die Vorausberechnungs-Paritäten des Hamming-Codes sowie die Ergebnis-Paritäten des Hamming-Codes vorliegen. Durch Vergleich der Paritäten lässt sich dann feststellen, ob ein Bitfehler vorliegt oder nicht. Darüber hinaus kann ein solcher Bitfehler aufgrund des Hamming-Codes auch gegebenenfalls korrigiert werden.
-
Um aus dem Hamming-Code, der einen Hamming-Abstand von 3 besitzt, einen Code zu generieren, der einen Hamming-Abstand von 4 besitzt und die Detektierung von Zweibit-Fehlern erlaubt, wird im erweiterten Hamming-Code noch ein weiteres gerades Paritätsbit p
7 über alle Daten und bisherigen Paritätsbits des jeweiligen Hamming-Codes hinzugefügt. Dieses zusätzliche Paritätsbit kann auf die XOR-Verknüpfung aller Bits, die in ungerader Anzahl vorkommen, reduziert werden. Für die Auswertung zur Erkennung der Bitfehler folgt nun:
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-