Windowsで、FPGA開発。WSL2を使って、Vitis2022.1の環境設定(AIエッジコンテスト対応版）

# WindowsでFPGA開発

FPGA を開発したくても敷居が高くて、諦めてる方も多いと思います。その理由の一つが開発環境にもあります。
現在の FPGA の開発環境のほとんどは、Linux を推奨しています。しかしパソコン OS としてはまだ Windows の方が主力です。そこで今回はWSL 2の力を借りて、Windows 上で FPGA 開発環境Vitis（ヴァイティス）2022.1の構築を目指していきます。


# FPGA開発はLinux推奨。
現在の FPGA 開発はLinux 環境が推奨されています。一応、Windows版も用意されていますが、能力を抑えてあったり、使えない機能があったりします。今回の目的のAIエッジコンテストで使おうと思っている機能も、Linux版しか使わない機能を導入しています。
まず初めに Windows 上で Linux を使う環境を整える必要があります。 Linux 環境どうやってるかはいくつかの方法があります。

| Linux実現方法 | FPGA開発 | 制限 |
|:-:|:-:|:-:|
|  Linux専用機を用意する | ○  | 最も早く動作し、他に気兼ねなく使える　パソコンがもう一台必要  |
|  デュアルブート | ○  | ハードディスクの容量が必要だが、Linux専用機と同じ能力 |
|  Virtual BOX | ○  | 仮想環境　確実に動く方法のひとつです。 |
|  Docker | △  | 一部の実行できない機能があります。  |
| Cygwin  | ☓  |  使用不可 |
| MinGW  | ☓  |  使用不可 |
|  WSL2 | ○  | カスタマイズすれば利用可能  |

Windows を消さないで実現する方法として、デュアルブート、virtualbox、WSL 2が実用的です。特に WSL 2はWindows 標準として対応し始めたため、導入がしやすい、Microsoftが開発してるため、情報量も多いという特徴があります。

今回は WSL 2をターゲットとして説明いたします。

# WSL2を使う上での注意点
今回紹介するVitisと言う、開発ツールはWSL 2の使用を推奨しているわけではありません。実際にWSL 2上に Linux の環境を構築し、FPGA 開発ツールをそのまま入れても、動きません。多少のカスタマイズが必要になります。特に WSL 2はコマンド入力が基本になってますので、グラフィックを使う GUI のライブラリーが弱いです。
しかし実際にWSL 2に FPGA開発ツールを入れて動かす例はあります。ここでは実際に動かしたものを紹介します。

# WSL2導入
#### WindowsへWSLのインストール
WSL 2は Windows のアップデートで使用できます。Windows 10の2004バージョン以降、及び Windows 11で使用できます。
多くの方が使ってますので、参考になります。マイクロソフトのWSLインストールのページを紹介します。

https://docs.microsoft.com/ja-jp/windows/wsl/install

#### Ubuntu20.04LTSの導入
Linuxのディストリビューションは、いくつかありますが、今回はUbuntu（ウブンツ）20.04LTSというバージョンを使います。
ubuntuは、Linuxの中でも多くの人が使われているディストリビューションです。
Ubuntuの場合、2年ごとに LTS というバージョンが出てきます。LTSは開発から5年間はアップデートの補償がされます。
最新バージョンは2022年4月に発表された、22.04LTSですが、FPGA開発ツールの方がまだ対応していないため、今回は20.04LTSを使うことにします。

https://apps.microsoft.com/store/detail/ubuntu-20044-lts/9MTTCL66CPXJ?hl=ja-jp&gl=JP

#### GUIを使うための設定。

WSL2はコマンドラインのツールになります。ですが、FPGA開発ツールはGUI対応です。なので WSL 2でGUIを表示できる設定をする必要があります。方法は２種類あります。基本的には Windows 11が使えるか使えないかで分かれることになります。

###### WindowsのGPUドライバーを使う場合
Microsoft から GPU を使って表示する方法を紹介されています。WinodwsにGPU用のドライバーを入れて、WSL2を再起動することによって、動作します。詳しくは各GPUメーカーがホームページを用意していますので、ご利用ください。ただし、Windows11の使用を推奨されています。

https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/gui-apps

###### X ウインドウ システムを使う方法

Ubuntuには、X ウインドウシステムが用意されています。これは、IPアドレス先にある、XサーバーがWSL2で動いているアプリを表示するという方法です。

といっても、Xサーバーがないと動作しません。が、Windowsで動作するXサーバーが無料で、ダウンロードできますので、それで利用します。
今回はMobaXtermというアプリを例にします。

https://mobaxterm.mobatek.net/

無料ダウンロードできますので、ダウンロード後、インストールして、起動してください。
起動しましたら、Xサーバーを動かします。Start Local Terminal のボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/d04d207d-e302-3413-16e4-a18cd18d626e.png)

DISPLAYのIPアドレスを調べます。ここでは、192.168.0.10:0.0　の部分になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/565b0e43-19ae-0d09-3c3d-39806c39058f.png)

このDISPLAYのIPアドレスを、Ubuntu側のターミナルで、export でコマンドを入力します。これは、画像出力先をここにすることを示します。

``` ubuntu.export
export DISPLAY=192.168.0.10:0.0
```

これで、Ubuntuで、GUIアプリが使えます。

### ライブラリーの導入
WSL2のUbuntuは、オリジナルのUbuntuと全く同じではありません。一部のライブラリが異なっています。しかしUbuntuにはパッケージツールが用意されており、最終的に同じにすることも出来ます。

今回は、WSL2のUbuntuでは用意されていない、いくつかのライブラリーをインストールします。

```sh:apt.install
sudo apt update
sudo apt install -y gnome-icon-theme libswt-gtk-4-jni
```

### UbuntuからWindows側ファイルの読み書き。
Ubuntu側からは、Windows側のファイルの読み書きが可能です。コピーコマンド cpや、ファイルを見る ls(ll)などが使えます。
Cドライブの場合は　/mnt/c/からCドライブが見れます。
ただし、USBにはアクセスできませんので、USBメモリー等は、一度、Windows側にコピーしてから、アクセスする必要があります。


# FPGA開発ツールVitis導入

今回はUltra96をターゲットとしますので、ザイリンクス社の開発ツールVitis(ヴァイティス）を導入します。
手順としては、次のとおりになります。
* ツールのダウンロード
* インストール
* Vitisライブラリーの導入
* 動作させる

### FPGAツールのダウンロード
FPGAの開発ツールは無料で使えます。基本的にザイリンクス社の開発ツールは、有料版のも無料版も基本的に同機能です。無料版は使えるデバイスの大きさが限定されています。今回使うFPGAは無料版で十分開発できるのでこちらを使います。

1.1 ツールのダウンロードを行います。ハードディスクで２００Gバイト余裕があった方が望ましいです。今回はVitisという開発ツールをダウンロードすることになります

 https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/vitis.html

1.2 開発ツールのダウンロードの方法は２通りあります。一つはインストーラーだけダウンロードして、開発ツール本体は必要なところだけダウンロードして、開発ツールを導入する方法。もう一つは開発ツール全体をダウンロードして、パソコン上で解凍して、導入する方法です。
インターネット回線がゆっくりな場合（１００Mbps以下）や、ハードディスクに余裕が無い場合はLinux用自己解凍型ウェブインストーラーの方が望ましいです。
インターネット回線が早い場合や、ハードディスク等に余裕がある場合は統合インストローラーをインストールしたほうがインストール時間は短いです。
どちらかをダウンロードします。
ここでは、自己解凍型ウェブインストーラーを説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/6e285b67-8537-6950-86f7-f18a427e01ef.png)

1.3 インストーラーをクリックするとログイン画面が出てきます。無料登録ですので登録してない方はここで登録しておいてください。その後ダウンロードを情報を入力して、ダウンロード開始します。統合インストーラーの方は、ダウンロード後、解凍をします。

`tar -xzvf ./Xilinx_Unified_2022.1_0427_0327.tar.gz`

1.4 インストールするディレクトリーを作成します。ディレクトリを作っておかないとインストールできません。今回は、インストーラーのデフォルトディレクトリーを作成しました。

```sh:xilinx.mkdir
sudo mkdir /tools
sudo mkdir /tools/Xilinx 
sudo chown $USER:$USER /tools/Xilinx
```


1.5 インストールを開始します。Linux用自己解凍型ウェブインストーラーの方は実行してください。Ubuntu上から実行します。

``` Xilinx.install
./Xilinx_Unified_2022.1_0420_0327_Lin64.bin
```

統合型インストーラーの方はディレクトリーに入った後、xsetupの実行です。
``` Xilinx.install
cd Xilinx_Unified_2022.1_0420_0327
./xsetup
```
1.6 インストーラーの画面が出てきます。理由が書いてあります。ここから色々設定して、インストールを開始します。Nextをクリックします。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/6957f9ce-5e11-b89b-3255-6166376ff672.png)

1.7 自己統合型インストーラーの方のみですが、メールアドレスとパスワードが聞いてきます。これはザイリンクスに登録したものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/ddb9a70c-8567-0f8a-d9b0-131590155fb9.png)

1.8 インストールするツールを選択します。Vitisを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/a337551b-6b36-1843-0059-6daa89233114.png)

1.9 必要なツールと、デバイスの選択をします。ツールはVits、Vivado、Vitis HLSを、選択します。
デバイスは必要なものだけで、十分です。今回は、Zynq UltraScale+ MPSocだけ選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/f9ab2b91-1bfd-c7ba-d8b3-66d220fac07b.png)

1.10 ライセンスの確認を行います。I Agreeが６個ありますので、全部チェックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/ca10f375-ab7b-3da6-4df4-5aae5778088e.png)

1.11 インストール先の確認です。変更することも可能です。今回はデフォルトのままインストールしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/4fa5d370-25e9-b113-0a63-d21b656b7e57.png)

1.12　内容を確認の上、インストールを開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/e632d6c3-c586-318d-23c7-086d92a6a38d.png)

1.13　インストール時間は長いです。気長に待ちましょう。（自己統合型インストーラーの場合）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/bb0acfca-3460-24e7-a1b7-13b692ed5ade.png)

1.14 インストールが終わったらメッセージが出ますので、OKを押して、終了させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/f6406d97-d546-2b22-4b70-edc281e410b7.png)

1.15　ツールを入れた後も、足りないライブラリーがありますので、インストールします。

```sh:installlib.sh
sudo apt install ocl-icd-libopencl1
sudo apt install opencl-headers
sudo apt install ocl-icd-opencl-dev

cd /tools/Xilinx/Vitis/2022.1/scripts
sudo ./installLibs.sh

```

1.16 実際に動作させます。コマンドでVitisを動かすための環境を設定します。これは毎回やる必要があります。
```
source /tools/Xilinx/Vitis/2022.1/settings64.sh
```

1.17 Vitisを起動させて、動作を確認させます。
```
vitis
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299213/b518310c-7ae5-ee8a-619d-2a011a0f19bb.png)

1.18 あれば便利なツールを入れておきます。

```
sudo apt install -y gedit tree
```


これで、インストールは終わります。

# 参考資料


https://docs.xilinx.com/r/ja-JP/ug1393-vitis-application-acceleration/Vitis-%E5%85%A5%E9%96%80