Введение в MPACT-Sim

MPACT-Sim — это платформа и библиотека, предназначенные для упрощения создания высокопроизводительных симуляторов ISA для широкого спектра архитектур набора команд. Симуляторы, созданные с помощью MPACT-Sim, легко создавать, легко оснастить и быстро выполнять. Мотивирующим вариантом использования MPACT-Sim является быстрое создание и легкая модификация симуляторов для архитектурного исследования (набора инструкций). Однако полученный симулятор также можно использовать для моделирования системы, проверки компилятора или разработки программного обеспечения для архитектур, у которых нет (или ограничена) доступность оборудования.

MPACT-Sim позволяет легко выражать и реализовывать семантику инструкций в виде простых функций/вызываемых объектов C++. MPACT-Sim также предоставляет декларативную методологию выражения инструкций, позволяющую автоматически генерировать большую часть декодера инструкций, что повышает простоту и скорость создания новых симуляторов. Можно легко добавлять пользовательские записи конфигурации, а полученные симуляторы легко инструментировать с помощью набора стандартных классов.

Учебники

В последующих руководствах представлено пошаговое руководство по созданию симулятора ISA для подмножества инструкций RiscV, достаточного для выполнения приложения «hello world», скомпилированного для архитектурного подмножества RV32I. Они охватывают следующие виды деятельности:

  • Напишите описание декодера ISA для RV32I.

    Это описывает отдельные инструкции независимо от их внешнего представления (кодировки). Это описание используется для генерации кода C++, который инициализирует внутренние дескрипторы команд симулятора.

  • Напишите описание двоичного декодера для RV32I.

    Здесь описывается двоичное кодирование инструкций, битовых полей и их значений. Это используется для создания декодера инструкций, способного отображать командное слово в код операции и извлекать значения определенных битовых полей.

  • Напишите интегрированный (полный) декодер инструкций, который объединяет два сгенерированных декодера, добавляя необходимый код, чтобы покрыть то, чего нет в сгенерированном коде.

  • Напишите семантические функции инструкций, чтобы обеспечить реализацию каждой из целевых инструкций RV32I.

Написание оставшегося кода, необходимого для завершения работы симулятора, включая проблему с инструкциями по управлению кодом, не рассматривается в текущих руководствах, но может быть добавлено в будущем. Однако пример кода можно просмотреть в репозитории учебных пособий, а также в репозитории полной версии [симулятора MPACT-RiscV] https://github.com/mpact-riscv).

Инфраструктура симулятора написана на C++, поэтому предполагается хорошее знание C++.