- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!GateMate
Cologne Chipの[GateMate FPGA|https://www.colognechip.com/programmable-logic/gatemate/]というFPGAを知ったので[評価ボード|https://www.colognechip.com/programmable-logic/gatemate-evaluation-board/]遊んでみた.
ツールチェインの大部分にオープンソースソフトウェアが使われている,というのが面白い.
ツールチェインの詳細は,[Technology Brief of GateMate FPGA Technology|https://colognechip.com/docs/CologneChip-GateMate-Productbrief-latest.pdf]にある.
とりあえずは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|https://www.colognechip.com/programmable-logic/gatemate-evaluation-board/]の Evaluation Board Master CCF constraints file からダウンロードできる.
複数ビットな信号とピン配置の設定がどうなってるかわかりさえすれば,あとはなんとかなるかな.
ダウンロードできるccfだとクロックまたぎの設定はよくわからないな.