Vitis + Vivado + zynq = 楽しい


目的(purpose)

今回はzynq内のcpu上のソフトウェアでTera Term上に「Hello World」を出力してみます。
流れとしてはVivadoを用いてハードウェアを構成し、Vitisを用いてHello Worldを出力するソフトウェアを作成していきます。
また、私がzynqとvivado,sdkの勉強に使わせていただいた記事が下のリンクとなっています。
ZYBO (Zynq) 初心者ガイド (2) Hello Worldプロジェクト - Qiita
今回はsdkではなくvitisを使用しますがそれ以外は同じなので上の記事を参考にすすめさせていただきます。


開発環境(Development environment)

OS:

  • Windows10 Home

ツール:

  • Vivado 2019.2
  • Vitis IDE
  • Tera Term
  • ZYBO Z7 (Zynq 7010)


ハードウェアの作成(create hardware)

まず最初にVivadoを用いてハードウェアを作成します。作成するハードウェアに関しては「目的」項目内に記載さいた記事と全く同じなのでプロジェクトの作成からブロックデザインまでそちらを参考にPS部だけのハードウェアを作成してください。
※ 全く同じと書きましたが実際上のリンクで扱っているボードはz7-20で、今回私が使っているボードはz7-10なので
ボードファイルを選ぶ部分ではz7-20ではなくz7-10を選択してください
一応完成したハードウェアは以下の画像になります。

f:id:fetchkun:20200518180150p:plain
PS部だけのハードウェアが作れたらそのHDLラッパーを作成するため以下のようにBLOCK DESIGN上のSourcesタブdesign_1を右クリックして下画像のようにラッパーを作成してください。
(多分、Generate Output ProductsをしなくてもCreate HDL Wrapperだけで大丈夫です。ちなみに私は大丈夫でした。)

f:id:fetchkun:20200518180222p:plain

ラッパー作成が完了したら下の画像のようになります。

f:id:fetchkun:20200518180249p:plain

次にビットストリームファイルを作成します。
Flow NavigatorPROGRAM AND DEBUGにある項目のGenerate Bitstreamをクリックします。
途中でポップアップウィンドウが2つくらい出てくるかもしれませんが私はそのままOKで勧めました。
結構時間がかかるのでコーヒーを飲むなり時間を潰していてください。
作成が完了するとwrite_bitstream Completeの文字が画面右上に表示されます。

f:id:fetchkun:20200518180311p:plain

最後にビットストリームファイルをエクスポートします。
メニューバーからFileを選び、ExportのExport Hardwareを選択します。

f:id:fetchkun:20200518180329p:plain

そしてInclude bitstreamのチェックボックスにチェックを入れてOKをクリックします。

f:id:fetchkun:20200518180347j:plain

エクスポートが完了するとプロジェクトフォルダ下にdesign_1_wrapper.xsaというファイルが作成されていると思います。
エクスポートしたはずなのに作成できていない場合があります。
しばらく時間をおいてから再度エクスポートすれば作成できるかも……
または一旦、メニューバーのFileClose Projectでプロジェクトを閉じてから再度プロジェクトを開きなおして、xsaファイルをエクスポートするとうまくいくかも……

(単に私のパソコンのスペックが低く、処理が間に合っていなかっただけかも知れません。)
このファイルは次Vitisで使うので覚えていてください。

一応BLOCK DESIGNDiagramタブを選択し、ZYNQというブロックをダブルクリックし、PS PL Configurationを選び、Gereralを選択すると下の画像が表示されると思いますがUART1 Baud Rateを見てみると115200と表示されていると思います。この数字も覚えておいてください。

f:id:fetchkun:20200518180416p:plain


ソフトウェアの作成(create software)

次はいよいよVitisを使ってソフトウェアを作成していきます。
メニューバーのToolを選択するとLaunch Vitisの項目が出てくるのでクリック

f:id:fetchkun:20200518180510p:plain

すると下画像のようにWorkspaceの作成を促されるので任意の場所にWorkspaceを作成してください。

f:id:fetchkun:20200518180535p:plain

すると下画像のウィンドウが表示されます。FileのNewのApplication Projectを選択

f:id:fetchkun:20200518180556p:plain

プロジェクト名は適当にhello_vitisにしてNextをクリック

f:id:fetchkun:20200518180615p:plain

プラットフォームの選択ですがCreate a new platform from hardware (XSA)タブをクリックし
"+"のボタンをクリックするとエクスプローラーの画面が開くのでハードウェアの作成で作った.xsaファイルのdesign_1_wrapper.xsaを選択してください。

f:id:fetchkun:20200518180638p:plain

下画像のようになります。

f:id:fetchkun:20200518180656p:plain
design_1_wrapper.xsaを選択したままNextをクリック

下画像のようなDomainのウィンドウが開きますがそのままNextをクリック

f:id:fetchkun:20200518180711p:plain

templateも今回Hello Worldを出力するのでHello Worldを選択してFinishをクリック

f:id:fetchkun:20200518180733p:plain

するとエディターの画面が開きます。ExplorerのHello_vitisプロジェクトのhelloworld.cを開くとデフォルトでコードが生成されているのが分かります。今回はこのコードをそのまま使います。

f:id:fetchkun:20200518180749p:plain

Hello_vitisプロジェクトを右クリックし、Build Projectをクリックすることでビルドできます。

f:id:fetchkun:20200518180806p:plain


Hello Worldの出力(helloworld output)

いよいよHello Worldを出力します。
まずZynqの緑丸で囲ってあるジャンパがUSBについていることを確認しマイクロUSBでパソコンと接続し(赤丸)青丸のジャンパがJTAGについていることを確認する。その状態で電源を入れます。

f:id:fetchkun:20200518180830p:plain

次にTera Termを起動します。
シリアルの項目を選択しポートをUSB Serial Portを選択しOKをクリック

f:id:fetchkun:20200518180852p:plain

メニューバーの設定からシリアルポートを選択すると

f:id:fetchkun:20200518180910p:plain

下画像の画面になります。スピードの項目をハードウェアの作成の時に確認した115200を設定します。

f:id:fetchkun:20200518180924p:plain
これでTera Termの設定は完了

そして次にZynqにハードウェアの情報を書き込みます。メニューバーのXilinxからProgram FPGAを選択すると

f:id:fetchkun:20200518180946p:plain

下画像のウィンドウが表示されますがそのままProgramをクリック、Zynqにハードウェアの情報が書き込まれます。

f:id:fetchkun:20200518181002p:plain

最後にExplorerのhello_vitisプロジェクトを右クリックしRun AsのLaunch on Hardwareをクリックすると

f:id:fetchkun:20200518181022p:plain

Tera TermにHello Worldが表示されます。

f:id:fetchkun:20200518181039p:plain

以上で今回の目的は達成しました。


最後に(Finally)

今回初めてvitisを使用したので間違ってる点や無駄な作業もあるかもしれませんが少しでも役に立てたら幸いです。
また、Vitisに関しての公式URLを下に記載しておきます。
https://japan.xilinx.com/content/dam/xilinx/imgs/press/media-kits/j_vitis-media-analyst-presentation-v2.pdf
また、この記事以外にもVivado, Vitis, zynqに関して他の記事を書いているのでぜひ見てください。