MPACT-Sim è un framework e una libreria progettati per semplificare la creazione di simulatori ISA ad alte prestazioni per una vasta gamma di architetture di set di istruzioni. I simulatori realizzati con MPACT-Sim sono facili da creare, facili da strumentare e veloci. Il caso d'uso motivante di MPACT-Sim consiste nel creare e modificare rapidamente simulatori per l'esplorazione dell'architettura (set di istruzioni). Tuttavia, il simulatore risultante può essere utilizzato anche per la modellazione dei sistemi, la convalida del compilatore o lo sviluppo di software per architetture che non hanno (o sono limitate) disponibilità hardware.
MPACT-Sim semplifica l'espressione e l'implementazione della semantica dell'istruzione come semplici funzioni/chiamabili in C++. MPACT-Sim fornisce anche una metodologia dichiarativa per esprimere istruzioni al fine di consentire la generazione automatica della maggior parte del decoder di istruzione, aumentando la facilità e la velocità con cui è possibile creare nuovi simulatori. È possibile aggiungere facilmente voci di configurazione personalizzate ed è possibile eseguire facilmente i simulatori risultanti utilizzando un set di classi standard.
Tutorial
I tutorial che seguono forniscono una procedura dettagliata guidata per la creazione di un simulatore ISA per un sottoinsieme di istruzioni RiscV, sufficiente per eseguire un'applicazione "hello world" compilata per il sottoinsieme dell'architettura RV32I. Riguardano le seguenti attività:
Scrivi una descrizione del decoder ISA per RV32I.
Questo descrive le singole istruzioni indipendenti dalla loro rappresentazione esterna (codifica). Questa descrizione viene utilizzata per generare il codice C++ che inizializza i descrittori interni delle istruzioni del simulatore.
Scrivi una descrizione del decoder binario per RV32I.
Descrive la codifica binaria delle istruzioni, dei campi di bit e dei relativi valori. Questo viene utilizzato per generare un decoder per le istruzioni in grado di mappare una parola di istruzione a un codice operativo ed estrarre i valori di specifici campi di bit.
Scrivi un decodificatore di istruzioni integrato (completo) che integri i due decodificatori generati, aggiungendo il codice necessario per coprire ciò che non avviene nel codice generato.
Scrivere funzioni semantiche dell'istruzione per fornire le implementazioni di ognuna delle istruzioni di destinazione RV32I.
La scrittura del codice rimanente necessario per completare il simulatore, incluso il problema delle istruzioni di controllo del codice, non è trattata dai tutorial attuali, ma può essere aggiunta in futuro. Tuttavia, il codice campione può essere visualizzato nel repository del tutorial e nel repository per la versione completa [MPACT-RiscV simulatore]https://github.com/mpact-riscv).
L'infrastruttura del simulatore è scritta in C++, perciò è necessaria una buona conoscenza di C++.