RISC-V エミュレータ Spike

RISC-V toolchain(開発環境を整える)で RISC-Vの32ビット対応のための riscv-gnu-toolchain の開発環境を整えましたが, 本エントリで扱う riscv-tools を開発に使います. この riscv-tools は toolchain に risv64 のコンパイル環境を前提としているため, 一度構築した 32bit 環境を変更します.
変更した riscv-gnu-toolchain のインスール手順を掲載します.

1
2
3
4
5
6
$ git clone https://github.com/riscv/riscv-gnu-toolchain.git
$ cd riscv-gnu-toolchain
$ mkdir build
$ ../configure --prefix=/opt/riscv --enable-multilib
$ make
$ sudo make install

さて, RISC-V のエミュレーション環境は, すでに QEMU の環境を整えましたが, riscv-tool の中にある Spike もエミュレータとして動作します.
Spike は, QEMU よりも RISC-V の開発専用になっている分, 拡張実装の手順も簡便です. そこで, Spike を使って量子拡張実装を試して, QEMU に適応できるかを取り組んでいく手順で作業していきます.

Spike のビルド手順と, Proxy Kernel と呼ばれるベアメタルプログラムを動かす機構のビルド手順を掲載します.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ git clone https://github.com/riscv/riscv-tools.git
$ export RISCV=/opt/riscv
$ cd riscv-tools
$ cd riscv-spike
$ mkdir build
$ cd build
$ ../configure --prefix=${RISCV}
$ make
$ sudo make install

$ cd ../../riscv-pk
$ mkdir build
$ cd build
$ ../configure --prefix=${RISCV} --host=riscv32-unknown-elf
$ make
$ sudo make install

Spike を Proxy Kernel を介してベアメタルプログラムで動作させるには, 次のようにします.

1
2
$ riscv32-unknown-elf-gcc hello.c -o hello -mabi=ilp32 -fPIC -nostdlib -nostartfiles
$ spike --isa=rv32i /opt/riscv/riscv32-unknown-elf/bin/pk hello

(↑手元の環境でうまく動作していないため, 調査しています. )