ハードウェア コンポーネントの作成

まず、ターミナル ウィンドウで実行されるターゲット プラットフォームのタイプ (bash、csh) に合わせて Vitis 設定スクリプト (*.sh*.csh) を読み込んで、Vitis 統合設計環境 (IDE) を設定するところから開始します。Vivado Design SuiteVitis IDE をインストールすると含まれます。Vivado だけをインストールした場合は、次に示すように Vitis を使用してハードウェア コンポーネントを作成することはできますが、Vitis ターゲット プラットフォームを作成するには Vitis IDE が必要です。

source <Vitis_Install_Directory>/settings64.sh or
       <Vivado_Install_Directory>/settings64.sh

Vitis GUI には、ハードウェア開発プロジェクトを作成するためのさまざまなダイアログ ボックスが含まれます。プロジェクトを作成する Vitis ダイアログ ボックスに従って指定していき、Vitis IP インテグレーター デザインを Vitis ターゲット プラットフォームのベース ハードウェアとして作成します。アクセラレーション カーネルをサポートするデザインのハードウェア要件については、ハードウェア コンポーネント要件 を参照してください。

  1. <platform_name>_pkg のような命名規則に従って名前を指定して作業ディレクトリを作成し、Vivado サブディレクトリを生成して、Vivado Design Suite を起動します。
    1. mkdir zcu102_min_pkg
    2. cd zcu102_min_pkg
    3. mkdir vivado
    4. cd vivado
    5. vivado
  2. Vivado メニューを使用するか、ウェルカム ページでクイック スタート リンクをクリックして新規プロジェクトを作成します。
    1. File > Project > New をクリックします。
    2. Next をクリックします。
  3. [Project Name] ページで次を設定します。
    1. [Project Name] を指定します。この例の場合、デフォルトの project_1 という名前に設定されています。
    2. デフォルトのプロジェクト ディレクトリを維持します。必要であれば、省略記号ボタンをクリックして別のディレクトリを指定します。
    3. [Create project sub-directory] をデフォルトのオンのままにします。
    4. Next をクリックします。
  4. [Project Type] ページで次を設定します。
    1. RTL Project はデフォルトのままオンにします。
    2. Do not specify sources at this time をオンにします。
    3. Next をクリックします。
  5. [Default Part] ページで ZCU102 ボードを選択します。
    1. [Parts | Boards] で Boards をクリックします。
    2. [Filter Search] テキスト ボックスに zcu102 と入力します。
    3. ボード リストに表示される ZCU102 ボードを選択します。
    4. Next をクリックします。
  6. [New Project Summary] ページで次を実行します。
    1. 設定を確認し、必要であれば Back をクリックして設定し直します。
    2. Finish をクリックし、Vivado プロジェクトを作成します。

IP インテグレーターを使用してブロック デザインを作成し、ザイリンクス シェル アーカイブ (XSA) を生成します。XSA には、Vitis ターゲット プラットフォームを構築するのに必要なハードウェア仕様とメタデータが含まれます。IP インテグレーターを使用してブロック デザインを作成するところから開始します。

  1. Vivado の Flow Navigator でIP Integrator > Create Block Design をクリックします。
  2. [Create Block Design] ダイアログ ボックスでは、次を設定します。
    1. [Design name] はデフォルトの design_1 のままにします。
    2. [Directory of] はデフォルトの <Local to Project> のままにします。
    3. [Specify source set] を [Design Sources] のままにします。
    4. OK をクリックします。
  3. ブロック図で次を実行します。
    1. + ボタンをクリックして新しい IP のインスタンスを追加します。必要な IP ブロックを見つけるには、検索ダイアログ ボックスを使用できます。
    2. zynq を検索します。
    3. IP の検索結果から Zynq UltraScale+ MPSoC をダブルクリックします。

Zynq UltraScale+ MPSoC ブロックが IP インテグレーターに追加され、カスタマイズできるようになります。選択されているデフォルトは ZCU102 ボードなので、この IP ブロックをカスタマイズするためのボード プリセットが既にあります。

  1. Run Block Automation リンクをクリックしてボード プリセットを適用します。
  2. [Run Block Automation] ダイアログ ボックスで次がオンになっていることを確認します。
    • [All Automation]
    • [zynq_ultra_ps_e_0]
    • [Apply Board Presets]
  3. OK をクリックします。

次は、ベースのハードウェア デザインを 2019.2 より前の SDK ソフトウェア フローと同様に使用するかどうかを決めて、ハードウェア アクセラレータ (カーネル) を接続してデザインの機能を拡張します。SDK ツールの HDF のように使用される XSA を生成する方法については、エンベデッド ソフトウェア開発用の XSA を参照してください。アクセラレーション カーネルの追加をサポートする XSA を作成する方法は、アプリケーション アクセラレーション開発フローの XSA を参照してください。

エンベデッド ソフトウェア開発用の XSA

SDK 開発フローとの継続性を維持するには、以前のリリースの場合と同様、Vivado でハードウェア デザイン プロセスを終了させてから、ハードウェア仕様をエクスポートしてダウンストリーム ツールに渡すようにします。Vivado では、HDF 形式のハードウェア仕様の代わりに、XSA 形式のハードウェア仕様が出力されるようになっています。この XSA ファイルを Vitis IDE で使用すると、スタンドアロン ドメインでターゲット プラットフォームを作成して、スタンドアロンまたはベアメタル ソフトウェア開発を開始できます。

Linux アプリケーション開発の場合は、XSA ハードウェア仕様を PetaLinux ツール フローへの入力に使用して、Linux ソフトウェア イメージおよびオブジェクト ファイルとルート ファイル システムのセットを作成します。PetaLinux で生成したファイルは、この後 Linux ドメインを含む Vitis ターゲット プラットフォームの構築に使用されます。

エンベデッド ソフトウェア開発用のハードウェア デザインの生成

ハードウェア デザインの SDK フロー タイプを生成するには、次の手順に従ってください。カーネルを使用するアプリケーションと互換性のあるハードウェア デザインを作成する場合は、次の手順を飛ばして、アプリケーション アクセラレーション開発フローの XSA を参照してください。

この段階では、Vivado ブロック オートメーションにより、Zynq UltraScale+ MPSoC ブロックが追加され、ZCU102 のすべてのボード プリセットが適用されています。出力ファイル、ビットストリームを生成してハードウェアをエクスポートする前に、HPM インターフェイスのクロック信号を接続して、IP インテグレーター デザインを検証します。次は、この例 の IP インテグレーター ブロックを使用して SDK フローをサポートする XSA を生成する方法を示しています。ハードウェアをエクスポートして XSA を生成する前に、その他の PL ロジックや異なる PS カスタマイズ設定を適用できます。

  1. pl_clk0maxihpm0_fpd_aclk および maxihpm1_fpd_aclk に接続します。
  2. IP インテグレーター アイコンのメニューでチェックマークの付いたボックスをクリックして、デザインを検証します。

  3. [Sources] ビューで BD design (design_1.bd) を右クリックし、Generate Output Products をクリックします
    1. 合成オプションには、デフォルトの [Out-of-context per IP] を使用します。
    2. run 設定には、デフォルトの [On local host] を使用します。
    3. Generate をクリックします。
    4. 生成が終了したら、[Design Run] タブで [Out-of-Context Module Runs] を展開し、デザイン名の横に緑のチェックマークが表示されたことを確認します。
  4. [Sources] ビューで BD design を右クリックし、Create HDL Wrapper をクリックします。
    1. デフォルト オプションである [Let Vivado manage wrapper and auto-update] をオンにします。
    2. OK をクリックします。
  5. Flow Navigator でProgram and Debug > Generate Bitstream をクリックします。
    1. Yes をクリックして合成およびインプリメンテーションを開始します。
    2. [Launch Runs] ダイアログ ボックスの設定はデフォルトのままにして OK をクリックします。
    3. 「Bitstream Generation Completed」というメッセージが表示されたら、Cancel をクリックして続行します。
  6. File > Export > Export Hardware をクリックして、ハードウェア デザインをエクスポートします。
    1. Include bitstream をクリックします。
    2. その他の設定はデフォルトのままにします。
    3. OK をクリックします。
  7. XSA (design_1_wrapper.xsa) が生成されて、Vivado プロジェクト ディレクトリに含まれます。

ハードウェア仕様を含む XSA を作成でき、Vitis エンベデッド ソフトウェア開発フローで使用できるようになりました。この XSA を使用すると、Vitis ソフトウェア アプリケーションを作成できます。

この XSA を Linux アプリケーションに使用する場合は ソフトウェア コンポーネントの作成、それ以外の場合は プラットフォームの作成 に進んでください。

アプリケーション アクセラレーション開発フローの XSA

この段階では、Vivado ブロック オートメーションにより、Zynq UltraScale+ MPSoC ブロックが追加され、ZCU102 のすべてのボード プリセットが適用されています。IP ブロックとメタデータを追加して、アクセラレーション カーネルをsポートするベースのハードウェア デザインを作成します。

プロセッサ IP ブロックの再カスタマイズ

Vitis アプリケーション アクセラレーション フリーの場合、次の手順でプロセッサ IP ブロックを再カスタマイズします。再カスタマイズ後のブロック図は、次のようになります。

  1. IP インテグレーター内で Zynq UltraScale+ MPSoC ブロックをダブルクリックします。
  2. Page Navigator > PS-PL Configuration をクリックします。
  3. > シンボルをクリックして PS-PL Configuration > PS-PL Interfaces を展開します。
  4. Master Interface を展開します。
  5. AXI HPM0 FPD および AXI HPM1 FPD インターフェイスをオフにします。
  6. OK をクリックします。
  7. ブロック デザインの Zynq UltraScale+ MPSoC シンボルから IP ブロック インターフェイスが削除されたことを確認します。

IP ブロックの追加

エンベデッド システムでカーネルがサポートされるようにするには、IP ブロックを追加して次のハードウェア要件を満たす必要があります。IP インテグレーター ブロック図で + アイコンをクリックして、検索ボックスにブロック名を入力して IP を追加します。次のようなブロック図になります。

  1. ブロック デザインにクロックを追加します。
    1. Add IP コマンドをクリックするか、+ ボタンをクリックして IP を検索するダイアログ ボックスで Clocking Wizard を検索して追加します。
    2. clk_wiz_0 IP ブロックをダブルクリックして [Re-Customize IP] ダイアログ ボックスを開きます。
    3. Output Clocks タグをクリックします。
    4. Output Clock 列の clk_out1clk_out5 をオンにし、Requested Output Freq を次のように設定します。
      • clk_out1: 100 MHz
      • clk_out2: 200 MHz
      • clk_out3: 300 MHz
      • clk_out4: 400 MHz
      • clk_out5: 500 MHz
    5. ダイアログ ボックスの一番下の Reset Type を [Active Low] に設定します。
    6. OK をクリックしてダイアログ ボックスを閉じます。
  2. Processor System Reset ブロックを追加します。
    1. Add IP コマンドをクリックするか、+ ボタンをクリックして IP を検索するダイアログ ボックスで Processor System Reset を検索して追加します。
    2. この手順を使用して、さらに 4 つの Processor System Reset ブロックを追加するか、proc_sys_reset_0 ブロックを選択してブロック図で 4 回コピー (Ctrl + C) および貼り付け (Ctrl + V) を繰り返します。
  3. クロックとリセットを接続します。
    1. Run Connection Automation をクリックし、proc_sys_reset ブロックをクロッキング ウィザードのクロック出力に接続するためのダイアログ ボックスを開きます。
    2. [Run Connection Automation] ダイアログ ボックスの左側で All Automation をオンにします。
    3. clk_wiz_0clk_in1 を選択し、Clock Source/zynq_ultra_ps_e_0/pl_clk0 に設定します。
    4. proc_sys_reset インスタンスごとに slowest_sync_clk を選択し、次のように Clock Source を設定します。
      • proc_sys_reset_0/clk_wiz_0/clk_out1 に設定
      • proc_sys_reset_1/clk_wiz_0/clk_out2 に設定
      • proc_sys_reset_2/clk_wiz_0/clk_out3 に設定
      • proc_sys_reset_3/clk_wiz_0/clk_out4 に設定
      • proc_sys_reset_4/clk_wiz_0/clk_out5 に設定
    5. proc_sys_reset インスタンスごとに ext_reset_in を選択し、次のように Select Manual Source/zynq_ultra_ps_e_0/pl_resetn0 に設定します。
    6. すべてのチェック ボックスをオンにし、OK をクリックしてダイアログ ボックスを閉じ、接続を作成します。
  4. proc_sys_reset インスタンスのdcm_locked 信号すべてを clk_wiz_0 のロックされた信号に接続します。
上記の手順が終了したら、ブロック デザインは次のようになります。
1: 基本的なプラットフォーム ブロック デザイン


次は、ターゲット プラットフォームのプロパティを追加し、v++ リンカーに使用可能なインターフェイスを宣言して、カーネルをベースのハードウェア デザインと統合します。

プラットフォーム (PFM) インターフェイスおよびプロパティの定義

PFM インターフェイスおよびプロパティは、IP インテグレーター ブロック デザインの [Platform Interfaces] ビューから宣言します。まだ開いていない場合、Vivado メニューで Window > Platform Interfaces をクリックして [Platform Interfaces] ビューを開き、Enable platform interfaces リンクをクリックします。

Tcl コマンドを使用してプラットフォーム プロパティを設定する方法は、プラットフォーム インターフェイス プロパティのコンフィギュレーション を参照してください。

[Platform Interfaces] ビューには、デザイン内のさまざまな IP ブロック、およびアプリケーション アクセラレーション フローで Vitis コンパイラがリンクする使用可能なインターフェイス ポートが表示されます。次の手順に従うと、カーネルをハードウェア デザインに統合する際に、インターフェイスの v++ リンカーでの使用をイネーブルまたはディスエーブルに宣言できます。

ヒント: Ctrl または Shift キーを使用すると、複数のインターフェイスを選択して同時に設定できます。
  1. [Platform Interfaces] ビューで zynq_ultra_ps_e_0 ブロックを展開し、ディスエーブルのままにしておくべき次のインターフェイスを除いたインターフェイスを右クリックし、Enable をクリックしてすべてのインターフェイスをイネーブルにします。
    • S_AXI_ACP_FPD
    • S_AXI_LPD
    • pl_clk0
  2. clk_wiz_0 ブロックを展開して、clk_out1 から clk_out5 まですべてのクロックをイネーブル。
  3. clk_out3 をクリックし、Platform Interface Properties ビューでそのプロパティを変更して、プラットフォームのデフォルト クロックとして定義します。
    1. Options タブをクリックします。
    2. id = 0 に設定します。
      重要: 編集後に変更を保存するには、Enter をクリックする必要があります。
    3. is_default をオンにします。
    4. status = fixed になっていることを確認します。

さまざまなプラットフォーム インターフェイスを指定した後、プロジェクト プロパティを設定し、オプションでエミュレーションをイネーブルにし、ブロック デザインを検証し、出力ファイルを生成し、必要な XSA を生成します。

  1. プロジェクト プロパティも設定して、インプリメンテーション ツールを実行してビットストリームを生成する前に、ターゲット プラットフォームのハードウェア デザインで使用されるダウンストリーム ツールに伝えるようにする必要があります。
    set_property platform.design_intent.embedded true [current_project]
    set_property platform.design_intent.server_managed false [current_project]
    set_property platform.design_intent.external_host false [current_project]
    set_property platform.design_intent.datacenter false [current_project]
    set_property platform.default_output_type "sd_card" [current_project]
    
  2. これは、プラットフォームにハードウェア エミュレーション サポートを追加するためのオプションの手順です。zynq_ultra_ps_e_0 ブロックを選択し、[Block Properties] ビューで SELECTED_SIM_MODEL プロパティを rtl から tlm に変更します。
    ヒント: 次の Tcl コマンドでも同じ操作を実行できます。
    set_property SELECTED_SIM_MODEL tlm [get_bd_cells /zynq_ultra_ps_e_0]
  3. IP インテグレーター キャンバスで右クリックして Validate Design をクリックし、ブロック デザインに問題がないかどうかを検証します。
  4. [Sources] ビューで BD design (design_1.bd) を右クリックし、Generate Output Products をクリックします
    1. 合成オプションには、デフォルトの [Out-of-context per IP] を使用します。
    2. run 設定には、デフォルトの [On local host] を使用します。
    3. Generate をクリックします。
    4. 生成が終了したら、[Design Run] タブで [Out-of-Context Module Runs] を展開し、デザイン名の横に緑のチェックマークが表示されたことを確認します。
  5. [Sources] ビューで BD design を右クリックし、Create HDL Wrapper をクリックします。
    1. デフォルト オプションである [Let Vivado manage wrapper and auto-update] をオンにします。
    2. OK をクリックします。
  6. Flow Navigator でProgram and Debug > Generate Bitstream をクリックします。
    1. Yes をクリックして合成およびインプリメンテーションを開始します。
    2. [Launch Runs] ダイアログ ボックスの設定はデフォルトのままにして OK をクリックします。
    3. 「Bitstream Generation Completed」というメッセージが表示されたら、Cancel をクリックして続行します。
  7. 次の Tcl コマンドで XSA を作成します。
    write_hw_platform -include_bit zcu102_min.xsa
  8. XSA を検証します。
    validate_hw_platform ./zcu102_min.xsa
  9. XSA (zcu102_min.xsa) が生成されて、Vivado プロジェクト ディレクトリと同じレベルにあることを確認します。

カーネル サポートを含む XSA が作成され、Vitis ターゲット プラットフォーム プロジェクトでハードウェア コンポーネントとして使用して、カーネル ベースのアプリケーションが提供できるようになりました。ターゲット プラットフォームには、ソフトウェア コンポーネントも必要です。Linux ソフトウェア コンポーネントを生成するには PetaLinux ツールを使用し、XRT ライブラリ サポートと追加アイテム (ソフトウェア コンポーネントの作成 を参照) を含めます。