RISC-Vの実装であるHummingBirdを調査していくことにした。
HummingBirdの概要
前回iverilogを使用しようとしてはねられてしまうという悲しい状態で終了したのだが、少し調査すればVerilatorでも流すことができそうな気がする。というかVerilatorで一からテストベンチと環境を立ち上げたことが無いので、これを気に挑戦してみようかと思う。
とりあえずググって、以下のQiitaの記事が出てきたので読んでみた。 なんだ。C言語の記述はこれだけで行けるのかな?それなら私でもできそうだ。
#include "Vour.h" #include "verilated.h" int main(int argc, char **argv, char **env) { Verilated::commandArgs(argc, argv); Vour* top = new Vour; while (!Verilated::gotFinish()) { top->eval(); } delete top; exit(0); }
あとはRTLとインクルードファイルが含まれているディレクトリをどんどん追加していくことになる。HummingBirdのビルド環境では、make install
を実行すると一か所にソースファイルが固まるので、そこを指定すれば良さそうだ。
なぜそんな仕組みになっているのかは分からないが、ほかのファイルを編集中にシミュレーションが間違ってしまうことを恐れたのか。
Makefileを以下のように書き換え、Verilatorでコンパイルできるように変更していく。
diff --git a/vsim/bin/run.makefile b/vsim/bin/run.makefile index 46a917e..eeafd22 100644 --- a/vsim/bin/run.makefile +++ b/vsim/bin/run.makefile @@ -15,11 +15,15 @@ TB_V_FILES := $(wildcard ${VTB_DIR}/*.v) # The following portion is depending on the EDA tools you are using, Please add them by yourself according to your EDA vendors SIM_TOOL := #To-ADD: to add the simulatoin tool -SIM_TOOL := iverilog # this is a free solution here to use iverilog to compile the code +#SIM_TOOL := iverilog # this is a free solution here to use iverilog to compile the code +SIM_TOOL := verilator SIM_OPTIONS := #To-ADD: to add the simulatoin tool options -SIM_OPTIONS := -o vvp.exec -I "${VSRC_DIR}/core/" -I "${VSRC_DIR}/perips/" -D DISABLE_SV_ASSERTION=1 -g2005 +# SIM_OPTIONS := -o vvp.exec -I "${VSRC_DIR}/core/" -I "${VSRC_DIR}/perips/" -D DISABLE_SV_ASSERTION=1 -g2005 +SIM_OPTIONS := --top-module tb_top -Wall +systemverilogext+ext --cc --exe ${RUN_DIR}/../install/tb/sim_main.cpp -I${RUN_DIR}/../install/rtl/core/ -I${RUN_DIR}/../install/rtl/perips + +
実際にコンパイルしてみると、3000個以上の警告が出て、その結果バイナリファイルが生成されない。Verilatorというのはすべての警告を消さないとバイナリファイルが生成されないのもなのだろうか?良く分からない。
徹底的に警告を潰していく。潰していく、というかひたすら警告を無視していく。
+SIM_OPTIONS := --top-module tb_top -Wall +systemverilogext+ext --cc --exe ${RUN_DIR}/../install/tb/sim_main.cpp -I${RUN_DIR}/../install/rtl/core/ -I${RUN_DIR}/../install/rtl/perips -Wno-STMTDLY -Wno-lint -Wno-UNOPTFLAT -Wno-COMBDLY -Wno-INITIALDLY
ここまで進めてようやくバイナリが生成されたようだ。ただし今日はもう時間切れ。