Chiselで記述されたSweRV-EL2コアQuasarを見ているが、一応Hello World以外にCoremarkを流すこともできるようだ。
$ make TEST=cmark GCC_PREFIX_cpp=${RISCV}/bin/riscv64-unknown-elf -f $RV_ROOT/tools/Makefile
実行結果は以下のようになった。一応完走はしているようだ。
make[1]: Leaving directory '/home/msyksphinz/work/riscv/Quasar/obj_dir' ./obj_dir/Vtb_top VerilatorTB: Start of sim 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 397296 Total time (secs): 397 Iterat/Sec/MHz : 2.51 Iterations : 1 Compiler version : GCC7.2.0 Compiler flags : -O2 Memory location : STATIC seedcrc : 0xo9p5 [0]crclist : 0xo714 [0]crcmatrix : 0x1pn7 [0]crcstate : 0x8o3k [0]crcfinal : 0xo714 Correct operation validated. See readme.txt for run and reporting rules. TEST_PASSED Finished : minstret = 284414, mcycle = 422534 See "exec.log" for execution trace with register updates.. - /home/msyksphinz/work/riscv/Quasar/testbench/tb_top.sv:344: Verilog $finish
ということはこれ以外のテストパタンも動かせるのだろうか?リンカスクリプトが入っていたので一応見てみる。 これを見ると、普通のRISC-Vのテストパタンは動かせないようだ。テキストセクションは0から配置する必要がある。
Quasar/testbench/link.ld
OUTPUT_ARCH( "riscv" ) ENTRY(_start) SECTIONS { . = 0; .text : { *(.text*) } _end = .; . = 0x10000; .data : ALIGN(0x800) { *(.*data) *(.rodata*) STACK = ALIGN(16) + 0x8000; } }