RISC-V Foundationが公開しているテストパタンには、riscv-toolsリポジトリの中に含まれているriscv-testsテストパタンとは別に、RISC-V Compliance Task Groupのテストパタンが公開されている。
ダウンロードして試行することができる。デフオルトではriscvOVPsim
が動いているようだ。
前回自作RISC-Vシミュレータを使ってテストパタンを動かす試行を少ししたのだが、テストが結構落ちてしまった。 原因を解析すると、いろいろシミュレータに設定を追加しなければならなかったり、テストの設定を変えなければならなかったり。。。 しかし、riscv-testsで落ちなかったにも関わらずriscv-complianceでは落ちたので、実装を作ったときは両方とも流してみた方が良いかもね。
テストパタンは以下のカテゴリが用意されている。
$ ls -1 riscv-test-suite/ rv32i rv32im rv32imc rv32mi rv32si rv32ua rv32uc rv32ud rv32uf rv32ui rv64i rv64im
それぞれで、必要となるアーキテクチャの構成が違うので注意。例えば、rv32i
はC系列の命令(16ビット長命令)は動かない前提で作ってあるので注意。
例えば、C命令がサポートされている場合は2-byte alignの場所にジャンプできるが、C命令がサポートされていないテストで2-byte alignの場所にジャンプすると例外が発生する。
m命令(設定レジスタ)のテストパタンはいまだにいくつか落ちるが、それ以外は問題なく通過するようになった。 というか、テストを通すためにオプションを新設する必要があったりしたので、それを対応した。(`--archオプションを追加した。今のところC命令とビット長しか効果が無いけど)。
usage: ./swimmer_riscv [options] ... options: --max_size Max size of log file [MB] (unsigned int [=0]) --max Max instructions to simulate (unsigned long [=0]) --binfile Binary file to simulate. (string [=]) --hexfile Hex file to simulate. (string [=]) --only_info_load Debug Info is only loaded (only enable with --binfile) --debug Generate debug log --out Output log filename (string [=]) --load-dump Dump Loaded Bin file (only enable with --binfile) --parallel CPU Parallel Execution --init_pc Initial Program Counter Value (string [=]) --stop-host Stop simulation by accessing MTOHOST --use-pk Location of RISC-V Proxy Kernel (string [=]) --arch Support RISC-V Architecture (ex. --arch rv32imafd.../rv64imafd...) (string [=rv64imafdc]) --trace-hier Generate Hierarcical Trace --trace-out Hierarcical Trace Output Filename (string [=]) --vmlinux Location of vmlinux (string [=]) --logstart cycle of log start (unsigned long [=0]) --printstep print number of steps each cycle (unsigned long [=0]) --signature Generate Signature and filename (string [=]) -v, --version Show Version Information -?, --help print this message