この記事は、NetBSD Advent Calendar 2025の25日目の記事です。
はじめに
本当は、PyRTLで書いたロジックをTnag Nano 9Kで動かしてみたいのですが、これから勉強しないといけないので、しばらく先に進めそうにありません。 と言うことで、22日目と23日目でVHDLを使ってみていましたが、その際に試していたNVCというVHDLのシミュレーターについて、試したことを書いておきたいと思います。
NVCできること
NVCは、GHDLとは違い、合成をすることはできません。 あくまで、IEEE 1076-2008のほとんどをシミュレーションできるだけのようです。 VHDLについては、普通の利用者は、GOWIN FPGA Designerを使うでしょうから、良いシミュレーターであるだけでも大きな意味があるのだと思います。 NVCはJ-Core Open Processorでも使われているようです。
NVCをインストールする
pkgsrc/cad/nvcとして、nvc-1.18.2を用意しました。 この後にインポートしておきたいと思います。
と言うことで、以下のようにインストールすれば良いでしょう。
# cd /usr/pkgsrc/cad/nvc # make install
これによって、/usr/pkg/bin/nvcがインストールされます。
これを使って、22日目のGHDLによるシミュレーション用のMakefileに、NVCを使ったパターンも追加してみます。
analysisをするにはanalysisnvcターゲット、elaborateにはelaboratenvcターゲット、シミュレーションを実行してvcdウェーブフォームファイルを得るにはrunnvcターゲットを用意しました。
$ cat Makefile
TARG= counter
GHDL_FLAGS+= -fsynopsys
.PHONY: analysis elaborate run clean analysisnvc elaboratenvc runnvc
analysis: ${TARG}.vhdl
ghdl -a ${GHDL_FLAGS} ${TARG}.vhdl
ghdl -a ${GHDL_FLAGS} ${TARG}_tb.vhdl
analysisnvc: ${TARG}.vhdl ${TARG}_tb.vhdl
nvc -a ${TARG}.vhdl ${TARG}_tb.vhdl
elaborate: work-obj93.cf
ghdl -e ${GHDL_FLAGS} ${TARG}
ghdl -e ${GHDL_FLAGS} ${TARG}_tb
elaboratenvc: analysisnvc
nvc -e counter_tb
run: elaborate
ghdl -r ${GHDL_FLAGS} --time-resolution=ns ${TARG}_tb --vcd=counter.vcd --stop-time=1ms
runnvc: elaboratenvc
nvc -r --format=vcd --wave=counter-nvc.vcd --stop-time=1ms counter_tb
clean:
rm -f counter.vcd
rm -f work-obj93.cf
rm -f counter-nvc.vcd
rm -fr work
ただし、nvcの生成したcounter-nvc.vcdファイルのタイムスケールはfs単位になっていて、変更ができないようです。
結果のvcdファイルをGtkWaveで表示してみる
Zoom-outしていくと、下図のように表示できました。 既定の表示は非常にZoom-inされた状態ですが…。
これで、GHDLだけでなくシミュレーションを実行できるようになりました。 検証も確実さを上げることができそうです。

0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。