FPGA開発日記

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

自作CPUをVivado Simulatorでシミュレーションするための試行

これまで基本的に自作CPUのシミュレーションはVerilatorを使っていた。これには理由がある。 - ある程度の規模のデザインならばコンパイル時間も気にならない。 - SpikeとのDPI接続などの機能が豊富 - かなり攻めたSystemVerilogの構文もサポートしている

しかし最初の項目「デザインのコンパイル時間」が耐えきれないレベルになってきた。 シミュレーションする対象の規模がかなり大きくなってきており、1回のコンパイルで30分以上かかるようになっている。

さすがにまずいのでVivado Simulatorの検討を始めた。

しかしVivado Simulatorの方もかなり問題があり、

  • WDBという意味不明な波形フォーマットをサポートしているビューアがVivado Simulatorしかない(FSTに対応してほしい)
  • Vivado Simulatorの波形ビューアがかなりイマイチ

一応Vivado SimulatorにSpikeとのステップ実行も併せてVerilatorの環境をそのまま移行できた。DPI-Cの取り扱いについてはXSCコマンドを使ってどうにかする。

 XSC_ARGS += -mt off
=# XSC_ARGS += -v 1
 XSC_ARGS += -compile
 XSC_ARGS += --cppversion 14
 XSC_ARGS += $(CPP_FILELIST)
 XSC_ARGS += -gcc_link_options "-L/usr/lib64 -lelf $(addprefix -I, $(INC_DIR))"
 XSC_ARGS += $(addprefix -gcc_compile_options "-I, $(addsuffix ", $(INC_DIR)))
 XSC_ARGS += $(addprefix -gcc_compile_options "-D, $(addsuffix ", $(DEFINE)))

 XSC2_ARGS += -mt off
=# XSC2_ARGS += -v 1
 XSC2_ARGS += -compile
 XSC2_ARGS += --cppversion 14
 XSC2_ARGS += $(ELF_LOADER)
 XSC2_ARGS += -gcc_link_options "-L/usr/lib64 -lelf $(addprefix -I, $(INC_DIR))"
 XSC2_ARGS += $(addprefix -gcc_compile_options "-I, $(addsuffix ", $(INC2_DIR)))
 XSC2_ARGS += $(addprefix -gcc_compile_options "-D, $(addsuffix ", $(DEFINE)))

 XSC_LINK_ARGS += -shared
 XSC_LINK_ARGS += -gcc_link_options "-L/usr/lib64 $(addprefix -L, $(INC_DIR)) -lelf -lriscv -lsoftfloat -ldisasm -lfesvr -lfdt -ldl -lpthread $(addprefix -I, $(INC_DIR))"
=# XSC_LINK_ARGS += -v 1

 sim_vivado: $(DECODE_FILES) $(FILELIST)
     $(XSC) $(XSC2_ARGS) | tee sim.log
     $(XSC) $(XSC_ARGS) | tee -a sim.log
     $(XSC) $(XSC_LINK_ARGS) | tee -a sim.log
     $(XVLOG) $(XVLOG_ARGS) ../src/riscv64_pkg.sv ../src/msrh_standard_conf_pkg.sv -f $(FILELIST) $(FILE_TEST) $(FILE_SRC) | tee -a sim.log
     $(XELAB) $(XELAB_ARGS) tb | tee -a sim.log
     DUMP_TYPE=$(DUMP) $(XSIM) $(XSIM_ARGS) "work.tb" | tee -a sim.log

XSCでSpike付きのライブラリをコンパイルできるようになるまで苦労したが、どうにか動くようになった。 ただしVivado波形データを見るのは相変わらずつらいなあ...

VCDも一応出力できるけど、VerilatorのFSTの階層と比べるとかなり使いずらい。これは使い続けるかどうか、迷うなあ...