トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

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だとクロックまたぎの設定はよくわからないな.