Vitis Platform の作成1(ハードウエアデザインの作成)
はじめに
XilinxのZynqシステムでARMとFPGAを使ったEmbeddedシステムを開発するためにはVitisによるス組み込みカスタムプラットフォームの作成が必要になります。
今回はこのプラットフームの作成手順について確認して行こうと思います。
※下図の赤枠部分に相当します。
Vivadoプロジェクト生成
Vivadoでハードウエアデザインを作成して行きます。
ハードウエアデザインはVivadoで生成します。以下のコマンドでVivadoを起動します。
source /tools/Xilinx/Vitis/2020.1/settings64.sh
vivado &
Vivadoが起動したら新規プロジェクトを作成します。
[File] -> [Project] -> [New]
を選択します。
Project Name
でzcu104_custom_platform
と指定して Next
をクリックします。
Vitisプラットフォームを生成するので、Project is an extensible Vitis Platform
にチェックを入れてNext
をクリックします。
次の画面に進んだら、ZCU104ボードを選択してNext
ボタンをクリックします。
※boardfileがない場合はRefreshボタンをクリックしましょう。
確認画面が表示されるのでFinish
をクリックしてVivadoプロジェクトを生成します。
IP追加(Zynq UltraScale+ MPSoc)
生成されたVivadoプロジェクトから、[Project Manger] -> [IP INTEGRATOR] -> [Create Block Design]
をクリックします。
ダイアログが表示されるのでDesign Name = system
に変更してOK
をクリックします。
Diagram
画面が表示されるので画面を右クリックしてAdd IP
を選択します。
IPリストが表示されるので、その中からZynq UltraScale+ MPSoC
を選択してダブルクリックします。
Diagram
画面上Zynq UltraScale+ MPSoC
が追加されます
ここで画面上部にRun Block Automation
が表示されるので、その文字をクリックします。
以下の画面が表示されるのでOK
をクリックします。
IP追加(Clocking Wizard)
同様の手順で、今度はClocking Wizard
を選択してダブルクリックします。
Diagram
画面上にclk_wiz_0
が追加されます。
Clocking Wizard
の設定をしていきます。Clocking Wizard
をダブルクリックして設定画面を開きます。Output Clocks
タブを選択しclk_out1=100Mhz, clk_out2=200Mhz, clk_out3=400Mhz
に設定します。
また、画面下部にあるReset Type
をActive Low
に設定します。
OK
をクリックして設定画面を閉じます。
IP追加(Processor System Reset)
同様の手順で、今度はProcessor System Reset
を選択してダブルクリックします。
Diagram
画面上にProc_sys_reset_0
が追加されるので、選択してCtrl-Vで4つ複製します。
clk_out番号
と紐づけたいため、proc_sys_reset_0は削除しておきます。
Diagram
画面上部にあるRun Connection Automation
をクリックします。
Run Connection Automation
画面が開きくので、以下を設定します。
- clk_wiz_0のclk_in1の
ClockSourc = zynq_ultra_ps_e_0/pl_clk0
- proc_sys_resetのインスタンス毎に
ext_reset_in
のSelectBoardPartInterface = custom
SelectManualSource = zynq_ultra_ps_e_0/pl_resetn0
- proc_sys_resetのインスタンス毎に
slowest_sync_clk
を- proc_sys_reset_1の
ClockSource=/clk_wiz_0/clk_out1
- proc_sys_reset_2の
ClockSource=/clk_wiz_0/clk_out2
- proc_sys_reset_3の
ClockSource=/clk_wiz_0/clk_out3
- proc_sys_reset_1の
最後に全てのチェックボックスがチェックされていることを確認してOK
をクリックします。
以下のようにDiagram
画面上の各モジュールが結線されることが確認できます。
clk_wiz_0
のlocked
信号とproc_sys_reset
のdcm_locked
を接続します。
Clockの設定
Vivadoの[Window] -> [Platform Setup]
を選択してPlatform Setup
画面を開きます。
[Settings]から[Clock]
タブを選択します。
clk_wiz_0のOutput Clocks
で生成した各clock(clk_out1、clk_out2、clk_out3
)を有効にします。IDを1、2、3に変更し、デフォルトclockをclk_out2に設定します。
割り込みの設定
プラットフォームから割り込みコントローラを制御できるように設定します。
Zynq UltraScale + MPSoC
の割り込みコントローラを設定します。
Diagram
画面上のZynq UltraScale + MPSoC
をダブルクリックして設定画面を開きます。
AXI HPM0LPD
オプションを有効にし、データ幅設定を32
にします。
AXI HPM0FPD
とAXIFPM1FPD
は無効に設定してOK
をクリックします。
別途FPGA側にも割り込みコントローラIPを実装します。
Diagram
画面を右クリックしてAdd IP
を選択し、AXI Interrupt Controller
を指定します。Diagram
画面上に生成されたAXI Interrupt Controller
ブロックをダブルクリックして設定画面を開き、Interrupt Output Connection
をSingle
に設定してOK
をクリックします。
Diagram
画面上のRun Connection Automation
をクリックします。
axi_intc_0を有効化し、Clock Source for Slave interface
とClock Source for Master interface
に clk_wiz_0/clk_out2(200 MHz)
を指定し、OK
をクリックします。
割り込みコントローラのirqを接続します。
Diagram
画面上から、axi_intc_0.irq
とzynq_ultra_ps_e_0.pl_ps_irq[0:0]
を接続します。
Platform Setup
画面を開き、[Settings]から[Interrup]
タブを選択し、axi_intr_0
を有効化します。
ここまでの結果は以下の通りとなります。
AXIインターフェイス設定
Zynq UltraScale + MPSoC
のAXI Mastert/Slave interface
を有効にします。
AXI Interconnect
のAXI Master interface
を有効にします。
Zynq UltraScale + MPSoC
のAXI Slave interface
を有効にします。
XSAファイルのエクスポート
Diagram
のValidate Design
のアイコンをクリックしてデザインの検証を実施します。
以下の警告メッセージが出ますが、プラットフォーム実行カーネルビルド時に解決される問題なので、ここでは無視しても大丈夫です。
デザインTOPのラッパーを生成します。
Source
タブの[Design Sources] -> [system (system.bd)]
を右クリックしてCreate HDL Wrapper
を選択します。
Let Vivado manage wrapper and auto-update
を選択してOK
をクリックします。
最終的なデザインを生成します。
Flow Navigator
の[IP INTEGRATOR] -> [Generate Block Design]
を選択します。
以下の画面が表示されます。Synthesis Options
をGlobal
に設定してGenerate
をクリックします。
最後にプラットフォームをエクスポートします。
Vivadoのメニューから[File] -> [Export] -> [Export Platform]
を選択して、ウィザードを起動します。
ウィザードの最初のページはNext
をクリックして次のページに進みます。
次のページではPlatform Type
にHardware
を選択してNext
をクリックします。
Platform State
にPre-sysnthesis
を選択してNext
をクリックします。
Platform Properties
を設定して、Next
をクリックします。
XSA file name
にzcu104_custom_platform_hw
を設定してFinish
をクリックします。
プロジェクトフォルダzcu104_custom_platform
直下にzcu104_custom_platform_hw.xsa
ファイルが生成されていることが確認できました。
以上で、ハードウエアデザインの作業は完了です。
次はソフトウエアプラットフォームの作成を見ていこうと思います。
Discussion