RTLシミュレーションにおいて、波形ダンプはとにかくディスク容量を食う。VCSなどが使用するFSDBはともかく、VCDとかで長期間シミュレーションをするととんでもないサイズのVCDファイルが生成されてしまい波形ビューアへのロードも時間がかかる。
なるべく波形を見たくない(というか、デバッグの初期段階において波形からアプローチするのを避けたい)というところから、どういう方法が良いだろうと考えていたが、一つの方法は内部の重要なモジュールの情報をすべてテキストでダンプしてしまうことだろう。
ソフトウェアでも同じだろうが、RTLはすべて階層構造になっているため、Verilifaction用の関数として例えばjson_dump()
関数を用意し、サブモジュールに対して再帰的にjson_dump()
を呼び出すようにして置けば簡単に全モジュールをダンプしてJSON形式で出力することができる。
本当はDPI-Cなどで情報を読み取ってC++などでそのままライブラリとして渡すべきだろうが、私の環境ではModelSimが32ビット動作限定なのでDPI-C経由でライブラリと上手く接続できない。従ってとりあえずJSONでダンプするのが最初の作戦としては良い気がする。
色々試行して、とりあえず内部の情報を1サイクルごとにダンプするような機能を書いた。以下のような感じだ。
とりあえずやってみてわかったことは、何も考えずにすべてダンプすると情報量が多すぎて結局VCDを出力しているのと変わらない。Validでない要素は出力しないようにするとか、もう少し工夫が必要な気がする。