DE102020216072A1 - Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen - Google Patents

Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen Download PDF

Info

Publication number
DE102020216072A1
DE102020216072A1 DE102020216072.4A DE102020216072A DE102020216072A1 DE 102020216072 A1 DE102020216072 A1 DE 102020216072A1 DE 102020216072 A DE102020216072 A DE 102020216072A DE 102020216072 A1 DE102020216072 A1 DE 102020216072A1
Authority
DE
Germany
Prior art keywords
bit sequence
bit
program flow
information
designed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102020216072.4A
Other languages
English (en)
Inventor
Berndt Gammel
Bernd Meyer
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102020216072.4A priority Critical patent/DE102020216072A1/de
Priority to CN202111525992.6A priority patent/CN114637625A/zh
Priority to US17/551,654 priority patent/US20220188216A1/en
Publication of DE102020216072A1 publication Critical patent/DE102020216072A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/0757Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0763Error or fault detection not based on redundancy by bit configuration check, e.g. of formats or tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level

Abstract

Eine Vorrichtung zum Verarbeiten von Bitfolgen eines Programmflusses umfasst einen Datenspeicher und eine Schnittstelle, die ausgebildet ist, um eine zweite Bitfolge auszugeben, und einen Bitfolgenmanipulator, der ausgebildet ist, um die erste Bitfolge an einen vorbestimmten Bitfolgenabschnitt auf eine Information hin auszuwerten, die einen Zielzustand des Programmflusses anzeigt, und um die erste Bitfolge in dem Bitfolgenabschnitt zu manipulieren, um die zweite Bitfolge zu erhalten.

Description

  • Programmabläufe werden manchmal mittels Mikrocontrollern unter Verwendung von Befehlssätzen abgearbeitet. Solche Befehlssätze können auf einer Befehlssatzarchitektur basieren, so dass die Architektur von Befehlen gewissen Regeln unterliegen kann. Programmabläufe können auf ihre Integrität überwacht und/oder optimiert werden.
  • Es besteht daher ein Bedarf an einer ressourceneffizienten Überwachung von Zielzuständen von Programmen.
  • Gemäß einem Ausführungsbeispiel umfasst eine Vorrichtung zum Verarbeiten von Bitfolgen eines Programmflusses einen Datenspeicher, der ausgebildet ist, um eine erste Bitfolge bereitzustellen. Die Vorrichtung umfasst ferner eine Schnittstelle, die ausgebildet ist, um eine zweite Bitfolge auszugeben. Die Vorrichtung umfasst einen Bitfolgenmanipulator, der ausgebildet ist, um die erste Bitfolge an einem vorbestimmten Bitfolgenabschnitt auf eine Information hin auszuwerten, die einen Zielzustand des Programmflusses anzeigt, und um die erste Bitfolge in dem Bitfolgenabschnitt zu manipulieren, um die zweite Bitfolge zu erhalten.
  • Gemäß einem Ausführungsbeispiel umfasst ein System eine derartige Vorrichtung.
  • Gemäß einem weiteren Ausführungsbeispiel umfasst eine Vorrichtung zum Bereitstellen eines modifizierten Programmflusses eine erste Schnittstelle, die ausgebildet ist, um einen Programmfluss, der eine Vielzahl von Bitfolgen aufweist, zu empfangen. Die Vorrichtung umfasst eine zweite Schnittstelle, die ausgebildet ist, um eine zweite Vielzahl modifizierter Bitfolgen auszugeben. Die Vorrichtung umfasst einen Bitfolgenmanipulator, der ausgebildet ist, um zumindest eine der Vielzahl erster Bitfolgen an einem vorbestimmten Bitfolgenabschnitt zu manipulieren, um eine Information einzufügen, die einen Zielzustand des Programmflusses anzeigt.
  • Weitere Ausführungsbeispiele beziehen sich auf Verfahren zum Verarbeiten von Bitfolgen eines Programmflusses, zum Bereitstellen eines modifizierten Programmflusses und auf hierauf gerichtete Computerprogrammprodukte bzw. nicht flüchtige Speichermedien.
  • Weitere vorteilhafte Ausgestaltungen sind der Gegenstand abhängiger Patentansprüche.
  • Nachfolgend werden Bezug nehmend auf die beiliegenden Zeichnungen bevorzugte Ausführungsbeispiele der vorliegenden Offenbarung näher erläutert. Es zeigen hierbei:
    • 1 ein schematisches Blockdiagramm zur Darstellung eines Programmflusses gemäß einem Ausführungsbeispiel;
    • 2 ein schematisches Blockschaltbild einer Vorrichtung gemäß einem Ausführungsbeispiel;
    • 3a eine schematische tabellarische Darstellung eines RISC-V (RV) 32 Bit Basisinstruktionssets (RV32I) gemäß einem Ausführungsbeispiel;
    • 3a eine schematische tabellarische Darstellung eines RISC-V (RV) 64 Bit Basisinstruktionssets (RV64I) gemäß einem Ausführungsbeispiel;
    • 4a eine schematische tabellarische Darstellung von Instruktionen der RV32M Standarderweiterung (Multiply/Divide) gemäß einem Ausführungsbeispiel;
    • 4b eine schematische tabellarische Darstellung von Instruktionen der RV64M Standarderweiterung in Erweiterung zu RV32M gemäß einem Ausführungsbeispiel;
    • 5a eine schematische tabellarische Darstellung von Instruktionen der RV32A (Atomic) Standarderweiterung gemäß einem Ausführungsbeispiel;
    • 5b eine schematische tabellarische Darstellung von Instruktionen der RV64A Standarderweiterung als Ergänzung zur RV32A Standarderweiterung gemäß einem Ausführungsbeispiel;
    • 6a eine schematische tabellarische Darstellung von Instruktionen der RV32F (Single-Precision Floating-Point) Standarderweiterung gemäß einem Ausführungsbeispiel;
    • 6b eine schematisch tabellarische Darstellung von Instruktionen der RV64F Standarderweiterung in Erweiterung zur RV32F Standarderweiterung gemäß einem Ausführungsbeispiel;
    • 7a eine schematische tabellarische Darstellung von Instruktionen einer RV32D (Double-Precision Floating-Point) Standarderweiterung bzw. deren Instruktionen gemäß einem Ausführungsbeispiel;
    • 7b eine schematisch tabellarische Darstellung von Instruktionen einer RV64D Standarderweiterung gegenüber der RV32D Standarderweiterung gemäß einem Ausführungsbeispiel;
    • 8 ein schematisches Blockdiagramm eines Systems gemäß einem Ausführungsbeispiel;
    • 9 ein schematisches Blockschaltbild einer Vorrichtung zum Bereitstellen eines modifizierten Programmflusses gemäß einem Ausführungsbeispiel;
    • 10 eine schematisches Flussdiagramm eines Verfahrens zum Bewerten eines Zielzustands eines Programms gemäß einem Ausführungsbeispiel; und
    • 11 ein schematisches Flussdiagramm eines Verfahrens zum Erhalten modifizierter Instruktionen gemäß einem Ausführungsbeispiel.
  • Bevor nachfolgend Ausführungsbeispiele der vorliegenden Offenbarung im Detail anhand der Zeichnungen näher erläutert werden, wird darauf hingewiesen, dass identische, funktionsgleiche oder gleichwirkende Elemente, Objekte und/oder Strukturen in den unterschiedlichen Figuren mit den gleichen Bezugszeichen versehen sind, so dass die in unterschiedlichen Ausführungsbeispielen dargestellte Beschreibung dieser Elemente untereinander austauschbar ist bzw. aufeinander angewendet werden kann.
  • Nachfolgend beschriebene Ausführungsbeispiele werden im Zusammenhang mit einer Vielzahl von Details beschrieben. Ausführungsbeispiele können jedoch auch ohne diese detaillierten Merkmale implementiert werden. Des Weiteren werden Ausführungsbeispiele der Verständlichkeit wegen unter Verwendung von Blockschaltbildern als Ersatz einer Detaildarstellung beschrieben. Ferner können Details und/oder Merkmale einzelner Ausführungsbeispiele ohne Weiteres mit einander kombiniert werden, solange es nicht explizit gegenteilig beschrieben ist.
  • Hierin beschriebene Ausführungsbeispiele beziehen sich in einigen Ausgestaltungen auf die Verwendung und gezielte Veränderung von maschinenlesbaren Instruktionen, wobei als maschinenlesbar sowohl Hardware-verarbeitbare als auch Software-verarbeitbare Instruktionen verstanden werden und ebenfalls Kombinationen hieraus.
  • Manche der hierin erläuterten Ausführungsbeispiele beziehen sich dabei auf Instruktionen, die Instruktions-Set-Architektur (engl.: Instruction-Set Architecture, ISA) zugehörig sind. Einige der hierin erläuterten Ausführungsbeispiele sind dabei auf das Designprinzip des Reduced Instruction Set Computer (RISC) gerichtet, insbesondere der RISC-V ISA (ISA = Instruction Set Architecture; Befehlssatzarchitektur). Es ist jedoch festzustellen, dass die vorliegende Offenbarung nicht auf die RISC-V-Befehlssatzarchitektur limitiert ist, sondern auch auf andere Befehlssätze anwendbar ist, insbesondere solche, bei denen die Befehlssätze bzw. deren Bitfolgen Abschnitte oder Bereiche aufweisen, bei denen zumindest manche der Befehle vordefinierte Bitwerte aufweisen, beispielsweise da die Bits ungenutzt sind oder die Zugehörigkeit zu einem bestimmten Abschnitt des Befehlssatzes anzeigen.
  • 1 zeigt ein schematisches Blockdiagramm zur Darstellung eines Programmflusses 10. Der Programmfluss 10 ist eine stark vereinfachte Darstellung zur weiteren Erläuterung hierin beschriebener Ausführungsbeispiele und weist beispielhaft vier Zustände 121 bis 124 auf, zwischen denen der Programmfluss 10 wechseln kann, wobei ein zu bewertender Programmfluss im Rahmen hierin erläuterter Ausführungsbeispiele eine Vielzahl von mehreren 10, mehreren 100 oder gar mehreren 1000 Zuständen aufweisen kann. Zwischen den Zuständen können beispielsweise sequenzielle Übertritte 141 bis 144 vorgesehen sein, es können aber auch Rückführungen 16 und/oder zumindest ein Sprung 18 zu anderen Zuständen vorgesehen sein. Es können alternativ oder zusätzlich auch Abzweigungen, beispielsweise durch das Treffen von Ja/Nein-Entscheidungen, Größer/Kleiner-Vergleichen oder dergleichen erfolgen, so dass ein zu bewertender Programmfluss 10 ein hochkomplexes Gebilde sein kann.
  • Ausführungsbeispiele sind insofern darauf gerichtet, einen solchen Programmfluss 10 auszuwerten, insbesondere auf einen Zielzustand des Programmflusses beim Bewerten einer jeweiligen Instruktion. Als Zielzustand kann derjenige Zustand eines Verfahrens oder Programms verstanden werden, der bei Ausführen einer Operation oder eines Befehls erhalten wird. Als Zustand kann bspw. ein Zustand einer Vorrichtung oder Maschine verstanden werden, der aufgrund zuvor ausgeführter Instruktionen erhalten wird, etwa indem ein nicht einschränkender und lediglich beispielhafter Zustand sinngemäß lautet: „Die nächste gefetchte und ausgeführte Instruktion muss eine Sprungziel-Markierung“ haben. Die Vorrichtung kann einen derartigen Zustand bspw. dadurch erreichen, dass zuvor eine Sprunginstruktion ausgeführt wurde.
  • 2 zeigt ein schematisches Blockschaltbild einer Vorrichtung 20 gemäß einem Ausführungsbeispiel. Die Vorrichtung 20 umfasst einen Datenspeicher 22, in welchem eine Vielzahl von Bitfolgen gespeichert sein kann.
  • Die Vorrichtung 20 umfasst einen Bitfolgenmanipulator 24, der ausgebildet ist, um eine erste Bitfolge 26 in eine zweite Bitfolge 28 zu manipulieren, d. h., zu verändern. Mittels der Manipulation können Inhalte der jeweiligen Bitfolge gezielt verändert, d. h., manipuliert werden, indem beispielsweise bei einer möglicherweise unverändert langen Bitfolge an vorbestimmten Bitpositionen Bits bzw. deren Information in vordefinierter Weise verändert werden. Während die erste Bitfolge 26 vom Datenspeicher 22 erhalten werden kann, kann die zweite Bitfolge 28 an einer Schnittstelle 32 der Vorrichtung 20 ausgegeben werden. Die Schnittstelle 32 kann eingerichtet sein, um eine Datenverbindung mittels drahtgebundener, drahtloser und/oder optischer Datenverbindung zu einer Berechnungseinrichtung 34 bereitzustellen, so dass die Berechnungseinrichtung 34 die ihr bereitgestellte zweite Bitfolge 28 verarbeiten kann. Die Berechnungseinrichtung 34, die gemäß Ausführungsbeispielen Teil der Vorrichtung 20 und/oder eines Systems sein kann, umfasst beispielsweise ein Prozessor, Mikrocontroller, ein feldprogrammierbares Gatterarray (Field Programmable Gate Array, FPGA) oder eine sonstige Einrichtung, die ausgelegt ist, um Instruktionen oder Befehle einer Befehlssatzarchitektur, etwa RISC-V zu verarbeiten.
  • Der Bitfolgenmanipulator 24 kann ausgebildet sein, um die erste Bitfolge 26 an einem vorbestimmten Bitfolgenabschnitt 26a auf eine Information 36 hin auszuwerten, die einen Zielzustand eines ausgeführten Programmflusses, etwa des Programmflusses 10 anzeigt, wobei der Programmfluss 10 durch Instruktionen implementiert werden kann, die die zweite Bitfolge 28 umfassen. Der Bitfolgenmanipulator 24 kann dabei ausgebildet sein, um die erste Bitfolge 26 in dem Bitfolgenabschnitt 26a zu manipulieren und zu verändern, so dass in einem zum Bitfolgenabschnitt 26a korrespondierenden Bitfolgenabschnitt 28a eine veränderte Information hinterlegt sein kann, wie es durch die ungleichen Buchstaben a und b in den Bitfolgen 26 und 28 angedeutet ist.
  • Gemäß Ausführungsbeispielen sind die Bitfolgen 26 und 28 bezüglich einer Bitlänge gleich. Das bedeutet, mittels einer beschriebenen Manipulation 38 zum Verändern der Bitfolge 26 hin zur Bitfolge 28 kann eine Anzahl von Bits unverändert bleiben, ein Informationsinhalt des Bitfolgenabschnitts 26a jedoch verändert werden.
  • Die Bitfolgenabschnitte 26a und 28a können dabei ein oder mehrere Bits aufweisen, die einen zusammenhängenden Bereich in der Bitfolge, d. h., der Instruktion bilden können, wobei dies nicht erforderlich ist. Das bedeutet, der Bitfolgenabschnitt 26a kann auch in der Bitfolge 26 verteilt sein, was alternativ oder zusätzlich auch so umschrieben werden kann, als dass mehrere Bitfolgenabschnitte in der ersten Bitfolge 26 vorgesehen sind, die auf die Information 36 und/oder weitere Informationen ausgewertet werden können und die voneinander beabstandet in der ersten Bitfolge 26 und der zweiten Bitfolge 28 angeordnet sein können. Die manipulierten Bitfolgenabschnitte 26a und 26b können dabei an übereinstimmenden Positionen in den Bitfolgen 26 und 28 angeordnet sein.
  • Gemäß Ausführungsbeispielen ist der Bitfolgenmanipulator ausgebildet, um die zweite Bitfolge 28 so bereitzustellen und/oder zu erzeugen, dass diese eine gültige Instruktion eines vordefinierten Instruktionssets dessen Programmflusses umfasst. Anders ausgedrückt kann die zweite Bitfolge 28 eine von der Berechnungseinrichtung 34 verarbeitbare Instruktion der Befehlssatzarchitektur sein.
  • Da die erste Bitfolge 26 gegenüber der zweiten Bitfolge 28 verändert ist, kann die erste Bitfolge von einem vordefinierten Instruktionsset des Programmflusses abweichen. Dies kann beispielsweise bedeuten, dass die Bitfolge 26 von der Berechnungseinrichtung 34 fehlerhaft verarbeitet würde oder nicht verarbeitbar ist.
  • Gemäß Ausführungsbeispielen kann somit die Manipulation 38, um die Bitfolge 28 zu erhalten, erforderlich sein, um eine fehlerfreie oder zumindest fehlerkompensierbare Ausführung der Bitfolge und damit bspw. des aus dem Speicher gelesenen Befehls in der Berechnungseinrichtung 34 zu ermöglichen.
  • Die Information 36 kann jedoch Aussagen darüber liefern, die die Bewertung einer Integrität des Programmflusses ermöglichen, das bedeutet, der Bitfolgenmanipulator 24 kann ausgebildet sein, um eine Integrität des Programmflusses basierend auf der Information 36 zu überprüfen. Dies kann beispielsweise dadurch erhalten werden, dass die Bitfolge 26 im Rahmen einer Codierung, eines Kompilierens oder dergleichen auf Grundlage der eigentlichen Bitfolge, etwa die Bitfolge 28, hinterlegt wird. Wie es nachfolgend detailliert erläutert wird, kann dies unter Berücksichtigung spezieller Regeln erfolgen, so dass der Bitfolgenmanipulator 24 einerseits Informationen darüber aufweist, an welcher Stelle in der ersten Bitfolge 26 der Bitfolgenabschnitt 26a hinterlegt ist und auch, in welcher Form er die Manipulation 38 auszuführen hat. Durch diese vordefinierte Regelung kann der Bitfolgenmanipulator 24 die ursprüngliche Instruktion 28 wiederherstellen, ohne die Information der Instruktion, die durch die zweite Bitfolge 28 ausgedrückt wird, zu verändern.
  • Der Bitfolgenmanipulator 24 kann ausgebildet sein, um unter Verwendung der Information eines Programmflusses, der auf einer Vielzahl empfangener Bitfolgen basiert, zu überprüfen und/oder um die Zuverlässigkeit einer in der zweiten Bitfolge 28 enthaltenen Instruktion des Programmflusses zu überprüfen. Hierzu kann beispielsweise die Information 36 verwendet werden, die Informationen darüber aufweisen kann, welche Instruktionen der zweiten Bitfolge 28 vorangegangen sind, nachfolgen werden, ob ein angegebenes Sprungziel in der zweiten Bitfolge 28 gültig ist und/oder ob eine Übereinstimmung oder Abweichung von gültigen Instruktionen oder Programmabläufen oder Instruktionsflüssen vorliegt.
  • Gemäß Ausführungsbeispielen lassen sich beliebige Informationen in dem Bitfolgenabschnitt 26a hinterlegen, insbesondere jene, die auf jedwede Art einen Zielzustand des Programmflusses anzeigen.
  • 3a zeigt eine schematische tabellarische Darstellung eines RISC-V (RV) 32 Bit Basisinstruktionssets (RV32I). RISC-V ist eine Befehlssatzarchitektur, die ursprünglich zur Unterstützung von Forschung und Ausbildung im Bereich der Computerarchitektur entwickelt wurde, die sich aber auch zu einer freien und offenen Standardarchitektur für Implementierungen in der Industrie entwickelt. RISC-V kann eine vollständig offene ISA umfassen, die der akademischen Welt und der Industrie frei zur Verfügung steht. Alternativ oder zusätzlich umfasst RISC-V eine ISA, die für eine direkte native Hardwareimplementierung geeignet ist, nicht nur für Simulation oder binäre Übersetzung.
  • RISC-V umfasst ein kleines Basisinstruktionsset (Base Integer ISA), die sich als eine Basis für kundenspezifische Beschleuniger und optionale Standarderweiterungen zur Unterstützung der allgemeinen Softwareentwicklung eignen kann. Beispielsweise können zwei primäre Basis-Integer-Varianten, RV32I und RV64I zur Verfügung stehen, die 32-Bit- bzw. 64-Bit-Befehle bereitstellen.
  • Aufgrund ihrer sehr regelmäßigen Struktur sind RISC-V-Opcodes (operation code, Befehlskennung) einerseits leicht zu decodieren, andererseits aber auch anfällig für gezielte Fehlerangriffe, beispielsweise für eine gezielte Änderung von Befehlstypen oder Operandenregisteradressen. Ausführungsbeispiele sind darauf gerichtet, diese Eigenschaft zu verbessern, indem der Zielzustand des Programms überwacht werden kann.
  • Während bekannte Techniken zur Verbesserung der Integrität von beispielsweise Mikrocontrollern auf Hardwarekomponenten wie arithmetisch-logische Einheiten (engl.: Arithmetic Logic Unit, ALU), Zähler und endliche Zustandsautomaten, die redundant implementiert sind, Opcodes, die Codewörter eines linearen Codes bilden, Prüfsummen der ausgeführten Befehle, die berechnet und regelmäßig verifiziert werden und/oder auf das Einführen spezieller Befehle, um Ziele von Sprungbefehlen zu markieren, gerichtet sind, setzen Ausführungsbeispiele darauf, zu einem Zeitpunkt ungenutzte Informationen und somit Bits in gespeicherten Bitfolgen für andere, nützlichere Zwecke zu verwneden, was auch als ‚zweckentfremden‘ bezeichnet werden kann. Dies ermöglicht die Stärkung der Integrität auch ohne die erläuterten bekannten Maßnahmen, die mit Änderungen beim Hardwareentwurf des Mikrocontrollers einhergehen können. Auch wenn solche Maßnahmen nicht ausgeschlossen sind, können Ausführungsbeispiele auch unabhängig hiervon implementiert werden. Dies kann auch eine Anpassung von sogenannten „Toolchains“ für die Entwicklung und das Debugging (Fehlerbehebung) an den neuen Mechanismen in der Komplexität reduzieren oder gar überflüssig machen, was vorteilhaft ist.
  • Um die Codedichte von Anwendungen zu erhöhen, bietet RISC-V eine optionale Erweiterung an, die einen komprimierten Befehlssatz implementiert. Die niedrigsten Bits B0 und B1 eines Opcodes unterscheiden zwischen sogenannten „Sektoren“, die für die Implementierung des komprimierten Befehlssatzes verwendet werden. Beispielsweise können unkomprimierte Befehle der angegebenen Basis-Integer-Varianten (RV32I, RV64I) und deren verschiedene Erweiterungssätze (MAFDQ - Multiply/Divide, Atomic, Single-Precision Floating-Point, Double-Precision Floating-Point and Quadruple-Precision Floating-Point; Multiplizieren/Dividieren, atomar, einfache Genauigkeit einer Fließpunktoperation, doppelte Genauigkeit einer Fließpunktoperation und vierfache Genauigkeit einer Fließpunktoperation) können die Eigenschaft aufweisen, dass die niedrigsten Bits b0 und b1 immer auf 1 gesetzt sind.
  • Hierzu wird auf die 3a bis 7b verwiesen. Während 3a eine schematische tabellarische Darstellung des RV32I Basisinstruktionssets zeigt, zeigt 3b das RV64I Basisinstruktionsset bzw. die Erweiterung gegenüber dem RV32 Basisinstruktionsset).
  • 4a zeigt eine schematische tabellarische Darstellung der RV32M Standarderweiterung (Multiply/Divide).
  • 4b zeigt eine schematische tabellarische Darstellung der RV64M Standarderweiterung in Erweiterung zu RV32M.
  • 5a zeigt eine schematische tabellarische Darstellung der RV32A (Atomic) Standarderweiterung.
  • 5b zeigt eine schematische tabellarische Darstellung der Instruktionen der RV64A Standarderweiterung als Ergänzung zur RV32A Standarderweiterung.
  • 6a zeigt eine schematische tabellarische Darstellung von Instruktionen der RV32F (Single-Precision Floating-Point) Standarderweiterung.
  • 6b zeigt eine schematisch tabellarische Darstellung von Instruktionen der RV64F Standarderweiterung in Erweiterung zur RV32F Standarderweiterung.
  • 7a zeigt eine schematische tabellarische Darstellung einer RV32D (Double-Precision Floating-Point) Standarderweiterung bzw. deren Instruktionen.
  • 7b zeigt eine schematisch tabellarische Darstellung von Instruktionen einer RV64D Standarderweiterung gegenüber der RV32D Standarderweiterung.
  • Zu erkennen ist, dass sowohl in den Basisinstruktionen als auch in den Erweiterungen Bits b0 und b1 stets den Wert 1 aufweisen. Diese Kenntnis kann ausgenutzt werden, um während eines Encodierens oder Kompilierens Information an dieser Stelle gezielt zu verändern, und zwar durch Information, die den Zielzustand des Programmablaufs beschreibt und beispielsweise zur Integritätsüberwachung des Programmflusses genutzt werden kann. Anders ausgedrückt können diese Bits im Wesentlichen ungenutzt für die Codierung von unkomprimierten Opcodes sein und können als Ersatzbits für die Implementierung zusätzlicher Integritätsschutzmaßnahmen zur Verfügung stehen.
  • Alternativ oder zusätzlich können andere Teile von Opcodes genutzt werden, bei denen mehrere Bits für alle Befehle in dem jeweiligen Teilsatz unverändert sind. Diese Bits können ebenfalls für die Implementierung von Integritätsschutzmaßnahmen verwendet werden und/oder für andere Zwecke. Ein Beispiel für einen solchen Teilsatz können beispielsweise die Befehle für arithmetische, logische und Lade-/Speicher-Operationen sein, beispielsweise die Befehle LB, LH, LW, LBU, LHU, SB, SH, SW, ADDI, SLTI, SLTIU, XORI, ORI, ANDI, SLLI, SRLI, SRAI, ADD, SUB, SLL, SLT, SLTU, XOR, SRL, SRA, OR und/oder AND, die beispielsweise einen Teilsatz 42 des RV32I Basisinstruktionssets bilden können.
  • In dem beispielhaften Teilsatz 42 haben beispielsweise Bits b2, b3 und b6 der Bits b0... b6 der Opcodes den Wert von 0. Anders ausgedrückt, kann der Teilsatz basierend darauf gebildet oder gewählt werden, dass eine Teilmenge verfügbarer Befehle an übereinstimmenden Bitpositionen einen festen Bitwert aufweist.
  • Der Teilsatz 42 kann auch mit M Befehlen für Multiplikations- und Divisionsoperationen erweitert werden, siehe hierzu beispielsweise auch 4a bzw. die RV32M Erweiterungssatzes M. Für andere Instruktionen, beispielsweise die 64-Bit-Varianten gemäß 4b kann hiervon abweichend beispielsweise immer noch das Bit b2 und das Bit b6 den Wert von 0 aufweisen. Für kleinere Teilsätze der gegebenen Befehle, das bedeutet für eine geringere Anzahl von in einem Teilsatz enthaltenen Instruktionen, kann eine höhere Anzahl von Bits feststehend sein. Wenn Befehle als Elemente eines solchen Teilsatzes gekennzeichnet werden können, wie es im Rahmen von hierin beschriebenen Ausführungsbeispielen vorgesehen ist, stehen die Bits an den Positionen der festen Bits für die Implementierung von Integrationsschutzmaßnahmen zur Verfügung. So kann für eine solche Kennzeichnung beispielsweise ein Teil des Bitfolgenabschnitts dazu verwendet werden, anzuzeigen, dass die erste Bitfolge 26 gegenüber der Instruktion der Bitfolge 28 verändert ist und in dem Bitfolgenabschnitt 26a zusätzliche Information enthalten ist.
  • Der Bitfolgenabschnitt 26a kann in einem Abschnitt der Bitfolge 26 angeordnet sein, die zumindest innerhalb eines Abschnitts des Programmflusses über unterschiedliche Instruktionen des Programmflusses konstante Bits abweist. Alternativ oder zusätzlich kann die Vorrichtung 20 ausgebildet sein, um wiederholt, in mehreren Wiederholungen eine erste Bitfolge 26 zu erhalten und in eine entsprechende zweite Bitfolge 28 zu manipulieren. Als Manipulieren wird dabei eine Veränderung der Bitfolge durch Verändern einzelner Bitwerte verstanden. Eine Position des Bitfolgenabschnitts kann in unterschiedlichen Wiederholungen konstant sein, beispielsweise für unterschiedliche Instruktionen des Programmflusses. Hierdurch kann in besonders vorteilhafter Weise eine Hardware-implementierte Ausgestaltung des Bitfolgenmanipulators erhalten werden, was eine schnelle Umsetzung der Bitfolgenmanipulation ermöglicht. Alternativ oder zusätzlich ist es möglich, um wiederholt, in mehreren Wiederholungen eine erste Bitfolge 26 an die Vorrichtung 20 zu übermitteln bzw. an den Bitfolgenmanipulator 24 und in eine zweite Bitfolge zu manipulieren. Eine Position des Bitfolgenabschnitts 26a kann in unterschiedlichen Wiederholungen veränderlich sein, beispielsweise in den Instruktionen unterschiedlicher Teilsätze 42 Gegenstand der Bitfolgen 28 sein. Eine entsprechende Kenntnis kann zu einer Veränderung der ausgewerteten Bitfolgenabschnitte genutzt werden.
  • Gemäß einem Ausführungsbeispiel kann der Bitfolgenmanipulator 24 ausgebildet sein, um aus der Information 36 einen Steuerbefehl abzuleiten, und um den Steuerbefehl auszugeben. Der Steuerbefehl kann beispielsweise eine Instruktion an ein dem Bitfolgenmanipulator aufweisendes System und/oder an eine externe Vorrichtung sein. Der Steuerbefehl kann beispielsweise basierend darauf ausgegeben werden, ob die Auswertung durch den Bitfolgenmanipulator 24 anzeigt, dass der Zielzustand des Programmflusses in Ordnung ist oder eine Abweichung von einem vorbestimmten Zielzustand entdeckt wurde, d. h., der Zielzustand nicht in Ordnung oder fehlerhaft ist. Der Steuerbefehl kann auf eine Aktivierung oder Deaktivierung einer oder mehrerer Eigenschaften, Teilsysteme oder Funktionen der Vorrichtung oder des damit verbundenen Systems gerichtet sein. So kann beispielsweise eine Aktivierung oder Deaktivierung eines Teils einer Peripherie der Vorrichtung oder eines mit der Vorrichtung verbundenen Systems mittels des Steuerbefehls instruiert oder angezeigt werden. Alternativ oder zusätzlich kann eine Aktivierung oder Deaktivierung eines Speicherbereichs eines Datenspeichers instruiert oder angezeigt werden. Alternativ oder zusätzlich kann beispielsweise eine Aktivierung oder Deaktivierung einer Funktionalität zumindest eines Teils einer Berechnungseinrichtung angezeigt oder instruiert werden, beispielsweise eines Kerns (engl.: Core) der Berechnungseinrichtung 34. Dies kann auch als die Einleitung von Sicherungsmaßnahmen bzw. das aktive Freigeben von Funktionen basierend auf der Überwachung des Programmflusses verstanden werden.
  • Gemäß Ausführungsbeispielen ist die Vorrichtung 20 ausgebildet, um die Information 36 als mit der zweiten Bitfolge 28 assoziierte Redundanz-Information zu verwenden, das bedeutet zumindest Teile der Information 36 können als Redundanz-Information verwendet werden.
  • Gemäß einem Ausführungsbeispiel ist die Vorrichtung 20 ausgebildet, um die Information 36 als zumindest ein Paritätsbit für die erste Bitfolge 26 oder die zweite Bitfolge 28 aufweisend zu verwenden.
  • Gemäß einem Ausführungsbeispiel ist die Vorrichtung 20 ausgebildet, um die Information 36 für einen fehlererkennenden oder fehlerkorrigierenden Code für die erste Bitfolge 26 und/oder die zweite Bitfolge 28 zu verwenden.
  • Gemäß einem Ausführungsbeispiel ist die Vorrichtung 20 ausgebildet, um die Information 36 für eine Überprüfung eines Zustands einer die zweite Bitfolge 28 empfangenen Vorrichtung zu verwenden, etwa der Berechnungseinrichtung 34 und/oder eines Gesamtsystems. Das bedeutet, die zusätzlichen Bits des Bitfolgenabschnitts 26a können für eine Prozessorzustandsinformation genutzt werden, um einen möglicherweise angestrebten Zustand eines Prozessors anzuzeigen.
  • 8 zeigt ein schematisches Blockdiagramm eines Systems 80 gemäß einem Ausführungsbeispiel, das die Vorrichtung 20 aufweist. Die Vorrichtung 20 kann ausgebildet sein, um ein Signal 44 auszugeben, das eine Anweisung an eine Vorrichtung 46 des Systems 80 enthält, auf einen fehlerhaften Programmfluss zu reagieren.
  • Gemäß einem Ausführungsbeispiel ist die Vorrichtung 20 ausgebildet, um die Information 36 daraufhin auszuwerten, ob ein in der Information 36 angezeigter Zustand mit dem Zielzustand übereinstimmt, um ein dem Programmfluss zugeordnetes Überprüfungsergebnis zu erhalten. Anders ausgedrückt kann ausgewertet werden, ob der Zielzustand mit einem Soll-Zielzustand übereinstimmt. Das Überprüfungsergebnis kann anzeigen, ob eine Übereinstimmung und/oder eine Abweichung gegeben ist. Basierend auf dem Überprüfungsergebnis kann die Vorrichtung ein Signal ausgeben, das eine Anweisung an eine das Signal empfangene Vorrichtung enthält, auf einen fehlerhaften Programmfluss zu reagieren.
  • Das bedeutet, der in der Information 36 angezeigte Zustand kann mit einem Zielzustand verglichen werden und/oder es kann ein in dem Bitfolgenabschnitt 26a enthaltener Wert auf Übereinstimmung mit einem vordefinierten Wert überprüft werden, um ein entsprechendes Überprüfungsergebnis zu erhalten. Mittels des Signals 44 kann der Vorrichtung 46 angezeigt werden, dass eine Reaktion erforderlich ist.
  • Dabei kann es gleichwirkend sein, ob das Signal 44 ein aktives Signal mit einer Anforderung zur Ausführung einer aktiven Handlung ist oder das Signal 44 zum Anzeigen eines fehlerhaften Zustands nicht weiter ausgesendet wird, d. h. eine kontinuierliche oder regelmäßige Übermittlung ausgesetzt wird, so dass das Ausbleiben des Signals 44 als Fehlerzustand interpretiert wird.
  • Der Bitfolgenmanipulator 24 kann beispielsweise als überwachende Einrichtung, beispielsweise als Watchdog, gebildet sein, der ausgebildet ist, um den Programmfluss basierend auf der ausgewerteten Information 36 zu überwachen. Alternativ oder zusätzlich kann der Bitfolgenmanipulator 24 ausgebildet sein, um mit der Information 36 assoziierte Zustandsinformationen zu erhalten, etwa von dem Datenspeicher 22 und/oder von der Berechnungseinrichtung 34, die den Zustand des Programmflusses anzeigt. Der Bitfolgenmanipulator kann ausgebildet sein, um den Zielzustand des Programmflusses mit dem Zustand des Programmflusses zu vergleichen. So kann beispielsweise die Information 36 auf eine Tabelle mit weiteren Informationen für Aktionen und dergleichen verweisen. Das bedeutet, die Zustandsinformation kann eine andere Darstellung der Information 36 bereitstellen. Diese Zustandsinformation kann beispielsweise berücksichtigen, welche Befehle bereits ausgeführt wurden, und insofern eine Art Gedächtnis bereitstellen. So kann beispielsweise die Information 36 aus mehreren Bitfolgen 26 zusammengenommen eine Aktion auslösen. Das bedeutet, die Zustandsinformation kann eine kombinatorische Information sein, die auf einer Mehrzahl von ersten Bitfolgen 26 und/oder zweiten Bitfolgen 28 basiert.
  • Eine entsprechende Reaktion kann beispielsweise ein Reset oder ein Zurücksetzen des Programmflusses sein, es kann jedoch ebenfalls eine Handlung abgeleitet werden, gemäß der die Vorrichtung 46 und/oder das System 80 in einen sicheren Zustand überführt wird, beispielsweise, indem Speicherbereiche vor Lesezugriffen und/oder Schreibzugriffen geschützt werden, indem das System 80, beispielsweise als Fahrzeug implementiert, abgebremst wird oder jedwede andere Aktion.
  • Gemäß einem Ausführungsbeispiel ist der Bitfolgenmanipulator 24 ausgebildet, um die zweite Bitfolge 28 in Übereinstimmung mit einem standardbasierten Satz von Instruktionen zu erzeugen, etwa einem RISC-V-ISA, und um die Bitfolge 26 als eine Bitfolge zu erhalten, die an einer vorbestimmten Stelle, an welcher eine Vielzahl von Instruktionen zumindest eines Teilsatzes des standardbasierten Satzes von Instruktionen, etwa des Teilsatzes 42, konstante Bitwerte aufweisen, wobei der Bitfolgenabschnitt zumindest teilweise an der vorbestimmten Stelle angeordnet ist.
  • Gemäß Ausführungsbeispielen gibt der Zustand des Programmflusses und/oder der Zielzustand des Programmflusses ein Sprungziel einer Instruktion an, wie es beispielsweise für die Sprungoperation 18 in 1 beschrieben ist. Eine derartige Sprungoperation kann in der Bitfolge 28 angegeben sein. Der Bitfolgenmanipulator 24 kann beispielsweise ausgeführt sein, um die Information 36 daraufhin auszuwerten, welcher der Zustände für die nachfolgende Instruktion erwartet wird. Dies kann umfassen, dass kein Ziel erwartet wird, ein lineares Ziel erwartet wird, wie es beispielsweise mittels des Übertritts 14 erhalten werden kann, ein Sprungziel, wie es anhand des Übergangs 18 erhalten wird oder dass eine Kombination hieraus erfolgt, das heißt, ein lineares Ziel und ein Sprungziel erwartet wird. Diese vier Zustände lassen sich besonders gut und unter Verwendung zweier Bits darstellen, etwa der Bits b0 und b1 der 3a bis 7b.
  • Gemäß einem Ausführungsbeispiel ist der Bitfolgenmanipulator 24 ausgebildet, um die Information 36 auf zumindest zwei Teil-Informationen auszuwerten. Die Teilinformationen können beispielsweise eine Paritätsinformation der zweiten Bitfolge 28 umfassen, einen aktuellen oder nachfolgenden Abschnitt des Programmflusses anzeigen, einen Zustand einer Berechnungseinrichtung, etwa der Berechnungseinrichtung 34, anzeigen und einen Betriebszustand der Vorrichtung oder eines die Vorrichtung umfassenden Systems anzeigen. Der Bitfolgenmanipulator kann die Information 36 auf lediglich eine, gemäß Ausführungsbeispiel aber zwei oder mehr dieser Informationen auswerten. Das bedeutet es können mehrere Teilinformationen in den frei gewordenen Bits hinterlegt werden.
  • Der Bitfolgenmanipulator 24 kann einen Hardware-implementierten Schaltkreis umfassen, der ausgebildet ist, um Bitwerte des Bitfolgenabschnitts 26a mittels einer Verschaltung oder Verdrahtung in dem Schaltkreis zu verändern. So können beispielsweise mittels einer derartigen Verschaltung spezifische Werte zum Manipulieren der Bitfolge auf einen bestimmten Wert verdrahtet werden, beispielsweise 1 für die Bits b0 und b1.
  • Alternativ oder zusätzlich kann der Bitfolgenmanipulator 24 zumindest teilweise Softwareimplementiert sein.
  • 9 zeigt ein schematisches Blockschaltbild einer Vorrichtung 90 zum Bereitstellen eines modifizierten Programmflusses. Die Vorrichtung umfasst eine Schnittstellen 321, die ausgebildet ist, um einen Programmfluss 48 zu empfangen, der beispielsweise ganz oder teilweise in Übereinstimmung mit dem Programmfluss 10 ist, und der eine Vielzahl von Bitfolgen 28 aufweist. Das bedeutet, der Programmfluss 48 kann eine Vielzahl von Instruktionen aufweisen, die jeweils als Bitfolge 28 implementiert sind. Die Vorrichtung 90 umfasst ferner eine Schnittstellen 322, die ausgebildet ist, um eine Vielzahl 52 von Bitfolgen 26 auszugeben. Die Vorrichtung 90 umfasst einen Bitfolgenmanipulator 54, der beispielsweise invers zu dem Bitfolgenmanipulator 24 gebildet sein kann, und der ausgebildet ist, um zumindest eine aus der Vielzahl von Bitfolgen 28 an einem vorbestimmten Bitfolgenabschnitt 28a zu manipulieren, etwa mittels einer Manipulation 56, um eine Information in die Bitfolge 28 einzufügen, die einen Zielzustand des Programmflusses anzeigt. Dies erfolgt bevorzugt an einer Position der Bitfolge 28, an der der Inhalt der Bitfolge 28 auch bei einer späteren Verwendung der Bitfolge 26 vorbekannt ist, wie es beispielsweise im Zusammenhang mit der 2 beschrieben ist.
  • Zustandsinformationen über den Programmfluss 58, die beispielsweise während des Umformens oder Kompilierens des Programms erhalten werden können, können hierfür als Grundlage für die Manipulation 56 genutzt werden, so dass eine entsprechende Information später beim Rücktransformieren der manipulierten Instruktion, etwa mittels des Bitfolgenmanipulators 24 zur Bewertung des Programmzustands herangezogen werden können, etwa als Information 36.
  • In anderen Worten kann beispielsweise einem RISC-V-Prozessorkern mit getrennten Busschnittstellen für Instruktionen und Daten der Schnittstelle für Befehlsabrufe eine kleine Schaltung, der Bitfolgenmanipulator 24, hinzugefügt werden. Diese Schaltung verifiziert beispielsweise die Integrität der aus dem Speicher gelesenen Befehle, wo Redundanzinformationen in den Bits an den Positionen der festen Bits der Opcodes gespeichert sein können. Wenn diese Prüfung fehlschlägt, kann ein Sicherheitsalarm ausgelöst werden, etwa mittels des Signals 44. Andernfalls können die Bits an den festen Positionen der festen Bits auf ihren korrekten erwarteten Wert gesetzt werden und das resultierende Befehlswort kann der CPU, beispielsweise der Berechnungseinrichtung 34, zur Ausführung zugeführt werden.
  • In einer möglichen Ausgestaltung ist dabei dieser Schutzmechanismus zustandslos und implementiert einen linearen Code des während des Befehlsabrufs aus dem Datenspeicher gelesenen Datenworts. Es ist auch möglich, dass die Schaltung Zustandsinformationen aufrechterhält und die Integritätsprüfung des Datenworts beispielsweise von zuvor ausgeführten Befehlen, etwa Sprungbefehlen, abhängt, wie es anhand des Gedächtnisses erläutert ist.
  • Ein in Ausführungsbeispielen verfolgter Ansatz bietet den Vorteil, dass einem bestehenden CPU-Kern, etwa einem lizenzierten IP-Kern, Integritätsschutzmechanismen hinzugefügt werden können, ohne dass die CPU-Hardware hierfür angepasst wird. Außerdem können bestehende Toolchains für Softwareentwicklung und Debugging ohne Modifikationen verwendet werden, da die erzeugte Binärdarstellung (engl.: binary) an Positionen fester Bits mit den Informationen für die Bits vergrößert werden kann. Stehen weitere Seitenbandsignale mit Informationen über interne CPU-Zustände zur Verfügung, sind kompliziertere und/oder Schutzmechanismen möglich, auch wenn hierfür die Implementierung der CPU bzw. der Berechnungseinrichtung für die Erzeugung der Seitenbandsignale verändert werden kann.
  • In einem Ausführungsbeispiel wird eine RISC-V-CPU ohne komprimierten Befehlssatz verwendet. Dies ermöglicht es, zwei Bits b0 und b1 der Opcodes, die normalerweise auf 1 festgelegt sind, zum Speichern von Redundanzinformationen eines Codes zu verwenden, zum Beispiel eine bitweise Parität der anderen 30 Datenbits, b31... b3b2 des Opcodes. Daraus ergibt sich ein Code mit dem Mindestabstand 2, der einen einzelnen Fehler in aus dem Speicher gelesenen Datenworten erkennen kann. Bei einer Variante hiervon sind die Datenbits in zwei möglicherweise disjunkte Teilsätze aufgeteilt, so dass beispielsweise die Bits b0 und b1 Paritätsinformationen der jeweiligen Teilsätze speichern können. Dies kann die Fehlererkennungsfähigkeit des Codes verbessern. In einer weiteren Variante kann ein Restklassencode verwendet werden. So können beispielsweise die Bits b0 und b1 den Wert der verbleibenden 30-Bit-lntegerzahl (b31... b3b2) einer Operation unterziehen und das Ergebnis speichern, etwa den Datenwert dieser 30 Bits Modulo 3 oder eine andere Operation. Ausführungsformen beziehen sich somit darauf, dass der Bitfolgenabschnitt 26a mehrere Bits aufweist, die Redundanzinformationen für die gesamte restliche Instruktion aufweisen und/ oder dass ein erster Teilbitfolgenabschnitt Redundanzinformationen für einen ersten Teil oder Teilsatz der restlichen Instruktion und ein anderer, disjunkter Teilbitfolgenabschnitt einer Redundanzinformation für einen anderen Teil der Instruktion aufweist. Bei anderen Varianten kann der Bitfolgenabschnitt die gesamte restliche Instruktion betreffen, beispielsweise den Integerwert Modulo 3 oder eines anderen geeigneten Modulowerts oder einer anderen geeigneten Operation.
  • Gemäß einem Ausführungsbeispiel kann eine Variante des Codierschemas verwendet werden, um beispielsweise ein Bit, etwa das Bits b0 oder b1, als Markierung dafür zu verwenden, dass der Opcode einem Element eines ersten Teilsatzes mit einem größeren Satz fester Bits zugehörig ist. Wenn die Markierung gesetzt ist, werden alle Bits an Positionen fester Bits der Opcodes von dem Teilsatz verwendet, um Redundanzinformationen zu speichern. Die Schaltung an der Codeabrufschnittstelle, der Bitfolgenmanipulator, kann die Codeeigenschaften für Wörter verifizieren, die aus dem Speicher gelesen werden, wenn das Markierungsbit gesetzt ist. Ein derartiges Ausführungsbeispiel kann mit dem Ausführungsbeispiel kombiniert werden, dass ein Bit zusätzlich die Paritätsinformation des aus dem Speicher gelesenen Worts speichert, kombiniert werden. Die Verwendung von Teilmengen von Opcodes mit einer größeren Anzahl fester Bits bietet den Vorteil, dass bessere Codes mit höheren Mindestabständen und besseren Fehlererkennugsfähigkeiten zumindest für die Opcodes in dem Teilsatz eingesetzt werden können.
  • Gemäß einem Ausführungsbeispiel können die festen Bits der Opcodes verwendet werden, um den Kontrollfluss der Programmausführung zu schützen. Dies kann im Wesentlichen durch Speichern von Prozessorzustandsinformationen in den Bits an den Positionen fester Bits erfolgen. Ein Bit an einer festen Bitposition kann z. B. zur Markierung von Sprungzieladressen, Funktionseinträgen oder Rücksprungpunkten verwendet werden. In RISC-V werden Subroutine-Aufrufe und Rücksprünge, etwa durch sogenannte Pseudobefehle CALL und/oder RET, durch JAL- und JALR-Sprungbefehle implementiert. Die Schaltung an der Codeabrufschnittstelle, der Bitfolgenmanipulator 24, kann JAL- und JALR-Sprungbefehle (Muster 110*111) an Bitpositionen b6... b1b0, wobei * ein beliebiger Wert bedeutet, ohne weiteres erkennen und speichert diese Informationen. Wenn der zuletzt ausgeführte Befehl ein JAL- oder JALR-Sprungbefehl war, kann beispielsweise der nächste abgerufene Opcode von einer Sprungzieladresse gelesen werden und kann in dem Bit an der festen Bitposition markiert werden. Die Verifizierungsschaltung kann prüfen, ob die Markierung an der festen Bitposition des nächsten aus dem Speicher gelesenen Befehls gesetzt ist. Andernfalls, wenn kein Sprungbefehl aus dem Speicher geladen wurde, darf die Markierung des nächsten geholten Befehls nicht gesetzt sein. Alle anderen Fälle können zu einem Sicherheitsalarm führen, der beispielsweise mittels des Signals 44 angezeigt werden kann. Es kann beachtet werden, dass dieses Verfahren auch Rücksprungbefehle RET schützen kann. Die Markierung von Befehlen an Sprungzieladressen im Code kann beispielsweise Angriffe verhindern oder zumindest erschweren, die auf einer rücksprungorientierten Programmierung basieren. Bei einer Variante der vorliegenden Offenbarung kann die CPU ein Seitenbandsignal implementieren, das gesetzt wird, wenn der zuletzt ausgeführte Befehl ein JAL- oder JALR-Sprungbefehl war. Eine derartige Information kann von dem Bitfolgenmanipulator 24 beispielsweise mittels eines Signals 35 empfangen werden, das möglicherweise von der Berechnungseinrichtung 34 bereitgestellt wird.
  • Ein derartiger Schutzmechanismus kann mit dem zuvor beschriebenen linearen Code kombiniert werden. So kann z. B. Bit b0 verwendet werden, um Paritätsinformationen des Opcodes zu speichern und zu prüfen, während Bit b1 verwendet werden kann, um Sprungzieladressen von JAL- und JALR-Sprungbefehlen zu markieren und zu prüfen. Die Position der Bits kann dabei auch vertauscht werden.
  • Bei einer Variante des Ausführungsbeispiels kann ein festes Bit verwendet werden, um Opcodes an Sprungzieladressen der bedingten Sprünge BEQ, BNE, BLT, BGE, BLTU und BGEU zu markieren. Ein bedingter Sprungbefehl kann an den Bitpositionen b6 ... b1b0 beispielsweise das Muster 1100011 aufweisen. Bei einer Variante kann die CPU ein Seitenbandsignal 35 implementieren, das gesetzt werden kann, wenn der zuletzt ausgeführte Befehl ein bedingter Sprungbefehl war. Verschiedene Bits können verwendet werden, um bedingte Sprünge und JAL- und JALR-Sprungbefehle zu markieren. Alternativ können alle Sprungbefehle mit einer einzigen Bitposition markiert werden, etwa 110**11 an Bitpositionen b6...b1b0, wobei * ein beliebiger Bitwert ist.
  • Bei einer Variante kann die Unterscheidung zwischen der Ausführung von Sprüngen und der Ausführung von linearem Code durch Beobachten der Befehlsabrufadressen erfolgen. Erhöht sich die Adresse des nächsten abgerufenen Befehls beispielsweise um den Wert 4, wobei 4 Datenworte einer 32-Bit-Instruktion entsprechen können, dann kann ein lineares Codesegment ausgeführt werden. Andernfalls wird beispielsweise ein Sprungbefehl ausgeführt.
  • Bei einer Variante hierin beschriebener Ausführungsbeispiele können die Bits b1 und b0 verwendet werden, um keine Befehle, Befehle von linearen Codesegmenten, Befehle von Sprungzieladressen und Befehle, die durch lineare Codeausführung von Springbefehlen erreicht werden können, zu markieren. Hierfür können für die Bits b1 und b0 verschiedene Codierungen verwendet werden, etwa (b1, b0) = {00, 01, 10, 11}. Diese Werte können beispielsweise gemäß der Regel abgebildet werden, dass 00 = kein Ziel
    Figure DE102020216072A1_0001
    01 = lineares Ziel
    Figure DE102020216072A1_0002
    10 = Sprungziel
    Figure DE102020216072A1_0003
    11 = Linear und Sprungziel
    Figure DE102020216072A1_0004
    bedeutet. Ein Überprüfungsschaltkreis oder Watchdog kann implementiert werden, der verifiziert, dass der Kontrollfluss dieser Codierung entspricht.
  • Bei einer Ausgestaltung hierin beschriebener Ausführungsbeispiele können die festen Bits der Opcodes verwendet werden, um Prozessormodi zu codieren. Die Bits b0 und b1 können beispielsweise codieren, ob ein Opcode im Nutzermodus oder im Kernel-Modus ausgeführt werden soll oder ob dieser Teil des Codes ein Unterbrechungsservice-Programm implementiert (z. B. b0= 0 für Nutzermodus-Code, b0 = 1 für Kernel-Modus-Code; eine Überprüfung, ob das Bit b0 des abgerufenen Befehls mit dem tatsächlichen Modus übereinstimmt, kann in Hardware implementiert sein. Wenn sich Modus und Bits unterscheiden, kann beispielsweise ein Alarm ausgelöst werden). Diese Integritätsschutzmaßnahme kann unter Verwendung zusätzlicher Seitenbandsignale 35 ausgeführt werden, um den tatsächlichen Zustand der CPU-Modi zu bewerten.
  • Bei einer Ausgestaltung vorliegender Ausführungsbeispiele kann eine Färbung des Kontrollflussgraphen oder des Abrufgraphen geprüft werden. Wenn die Bits b0 und b1 beispielsweise verwendet werden, dann kann der Wert der Bits vier Farben der ausgeführten Befehle repräsentieren, die automatisch gegen einen erwarteten CPU-Zustand geprüft werden können. Das Umschalten der CPU-Zustandsinformation kann durch verschiedene Mechanismen erfolgen: Ein Funktionsaufruf (Function Call) oder -Rücksprung (JAL, JALR) kann beispielsweise zur nächsten bzw. vorherigen Farbe wechseln. Dummy-Funktionsaufrufe können eingefügt werden, um die erforderlichen Farben auszuwählen, falls weitere Übergangsschritte erforderlich sind. Bei einer Variante hierin beschriebener Ausführungsbeispiele wird ein spezieller Befehl aus einer Befehlssatzerweiterung, siehe 3a bis 7b, oder ein CSR-Befehl aus dem Basisbefehlssatz verwendet, um die erwarteten Farben in der CPU einzustellen.
  • Verschiedene Kombinationen der beschriebenen Ausführungsbeispiele und Mechanismen sind möglich. So kann beispielsweise das Bit b0 die Paritätsinformationen des Datenworts codieren und das Bit b1 kann Sprungziele oder CPU-Modi wie Kernel- und Nutzer-Modus markieren.
  • Ausführungsbeispiele können Schutzmechanismen bereitstellen, die unabhängig von der gegebenen Implementierung des RISC-V-CPU-Kerns sind. Dieselben können auf ein bestehendes System angewendet werden, um die Widerstandsfähigkeit gegen Fehlerangriffe zu erhöhen. Dies kann unter Ausführung geringer Änderungen an der Instruction-Fetch-Bus(Befehlsabrufbus)-Schnittstelle erfolgen, was mit lediglich geringen Kosten für die Hardware einhergehen kann.
  • Ausführungsbeispiele können zumindest teilweise auf der Beobachtung beruhen, dass der standardbasierte RISC-V-Befehlssatz und auch andere Befehlssätze, die Eigenschaften haben, dass für große Teilsätze von Befehlen Bits der jeweiligen Opcodes feste Werte haben. Dies kann beispielsweise an der Entwurfsanforderung liegen, dass der Befehlssatz leicht und schnell decodierbar sein soll. Beispielsweise werden die Bits b0 und b1 für alle unkomprimierten Befehle auf 1 gesetzt, wenn der RISC-V-Befehlssatz betrachtet wird. Die festen Bits tragen keine nützlichen Informationen, und ihre Werte können für die tatsächlich im Speicher gespeicherten Befehlswerte geändert werden. Die beschriebenen Ausführungsbeispiele und Mechanismen verwenden diese Bits, um verschiedene Schutzmechanismen zu implementieren, um die Integrität des Programmcodes und/oder des Kontrollflusses zu verbessern. Hierzu können einfache Transformationen des unkomprimierten Befehlssatzes genutzt werden, die die Integrität des RISC-V-Opcodes und des Programmflusses stärken. Die meisten der beschriebenen Maßnahmen können auf bestehenden RISC-V-IP-Kernen implementiert werden, ohne den Entwurf der CPUs zu ändern. Darüber hinaus sind bestehende Toolchains für Softwareentwicklung und Debugging weiterhin verwendbar.
  • 10 zeigt eine schematisches Flussdiagramm eines Verfahrens 100 gemäß einem Ausführungsbeispiel. Ein Schritt 110 umfasst ein Erhalten einer ersten Bitfolge von einem Datenspeicher. Ein Schritt 120 umfasst ein Ausgeben einer zweiten Bitfolge an einer Schnittstelle, so dass die erste Bitfolge an einem vorbestimmten Bitfolgenabschnitt auf eine Information hin mit einem Bitfolgenmanipulator ausgewertet wird, die einen Zielzustand des Programmflusses anzeigt. Die erste Bitfolge wird in dem Bitfolgenabschnitt manipuliert, um die zweite Bitfolge zu erhalten, die ausgegeben werden kann.
  • 11 zeigt ein schematisches Flussdiagramm eines Verfahrens 200 gemäß einem Ausführungsbeispiel. Ein Schritt 210 umfasst ein Empfangen eines Programmflusses, umfassend eine erste Vielzahl von Bitfolgen mit einer ersten Schnittstelle. Ein Schritt 220 umfasst ein Ausgeben einer zweiten Vielzahl modifizierter Bitfolgen mit einer zweiten Schnittstelle. Ein Schritt 230 umfasst ein Manipulieren zumindest einer der Vielzahl erster Bitfolgen an einem vorbestimmten Bitfolgenabschnitt mit einem Bitfolgenmanipulator, so dass eine Information eingefügt wird, die einen Zielzustand des Programmflusses anzeigt. Der Schritt 230 kann dabei vor dem Schritt 220 ausgeführt werden oder gleichzeitig.
  • Obwohl manche Aspekte im Zusammenhang mit einer Vorrichtung beschrieben wurden, versteht es sich, dass diese Aspekte auch eine Beschreibung des entsprechenden Verfahrens darstellen, sodass ein Block oder ein Bauelement einer Vorrichtung auch als ein entsprechender Verfahrensschritt oder als ein Merkmal eines Verfahrensschrittes zu verstehen ist. Analog dazu stellen Aspekte, die im Zusammenhang mit einem oder als ein Verfahrensschritt beschrieben wurden, auch eine Beschreibung eines entsprechenden Blocks oder Details oder Merkmals einer entsprechenden Vorrichtung dar.
  • Je nach bestimmten Implementierungsanforderungen können Ausführungsbeispiele der Offenbarung in Hardware oder in Software implementiert sein. Die Implementierung kann unter Verwendung eines digitalen Speichermediums, beispielsweise einer Floppy-Disk, einer DVD, einer Blu-ray Disc, einer CD, eines ROM, eines PROM, eines EPROM, eines EEPROM oder eines FLASH-Speichers, einer Festplatte oder eines anderen magnetischen oder optischen Speichers durchgeführt werden, auf dem elektronisch lesbare Steuersignale gespeichert sind, die mit einem programmierbaren Computersystem derart zusammenwirken können oder zusammenwirken, dass das jeweilige Verfahren durchgeführt wird. Deshalb kann das digitale Speichermedium computerlesbar sein. Manche Ausführungsbeispiele gemäß der Offenbarung umfassen also einen Datenträger, der elektronisch lesbare Steuersignale aufweist, die in der Lage sind, mit einem programmierbaren Computersystem derart zusammenzuwirken, dass eines der hierin beschriebenen Verfahren durchgeführt wird.
  • Allgemein können Ausführungsbeispiele der vorliegenden Offenbarung als Computerprogrammprodukt mit einem Programmcode implementiert sein, wobei der Programmcode dahin gehend wirksam ist, eines der Verfahren durchzuführen, wenn das Computerprogrammprodukt auf einem Computer abläuft. Der Programmcode kann beispielsweise auch auf einem maschinenlesbaren Träger gespeichert sein.
  • Andere Ausführungsbeispiele umfassen das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren, wobei das Computerprogramm auf einem maschinenlesbaren Träger gespeichert ist.
  • Mit anderen Worten ist ein Ausführungsbeispiel der beschriebenen Verfahren somit ein Computerprogramm, das einen Programmcode zum Durchführen eines der hierin beschriebenen Verfahren aufweist, wenn das Computerprogramm auf einem Computer abläuft. Ein weiteres Ausführungsbeispiel der beschriebenen Verfahren ist somit ein Datenträger (oder ein digitales Speichermedium oder ein computerlesbares Medium), auf dem das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren aufgezeichnet ist.
  • Ein weiteres Ausführungsbeispiel des beschriebenen Verfahrens ist somit ein Datenstrom oder eine Sequenz von Signalen, der bzw. die das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren darstellt bzw. darstellen. Der Datenstrom oder die Sequenz von Signalen kann bzw. können beispielsweise dahin gehend konfiguriert sein, über eine Datenkommunikationsverbindung, beispielsweise über das Internet, transferiert zu werden.
  • Ein weiteres Ausführungsbeispiel umfasst eine Verarbeitungseinrichtung, beispielsweise einen Computer oder ein programmierbares Logikbauelement, die dahin gehend konfiguriert oder angepasst ist, eines der hierin beschriebenen Verfahren durchzuführen.
  • Ein weiteres Ausführungsbeispiel umfasst einen Computer, auf dem das Computerprogramm zum Durchführen eines der hierin beschriebenen Verfahren installiert ist.
  • Bei manchen Ausführungsbeispielen kann ein programmierbares Logikbauelement (beispielsweise ein feldprogrammierbares Gatterarray, ein FPGA) dazu verwendet werden, manche oder alle Funktionalitäten der hierin beschriebenen Verfahren durchzuführen. Bei manchen Ausführungsbeispielen kann ein feldprogrammierbares Gatterarray mit einem Mikroprozessor zusammenwirken, um eines der hierin beschriebenen Verfahren durchzuführen. Allgemein werden die Verfahren bei einigen Ausführungsbeispielen seitens einer beliebigen Hardwarevorrichtung durchgeführt. Diese kann eine universell einsetzbare Hardware wie ein Computerprozessor (CPU) sein oder für das Verfahren spezifische Hardware, wie beispielsweise ein ASIC.
  • Die oben beschriebenen Ausführungsbeispiele stellen lediglich eine Veranschaulichung der Prinzipien der vorliegenden Offenbarung dar. Es versteht sich, dass Modifikationen und Variationen der hierin beschriebenen Anordnungen und Einzelheiten anderen Fachleuten einleuchten werden. Deshalb ist beabsichtigt, dass die Ausführungsbeispiele lediglich durch den Schutzumfang der nachstehenden Patentansprüche und nicht durch die spezifischen Einzelheiten, die anhand der Beschreibung und der Erläuterung der Ausführungsbeispiele hierin präsentiert wurden, beschränkt sei.

Claims (33)

  1. Vorrichtung zum Verarbeiten von Bitfolgen eines Programmflusses, umfassend: einen Datenspeicher (22), der ausgebildet ist, um eine erste Bitfolge bereitzustellen; eine Schnittstelle, die ausgebildet ist, um eine zweite Bitfolge (28) auszugeben; einen Bitfolgenmanipulator (24), der ausgebildet ist, um die erste Bitfolge (26) an einem vorbestimmten Bitfolgenabschnitt (26a) auf eine Information (36) hin auszuwerten, die einen Zielzustand des Programmflusses (10) anzeigt; und um die erste Bitfolge (26) in dem Bitfolgenabschnitt (26a) zu manipulieren, um die zweite Bitfolge (28) zu erhalten.
  2. Vorrichtung gemäß Anspruch 1, bei der die erste Bitfolge (26) von einem vordefinierten Instruktionsset des Programmflusses (10) abweicht.
  3. Vorrichtung gemäß Anspruch 1 oder 2, bei der die zweite Bitfolge (28) eine gültige Instruktion eines vordefinierten Instruktionssets des Programmflusses (10) umfasst.
  4. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um eine Integrität des Programmflusses (10) basierend auf der Information (36) zu überprüfen.
  5. Vorrichtung gemäß Anspruch 4, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um unter Verwendung der Information (36) einen Programmfluss (10), der auf einer Vielzahl empfangener Bitfolgen basiert, zu überprüfen und/oder bei der der Bitfolgenmanipulator (24) ausgebildet ist, um die Zulässigkeit einer in der zweiten Bitfolge enthaltenen Instruktion des Programmflusses (10) zu überprüfen.
  6. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um aus der Information (36) einen Steuerbefehl abzuleiten; und um den Steuerbefehl auszugeben.
  7. Vorrichtung gemäß Anspruch 6, bei der der Steuerbefehl auf zumindest eines aus: - einer Aktivierung oder Deaktivierung eines Teils einer Peripherie der Vorrichtung oder eines mit der Vorrichtung verbundenen Systems; - eine Aktivierung oder Deaktivierung eines Speicherbereichs eines Datenspeichers; - eine Aktivierung oder Deaktivierung einer Funktionalität zumindest eines Teils einer Berechnungseinrichtung; bezogen ist.
  8. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um die Information (36) als mit der zweiten Bitfolge assoziierte Redundanz-Information zu verwenden.
  9. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um die Information (36) als zumindest ein Paritätsbit für die erste Bitfolge (26) oder die zweite Bitfolge (28) aufweisend zu verwenden.
  10. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um die Information (36) für einen fehlererkennenden oder fehlerkorrigierenden Code für die erste Bitfolge (26) und/oder die zweite Bitfolge (28) zu verwenden.
  11. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um die Information (36) für eine Überprüfung eines Zustands einer die zweite Bitfolge (28) empfangenden Einrichtung zu verwenden.
  12. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, die Information (36) daraufhin auszuwerten, ob ein in der Information (36) angezeigter Zustand mit dem Zielzustand übereinstimmt, um ein dem Programmfluss (10) zugeordnetes Überprüfungsergebnis zu erhalten, und um basierend auf dem Überprüfungsergebnis ein Signal auszugeben, das eine Anweisung an eine das Signal empfangende Vorrichtung enthält, auf einen fehlerhaften Programmfluss zu reagieren..
  13. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, einen in dem Bitfolgenabschnitt (26a) enthaltenen Wert auf Übereinstimmung mit einem vordefinierten Wert zu überprüfen, um ein Überprüfungsergebnis zu erhalten, und um basierend auf dem Überprüfungsergebnis ein Signal auszugeben, das eine Anweisung an eine das Signal empfangende Vorrichtung enthält, auf einen fehlerhaften Programmfluss zu reagieren.
  14. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenabschnitt (26a) in einem Abschnitt der ersten Bitfolge angeordnet ist, die zumindest innerhalb eines Abschnitts des Programmflusses (10) über unterschiedliche Instruktionen des Programmflusses (10) konstante Bits aufweist.
  15. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um wiederholt in mehreren Wiederholungen eine erste Bitfolge (26) zu erhalten und in eine zweite Bitfolge (28) zu verändern; wobei eine Position des Bitfolgenabschnitts (26a) in unterschiedlichen Wiederholungen konstant ist.
  16. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um wiederholt in mehreren Wiederholungen eine erste Bitfolge (26) zu erhalten und in eine zweite Bitfolge (28) zu verändern; wobei eine Position des Bitfolgenabschnitts (26a) in unterschiedlichen Wiederholungen veränderlich ist.
  17. Vorrichtung gemäß einem der vorangehenden Ansprüche, die ausgebildet ist, um die zweite Bitfolge (28) einer Berechnungseinrichtung bereitzustellen.
  18. Vorrichtung gemäß Anspruch 17, die die Berechnungseinrichtung aufweist, die mit der Schnittstelle gekoppelt ist.
  19. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um die zweite Bitfolge (28) in Übereinstimmung mit einem standardbasierten Satz von Instruktionen zu erzeugen, und um die erste Bitfolge (26) als eine Bitfolge zu erhalten, die an einer vorbestimmten Stelle, an welcher eine Vielzahl von Instruktionen zumindest eines Teils des standardbasierten Satzes von Instruktionen konstante Bitwerte aufweisen, wobei der Bitfolgenabschnitt (26a) zumindest teilweise in der vorbestimmten Stelle angeordnet ist.
  20. Vorrichtung gemäß Anspruch 19, bei der der standardbasierte Satz von Instruktionen ein RISC-V-Instruktionssatz ist.
  21. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) als Watchdog gebildet ist, der ausgebildet ist, um den Programmfluss (10) basierend auf der ausgewerteten Information (36) zu überwachen.
  22. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um mit der Information (36) assoziierte Zustandsinformation zu erhalten, die den Zustand des Programmflusses (10) anzeigt, und um den Zielzustand des Programmflusses (10) mit dem Zustand des Programmflusses (10) zu vergleichen.
  23. Vorrichtung gemäß Anspruch 22, bei der die Zustandsinformation eine kombinatorische Information ist, die auf einer Mehrzahl von ersten oder zweiten Bitfolgen basiert.
  24. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Zustand des Programmflusses (10) und/oder der Zielzustand des Programmflusses (10) ein Sprungziel einer Instruktion angibt, die in der zweiten Bitfolge angegeben ist.
  25. Vorrichtung gemäß Anspruch 24, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um die Information (36) darauf auszuwerten, welcher der Zustände für die nachfolgende Instruktion aus - kein Ziel; - lineares Ziel; - Sprungziel; und - lineares Ziel und Sprungziel erwartet wird.
  26. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) ausgebildet ist, um die Information (36) auf zumindest zwei Teil-Informationen umfassend: - eine Paritätsinformation der zweiten Bitfolge; - einen aktuellen oder nachfolgenden Abschnitt des Programmflusses (10); - einem Zustand einer Berechnungseinrichtung; und - einem Betriebszustand der Vorrichtung oder eines die Vorrichtung umfassenden Systems auszuwerten.
  27. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) einen hardware-implementierten Schaltkreis umfasst, der ausgebildet ist, um Bitwerte des Bitfolgenabschnitts (26a) mittels einer Verschaltung in dem Schaltkreis zu verändern.
  28. Vorrichtung gemäß einem der vorangehenden Ansprüche, bei der der Bitfolgenmanipulator (24) zumindest teilwiese softwareimplementiert ist.
  29. System umfassend eine Vorrichtung gemäß einem der vorangehenden Ansprüche.
  30. Vorrichtung zum Bereitstellen eines modifizierten Programmflusses, umfassend: eine erste Schnittstelle, die ausgebildet ist, um einen Programmfluss, umfassend eine erste Vielzahl Bitfolgen zu empfangen; einer zweite Schnittstelle, die ausgebildet ist, um eine zweite Vielzahl modifizierter Bitfolgen auszugeben; einen Bitfolgenmanipulator (54), der ausgebildet ist, um zumindest eine der Vielzahl erster Bitfolgen an einem vorbestimmten Bitfolgenabschnitt (28a) zu manipulieren, um eine Information (36) einzufügen, die einen Zielzustand des Programmflusses, anzeigt.
  31. Verfahren zum Verarbeiten von Bitfolgen eines Programmflusses, umfassend: Erhalten (110) einer ersten Bitfolge von einem Datenspeicher; Ausgeben (120) einer zweiten Bitfolge an einer Schnittstelle; so dass die erste Bitfolge an einem vorbestimmten Bitfolgenabschnitt auf eine Information hin mit einem Bitfolgenmanipulator ausgewertet wird, die einen Zielzustand des Programmflusses anzeigt; und die erste Bitfolge in dem Bitfolgenabschnitt manipuliert wird, um die zweite Bitfolge zu erhalten.
  32. Verfahren zum Bereitstellen eines modifizierten Programmflusses, umfassend: Empfangen (210) einer eines Programmflusses, umfassend eine erste Vielzahl Bitfolgen mit einer ersten Schnittstelle; Ausgeben (220) einer zweiten Vielzahl modifizierter Bitfolgen mit einer zweiten Schnittstelle; Manipulieren (230) zumindest einer der Vielzahl erster Bitfolgen an einem vorbestimmten Bitfolgenabschnitt mit einem Bitfolgenmanipulator, so dass eine Information eingefügt wird, die einen Zielzustand des Programmflusses anzeigt.
  33. Computerprogramm mit einem Programmcode zur Durchführung des Verfahrens nach Anspruch 31 oder 32, wenn das Programm auf einem Computer läuft.
DE102020216072.4A 2020-12-16 2020-12-16 Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen Pending DE102020216072A1 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102020216072.4A DE102020216072A1 (de) 2020-12-16 2020-12-16 Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen
CN202111525992.6A CN114637625A (zh) 2020-12-16 2021-12-14 用于处理位序列的设备和方法
US17/551,654 US20220188216A1 (en) 2020-12-16 2021-12-15 Device and methods for processing bit strings

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102020216072.4A DE102020216072A1 (de) 2020-12-16 2020-12-16 Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen

Publications (1)

Publication Number Publication Date
DE102020216072A1 true DE102020216072A1 (de) 2022-06-23

Family

ID=81846952

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020216072.4A Pending DE102020216072A1 (de) 2020-12-16 2020-12-16 Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen

Country Status (3)

Country Link
US (1) US20220188216A1 (de)
CN (1) CN114637625A (de)
DE (1) DE102020216072A1 (de)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69714507T2 (de) 1996-05-10 2003-04-24 Sun Microsystems Inc Einrichtung und Verfahren zur On-line-Überwachung von Speichern

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4599722A (en) * 1984-04-03 1986-07-08 Canadian Patents And Development Limited-Societe Canadienne Des Brevets Et D'exploitation Limitee Apparatus for encoding and decoding digital data to permit error correction
KR100262438B1 (ko) * 1991-05-08 2000-08-01 가나이 쓰도무 연산장치 및 이것을 사용한 비트필드조작 연산방법
JP4147607B2 (ja) * 1998-03-13 2008-09-10 松下電器産業株式会社 補助スクランブル/デスクランブル方法および装置
US6195774B1 (en) * 1998-08-13 2001-02-27 Xilinx, Inc. Boundary-scan method using object-oriented programming language
JP3464649B2 (ja) * 2000-12-27 2003-11-10 松下電器産業株式会社 送信装置、受信装置および通信方法
KR100896390B1 (ko) * 2001-08-01 2009-05-08 파나소닉 주식회사 암호화 데이터 배송 시스템
JP2003091391A (ja) * 2001-09-17 2003-03-28 Canon Inc 周辺装置制御方法、該方法を実行するためのプログラム、前記方法を実行するコンピュータ、周辺装置およびコンピュータシステム
US7123560B2 (en) * 2002-08-12 2006-10-17 Victor Company Of Japan, Ltd. Apparatus for enabling PLL to lock on to a correct frequency and phase during the reproduction of a continuous-wave-corresponding signal and repetition of a specific pattern
US7058787B2 (en) * 2003-05-05 2006-06-06 Stmicroelectronics S.R.L. Method and circuit for generating memory addresses for a memory buffer
KR101362852B1 (ko) * 2007-04-20 2014-02-21 닛폰호소쿄카이 스크램블 키 관리장치, 스크램블 키 관리정보송신장치, 스크램블 키 출력관리방법, 스크램블 키 관리프로그램, 라이센스 정보관리장치, 라이센스 관리정보송신장치, 라이센스 정보출력관리방법 및 라이센스 정보관리프로그램
CN101782868A (zh) * 2009-01-21 2010-07-21 国际商业机器公司 一种用于对本地方法调用进行性能测试的方法和装置
CA2664620A1 (en) * 2009-05-07 2009-07-20 Avalon Microelectronics, Inc. Pseudo-random bit sequence generator
KR101300272B1 (ko) * 2011-08-10 2013-08-23 엘지전자 주식회사 가전 기기 및 그 동작 방법
US20150378674A1 (en) * 2012-09-15 2015-12-31 John W. Ogilvie Converting numeric-character strings to binary numbers
CN103152221A (zh) * 2013-02-27 2013-06-12 鸿富锦精密工业(深圳)有限公司 多设备自检方法及设备状态监控系统、设备群组
US9552269B2 (en) * 2014-12-23 2017-01-24 Intel Corporation Test logic for a serial interconnect
US10467387B2 (en) * 2016-06-23 2019-11-05 Oath Inc. Computerized system and method for modifying a media file by automatically applying security features to select portions of media file content
US10652281B1 (en) * 2017-08-31 2020-05-12 Vmware, Inc. Network policy implementation in a tag-based policy architecture
US10691575B2 (en) * 2017-10-19 2020-06-23 Dynatrace Llc Method and system for self-optimizing path-based object allocation tracking
US20190391807A1 (en) * 2018-06-20 2019-12-26 Fujitsu Limited Computer-readable recording medium storing optimization problem computing program and optimization problem computing system
US11137982B2 (en) * 2019-02-27 2021-10-05 Micron Technology, Inc. Acceleration circuitry

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69714507T2 (de) 1996-05-10 2003-04-24 Sun Microsystems Inc Einrichtung und Verfahren zur On-line-Überwachung von Speichern

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SCHUETTE u.a.: Processor Control Flow Monitoring Using Signatured Instruction Streams. In IEEE Transactions on Computers, Vol. C-36, Nu. 3, März 1987, S. 264 – 276

Also Published As

Publication number Publication date
US20220188216A1 (en) 2022-06-16
CN114637625A (zh) 2022-06-17

Similar Documents

Publication Publication Date Title
DE102010037457B4 (de) Verfahren zur Datenverarbeitung zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zum Erzeugen von Programm-Code, Datenverarbeitungsanordnungen zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Datenverarbeitungsanordnungen zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE3125048C2 (de)
DE60117066T2 (de) Verfahren und Vorrichtung zum Überprüfen von fehlerkorrigierenden Codes
DE19782077B4 (de) Verfahren und Vorrichtung zum Korrigieren eines Mehrpegelzellenspeichers durch Verwendung fehlerlokalisierender Codes
DE2430464A1 (de) Einrichtung zur fehlergesicherten datenuebertragung
DE102007038763A1 (de) Verfahren und Vorrichtung zur Sicherung eines Programms gegen eine Kontrollflussmanipulation und gegen einen fehlerhaften Programmablauf
DE2942998A1 (de) Fehler-korrektur- und -erkennungs- anordnung
DE102014117971B4 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE102006005817B4 (de) Fehlererkennungsvorrichtung für einen Adressdecoder und Vorrichtung zur Fehlererkennung für einen Adressdecoder
DE102015210651B4 (de) Schaltung und Verfahren zum Testen einer Fehlerkorrektur-Fähigkeit
DE102006062703A1 (de) Fehlererkennungsvorrichtung und Verfahren zur Fehlererkennung für einen Befehlsdecoder
EP1190319B1 (de) Sicherung eines rechnerkerns gegen äussere manipulationen
DE102020216072A1 (de) Vorrichtung und Verfahren zum Bearbeiten von Bitfolgen
DE102014115411A1 (de) Datenverarbeitungsanordnung und -verfahren zur sicherstellung der integrität der ausführung eines computerprogramms
DE102010041680B9 (de) Vorrichtung und Verfahren zum Bestimmen einer Position eines 1-Bit-Fehlers in einer codierten Bitsequenz, Vorrichtung und Verfahren zur Korrektur eines 1-Bit-Fehlers in einer codierten Bitsequenz und Decodierer und Verfahren zum Decodieren einer fehlerhaften, codierten Bitsequenz
DE102007040721B4 (de) Datenverarbeitungsanordnung, Verfahren zur Datenverarbeitung, Computerprogrammelement und Überprüfungsanordnung für einen Speicher
DE102014114157B4 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
WO2006089943A1 (de) Verfahren zur datensicherung und gerät zu dessen ausführung
DE102005016051B4 (de) Speicherüberprüfungsvorrichtung und Verfahren zum Überprüfen eines Speichers
DE102016116221A1 (de) Verfahren und Einrichtung zur Überwachung der Ausführung eines Programmcodes
DE102009055390B4 (de) Vorrichtung und Verfahren zum Schreiben von Daten, die zu speichern sind, in einen vorbestimmten Speicherbereich
EP1031081B1 (de) Programmgesteuerte einheit und verfahren
DE102004001651A1 (de) Verfahren und Prozessor zur automatischen Befehls-Betriebsartumschaltung unter Verwendung einer Paritätsüberprüfung
DE102010006876B4 (de) Verfahren und Vorrichtung zur Kodierung von Daten
DE102006005818B4 (de) Fehlererkennungsvorrichtung und Verfahren zur Fehlererkennung für einen Befehlsdecoder

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication