FPGA開発日記

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

自作RISC-Vアウトオブオーダコアでriscv-testsのテストケースがすべてPassできるようになった

自作RISC-V アウトオブオーダコアの実装、いくつかのデバッグの結果標準構成でriscv-testsの必要なテストをすべて通すことが出来るようになった。

いくつか問題になったのは、ロード命令でTLBによりメモリアクセス例外が発生してそのまま当該ロード命令が強制終了したとき、次にそのロード結果を使う命令がいつまでもそのオペランドを待ち続け、同じ命令グループにいる場合にそのグループがいつまでもコミット状態になることが出来ない状態だった。 これは基本的なデッドロックのケースのはずだが、こういう基本的なケースも考慮が足りていなかった。 同じ命令グループでも前の命令が例外を発生すると、グループ内の後続の命令はすべてDead扱いとするように変更した。

これにより、riscv-testsの基本的な命令群はすべてPassできるようになった。 もちろん、浮動小数点やアトミック命令などはまだ実装できていないが、これらは後々実装することにしよう。

rv64um-v-divw   : PASS
rv64um-v-div    : PASS
rv64um-v-divuw  : PASS
rv64um-v-mul    : PASS
rv64um-v-mulhsu : PASS
rv64um-v-mulh   : PASS
rv64uc-v-rvc    : PASS
rv64um-v-remuw  : PASS
rv64um-v-remu   : PASS
rv64um-v-rem    : PASS
rv64um-v-remw   : PASS
rv64um-v-mulw   : PASS
rv64um-v-mulhu  : PASS
============================
PASS / TOTAL = 166 / 166
|msrh_tb_rv64_standard | 166 / 166 (100.00%)|
============================