この記事は、NetBSD Advent Calendar 2025の23日目の記事です。
はじめに
22日目の記事では、GHDLを導入し、VerilogのプログラムをVHDLに移植して、そのウェーブフォームを見て、どうやら正しく移植できていそうということが確認できました。 今回は、YosysでVHDLで書かれたロジックを合成し、FPAGに反映してみます。
ghdl-yosys-pluginを導入する
ghdl-yosys-pluginをpkgsrc/devel/ghdl-yosys-pluginとしてインポートしました。 これを以下のようにインストールしておきます。 21日目を参照して、kgsrc/devel/nextpnr-himbaechelとpkgsrc/devel/openFPGALoaderをインストールしておいてください。 pkgsrc/deve/yosysは、以下のようpkgsrc/devel/ghdl-yosys-pluginをインストールすると、依存パッケージとしてインストールされます。 もちろん、先にインストールされていても全く問題ありません。
# cd /usr/pkgsrc/devel/ghdl-yosys-plugin # make install
合成と配置配線、ロードを実行する
元々のverilog用のMakefileを改造して、以下のようなVHDL用のMakefileを用意しておきます。
$ cat Makefile
BOARD=tangnano9k
FAMILY=GW1N-9C
DEVICE=GW1NR-LV9QN88PC6/I5
all: counter.fs
# Analysis
analysis: counter.vhdl
ghdl -a -fsynopsys counter.vhdl
# Synthesis
counter.json: analysis
yosys -m ghdl -p "ghdl -fsynopsys counter; synth_gowin -top counter -json counter.json"
# Place and Route
counter_pnr.json: counter.json
nextpnr-himbaechel --json counter.json --write counter_pnr.json --freq 27 --device ${DEVICE} --vopt family=${FAMILY} --vopt cst=${BOARD}.cst
# Generate Bitstream
counter.fs: counter_pnr.json
gowin_pack-3.14 -d ${FAMILY} -o counter.fs counter_pnr.json
# Program Board
load: counter.fs
openFPGALoader -b ${BOARD} counter.fs -f
.PHONY: load analysis
.INTERMEDIATE: counter_pnr.json counter.json
また、なんとなくVerilogで小文字だった入出力のポート名称を大文字にしてしまったので、Tang Nano 9Kの端子への接続を指定するtangnano9k.cstファイルも以下のように作成しておきます。
$ cat tangnano9k.cst IO_LOC "CLK" 52; IO_PORT "CLK" PULL_MODE=UP; IO_LOC "LED[0]" 10; IO_LOC "LED[1]" 11; IO_LOC "LED[2]" 13; IO_LOC "LED[3]" 14; IO_LOC "LED[4]" 15; IO_LOC "LED[5]" 16;
ここまで来たら、実際にTang Nano 9KをNetBSDマシンに接続して、以下のように実行します。
$ make load
書き込みが終わると、Tang Nano 9Kの橙色のLCDの点滅が開始されます。 どうやらVerilogの場合と同様に2進数でカウントアップしてくれているようです。
これで、VerilogだけでなくVHDLでも、Tang Nano 9Kを利用できそうです。
でも私の本当の目的はPyRTLを使ってみることなのです。 これについても機会を見付けて試してみて、書いておきたいと思います。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。