RISC-V Bit-Manipulationの環境については、GitHubでツールセットやテストパタンが公開されている。ここには、Imperasのシミュレータ、コンプライアンステスト、ツールセット、Verilogモデルなどが含まれている。自作RISC-Vシミュレータに実装するにあたりこれらのツールセットが必要になるので、さっそく準備を整えていこう。
ダウンロードしてビルドする。この時、インストールディレクトリはデフォルトで/opt/riscv64b/
となっている。これは面倒なので変更して${HOME}/riscv64b/
に変更してしまおう。
git clone git@github.com:riscv/riscv-bitmanip.git cd riscv-bitmanip sed -i 's|/opt/riscv64b|${HOME}/riscv64b|g' `find . -name "*.sh"` mkdir ${HOME}/riscv64b
ツールセットのコンパイルには、以下のように入力する。
bash ./build-all.sh
GCCのダウンロードとコンパイルが必要だ。1時間くらいでコンパイルが完了した。テストを実行してみよう。
$ cd test $ bash ./run.sh
以下のようになった。特に問題はなさそうだ。
+ gcc -o testgen -Wall -O1 -I../cproofs testgen.cc + ./testgen + /home/msyksphinz/riscv64b/bin/riscv64-unknown-elf-gcc -Wall -march=rv64gb -Os -o tests tests.c + /home/msyksphinz/riscv64b/bin/spike --isa=RV64GCB pk tests bbl loader test_zbb 0x90f45e4e OK test_zbs 0xe4fa9ed0 OK test_zbp 0xbf7dc8c4 OK test_zbe 0xad938c6a OK test_zbc 0xcdef75a4 OK test_zbr 0x31fc780f OK test_zbm 0x355a32a3 OK test_zbt 0xcef7df02 OK test_zbf 0x3fa35b76 OK test_stdc 0x5a983d30 OK ALL TESTS PASSED.
次に、asmtests
のテストを動かしてみる。このためにGCCの実行バイナリの場所を変える必要があった。
diff --git a/asmtests/extB/Makefile b/asmtests/extB/Makefile index 2dee07c..c9894f9 100644 --- a/asmtests/extB/Makefile +++ b/asmtests/extB/Makefile @@ -1,6 +1,6 @@ # include Cross Compiler settings for RISCV -RISCV_PREFIX ?= riscv-none-embed- +RISCV_PREFIX ?= ${HOME}/riscv64b/bin/riscv64-unknown-elf- RISCV_CC ?= $(RISCV_PREFIX)gcc RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump
これでテストを実行する。
make runtests
$ make runtest make -C asmtests/auto make[1]: Entering directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests/auto' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests/auto' make -C asmtests make[1]: Entering directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests' make -C extB all make[2]: Entering directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests/extB' mkdir -p object/clz cat ../common/log.S clz/test.S > object/clz/concat.S /home/msyksphinz/riscv64b/bin/riscv64-unknown-elf-gcc -mabi=ilp32 -march=rv32im -Wl,-Ttext=0x80000000 -nostartfiles -DXLEN32 -o object/clz/test.32.elf object/clz/concat.S -I../common -I../../Imperas/ImperasLib/source/riscv.ovpworld.org/intercept/extB/1.0/model /home/msyksphinz/riscv64b/bin/riscv64-unknown-elf-objdump -D object/clz/test.32.elf > object/clz/test.32.elf.32.objdump mkdir -p object/bdep cat ../common/log.S bdep/test.S > object/bdep/concat.S ... ../riscv-ovpsim/bin/Linux64/riscvOVPsim.exe --customcontrol --override riscvOVPsim/cpu/simulateexceptions=T --override riscvOVPsim/cpu/defaultsemihost=F --override riscvOVPsim/cpu/user_version=2.3 --override riscvOVPsim/cpu/priv_version=1.11 --override riscvOVPsim/cpu/add_Extensions=B --variant RV64GC --program extB/object/bext/test.64.elf --logfile extB/object/bext/test.64.log.tmp >/dev/null ../riscv-ovpsim/bin/Linux64/riscvOVPsim.exe --customcontrol --override riscvOVPsim/cpu/simulateexceptions=T --override riscvOVPsim/cpu/defaultsemihost=F --override riscvOVPsim/cpu/user_version=2.3 --override riscvOVPsim/cpu/priv_version=1.11 --override riscvOVPsim/cpu/add_Extensions=B --variant RV64GC --program extB/object/ctz/test.64.elf --logfile extB/object/ctz/test.64.log.tmp >/dev/null make[2]: Leaving directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests' make verify make[2]: Entering directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests' Test Passed Bit autoasm Test Passed Bit bdep Test Passed Bit bext Test Passed Bit clz Test Passed Bit ctz Test Passed Bit pcnt Summary: All Tests Passed make[2]: Leaving directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests' make[1]: Leaving directory '/home/msyksphinz/work/riscv/riscv-bitmanip/asmtests'
上手く環境構築が完了したようだ。