VidorBitstreamをビルドしてみる

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)