激安 FPGA 開発ボード "Wukong" の導入 (Xilinx Artix-7 XC7A100T)

激安の FPGA 開発基板、悟空(Wukong)ボードで、サンプルプロジェクトを動かしてみます。

#Wukong 基板の購入先
Aliexpress に QMTECH 社のオフィシャルストアがあります。
https://ja.aliexpress.com/item/4000170042795.html
![Wukong_store.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/28e0fffa-294e-52e2-7213-a0784a8dae6c.jpeg)

購入価格は、送料込で 1.4万円ほどでした。
QMTECH社は、他にもいくつか Artix-7 開発基板を販売していますが、
GTP(高速シリアル※)が使えるのは Wukong だけですので、これにしときましょう。

※PCIe や SDI が実験できます。Vivado 用の IP やドライバが無償提供(！)されています。
　秋月で販売されている Artix-7 基板は、全て GTP が外に出ていません。

#QMTECH 社 Wukong ボード概要
基板外形 10cm x 10cm
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/850b919c-fe45-54fc-0278-6f3fdc8d89be.jpeg)

付属 AC アダプタ(5V 2A)
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/e107ee4b-1061-fcb2-821b-433c8e6050a8.jpeg)

#主要デバイス
Xilinx Artix-7 XC7A100T-2FGG676I
256MB DDR3(MT41K128M16JT-125)
QSPI フラッシュ(MT25QL128A)
Giga-bit Ether(RTL8211EG)
50MHz クロック発振器
125MHz GTP 用 LVDS クロック発振器
USB-UART(CP2102)
HDMI 出力端子、LAN 端子、ほか外部端子

#動作環境(用意するもの)
Wukong 基板 (1.4万円)
Xilinx Vivado2018.3 (無償)
Xilinx USB ダウンロードケーブル Platform Cable USB II (DLC10、互換品可 0.5～3万円)
QMTECH 社 サンプルプロジェクト (無償)
HDMIモニタ (ありもの流用)
開発用PC: Win10 Pro(64bit)、Corei5-4690、SSD 512GB、RAM 16GB(※) (ありもの流用)

※8GB あれば実用にはなるかと思いますが、16GB 以上がお勧め

#開発環境とサンプルプロジェクトのダウンロード
Xilinx Vivado Design Suite - HLx Editions の旧版(2018.3)
<b>Vivado Design Suite - HLx Editions - 2018.3  Full Product Installation</b>
https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html
WebPack ライセンスを取得して使用します。

※<b>Vivado Design Suite - HLx Editions Update 1 - 2018.3</b> はデバイス追加の差分ですので、XC7A100ではインストールしなくてよいです。


QMTECH 社のサイト
http://www.chinaqmtech.com/download_fpga

Wukong のサポートファイル一式
・回路図(pdf)
・マニュアル3種(pdf)
・Vivado サンプルプロジェクト5種(Vivado2018.3 用)
http://www.chinaqmtech.com/filedownload/34697


#ダウンロードケーブルの接続
USB 接続したダウンロードケーブルの JTAG ワイヤを Wukong 基板に接続して、Wukong 基板の電源を入れておきます。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/93dce2bc-9d59-ce78-f1e6-665953af6bc8.jpeg)
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/b71ae600-8777-4389-9652-a6235c808d9f.jpeg)

#サンプルプロジェクトのコンパイル
サンプルプロジェクトの中から、Test06_HDMI_OUT.zip を解凍しておきます。
解凍先はデスクトップでOK。

Vivado 2018.3 を起動します。(Vivado HLS 2018.3 ではないです)
![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/dbe5445a-9cf2-b72a-c0cb-666a12231dfd.jpeg)

Quick Start の Open Project > を選んで、解凍したフォルダにある Test06_HDMI_OUT.xpr を開きます。
![8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/7674efde-bd21-5654-2a3b-610d26bab687.jpeg)
![9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/0163b4ec-3753-db3a-590a-3fadf583a9f7.jpeg)

なんか syntax error とか出てますが、気にしない。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/99a5c268-f903-50da-56ba-43f3ec74cdca.png)


左ペインの Run Synthesis を左クリックします。
出てくるダイアログは、全部 yes または ok で良いです。
 
進行中の状況は、ウィンドウ右上に出てきます。
実行中はくるくる回ってます。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/a0b73c30-9700-dc19-dd8e-886780ca7ed5.png)


Synthesis successfully completed.
のダイアログが出たら、そのまま Run Implementation で OK を押します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/b5c72c30-c2bc-5660-e010-126294fa10e0.png)
次の Launch Runs もそのまま OK でいいです。

Implementation Successfully Completed.
のダイアログが出たら、Generate Bitstream を選んで OK を押します。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/ee0e30ee-d366-15ad-e7b8-8a9b79641f9f.png)
次の Launch Runs もそのまま OK でいいです。

Bitstream Generation Completed.
のダイアログが出たら、Open Hardware Manager を選んで OK を押します。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/2cd04c6c-2a9f-6c1b-8592-7847a9256d2f.png)

#FPGA へのダウンロード
Hardware Manager で、Open target - Auto connect を選びます。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/1dc33118-3c69-0126-d003-337989d9b1f8.png)

ダウンロードケーブルと、その先に接続した FPGA(xc7a100t_0) が認識されました。
※FPGA が認識されない場合、ダウンロードケーブル - Wukong 間の接続を確認してください。

XADC は、FPGA に内蔵された温度計です。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/ae1a7d5b-1ef3-fd32-029a-dd2edfd9fc3d.png)

XADC をダブルクリックして OK で進めると、デバイスの内部温度がグラフ表示されます。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/5ae36556-da23-856c-8117-116f3f6e91c6.png)

左ペインの Program Device をクリックして、xc7a100t_0 を選びます。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/7512984b-8b72-7876-b237-de5070dce766.png)
ダウンロードするファイルの指定になりますので、先ほどのコンパイルで生成された top.bit を選択します。場所は下記。
C:/Users/<i>(user)</i>/Desktop/Test06_HDMI_OUT/Test06_HDMI_OUT/Test06_HDMI_OUT.runs/impl_1/top.bit
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/46b6d88a-70e9-5561-b9fa-21bf90bd8f09.png)

Program を押すと、bit ファイルが FPGA にダウンロードされます。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/706a7f32-fd8a-d4bc-0d52-254f35bed67f.png)

ダウンロードが完了すると、HDMI 出力にカラーバー信号が出てきます。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/bd4090bc-253f-6be7-6b5b-6228e926acf5.jpeg)

信号内容的には HDMI ではなく、1080/60p の DVI 信号で出力されています。
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/ee5b7074-0afd-6b35-1b6d-959d0aec518e.jpeg)

無事、サンプルの FPGA が動作しました。

ここで、Wukong 基板の電源を落とすと、FPGA にダウンロードしたコンフィグレーションデータは消えてしまいます。
電源を入れても、再度 Vivado からダウンロードしないと、FPGA は動きません。

基板にはコンフィグレーションデータ格納用の SPI フラッシュが搭載されています。
ここにデータを書き込んでおけば、電源投入時に自動的に FPGA にダウンロードされ、動作を開始できます。

#SPI フラッシュ用のコンフィグデータの作成と書き込み
まず基板上の SPI フラッシュを Vivado に認識させます。
左ペインの Add Configuration Device - xc7a100t_0 を選びます。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/491a3a7a-145d-ffea-f184-5e94934421f6.png)

Add Configuration Memory Device のダイアログでは、
<dd>Manufacturer: Micron
<dd>Density (Mb): 128
<dd>Type: spi</dd>

にすると、mt25ql128-spi-x1_x2_x4 が現れるので選択してOKします。
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/fcb6535c-2505-7184-db42-cfe78ebfb063.png)
Do you want to program the configuration memory device now?
と聞かれますが、Cancel しておきます。

次に、書き込み用のファイルを作成します。
メニューバーの Tools から Generate Configuration File を選択します。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/07dfe9ad-b15c-7831-1741-e651bfc224df.png)

Write Memory Configuration File のダイアログが出るので、

<dd>Format: MCS</dd>
<dd>Memory Part: mt25ql128-spi-x1_x2_x4</dd>
<dd>Filename: HDMI_OUT</dd>
<dd>Interface: SPIx4</dd>
<dd>Load bitstream files にチェック</dd>
<dd>Start address: 00000000</dd>
<dd>Direction: up</dd>
<dd>Bitfile: C:/Users/<i>(user)</i>/Desktop/Test06_HDMI_OUT/Test06_HDMI_OUT/Test06_HDMI_OUT.runs/impl_1/top.bit</dd>
でOKします。
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/cdac61c4-c5cb-2b1a-9e67-7f1f4d84580b.png)
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/990aa33d-d2ba-8661-916b-7b24d8c43ea4.png)


C:/Users/<i>(user)</i>/AppData/Roaming/Xilinx/Vivado/HDMI_OUT.mcs
に、メモリ書き込み用の .mcs ファイルが生成されます。

Hardware の mt25ql128-spi-x1_x2_x4 を右クリックして、Program Configuration Memory Device を選択します。
![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/f258adc1-6a36-4a0d-96cd-37f5085264a4.png)


Program Configuration Memory Device のダイアログが出るので、Erase と Program と Verify にチェックを入れて、OKします。
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/81adc09c-f7e1-7982-2b6b-6f435a0fdb66.png)

書き込みが開始されると、HDMI 出力はオフになります。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/0f56fbf3-69c3-c050-959c-088e36f0a67c.png)
しばらく待つと、SPI フラッシュへの書き込みが終わります。
![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/fc4690ab-b6ab-587b-7728-4dea9ac562e2.png)

SPI フラッシュに書き込んだだけでは、FPGA へのダウンロードは行われないので、HDMI 出力はオフのままです。

#SPI フラッシュから FPGA へのダウンロード
SW1 が、PROG_B に接続されていて、FPGA の再コンフィグボタンになっています。
(マイコンで言うところの、リセットボタン)
![27.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/4b628541-55f9-6d8a-938f-b3799ce2e707.jpeg)

SW1 を押すと、FPGA がリセットされて、再コンフィグ(SPI フラッシュから FPGA へのダウンロード)が走ります。
SPI フラッシュから Quad モードでダウンロードされるため、1 秒未満で完了します。

ダウンロード直後、HDMI 端子から、カラーバーが出力されます。
SW1 を押すたびに、SPI フラッシュから読み込んで再起動します。

また、Wukong 基板の電源をオフにしてから、再度オンにすると、自動的に SPI フラッシュから起動するので、HDMI 出力からカラーバーが出てきます。

DC 入力ジャックの隣の D1 が、コンフィグ完了を示す LED になっています。
SW1 を押している間は D1 がオフになり、HDMI 出力は出なくなります。
SW1 を離すとすぐにコンフィグが走り、D1 が点灯して、HDMI 出力に信号が現れます。
![28.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/272fe13b-dfb7-efa9-da0a-a7eca2e2d70b.jpeg)

以上、サンプルプロジェクトの動作説明を終わります。