1500円ZYNQ基板でFPGAプログラミング大全Xilinx編(第2版)の実習 5-3 Zynqのプログラムを実行

#はじめに
1500円 ZYNQ 基板(EBAZ4205)で、
FPGAプログラミング大全Xilinx編(第2版)の課題5-3
「Zynq のプログラムを実行」
を実習したいと思います。

#基板の改造 (JTAG ブートモードの追加)
以前の投稿記事 [1500円ZYNQ基板で microSD から起動する](https://qiita.com/kan573/items/54f5e8116fccc6c37b57)
で、NAND/SD ブートモード切り替えスイッチと、リセットボタンを追加しました。

Vitis から JTAG ケーブルでデバッグを行うとき、ZYNQ を JTAG モードでブートする必要があります。
そのため、JTAG ブート用のスイッチを追加します。

下図のように、U12-IO2 を L に落とす JTAG-SW (茶色)を追加します。
R2585 のランドを使って配線します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/0ed6e6bb-accc-cef3-6ff1-3050b958ab1f.png)

改造例はこのようになります。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/0788d1fa-4871-212c-b6f3-a6dff2e1e693.jpeg)

タクトスイッチをしっかり固定するため、スイッチのフレームと GND は 470uF/16V マイナス側のパターンのレジストを削って接続しています。


EBAZ4205 に電源投入後、JTAG-SW を押しながらリセットボタンを押すと、JTAG モードで再起動します。
一度起動した後は、リセットや電源再を投入しない限り、そのモードで動き続けます。

JTAG モードへ移行するリセット時、NAND/SD 切り替えスイッチは、どちらになっていても構いません。

・NAND 側にしておくとダイレクトに JTAG モードでブートします。
・SD 側にしてあると QSPI モードになりますが、有効なメモリが接続されていないため、JTAG モードに移行します。

結果、NAND or SD どちらで動作していても、JTAG スイッチを押しながらリセットボタンを押すことで、JTAG モードに入ることができます。


#プラットフォームファイルのエクスポート
[前の記事の最後](https://qiita.com/kan573/items/3c1ca1c4cd7ff94da38c#%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE-export)で、Vivado のプロジェクトからプラットフォームファイル(.xsa)をエクスポートしました。
このファイルを使って、Vitis でプロジェクトを作成します。

前記事の最後で作成した design_1_wrapper.xsa ファイルを確認します。

>C:/Users/(ユーザー名)/Desktop/ebaz4205_taizen/ebaz4205.vitis

に、生成したかと思います。

※フォルダ名に .vitis を追加して、Vivado のプロジェクトと同じフォルダにならないようにしています。
　.xsa ファイルと同じフォルダに vitis がファイルを追加するので、フォルダを分けておく方が管理が楽です。

#Vitis の起動とプロジェクト作成

p.201 ◎Vitis の起動とワークスペースの指定(図5-18、図5-19)
大全の手順通り進めますが、ワークスペースとして指定するフォルダは新規作成します。
C:\Users\(ユーザー名)\Desktop\Vitis_workspace
としておきます。
このフォルダに Vitis がプロジェクト毎のフォルダを作成していきます。

p.202 ◎プラットフォームプロジェクトの作成(図5-20)
大全の通り、プロジェクト名を指定して、design_1_wrapper.xsa ファイルを指定します。

p.204 ◎アプリケーションプロジェクトとシステムプロジェクトの作成(図5-21)
Part: と Family の空欄に気を付けて進めます。(※)


p.207 ◎Vitis の操作画面
無事に図5-22 の画面まで進めたら、次へ移ります。




※作成されたプラットフォームプロジェクトは Out-of-date 表示になっています。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/257a3ed4-cefa-ee97-029b-c70f58c92b6b.png)

再現性がわからないのですが、「アプリケーションプロジェクト作成」へ進んだとき、General Info の中の Part: と Family: が正しく認識されず、空欄になってしまうことがあります。

空欄のままだとビルドでエラーが出てしまい、正常に進めることができません。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/9bd48e1f-dd4d-097b-b41c-062c204b111b.png)


空欄になってしまった場合は、アプリケーションプロジェクト作成をキャンセルして、プラットフォームプロジェクトを先に Build Project してやります。
そうすると、Out-of-date が解消されます。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/2da60b2d-40e3-a20a-25c5-0a5f2fa443ed.png)


再度アプリケーションプロジェクト作成へ進めば、Part: と Family: が正しく認識され、正常にデバッグできるようになります。

#プロジェクトのビルドおよびダウンロードと実行
p.208 ◎プロジェクトのビルド(図5-23)
ビルドを実施して、エラーが出ない事を確認します。

p.209 ◎デバッグ設定の作成とプログラムのダウンロード(図5-24)
p.211 ◎デバッグ時の操作画面
p.212 ◎シリアルターミナルの設定とプログラムの実行(図5-26、図5-27)
大全の手順通り進めます。

無事、シリアルターミナルに Hello World が表示されました。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/83ab361e-ad89-5f5e-c742-bad252f19702.png)

ダウンロード後にエラーになり、下の画面が表示される場合は、JTAG モードになっていませんので、ZYNQ を JTAG モードで再起動してください。
Vitis はそのままで、リセットして JTAG 再起動後に Debug 実施すればよいです。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/f3d027b0-e438-d4f0-0f1a-9dca630fa831.png)


#LED 点滅プログラムの実行
p.217 ◎新しいアプリケーションプロジェクトを作成(図5-29、参考:図5-21)
p.218 ◎ソースファイルのコピー(図5-30)
p.219 ◎ビルド(参考:図5-23)
ここまで大全の手順通りに実施します。

p.219 ◎デバッグ設定の簡易作成とプログラムのダウンロード(図5-31)
どうも、私の環境では Debug As の横に簡易作成のメニューが出ないようでした。
p.210 図5-24(c) と同様にして、Debug Configurations を作成しました。

その際、Debugger-hello-Default の設定が残っていますので、
・Name: を Debugger_hello-Default から Debugger_led_test-Default に変更
・Project: を hello から led_test に変更
として、Debug ボタンを押します。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/4da12894-1ed5-72db-7e7b-3aff34a9ddad.png)


ダウンロードまで、自動で進みます。

Resume ボタンを押してプログラムを実行すると、LAN コネクタ横の LED がパターン点滅を始めます。

LED の点滅パターンは、大全のプログラム通りなので、
[1500円ZYNQ基板でFPGAプログラミング大全Xilinx編(第2版)の実習 2-1 LED点滅回路](https://qiita.com/kan573/items/2443cc97d1c101fb501a)
の時の LED 点滅パターンとは異なりますが、プログラムは正しく動作しています。


#まとめ
FPGAプログラミング大全Xilinx編(第2版)の課題5-3
「Zynq のプログラムを実行」
を EBAZ4205 で実習することができました。