タグ別アーカイブ: vivado

ZyboをTutorialで試す その6 BOOT.binの生成

続きです。引き続きTutorialFPGAの部屋を参考にします。

ここからまたWindowsに戻ります。Vivadoでzybo_bsd.xprを開きます。FileメニューからExport→Export Hardwareを選択するとExport Hardwareダイアログが表示されます。Include bitstreamにチェックを入れてOKをクリックします。

続いてFileメニューからLaunch SDKを選択します。Launch SDKダイアログが表示されるので、デフォルトのままOKをクリックします。しばし待つとEclipseベースらしきSDKのIDE (GUI)が立ち上がります。セキュリティの確認ダイアログが表示された時はプライベートネットワークのアクセスを許可して下さい。

SDKの真ん中のペインにsystem.hdfが表示されていると思います。Address Mapの一覧にmyLed_0があることが確認できます。

FileメニューからNew→Application Projectと選択すると、Application Projectダイアログが表示されます。Project Nameに "FSBL" と入力し、他の項目はデフォルトのままNextで次へ進みます。Template一覧からZynq_FSBLを選択し、Finishをクリックします。しばらく待つとSDKの真ん中のペインに system.mss タブが追加されます。

さて、ここで、電源on/offの前後でもZyboのMACアドレスが変わならいようにするため、ファイルを一つ差し替えます。Zynq Base Systemのsource/vivado/SDK/fsbl/fsbl_hooks.cを適当なエディタで開いて全体をクリップボードにコピーします。続いてSDKの左側ペインからFSBL→src→fsbl_hooks.cと選択してファイルを開き、全体を選択して丸々ペーストして保存します。

編集後の保存時に自動でリビルドされますが、気になるようであればProjectメニューからClean...を選択し、表示されたダイアログのOKをクリックするとクリーン後に自動ビルドされます。ビルドされたファイルは source\vivado\hw\zybo_bsd\zybo_bsd.sdk\FSBL\Debug\FSBL.elf として出力されています。

SDK左側ペインのProject ExplorerからFSBLを右クリックし、Create Boot Imageを選択すると、Create Zynq Boot Imageダイアログが表示されます。Boot image partitions一覧にデフォルトでFSBL.elfとsystem_wrapper.bitは入っていますので、右側のAddボタンでAdd partitionダイアログを開き、LinuxでビルドしてWindowsにコピーしてきたu-boot.elfを選択します。Partition Typeが(デフォルトの)datafileになっていることを確認してOKでダイアログを閉じ、Boot image partitions一覧にu-boot.elfが追加されたことを確認します。

Output pathのBrowseボタンをクリックして出力先をZybo Base Systemのsd_image/BOOT.binに変更し、"Create Image"ボタンでBOOT.binを生成します。

ZyboをTutorialで試す その5 U-Bootのビルド

前々回の続きです。引き続きTutorialFPGAの部屋を参考にします。

LinuxへのSDKのインストールが完了したら、環境変数の設定をしておきます。SDKを使う都度、設定してもよいのですが、 面倒なので ~/.bashrc の末尾に追記しておきます。

$ vi ~/.bashrc
...
source /opt/Xilinx/SDK/2015.4/settings64.sh

2016/02/08追記: この設定を行うと、LD_LIBRARY_PATHも変更されます。その影響で、apt-get等の一部のコマンド実行時にリンカのエラーが表示されるようになります。ご注意下さい。

続いて、ビルドに必要なコマンド, パッケージ類をインストールしましょう。ビルドに必要なmakeの他に、64bit環境で32bitアプリを動かすためのライブラリも必要です (SDK同梱のバイナリは64bit版ではなく32bit版のようです)。これをしないと、クロスコンパイラはインストールされてあるのに "no such file or directory" のようなエラーが吐き出されます。

$ sudo apt-get update
$ sudo apt-get install make
...
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libc6:i386

では、U-Bootのコンパイルを行います。チュートリアルのセクション名にもあるように、master-nextブランチからgit cloneしてくるのがポイントです。

$ git clone -b master-next https://github.com/DigilentInc/u-boot-Digilent-Dev.git
...
$ cd u-boot-Digilent-Dev
$ make CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zybo_config
...
$ make CROSS_COMPILE=arm-xilinx-linux-gnueabi-
...

特にエラー等が表示されずにmakeが終了されたらu-bootのコンパイルに成功しています。makeを実行したディレクトリ内にu-bootが生成されていると思います。これをZybo Base Systemの中のsd_imageディレクトリに u-boot.elf というファイル名でコピーしておきます。

ZyboをTutorialで試す 番外編1 Vivadoセットアップ(Debian)

番外編(?)です。

前回、ビットストリームを生成できましたので、次はU-Bootのコンパイルなのですが、ここからはLinuxのクロス環境で作業します。Debian testing環境上にVivado WebPACKをインストールしようとしたところ、64bit環境なのが正しく検出されずインストールできません。

これに対応するには、インストーラの起動オプションに--confirmを付けて、展開されたインストールスクリプトを手動で編集する必要があります。詳細はXilinxのフォーラムを参照して下さい。

2016/02/07追記: sudoでrootとしてインストールするとMATEのアプリケーション一覧に登録されないので、sudoを使わず一般ユーザ権限でインストールするように変更しました;

$ chmod +x ./Xilinx_Vivado_SDK_2015.4_1118_2_Lin64.bin
$ sudo chmod 777 /opt
$ ./Xilinx_Vivado_SDK_2015.4_1118_2_Lin64.bin
...
ERROR: This installation is not supported on 32 bit platforms.
$ ./Xilinx_Vivado_SDK_2015.4_1118_2_Lin64.bin --confirm
...
About to extract 19 KB in /tmp/xxxxxxxxxx ... Proceed ? [Y/n]
...
OK to execute: ./xsetup   ? [Y/n]

最初の確認メッセージで、インストーラの展開先が分かります。二つ目の確認メッセージでエンターを押して先に進める前に、別のターミナルを開くあるいはCtrl-Zでインストーラを中断して、インストールスクリプトを編集します。

$ vi /tmp/xxxxxxxxxx/xsetup
...
# ERROR out if this installation is running on 32 bit OS
# and does not support 32 bit installation
if [ "$(uname -m)" != "x86_64" ]; then
...

unameコマンドのオプションを -i から -m に変更して保存し、インストーラに戻ってxsetupを実行します。インストーラを進めていくと、インストールするコンポーネントの選択画面が表示されます。どうやらデフォルトでは "Software Development Kit" (SDK)が選択されていませんので、これにチェックを忘れず入れて、インストールを進めましょう。

続きを読む

ZyboをTutorialで試す その4 ビットストリームの生成

前回の続きです。引き続きTutorialFPGAの部屋を参考にします。

zybo_bsd.xprを開いているVivadoの画面に戻り、"Flow Navigator"の"IP Integrator"から"Open Block Design"を選択してダイアグラムを開きます。適当に空いている箇所を右クリックして"Add IP..."を選択するとダイアログが表示されます。検索窓に"my"と入力すると、先ほど作成したmyLed_v1.0が表示されますのでこれを選択し、エンターを押すとダイアグラム上にmyLed_0が追加されます。

先の手順でLEDを削除したあたりにドラッグします。チュートリアルでは "Run connection automation" が表示されるとありますが、表示されませんので、"myLed_0"の"S_AXI"を右クリックして"Make Connection..."を選択します。表示されたダイアログで "M00_AXI" を選択して"OK"をクリックすると、ダイアログ上でも結線されます。

"myLed_0"の"s_axi_aclk"と"s_axi_aresetn"も結線します。ダイアログ上の"myLed_0"のそれぞれから出ている横線の上にカーソルを移動すると鉛筆アイコンになるので、その状態でそれぞれ他のIPのaclkとaresetnが接続されている配線までドラッグして結線します。

ダイアグラム上に残っている"LEDs_4Bits"を右クリック→"Delete"で削除します。

"myLed_0"の"led[3:0]"を右クリックし、"Create Port..."を選択します。デフォルトの入力値のまま"OK"をクリックするとダイアグラムに"led[3:0]"というポートが作成され、"myLed_0"の同名のポートに自動的に接続されます。

※ここの記述はチュートリアルにはありません。この時点で、"myLed_0"にアドレスが割り当てられていないそうです。ダイアグラムのペインの"Address Editor"タブを開いてみますと、確かに"Unmapped Slaves"に表示されています。この"myLed_0"を右クリックして "Auto Assign Address" を選択すると自動でアドレスが割り当てられ、割り当て完了のダイアログが表示されますので"OK"で閉じます。

ここで一旦保存します。

続いて、"Sources"ペインの"Sources"タブを選択して"Constraints"→"constrs_1"→"base.xdc (target)"と選択してbase.xdcをダブルクリックして開きます。右側のペインにソースコードが表示されますので、7行目から11行目の"leds_4bits_tri_o"を"led"に置換します。

set_property PACKAGE_PIN M14 [get_ports {led[0]}]
set_property PACKAGE_PIN M15 [get_ports {led[1]}]
set_property PACKAGE_PIN G14 [get_ports {led[2]}]
set_property PACKAGE_PIN D18 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]

編集を終えたら保存し、ビットストリームを生成します。"Flow Navigation"ペインの"Program and Debug"にある"Generate Bitstream"を選択します。"No Implementation Results Available"ダイアログが表示されますので"Yes"を選択すると、"Generate Bitstream"ダイアログが表示されてビットストリームの生成が始まります。

少し待つと"Launch Run Critical Messages"ダイアログが表示されますが、気にせず"OK"で閉じます。ここからしばらく時間が掛かります。動いているか分からないと不安な時は、下部ペインの"Log"タブを開いてログを眺めてみましょう。

ビットストリームの生成に成功すると、"Bitstream Generation Completed"ダイアログが表示されます。"Open Implemented Design"にチェックを入れて"OK"をクリックして内容を確認してみます。

ZyboをTutorialで試す その3 IPコアの作成2

前回の続きです。引き続きTutorialFPGAの部屋を参考にします。

edit_myLed_v1_0プロジェクトを開いた状態で Sourcesペインで myLed_v1_0_S_AXI_inst - myLed_v1_0_S-AXI (myLed_v1_0_S_AXI.v) をダブルクリックするとエディタで、myLed_v1_0_S_AXI.vが開かれます。

18行目の "// Users to add ports here" に続けて "output wire [3:0] led, "を追記します。

 // Users to add ports here
 output wire [3:0] led, // 追記
 // User ports ends

393行目の "// Add user logic here" に続けて assign led = slv_reg0[3:0]; を追記します。

 // Add user logic here
 assign led = slv_reg0[3:0]; // 追記
 // User logic ends

上記の編集が終わったら、次はSourcesペインの myLed_v1_0 (myLed_v1_0.v) をダブルクリックしてエディタで開きます。同様に、18行目に追記します。

 // Users to add ports here
 output wire [3:0] led, // 追記
 // User ports ends

51行目に ".led(led)," を追記(挿入)します。

 ) myLed_v1_0_S_AXI_inst (
 .led(led), // 追記 (挿入)
 .S_AXI_ACLK(s_axi_aclk),

続いて、"Flow Manager"ペインの"Project Manager"から"Package IP"を選択します。"Packaging Steps"の"Customization Parameters"を選択して、右ペイン最上部に"Merge changes from Customization Parameters Wizard"というリンクが表示されますので、これをクリックしておきます。"Pack"Ports and Interfaces"を選択して右ペインに"led"があることを確認し、"Customization GUI"を選択して右ペインに今回作成中のIPのGUIが表示されることを確認します。

最後に"Review and Package"を選択します。右ペイン最下部の"Re-Package IP"ボタンを押してIPを作成します。"Finished packaging 'myLed_v1.0' successfully' というダイアログが出たらIPの作成に成功です。"OK"をクリックしてダイアログを閉じます。

ZyboをTutorialで試す その1 Vivadoセットアップ (Windows)

2016/02/08追記: このシリーズの表題を変更しました。

なぜかFarnellにある “Embedded Linux Hands-on Tutorial for the ZYBO”FPGAの部屋を参考に、Zynqをカスタマイズしてみたいと思います。

まずはVivadoをインストールします。インストールの詳細はDigilentのWikiを参考にして下さい。Voucherを使ってDesign Editionを利用する場合は秋月にあるFAQをどうぞ。次に、TutorialにはありませんがBoard Fileをインストールします。詳細は同じくDigilentのWikiを参考にして下さい。基本的にはzipを展開して上書きです。

準備が済んだら、Zybo Base System DesignをDLして(Windowsであれば)Cドライブに展開します。とりあえず今回はC:\local\zybo_base_systemとして配置します。

C:\local\zybo_base_system\source\vivado\hw\zybo_bsd\zybo_bsd.xprをダブルクリックすると、VivadoのOlder Project Versionダイアログが表示されます。"Automatically~" にチェックが入っているのを確認して "OK" をクリックすると、 "Open Project" ダイアログに続いて "Default Library"ダイアログが表示され、"OK" をクリックで今度は "Project Upgraded" ダイアログが表示されます。

"Report IP Status"ボタンをクリックすると、Vivadoに "IP Status" ペインがハイライトされて表示されます。ペインの下部にある "Upgrade Selected" ボタンをクリックすると "Upgrade IP" ダイアログが表示され "OK" をクリックします。 "Upgrade IP" ダイアログが表示されて進捗が表示された後に "Critical Messages" ダイアログに "There were six critical warning messages while Upgrade IP." とのメッセージと詳細が表示されます。ここでは "OK" をクリックしてダイアログを閉じておきます。特に問題はないようです。

一旦Vivado終了して、再度zybo_bsd.xprを開きます。

Parallella Porcupine attached

Parallella 開発環境

intel Edisonに浮気をしつつParallellaでも遊ぶ準備を進めています。

まず、Parallellaの拡張ボードであるPorcupineRS componentsから購入しました。リンク先の写真にはありませんが、下の写真の現在のrevisionではRaspberry Piのカメラを接続するためのコネクタが追加されています。

Parallella Porcupine

Parallella Porcupine

PorcupineにはJTAG用のポートが用意されていますので、秋月でDigilentのJTAG-HS3ケーブルを購入しました。ただ、このケーブルをPorcupineの裏面に直接刺すとスタックできなくなりますので、フラットケーブルも購入しました。XilinxのJTAGは2.54mmピッチではなく2mmピッチの14ピン (7ピン2列)なので注意が必要です。フラットケーブルとHS3を繋ぐためのピンヘッダも秋月で購入です。

最後に開発環境です。つい最近、Vivado HLSが無償のWebPACK Editionでも利用できるようになりましたが、ここはやはりDesign Suiteを使いたいところです。フル機能の正規ライセンスはお高いので、Zynq-7000に限定されたDesign Editionが利用可能になるvoucher(バウチャー, =クーポン)を秋月で購入しました。DigilentのZYBO用らしいですが、同じZynqなので気にしない方向で。