Einführung in MPACT-SIM

MPACT-Sim ist ein Framework und eine Bibliothek, die das Erstellen von Hochleistungs-ISA-Simulatoren für eine Vielzahl von Befehlssatzarchitekturen erleichtert. Simulatoren, die mit MPACT-Sim erstellt wurden, sind einfach zu erstellen, leicht zu instrumentieren und schnell. Der motivierende Anwendungsfall für MPACT-Sim besteht darin, schnell Simulatoren für die (Anleitungs-)Architektur zu erforschen und zu ändern. Der resultierende Simulator kann jedoch auch für die Systemmodellierung, die Compiler-Validierung oder die Softwareentwicklung für Architekturen verwendet werden, die keine (oder eingeschränkte) Hardwareverfügbarkeit haben.

Mit MPACT-Sim lässt sich die Anweisungssemantik als einfache C++-Funktionen/Callables einfach ausdrücken und implementieren. MPACT-Sim bietet auch eine deklarative Methode für die Erstellung von Anweisungen für die automatische Generierung eines Großteils des Anweisungsdecoders, wodurch die Erstellung neuer Simulatoren einfacher und schneller wird. Benutzerdefinierte Konfigurationseinträge können problemlos hinzugefügt werden und die resultierenden Simulatoren lassen sich mit einer Reihe von Standardklassen leicht instrumentieren.

Tutorials

Die folgenden Anleitungen enthalten eine Schritt-für-Schritt-Anleitung zum Erstellen eines ISA-Simulators für eine Teilmenge von RiscV-Anweisungen, die zum Ausführen einer „Hello World“-Anwendung ausreichen, die für die RV32I-Architekturuntergruppe kompiliert wurde. Sie decken die folgenden Aktivitäten ab:

  • Geben Sie eine ISA-Decoderbeschreibung für RV32I ein.

    Dies beschreibt die einzelnen Anweisungen unabhängig von ihrer externen Darstellung (Codierung). Mit dieser Beschreibung wird C++-Code generiert, der die internen Anweisungsdeskriptoren des Simulators initialisiert.

  • Geben Sie eine Beschreibung des binären Decoders für RV32I ein.

    Dies beschreibt die binäre Codierung der Anweisungen, Bitfelder und ihrer Werte. Damit wird ein Decoder für die Befehle generiert, der ein Anweisungswort einem Opcode zuordnen und die Werte bestimmter Bitfelder extrahieren kann.

  • Schreiben Sie einen integrierten (vollständigen) Anweisungsdecoder, der die beiden generierten Decodierer einbindet, und fügen Sie den erforderlichen Code hinzu, um zu erfassen, was der generierte Code nicht beinhaltet.

  • Schreiben Sie semantische Anweisungen für Anweisungen, um die Implementierungen der einzelnen RV32I-Zielanweisungen bereitzustellen.

Das Schreiben des verbleibenden Codes, der zum Abschließen des Simulators erforderlich ist, einschließlich des Codeproblems, das die Anweisungen steuert, wird in den aktuellen Anleitungen nicht behandelt, kann aber in Zukunft hinzugefügt werden. Der Beispielcode kann im Repository der Anleitung sowie im Repository für den vollständigen [MPACT-RiscV Simulator]https://github.com/mpact-riscv eingesehen werden.

Die Simulator-Infrastruktur ist in C++ geschrieben, es werden also gute Kenntnisse im Umgang mit C++ vorausgesetzt.