FPGA開発日記

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

riscv-testsの`rv64si-p-icache-alias`は何のテストなのか

riscv-testsのテストケースをすべて通すためにテストケースの確認をしている。

rv64si-p-icache-aliasのテストケースを確認している。基本的にはスーパーページのテストと、ページテーブルをアップデートした際のアップデート確認のためのテストが入っているようだ。

# Test that instruction memory appears to be physically addressed, i.e.,
# that disagreements in the low-order VPN and PPN bits don't cause the
# wrong instruction to be fetched.  It also tests that changing a page
# mapping takes effect without executing FENCE.I.

引っかかったのは、ページテーブルをアップデートした際に、SFENCE.VMAで同期を取り、命令キャッシュをアップデートしなければならないこと。 命令キャッシュを一度クリアしないと、同じ仮想アドレスで別の命令にぶつかってしまい実行命令を間違えてしまう。

これを修正して、無事にすべてのテストケースがPassできるようになった。今後は別のコンフィグレーションや、ランダムテスト、機能の追加を行う。

rv64ui-v-sw     : PASS
rv64ui-v-lb     : PASS
rv64ui-v-lwu    : PASS
rv64ui-v-fence_i        : PASS
rv64ui-v-sb     : PASS
rv64ui-v-lhu    : PASS
rv64ui-v-lh     : PASS
rv64ui-v-ld     : PASS
rv64uc-v-rvc    : PASS
============================
PASS / TOTAL = 166 / 166
|msrh_tb_rv64_tiny | 166 / 166 (100.00%)|
============================
rv64ui-v-ld     : PASS
rv64ui-v-fence_i        : PASS
rv64ui-v-sb     : PASS
rv64ui-v-sw     : PASS
rv64ui-v-lhu    : PASS
rv64ui-v-sd     : PASS
rv64ui-v-sh     : PASS
rv64uc-v-rvc    : PASS
============================
PASS / TOTAL = 166 / 166
|msrh_tb_rv64_small | 166 / 166 (100.00%)|
============================
f:id:msyksphinz:20220322004828p:plain