QuickLogic Feather お試しめも

9 min read読了の目安(約8400字

QuickLogic おためしメモ

とりあえずQuickLogic Feather S3お試ししたのでメモ置いとく。適宜更新予定。

参考ページ

https://github.com/QuickLogic-Corp/quicklogic-fpga-toolchain/releases/download/v1.3.0/Symbiflow_v1.3.0.gz.run
  • 手順は quicklogic-fpga-toolchainREADME.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秒

書き込み?

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

ビルド

  • とりあえず 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
  • ちゃんと白色になったのでいけたっぽい
    • くっそ眩しいけどな!