RISC-V エミュレータ Spike と拡張命令の実装方針

RISC-V量子拡張は, 「RiscV.RV32IU」として @k_yamaz 蛙 が提案しています.
(詳しくは, 技術ブログ Qiita に投稿した RISC-Vの量子計算拡張 をご参照ください. )
思いつきなどをメモしていきます.

前回 RISC-V エミュレータ Spikeの最後に, Spike を Proxy Kernel を介してベアメタルプログラムで動作させるかを試しましたが, うまく行きませんでした. もう少し詳しく調査して最終的には riscv32 のコンパイラで作成したベアメタルプログラムを動作させてみたいですが, ここでは, RISCV 量子拡張版の エミュレータを動かすことを先に進めたいです.

まずは, riscv-gnu-toolchain は既に riscv64 版を準備しましたので, riscv-tools の下にある riscv-isa-sim, riscv-pk の riscv64 版をビルドします.
ビルドは, export RISCV=/opt/riscv 等で環境変数 RISCV を指定して, cmake / make / make install をします.
次に, riscv64 版のベアメタルプログラムを動作させましょう.

1
2
3
4
#include <stdio.h>
int main() {
printf("Hello RISCV!\n");
}

を準備して, 次のようにビルド / 実行します.

1
2
3
4
5
$ riscv64-unknown-elf-gcc hello.c -o hello
$ spike pk hello

bbl loader
Hello RISCV!

riscv64 版であれば, さほど苦もなく動作するようです.

さて, それでは Spike エミュレータに 拡張命令を組み込んでみましょう.
拡張命令セットの追加は, riscv-tools の submodule である riscv-opcodes を修正して, riscv-isa-sim に反映させます.

1
2
3
4
$ cd riscv-tools
$ cd risc-opcodes
(opcodes ファイルを適当に修正)
$ make install

命令セットの追加は, riscv-isa-sim の riscv/insns に実際の命令セットの動作を記述して追加し, spike をビルド/インストールします.

1
2
3
4
$ cd ../riscv-isa-sim
$ cd build
$ make
$ make install