Wprowadzenie do MPACT-Sim

MPACT-Sim to platforma i biblioteka zaprojektowana w celu ułatwienia tworzenia wysokiej wydajności symulatorów ISA dla szerokiej gamy architektur zestawów instrukcji. Symulatory MPACT-Sim są łatwe do utworzenia, proste w obsłudze i szybkie. Motywującym przypadkiem użycia MPACT-Sim jest szybkie tworzenie i łatwe modyfikowanie symulatorów eksploracji architektury (zestawu instrukcji). Uzyskany w ten sposób symulator może jednak być również używany do modelowania systemu, weryfikacji kompilatorów lub tworzenia oprogramowania w przypadku architektur, które nie mają dostępu do sprzętu (lub są ograniczone).

MPACT-Sim ułatwia wyrażanie i wdrażanie semantyki instrukcji za pomocą prostych funkcji i wywołań w C++. MPACT-Sim udostępnia również deklaratywną metodologię tworzenia instrukcji włączania automatycznego generowania większości dekodera instrukcji, co zwiększa łatwość i szybkość tworzenia nowych symulatorów. Niestandardowe wpisy konfiguracji można łatwo dodawać, a wyniki symulatorów można łatwo przygotować za pomocą zestawu standardowych klas.

Samouczki

Samouczki poniżej zawierają przewodnik na temat tworzenia symulatora ISA dla podzbioru instrukcji RiscV wystarczających do wykonania aplikacji „helloworld” skompilowanej dla podzbioru architektonicznego RV32I. Obejmują one:

  • Napisz opis dekodera ISA dla RV32I.

    Są to poszczególne instrukcje niezależnie od ich reprezentacji zewnętrznej (kodowania). Ten opis służy do generowania kodu C++, który inicjuje wewnętrzne deskryptory instrukcji symulatora.

  • Napisz opis dekodera binarnego dla RV32I.

    Opisuje to binarne kodowanie instrukcji, pól bitowych i ich wartości. Służy do generowania dekodera instrukcji zdolnych do mapowania słowa instrukcji na kod operacji i wyodrębniania wartości określonych pól bitowych.

  • Napisz zintegrowany (pełny) dekoder instrukcji, który integruje 2 wygenerowane dekodery, dodając wymagany kod, który pokrywa to, czego nie robi wygenerowany kod.

  • Napisz instrukcje semantyczne funkcji semantycznych, aby zapewnić implementacje wszystkich docelowych instrukcji RV32I.

Opracowanie pozostałego kodu wymaganego do ukończenia symulatora, w tym problemu z instrukcjami kontrolującymi kod, nie jest uwzględnione w obecnych samouczkach, ale może zostać dodane w przyszłości. Przykładowy kod możesz wyświetlić w repozytorium samouczka, a także w repozytorium pełnego [MPACT-RiscV Simulator]https://github.com/mpact-riscv).

Infrastruktura symulatora jest napisana w C++, więc zakładamy, że masz dobrą praktyczną znajomość języka C++.