・そんなところで10月である。
・パッケージマネージャでインストールできるVerilatorが4.038。新しいのはtarしてインストールスクリプトでも動かしてできないのかなと思ったけど、ソースコードを持ってきてビルドしろということ。まぁ、やっても良いのだけどなぁと思いながら
各ディストリビューションのバージョンごとのVerilatorのバージョンのリストがあった。Ubuntuだと、22.04だと4.038、24.04になると5.020という。
・としたら、24.04にアップデートすると良いのかな?ということでとりあえず今の22.04の仮想ディスクをコピー。Windowsと違ってライセンスの問題が無いから気楽で良い。これで「ソフトウェアの更新」をしたら「アップデートする?」というダイアログがでたので、やらせてみる。少々時間がかかったけど、なんとか終了。
・が、何故かアプリが全然動かない。ブラウザは平気だけど、Quartusもダメ出しパッケージマネージャすら動かない。psしてみるとプロセスは起きているのでなにかにブロックされているのかな。
・なんだかなと思いながらダメ元で再起動したら何も問題なく動くように。何だったのかよくわからないけどまぁいいか。
・あとはパッケージマネージャでアンインストールして再インストール。とりあえず4.038で動いていたものを動かしてみたらOK。
・しかし、テストベンチがC++だといろいろおまじないがいるんだなぁと思いながら検索していたら「Ver5以降はHDL(含SystemVerilog)でテストベンチが書けるようになったよ」という話を見かける。
・ならばということでお試ししてみる。
・が、そのままでは素直にいかないでWarningやらError。ただ、メッセージをよく眺めると対処方法がわかる感じ。
・とりあえず、
・"<=じゃないだろ”と言っていそうなところを"="にする
・テスト対象のファイル(”DUT”と呼ぶらしい)の頭にも"`timescale 1ns/1ps"を追加
・テストベンチで%5とかやっていたところで” /* verilator lint_off WIDTHTRUNC */を付けろ”と言っていたので、テストベンチの中に(このままコメントとして)追加。
という3点を変更。
・これで
verilator -Wall --trace --binary counter.v tb.v
なんて具合にすれば実行ファイルがobj_dirディレクトリ(デフォルトで勝手に作られる)の下にできる。
verilator -Wall --trace --binary counter.v tb.v -o ../test
という具合に-oオプションをつけてみたら、カレントディレクトリと同じところにtestという実行ファイルができる。
・あとは、この実行ファイルを実行してやれば(IcarusVerilogのときのvvpみたいなものか)テストベンチの中に書いた$dumpfileで指定したvcdファイルが生成される。これをgtkwaveなりtwinwaveで表示すれば良い。
・そうなるとVSCodeと連携させてみたくもなるかな。まぁ、とりあえずVSCodeをVerilog対応させておこう。「Masahiro Hiramori」さん作成の「Verilog-HDL/SystemVerilog/Bluespec SystemVerilog」プラグインを入れておく。キーワード類が色分けされたり入力時に自動的にいろいろ補完されたりといろいろ便利そうだ。
・で、これのコンフィグレーションメニューを見ていたらVerilatorを使った構文チェック(linter)もできるようだ。単に降りて行ってプルダウンメニューからVerilatorを選ぶだけ。これで試しにSystemVerilogなソースを読ませて、わざとミスを作ってセーブするとエラー箇所に波線が引かれてマウスカーソルを当てるとどういうエラーなのか教えてくれる。いいじゃないかいいじゃないか。
・ということでDSimとVerilatorを比較してみたりしていたら、値が不定のときにDSimは”X"になってくれるけど、Verilatorでは0になっていたりする。このあたり、要注意だな。