FPGA開発日記

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

OpenHWのCVA6(Ariane)を試す

f:id:msyksphinz:20201217013038p:plain

OpenHWのCVA6は昔Arianeと名付けられていたが、OpenHWにより管理されるようになり名称がCVA6と変更された。 RISC-V Summit 2020でもOpenHWの発表があり、そういえばどうなったかなと思い再度試してみることにした。 昔試してみたときの記事はこちら。

msyksphinz.hatenablog.com

今回はこちらのGitHubを参考にした。

github.com

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
...

一応動いているようだ。