Présentation de MPACT-Sim

MPACT-Sim est un framework et une bibliothèque conçus pour faciliter la création de simulateurs ISA hautes performances pour un large éventail d'architectures d'ensembles d'instructions. Les simulateurs créés à l'aide de MPACT-Sim sont faciles à créer, faciles à instrumenter et rapides. Le cas d'utilisation motivant de MPACT-Sim est de créer rapidement et de modifier facilement des simulateurs pour l'exploration architecturale (ensemble d'instructions). Cependant, le simulateur obtenu peut également être utilisé pour la modélisation de systèmes, la validation du compilateur ou le développement logiciel pour les architectures qui n'ont pas de disponibilité matérielle (ou qu'elles sont limitées).

MPACT-Sim permet d'exprimer et d'implémenter facilement la sémantique d'instruction en tant que fonctions/callables C++ simples. MPACT-Sim fournit également une méthodologie déclarative permettant d'exprimer des instructions afin de permettre la génération automatique de la plupart des décodeurs d'instructions, ce qui augmente la simplicité et la vitesse de création des simulateurs. Il est facile d'ajouter des entrées de configuration personnalisées, et les simulateurs obtenus sont faciles à instrumenter à l'aide d'un ensemble de classes standards.

Tutoriels

Les tutoriels suivants fournissent une procédure guidée de création d'un simulateur ISA pour un sous-ensemble d'instructions RiscV suffisante pour exécuter une application "hello world" compilée pour le sous-ensemble architectural RV32I. Ils couvrent les activités suivantes:

  • Rédigez une description du décodeur ISA pour RV32I.

    Cela décrit les instructions individuelles indépendamment de leur représentation externe (encodage). Cette description permet de générer un code C++ qui initialise les descripteurs d'instructions internes du simulateur.

  • Écrivez une description du décodeur binaire pour RV32I.

    Ceci décrit l'encodage binaire des instructions, des champs de bits et de leurs valeurs. Cela permet de générer un décodeur pour les instructions capables de mapper un mot d'instruction à un code opérationnel et d'extraire les valeurs de champs de bits spécifiques.

  • Écrivez un décodeur d'instructions intégré (complet) qui intègre les deux décodeurs générés, en ajoutant le code requis pour couvrir ce que le code généré ne fait pas.

  • Écrivez des fonctions sémantiques d'instruction pour fournir les implémentations de chacune des instructions RV32I cibles.

L'écriture du code restant nécessaire pour mener à bien le simulateur, y compris le problème de contrôle du code des instructions, n'est pas abordé dans les tutoriels actuels, mais pourra être ajouté ultérieurement. Vous pouvez toutefois consulter l'exemple de code dans le dépôt du tutoriel ainsi que dans celui-ci pour accéder à l'intégralité de [MPACT-RiscV simulator]https://github.com/mpact-riscv.

L'infrastructure du simulateur est écrite en C++. Par conséquent, nous partons du principe que vous avez une bonne connaissance de C++.