Xilinx製FPGA開発環境をArchLinuxにインストール（Vivado & Vitis & Vitis_HLS）

# 0. はじめに（本編は次章から）
この度、xilinx製FPGAを用いた開発をすることになりました。
開発環境がwindowsよりもlinuxの方が安定しているということを耳にし、なら当環境に入れてしまおうと思い早速挑戦しました。
が、対応linuxOSは「RHEL」「SUSE」「Ubuntu」、、、当環境は「ArchLinux」、、、しかもラップトップ、、、
まぁrpmだったりdebだったりしてなかったので大丈夫だろうと思いとりあえず入れようとしたところ、いくつか一筋縄では行かなかったので備忘録も兼ねての投稿です。

# 1. インストール環境及びインストールバージョン
当環境はこんな感じ。

```bash

#カーネル
% uname -r
5.16.11-zen1-2-zen

#CPU
% cat /proc/cpuinfo | grep "model name" | head -n 1 
model name      : Intel(R) Core(TM) i3-10100 CPU @ 3.60GHz

#メモリ
% cat /proc/meminfo | head -n 1
MemTotal:       16214280 kB #16GB

#GPU
% lspci | grep NVIDIA
01:00.0 3D controller: NVIDIA Corporation GP107M [GeForce MX350] (rev a1)

```

インストールしたバージョンは「2021.2.1」です。

# 2. インストール手順

## インストールに必要なパッケージをインストール

インストールには以下のAURが必要みたいなのでインストール。各自の環境にあったインストール方法で入れてください。ここでは「makepkg」を使用します。必要なAURは以下のものです

[ncurses5-compat-libs.git](https://aur.archlinux.org/ncurses5-compat-libs.git)

```bash
% git clone https://aur.archlinux.org/ncurses5-compat-libs.git #ドライバーのAURをインストール
% cd ncurses5-compat-libs.git #ncurses5-compat-libs.gitディレクトリに移動
% makepkg -si #パッケージのインストール

```

## インストールメディアの入手

まずはxilinxの[ダウンロードページ](https://japan.xilinx.com/support/download.html)にアクセスし、「Vivado ML Edition」の「Linux 用自己解凍型ウェブ インストーラー」をクリックしインストーラーをダウンロードします。その際xilinxにログインを求められるのでログインする。登録ができてない場合は登録する。

## インストールメディアの実行

ダウンロードしたファイルに実行権限を与え、インストールしていきます。ダウンロードした場所を「/home/$USER/Downloads」だとしています。ちなみにroot権限でインストールしてしまうと起動に一々権限が必要になってくるので、あとに出てくる「ダウンロード場所のパーミッション」の問題が面倒でもユーザー権限でインストールすることをおすすめします。

```bash
% cd ~/Downloads #ダウンロードした場所に移動
% chmod +x ./Xilinx_Unified_{version}_Lin64.bin #実行権限を付与。{version}にはバージョン情報が入ります。
% ./Xilinx_Unified_{version}_Lin64.bin #インストーラーの実行
```

実行したらインストーラーのGUIが実行されるまで待ちましょう。GUIの起動には少し時間がかかります。当環境でも1〜2分かかりました。

## インストール
ここからはGUIでの作業になります。まず起動が完了するとこの画面になります。

![Screenshot_20220304_071656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212459/e52fd077-c592-3c7d-d50b-5d8de25a85d6.png)

ここにも書いてあるとおり、対応しているLinuxOSにArchLinuxはありません、、、
とりあえず「**Next >**」をクリックします。

![Screenshot_20220304_072206.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212459/f91930c2-7be4-21cd-ba0f-a8d32d7e085a.png)

この画面でxilinxに登録している「**E-Mail Address**」と「**Password**」を入力します。そして「**Download and Install Now**」を選択して「**Next >**」をクリックします。

![Screenshot_20220304_072706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212459/9a97c78f-1b1e-20f9-78f7-99adb0c5d261.png)

この画面ではインストールするプロダクトを選択します。なので「**Vitis**」を選択して「**Next >**」をクリックします。

![Screenshot_20220304_072908.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212459/9c26e1d6-8fc2-08ed-5bac-4713b1147334.png)

この画面ではインストールするツールを選択します。ここでは何もしないで「**Next >**」をクリックします。

![Screenshot_20220304_073053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212459/652bd1eb-90e8-713f-7397-a286e8a56176.png)

ここでは規約の同意を求められます。すべての「I Agree」のチェックボックスをクリックしてチェックを入れて「Next >」をクリックします。なお、チェックを入れないと次にいけません。

![Screenshot_20220304_073507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212459/1fe3465b-d04b-44b2-1fe3-27f5f916503f.png)

ここでインストール場所とアプリケーションエントリーを作成します。
左セクションにある「**Install Options**」の「**Select the Installation directory**」がアプリケーションをインストールする場所になります。ユーザーのパーミッションによってはデフォルトの「**/tools/Xilinx**」はインストールできません。なのでインストール場所は各自で適切に指定してください。注意点としては、インストールサイズがかなりの大きさになるのでインストール場所は慎重に指定してください。
右セクションにある「**Select shortcut and file association options**」の「**Create program group entries**」は作成するとアプリケーションのグループエントリーを作成してくれます。基本的に作成しておくとアプリケーションランチャーにグループとして登録されるので、便利です。 ~~アプリケーションが散らばらないの大事。~~ 
また、「Create desktop shortcuts」は作成するとデスクトップにショートカットが作成されます。 ~~ですがデスクトップが汚くなるので作らなくても大丈夫です。~~ 
各種適切に指定できたら「**Next >**」をクリックします。

そしたら確認のウインドウに移るので、そこでも「**Next >**」をクリックします。
そうするとダウンロードが始まりますので、気長に待ちましょう。xilinxのサーバーの影響なのかダウンロード速度が10MB/s行きません。かつ、ダウンロード時にはCPUの使用率が上がります（core ave 60~80%ぐらい）。ダウンロードが終了するとインストールなどが始まり、最終処理をして終わります。終了すると完了の旨のダイアログが出てくるのでインストーラーを終了します。だいたいインストールが完了するまで2時間前後かかります。

# 3. 各種設定（おそらくここからが本題）
## ドライバーのインストール

そのままだと各種ドライバーが入っていないようなので、ドライバーをインストール。xilinxはドライバーをインストールするスクリプトを提供してくれていますが、それは使用できなかった（ArchLinuxが原因かは不明）。なのでAURにあるパッケージを各自の環境にあったインストール方法で入れてください。ここでは「**makepkg**」を使用します。
インストールするAURは以下のものです。

[fxload](https://aur.archlinux.org/packages/fxload)
[digilent.adept.runtime.git](https://aur.archlinux.org/digilent.adept.runtime.git)

```bash
% git clone https://aur.archlinux.org/packages/fxload #ドライバーのAURをインストール
% cd fxload # fxloadディレクトリに移動
% makepkg -si #パッケージのインストール

% cd ../ #ディレクトリの移動
% git clone https://aur.archlinux.org/digilent.adept.runtime.git #ドライバのAURをインストール
% cd digilent.adept.runtime.git #digilent.adept.runtime.gitディレクトリに移動
% mkaepkg -si #パッケージのインストール

% reboot #再起動しないとドライバーが読み込まれなかったのか、再起動するまでVidadoで書き込みできなかった
```

この時点で「**Vivado**」「**Vitis**」のGUI起動は普通にできる。FPGAに書き込みもできる。でも「**Vitis_HLS**」は起動のスプラッシュは表示されるけどGUIの起動はできない。でもGUIじゃなくても一応使えはするみたい。「vitis_hls -f ~~.tcl」とすれば高位合成されるらしい。

## Vitis_HLSを起動するために

はい。ここが今回のメインです。
まず「Vitis_HLS」のライブラリファイルの一部を編集します。

```bash
% find path/to/Xilinx -name autopilot_init.tcl #目的のファイルの場所を探す
Xilinx/Vitis_HLS/2021.2/common/scripts/autopilot_init.tcl #このファイルの40行目を編集する
 
% nano Xilinx/Vitis_HLS/2021.2/common/scripts/autopilot_init.tcl #ファイルの編集
```
```bash
##########     編集前     ##########
##### ~~~中略~~~ #####
----%r&-'%rl%&n$&lt'v-=
#ここの最後の「=」を「>」に編集
```
```bash
##########     編集後     ##########
##### ~~~中略~~~ #####
----%r&-'%rl%&n$&lt'v->
```

次にパッチファイル（のようなもの）を作成します。

```bash
% nano ~/.local/bin/arch
```
```bash
#!/bin/sh
uname -m
```

これで無事に起動できるようになりました！

# 参考

[ArchWiki (Xilinx Vivado)](https://wiki.archlinux.jp/index.php/Xilinx_Vivado)
[AUR (Vivado)](https://aur.archlinux.org/packages/vivado)