💨
QuickLogic Feather お試しめも
QuickLogic おためしメモ
とりあえずQuickLogic Feather S3お試ししたのでメモ置いとく。適宜更新予定。
参考ページ
-
公式のツールのページ
-
QuickLogicのツールチェインは
Symbiflow
ベースだけど、リポジトリは個別にあるっぽい?- https://github.com/QuickLogic-Corp/quicklogic-fpga-toolchain
- と思ったら、インストーラとドキュメントのリポジトリっぽい。
- 現時点では
V1.3.0
が最新。リポジトリのリリースページからDLできる。
https://github.com/QuickLogic-Corp/quicklogic-fpga-toolchain/releases/download/v1.3.0/Symbiflow_v1.3.0.gz.run
- 手順は
quicklogic-fpga-toolchain
のREADME.md
に書いてある。Dockerfile
もついてくるので、docker使うのもありかもしれん。 - 基本的に
README.md
にしたがえば行けそう - とりあえずまずは手動で。
QuickLogic FPGA toolchainのインストール
- ダウンロードしたrunを実行してインストール
export INSTALL_DIR=$HOME/quicklogic/toolchain/1.3.0
mkdir -p $INSTALL_DIR
bash ./Symbiflow_v1.3.0.gz.run
- なんか
conda installer
とかいう不審な文字が見えたぞ? - インストール終わったので実行環境を設定
export PATH="$INSTALL_DIR/install/bin:$INSTALL_DIR/install/bin/python:$PATH"
source "$INSTALL_DIR/conda/etc/profile.d/conda.sh"
conda activate
-
ql_symbiflow
コマンドが使えるらしいので実行
$ ql_symbiflow -h
Below are the supported commands:
To synthesize and dump a eblif file:
>ql_symbiflow -synth -src <source_dir path> -d <device> -P <package> -t <top> -v <verilog file/files> -p <pcf file>
To run synthesis, pack, place and route, generate bitstream:
>ql_symbiflow -compile -src <source_dir path> -d <device> -P <package> -t <top> -v <verilog file/files> -p <pcf file>
To dump the jlink/post_verilog/header file:
>ql_symbiflow -compile -src <source_dir path> -d <device> -P <package> -t <top> -v <verilog file/files> -p <pcf file> -dump <jlink/post_verilog/header/openocd>
Device supported:ql-eos-s3
Packages supported PD64,PU64,WR42
-h
- とりあえずインストールは成功してそう。
サンプル実行
合成
-
counter_16bit
サンプルを合成する。 - 16bit up counterらしい。
cd $INSTALL_DIR/install/tests/counter_16bit
ql_symbiflow -compile -d ql-eos-s3 -P pd64 -v counter_16bit.v -t top -p chandalar.pcf
- Ryzen-3900Xマシンでビットストリーム書き出しまで48秒
書き込み?
-
README.md
には書き込み方書いてなかったので、ボードの方のドキュメントを見る。 -
ボードをつないだらとりあえず
RST
ボタンを押す。 -
数秒待つと USB-UARTデバイスとして認識する。
-
書き込み方がわからん… JLink必要?
- Advancedには外付けUARTで行けるでってかいてあるが。
- SoCのドキュメント読むか。
-
TRMとDatasheet読んだけどさっぱりわからん。たぶんM4FがFPGA側コンフィグすることになるっぽい。
-
リポジトリあさってたらなんか見つけた。
git clone --recursive https://github.com/QuickLogic-Corp/TinyFPGA-Programmer-Application
pip3 install tinyfpgab
-
OpoenMoko, Inc.
なデバイスあるか確認しろとあるので確認
$ lsusb
...
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 023: ID 1d50:6140 OpenMoko, Inc.
...
- 必要なPythonパッケージを入れる。
pip3 install tinyfpgab
pip3 install pyserial
- 実行
- VSCodeのRemote SSH下なので、X表示できなかったらしい。CLIでもうごくっぽいのでそっちで試す。
$ python3 ~/quicklogic/TinyFPGA-Programmer-Application/tinyfpga-programmer-gui.py
GUI mode disabled: use --help to get help on CLI mode
$ python3 ~/quicklogic/TinyFPGA-Programmer-Application/tinyfpga-programmer-gui.py --help
usage: tinyfpga-programmer-gui.py [-h] [--m4app app.bin]
[--bootloader boot.bin]
[--bootfpga fpga.bin] [--reset]
[--port /dev/ttySx] [--crc] [--checkrev]
[--update] [--mfgpkg qf_mfgpkg/]
optional arguments:
-h, --help show this help message and exit
--m4app app.bin m4 application program
--bootloader boot.bin, --bl boot.bin
m4 bootloader program WARNING: do you really need to
do this? It is not common, and getting it wrong can
make you device non-functional
--bootfpga fpga.bin FPGA image to be used during programming WARNING: do
you really need to do this? It is not common, and
getting it wrong can make you device non-functional
--reset reset attached device
--port /dev/ttySx use this port
--crc print CRCs
--checkrev check if CRC matches (flash is up-to-date)
--update program flash only if CRC mismatch (not up-to-date)
--mfgpkg qf_mfgpkg/ directory containing all necessary binaries
$ python3 ~/quicklogic/TinyFPGA-Programmer-Application/tinyfpga-programmer-gui.py --checkrev
CLI mode
ports = ['/dev/ttyACM1 (QuickFeather)'] 1
Using port /dev/ttyACM1 (QuickFeather)
- とりあえずハードウェア認識はしている
QORC SDK
- どうもFPGA単体コンフィグはできなさそうなので調べてたら、
QORC SDK
というものが用意されている模様。 - FPGA Lチカのやりかたものってる
ビルド
- とりあえず
arm-none-eabi-gcc
あればビルドできるっぽいのでビルドする。
git clone --recursive https://github.com/QuickLogic-Corp/qorc-sdk
cd qorc-sdk/qf_apps/qf_helloworldsw/GCC_Project/
make
- ToinyFPGA-Programmer-Application ながったらしいのでalias入れろと書いてあるので入れておく
- ~/quicklogic/TinyFPGA-Programmer-Application にcloneした場合
alias qfprog="python3 $HOME/quicklogic/TinyFPGA-Programmer-Application/tinyfpga-programmer-gui.py"
書き込み
-
今はWioTerminalが/dev/ttyACM0にささってるのでQuickFeatherは
/dev/ttyACM1
として認識されたらしい。 -
ボード繋いで
RST
おすとカラーLEDが青色で5秒間点滅するので、その間にUSR
を押す。- LEDが緑色に光る
-
これでたぶんブートローダーモードになるんだと思う。
-
どうでもいいがLEDクッソまぶしい。
qfprog --port /dev/ttyACM1 --m4app output/bin/qf_helloworldsw.bin
- こんな感じのメッセージがでて書き込みとベリファイするっぽい。
CLI mode
ports = ['/dev/ttyACM1 (QuickFeather)'] 1
Using port /dev/ttyACM1 (QuickFeather)
Programming m4 application with output/bin/qf_helloworldsw.bin
Erasing designated flash pages
Erase 64.0 KiB ( 0xd8 ) at 0x80000
Erase 32.0 KiB ( 0x52 ) at 0x90000
Erase 4.0 KiB ( 0x20 ) at 0x98000
Erase 4.0 KiB ( 0x20 ) at 0x99000
Erase 4.0 KiB ( 0x20 ) at 0x9a000
Erase 4.0 KiB ( 0x20 ) at 0x9b000
Erase 4.0 KiB ( 0x20 ) at 0x9c000
Writing binary
Write 117064 bytes
[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
Verifying binary
FastREAD 0x0B ( 117064 )
[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
Success: read_back == data
Writing metadata
Erasing designated flash pages
Erase 4.0 KiB ( 0x20 ) at 0x13000
Writing metadata
Write 8 bytes
[X] ]
Verifying metadata
FastREAD 0x0B ( 8 )
[X] ]
Success: read_back == data
-
終わったら
RST
押してリセットして今度はUSR
を押さないで放置 -
screen
とかでUART接続
$ screen /dev/ttyACM1 115200
- なんかコマンドプロンプトっぽいのが表示されるので
diag red
ってやったらLEDが赤色に光る- クッソまぶしい
[0] >
[0] > diag red
[0] > help
help-path: (top)
diag - QuickFeather diagnostic commands
exit - exit/leave menu
help - show help
? - show help
help-end:
[0] >
カスタムFPGAアプリ
-
qf_helloworldhw
がカスタムFPGAアプリらしい。 -
FPGA書き換えてUSB機能がなくなるので、マイコンとUART通信するには外部のUSB-UARTが必要。
-
FPGA書き換えて遊ぶ分には要らなさそう。
-
とりあえずビルド
cd qorc-sdk/qf_apps/qf_helloworldhw/GCC_Project/
make
- 途中で論理合成走ってる
make[1]: Entering directory '/home/kenta/quicklogic/qorc-sdk/qf_apps/qf_helloworldhw/GCC_Project'
ql_symbiflow -compile -src /home/kenta/quicklogic/qorc-sdk/qf_apps/qf_helloworldhw/fpga/rtl -d ql-eos-s3 -t helloworldfpga -v helloworldfpga.v -p quickfeather.pcf -P PU64 -dump header | grep -v "^Warning [0-9]\{1,\}:.*no timing specification"
- 書き込む
qfprog --port /dev/ttyACM1 --m4app output/bin/qf_helloworldhw.bin
- リセットすると緑色でLチカする。
- HDL書き換えて赤色にするのが公式チュートリアルなので、白にしてみよう。
-
qorc-sdk/qf_apps/qf_helloworldhw/fpga/rtl/helloworldfpga.v
を開く - 27行目の
assign greenled = led;
を以下の行で置き換え- 全色にassignして白にしよう。
assign redled = led;
assign greenled = led;
assign blueled = led;
- 再ビルド & 書き込み
make
qfprog --port /dev/ttyACM1 --m4app output/bin/qf_helloworldhw.bin
- ちゃんと白色になったのでいけたっぽい
- くっそ眩しいけどな!
Discussion