Introducción a MPACT-Sim

MPACT-Sim es un framework y una biblioteca diseñados con el objetivo de facilitar la creación de simuladores ISA de alto rendimiento para una amplia gama de arquitecturas de conjuntos de instrucciones. Los simuladores creados con MPACT-Sim son fáciles de crear, fáciles de instrumentar y rápidos. El caso de uso motivador de MPACT-Sim es crear y modificar con rapidez simuladores para la exploración arquitectónica (conjunto de instrucciones). Sin embargo, el simulador resultante también se puede usar para el modelado del sistema, la validación del compilador o el desarrollo de software para arquitecturas que no tienen disponibilidad de hardware o está limitada.

MPACT-Sim facilita la expresión y la implementación de la semántica de instrucciones como funciones o funciones que admiten llamadas de C++ simples. MPACT-Sim también proporciona una metodología declarativa para expresar instrucciones a fin de habilitar la generación automática de la mayor parte del decodificador de instrucciones, lo que aumenta la facilidad y velocidad con las que se pueden crear simuladores nuevos. Las entradas de configuración personalizadas se pueden agregar fácilmente, y los simuladores resultantes son fáciles de instrumentar con un conjunto de clases estándar.

Instructivos

En los siguientes instructivos, se brinda una explicación paso a paso de la creación de un simulador de ISA para un subconjunto de instrucciones de RiscV suficiente a fin de ejecutar una aplicación “Hello World” compilada para el subconjunto de arquitectura RV32I. Abarcan las siguientes actividades:

  • Escribe una descripción del decodificador ISA para RV32I.

    Esto describe las instrucciones individuales, independientes de su representación externa (codificación). Esta descripción se usa para generar código de C++ que inicializa los descriptores de instrucciones internos del simulador.

  • Escribe una descripción de decodificador binario para RV32I.

    Esto describe la codificación binaria de las instrucciones, los campos de bits y sus valores. Se usa a fin de generar un decodificador para las instrucciones capaces de asignar una palabra de instrucción a un código de operación y de extraer los valores de campos de bits específicos.

  • Escribe un decodificador de instrucciones integrado (completo) que integre los dos decodificadores generados y agrega el código necesario para cubrir lo que el código generado no incluye.

  • Escribe funciones semánticas de instrucciones para proporcionar las implementaciones de cada una de las instrucciones de destino RV32I.

En los instructivos actuales, no se incluye la escritura del código restante necesario para completar el simulador, incluido el problema de instrucciones de control de código, pero se puede agregar en el futuro. Sin embargo, el código de muestra se puede ver en el repositorio del instructivo y también en el repositorio del [simulador de MPACT-RiscV]https://github.com/mpact-riscv completo.

La infraestructura del simulador está escrita en C++, por lo que se supone que tienes un buen conocimiento práctico de C++.