VerilatorでCPU(SN/X)のシミュレーションをすると、大きなプログラムは
ちゃんとVCDファイルを作って、波形表示ができるけれど、小さなプログラムは
何も波形が出力されないという事象が発生していた。
色々考えても分からないので、Verilatorの作者にメールしてデバッグを
お願いしようと考え、VerilogファイルとテストベクターのC++ファイルを
送ったが、ふと思いついて、チェックしてみると、やはり自分のテストベクターに
問題があるような気がして、修正したら問題点が解消した。
作者にはお詫びのメールを送っておいた。
問題は何かというと、ダンプファイルはあるクラスのインスタンスが
作成とファイルへの吐き出しを担当しているのだが、クラスインスタンスの
ディストラクタが呼ばれるとバッファされているトレースデータを吐かずに
そのままお亡くなりになる。
そこで、ディストラクタが起動される前に明示的にcloseを呼び出すようにしたら、
ちゃんと動くではないか。
本来はディストラクタで開いているファイルがあれば閉じるのが普通の実装だと
思うけれど、そこまで要求する必要はないので、とりあえずは自分のスクリプトを
修正することとした。
本来はどっちがいいんだろうね?