ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests
を試してみることにした。
自作CPUに適用して、さらなるバグが発見されることを期待している。
前回の続きで、テストパタンの動かし方が分かったので、自作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
のセクションの場所が問題な気がしている。
どうにかして、このセクションの場所を切り取ることはできないかなあ。