2016年5月3日火曜日

FPGArduino: miniSpartan6+にarduinoのスケッチをアップロードする方法


twitterのつぶやきで、FPGAにArduinoを実装するプロジェクトの存在を知りました。


RISC-V / MIPS software / hardware Arduino FPGA stack

手持ちのminiSpartan6+でArduinoのスケッチを動かすまでにまあまあ苦労したので、手順を共有します。

使用したもの

■FminiSpartan6+
FPGAボードです。
下記のサイトから(記事作成時点では$105で)買えます。

miniSpartan6+ with Spartan 6 LX 25

■Ubuntu14.04がインストールされたPC
xc3sprogが使える状態のubuntuです。
インストールしていないと多分エラーが出ます。
xc3sprogインストールは下記の記事で行っています。

ubuntuからminiSpartan6+にテストプログラムを送信する

■ArduinoIDE-1.6.8
ubuntuに標準で入っているのは1.0系なので、1.6未満のバージョンを使用されている方は、下記のサイトから最新版をダウンロードしてください。

Arduino Software

手順

全体像

  • Arduino IDEにFPGArduinoをインストール
  • ujprogのコンパイルと設置
  • sudoでArduino IDEを起動
  • miniSpartan6+ツールを設定
  • ブートローダーを書き込む(Burn Bootloader)
  • スケッチをアップロード


上から順に説明していきます。

Arduino IDEにFPGArduinoをインストール

Arduino1.6系はボードマネージャという機能が使えるようになっていて、FPGArduinoはその機能を利用してインストールできます。


ボードマネージャを起動する前に、ファイル -> 環境設定 を開いて、「追加のボードマネージャのURL」に下記のurlを記述します。
urlを記述したらOKを押して環境設定を閉じます。

http://www.nxlab.fer.hr/fpgarduino/package_f32c_core_index.json

次に、ツール -> マイコンボード -> ボードマネージャ を選択します。


FPGArduinoのインストールボタンを押します。


50MBから100MB位をダウンロードするため、まあまあ時間がかかります。

ujprogのコンパイルと設置

ujprogとはFPGArduinoで使われているファイルアップロードのためのソフトウェアです。
ボードマネージャーで取得するujprogだと下記のエラーが出ます。

TX error at 80000000
ftdi_set_latency_timer() failed

ubuntuでは期待通りには動かないようなので、下記のコマンドでソースをコンパイルして、Arduinoのujprogを置き換えます。

cd ~/gitprojects
git clone git@github.com:f32c/tools.git
cd tools/ujprog
cp Makefile.linux makefile
make
cp ujprog ~/.arduino15/packages/FPGArduino/tools/ujprog/1.0.0/ujprog

sudoでArduino IDEを起動

2016/5/3時点では、fpgaへブートローダーを書き込むにはsudo権限が必要なので、Arduinoをsudoで起動します。
(FPGArduinoの作成者によると、sudo 権限無しでも書き込めるようにツールを改良予定ということなので、もしかすると記事をご覧になっている時にはsudo無しで大丈夫かもしれません。)

sudoでarduinoのシェルを実行しただけでは、インストールしたファイルが読み込まれないので、下記のコマンドでrootにシムリンクを設置します。

sudo ln -s /home/asuki/.arduino15 /root/

上記の設定をすれば、下記のコマンドで期待通りに起動できるはずです。

sudo ~/arduino-1.6.8/arduino

ちなみに、sudoで起動しないと、fpgaにデータを書き込もうとする時に下記のエラーが出ました。

Open On-Chip Debugger 0.9.0 (2015-06-17-22:32)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 774 $ OS: Linux
Free software: If you contribute nothing, expect nothing!
Feedback on success/failure/enhancement requests:
    http://sourceforge.net/mail/?group_id=170565 
Check Sourceforge for updates:
    http://sourceforge.net/projects/xc3sprog/develop

Could not open FTDI device (using libftdi): inappropriate permissions on device!
Unable to access FTDI device with either libftdi or FTD2XX
Error while burning bootloader.

miniSpartan6+のためにツールの値を設定

下記のようにツールの値を設定します。


なお、2016/5/3時点では、Upload bitstreamでFLASHを選択しても書き込まれるのはブートローダーだけなので、ArduinoのプロジェクトはFPGAの電源を落とすかリセットボタンを押すと消えます。

ブートローダーを書き込む(Burn Bootloader)

ツールの一番下のメニューを選択し、ブートローダを書き込みます。


ブートローダーが書き込めると、LEDが4つごとにフワフワ光ります。


ちなみに、ブートローダー書き込み時に、下記のエラーが出た場合は、

/home/asuki/.arduino15/packages/FPGArduino/tools/openocd/0.9.0/bin/openocd: error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory
Error while burning bootloader.

下記のコマンドでライブラリをインストールすれば、動くようになります。

sudo apt-get install libhidapi-dev

スケッチをアップロード

ブートローダーが書き込めたら、Arduinoのスケッチがアップロード出来ようになっています。
LEDを点滅させるスケッチ(ファイル -> スケッチの例 -> 01.Basics -> Blink)をアップロードすると、5番のLEDが点滅するようになりました。



FPGArduinoで作っているCPUのサンプルスケッチ(ファイル -> スケッチの例 -> f32c_VGATextConsole -> c2_spriters)をアップロードしてHDMI接続すると、ファミコンみたいな画面が出ます。



以上です。
面白がってもらえたり、何かの参考になれば嬉しいです。

参考

0 件のコメント :