FPGA開発日記

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

自作RISC-Vシミュレータを利用してriscv-tests の基本命令セットのテストをしてみた

いろいろとセグるのを修正したり、バグを直したりして、ある程度テストパタンを使ってシミュレータの機能をチェックできるようになった。 そこで、基本命令セットのテストパタンを利用して、現在自作シミュレータがどの程度正しくアーキテクチャをシミュレーションできているか、リグレッションしてみることにした。

使ったのは、以下のリビジョンだ。

github.com

コマンドラインオプションとして、以下を指定して実行してみる。

swimmer_riscv -h ${hex} -c 500 -p 200 -s
  • -h 実行するsrecファイル
  • -c 最大で500命令まで実行する。500命令に到達すると強制終了
  • -p 0x200からPCをセットしてシミュレーションを開始する
  • -s mtohostシステムレジスタにアクセスすると、その時点でシミュレーション終了

で、こんな感じでforループを回してリグレッションしてみた。

for hex in `ls rv32ui-p-*.hex`; do echo -n ${hex}; echo -n ","; swimmer_riscv -h $hex -s -p 200 -c 500 -o debug; echo $?; done

実行結果。うーん、37本PASSで17本FAIL。まあ、アトミック命令については全く実装してないからなあ。 でも、アーキテクチャシミュレータにとって、アトミック命令って単なるロードストア命令なので、(ちゃんと仕様書を読めば、)簡単にサポートできる気がするな。 とはいえ、まだまだ基本命令が落ちてる。修正していかないと。

パタン名 結果
rv32ui-p-add.hex Pass
rv32ui-p-addi.hex Pass
rv32ui-p-amoadd_w.hex Fail
rv32ui-p-amoand_w.hex Fail
rv32ui-p-amomaxu_w.hex Fail
rv32ui-p-amomax_w.hex Fail
rv32ui-p-amominu_w.hex Fail
rv32ui-p-amomin_w.hex Fail
rv32ui-p-amoor_w.hex Fail
rv32ui-p-amoswap_w.hex Fail
rv32ui-p-and.hex Pass
rv32ui-p-andi.hex Pass
rv32ui-p-auipc.hex Fail
rv32ui-p-beq.hex Pass
rv32ui-p-bge.hex Pass
rv32ui-p-bgeu.hex Pass
rv32ui-p-blt.hex Pass
rv32ui-p-bltu.hex Pass
rv32ui-p-bne.hex Pass
rv32ui-p-div.hex Fail
rv32ui-p-divu.hex Fail
rv32ui-p-fence_i.hex Pass
rv32ui-p-jal.hex Pass
rv32ui-p-jalr.hex Pass
rv32ui-p-j.hex Pass
rv32ui-p-lb.hex Pass
rv32ui-p-lbu.hex Pass
rv32ui-p-lh.hex Pass
rv32ui-p-lhu.hex Pass
rv32ui-p-lui.hex Pass
rv32ui-p-lw.hex Pass
rv32ui-p-mul.hex Pass
rv32ui-p-mulh.hex Pass
rv32ui-p-mulhsu.hex Pass
rv32ui-p-mulhu.hex Pass
rv32ui-p-or.hex Pass
rv32ui-p-ori.hex Pass
rv32ui-p-rem.hex Fail
rv32ui-p-remu.hex Fail
rv32ui-p-sb.hex Fail
rv32ui-p-sh.hex Fail
rv32ui-p-simple.hex Pass
rv32ui-p-sll.hex Pass
rv32ui-p-slli.hex Pass
rv32ui-p-slt.hex Pass
rv32ui-p-slti.hex Pass
rv32ui-p-sra.hex Pass
rv32ui-p-srai.hex Pass
rv32ui-p-srl.hex Pass
rv32ui-p-srli.hex Pass
rv32ui-p-sub.hex Fail
rv32ui-p-sw.hex Fail
rv32ui-p-xor.hex Pass
rv32ui-p-xori.hex Pass
PASS 37
FAIL 17