FPGA開発日記

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

RISC-V BOOMプロセッサのRTLシミュレーションを実行(VCS用プロジェクトで試行)

前回は、Verilator用の生成ファイルおよび環境を移植して、VeritakでのRTLシミュレーションを試行しようとしたが、シミュレーションが始まらず失敗したのだった。

いろいろ調査していると、Verilator用だけでなく、SynopsysのRTLシミュレータであるVCSでのシミュレーション環境も用意されていた。 こちらを使うと、Veritakでもシミュレーションできるかもしれない。試行してみよう。

VCS用の環境を構築する

Rocket-Chipの環境には、vsimというVCS用のシミュレーション構築環境がある。ここでmakeを叩けば、VCS用のプロジェクトファイルが構築され、VCSがインストールされている環境ならばシミュレーションがスタートする。

cd rocket-chip/vsim
make CONFIG=BOOMConfig

mkdir -p /home/vagrant/rocket-chip/vsim/generated-src/
cd /home/vagrant/rocket-chip && java -Xmx2G -Xss8M -XX:MaxPermSize=256M -jar /home/vagrant/rocket-chip/sbt-launch.jar "run-main rocketchip.Generator /home/vagrant/rocket-chip/vsim/generated-src rocketchip TestHarness rocketchip BOOMConfig"
[info] Loading project definition from /home/vagrant/rocket-chip/project
...

vcs -full64 -notice -line +lint=all,noVCDE,noONGS,noUI -error=PCWM-L -timescale=1ns/10ps -quiet +rad +v2k +vcs+lic+wait +vc+list -CC "-I/include" -CC "-I/home/vagrant/riscv//include" -CC "-std=c++11" -CC "-Wl,-rpath,/home/vagrant/riscv//lib" -CC "-include /home/vagrant/rocket-chip/vsim/generated-src/consts.BOOMConfig.h" /home/vagrant/riscv//lib/libfesvr.so -sverilog +incdir+/home/vagrant/rocket-chip/vsim/generated-src +define+CLOCK_PERIOD=1.0 \
/home/vagrant/rocket-chip/vsim/generated-src/rocketchip.BOOMConfig.v \
/home/vagrant/rocket-chip/vsim/generated-src/rocketchip.BOOMConfig.behav_srams.v \
/home/vagrant/rocket-chip/vsim/generated-src/consts.BOOMConfig.vh \
/home/vagrant/rocket-chip/vsrc/TestDriver.v \
/home/vagrant/rocket-chip/vsrc/SimDTM.v \
/home/vagrant/rocket-chip/vsrc/DebugTransportModuleJtag.v \
/home/vagrant/rocket-chip/vsrc/jtag_vpi.v \
/home/vagrant/rocket-chip/vsrc/AsyncResetReg.v \
/home/vagrant/rocket-chip/csrc/SimDTM.cc \
/home/vagrant/rocket-chip/csrc/jtag_vpi.c \
+define+PRINTF_COND=TestDriver.printf_cond +define+STOP_COND=!TestDriver.reset +define+RANDOMIZE_MEM_INIT +define+RANDOMIZE_REG_INIT +define+RANDOMIZE_GARBAGE_ASSIGN +define+RANDOMIZE_INVALID_ASSIGN +libext+.v  +vpi -P /home/vagrant/rocket-chip/vsrc/jtag_vpi.tab -CC "-DVCS_VPI" -o ./simv-rocketchip-BOOMConfig

僕の環境にはVCSはインストールされていないので(ってか個人で持っている人なんていないと思うが)、ここまでで動作は終了だ。だが、必要なファイル群や定義などの情報は取得することができた。 これをVeritakに移植してみる。

f:id:msyksphinz:20161103002949p:plain

最上位のテストベンチは、TestDriver.v だ。昨日のブログにも紹介したとおり、コンパイルを通すためにいくつかVerilogファイルを変更する必要があるが、それほど大した話ではない。

ただし、これでもまだシミュレーションを動作させることは出来なかった。具体的には、コンパイルまでは通るのだけど、何故かシミュレーションの時間が経過しない。何でだろう?謎だ。