FPGA開発日記

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

Chiselの記述されたSweRV-EL2コアQuasarを試す (Coremark測定)

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; }
}