FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

自作RISC-VシミュレータにBitManipulation命令拡張を実装した

f:id:msyksphinz:20200123091357p:plain:w300

自作RISC-VシミュレータにBit-Manipulationの機能を実装した。すべてのテストセットがPasssすることを確認した。

github.com

Bit-Manipulationの機能は、仕様書November 30, 2019を参考にした。

github.com

テストを含めてツールセットの準備はすべてこのriscv-bitmanipリポジトリを使用している。Spikeシミュレータもあらかじめ実装されているので、自作RISC-Vシミュレータに対する実装もある程度簡単にできた。

ツールチェインの用意はBit-Manipulationが実装されたRISC-V GCCを使い、テストケースは同様にriscv-bitmanip内に格納されているtestsテストケースを使用した。

このテストケースは、ハッシュ関数比較方式になっておりデバッグは非常に容易ではない。そこでSpikeの実行結果との比較スクリプトを作って動作比較を行った。

 ./swimmer_riscv --binfile ${HOME}/work/riscv/riscv-bitmanip/tests/tests --use-pk=${RISCV}/riscv64-unknown-elf/bin/pk
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.

このテストケース、とても面倒で、エラーがどの命令で発生したのか良く分からない。例えばエラーで失敗すると以下のようなメッセージが表示されるだけである。

 ./swimmer_riscv --binfile ${HOME}/work/riscv/riscv-bitmanip/tests/tests --use-pk=${RISCV}/riscv64-unknown-elf/bin/pk

まじデバッグできん!

test_zbb  0xf24baae6 ERROR

Spikeとの比較スクリプトを使って、どうにかすべてのテストがPassできるようになった。