トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2023-5-14の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!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だとクロックまたぎの設定はよくわからないな.