Introdução ao MPACT-Sim

O MPACT-Sim é um framework e uma biblioteca projetadas para facilitar a criação de simuladores ISA de alto desempenho para uma ampla variedade de arquiteturas de conjuntos de instruções. Os simuladores criados com o MPACT-Sim são rápidos, fáceis de criar e de instrumentar. O caso de uso motivacional do MPACT-Sim é criar e modificar rapidamente e com facilidade simuladores para análise arquitetônica (conjunto de instruções). No entanto, o simulador resultante também pode ser usado para modelagem de sistema, validação de compilador ou desenvolvimento de software para arquiteturas que não têm disponibilidade de hardware (ou são limitadas).

A MPACT-Sim facilita a expressão e a implementação da semântica de instruções como funções/chamáveis C++ simples. A MPACT-Sim também oferece uma metodologia declarativa para expressar instruções que permitem a geração automática da maior parte do decodificador de instruções, aumentando a facilidade e a velocidade com que novos simuladores podem ser criados. Entradas de configuração personalizadas podem ser facilmente adicionadas e os simuladores resultantes são fáceis de instrumentar usando um conjunto de classes padrão.

Tutoriais

Os tutoriais a seguir fornecem um tutorial guiado sobre a criação de um simulador de ISA para um subconjunto de instruções RiscV suficientes para executar um aplicativo "hello world" compilado para o subconjunto de arquitetura RV32I. Eles abrangem as seguintes atividades:

  • Escreva uma descrição do decodificador ISA para o RV32I.

    Isso descreve as instruções individuais independentes de sua representação externa (codificação). Ela é usada para gerar o código C++ que inicializa os descritores de instrução internos do simulador.

  • Escreva uma descrição do decodificador binário para RV32I.

    Isso descreve a codificação binária das instruções, os campos de bits e os respectivos valores. Ela é usada para gerar um decodificador para as instruções capazes de mapear uma palavra de instrução para um código de operação e extrair os valores de campos de bits específicos.

  • Escreva um decodificador de instruções integrado (completo) que integre os dois decodificadores gerados, adicionando o código necessário para abranger o que o código gerado não faz.

  • Crie funções semânticas de instrução para fornecer as implementações de cada uma das instruções RV32I de destino.

Os tutoriais atuais não abordam a escrita do código restante necessário para concluir o simulador, incluindo o problema de instrução de controle do código, mas pode ser adicionado no futuro. No entanto, o exemplo de código pode ser visualizado no repositório do tutorial e no repositório para o [simulador do MPACT-RiscV]https://github.com/mpact-riscv completo.

Como a infraestrutura do simulador é escrita em C++, é necessário ter um bom conhecimento de trabalho.