Arduino MKR VIDOR 4000のFPGA部分については、githubのvidor-librariesにいくつかサンプルがあるようです。この中の、VidorBitstreamが詳しそうな感じなのでVidorBitstreamのReadmeを読みながら作業してみます。
冒頭の部分は要約すると、「対象はFPGA開発プロセスに慣れたユーザーである」「FPGAのネイティブ開発はサポートは難しいので限定的」ということみたいです。
ディレクトリ構成は以下の通りのようです。
- IP IPブロックのソースコード。
- projects 各ボード用のサンプルプロジェクト。
- constraints 各ボード用の制約ファイル。ピン配置とタイミング制約を含む。
- TOOLS FPGAイメージを生成するためのスクリプトとツール
- distrib コンパイル中にツールチェーンによって作成されたディレクトリ。プロジェクトをコンパイルすることによって作成されたArduinoライブラリが含まれている。
リポジトリのダウンロードと展開
まずはリポジトリをダウンロードして展開します。まず、VidorBitstreamをZIPでダウンロード。ダウンロードしたVidorBitstream-release.zipを~/intelFPGA_liteディレクトリの下に移動し、ここに展開しました。
NIOS II Command Shellの起動
NIOS II Command Shellを開いてシェルスクリプトを起動する必要がある、ということなのですが、Windows版はStartメニュー内にあるようですが、Linux版はnios2edsディレクトリ内にあるようなので、
~$ ./intelFPGA_lite/18.1/nios2eds/nios2_command_shell.sh ------------------------------------------------ Altera Nios2 Command Shell [GCC 4] Version 18.1, Build 625 ------------------------------------------------ ~$
として起動します。プロンプトは一切変わらないようなので、要注意かもしれません。
(Windows版はCygwinが起動するようですが)
QuartusのIPにパッチ適用
次に、QuartusのIPにパッチをあてます。
~/intelFPGA_lite/VidorBitstream-release/TOOLS/scripts$ ./apply_quartus_patches.sh PATCH_VERSION 18.0 ACTUAL_VERSION 18.1 xargs: dos2unix: そのようなファイルやディレクトリはありません patching file pgm/arduino_generic_qspi_controller2/HAL/inc/arduino_generic_quad_spi_controller2.h patching file pgm/arduino_generic_qspi_controller2/HAL/src/arduino_generic_quad_spi_controller2.c patching file pgm/arduino_generic_qspi_controller2/N25Q016.qprs patching file pgm/arduino_generic_qspi_controller2/arduino_asmi2_qspi_interface.sv.terp patching file pgm/arduino_generic_qspi_controller2/arduino_asmi2_qspi_interface_hw.tcl patching file pgm/arduino_generic_qspi_controller2/arduino_asmi_parallel2_hw.tcl patching file pgm/arduino_generic_qspi_controller2/arduino_asmi_parallel2_hw_proc.tcl patching file pgm/arduino_generic_qspi_controller2/arduino_generic_qspi_controller2_hw.tcl Hunk #2 succeeded at 152 (offset 8 lines). Hunk #3 succeeded at 273 (offset 8 lines). Hunk #4 succeeded at 285 (offset 8 lines). Hunk #5 FAILED at 503. Hunk #6 succeeded at 590 with fuzz 2 (offset 23 lines). 1 out of 6 hunks FAILED -- saving rejects to file pgm/arduino_generic_qspi_controller2/arduino_generic_qspi_controller2_hw.tcl.rej patching file pgm/arduino_generic_qspi_controller2/arduino_generic_quad_spi_controller2_sw.tcl Hunk #1 FAILED at 16 (different line endings). Hunk #2 FAILED at 50 (different line endings). 2 out of 2 hunks FAILED -- saving rejects to file pgm/arduino_generic_qspi_controller2/arduino_generic_quad_spi_controller2_sw.tcl.rej patching file pgm/arduino_generic_qspi_controller2/inc/arduino_generic_quad_spi_controller2_regs.h patching file altera_components.ipx Hunk #2 succeeded at 9771 (offset 54 lines). Hunk #3 succeeded at 9864 (offset 54 lines). Hunk #4 succeeded at 16247 (offset 54 lines). xargs: dos2unix: そのようなファイルやディレクトリはありません patching file arduino_16550_uart/arduino_16550_uart_hw.tcl patching file arduino_16550_uart/arduino_16550_uart_sw.tcl patching file arduino_16550_uart/HAL/inc/arduino_16550_uart_fd.h patching file arduino_16550_uart/HAL/inc/arduino_16550_uart.h patching file arduino_16550_uart/HAL/src/arduino_16550_uart_fd.c patching file arduino_16550_uart/HAL/src/arduino_16550_uart_init.c patching file arduino_16550_uart/HAL/src/arduino_16550_uart_ioctl.c patching file arduino_16550_uart/HAL/src/arduino_16550_uart_read.c patching file arduino_16550_uart/HAL/src/arduino_16550_uart_write.c patching file arduino_16550_uart/inc/arduino_16550_uart_regs.h ~/intelFPGA_lite/VidorBitstream-release/TOOLS/scripts$
うーん、~/interlFPGA_line/18.1/ip/altera/pgm の下のファイルでいくつかパッチ当てに失敗してしまったようですが、このまま進めてみます。
makeCompositeBinaryのコンパイル
make_composite_binary.goをコンパイルするためにはgoが必要ですのでインストールします。
$ sudo apt install golang-go
引き続いて、コンパイルします。
$ cd intelFPGA_lite/VidorBitstream-release/TOOLS/makeCompositeBinary/ $ go build -o makeCompositeBinary make_composite_binary.go
TOOLS/scriptsディレクトリにパスを通す、ということなのですが、どうするか考えた挙句、NIOS II Command Shellの実体であるintelFPGA_lite/18.1/nios2eds/nios2_command_shell.sh を修正して、
env_var_prepend "${HOME}/intelFPGA_lite/VidorBitstream-release/TOOLS/scripts"
を179行目付近(env_var_prepend が unset される前あたり)に1行追加して対応しました。
VidorGraphicsのリポジトリダウンロードと展開
VidorGraphicsのリポジトリをZIPでダウンロードして、ダウンロードしたVidorGraphics-release.zipを~/intelFPGA_liteディレクトリの下に移動し、ここに展開しました。
VidorGraphicsのビルド
展開した VidorGraphics-release をビルドしようとしたのですが、 projects ディレクトリがありません。実際には VidorBitstream-release/project の下に、MKRVIDOR4000_graphics ディレクトリがありました。なので、先のリポジトリダウンロードも意味がなかったことになります。
で、結局、別のシェルを起動して、ビルドにトライします。
$ ./intelFPGA_lite/18.1/nios2eds/nios2_command_shell.sh $ cd intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/ $ time build_all.sh : : : real 6m56.265s user 10m57.052s sys 0m16.226s $
ということで、11分くらいで一応正常終了したようです。ちなみに使用したPCのスペックは、
- Intel(R) Core(TM) i3-3220T CPU @ 2.80GHz
(CPUファンはCeleron G530のものの方が大型で冷えそうなのでそちらを使用。実際TDPもG530の方が大きい。) - マザーボード ASRock H61M-ITX
- メモリ 8GB
- SSD Crucial CT120M500SSD1(120GB)
- OS LinuxMint19.1 MATE 64bit
といったところです。
生成したファイルをArduino IDEに取り込む
ビルドに成功すると、VidorBitstream-release ディレクトリの下に distrib というディレクトリができて、更にその下に MKRVIDOR4000_graphics ディレクトリができていました。このディレクトリをZIPで圧縮して、MKRVIDOR4000_graphics.zip を作成します。
Arduino IDEで「スケッチ」→「ライブラリをインクルード」→「ZIP形式のライブラリをインストール」で ~/intelFPGA_lite/VidorBitstream-release/distrib/MKRVIDOR4000_graphics.zip を指定してインストールします。すると、 ~/Arduino/libraries の下に展開して取り込まれました。スケッチ例にもカスタムライブラリのスケッチ例として取り込まれました。
同様に、MKRVIDOR4000_peripheralsでもビルドしてみました。
$ cd ~/intelFPGA_lite/VidorBitstream-release/projects $ ls MKRVIDOR4000_graphics MKRVIDOR4000_pacman MKRVIDOR4000_peripherals MKRVIDOR4000_template_bare MKRVIDOR4000_template_mbox $ cd MKRVIDOR4000_peripherals/ $ time build_all.sh : : : real 5m12.539s user 8m48.694s sys 0m15.755s $
distribの下の MKRVIDOR4000_peripherals ディレクトリをそのまま~/Arduino/libraries の下にコピーしてもライブラリとして認識されるようです。
生成したものを動かしてみる
Arduino IDE上でカスタムライブラリのスケッチ例を動かしてみました。
- そもそも書き込みにめったに成功しない・・・・
⇒ HDMIケーブルを刺していると、そもそもリセットがなかなか掛からない。 - HDMIケーブルを抜いてから書き込んでみる
⇒ VidorDrawLogoは全く動いてない・・・。VidorEncoderも動いている気がしない・・・。うーん。パッチ当てに失敗しているあたりが関係しているのだろうか・・??
なんか、ARM側とFPGA側の通信が全くうまく行ってない気がする。とりあえず、また明日・・・orz