SCR1 make run_verilator (うまく動くバージョンメモ)
Verilatorはバージョンによって挙動が違います。(仕様修正 or バグ)
RISC-VのSCR1コアをverilatorで動かすのに苦労したので、忘れないようにメモしておきます。
環境
Vertual Box上のUbuntu (ubuntu-ja-18.04.3)
gcc
Syntacore社が用意したものを使いました。
http://syntacore.com/page/products/sw-tools
※riscv-gnu-toolchainのgithub最新版(v9.2.0)だとcomplianceテストが8個failします。。。
(failの例: ---Test: compliance_I-LHU-01.hex)
verilator
$ git clone https://github.com/verilator/verilator.git -b v4.018
※github最新版(v4.031)だとrtl sim中にadd.hexがどうとかいうエラーが出てうまくいきません。。。(ダメな記述がscr1_top_tb_ahb.svにある)
仕方ないのでバージョンを下げるとv4.018では動きました。
その他
riscv-tests、riscv-compliance、coremarkのインストールはdoc/scr1_um.pdfの「5. Simulation environment」の通り進めます。
dhrystoneは最初から入れてくれています。
確認の流れ
「5. Simulation environment」の通りに進めていきます。
つまり、上記の環境を用意し、scr1階層へ移動し
make run_verilator
を実行します。
これでscr1/Makefileのtestsに含むものをコンパイル&RTL Simできます。
ただし、helloで以下のエラーが出てきました。解決方法も以下に記載しました。
helloのコンパイルエラー
helloのコンパイル時に以下のエラーが出ます。
libmpfr.so.4: cannot open shared object file: No such file or directory
解決方法
linux - cannot open libmpfr.so.4 after update on ubuntu 18.04 - Stack Overflow
ここにあるように、以下のリンクを作って解決しました。
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
make run_verilator
を実行し、コンパイル&RTL Simが流れて以下が出ればOKです。
#-------------------------------------- # Summary: 188/188 tests passed #--------------------------------------
余談 (syntacore社が用意したgccの置き場)
私は以下のように起きました。(risc-v gccディレクトリを作り、そこへ入れてパスを通しました。)
mkdir ~/rvgcc && cd $_ cp ~/sc-riscv64-unknown-elf-gcc-20180126-linux64.tar.gz . tar zxvf sc-riscv64-unknown-elf-gcc-20180126-linux64.tar.gz echo PATH=~/rvgcc/sc-riscv64-unknown-elf-gcc-20180126-linux64/bin:$PATH
また、
https://github.com/riscv/riscv-gnu-toolchain
からgit cloneして
./configure --prefix=/opt/riscv --enable-multilib
するのが正しいと思いましたが、これもエラーが出て動きませんでした。
まとめ
以下の組み合わせで、SCR1をVerilatorでシミュレーションできます。
- SCR1:
Latest commit ec6abce on 28 Jan (ec6abced26e699e7bc53d64c78e5857b9328175c) - riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 7.1.1 20170509 - verilator --version
Verilator 4.018 2019-08-29 rev UNKNOWN_REV
(余談) 次回、Verilatorについて思ったことを書きます。