-
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. Ein derartiges Prüfverfahren ist auch aus der
DE 103 40 411 A1 bekannt.
-
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.
-
Ein weiteres Prüfverfahren ist aus der
DE 101 31 577 A1 bekannt, bei dem allerdings in zyklischen Intervallen ein Speicherinhalt überprüft wird. Eine Überprüfung des Programmcodes erfolgt nicht.
-
Der Artikel „Accelerating algorithms in hardware” von L. Simic auf der Internetseite „Design & Reuse” (http://www.embedded.com/showArticle.jhtml?articlelD=17500157) offenbart den Gedanken bei einer zu großen Rechenbelastung funktional zusammengehörige Teile in eigenständige Hardwaremodule auszugliedern, um damit die Rechenbelastung innerhalb des Rechenkerns zu senken.
-
”Microarchitectural Support for Program Code Integrity Monitoring in Application-specific Instruction Set Processors” von Y. Fei, veröffentlicht in Des. Aut. Test Europe 2007 (DOI: 10.1109/DATE.2007.364391), offenbart eine verallgemeinerte Methodik zur Überwachung der Codeintegrität zur Laufzeit in anwendungsspezifischen Befehlssatzprozessoren (ASIPs), wobei sowohl die Befehlssatzarchitektur (ISA) als auch die zugrundeliegende Mikroarchitektur für eine bestimmte Anwendungsdomäne angepasst werden können. Es werden Monitoring-Mikrooperationen in Maschinenbefehle integriert, so dass der Prozessor automatisch mit einem Hardware-Monitor erweitert wird.
-
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.
-
Die Aufgabe wird erfindungsgemäß durch die Gegenstände der Ansprüche 1 und 10 gelöst.
-
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-OP 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.
BEISPIEL1: | mov &MEM1, REG4 |
| cmp #CNST, REG4 |
| jne ERROR |
| mov #OK, &MEM2 |
| ... |
FEHLER: | mov #ERR, &MEM2 |
-
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:
BEISPIEL1: | 'Enable CPV'/'Enable EDC' |
| mov &MEM1, Reg4 |
| cmp #cnst, Reg4 |
| jne Error |
| mov #ok, &MEM2 |
| ... |
| 'Check CPV with VAL1'/'Check EDC with VAL1' |
FEHLER: | mov #err, &MEM2 |
| ... |
| 'Check CPV with VAL2'/'Check EDC with VAL2' |
-
'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.
FALL1: | mov #CNST1, REG4 |
| jmp CONTINUE |
| ... |
FALL2: | mov #CNST2, REG4 |
| jmp CONTINUE |
| ... |
FORTSETZEN: | mov REG4, &MEM |
| ... |
-
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:
FALL1: | 'Enable CPV1'/'Enable EDC1' |
| 'Disable CPV2'/'Disable EDC2' |
| mov #CNST1, REG4 |
| jmp CONTINUE |
| ... |
FALL2: | 'Enable CPV2'/'Enable EDC2' |
| 'Disable CPV1'/'Disable EDC1' |
| mov #CNST2, REG4 |
| jmp CONTINUE |
| ... |
FORTSETZEN: | mov REG4, &MEM |
| 'Check CPV1 with VAL1'/'Check EDC1 with VAL1' |
| 'Check CPV2 with VAL2'/'Check EDC2 with VAL2' |
-
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 ZÄHLEN 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.
SCHLEIFENANFANG: | 'Enable CPV1'/'Enable EDC1' |
| 'Disable CPV2'/'Disable EDC2' |
| mov #COUNT, REG4 |
| ... |
SCHLEIFE: | 'Check CPV2/EDC2 with VAL1'; Checkpoint B1 |
| 'Enable and init CPV2'/'Enable and init EDC2' |
| 'Check CPV1/EDC1 with VAL2'; Checkpoint A |
| 'Disable CPV1'/'Disable EDC1' |
| ... |
| dec REG4 |
| jnz LOOP |
SCHLEIFENENDE: | ... |
| 'Check CPV2/EDC2 with VAL3'; Checkpoint B2 |
-
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 Fehler wä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.