Xilinx ISEをUbuntu(Linux)で使う

# 前置き
日本語で解説されている記事がなかったのと，既存の記事を鵜呑みするだけではできなかったものがいくつかあったため，それの修正も兼ねて記事を書きます．以下の環境で動作確認済みです．

|種別|環境|
|---|----|
|OS|Ubuntu 21.04|
|CPU Arch|x86_64(64bit)|
|shell|zsh(記事はbash向け)|

本記事は，Xilinx ISE 14.7 WebPACKをUbuntuにインストールするまでの流れを解説しています．

# ダウンロード
https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive-ise.html

まずはXilinxのサイトよりLinux版のXilinxをダウンロードしましょう．この時，アーカイブだけで**6.09GBもあります**．必ずchecksumしましょう．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/0ec7ca8a-8043-d42a-15f8-ec2e8239cb38.png)

```sh
$ md5sum Xilinx_ISE_DS_Lin_14.7_1015_1.tar
e8065b2ffb411bb74ae32efa475f9817  Xilinx_ISE_DS_Lin_14.7_1015_1.ta
```
このときに出てくる値の正誤により，ダウンロードが正常にできているかが確認できます．インストール中に気づくのは悲惨であるため，必ず確認しましょう(USBメモリ等で誰かに共有したときも同様ですよ！)．

# ISEのインストール
インストーラを実行する前に，実行するための依存関係を入れます．以下はUbuntu(Debian系)でのインストールコマンドです．

```sh:sh
sudo apt install libncurses5
```

`Xilinx_ISE_DS_Lin_14.7_1015_1.tar`を展開しましょう．ファイルマネージャ等でダブルクリックしても良いし，コマンドラインで実行しても良いです

```sh:sh
tar -xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar
cd Xilinx_ISE_DS_Lin_14.7_1015_1
```

次に，インストーラに実行権限を与え，実行します

```sh:sh
sudo chmod +x xsetup
sudo ./xsetup
```

するとGUIのウィザードが出てきます．(この先選択が必要な箇所だけ説明します)
今回はISE WebPACKを選択します．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/3048f567-252e-93c6-cf40-26eb874b0563.png)

一応Install Cable Driversにチェックを入れます...**がここでは100%失敗しますので安心して下さい**(対策は後述)．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/60400835-4701-7fcd-aa60-be700546e0ae.png)

インストール先のパスはどこでも大丈夫ですが，変える場合は変えたことを自分で把握しておいて下さい．今後は`/opt/Xilinx`にインストールした前提で説明していきます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/482d3f3e-d98c-8235-6003-8712a227ade1.png)

インストールして待ちます．この時ありがちなエラーを示しておきます．

- `Drive Install Failed`みたいなやつ  
  ここでは必ず失敗するものなのでOKです
- `... not found` みたいなやつ  
  `.tar`を展開したときに失敗しているか，そもそもの`.tar`の中身が正しくないことが多いです．「ダウンロード」からやり直して下さい...

## 起動ショートカットの追加
ショートカットを作成します．ここではgeditを使いますが，vimでもemacsでもnanoでもOKです．

```sh:sh
sudo gedit /opt/Xilinx/14.7/ISE_DS/ise
```

以下を貼り付けて下さい．([引用元](https://antc2lt.medium.com/hello-fpga-nexys-3-setup-on-ubuntu-ff58e774566b#4aed))

```bash:/opt/Xilinx/14.7/ISE_DS/ise
#!/bin/bash
export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so
ISE_DS_DIR=/opt/Xilinx/14.7/ISE_DS
export gmake=/usr/bin/make
cd "$ISE_DS_DIR"
source "$ISE_DS_DIR"/settings64.sh
export LANG=''  # reset locale to English to fix decimal/comma seperation
"$ISE_DS_DIR"/ISE/bin/lin64/ise
```

上記のスクリプトに実行権限を与えます．

```sh:sh
sudo chmod a+x /opt/Xilinx/14.7/ISE_DS/ise
```

## デスクトップファイルの作成(Ubuntu向け)

次にデスクトップファイルを作成します．

```sh:sh
sudo gedit /usr/share/applications/ISE.desktop
```

```bash:/usr/share/applications/ISE.desktop
[Desktop Entry]
Version=1.0
Name=ISE
Exec=/opt/Xilinx/14.7/ISE_DS/ise
Terminal=false
Icon=/opt/Xilinx/14.7/ISE_DS/ISE/data/images/pn-ise.png
Type=Application
Categories=Development
```

これで，アプリケーション一覧にISEが追加されます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/c167e451-8040-d4f9-f75f-834123222e6b.png)

# パスを通す
zshなどを使っている場合は`~/.bashrc`を`~/.zshrc`に置き換えてくださいね．

```sh:sh
echo PATH=\$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/ >> ~/.bashrc
source ~/.bashrc
```

試しに，`ise`と入力して起動したら，正しくパスが通っています．

```sh:sh
ise
```

無事ウィンドウが出てきたら，閉じてください．

## 間違ったパス
https://antc2lt.medium.com/hello-fpga-nexys-3-setup-on-ubuntu-ff58e774566b

こちらの記事を参考にセットアップされた方は，おそらく間違ったパスを設定されています(/opt/Xilinx/**13.2**/ISE_DS/ISE/bin/lin64/になってる)．残しておいてもよいですが，気になるようでしたら`.bashrc`から該当の行を削除してください．

# Cable Driver のインストール

先程失敗したCable Driverのインストールを行います．まず，必要なパッケージのインストール．

```sh:sh
sudo apt install libusb-dev libftdi-dev build-essential libc6-dev fxload git
```

次に，Cable Driverをダウンロードします．

```sh:sh
cd /opt/Xilinx
sudo git clone https://git.zerfleddert.de/git/usb-driver
```

このとき，`git clone`が失敗するときは，`https://git.zerfleddert.de/git/usb-driver`のリンクが変わっている可能性があります．[ここ](https://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver)を確認し，自分で直してください...

完了したら，早速`make`しましょう(`make -j $(nproc)`でも良いですが，そこまで量は多くないです)

```sh:sh
cd /opt/Xilinx/usb-driver
sudo make
```

最後に，セットアップを実行して完了です！

```
sudo ./setup_pcusb /opt/Xilinx/14.7/ISE_DS/ISE/
```

# より快適に使うために(VSCodeなど)
LinuxにインストールしたISE Webpackは，なんと日本語入力ができないどころか，**日本語が表示できません**．より快適に使うために，他のエディタを開く設定をすることをおすすめします．

こちらではVSCodeでの設定方法を紹介していますのでぜひ．

https://qiita.com/BonyChops/items/811788f579e76e3a2b26

# 環境変数について(おまけ)
usb-driverのREADMEには

> `export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so`してからimpact起動してね！

とありますが，楽だからといって`~/.bashrc`などに置くことは推奨しません．
`.bashrc`においた結果，なぜかターミナルからVSCodeが起動しなくなりました．
[ここ](#%E8%B5%B7%E5%8B%95%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%81%AE%E8%BF%BD%E5%8A%A0)にもあるように，起動用のスクリプトに含ませ，ISE起動時のみに適用するほうが良いです．

# 参考文献

- [Hello FPGA — Xilinx ISE setup on Ubuntu - Antoine C.](https://antc2lt.medium.com/hello-fpga-nexys-3-setup-on-ubuntu-ff58e774566b)
- [Ubuntu installs Xilinx ISE 14.7 and Xilinx USB Cable Driver - ProgrammerSought](https://www.programmersought.com/article/24731802295/)