FPGA開発日記

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

Tenstorrentの公開したRISC-V検証パタン riscv_arch_tests を試す (4. テストパタンを自作CPUで試してみる)

ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests を試してみることにした。 自作CPUに適用して、さらなるバグが発見されることを期待している。

github.com

前回の続きで、テストパタンの動かし方が分かったので、自作CPUで動かしてみた。 とりあえず一番簡単なテストを自作CPUで動かした。

動かしている中でいくつかテストパタンのFailがあったので解析していたのだが、自作CPUのバグのようだった。 テストパタンの中でデータ領域をアップデートしているのだが、その近辺をフェッチしていると、その場所でフェッチが間違えるようだ。 本当はこういうところでfence命令を挿入してほしいのだが、そうもいかないらしい。非常に微妙なラインで間違いが落ちている。

これを直した結果、どうにかテストパタンが通過できるようになった。 しかし、まだos_dataセクションの対応が問題だなあ。どうにかしてバイナリを改造できないだろうか。

rvi_compute_register_register_3 : PASS
rvi_compute_register_register_13        : PASS
rvi_compute_register_register_19        : PASS
rvi_compute_register_register_17        : PASS
rvi_compute_register_immediate_5        : PASS
rvi_compute_register_immediate_7        : PASS
rvi_compute_register_immediate_1        : PASS
rvi_compute_register_register_5 : PASS
rvi_compute_register_register_9 : PASS
rvi_compute_register_register_15        : PASS
rvi_compute_register_register_7 : PASS
rvi_compute_register_immediate_3        : UNKNOWN
rvi_compute_register_immediate_9        : PASS
rvi_control_transfer_conditional_5      : PASS
rvi_compute_register_immediate_11       : PASS
rvi_compute_register_register_11        : PASS
rvi_control_transfer_conditional_7      : PASS
rvi_compute_register_register_1 : PASS
rvi_control_transfer_conditional_1      : PASS
rvi_control_transfer_conditional_3      : PASS
rvi_compute_register_register_4 : PASS
rvi_compute_register_register_20        : PASS
rvi_compute_register_immediate_6        : PASS
rvi_compute_register_register_16        : PASS
rvi_compute_register_immediate_8        : PASS
rvi_compute_register_register_14        : PASS
rvi_compute_register_immediate_2        : PASS
rvi_compute_register_register_18        : PASS
rvi_compute_register_register_8 : PASS
rvi_compute_register_register_12        : PASS
rvi_compute_register_immediate_10       : PASS
rvi_compute_register_immediate_12       : PASS
rvi_compute_register_register_6 : PASS
rvi_compute_register_register_2 : PASS
rvi_control_transfer_conditional_6      : PASS
rvi_control_transfer_conditional_2      : PASS
rvi_compute_register_register_10        : UNKNOWN
rvi_compute_register_immediate_4        : PASS
rvi_control_transfer_conditional_4      : PASS
rvi_control_transfer_conditional_8      : PASS
rvi_control_transfer_conditional_11     : PASS