うちの研究室ではHDLとして専らVHDLを使っている。
そんなわけで今はVHDLで設計をしている。
その記事にも書いたけどVHDLには長所も短所もあるわけだけど、その特徴を踏まえて設計を進めている。
ハードウェアの設計はそうやってVHDLを使っているのだが、
テストベンチはVerilogで書いてシミュレーションを行っている。
最初はテストベンチもVHDLでやろうとしたのだが、かゆいところに手が届かず、Verilogでやることにしたのだ。
VerilogとVHDLが混在していても動作に問題は無い。
元々、Verilogはシミュレーション用の言語だったし、使い方としてはそんなにおかしくないと思っている。
VHDLでテストベンチを書いてて、困ったのはVerilogの$finishに相当するものがないということだった。
wait(ACTIVE==0) $finish;
こんな風に書いておけば、ACTIVEが0になったらシミュレーションを終了してくれる。
便利なので使っていたのだが、VHDLには直接的にこういうことはできない。
assartを使ってシミュレーションを停止させるという方法もあるにはあるようだが。
VHDLでModelSimのシミュレーションを終了する方法 (FPGAの部屋)
あともう1つ、機能的なところだとVHDLではモジュールの内部の信号を取ってきて使えないということも問題になるかも。
Verilogだと uut.foo_count だとかすれば、外に出てない信号もテストベンチ上で使える。
VHDLは行儀がよいのでモジュール内部のことに立ち入ることができない。
それはそれでいいのだけど、ことシミュレーションにおいては、そんなことも言ってられないことがある。
シミュレーションのためだけにモジュールを書き換えたりするのは不便だし、行儀が悪いVerilogの方が便利なことがあるということだ。
VHDLでテストベンチを書いてもシミュレータでモジュール内部の波形を表示することは出来るのだけどね。
今、設計している回路のテストベンチではこの機能は特に使ってないのでどうでもいい話ではあるのだが。
僕にとってはテストベンチがVerilogで書かれてようが、VHDLで書かれてようが問題は無い。
むしろ慣れているVerilogの方が便利だ。
問題は他の人がこの設計を見たときどうかということだ。
それがあるから回路の設計はVHDLで行っているのだが、テストベンチはどうかねぇ。
過去の設計のテストベンチがあれば、動作を理解するのにも役立つだろうけど、それがVerilogだと困ってしまうだろうか。
だけど、僕がもらった過去の設計データにはテストベンチは入ってなかった覚えがあるんだよなぁ。あったのかなぁ。
まぁVHDL使える人なら、Verilog見てもなんとなくわかるとは思うし、そこまで大きな問題にはならないと思うけど。