-
GEBIET DER ERFINDUNG
-
Die
Erfindung bezieht sich auf eine elektronische Vorrichtung mit einem
Mikroprozessor zur Ausführung
eines Programmcodes, der so ausgeführt ist, dass er die korrekte
Ausführung
des Programmcodes überprüft, sowie
auf ein entsprechendes Verfahren.
-
HINTERGRUND
-
Systeme
auf Mikroprozessorbasis oder eingebettete Mikrocontrollersysteme,
wie etwa passive oder aktive Eingabesysteme, RFID-Systeme, Smartcards
und Sicherheitskarten, erfordern eine sichere und zuverlässige Programmausführung. Harte
oder extreme Betriebsbedingungen sowie böswillige, Fehler verursachende
Angriffe können
zu einer Fehlfunktion und einem unsicheren Betrieb führen, der
unter allen Umständen zu
vermeiden ist.
-
Um
Fehler und Abweichungen von der normalen Programmausführung zu
detektieren, ist im Stand der Technik bekannt, Prüfpunkte
in den Programmcode einzuführen.
An diesen Prüfpunkten
wird ein Wert an einer Speicherstelle mit einem erwarteten Wert
verglichen. Wenn die Werte übereinstimmen,
wird die normale Programmausführung
fortgesetzt. Wenn der Wert im Speicher nicht dem erwarteten Wert
entspricht, wird die Programmausführung abgebrochen.
-
Diese
herkömmliche
Lösung
hat jedoch mehrere Nachteile. Die Granularität der Prüfpunkte entlang dem Programmcode
hängt von
der Anzahl der Prüfpunkte
ab und muss zur Minimierung der Ausführungszeit niedrig gehalten
werden. Das bedeutet, dass die Programmausführung zwischen den Prüfpunkten
und über erhebliche
Teile des Programms nicht überprüft wird.
Darüber
hinaus ist die allgemeine Zuverlässigkeit
und Überprüfbarkeit
begrenzt, da die bekannten Verfahren auf einer Selbstüberprüfung des
Programms basieren.
-
KURZZUSAMMENFASSUNG
-
Eine
Aufgabe der Erfindung besteht darin, eine elektronische Vorrichtung
und ein Verfahren zur Überprüfung der
korrekten Programmausführung
bereitzustellen, die sicherer sind als diejenigen aus dem Stand der
Technik.
-
Bei
einem Aspekt der Erfindung wird eine elektronische Vorrichtung bereitgestellt,
die einen Mikroprozessor zur Ausführung eines Programmcodes aufweist.
Es gibt ferner eine erste Hardware-Codepfadüberprüfungsstufe (CPV-Stufe), die an den
Mikroprozessor gekoppelt ist. Die erste Hardware-CPV-Stufe weist
einen ersten Fehlerdetektionscodegenerator (EDC-Generator) auf.
Der erste EDC-Generator ist so ausgeführt, dass er kontinuierlich
einen Fehlerdetektionscode an einer kontinuierlichen Codesequenz
bestimmt, die sich auf einen tatsächlich ausgeführten Abschnitt
des Programmcodes bezieht. Die erste Hardware-CPV-Stufe ist so ausgeführt, dass
sie den aktuellen Fehlerdetektionscode mit einem vorbestimmten Fehlercode
vergleicht, um die korrekte Ausführung
des Programmcodes zu überprüfen. Anhand
des Vergleichsergebnisses kann die CPV-Stufe einen Fehler oder eine
nicht normale Programmcodeausführung
angeben. Bei diesem Aspekt der Erfindung kann die CPV-Stufe in Hardware
und unabhängig
und separat von dem Mikroprozessor implementiert sein. Darüber hinaus
weist die CPV-Stufe einen EDC-Generator auf, der beispielsweise
eine Stufe zur Ausführung
einer zyklischen Redundanzprüfung
(CRC) sein kann. Der EDC-Generator kann einen Code empfangen, der
sich auf das Programm bezieht, das tatsächlich ausgeführt wird.
Der Programmcode oder darauf bezogene Daten werden als kontinuierliche
Datensequenz in den EDC-Generator eingespeist, der kontinuierlich
Fehlerdetektionscodewerte anhand der empfangenen Daten berechnet. „Kontinuierlich” bedeutet,
dass die Daten oder der Code zu der CPV-Stufe und/oder zum EDC-Generator
weitergeleitet und im EDC-Generator verarbeitet werden, wenn sie
während
der Programmausführung
und nicht nur an bestimmten Unterbrechungspunkten auftreten. Das
Weiterleiten und Verarbeiten von Daten und/oder eines Codes zum
EDC-Generator oder zur CPV-Stufe kann anhand eines Taktsignals und
in Übereinstimmung
mit den Schritten zur Ausführung
des Programms durchgeführt werden.
Der Vergleich der bestimmten Fehlerdetektionscodewerte kann jedoch
nur an bestimmten Unterbrechungspunkten des Programms erfolgen.
Das bedeutet, dass die CPV-Stufe höchste Granularität und somit
höchste
Sicherheitsstandards bietet. Darüber
hinaus kann die CPV-Stufe keine zusätzliche Datenverarbeitungszeit
des Mikroprozessors verbrauchen.
-
Es
gibt viele mögliche
Implementierungen für
einen EDC-Generator. Üblicherweise übertragen
die von dem EDC-Generator ausgegebenen Fehlerdetektionscodes mehr
Bits als ursprünglich
im empfangenen Code enthalten sind. Der vorbestimmte Fehlerdetektionscode
kann dann eine feststehende Anzahl von Originalcodebits (hier auch
als Datenbits bezeichnet) enthalten, gefolgt von einer feststehenden
Anzahl von Prüfbits
(in der Literatur üblicherweise
als Redundanz bezeichnet). Die Prüfbits können mit einem deterministischen
Algorithmus von den Datenbits abgeleitet werden. Der ursprüngliche
Code kann zunächst
durch den gleichen Algorithmus ausgeführt werden, und das Ergebnis
kann als vorbestimmter erwarteter Fehlerdetektionscode gespeichert
werden. Der EDC-Generator
wendet den gleichen Algorithmus an den empfangenen Codebits an, und
die CPV-Stufe vergleicht dessen Ausgabe mit dem vorbestimmten Fehlerdetektionscode.
Wenn die Werte nicht übereinstimmen,
ist während
der Programmausführung
an einer Stelle ein Fehler aufgetreten. Bei einer weiteren Ausführungsform
kann ein nicht systematischer EDC-Generator verwendet werden, wie
etwa einige Raptor-Codes. Die Codebits können dann in zumindest genauso
viele Fehlerdetektionscodebits umgewandelt werden, und der gespeicherte
vorbestimmte Fehlerdetektionscode kann nur diese Fehlerdetektionscodebits enthalten.
-
Der
EDC-Generator kann in Übereinstimmung
mit einem Schema implementiert werden, das Paritätsbits verwendet. Ein Paritätsbit ist
jedoch ein Fehlerdetektionsmechanismus, das nur eine ungerade Anzahl
von Fehlern detektieren kann. Der kontinuierliche Codefluss, der
empfangen oder während
der Programmausführung
von dem Mikroprozessor abgeleitet wird, kann dann in Bitblocks unterteilt
werden, und die Anzahl der '1'-Bits wird bestimmt.
Ein Paritätsbit
wird gesetzt (oder zurückgesetzt),
wenn die Anzahl der Ein-Bits ungerade (oder gerade) ist.
-
Der
EDC-Generator kann auch in Übereinstimmung
mit einem Schema implementiert werden, das eine Prüfsumme verwendet.
Der EDC-Generator kann dann eine arithmetische Summe von Codewörtern einer bestimmten
Wortlänge,
beispielsweise Bytewerte, und ihren Übertragwert bestimmen. Die
Summe kann dann negiert und als vorbestimmter Fehlerdetektionscode
gespeichert werden. Die CPV-Stufe kann dann so ausgeführt sein,
dass sie für
den empfangenen Code während
der Programmausführung
eine neue Prüfsumme
berechnet, die mit der Prüfsumme
erweitert ist. Wenn die neue Prüfsumme
nicht 0 ist, wird ein Fehler detektiert. Der EDC-Generator für die Prüfsummenschemen
kann Paritätsbits,
Prüfziffern
und eine Längsredundanzprüfung umfassen.
-
Der
EDC-Generator kann auch in Übereinstimmung
mit einer zyklischen Redundanzprüfung
implementiert werden. Bei einer zyklischen Redundanzprüfung wird
ein Datenblock als Koeffizienten eines Polynoms betrachtet, das
dann durch ein feststehendes, vorbestimmtes Polynom geteilt wird.
Die Koeffizienten des Ergebnisses der Division werden dann als redundante
Datenbits, den zyklischen Redundanzcode (CRC), verwendet. Der CRC
kann dann gespeichert werden. Während
der Programmausführung
kann die CPV-Stufe (oder
vielmehr der EDC-Generator in der CPV-Stufe) den CRC anhand der
empfangenen Codebits (diese Codebits von dem Mikroprozessor können auch
als Nutzinformation bezeichnet werden) neu berechnen und den gespeicherten
CRC mit dem neuen CRC vergleichen. Eine fehlende Übereinstimmung
gibt an, dass ein Fehler aufgetreten ist.
-
Bei
weiteren Ausführungsformen
kann eine Prüfung
auf Basis einer Hamming-Distanz angewendet werden. Für Hamming-Distanz-Prüfungen kann
ein EDC-Generator so implementiert sein, dass er jedes n-Bit-Wort
des Codes in ein größeres n
+ d + 1-Bit-Wort abbildet, sodass die minimale Hamming-Distanz zwischen
jeder gültigen
Abbildung d + 1 beträgt.
Bei weiteren Ausführungsformen
können
Hash-Funktionen, die horizontale und vertikale Redundanzprüfung, andere
Arten der Redundanzprüfung
wie die horizontale Redundanzprüfung,
die vertikale Redundanzprüfung
und die doppelte, duale oder diagonale Parität (in RAID-DP verwendet) angewendet
werden.
-
Gemäß einem
vorteilhaften Aspekt der Erfindung ist die kontinuierliche Codesequenz
nicht auf den Programmcode beschränkt, sondern kann alternativ
auch Daten, einen Adresscode und/oder deterministische Zustandsinformationen
verwenden oder auch umfassen.
-
Bei
einer vorteilhaften Ausführungsform
kann die erste Hardware-CPV-Stufe an einen Datenbus und/oder einen
Adressbus und/oder einen Befehlsbus und/oder einen internen Zustandswertbus
(d. h. beispielsweise einen internen FSM einer CPU) des Mikroprozessors
gekoppelt sein, um die kontinuierliche Codesequenz zu überwachen.
Die CPV-Stufe kann dann unabhängig
an bestehende Busstrukturen gekoppelt sein und ruft die Daten von
dort ab, um den Fehlerdetektionscode zu bestimmen. Die CPV-Stufe
kann dann Daten, Adressen und/oder Befehle überwachen, die durch die Busse
geleitet werden, während
der Mikroprozessor das Programm ausführt.
-
Die
erste Hardware-CPV-Stufe kann so ausgeführt sein, dass sie den aktuellen
Fehlerdetektionscode an einem vorbestimmten Prüfpunkt des Programmablaufs
mit dem vorbestimmten Fehlercode vergleicht. Die CPV-Stufe kann
dann eine Steuerstufe aufweisen. Die Steuerstufe kann so ausgeführt sein,
dass sie Steuer- und/oder Konfigurationssignale von dem Mikroprozessor
empfängt.
Die Steuerstufe kann dann Freigabesignale zur Durchführung eines
Vergleichs eines vorbestimmten Fehlercodes mit einem aktuellen Fehlercode
in Reaktion auf ein Steuer- und/oder Konfigurationssignal von der
CPU ausgeben. Die CPV-Stufe kann einen oder mehrere Komparatoren
zur Durchführung
der Vergleiche des vorbestimmten Fehlercodes mit dem aktuellen Fehlercode
aufweisen.
-
Bei
einem Aspekt der Erfindung kann die CPV-Stufe auch mehr als einen
EDC-Generator aufweisen. Bei einer Ausführungsform kann die erste Hardware-CPV-Stufe einen zweiten
EDC-Generator aufweisen. Der erste und der zweite EDC-Generator
können
dann so ausgeführt
sein, dass sie unabhängig
voneinander freigegeben oder gesperrt werden, um Fehlerdetektionscodes
verschiedener Pfade des Programmcodes zu bestimmen. Die mehreren
EDC-Generatoren
können
dann vorteilhaft so gekoppelt sein, dass sie einen Code empfangen,
der sich auf verschiedene Ausführungspfade
des ausgeführten
Programms bezieht. Dieser Aspekt bezieht sich auf die Tatsache,
dass die meisten Programme keinen festen oder auch vorhersehbaren
Programmablauf haben. Es ist somit erforderlich, alle möglichen
Varianten während
der Programmausführung
zu berücksichtigen.
Dies kann mit mehreren EDC-Generatoren
realisiert werden.
-
Bei
einem weiteren Aspekt der Erfindung kann es auch mehr als eine CPV-Stufe geben. Bei
einer Ausführungsform
kann es eine zweite Hardware-CPV-Stufe
geben, und die erste Hardware-CPV-Stufe und die zweite Hardware-CPV-Stufe können dann
so ausgeführt
sein, dass sie unabhängig
voneinander freigegeben oder gesperrt werden. Ähnlich wie bei der Verwendung
mehrerer EDC-Generatoren
innerhalb einer CPV kann es nützlich
sein, verschiedene CPV-Stufen
und/oder EDC-Generatoren zu verwenden. Die CPV-Stufen und/oder EDC-Generatoren
können
dann vorteilhaft so ausgeführt
sein, dass sie freigegeben oder gesperrt werden, wenn das Programm
in Schleifen im Programmablauf eintritt oder diese verlässt. Dies
kann eine sehr effiziente Weise der Codeüberprüfung sein, unabhängig von
der Anzahl der Schleifen oder unabhängig davon, wie oft ein Programm
durch eine Schleife läuft.
Bei einer vorteilhaften Ausführungsform
kann die elektronische Vorrichtung so ausgeführt sein, dass sie zwei Hardware-CPV-Stufen
oder zwei EDC-Generatoren verwendet, um die Schleifen eines Programms
zu bearbeiten. Eine erste Hardware-CPV-Stufe oder ein erster EDC-Generator
kann dann bei Eintritt einer Schleife freigegeben werden, und eine
zweite CPV-Stufe oder ein zweiter EDC-Generator kann gesperrt werden.
Wenn die Schleife verlassen wird, kann die zweite CPV-Stufe oder
der zweite EDC-Generator freigegeben werden, und die erste Hardware-CPV-Stufe oder der
erste EDC-Generator kann dann gesperrt werden. Zwei oder mehr CPV-Stufen
können
vorteilhaft verwendet werden, wenn zwei oder mehr Busse oder andere
Hardwarestrukturen oder Komponenten unabhängig voneinander zu überwachen
sind.
-
Bei
einer vorteilhaften Ausführungsform
kann die elektronische Vorrichtung so ausgeführt sein, dass sie die EDC-Generatoren
und/oder Hardware-CPV-Stufen anhand von Adressinformationen freigibt
oder sperrt. Diese Ausführungsformen
der Erfindung können
Adressinformationen verwenden, die EDC-Generatoren oder CPV-Stufen
freigeben oder sperren. Darüber
hinaus können
Adressinformationen in den Daten enthalten sein, die in dem EDC
einer oder mehrerer CPVs verarbeitet werden, was mit Softwareimplementierungen
aus dem Stand der Technik nicht möglich ist.
-
Die
Erfindung stellt auch ein Verfahren zur Überprüfung der korrekten Programmausführung eines
Mikroprozessors mit einer ersten Hardware-Codepfadüberprüfungsstufe
(CPV-Stufe), die an den Mikroprozessor gekoppelt ist, bereit. Ein
Programmcode wird auf dem Mikroprozessor ausgeführt. Die entsprechenden Datenwörter, die
sich auf Operationscodes und/oder Daten und/oder Zustandsinformationen
beziehen, werden kontinuierlich zur CPV-Stufe geleitet. Die Hardware-CPV-Stufe
bestimmt kontinuierlich einen Fehlerdetektionscode an einer kontinuierlichen
Codesequenz, die sich auf einen Abschnitt des Programmcodes bezieht,
während
der Programmcode ausgeführt
wird. Die CPV-Stufe vergleicht auch den aktuellen Fehlerdetektionscode mit
einem vorbestimmten Fehlercode, um die korrekte Ausführung des
Programmcodes zu überprüfen und
einen Fehler anzugeben.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Weitere
Aspekte der Erfindung ergeben sich aus der nachfolgenden Beschreibung
bevorzugter Ausführungsformen
der Erfindung anhand der beigefügten
Zeichnungen. Darin zeigen
-
1 ein
vereinfachtes Blockschaltbild einer elektronischen Vorrichtung in Übereinstimmung
mit Aspekten der Erfindung;
-
2 ein
Zustandsdiagramm im Mealy-Format der Steuerlogik für einen
EDC-Generator gemäß Aspekten
der Erfindung;
-
3 ein
Schaubild zur Veranschaulichung eines möglichen Programmablaufs, der
sich auf Aspekte der Erfindung bezieht;
-
4 ein
Schaubild zur Veranschaulichung eines möglichen Programmablaufs, der
sich auf Aspekte der Erfindung bezieht;
-
5 ein
weiteres Schaubild zur Veranschaulichung eines Aspekts der Erfindung;
und
-
6 ein
vereinfachtes Blockschaltbild einer Ausführungsform der Erfindung, die
mehrere CPV-Stufen verwendet.
-
AUSFÜHRLICHE BESCHREIBUNG EINER
BEISPIELHAFTEN AUSFÜHRUNGSFORM
-
1 zeigt
ein vereinfachtes Blockschaltbild einer elektronischen Vorrichtung 1 gemäß Aspekten
der Erfindung. Die elektronische Vorrichtung 1 kann ein
System sein, das in einem Mikroprozessor oder Mikrocontroller eingebettet
ist. Die elektronische Vorrichtung 1 kann vollständig als
integrierte Halbleitervorrichtung integriert sein, oder einige Komponenten,
wie etwa der Mikroprozessor (oder Mikrocontroller) CPU 3,
der Speicher 4 und die CPV-Stufe 2 können auf
einem einzigen oder auf mehreren Halbleiterchips integriert sein.
Gemäß Aspekten
der Erfindung ist der Mikroprozessor CPU 3 mit einer CPV-Stufe 2 ergänzt. Die
CPV-Stufe 2 kann (wie gezeigt) an einen Mikroprozessoreingang-/Mikroprozessorausgangsanschluss
(I/O) angeschlossen sein, aber sie kann auch innerhalb des Mikroprozessors 3 angeordnet
sein. Die CPV-Stufe kann so ausgeführt sein, dass sie alle Codes
oder Daten, die sich auf die Programmausführung beziehen, überwacht,
wie etwa den Programmcode, jegliche Adressdaten sowie interne, deterministische
CPU-Zustandsdaten oder jegliche weitere Daten, die die CPU verarbeitet.
Es können
zwei oder mehr EDC-Generatoren
in einer CPV-Stufe vorhanden sein, die akkumulierende EDC-Werte über den
Code bilden (d. h. allgemeine Daten). Der Mikrocontroller 3 kann
eine Schnittstelle haben, mit der es möglich ist, dass der Mikrocontroller
jedes CPV-Modul
freigibt, sperrt oder zurücksetzt
und den akkumulativen EDC-Wert einer freigegebenen CPV überprüft.
-
Bei
dieser Ausführungsform
weist die CPV-Stufe 2 N EDC-Generatoren auf, die so ausgeführt sind, dass
sie einen Fehlerdetektionscode an den Systemdaten, die über die
Leitung 14 von dem Mikroprozessor CPU 3 empfangen
werden, bestimmt. Der Code kann gemäß einem Systemtaktsignal weitergeleitet
werden. Er kann über
die Leitung 14 gemäß einem
Programmzähler
weitergeleitet werden, der angibt, dass ein darauffolgender Befehl
im Programm ausgeführt
wird. Der Code oder die Daten können
bei jeder Änderung
des Codes oder der Daten aufgrund der Programmausführung (neue
Daten, neue Adresse, neuer Befehl oder neue Zustandsinformationen,
wie etwa binäre
Wörter
(z. B. 8, 16, 32, 64 oder mehr Bits)) über die Leitung 14 zu einem
EDC-Generator geleitet werden. Die Übertragung des Codes oder der
Daten über
die Leitung 14 kann dann beispielsweise dadurch ausgelöst werden,
dass ein neuer Befehl (Operationscode) eines Programms ausgeführt wird
oder Daten, eine Adresse, Zustandsinformationen und/oder jegliche
weitere Daten oder Informationen über einen an den Mikrocontroller
gekoppelten externen oder internen Bus weitergeleitet werden.
-
Es
gibt viele mögliche
Implementierungen für
die EDC-Generatoren 6, 7, 8. Üblicherweise
enthalten die Fehlerdetektionscodes EDCACCU1 bis EDCACCUN, die von
dem EDC-Generator ausgegeben werden, mehr Bits als ursprünglich in
dem Code enthalten sind, der sequenziell über die Zeit empfangen wird.
Der Prüfwert
(vorbestimmter Fehlerdetektionscode), der über die Leitung 15 empfangen
wird, kann dann eine feststehende Anzahl von Originalcodebits (hier
auch als Datenbits bezeichnet), gefolgt von einer feststehenden
Anzahl von Prüfbits
(in der Literatur gewöhnlich
als Redundanz bezeichnet), enthalten. Die Prüfbits können mit einem deterministischen
Algorithmus von den Datenbits abgeleitet werden. Dieser Algorithmus
kann dann in den EDC-Generatoren 6, 7, 8 implementiert
sein. Der Originalcode kann zunächst
(vor der Programmausführung)
durch den gleichen Algorithmus ausgeführt werden, und das Ergebnis
kann als vorbestimmter erwarteter Fehlerdetektionscode gespeichert
werden. Der EDC-Generator 6, 7, 8 wendet
den gleichen Algorithmus an den empfangenen Codebits (über die
Leitung 14) an, und die CPV-Stufe vergleicht dessen Ausgabe
in den Komparatoren 9, 10, 11 mit dem
vorbestimmten Fehlerdetektionscode. Wenn die Werte nicht übereinstimmen, ist
an einem Punkt während
der Programmausführung
ein Fehler aufgetreten. Bei einer vorteilhaften Ausführungsform
können
die EDC-Generatoren 6, 7, 8 alle das
gleiche Fehlerdetektionscodeverfahren anwenden. Die EDC-Generatoren 6, 7, 8 können dann
so ausgeführt
sein, dass sie einen akkumulativen Code an der empfangenen Codesequenz
berechnen. Bei einer Ausführungsform
kann ein nicht systematischer EDC-Generator, wie etwa einige Raptor-Codes,
verwendet werden. Die über
die Leitung 14 empfangenen Codebits können dann in mindestens genauso
viele Fehlerdetektionsbits umgewandelt werden, und der (im Speicher
MEM 4) gespeicherte vorbestimmte Fehlerdetektionscode kann
nur diese Fehlerdetektionscodebits enthalten. Die vorbestimmten
Prüfcodes
müssen
nicht zwangsläufig
in einem Speicher gespeichert werden, sondern können mit dem Programmcode gespeichert
und über
die gleichen Leitungen wie die zu überwachenden Daten (beispielsweise Leitung 14)
weitergeleitet werden. Bei einer weiteren Ausführungsform können die
EDC-Generatoren 6, 7, 8 auch gemäß einem
Schema implementiert sein, das Paritätsbits verwendet. Dies ist
nützlich,
wenn nur eine ungerade Anzahl von Fehlern zu detektieren ist. Mit
der Paritätsbitfehlerdetektion
kann dann der kontinuierliche Codestrom, der empfangen oder von
dem Mikroprozessor 3 während
der Programmausführung
abgeleitet wird, in Bitblocks unterteilt werden, und die Anzahl
der 1-Bits wird gezählt.
Ein Paritätsbit
wird gesetzt (oder zurückgesetzt),
wenn die Anzahl der Ein-Bits ungerade (oder gerade) ist. Bei einer
weiteren Ausführungsform
können
die EDC-Generatoren 6, 7, 8 auch gemäß einem
Schema implementiert sein, das eine Prüfsumme verwendet. Die EDC-Generatoren
können
dann eine arithmetische Summe von Codewörtern mit einer bestimmten
Wortlänge,
beispielsweise Bytewerte, und ihren Übertragwert bestimmen. Die
Summe kann dann negiert und als vorbestimmter Fehlerdetektionscode
gespeichert werden. Die CPV-Stufe 2 kann dann so ausgeführt sein,
dass sie für
den empfangenen Code während
der Programmausführung
eine neue Prüfsumme berechnet,
die mit der Prüfsumme
erweitert ist. Wenn die neue Prüfsumme
nicht 0 ist, wird ein Fehler detektiert. Die EDC-Generatoren 6, 7, 8 für die Prüfsummenschemen
können
Paritätsbits,
Prüfziffern
und eine Längsredundanzprüfung umfassen.
Bei einer weiteren Ausführungsform
können
die EDC-Generatoren 6, 7, 8 gemäß einer
zyklischen Redundanzprüfung
implementiert sein. Bei einer zyklischen Redundanzprüfung wird
ein Datenblock als Koeffizienten eines Polynoms betrachtet, das
dann durch ein feststehendes vorbestimmtes Polynom geteilt wird.
Die Koeffizienten des Ergebnisses der Teilung werden als redundante
Datenbits, den zyklischen Redundanzcode (CRC), verwendet. Der CRC
kann dann gespeichert werden. Während
der Programmausführung
kann die CPV-Stufe (oder vielmehr die EDC-Generatoren 6, 7, 8 in
der CPV-Stufe 2) den CRC von den empfangenen Codebits (diese
Codebits von dem Mikroprozessor können als Nutzinformationen
bezeichnet werden) neu berechnen und den gespeicherten CRC mit dem
neuen CRC vergleichen. Eine fehlende Übereinstimmung gibt an, dass
ein Fehler aufgetreten ist. Weitere Ausführungsformen können eine
Prüfung auf
Basis einer Hamming-Distanz
verwenden. Für
Hamming-Distanz-Prüfungen
kann ein EDC-Generator so implementiert sein, dass er jedes n-Bit-Wort
des Codes in ein größeres n
+ d + 1-Bit-Wort abbildet, sodass die minimale Hamming-Distanz zwischen
jeder gültigen
Abbildung d + 1 beträgt.
Weitere Ausführungsformen
können
Hash-Funktionen,
eine horizontale und vertikale Redundanzprüfung, andere Arten von Redundanzprüfung umfassen,
zu denen die horizontale Redundanzprüfung, die vertikale Redundanzprüfung und
die doppelte, duale oder diagonale Parität (in RAID-DP verwendet) zählen.
-
Die über die
Leitung 14 empfangene kontinuierliche Codesequenz ist nicht
auf einen Programmcode beschränkt,
sondern kann auch oder lediglich Daten, einen Adresscode und/oder
deterministische Zustandsinformationen verwenden.
-
Es
gibt eine Steuerstufe 5, die an den Mikrocontroller CPU 3 gekoppelt
ist und über
die Leitung 13 Steuer- und Konfigurationssignale von dem
Mikroprozessor 3 empfängt.
Die Steuerstufe ist so ausgeführt, dass
sie Freigabesignale 19, 20 und 21 an
die EDC-Generatoren 6, 7 und 8 ausgibt,
um jeden EDC-Generator freizugeben oder zu sperren. Es gibt auch
N Komparatoren 9, 10, 11 zum Vergleichen
der von den EDC-Generatoren 6, 7, 8 ausgegebenen
Fehlerdetektionscodes mit vorbestimmten Werten, die über die
Leitungen 15 empfangen werden. Es kann einen Speicher MEM 4 zum
Speichern der vorbestimmten Fehlerdetektionscodes geben, die mit
den aktuellen Fehlerdetektionscodes zu vergleichen sind, die über die
Leitungen 16, 17 und 18 von den EDC-Generatoren 6, 7 bzw. 8 ausgegeben
werden. Der Speicher MEM 4 kann so ausgeführt sein, dass
er Adressinformationen und Daten von der CPU 3 empfängt. Der
Speicher MEM 4 kann dann in Reaktion auf Steuerdaten von
der CPU 3 die erforderlichen vorbestimmten Fehlerdetektionscodes
für die
Leitung 15 bereitstellen. Die Steuerstufe 5 ist
auch so ausgeführt,
dass sie die Komparatoren 9, 10 und 11 durch
individuelle Freigabeleitungen 22, 23 und 24 freigibt
oder sperrt. Die Komparatoren 9, 10, 11 stellen
Vergleichsergebnisse für
den Ausnahmegenerator 12 bereit. Wenn der Vergleich eines
aktuellen EDC-Generator-Ausgabesignals EDCACCU1, EDCACCU2 oder EDCACCUN
angibt, dass der aktuelle Wert des entsprechenden EDC-Generators 6, 7, 8 nicht
mit dem vorbestimmten Wert übereinstimmt,
wird der Ausnahmegenerator 12 ausgelöst, um ein Ausnahmesignal über den
Ausgang 25 auszugeben. Das Signal kann dann zum Auslösen einer
Ausnahmeprozedur verwendet werden.
-
Die
Steuerlogik 5 kann von dem System, dem Mikrocontroller
oder der CPU 3 so konfiguriert werden, dass sie den gewünschten
Betriebsmodus einstellt. Dies kann beispielsweise die Anzahl der
freigegebenen EDC-Generatoren 6, 7, 8 sein,
die Zeitpunkte, an denen die Daten in die EDC-Generatoren einzuspeisen
sind, und die Teile des Systems oder des Mikroprozessors 3,
von denen die Daten in die EDC-Generatoren einzuspeisen sind. Die
Daten an der Leitung 14 können ein Adress- und/oder Datenbus,
ein CPU-Mikrocode oder weitere deterministische Zustandsinformationen
von dem System sein.
-
Die
Steuerlogik überwacht
auch, wenn ein Prüfpunkt
erreicht ist, und gibt die entsprechenden Komparatoren 9, 10, 11 für alle freigegebenen
EDC-Generatoren frei, die wiederum den Ausnahmegenerator 12 auslösen, wenn
eine fehlende Übereinstimmung
zwischen dem Ausgabewert des EDC-Generators und dem gegebenen Prüfwert vorliegt.
Alle Leitungen 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 33 und 34 können Busse mit
einer beliebigen geeigneten Busbreite sein.
-
2 zeigt
ein Zustandsdiagramm für
einen möglichen
Betrieb eines EDC-Generators.
Jeder der in 1 gezeigten EDC-Generatoren
kann in Übereinstimmung
mit diesem Zustandsdiagramm konfiguriert sein. Der EDC kann im Allgemeinen
in einem Ruhezustand S1 sein. In Reaktion auf ein Signal von der
Steuerstufe 5, die ein entsprechendes Signal von dem Mikroprozessor 3 empfangen
haben kann, kann der EDC diesen Ruhezustand S1 über den Pfad 26 verlassen.
Der EDC-Generator kann in einen aktiven Zustand S2 übergehen.
Der aktive Zustand hat drei Grundschleifen oder Übergänge 27, 28 und 29,
ausgehend von denen er immer zum aktiven Zustand S2 zurückkehrt.
Die erste Schleife 27 bezieht sich auf das Ereignis, dass
der EDC-Generator neue Daten von dem Mikroprozessor 3 (oder
dem System oder einer CPU) empfängt.
Diese Daten werden dann im EDC-Generator verarbeitet. Das bedeutet,
dass der neue Wert EDCACCU in dem EDC-Generator in Abhängigkeit
von dem vorhergehenden Wert in den EDC und den neuen Daten von dem Mikroprozessor 3 bestimmt
werden kann. Die zweite Schleife 28 wird begonnen, wenn
ein Prüfpunkt
während der
Programmausführung
in dem Mikroprozessor erreicht ist. Wenn ein Prüfpunkt erreicht ist, kann der
Mikroprozessor 3 ein Steuersignal zur Steuerstufe 5 ausgeben,
um einen Vergleich von aktuellen Fehlerdetektionswerten in den EDC-Generatoren
mit gespeicherten vorbestimmten Werten auszulösen. Die Schleife 28 bezieht sich
auf eine Situation, bei der das Vergleichsergebnis negativ ist.
Das bedeutet, dass eine Ausnahme ausgelöst wird. Der Ausnahmegenerator 12 kann
dann eine Ausnahmeprozedur auslösen
oder einen Interrupt ausgeben, um die Ausnahme zu bearbeiten. Die
Schleife 29 bezieht sich auf eine Situation, bei der das
Vergleichsergebnis positiv ist. Das Programm hat einen Prüfpunkt erreicht,
und es wird festgestellt, dass der Inhalt EDCACCU des EDC-Generators
mit dem erwarteten Wert übereinstimmt.
Das Programm kann dann die Ausführung
des Programms ohne Änderung
weiterführen.
Wenn die Steuerstufe 5 ein entsprechendes Signal ausgibt, wird
der EDC-Generator wie mit dem Übergangspfad 30 angegeben
gesperrt, und der EDC-Generator kehrt in einen Ruhezustand zurück.
-
Da
es häufig
unvermeidbar ist, dass ein Programmausführungsablauf von den verarbeiteten
Daten abhängig
ist (zum Beispiel, wie häufig
eine Schleife ausgeführt
ist), ist der erwartete Wert des Fehlerdetektionscodes EDCACCU nicht
feststehend, sondern hängt
von verschiedenen unvorhersehbaren Faktoren ab. Gemäß einem
Aspekt der Erfindung können
die meisten möglichen
Szenarien in nur zwei Hauptsituationen unterteilt werden. Ein Programmpfad
wird in zwei oder mehr Pfade unterteilt (Sprungbefehl wird angenommen oder
nicht), oder ein Programmpfad läuft
von zwei oder mehr Pfaden in einen zusammen (zwei verschiedene Sprungbefehle
springen zum gleichen Code).
-
3 bezieht
sich auf das zweite Szenario, bei dem ein Pfad P1 in mehrere Pfade
P2, P3 und P4 unterteilt ist. Ein entsprechender Code kann der Folgende
sein:
Ein veranschaulichender Auszug eines Quellcodes einer
Prozedur BEISPIEL1 kann die folgende Struktur und Befehle haben.
-
-
-
Wenn
das Programm in die Prozedur BEISPIEL1 eintritt, wird der Speicherinhalt
einer Speicherstelle, die mit dem Zeiger &MEM1 angegeben ist, zu einem Register
REG4 verschoben. Der Inhalt des Registers REG4 wird dann mit einem
konstanten Wert CNST verglichen. Wenn die beiden Werte unterschiedlich
sind, erfolgt ein Sprung (Befehl jne) zur Prozedur FEHLER, und eine
Konstante ERR wird zu einer Stelle im Speicher MEM2 verschoben.
Wenn der Wert von CNST und der Inhalt im Register REG4 gleich sind,
wird die Konstante OK zur Speicherstelle verschoben, die mit dem
Zeiger &MEM2
angegeben ist, und die Prozedur FEHLER wird nicht erreicht.
-
Bei
diesem Beispiel können
die folgenden Schritte eingeführt
werden, um eine Codeüberprüfung in Übereinstimmung
mit Aspekten der Erfindung zu erhalten:
-
'Enable CPV' bedeutet, dass eine
CPV-Stufe freigegeben oder aktiviert wird, um eine empfangene Codesequenz
zu verarbeiten. Das bedeutet insbesondere, dass mindestens ein EDC-Generator
in der CPV-Stufe aktiviert wird. Dies wird somit alternativ mit 'Enable EDC' bezeichnet. 'Disable CPV' oder 'Disable EDC' bedeutet, dass die
entsprechende CPV-Stufe (oder EDC-Generator) gesperrt wird. 'Prüf CPV mit
VAL1' gibt einen
Prüfpunkt
an und bedeutet, dass die CPV-Stufe
oder EDC-Stufe einen Vergleich des aktuellen vorbestimmten oder
berechneten Fehlerdetektionscodes mit dem angegebenen vorbestimmten
Wert VAL1 durchführt.
Für die
obige Ausführungsform
kann die CPV-Stufe (EDC-Generator
in der CPV-Stufe) freigegeben werden, wenn die Prozedur BEISPIEL1
begonnen wird, wie mit 'Enable
CPV' angegeben.
Die verbleibenden Befehle sind dem Programmcode ohne CPV-Stufe ähnlich.
Am Ende jeder Prozedur BEISPIEL1 oder Prozedur FEHLER wird jedoch
eine Prüfung
entweder mit dem vorbestimmten Wert VAL1 oder mit dem vorbestimmten Wert
VAL2 durchgeführt.
Der Wert VAL1 oder VAL2, der für
den Vergleich verwendet wird, hängt
von dem Pfad ab, über
den der Prüfpunkt
erreicht wird. Das bedeutet, dass die Aspekte der Erfindung wie
die beiden unterschiedlichen Pfadprüfungen für zwei verschiedene erwartete
Werte VAL1, VAL2 an ihren entsprechenden Prüfpunkten auf einfache Weise
bei dem obigen Szenario angewendet werden können.
-
4 zeigt
ein Schaubild eines möglichen
Programmablaufs, bei dem der Pfad zusammenläuft. Das Programm kann mehrere
individuelle Pfade P1, P2 und P3 haben, die gemäß internen und/oder externen
Befehlen oder Ereignissen verwendet werden.
-
-
Bei
diesem Szenario wird entweder die Prozedur FALL1 oder die Prozedur
FALL2 begonnen. In Abhängigkeit
von dem Pfad (FALL1 oder FALL2) wird entweder die Konstante CNST1
oder die Konstante CNST2 zum Register REG4 bewegt (Befehl: mov).
Jede Prozedur FALL1 oder FALL2 wird mit einem nicht bedingten Sprung
(Befehl jmp) zur Prozedur FORTSETZEN verlassen, die den entsprechenden
Registerinhalt des Registers REG4 zur gleichen Speicherstelle MEM
bewegt (Zeiger &MEM
zeigt auf die entsprechende Speicherstelle und gibt die Adresse
an). Die folgende Änderung
kann dann gemacht werden, um die Erfindung bei dem obigen Szenario
anzuwenden:
-
In
der Prozedur FALL1 wird die zweite CPV-Stufe CPV2 oder der zweite
EDC EDC2 gesperrt und die erste CPV-Stufe CPV1 oder der erste EDC
EDC1 freigegeben. In der Prozedur FALL2 wird CPV1/EDC1 gesperrt
und CPV2/EDC2 freigegeben. Das bedeutet, dass nur eine CPV- oder
EDC-Stufe in jeder Prozedur aktiv ist. Die entsprechenden Werte
VAL1 und VAL2 gehören
zur entsprechenden CPV- oder EDC-Stufe und somit zur entsprechenden
Prozedur. Der gleiche Prüfpunkt
wird durch zwei (oder mehr) verschiedene Pfade in der Prozedur FORTSETZEN
erreicht. Durch die Verwendung mehrerer CPV-Stufen und/oder EDC-Stufen
(beispielsweise N CPV- oder EDC-Stufen) kann jedoch die gleiche
Anzahl verschiedener Pfade auf demselben Code geschützt werden, indem
nur eine der CPV-Stufen oder EDCs freigegeben wird, wenn die verschiedenen Pfade
konvergieren, während
alle anderen CPVs oder EDCs gesperrt werden. Die gesperrten CPV-
oder EDC-Stufen ignorieren ihre entsprechenden Prüfpunkte.
-
5 bezieht
sich auf einen Programmablauf mit einer Schleife. Dieses Beispiel
veranschaulicht, dass es möglich
ist, unabhängig
davon, wie oft das Programm in der Schleife bleibt, jegliche Schleife
mit zwei CPV- oder EDC-Stufen
zu bearbeiten. Die Verwendung von mindestens zwei CPV-Stufen oder
EDCs ermöglicht
eine nahtlose Übergabe,
ohne eine Unterbrechung in der Codeüberprüfung zu verursachen.
-
Es
gibt zwei Pfade P1, P2. Der Pfad P1 ist der ursprüngliche
Pfad, und der Pfad P2 bezieht sich auf die Schleife. Der Eintrittspunkt
SCHLEIFE in die Schleife wird an beiden Pfaden P1, P2 erreicht.
Dies erfolgt entweder durch einen anfänglichen Eintritt in die Schleife über SCHLEIFENANFANG
(Pfad P1) oder durch einen bedingten Sprung (jnz), solange REG4
nicht null ist (Pfad P2). REG4 wird mit einem Wert geladen ZAHLEN
und jedes Mal, wenn die Schleife ausgeführt wird, verringert. Das bedeutet,
dass die Schleife REG4-mal ausgeführt wird. Der Eintrittspfad
wird durch die Verwendung der ersten CPV-Stufe CPV1 (oder einen ersten EDC) geschützt, die
freigegeben wird, bevor die Schleife begonnen wird. Der erste Prüfpunkt B1
in der Schleife ist auf die zweite CPV-Stufe (oder einen zweiten
EDC) CPV2 abgestimmt, die den vorbestimmten Wert VAL1 verwendet.
Der Prüfpunkt
B1 wird ignoriert, da das CPV-Modul CPV2 beim ersten Eintreten in
die Schleife gesperrt ist. Nach dem ersten Prüfpunkt B1 wird die zweite CPV-Stufe
(oder der zweite EDC) CPV2 freigegeben und zurückgesetzt. Ein Prüfpunkt A
für die
erste CPV-Stufe CPV1 (oder EDC) folgt unter Verwendung des Werts
VAL2, der nun den Eintritt in die Schleife mit der korrekten Aktivierung
der zweiten CPV-Stufe CPV2 überprüft. Die
erste CPV-Stufe
CPV1 wird dann gesperrt, und der Hauptcode der Schleife wird ausgeführt.
-
-
-
Am
Ende der Schleife muss eine Entscheidung getroffen werden, ob die
Schleife erneut ausgeführt oder
aus der Schleife ausgetreten wird. Wenn die Schleife wiederholt
wird, wird die Programmausführung
am Beginn der Schleife fortgesetzt, an dem der Prüfpunkt B1
prüft,
ob die Schleife korrekt ausgeführt
wird (CPV2 oder ein EDC2 ist freigegeben). Der Prüfpunkt A
wird ignoriert, da CPV1 oder EDC1 nun gesperrt ist. Wenn die Schleife
verlassen wird, wird der Prüfpunkt
B2 erreicht, und die zweite CPV- oder EDC-Stufe CPV2/EDC2 prüft mit dem
Wert VAL3, ob die Ausführung
der letzten Runde und das Austreten aus der Schleife korrekt durchgeführt wurden.
Die Operationen zum Freigeben, Sperren oder Rücksetzen der CPV-Module oder
EDCs können
in einer einzigen Operation kombiniert werden, um einen Code-Overhead
zu verringern. Wenn ein EDC-Generator eine fehlende Übereinstimmung
an einem Prüfpunkt
detektiert, kann der Mikroprozessor/die CPU beispielsweise unter
Verwendung eines nicht maskierbaren Interrupts unterbrochen werden.
-
6 zeigt
ein vereinfachtes Blockschaltbild einer Ausführungsform der Erfindung. Es
gibt eine elektronische Vorrichtung 1 mit einem Mikroprozessor
CPU3, einem Speicher MEM4 und mindestens zwei CPV-Stufen CPV1 2 und
CPV2 21. Die Grundkonfiguration ist derjenigen der in 1 gezeigten
Ausführungsform ähnlich.
Die Leitung 14 dient dazu, einen Code für die CPV-Stufen 2 und 21 bereitzustellen.
Jede der CPV-Stufen 2 und 21 kann einen oder mehrere
EDC-Generatoren in Übereinstimmung
mit den Aspekten und Ausführungsformen
der Erfindung aufweisen. Die Leitung 13 leitet Steuer-
und Konfigurationssignale zu den CPV-Stufen 2, 21,
und die Leitung 15 wird dazu verwendet, vorbestimmte Fehlerdetektionscodes
zu den CPV-Stufen 2, 21 zu leiten. Die CPV-Stufen
stellen Ausgangssignale EXOUT1 und EXOUT2 an den Leitungen 31, 32 bereit,
die detektierte Fehlerwährend
der Programmausführung
angeben. Die CPV-Stufen 2, 21 können vorzugsweise
wie in 1 für
die CVP-Stufe 2 gezeigt
implementiert sein. Darüber
hinaus können
zwei CPV-Stufen wie anhand von 5 erläutert konfiguriert
und verwendet werden, um Schleifen in einem Programmablauf zu bearbeiten.
Alle Leitungen können
vorteilhaft Busse mit einer beliebigen geeigneten Busbreite sein.
-
Die
Erfindung wurde im Vorhergehenden zwar anhand besonderer Ausführungsformen
beschrieben, sie ist jedoch nicht auf diese Ausführungsformen beschränkt, und
der Fachmann wird zweifellos weitere Alternativen finden, die im
Umfang der Erfindung, wie sie beansprucht ist, liegen.