chiselで内部信号のモニタ。VCDダンプしGTKWAVEで確認
最近、少しずつchiselを使うようにしているのですが、 chisel/iotesters.PeekPokeTesterで内部信号のモニタのをしようとpeek関数で内部レジスタを選択してみました。(peek(dut.r_quotient )みたいな感じで)
すると、「value r_remainder is not a member of simple.Divider」というエラーが出て、ビルドに失敗してしまいましした。 不思議に思い、調べてみると、びっくりしました。 今は「chiselでは内部信号がモニタできない」ようでした
Chisel test - internal signals - Stack Overflow
↑によると、モニタするにはVCD取得してgtkwave等で波形観測するしかできないようでした。 そのうちさすがにモニタできるようになると信じていますが、わざわざ波形取得しなくても、 値ダンプさえできればデバッグできる場面はそれなりにあるため、結構面倒な気がしました。
また、VCD取得しないで内部信号を確認するワークアラウンドとして、以下は使える気がしました。 適宜取り入れていく感じですね。
- モニタ用の出力ピンを用意すること
- モジュールを可能な限り小さい単位(FFすらモジュール)で分ける
- 諦めてverilogを使う
chiselでVCDダンプして、GTKWAVEで波形確認
chiselでVCDダンプする方法を示します。
参考: Frequently Asked Questions · freechipsproject/chisel-testers Wiki · GitHub
- chiselのiotestersに「("--generate-vcd-output", "on")」オプションを追加
- Veriatorを使用する(「--backend-name verilator」オブション)(こちらは不要かもしれません)
iotesters.Driver.execute(Array[String]("--generate-vcd-output", "on"), () => new Divider()) { c => new DividerTester(c)
$(SBT) "test:runMain simple.DividerTester --backend-name verilator"
GTKWAVEインストール方法
gtkwaveのインストール方法は以下を参考にしました。 特に何かエラー出る問題はエイリアスを貼ることで回避できました。
https://ughe.github.io/2018/11/06/gtkwave-osx
alias gktwave="/Applications/gtkwave.app/Contents/Resources/bin/gtkwave"
GTKWAVEで波形確認
gtkwaveで波形確認すると、pokeで入力した信号がnegedgeのタイミングで入力されていて、わかりやすかったです。ただ、一瞬どういうこと?とは思いましたが。 negedge論理を組んだときに問題にならないのかとも思いました。多分回避策あるでしょうが。
# VCD波形確認 $(GTKWAVE) ./test_run_dir/simple.DividerTester2058623782/Driver.vcd # スクリプトSave後(Write Safe file) $(GTKWAVE) ./test_run_dir/simple.DividerTester2058623782/Driver.gtkw