MPACT-Sim の概要

MPACT-Sim は、さまざまな命令セット アーキテクチャ向けの高性能な ISA シミュレータを簡単に作成できるように設計されたフレームワークとライブラリです。MPACT-Sim を使用して構築されたシミュレータは、作成しやすく、簡単に計測可能で、高速です。MPACT-Sim のモチベーションとなるユースケースは、(命令セット)アーキテクチャ探索のシミュレータを素早く作成し、簡単に変更することです。ただし、結果として得られるシミュレータは、システム モデリング、コンパイラの検証、またはハードウェアの可用性がない(または制限される)アーキテクチャのソフトウェア開発にも使用できます。

MPACT-Sim を使用すると、命令セマンティクスを単純な C++ 関数/呼び出し可能として簡単に表現して実装できます。MPACT-Sim は、命令を表現する宣言型手法も提供しており、ほとんどの命令デコーダの自動生成が可能になり、新しいシミュレータの作成が容易になり、速度も上がります。カスタム構成エントリは簡単に追加でき、作成されたシミュレータは、一連の標準クラスを使用して簡単にインストルメント化できます。

チュートリアル

以下のチュートリアルでは、RV32I アーキテクチャ サブセット用にコンパイルされた「hello world」アプリケーションを実行するのに十分な RiscV 命令のサブセットの ISA シミュレータを作成する手順を説明します。以下のアクティビティについて説明します。

  • RV32I の ISA デコーダの説明を記述します。

    これにより、個々の命令が外部表現(エンコード)とは無関係に記述されます。この説明は、シミュレータの内部命令記述子を初期化する C++ コードの生成に使用されます。

  • RV32I のバイナリ デコーダの説明を記述します。

    これは命令、ビットフィールド、およびそれらの値のバイナリ エンコードを表します。これは、命令ワードをオペコードにマッピングし、特定のビット フィールドの値を抽出することができる命令のデコーダを生成するために使用されます。

  • 生成された 2 つのデコーダを統合する、統合された(完全な)命令デコーダを作成します。生成されたコードには含まれない部分に必要なコードを追加します。

  • 命令のセマンティック関数を作成して、ターゲットの RV32I 命令それぞれの実装を提供します。

コード制御命令の問題など、シミュレータを完了するために必要な残りのコードの記述は、現在のチュートリアルでは扱いませんが、今後追加される可能性があります。サンプルコードは、チュートリアル リポジトリと、完全な [MPACT-RiscV simulator]https://github.com/mpact-riscv のリポジトリで表示できます。

シミュレータ インフラストラクチャは C++ で作成されているため、C++ の適切な実用知識があることを前提としています。