Ultra96の開発環境(Vitis2019.2版)

#ザイリンクス社の新しい開発ツール　Vitis 2019.2
ザイリンクス社から、新しい開発ツールが、２０１９年１０月に発表されました。
隠れた目標は、ソフトウェア技術者にもFPGAを使ってもらおう。ということです。
Ultra96もソフトウェア技術者に対して、使ってもらおうという意図がありますので、
今回は新しい開発ツールのご紹介と、その特徴、インストールの特徴を記述したいと思います。

##Vitis の特徴
Vitis（ヴィティス）は、ソフトウェア開発のように、FPGAを使ってもらおうというために開発されました。
簡単なプラットフォームを用意する必要があるのですが、プラットフォームさえ用意すれば、FPGAの設計の
ほとんどを、Vitisのみで、設計できます。
あらかじめ、ザイリンクスが設計資産を用意してくれることで、ライブラリーを使う感覚で、FPGA設計ができるとともに、
HDL(ハードウェア記述言語）を使ったきめ細かい設計を、同じツールでできるのも特徴です。
そのため、大まかなところを、ソフトウェアで設計をして、動作確認をしたあと、速度的に速くしたいところを、
ピンポイント的に、調整をすればいいので、システム設計のバランスが取りやすく、全体的な設計時間の大幅な短縮も期待できます。

２０２０年１月現在、まだプラットフォームの供給が、十分でなく、ザイリンクス社のボードのみになっています。
そのため、Ultra96を含む他のボードはVitis用プラットフォームを作成をする必要があります。
ここでは、その対象として、プラットフォームを作成できるレベルで、開発環境を整えていきます。

##必要な開発環境
Ultra96を開発するためのFPGA開発環境は次のLinux環境が必要です。
- Red Hat Enterprise Workstation/Server 7.4、7.5、7.6 (64 ビット)
- CentOS 7.4、7.5、7.6 (64 ビット)
- Ubuntu Linux  16.04.5 LTS, 16.04.6 LTS, 18.04.1 LTS, 18.04.2 LTS (64 ビット)
この辺はザイリンクス社のリファレンスガイドがバージョン毎に出ているので、確認してみてください。

RedHatは、有償ですが各種サポートが期待できます。
CentOSは、RedHatの無償版として、公開されています。
Ubuntuは、Linuxの中で現在一番人気があります。無償です。

メモリー要件も厳しく、Ultra96向けで32GB要求されます。ただ、１６GBでも制限はありますが、開発はできます。
HDD(またはSSD)は、100GBのスペースが必要となります。

Linuxを動作させる方法としては、
１：すべてLinuxマシーンにする。　Linuxしか使えなくなります。
２：デュアルブートにする。　　両OSを共存できます。インストールの時に、デュアルブートを選択できます。
３：仮想環境を使う　　　Windowsまたは、MacOS上に、仮想環境のツールをインストールして、その中にLinuxを入れる方法です。Oracl VM VirtualBOXなど有名です。

とありますが、AIを使いたい人は、GPUが必要となりますので、３の仮想環境は選択筋から外れます。

Linuxをインストールする方法は、他のホームページにもいろいろ書いてありますので、参照していただければと思います。
また、AIを使いたい人はDockerという、仮想環境が更に必要になります。

##インストール方法

2019.1までは、開発ツールは選択できましたが、Ultra96をVitisで選択する場合はほぼ、選択筋がなくなります。
インストールするためには予めいくつかのライブラリーが必要となります。

###事前ライブラリーの準備
Linuxの場合、事前にライブラリーのインストールが必要となります。
私の場合はubuntuで、行っていますので、その手順を書いておきます。
他のライブラリーの場合は準備しておいてください

```sh:vitis_install.sh
	sudo dpkg --add-architecture i386 
	sudo apt update 
	sudo apt install apt-utils libc6:i386 libncurses5:i386 libstdc++6:i386 g++-multilib libgtk2.0-0:i386 dpkg-dev:i386 libxtst6:i386 default-jre unzip net-tools libtext-csv-perl libcanberra-gtk-module libcanberra-gtk3-module lsb-core opencl-headers ocl-icd-opencl-dev ocl-icd-libopencl1 wget -y 
	sudo apt install tofrodos iproute2 gawk make net-tools locales cpio libncurses5-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev screen pax gzip xvfb tftpd tftp libtool-bin default-jre -y lsb-release zlib1g:i386 git python-dev 
	sudo locale-gen en_US.UTF-8 
	sudo ln -s /usr/bin/make /usr/bin/gmake 

```

###Vitisのインストール
https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/vitis.html
の中にある、Vitis コア開発キット - 2019.2 　をダウンロードしてください。アップデートは不要です。
ザイリンクス統合インストーラー 2019.2: Linux 用自己解凍型ウェブ インストーラー (BIN - 115.4MB)　または、
ザイリンクス Vitis 2019.2：すべての OS インストーラー シングルファイル ダウンロード (TAR/GZIP - 30.76 GB)
がダウンロードするファイルです。
クリックすると、ログイン確認、ライセンス確認後、ダウンロードすることができます。
####ウェブインストーラー
ダウンロードしたファイルを直接実行します。

```bin:install.bin
chmod 775 Xilinx_Unified_2019.2_1106_2127_Lin64.bin
./Xilinx_Unified_2019.2_1106_2127_Lin64.bin
```

####シングルファイル
シングルファイルの場合は解凍後、実行ファイルを実行します。

```sh:install.sh
tar xzvf Xilinx_Vitis_2019.2_1024_1831.tar.gz 
cd Xilinx_Vitis_2019.2_1024_1831 
./xsetup
```

インストール途中でいろいろ聞いてきます。
ほとんどそのままで大丈夫だと思います。
ポイントは、
ウェッブインストーラーの場合は、ザイリンクスのIDとパスワードは必要です。入力してください。
３つのラインセンスの許可を聞いてきます。　３つともチェックを入れて、次に入れてください。
ツールの選択はVitisでおねがいします。
ツールとデバイスの選択がありますが、使用するデバイスにかかわらず、そのままにしてください。
　ディスク容量を少なくするため、チェックを外したいと思いましたが、現在のバージョンではそれでは動かないことがわかっています。
インストール終了までは時間がかかります。気長に待ってください。

###XRT（ザイリンクスランタイム）
https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/Chunk1858803630.html#ariaid-title3
からダウンロードします。
OS別に分かれていまして、そのバージョンでダウンロードしてください。
私の場合は、Ubuntu18.04で行いました。
その後インストールです。

```deb:xrt.deb
wget https://www.xilinx.com/bin/public/openDownload?filename=xrt_201920.2.3.1301_18.04-xrt.deb -O xrt_201920.2.3.1301_18.04-xrt.deb
sudo apt install ./xrt_201920.2.3.1301_18.04-xrt.deb -y
```

###ボードファイル
Ultra96の場合、予めボードファイルを準備しておくと、便利です。
ダウンロードは次のところです。
https://github.com/Avnet/bdf/archive/master.zip

unzip master.zip 等で、解凍後、bdf-master以下のディレクトリーを次のところにコピーします。
/tools/Xilinx/Vivado/2019.2/data/boards/board_files

コマンドだとこんな感じです。

```bdf_download.sh
wget https://github.com/Avnet/bdf/archive/master.zip
unzip master.zip
cp -rf bdf-master/* /tools/Xilinx/Vivado/2019.2/data/boards/board_files
```


###ケーブルドライバーのインストール
Vitisをインストール後、USB-JTAG Podを持っている方は、ケーブルドラーバーをインストールしておいたほうが便利です。
次のようにします。

```sh:install_drives
cd /tools/Xilinx/Vivado/2019.2/data/xicom/cable_drivers/lin64/install_script/install_drivers
sudo ./install_drivers
```

###Petalinuxのインストール
ザイリンクス社が提供している、Linuxの開発ツールです。ホストはLinuxのみ対応です。
ザイリンクスのFPGAに搭載されている、CPUに対して、Linuxに必要なカーネルなどのビルドシステムを提供しています。
少ないコマンドでビルドできるのが特徴です。
全体として、CUI(コマンドライン、ターミナル）での実行になります。GUIはありません。
また、Vitisプラットフォームを作成するにあたって、必要なファイルを作成してくれるため、必須になってきました。

ファイルは次のところからダウンロードします。
https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/embedded-design-tools.html
 PetaLinux 2019.2 インストーラ (TAR/GZIP - 7.92GB)　を探して、ダウンロードしてください。

```run:petalinux.run
chmod 755 petalinux-v2019.2-final-installer.run
./petalinux-v2019.2-final-installer.run /opt/petalinux
```

###環境変数の設定
動作するときに便利のため、環境変数を.bashrcに設定します。

```sh:.bashrc
    sudo echo "source /tools/Xilinx/Vitis/2019.2/settings64.sh " >> ~/.bashrc 
    sudo echo "source /tools/Xilinx/Vivado/2019.2/settings64.sh " >> ~/.bashrc
    sudo echo "source /opt/xilinx/xrt/setup.sh  " >> ~/.bashrc 
    sudo echo "source /opt/petalinux/settings.sh " >> ~/.bashrc 
```

##Vitis AIをやりたい場合
Vitisを始める方に取っては、Vitis AIをやりたいと思っている方も多いと思います。
Vitis AIは別ツールと思ってほうがいいです。

Vitis AIを使用するには、Dockerという仮想環境が必要になります。
Dockerの準備は別のページに任せてしまいますが、必要に応じてインストールしてください。
GPUを動かしたい方は、NVIDIA Dockerも必要となります。
ザイリンクスも次のページでもDockerのインストール手順が書かれています。
https://github.com/Xilinx/Vitis-AI/blob/master/doc/install_docker/README.md

Vitis AIはGitで公開されています。
次の順番で実行すれば、必要なファイルをすべてダウンロードすることができます。
AIモデルも入っていますので、このままやると、かなり容量が消費します。必要ない方は、AI-Model-Zoo以下は
実行しなくても大丈夫です。
また、Dokcerファイルに、一部バグがありましたので、ダウンロード後、Dockerファイルを変更をしています。

```sh:vitis_ai_install.sh
git clone https://github.com/Xilinx/Vitis-AI.git
cd Vitis-AI
cd docker
mv Dockerfile.gpu Dockerfile.gpu.bak
cat Dockerfile.gpu.bak | sed -e 's/python=3.6 caffe_decent_gpu /python=3.6 protobuf=3.10.1 caffe_decent_gpu /g' -e 's/-runtime-/-devel-/g'> Dockerfile.gpu
./docker_build.sh 
cd ..
cd AI-Model-Zoo
chmod 775 get_model.sh 
./get_model.sh 
```


##次回以降
以上で、インストールは終わります。

Vitisを使うにはプラットフォームを作る必要がありますので、
次回はUltra96向けプラットフォームの作り方を公開する予定です。

##参考文献
[Vitis 2019.2 Software Platform Release Notes](https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/Chunk300137739.html#wlk1553469789555)
[PetaLinux Tools Documentation Reference Guide](https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_2/ug1144-petalinux-tools-reference-guide.pdf)