ZYBO導入記録 (2) Hello worldの表示 

#開発環境
- 開発用PC : Windows 10 64-bit
    - Vivado 2020.2
    - Xilinx Vitis 2020.2
- ターゲットボード : ZYBO (旧ZYBO)

#開発の流れ
Vivado/VitisではVivadoでハードウェア部分を開発し、Vitisでソフトウェア部分を開発する。
マイコンでいうとVivadoでマイコンそのものの作成、Vitisでマイコンに書き込むソフトを作成する、というイメージ。

#ZYBOボードの設定
赤四角で囲んだ部分を変更する。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/0acafd40-3519-a082-3993-df1830e9b552.png)

ジャンパをQSPIからJTAGに設定する。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/d4456ddb-d05e-487e-b6e0-b02260900994.png)

電源をONにする。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/5dea24e3-03c4-3cb2-3552-dc239bc9364a.png)

電源を入れるとPGOODの赤LEDが点灯する。
（ジャンパがQSPIのままだとDONEの緑LEDも点灯する）
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/b802d1ba-354f-5950-097c-33815884ef68.png)

#ハードウェア設計（Vivado）
Vivadoを起動する。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/e55e99d2-7abe-02dd-861d-862a2f0a347f.png)

Project nameを入力する。ここでは ”hello_world_system” と入力して [Next]
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/4e976d6f-17e6-d48d-1d06-ab1e28360134.png)

Project Typeは “RTL Project” を選択して [Next]を選択。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/76d9bc6f-c446-857d-36a3-f3f2d7d62170.png)

Default Partでは[Boards]タブを選択、Search欄にZyboと入力して一番下に出る[Zybo]を選択（青色になる）し、[Next]を選択。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/060768e1-129d-51a8-4ed2-8b6961208f9d.png)

[Finish]をクリック。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/9dc9e178-0edf-6d9d-4f6b-774354a13f30.png)

上記の画面が立ち上がる。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/6c566c69-6b17-9509-2d9f-72d7e4120714.png)

左の[Project manager]の[Create Block Design]を選択。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/f2be8685-638a-4012-f5d2-53edf4b0bc4e.png)

デザイン名を聞かれるので入力。今回は"hello_world_system"とする。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/d1f5b02a-e508-8cbe-bddf-1cd50517b416.png)

[Diagram]ウインドウで中央の[+]マークをクリックするか、右クリックして[Add IP...]をクリックする。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/0c87483d-3727-5808-15ca-76f5166efdb4.png)

出てきたウインドウで[ZYNQ7 Processing System]を選択。（最初のDefault Partのボード選択でZyboを選んでいないと表示されない）
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/83a08772-1b27-19a2-53c3-9343a0f79ec9.png)

選択すると、図のようにZynqのプロセッサコアを表す “processing_system_7” という名前のIPが追加。
[Run Block Automation]をクリック。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/c6227821-f382-d19d-5250-f1279ff08ff6.png)

[OK]をクリック。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/48fc9ca1-b347-5705-1a38-1f01ff36809a.png)

IP “processing_system_7″に接続ポート[DDR]と[FIXED_IO]が追加。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/510bf72f-660a-9099-abdf-21fab954a11a.png)

[FLCK_CLK0]にマウスカーソルを合わせると鉛筆マークに変化するので、ドラッグし[M_AXI_GP0_ACLK]にクロック出力を繋げる。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/eaf3fff5-668c-7787-a14a-168f85a650d4.png)

[BLOCK DESIGN]ウインドウから[Sources]タブを選択。
[Design sources]>[hello_world_system]を右クリックし、[Create HDL Wrapper]をクリック。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/4a50074c-ed4f-89bb-ad1b-f9c4ff42e311.png)

このまま[OK]をクリック。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/74aa4727-702a-f53e-d21e-d0a93969d15a.png)

もしクロック出力を接続していないとエラーが出る。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/51c71a74-290e-19a2-da15-2afa24219f5b.png)

そのまま[OK]をクリック。
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/7c0c54e3-a2c0-efb7-dc89-7675497f667f.png)

[Generate Bitstream]をクリック。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/bef061b0-a640-95c5-f9a7-2fdf6a81debb.png)

[Yes]をクリック。
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/f3a6d721-8ae8-cb07-3275-4faa894ffcbe.png)

[OK]をクリック。
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/b5fb00bc-054f-d228-2f82-dda5b432ac92.png)

bitstreamファイル作成までしばらく時間がかかる。

この画面が出れば完了。[Cancel]で良い。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/44dd3514-ce9c-f658-545e-c18ae6abb013.png)

[File]タブから[Export]>[Export Hardware...]を選択する。
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/ef0312a8-5966-62df-1cba-56cc3966fbac.png)

[Next]を選択。
![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/720dbea8-3c1a-d769-e395-5dfc9f3007fe.png)


[Include bitstream]を選択して[Next]を選択。
![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/e7db9da6-30b9-af86-da1d-043b52ddf2eb.png)

XSAファイル名と格納するディレクトリを指定する。
ファイル名は[hello_world_system_wrapper]とする。
[Next]をクリック。
![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/38a230f6-64d9-9fcc-6c07-b318e7c47cb9.png)

[Finish]を選択する。
![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/99bd6a23-0056-043b-9679-1d16d0664a7f.png)


#プロジェクトの作成と実行（Vitis）

[Tools]>[Launch Vitis IDE]をクリック。
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/859d0d79-41cb-9f98-8c18-a6b3d9373a9d.png)

Workspaceのディレクトリを指定して[Launch]をクリック。
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/7994cac9-591b-905c-b961-71b4831bc42d.png)

新しくウインドウが立ち上がるので[Create Application Project]をクリック。
![34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/f5c46d09-a5b5-95d9-a6e8-b9725456578d.png)

[Next]をクリック。
![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/05af4428-0689-eba8-078b-697cd055999c.png)

[Create a new platform from hardware (XSA) ]タブから[Browse]をクリック。
![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/35517b5b-7303-cb3f-0530-b95de72ade6d.png)

Vivadoで作成した”hello_world_system_wrapper.xsa”を選択して[開く]をクリック。
![37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/4a7f56f7-5a33-c5ff-1298-0afeeb62f3a5.png)

[Next]をクリック。
![38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/84862eec-00b5-5331-8882-547a96bddd83.png)

アプリケーションプロジェクト名を入力し、[Next]をクリックする。
アプリケーションプロジェクト名は”hello_world_apprication”とした。
![39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/1a25cfee-de30-940a-b7d6-f9ea25fbb0de.png)

[Next]をクリック。
![40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/06de0a91-d96f-2b15-ef3a-f3890051c10d.png)

“Hello World”を選択し、[Finish]をクリック。
![41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/3e877d09-3729-f2bb-4555-397f94a92467.png)

Vitis IDEのウインドウが立ち上がる。
![42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/2f14be87-dc67-3145-9a45-482fda95c7a1.png)

プラットフォームプロジェクトをビルドする。
“hello_world_system_wrapper”を右クリックし、[Build Project]を選択。
![43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/ebe8db28-5f1f-41a4-cb04-466b981b8d97.png)

システムプロジェクトをビルドする。
“hello_world_application_system”を右クリックし、[Build Project]をクリックする。
![44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/ba23b378-4794-2a04-0fd7-3f1292b180e1.png)

“hello_world_application_system”を右クリックし、[Debug As]から[Launch Hardware]をクリックする。
![45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/4ff143e8-1f33-a850-4664-97f71dd5759f.png)

ジャンパをQSPIからJTAGに変更していないとエラーが出る。
また電源ボタンをオンにしていないとエラーが出る。
![46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/9f1ac433-d33e-e75b-52ee-fc80de40a60e.png)

デバッガ操作画面に切り替わる。
init_platform()が緑色にハイライトされていて、ここで処理が停止していることを示している。（システムプロジェクトをビルドしていないと停止しない）
![47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/fe8c1284-6f8c-1b4f-866b-a4c2d9fcd455.png)

ZyboボードのLD10 LED（Done）が緑色に点灯する。
![48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/85bd6489-a063-9d47-8d4c-576210740286.png)

[Vitis Serial Terminal]タブから[+]マークをクリックする。
ポートを選択し、ボーレートを115200に設定して[OK]をクリック。
![49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/b26a840a-bba4-4378-3bb9-e5caa3c992f8.png)

init_platform()で動作が停止しているアプリケーションを[Resume]マークをクリックして再開する。
![50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/e059565c-f6d6-1537-0bd9-975de8746e2e.png)

“Hello World”の文字列が表示される。
![51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601058/053465c6-75b4-842d-3e81-22d506b112c4.png)

#参考
https://qiita.com/iwatake2222/items/24a8a94741fdbb80f62a
https://phys-higashi.com/114/
https://phys-higashi.com/152/

#おわりに

この記事はFPGAもZYBOも初心者の自分が色々調べながらメモ代わりに書いております。現状では動作することは確認できておりますが、間違いがあったり、後から記事を修正する場合があります。ご容赦ください。
もしも間違っている内容等ありますが、ぜひご指摘ください。