Diary/2023-5-14
GateMate
Cologne ChipのGateMate FPGAというFPGAを知ったので評価ボード遊んでみた.
ツールチェインの大部分にオープンソースソフトウェアが使われている,というのが面白い.
ツールチェインの詳細は,Technology Brief of GateMate FPGA Technologyにある.
とりあえずはpre-build版を使ってみる.ダウンロードするツール以外に,
sudo apt install iverilog gtkwave sudo apt install libhidapi-hidraw0
などとして,必要なツールとライブラリをインストールしておく.
- サンプルの合成とP&R
ダウンロードしたら,展開して,
cd cc-toolchain-linux/workspace/blink
でサンプルディレクトリに移動する.
make synth_vlog
でVerilogファイルの合成ができる.synth_vlogの定義は,../config.mkにあって
$(YOSYS) -qql log/synth.log -p 'read -sv $^; synth_gatemate -top $(TOP) \ -nomx8 -vlog net/$(TOP)_synth.v'
となっている.TOPにはblinkが定義してあって,実際に実行されるコマンドは
../../bin/yosys/yosys -qql log/synth.log -p 'read -sv src/blink.v; \ synth_gatemate -top blink -nomx8 -vlog net/blink_synth.v'
これで,net/blink_synth.vが生成される.
make synth_vhdlとすると,
VHDLなsrc/blink.vhdをソースとして
../../bin/yosys/yosys -ql log/synth.log \ -p 'ghdl --warn-no-binding -C --ieee=synopsys src/blink.vhd -e blink; \ synth_gatemate -top blink -nomx8 -vlog net/blink_synth.v'
と,同様にnet/blink_synth.vが生成される.
Verilogから生成したnet/blink_synth.vとVHDLから生成したものを比べると,
微妙にwireが違う程度で,同じような構造が生成されるのが面白い.
シミュレーションは,生成したnet/blink_synth.vをターゲットに実行される.
make synth_sim
とすると,iverilogが使われてシミュレーションされる.
P&Rは,
make impl
とする.コマンドは,
../../bin/p_r/p_r -i net/blink_synth.v -o blink -ccf src/blink.ccf > log/impl.log
だった../blink_00.cfg.bit ができあがった.
- 実機で動かしてみる
FPGAの書き込みは
make jtag
らしい...が,手元の Ubuntu 20.04.6 では,
../../bin/openFPGALoader/openFPGALoader -b gatemate_evb_jtag blink_00.cfg ../../bin/openFPGALoader/openFPGALoader: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ../../bin/openFPGALoader/openFPGALoader) ../../bin/openFPGALoader/openFPGALoader: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ../../bin/openFPGALoader/openFPGALoader) ../../bin/openFPGALoader/openFPGALoader: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ../../bin/openFPGALoader/openFPGALoader) ../../bin/openFPGALoader/openFPGALoader: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ../../bin/openFPGALoader/openFPGALoader) make: *** [../config.mk:39: jtag] Error 1
と言われてしまって動かなかった.
- OpenFPGALoaderのビルドと再挑戦
というわけで,OpenFPGALoaderはビルドすることにした.
sudo apt install libftdi1-2 libftdi1-dev libhidapi-hidraw0 libhidapi-dev \ libudev-dev zlib1g-dev cmake pkg-config make g++ pushd /tmp git clone https://github.com/trabucayre/openFPGALoader.git cd openFPGALoader mkdir build cd build cmake .. make -j sudo make install popd
で,../config.mkのOFLのパスを,/usr/local/bin/OpenFPGALoaderに書き換えて
make jtag
FPGAボードのmini USBコネクタとホストPCを接続しておくと
bitファイルがFPGAに書き込まれて,ボード上のLED D1 の点滅が確認できた.
- ちょっと変更してみる
ちょっと変更,というわけで点滅させるLEDを増やしてみる.
src/blink.vの
output wire led
を
output wire [7:0] led
に,
assign led = counter[26];
を
assign led = counter[26:19];
に変更.
出力LEDを増やした分,ピン配置も変更する必要がある.src/blink.ccf の
Pin_out "led" Loc = "IO_EB_B1"; # LED D1
を
Pin_out "led[0]" Loc = "IO_EB_B1"; # LED D1 Pin_out "led[1]" Loc = "IO_EB_B2"; # LED D2 Pin_out "led[2]" Loc = "IO_EB_B3"; # LED D3 Pin_out "led[3]" Loc = "IO_EB_B4"; # LED D4 Pin_out "led[4]" Loc = "IO_EB_B5"; # LED D5 Pin_out "led[5]" Loc = "IO_EB_B6"; # LED D6 Pin_out "led[6]" Loc = "IO_EB_B7"; # LED D7 Pin_out "led[7]" Loc = "IO_EB_B8"; # LED D8
に変更.
で,合成とP&Rをやりなおして,FPGAに書き込む.
make synth_vlog make impl make jtag
これで,D8からD1にカウンタを出力することができた.
評価ボードのCCFは,GateMateTM FPGA Evaluation Boardの Evaluation Board Master CCF constraints file からダウンロードできる.
複数ビットな信号とピン配置の設定がどうなってるかわかりさえすれば,あとはなんとかなるかな.
ダウンロードできるccfだとクロックまたぎの設定はよくわからないな.