FPGA開発日記

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

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

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

github.com

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

argv[13] = ../../../tests/riscv_arch_tests/riscv_tests/rv_i/rvi_compute_register_register/rvi_compute_register_register_1
serialdevice: uart loaded
      1000 :        270 : IPC(recent) = 0.27, IPC(total) = 0.27
rvi_compute_register_register_1 : PASS

一発で動いた。すばらしい。

MW4(0x0000000080000280)=>0000000000000001
3873 : 593 : PC=[00000000800001c0] (M,00,01) ff5ff06f j       pc - 0xc
GPR[00](0) <= 0000000000000000
3874 : 594 : PC=[00000000800001b4] (M,01,01) 00000097 auipc   ra, 0x0
GPR[01](28) <= 00000000800001b4
3875 : 595 : PC=[00000000800001b8] (M,02,01) 0cc08093 addi    ra, ra, 204
GPR[01](34) <= 0000000080000280
3875 : 596 : PC=[00000000800001bc] (M,02,02) 0030a023 sw      gp, 0(ra)
MW4(0x0000000080000280)=>0000000000000001
3876 : 597 : PC=[00000000800001c0] (M,03,01) ff5ff06f j       pc - 0xc
GPR[00](0) <= 0000000000000000
3877 : 598 : PC=[00000000800001b4] (M,04,01) 00000097 auipc   ra, 0x0
GPR[01](30) <= 00000000800001b4
3881 : 599 : PC=[00000000800001b8] (M,05,01) 0cc08093 addi    ra, ra, 204
GPR[01](12) <= 0000000080000280
3881 : 600 : PC=[00000000800001bc] (M,05,02) 0030a023 sw      gp, 0(ra)
MW4(0x0000000080000280)=>0000000000000001
3882 : 601 : PC=[00000000800001c0] (M,06,01) ff5ff06f j       pc - 0xc
GPR[00](0) <= 0000000000000000
3883 : 602 : PC=[00000000800001b4] (M,07,01) 00000097 auipc   ra, 0x0
GPR[01](47) <= 00000000800001b4
3884 : 603 : PC=[00000000800001b8] (M,08,01) 0cc08093 addi    ra, ra, 204
GPR[01](36) <= 0000000080000280
3884 : 604 : PC=[00000000800001bc] (M,08,02) 0030a023 sw      gp, 0(ra)
MW4(0x0000000080000280)=>0000000000000001
15542 : L1D Load-In     : 80000280(00040) : 00000013_00000013_00000000_00000001
15542 : L1D Merged      : 80000280(00040) : 00000013_00000013_00000000_00000001
===============================
SIMULATION FINISH : PASS
===============================

とりあえずシンプルなやつを全部動かしてみた。

rvi_compute_register_register_1 : PASS
rvi_compute_register_register_11        : PASS
rvi_compute_register_register_19        : PASS
rvi_compute_register_register_4 : ERROR
rvi_compute_register_register_12        : PASS
rvi_compute_register_register_17        : PASS
rvi_compute_register_register_10        : PASS
rvi_compute_register_register_5 : PASS
rvi_compute_register_register_9 : PASS
rvi_compute_register_register_20        : PASS
rvi_compute_register_register_13        : PASS
rvi_compute_register_register_8 : PASS
rvi_compute_register_register_6 : PASS
rvi_compute_register_register_14        : PASS
rvi_compute_register_register_16        : PASS
rvi_compute_register_register_3 : PASS
rvi_compute_register_register_15        : PASS
rvi_compute_register_register_7 : ERROR
rvi_compute_register_register_2 : PASS
rvi_compute_register_register_18        : PASS
{'pass': 18, 'match': 0, 'timeout': 0, 'error': 2, 'deadlock': 0, 'unknown': 0}

ERRORになったのは、環境の問題の気がしている。別のテストケースについては、上記のテストと同様に.os_dataのセクションの場所が問題な気がしている。 どうにかして、このセクションの場所を切り取ることはできないかなあ。