オープンなISAであるRISC-Vには、32bit版も定義されています。 spikeは、RISC-Vの公式が開発している命令セットシミュレーターです。
以下の手順で必要なソースコードを持ってきます。
$ git clone https://github.com/riscv/riscv-tools.git $ cd riscv-tools $ git checkout bce7b5e $ git submodule update -i --recursive
最新のコミットでは、riscv-gnu-toolchain
が含まれなくなってしまいました。
RISC-V用のクロスコンパイラをすでに持っている場合は問題ありませんが、そうでない場合は手に入れる必要があります*1。
riscv-gnu-toolchain
が含まれていたころのbce7b5e
をチェックアウトすれば自動でやってくれるため楽です。
このあと./build-rv32ima.sh
を動かすのですが、名前の通り、RV32IMA用になってしまいます。
RV32IMAだと浮動小数点数命令拡張が含まれないため、スクリプトの中のrv32ima
をrv32g
に変更します。
インストールしたいパスをシェルのRISCV
変数に入れた後、先ほど書き換えたビルドスクリプトを走らせます。
$ export RISCV=~/rv32 $ ./build-rv32ima.sh
70分ほど待つとビルドが完了します。
使い方は、以下のような感じです。前に作ったRV64G用の場合は~/rv64/bin/spike pk a.out
のようにpk
をそのまま打てばよかったような気がしますが、~/rv32/bin/spike ~/rv32/riscv32-unknown-elf/bin/pk a.out
のようにpk
のパスを打つ必要があるようです。
$ echo -e '#include<stdio.h>\nint main(){puts("Hello, RISC-V!");}' > main.c $ ~/rv32/bin/riscv32-unknown-elf-gcc main.c $ ~/rv32/bin/spike ~/rv32/riscv32-unknown-elf/bin/pk a.out bbl loader Hello, RISC-V!