FPGA開発日記

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

RTLシミュレーションにおいて波形をダンプする以外にデバッグする方法はあるか

RTLシミュレーションにおいて、波形ダンプはとにかくディスク容量を食う。VCSなどが使用するFSDBはともかく、VCDとかで長期間シミュレーションをするととんでもないサイズのVCDファイルが生成されてしまい波形ビューアへのロードも時間がかかる。

なるべく波形を見たくない(というか、デバッグの初期段階において波形からアプローチするのを避けたい)というところから、どういう方法が良いだろうと考えていたが、一つの方法は内部の重要なモジュールの情報をすべてテキストでダンプしてしまうことだろう。

ソフトウェアでも同じだろうが、RTLはすべて階層構造になっているため、Verilifaction用の関数として例えばjson_dump()関数を用意し、サブモジュールに対して再帰的にjson_dump()を呼び出すようにして置けば簡単に全モジュールをダンプしてJSON形式で出力することができる。 本当はDPI-Cなどで情報を読み取ってC++などでそのままライブラリとして渡すべきだろうが、私の環境ではModelSimが32ビット動作限定なのでDPI-C経由でライブラリと上手く接続できない。従ってとりあえずJSONでダンプするのが最初の作戦としては良い気がする。

色々試行して、とりあえず内部の情報を1サイクルごとにダンプするような機能を書いた。以下のような感じだ。

f:id:msyksphinz:20210311001213p:plain

とりあえずやってみてわかったことは、何も考えずにすべてダンプすると情報量が多すぎて結局VCDを出力しているのと変わらない。Validでない要素は出力しないようにするとか、もう少し工夫が必要な気がする。