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について思ったことを書きます。