OpenHWのCVA6は昔Arianeと名付けられていたが、OpenHWにより管理されるようになり名称がCVA6と変更された。 RISC-V Summit 2020でもOpenHWの発表があり、そういえばどうなったかなと思い再度試してみることにした。 昔試してみたときの記事はこちら。
今回はこちらのGitHubを参考にした。
git clone https://github.com/openhwgroup/cva6.git cd cva6 git submodule update --init --recursive
Verilatorでビルドしてみる。
make verilate
と、ここで私の環境ではエラーが発生した。
/usr/bin/ld: ariane_tb.o:(.data.rel.ro._ZTV19preload_aware_dtm_t[_ZTV19preload_aware_dtm_t]+0x68): undefined reference to `htif_t::load_payload(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long*)'
ん?何でこんなエラーが発生するんだ?もしかして私が使っているriscv-tools
が古いのかと思い少し新しめのriscv-tools
を使用してみた(RVBで試したやつ)を使ってみると上手くビルドできたようだ。
いくつかテストを実行してみる。
work-ver/Variane_testharness ~/riscv64/riscv64-unknown-elf/share/riscv-tests/isa/rv64ui-p-simple
どうも止まらないなあと思ったら終了条件がriscv-tests
と合っていないのか?一応最後まで走って無限ループに入っていた。
spike-dasm < trace_hart_00.dasm | less
266 0x10000 M (0x00100413) li s0, 1 271 0x10004 M (0x01f41413) slli s0, s0, 31 276 0x10008 M (0xf1402573) csrr a0, mhartid 281 0x1000c M (0x00000597) auipc a1, 0x0 286 0x10010 M (0x07458593) addi a1, a1, 116 291 0x10014 M (0x00040067) jr s0 301 0x80000000 M (0x04c0006f) j pc + 0x4c 307 0x8000004c M (0xf1402573) csrr a0, mhartid 313 0x80000050 M (0x00051063) bnez a0, pc + 0 315 0x80000054 M (0x00000297) auipc t0, 0x0 317 0x80000058 M (0x01028293) addi t0, t0, 16 318 0x8000005c M (0x30529073) csrw mtvec, t0 322 0x80000060 M (0x18005073) csrwi satp, 0 329 0x80000064 M (0x00000297) auipc t0, 0x0 ...
一応動いているようだ。