FPGA開発日記

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

CMake + Modelsim Intel FPGA Starter EditionでGUI上でのリコンパイル手法

CMakeを使ってModelsim環境を構築したが、GUIデバッグしているときの問題があった。 これは、Verilogを修正した場合にGUIを立ち上げている状態でどのようにしてリコンパイルするかということだった。

シミュレーションのやり直し(Verilogの変更無く再コンパイルの必要がない場合)は、restart -force; run -allと記述すればシミュレーションをやり直してくれる。 しかし、リコンパイルしたい場合にはどのようにしたら良いのだろう?

例えば、CMakeLists.txtには以下のような割かし複雑なコンパイルオプションが記述されている。

add_custom_command (OUTPUT vlog
  COMMAND vlog -f filelist.f
              +define+IC_RD_RAND+${IC_RD_RAND}
              +define+DC_RD_RAND+${DC_RD_RAND}
              +define+DC_WR_RAND+${DC_WR_RAND}
              +define+TOOL_QUESTA_SIM
              +define+SIMULATION
              +define+SIM_DATE=${CMAKE_SIM_DATE}
              +define+REVISION=28\\'h${CMAKE_REVISION}
              +incdir+../../../../hardware/common/include/
              -work worklib
              -l vlog.log
  DEPENDS filelist.f riscv_ctrl csu_main vlib
  )

で、GUI上でリコンパイルするためには、これをもう一度コンソールに叩けばよいのだが、もちろん環境変数などがあり難しい。

f:id:msyksphinz:20170302005500p:plain

怒られる。

そこで、compile.doを作成して、リコンパイルする場合にはdo compile.doとしたい。compile.doは手動ではなく、可能ならばオプションが変更になる場合に備えて自動で作りたいなあ。

という訳で、vlog.logに記述されているコンパイルオプションをgrepで抽出して、compile.doを自動的に作れるようにした。

add_custom_command (OUTPUT compile.do
  COMMAND grep ^vlog vlog.log > compile.do
  )

vlog.logから、vlogの文字から始まる行を検索してcompile.doに入れている。結果として、以下のようなcompile.doが作成される。

vlog -f filelist.f "+define+IC_RD_RAND+0" "+define+DC_RD_RAND+0" "+define+DC_WR_RAND+0" "+define+TOOL_QUESTA_SIM" "+define+SIMULATION" "+define+SIM_DATE=20170302" "+define+REVISION=28'haf2465a" "+incdir+../../../../hardware/common/include/" -work worklib -l vlog.log

1行だからむちゃ長いけど。というわけでこのファイルをGUI上で読み込ましてやれば再コンパイルしてくれる。

f:id:msyksphinz:20170302005915p:plain