FPGA開発日記

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

サイクルベースシミュレータSniperについて調査する (RISC-Vシミュレーション環境構築の調査)

Sniperのビルドについていくつかうまくいかなかった部分があるので、 ビルドスクリプトを修正してく。 結論としては、riscv/build-riscv.shを以下のように修正した。また、自分はSPEC2006を持っていないので、Dhrystoneなので代用しないとしようがない。

commit 5c943662ef5390218305f9e05bc035150b107b85 (HEAD -> master, origin/master, origin/HEAD)
Author: msyksphinz-self <msyksphinz.dev@gmail.com>
Date:   Sat Aug 20 23:35:49 2022 +0900

    Fix for RISC-V environment

diff --git a/riscv/build-riscv.sh b/riscv/build-riscv.sh
index dd2c57e..f854c67 100755
--- a/riscv/build-riscv.sh
+++ b/riscv/build-riscv.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/bash
+
 ENV_SCR=$(readlink -f "${BASH_SOURCE}")
 TOOLS_DIR=$(dirname $(dirname "${ENV_SCR}"))
 LOCAL_ROOT="${TOOLS_DIR}/riscv"
@@ -30,12 +32,12 @@ if [ -z  "$CPU2006_ROOT" ]; then
 fi

 export RISCV=$LOCAL_ROOT/riscv-tools/RV64G
-export PATH=$RISCV/bin:$PATH
+export PATH=$RISCV/bin:"${PATH}"
 export RV8_HOME=$LOCAL_ROOT/rv8
 export SPECKLE_ROOT=$LOCAL_ROOT/Speckle
 export SPEC_DIR=$CPU2006_ROOT

-NPROC=(`nproc --all`)
+NPROC=`nproc --all`
 updateGitRepo() {
        URL=$1
        BRANCH=$2
@@ -65,7 +67,28 @@ echo "Setting up riscv-tools..."
 URL=https://github.com/nus-comparch/riscv-tools.git
 BRANCH=sift
 FOLDER=riscv-tools
-updateGitRepo "$URL" "$BRANCH" "$FOLDER"
+git clone https://github.com/nus-comparch/riscv-tools.git -b sift
+pushd riscv-tools
+git submodule update --init --recursive riscv-fesvr
+git submodule update --init             riscv-gnu-toolchain
+
+pushd riscv-gnu-toolchain
+git submodule update --init --recursive riscv-binutils-gdb
+git submodule update --init --recursive riscv-dejagnu
+git submodule update --init --recursive riscv-gcc
+git submodule update --init --recursive riscv-glibc
+git submodule update --init --recursive riscv-newlib
+# git submodule update --init --recursive riscv-qemu
+popd
+
+git submodule update --init --recursive riscv-isa-sim
+git submodule update --init --recursive riscv-opcodes
+# git submodule update --init --recursive riscv-openocd
+git submodule update --init --recursive riscv-pk
+git submodule update --init --recursive riscv-tests
+popd
+
+# updateGitRepo "$URL" "$BRANCH" "$FOLDER"

すでにビルドされているDhrystone (RV64G、つまりCを使わないことがが重要らしい)を使ってSIFTファイルを生成してみた。

./riscv/riscv-tools/RV64G/build-isa-sim/spike --sift dhrystone.sift riscv/riscv-tools/RV64G/riscv64-unknown-elf/share/riscv-tests/benchmarks/dhrystone.riscv

なるほど、これはバイナリファイルらしい、よくわからない。次にこれをSniperのコマンドに渡してみる。

cd ${SPECKLE_ROOT}
../sniper/run-sniper -criscv --traces=../sniper/dhrystone.sift

sim.infoが出てきたが、これの意味はよくわからんな。どうとらえればいいんだ?

{'cmdline': ['../sniper/run-sniper',
             '-criscv',
             '--traces=../sniper/dhrystone.sift'],
 'git_revision': '52e8d391ca96991d559e65ae91280977c0ae1e6e',
 'host': 'ms-x1carbon',
 'pin_version': 'unknown',
 'rusage': (0.039094,
            0.0069229999999999995,
            8124,
            0,
            0,
            0,
            1975,
            1,
            0,
            40,
            0,
            0,
            0,
            0,
            271,
            0),
 'snipercmd': ['bash',
               '-c',
               '/home/msyksphinz/work/sniper/sniper/lib/sniper -c /home/msyksphinz/work/sniper/sniper/config/base.cfg --general/total_cores=1 --general/output_dir=/home/msyksphinz/work/sniper/Speckle -g --traceinput/mirror_output=true --config=/home/msyksphinz/work/sniper/Speckle/riscv.cfg -g --traceinput/stop_with_first_app=true -g --traceinput/restart_apps=false -g --traceinput/enabled=true -g --traceinput/emulate_syscalls=false -g --traceinput/num_apps=1 -g --traceinput/thread_0=/home/msyksphinz/work/sniper/sniper/dhrystone.sift'],
 't_elapsed': 0.19097399711608887,
 't_start': 1661007329.295105,
 'tracecmds': [],
 'user': 'msyksphinz',
 'vmem': 7409664L}