この記事について
今年(2018年)リリースされたVivado 2018.2を使う流れをざーっと紹介していきます。
基本的にはZYBO (Zynq) 初心者ガイド の内容と同じになります(こちらの記事は2017.4が対象)。今回の2018.2でもほとんど同じ操作でできたので詳細は省いています。
ツールをインストールしてハードウェアを作ってLチカするソフトを作るところまで、一気にやってしまいます。
詳細は書かないので、流れを感じていただければと思います。
環境
- 開発用PC: Windows 10 64-bit
- Vivado 2018.2 WebPACKライセンス
- Xilinx SDK 2018.2
- SDx IDE 2018.2
- ターゲットボード: ZYBO (Z7-20)
Vivado 2018.2 のインストールと設定
Windows PCに開発環境をインストールします。
詳細はZYBO (Zynq) 初心者ガイド (1) 開発環境の準備 をご確認ください。
ダウンロード
Vivado, Xilinx SDK(XSDK), SDxをインストールします。
ポイントとして、「Vivado」のインストーラを使うとVivadoとXSDKが、「SDSoC」のインストーラを使うとVivadoとXSDKとSDSoCがインストールできます。SDSoCのライセンスを持っている人は、どうせならSDSoC用のインストーラを使ってSDSoCも入れておいた方がいいと思います。
インストール
下記のような設定でインストールします。UltraScaleを使っている方はそちらのチェックもお忘れなく。
(追記: たとえ使用するデバイスがZYBOだけでも、Devices for Custom Platformsの所には全てのデバイスにチェックを付けてインストールしておいた方がいいです。でないとVivado HLSでバグを引く可能性があります。)
ライセンスの設定
インストールが完了すると下記のようなLicense Managerの画面が出ます。Connect Nowをクリックして、ライセンスファイルを取得します。(ZYBOだとWebPackライセンス + SDSoCが使えます)
Xilinxのページが開かれるので、ZYBOの方は、ZYBO購入時に付属されているバウチャーの番号を入力してRedeem Nowをクリック。
Vivado Design Suite: HL WebPack 2015 and Earlier LicenseとOEM SDSoC-Zynq Development Voucherを選び、Generate Node-Locked Licenseをクリックして、Xilinx.licを入手します。(メールで送られてきます。またはこのページからダウンロードできます)
License Managerに戻って、先ほどダウンロードしたライセンスファイルをコピーします。
ZYBO用ボードファイルのコピー
DigilentのGithub(https://github.com/Digilent/vivado-boards/archive/master.zip )からボードファイルを取得して、C:\Xilinx\Vivado\2018.2\data\boards\board_files にコピーします。
ハードウェアを作る
動作確認用に、いつも通りLチカをするプロジェクトを作ります。GPIOにはPSのGPIOとPLのGPIOの両方を使ってみます。
詳細は下記記事をご参照ください。
- ZYBO (Zynq) 初心者ガイド (2) Hello Worldプロジェクト
- ZYBO (Zynq) 初心者ガイド (3) PSのGPIOでLチカ
- ZYBO (Zynq) 初心者ガイド (4) PLのAXI GPIOでPSからLチカ
プロジェクトを作る
Board PartにZybo Z7-20を設定して、プロジェクトを作ります(project_1とします)。以下のような、PSとAXI_GPIOを配置したブロックデザインを作ります(design_1とします)。AXI_GPIOはLEDに接続します。
ハードウェアを生成する
作成したブロックデザインをGenerate Output Products、Create HDL Wrapperします。その後、Generate Bitstreamし、Export Hardwareしてhdfファイルを生成します。(操作詳細は上記記事をご確認ください)
最後に、Launch SDKをして、ソフトウェアの開発環境(Xilinx SDK)を立ち上げます。
ソフトウェアを作る
PSとPLのGPIOを制御してLチカするソフトを書きます。
プロジェクトを作る
新しいApplication Projectを作ります。OS Platformはstandaloneにします。Target Hardwareは自動で選択されているdesign_1_wrapper_hw_platform_0にします。Templateとして、Hello Worldを選びます。
自動生成されるhelloworld.cを、下記のように書き換えて実行するとLチカが動きます。
# include <stdio.h>
# include "platform.h"
# include "xil_printf.h"
# include "sleep.h"
# include "xgpiops.h"
# include "xgpio.h"
int main()
{
init_platform();
print("Hello World\n\r");
/*** Set up for PS GPIO ***/
XGpioPs instXGpioPs;
XGpioPs_Config *configXGpioPs;
configXGpioPs = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
XGpioPs_CfgInitialize(&instXGpioPs, configXGpioPs,configXGpioPs->BaseAddr);
/* Set MIO7 as output */
XGpioPs_SetDirectionPin(&instXGpioPs, 7, 1);
XGpioPs_SetOutputEnablePin(&instXGpioPs, 7, 1);
/*** Set up for AXI GPIO ***/
XGpio instXGpio;
XGpio_Initialize(&instXGpio, XPAR_AXI_GPIO_0_DEVICE_ID);
/* Set all of 4 pins(LEDs) as output */
XGpio_SetDataDirection(&instXGpio, 1, 0);
while(1) {
XGpioPs_WritePin(&instXGpioPs, 7, 1); /* Set MIO7 as High */
XGpio_DiscreteWrite(&instXGpio, 1, 0x0F); /* Set all of 4 pins(LEDs) as High */
sleep(1);
XGpioPs_WritePin(&instXGpioPs, 7, 0); /* Set MIO7 as Low */
XGpio_DiscreteWrite(&instXGpio, 1, 0x00); /* Set all of 4 pins(LEDs) as Low */
sleep(1);
}
cleanup_platform();
return 0;
}
おわりに
今のところ、2017.4と2018.2では操作に大きな違いはなさそう。
おまけ
PetaLinuxをWSL Ubuntuにインストールしようとしたけど実行時にエラー
PetaLinuxをWindows Subsystem for LinuxのUbuntuにインストールできないか試してみました。ちなみに、フォーラムではXilinxの人に非サポートだと冷たく言われています。
今回、インストールは成功したけど、プロジェクト作成時にエラーが発生しました。
sudo apt-get install tofrodos gawk xvfb git libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison chrpath socat autoconf libtool texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev screen pax
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt install zlib1g:i386
sudo apt install diffstat xterm unzip
sudo apt-get install rsync
sudo apt-get install locales
sudo dpkg-reconfigure locales
sudo locale-gen en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
sudo apt-get install libgtk2.0-0
sudo apt-get install gcc-multilib
chsh -s /bin/bash
# ここでいったんubuntuを再起動
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
sudo mkdir -p /opt/pkg/petalinux
sudo chown your-user-name /opt/pkg/
sudo chgrp your-user-name /opt/pkg/
sudo chgrp your-user-name /opt/pkg/petalinux/
sudo chown your-user-name /opt/pkg/petalinux/
bash ./petalinux-v2018.2-final-installer.run /opt/pkg/petalinux/
ここまでで、PetaLinuxのインストール自体は出来ました。
後は、環境設定をしてプロジェクトを作ろうとしてみます。
先ほど作成したハードウェア(design_1_wrapper.hdf)はホームディレクトリにコピーしておきます。
cd ~/
source /opt/pkg/petalinux/settings.sh
petalinux-create --type project --template zynq --name Sample01
cd Sample01/
petalinux-config --get-hw-description=../
すると以下のようなエラーが発生。
tak@DESKTOP-1BHE6SR:~/work/peta/aaa$ petalinux-config --get-hw-description=../
INFO: Getting hardware description...
INFO: Rename design_1_wrapper.hdf to system.hdf
[INFO] generating Kconfig for project
ERROR: Failed to generate /mnt/c/asd/dev/wsl_ubuntu/work/peta/aaa/build/misc/config/Kconfig.syshw
ERROR: Failed to Kconfig project
ERROR: Failed to generate System hardware Kconfig file.
ホームディレクトリが/mntだけだダメなのかな?とか思い色々やってみたのですが解決せず。
PetaLinux 2017.4→2018.2への移行
しょうがないので、VirtualBox上のUbuntu 16.04にインストールすることにしました。
注意点として、今回新たにgcc-multilibが必要でした。(僕の環境だけかもしれませんが)
rm -rf /opt/pkg/petalinux/
sudo apt-get install gcc-multilib
sudo mkdir -p /opt/pkg/petalinux
sudo chown your-user-name /opt/pkg/
sudo chgrp your-user-name /opt/pkg/
sudo chgrp your-user-name /opt/pkg/petalinux/
sudo chown your-user-name /opt/pkg/petalinux/
bash ./petalinux-v2018.2-final-installer.run /opt/pkg/petalinux/
メモ: Vivado HLSで新規プロジェクトを作成できない
2018.2に限ったことではないのですが、Vivado HLSでCreate New Projectするとき、Project Configurationの後、Add/Remove FilesでNextボタンをクリックしても画面が変わらないという問題(バグ?)があります。本当だったらSolution Configuration画面に切り替わるはずなのに、Nextボタンを押してもなにも変わりません。
Vivadoをインストールするときに、Devices for Custom Platformsの所で、全てのデバイス(SoCs、7 Series、UltraScale、UltraScale+にチェックを付けると何故か治りました。
既にインストール済みの場合には、スタートメニュー -> Xilinx Design Tools -> Add Design Tools or Devices 2018.2 から追加できます。