FPGA開発日記

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

オープンソースRISC-VコアHummingBirdについて調査(2. Verilator用にビルドを追加できないか?)

RISC-Vの実装であるHummingBirdを調査していくことにした。

https://camo.githubusercontent.com/f393ca23a6df9f640c1e4a43b78f2a503fdc47e8/68747470733a2f2f66647661643032316173666438712e6f73732d636e2d68616e677a686f752e616c6979756e63732e636f6d2f4c696368656554616e672f626f6f6b7069632e6a7067

HummingBirdの概要

前回iverilogを使用しようとしてはねられてしまうという悲しい状態で終了したのだが、少し調査すればVerilatorでも流すことができそうな気がする。というかVerilatorで一からテストベンチと環境を立ち上げたことが無いので、これを気に挑戦してみようかと思う。

とりあえずググって、以下のQiitaの記事が出てきたので読んでみた。 なんだ。C言語の記述はこれだけで行けるのかな?それなら私でもできそうだ。

qiita.com

#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

ここまで進めてようやくバイナリが生成されたようだ。ただし今日はもう時間切れ。