VidorBitstreamがビルドできない原因を探ってみました

気を取り直して、MKRVIDOR4000_graphicsがビルドできない原因を考えてみます。

まずは改めてビルドして気になるところを洗い出してみます。

$ ./intelFPGA_lite/18.1/nios2eds/nios2_command_shell.sh 
------------------------------------------------
Altera Nios2 Command Shell [GCC 4]

Version 18.1, Build 625
------------------------------------------------
$ cd intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/
$ time build_all.sh
2019.02.24.15:35:06 Info: Saving generation log to /home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/MKRVIDOR4000_graphics_lite_sys/MKRVIDOR4000_graphics_lite_sys_generation.rpt
2019.02.24.15:35:06 Info: Starting: <b>Create HDL design files for synthesis</b>
2019.02.24.15:35:06 Info: qsys-generate /home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/MKRVIDOR4000_graphics_lite_sys.qsys --synthesis=VERILOG --output-directory=/home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/MKRVIDOR4000_graphics_lite_sys/synthesis --family="Cyclone 10 LP" --part=10CL016YU256C8G
2019.02.24.15:35:06 Info: Loading build/MKRVIDOR4000_graphics_lite_sys.qsys
  :
  :
##########################################
#        using local bsp settings        #
##########################################
nios2-bsp: Using /home/xxx/intelFPGA_lite/18.1/nios2eds/sdk2/bin/bsp-set-defaults.tcl to set system-dependent settings.
nios2-bsp: Updating existing BSP because ./build/software/launcher_lite_bsp/settings.bsp exists.
nios2-bsp: Running "nios2-bsp-update-settings --settings ./build/software/launcher_lite_bsp/settings.bsp --bsp-dir ./build/software/
  :
  :
INFO: Updating BSP settings...
INFO: nios2-bsp-update-settings --settings ./build/software/launcher_lite_bsp/settings.bsp --bsp-dir ./build/software/launcher_lite_bsp --sopc ./build/MKRVIDOR4000_graphics_lite_sys.sopcinfo --script /home/xxx/intelFPGA_lite/18.1/nios2eds/sdk2/bin/bsp-set-defaults.tcl 
  :
  :
INFO: Initializing BSP components...
  :
  :
INFO: Finished initializing SOPC project local software IP. Total time taken = 2 seconds
INFO: Searching for BSP components with category: driver_element
INFO: Searching for BSP components with category: software_package_element
INFO: No memory regions found in BSP Settings File. Default memory regions generated. 
INFO: Found Flash Memory: qspi_avl_mem for CPU: nios2_gen2_0
INFO: Loading drivers from ensemble report. 
INFO: Finished loading drivers from ensemble report.
INFO: Tcl message: "No STDIO character device"
INFO: Tcl message: "System timer device is timer_0"
INFO: Tcl message: "Default instruction linker sections mapped to onchip_memory2_0"
INFO: Tcl message: "Default data linker sections mapped to SDRAM_ARBITER"
INFO: Tcl message: "Setting specified section .rwdata to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .bss to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .heap to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .entry to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .text to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .rodata to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .data to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .stack to map to region onchip_memory2_0"
INFO: Tcl message: "No bootloader located at the reset address."
INFO: Tcl message: "Application ELF allowed to contain code at the reset address."
INFO: Tcl message: "The alt_load() facility is enabled."
INFO: Tcl message: "The .rwdata section is copied into RAM by alt_load()."
SEVERE: Driver not found: 'arduino_generic_quad_spi_controller2 of any version
WARNING: Tcl command "set_driver arduino_generic_quad_spi_controller2 qspi" error: Driver not found: 'arduino_generic_quad_spi_controller2 of any version
  :
  :
Compiling sf.c...
nios2-elf-gcc -xc -MP -MMD -c  -I./HAL/inc -I. -I./drivers/inc -pipe -D__hal__ -DALT_NO_C_PLUS_PLUS -DALT_NO_CLEAN_EXIT -D'exit(a)=_exit(a)' -DALT_NO_EXIT -DALT_USE_DIRECT_DRIVERS -DALT_NO_INSTRUCTION_EMULATION -DALT_USE_SMALL_DRIVERS -DSMALL_C_LIB -DALT_SINGLE_THREADED  -DNO_RPC=1  -Os -g -Wall -DFREE_VERSION=1 -mno-hw-div -mno-hw-mul -mno-hw-mulx -mgpopt=global   -o obj/drivers/src/sf.o drivers/src/sf.c
drivers/src/sf.c:31:52: fatal error: arduino_generic_quad_spi_controller2.h: No such file or directory  <---- これが致命的にだめな気がする
compilation terminated.
Makefile:681: recipe for target 'obj/drivers/src/sf.o' failed
make[1]: *** [obj/drivers/src/sf.o] Error 1
Makefile:900: recipe for target '../launcher_lite_bsp-recurs-make-lib' failed
make: *** [../launcher_lite_bsp-recurs-make-lib] Error 2
make: ディレクトリ '/home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/software/launcher' から出ます
make failed
##########################################
#        using local bsp settings        #
##########################################
  :
  :
2019/02/24 15:41:20 - (情報) elf2flash: args = --input=build/software/MKRVIDOR4000_graphics/MKRVIDOR4000_graphics_lite.elf --output=build/output_files/MKRVIDOR4000_graphics_lite.flash --base=0x008E0000 --end=0x008FFFFF --verbose --save
2019/02/24 15:41:20 - (普通) elf2flash: Starting
2019/02/24 15:41:20 - (普通) elf2flash: Done
projects
ip
cp: -r not specified; omitting directory './ip/GFX/arduino/Vidor_GFX/examples'
cp: -r not specified; omitting directory './ip/QUAD_ENCODER/arduino/VidorEncoder/examples'
cp: -r not specified; omitting directory './ip/NEOPIXEL/arduino/VidorNeopixel/examples'
cp: -r not specified; omitting directory './ip/MIPI_RX_ST/arduino/VidorCamera/examples'

real	6m31.672s
user	10m18.175s
sys	0m15.768s
$

途中で

SEVERE: Driver not found: 'arduino_generic_quad_spi_controller2 of any version
WARNING: Tcl command "set_driver arduino_generic_quad_spi_controller2 qspi" error: Driver not found: 'arduino_generic_quad_spi_controller2 of any version
  :
  :
drivers/src/sf.c:31:52: fatal error: arduino_generic_quad_spi_controller2.h: No such file or directory  <---- これが致命的にだめな気がする
compilation terminated.

というところがあって、arduino_generic_quad_spi_controller2が絡んで致命的にだめな感じです。

~/intelFPGA_lite/18.1/ip/altera/pgm/arduino_generic_qpsi_controller2 の下でリジェクトされたパッチが2つあったのですが、そのうちの対象の一つが arduino_generic_quad_spi_controller2_sw.tcl というファイル名なので、何か関連がありそうです。リジェクトされたパッチ arduino_generic_quad_spi_controller2_sw.tcl.rej を見てみます。

--- pgm/arduino_generic_qspi_controller2/arduino_generic_quad_spi_controller2_sw.tcl	2018.18-22 19:45:29.112314100 +0200
+++ pgm/arduino_generic_qspi_controller2/arduino_generic_quad_spi_controller2_sw.tcl	2018.18-22 19:45:06.047573800 +0200
@@ -16,10 +16,10 @@
 #
 
 # Create a new driver
-create_driver altera_generic_quad_spi_controller2
+create_driver arduino_generic_quad_spi_controller2
 
-# Associate it with some hardware known as "altera_generic_quad_spi_controller2"
-set_sw_property hw_class_name altera_generic_quad_spi_controller2
+# Associate it with some hardware known as "arduino_generic_quad_spi_controller2"
+set_sw_property hw_class_name arduino_generic_quad_spi_controller2
 
 # The version of this driver
 set_sw_property version 18.1
@@ -50,11 +50,11 @@
 #
 
 # Header files
-add_sw_property include_source HAL/inc/altera_generic_quad_spi_controller2.h
-add_sw_property include_source inc/altera_generic_quad_spi_controller2_regs.h
+add_sw_property include_source HAL/inc/arduino_generic_quad_spi_controller2.h
+add_sw_property include_source inc/arduino_generic_quad_spi_controller2_regs.h
 
 # C/C++ source files
-add_sw_property c_source HAL/src/altera_generic_quad_spi_controller2.c
+add_sw_property c_source HAL/src/arduino_generic_quad_spi_controller2.c
 
 # This driver supports HAL & UCOSII BSP (OS) types
 add_sw_property supported_bsp_type HAL

この中に、

 # Create a new driver
-create_driver altera_generic_quad_spi_controller2
+create_driver arduino_generic_quad_spi_controller2

というようなところがあるので、なんか関連はありそうです。arduino_generic_quad_spi_controller2_sw.tcl の中をみても、なぜリジェクトされたのかイマイチよくわかりません(適用されても良さそうな気がする)が、とにかく手動で適用してみます。(追記: 要は、arduino_generic_quad_spi_controller2_sw.tcl というファイルの中の16行目からの10行くらいと、50行目からの11行くらいのところにある「altera_generic_quad_spi_controller2」を「arduino_generic_quad_spi_controller2」に書き換える、ということです。)

もう一つのarduino_generic_qspi_controller2_hw.tclに対して1箇所失敗している方はかなり雰囲気が違うので、まずはこのまま再トライしてみることにしてみます。

$ time build_all.sh
2019.02.24.16:18:05 Info: Saving generation log to /home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/MKRVIDOR4000_graphics_lite_sys/MKRVIDOR4000_graphics_lite_sys_generation.rpt
2019.02.24.16:18:05 Info: Starting: <b>Create HDL design files for synthesis</b>
2019.02.24.16:18:05 Info: qsys-generate /home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/MKRVIDOR4000_graphics_lite_sys.qsys --synthesis=VERILOG --output-directory=/home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/MKRVIDOR4000_graphics_lite_sys/synthesis --family="Cyclone 10 LP" --part=10CL016YU256C8G
  :
  :
INFO: Finished initializing SOPC project local software IP. Total time taken = 2 seconds
INFO: Searching for BSP components with category: driver_element
INFO: Searching for BSP components with category: software_package_element
INFO: No memory regions found in BSP Settings File. Default memory regions generated. 
INFO: Found Flash Memory: qspi_avl_mem for CPU: nios2_gen2_0
INFO: Loading drivers from ensemble report. 
INFO: Finished loading drivers from ensemble report.
INFO: Tcl message: "No STDIO character device"
INFO: Tcl message: "System timer device is timer_0"
INFO: Tcl message: "Default instruction linker sections mapped to onchip_memory2_0"
INFO: Tcl message: "Default data linker sections mapped to SDRAM_ARBITER"
INFO: Tcl message: "Setting specified section .rwdata to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .bss to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .heap to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .entry to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .text to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .rodata to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .data to map to region onchip_memory2_0"
INFO: Tcl message: "Setting specified section .stack to map to region onchip_memory2_0"
INFO: Tcl message: "No bootloader located at the reset address."
INFO: Tcl message: "Application ELF allowed to contain code at the reset address."
INFO: Tcl message: "The alt_load() facility is enabled."
INFO: Tcl message: "The .rwdata section is copied into RAM by alt_load()."
INFO: Default memory regions will not be persisted in BSP Settings File.
INFO: Generated file "/home/xxx/intelFPGA_lite/VidorBitstream-release/projects/MKRVIDOR4000_graphics/build/software/launcher_lite_bsp/settings.bsp"
INFO: BSP settings updated
  :
  :
Compiling sf.c...
nios2-elf-gcc -xc -MP -MMD -c  -I./HAL/inc -I. -I./drivers/inc -pipe -D__hal__ -DALT_NO_C_PLUS_PLUS -DALT_NO_CLEAN_EXIT -D'exit(a)=_exit(a)' -DALT_NO_EXIT -DALT_USE_DIRECT_DRIVERS -DALT_NO_INSTRUCTION_EMULATION -DALT_USE_SMALL_DRIVERS -DSMALL_C_LIB -DALT_SINGLE_THREADED  -DNO_RPC=1  -Os -g -Wall -DFREE_VERSION=1 -mno-hw-div -mno-hw-mul -mno-hw-mulx -mgpopt=global   -o obj/drivers/src/sf.o drivers/src/sf.c
Compiling tmr.c...
  :
  :
create ram + flash app.ttf
2019/02/24 16:24:33 - (情報) elf2flash: args = --input=build/software/MKRVIDOR4000_graphics/MKRVIDOR4000_graphics_lite.elf --output=build/output_files/MKRVIDOR4000_graphics_lite.flash --base=0x008E0000 --end=0x008FFFFF --verbose --save
2019/02/24 16:24:33 - (普通) elf2flash: Starting
2019/02/24 16:24:33 - (普通) elf2flash: Done
projects
ip
cp: -r not specified; omitting directory './ip/GFX/arduino/Vidor_GFX/examples'
cp: -r not specified; omitting directory './ip/QUAD_ENCODER/arduino/VidorEncoder/examples'
cp: -r not specified; omitting directory './ip/NEOPIXEL/arduino/VidorNeopixel/examples'
cp: -r not specified; omitting directory './ip/MIPI_RX_ST/arduino/VidorCamera/examples'

real	6m45.698s
user	10m49.909s
sys	0m15.988s
$

ということで、当該箇所では特にエラーなく完了しました。

・・・ということで試してみると、

4:3サイズで全面白になった後、しばらく経ってからこんな表示に。
まあ、全く動いてないわけではないので、だいぶ進歩しました^^;

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

Quartus Prime Lite と ModelSim Starter をインストール

昨日ダウンロードした Quartus Prime Lite Edition と ModelSim Start Edition をインストールします。といっても、やり方がわからなかったので、適当です。^^;
OSはもちろんLinuxMint19.1 MATE edition 64bitです。

ホームディレクトリにダウンロードした以下のファイルをおいてあります。

  • ModelSimSetup-18.1.0.625-linux.run
  • Quartus-lite-18.1.0.625-linux.tar
  • QuartusLiteSetup-18.1.0.625-linux.run
  • cyclone10lp-18.1.0.625.qdz

この状態で実行属性をつけて、動かしてみました。

$ chmod a+x *.run
$ ./QuartusLiteSetup-18.1.0.625-linux.run

すると、ウィザードが立ち上がり、何も考えずに勧めていくと、途中でダウンロードしたファイルをすべて検出した状態でインストールするソフトウェアをすべて表示してくれました。

さらに進めていくと、

という表示が出て、勝手に起動する模様・・・・に見えましたが、

quartus: error while loading shared libraries: libpng12.so.0: cannot 
open shared object file: No such file or directory

というエラーを出して止まっていまいました。

$ sudo apt install libpng-dev

として、インストールしたディレクトリを削除して再度トライするも、やっぱりだめ。今度は、

$ echo "deb http://mirrors.kernel.org/ubuntu/ xenial main" | sudo \
tee -a /etc/apt/sources.list && sudo apt-get update && sudo apt \
install -y --allow-unauthenticated libpng12-0

を実行してから、再度インストールしたディレクトリを削除してトライ。今度は

という画面が出て、フル機能版のライセンスを買うか聞いてきます。趣味・勉強の範囲なので、そんな余裕もないので、真ん中を選んで実行してみます。

という感じで、Quartus Prime Lite Edition が無事に起動しました。

しかし、デスクトップにショートカットは生成されませんでしたので、デスクトップを右クリックして「ランチャの生成」で手動でランチャを作っておきます。

  • 名前は「Quartus Prime Lite Edition」
  • コマンドは「/home/(ユーザー名)/intelFPGA_lite/18.1/quartus/bin/quartus」
  • アイコンは「intelFPGA_lite/18.1/quartus/adm/quartusii.png」

として作成しておきます。作成したものをダブルクリックすると起動することを確認しておきます。

さらに、こちらの情報によるとModelSimを動かすには、32bit用のライブラリが要るらしいので以下の手順でインストールしておきます。

$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install build-essential gcc-multilib g++-multilib lib32z1 \
lib32stdc++6 lib32gcc1 expat:i386 fontconfig:i386 libfreetype6:i386 \
libexpat1:i386 libc6:i386 libgtk-3-0:i386 libcanberra0:i386 \
libpng12-0:i386 libice6:i386 libsm6:i386 libncurses5:i386 zlib1g:i386 \
libx11-6:i386 libxau6:i386 libxdmcp6:i386 libxext6:i386 libxft2:i386 \
libxrender1:i386 libxt6:i386 libxtst6:i386

MicroHDMI-HDMIケーブルを入手

昨日ポチったHDMIケーブルは無事に届きました。

こちらの記事を参考に、ブートローダの更新、VidorGraphicsライブラリの追加、スケッチ例のVidorLogoDrawの書き込みを行ったところ、接続してあるHDMIディスプレイに無事に表示がされました。

インテルFPGAプログラムに登録して、インテル® Quartus® Prime 開発ソフトウェア・ライト・エディション(ライセンス不要、無償)をダウンロードします。自分は(相変わらず)Linux版をダウンロードしました。tarアーカイブで6.2GBという巨大なものです。4MB/s程度しか出ず、時間がかかります。

ここで待っている間にシミュレータについて調べます。昔からModelSimの規模と性能の限定版があるはずなので・・・と思ったら、「ModelSim* – Intel® FPGA Starter Edition ソフトウェア」というのがあって、無償で10000ラインまでというものがあるのですが、なんとWindows版しかありません。・・・と思ったら、いろいろリンクを辿っていたら、Linux版にたどり着きました。ダウンロードページの「個別ファイル」の中にあるようです。この中から、とりあえず

  • Quartus Prime (includes Nios II EDS)
  • ModelSim-Intel FPGA Edition (includes Starter Edition)
  • Cyclone 10 LP device support

のダウンロードも仕掛けて今日は寝ます。

Arduino MKR VIDOR 4000を入手

FPGAが載っているArduinoがあるのをTwitterで知って、ついポチってしまいました。アメリカからドイツ経由で2週間強、ようやく届きました。

届いたら、箱がやや潰れてました(泣)。中身は帯電防止袋なしで、帯電防止スポンジに刺さった状態のArduino MKR VIDOR 4000がゴロッと入ってました。幸い、外観上の異常はなさそうです。

で、使い方を調べていたら、HDMIケーブルはMini HDMIじゃなくて、Micro HDMIが必要なことが判明。早速アマゾンでポチりました。

搭載しているチップは、

  • CPU Atmel ATSAMD21
  • FPGA Intel Cyclone10 10CL016YU256C8G
  • DRAM Alliance Memory AS4C4M16SA-7BCN
  • FLASH Winbond 25Q16DVN1G

のようです。CycloneがALTERAのロゴでなくなっているのは時代を感じさせられるのと、Allianceのメモリは昔痛い目にあったので大丈夫なのか不安です(笑)。

しかし、もうチップの刻印が見えない見えない(涙)。ルーペで必死に見ました。

このルーペは40年ほど前に父がドイツに出張した際に買ってきてくれたお土産です。残念ながら、自分が小さい頃だったので、こんなものに頼らなくても小さな文字までバッチリ見えたので扱いを雑にしていたため、レンズの中央部分に細かい傷がたくさんできていて、かなり見辛くなってしまっています。

レンズをよく見ると、ESCHENBACH W-GERMANY という刻印が見えます。W-GERMANYは西ドイツ製ということだと思います。(当時はまだ西ドイツと東ドイツに分かれていて、ベルリンの壁もあった時代です)

で、ESCHENBACHって何かと調べたら、メーカーの名前(ブランド)のようで、実は同じ(に見える)モデルが今では国内でも買えるようです。

Arduino IDE 1.8.8を動かしてみた

久しぶりに Arduino IDE を使ってみたくなったのでLinux Mint 18.1 LTS上にインストールしてみました。ターゲットボードはずっと前に秋月で買った ESP32-DevKitC ESP-WROOM-32開発ボード です。

インストールの手順はこちらに記載されているとおりなのですが、なにはともあれ、こちらからArduino IDE 1.8.8 Linux 64bitをダウンロードして、ホームディレクトリに展開します。

展開したディレクトリに移動して、インストールスクリプトを起動します。

~$ cd arduino-1.8.8/
~/arduino-1.8.8$ ls
arduino                 examples    java       reference      tools-builder
arduino-builder         hardware    lib        revisions.txt  uninstall.sh
arduino-linux-setup.sh  install.sh  libraries  tools
~/arduino-1.8.8$ ./install.sh 
Adding desktop shortcut, menu item and file associations for Arduino IDE... done!
~/arduino-1.8.8$

これでメニュー上に追加されます。

「ファイル」→「環境設定」で環境設定画面を開きます。設定の下の方にある「追加のボードマネージャのURL」に「https://dl.espressif.com/dl/package_esp32_index.json」を入力(下記)します。

次に、「ツール」→「ボード」→「ボードマネージャ」

で「esp32 by Espressif Systems」のところにある「インストール」ボタンをクリックしてインストールします。完了すると「ツール」→「ボード」でESP32を搭載したボードが大量に出てくるので、「ESP32 Dev Module」を選択します。

次に、サンプルを動かしてみます。今回はNTPサーバーにアクセスして時刻を取得するサンプルを動かしてみました。まず、「スケッチ例」→「ESP32」→「Time」→「SimpleTime」でサンプルを開きます。開いたら、上の方にある ssid と password の部分に手近な無線LANアクセスポイントの設定を記述します。

チェックマークをクリックしてビルドすると、エラーが発生します。いろいろ調べると、python の pyserial モジュールがないために発生するようなので、インストールします。そもそも、pip も入っていなかったので、インストールしました。

$ sudo apt install python-pip
$ sudo pip install pyserial

ビルドが通るようになったので、書き込んでみます。

「ツール」→「シリアルポート」で /dev/ttyUSB0 を選択した後、「ツール」→「シリアルモニタ」でシリアルモニタを開き、速度を 115200bps に設定します。その後で、右矢印マークをクリックするとビルドして書き込み、実行します。

うまく行けば、NTPサーバから取ってきた時刻(UTC)が表示されるはずです。

意外にあっさりと動いてしまいました。

CircuitPythonのAPI

サンプルは動きましたが、いじって遊ぶにはAPIがわらかないことにはどうにもなりません。Circuit Playground Express上のCircuitPythonのAPIを調べてみました。

どうやってたどり着いたかよくわからない(汗)のですが、メモしておきます。

CircutPythonを試してみました

最近始めたTwitterで見かけたCircutPythonというキーワードを調べていくと、その正体はどうやら USBマスストレージ+MicroPython であることがわかりました。PythonのスクリプトをUSBマスストレージに見えているハードウェアデバイスに放り込んでやると、そのまま実行できるというお手軽この上ない環境のようです。エディタとしてGeanyを使えば、更にお手軽になる予感がします。

今回は、ハードウェアとしてはadafruitのCircuit Playgound Expressを購入してみました。

早速購入したCircuit Playgound ExpressをUSBでPCに接続すると、デモ動作をします。

ブザー音を出しながら10個のフルカラーLEDが順に点灯、LinuxMint上で

$ screen /dev/ttyACM0 115200

とすると、シリアルコンソールにCapsenseセンサ、スライドスイッチ、明るさセンサ、加速度センサ、温度センサの各状態を出力しているのが見えます。プッシュスイッチを押すとその状態も出力されます。スライドスイッチを左にスライドすると出力が変わるとともにブザー音がなくなります。

この状態ではCircuit Pythonは使えないので、CircuitPythonをインストールします。

まず、Circuit Playgound Express用のCircuitPythonをguthubからダウンロードします。現時点では CircuitPython 3.1.2が最新のようです。ディレクトリの中からCircuit Playground Express用のadafruit-circuitpython-circuitplayground_express-3.1.2.uf2をダウンロードします。ダウンロードできたら、これをインストールします。

Circuit Playgound Expressの中央のリセットスイッチを押すと、すべてのフルカラーLEDが一瞬赤になった後、緑になり、USBマスストレージ(ボリューム名CPLAYBOOT)として認識されます。このモードがブートローダモードと呼ぶようです。(なお、Circuit Playgound Expressの場合は、購入直後はリセットスイッチ1回でブートローダモードに入れますが、通常はリセットスイッチ2回連打する必要があるようで、そのタイミングが結構難しいようです。公式サイトでは何度が繰り返してやってみろ、と書いてあります。)

マスストレージとして認識されているCPLAYBOOTに先ほどダウンロードしたadafruit-circuitpython-circuitplayground_express-3.1.2.uf2をドラッグ&ドロップで書き込むと、USBコネクタ脇の小さな赤いLEDが高速で点滅した後、フルカラーLEDが一つだけ一瞬白色で点灯、その後、一旦CPLAYBOOTというボリューム名のマスストレージは閉じて、今度はCIRCUITPYというボリューム名のマスストレージが開きます。これがCircuitPythonとして扱われるドライブのようです。

公式サイトでは、Windows/MacOS/Linux用にMu Editorというのをインストールするよう勧めていますので、試してみます。

$ sudo apt-get install python3
$ sudo apt-get install python3-pip
$ sudo apt-get install python3-setuptools
$ pip3 install mu-editor

公式サイトのままだと、Setuptoolsがないというエラーが出てしまいますので、先に python3-setuptools をインストールしておきます。また、上記手順のあと、コマンドラインから

$ mu-editor

でmu-editorを起動できるような記述がありますが、一旦再起動(たぶん、ログアウトして再ログインでOK)しないと起動しませんでした。

起動すると、モードの選択が出てきます。

ここでは、一番上の「Adafruit CircuitPython」を選択して、OKをクリックします。
クリックするとコード編集画面に変わります。

公式ページからサンプルコードをコピペします。

これをCIRCUITPYの下にcode.pyという名前で保存すると、LEDが点滅するはずです・・・・・が、点滅しません。別のエディタで見てみると、ファイル自体は存在しているようです。試しに、リセットしてみると・・・・現れたドライブにはファイル名は存在するものの、ファイル自体は空っぽになっていました。何度やっても同じです。
試しに、USBケーブルを抜いて電源を再投入してみると、以降は期待した動作をするようになりました。sleepのパラメータを変えて保存すると直ちに、点滅周期が変わります。

参考:
adafruitのCircuitPythonのページ

MPLAB SNAPのケースを作ってみた

Microchipからリリースされた新しいPIC(だけじゃなくて、AVRとかも扱えるらしい)用デバッガ・プログラマのSNAPが秋月にあったので買ってきました。

いままでのPICkitと違って、こいつはケースがなく、基板剥き出しです。必要なら3Dプリンタで自分でケースを作ってね、ということみたいです。

・・・というわけで、作ってみました。

例によって、スナップフィットで蓋を固定するようにしたので、3Dプリンタで出力した2つの部品以外は必要なく、なかなかいい感じになりました。

LEDの部分は穴を開けるのではなく、厚さを薄くしてありますので、LEDが点灯すると透けて見えます。中にゴミなどが入る心配がないのがいいところです。

秋月GPSモジュールいろいろ

3年ほど前に試してみたGPSモジュールですが、久しぶりに発掘したのでいじってみました。

1.ケースを作ってみた

これまで、とりあえず動かしてみた後放置する原因の一つはむき出しの状態や見栄えの悪い状態で使わざるを得ないことでした。そこで今回はケースを作ってみました。

できるだけ3Dプリンタで出力した部品だけで済ませたいところですが、手を抜いたこともあり、今ひとつといったところです。

2.LinuxMint19で動かしてみた

3年も経っているので、Linux側もそこそこ変わっています。同じ手順で動かしてみようと思ったのですが、思うように動きませんでした。次回動かすためのメモを残しておきます。

(1)動かすのに必要なもの
synapticで、「viking」「gpsd」「gpsd-clients」をインストールします。

(2)USBシリアルを認識、操作できるようにします。
ユーザーをdialoutグループに所属させます。所属させないと /dev/ttyUSB* へのアクセス権がありません。グループに所属させたら、一旦ログアウトしてログインし直します。

(3)PCに接続します

(4)GPSモジュールからデータが来ているか確認します。

$ gpscat -s 9600 /dev/ttyUSB0

(5)gpsdにGPSモジュールを登録します
ここが前回と違うところです。前回はこんなことした記憶がありません。

$ sudo gpsdctl add /dev/ttyUSB0

(6)Vikingで地図上に表示します
操作は概ね同じですが、MapTypeのOpenStreetMap(MapQuest)は変更が必要です。
「Start Realtime Tracking」すると、綺麗に軌跡が描かれるようになりました。

3.GPSモジュールのファームウェアアップデート

秋月の製品ページを見ると、新しいファームウェアがリリースされていて、みちびきの複数機同時運用に対応していました。で、ファームウェアをアップデートしようとアップデートモジュールをダウンロードしたあたりから雲行きが怪しくなりました・・・。
アップデートのためのソフトウェアはWindows用なのですが、PL2303はWindows10では認識しないのです。FT234Xに交換してもいいのですが、FT234XはLinuxでまともに動作しません。うーん、複数機同時対応、試してみたかったんですが・・・。