プラットフォーム ハードウェア コンポーネントの作成

プラットフォームのハードウェア コンポーネントには、SDx™ 環境からアクセラレーションされたハードウェア関数への論理および物理インターフェイスが取り込まれます。プロセッサ、メモリ、およびすべての外部ボード インターフェイスは Vivado® IP、ユーザーのカスタム IP、RTL を組み合わせてコンフィギュレーションされます。これにより、ハードウェア関数のロジック ラッパーが提供され、プラットフォームで最適に実行されるようになります。コンフィギュレーションおよびカスタマイズ オプションは多くあり、アクセラレーションされるハードウェア関数のタイプによって異なります。

ハードウェア プラットフォームの作成プロセスでは、Vivado® Design Suite デザインがビルドされ、クロック、割り込み、バス インターフェイスのプラットフォームおよびインターフェイス プロパティがコンフィギュレーションされてから、SDSoC プラットフォームで使用されるデバイス サポート アーカイブ (DSA) ファイルが記述されます。ロジック デザインは、IP インテグレーターを使用して取り込むことができ、RTL ソースを含めることができます。IP インテグレーター デザインおよび最上位 RTL モジュールをインスタンシエートするには、最上位ラッパーが使用されます。RTL モジュールは、IP インテグレーター ブロック デザインに直接追加することもできます。

write_dsa コマンドは、Vivado プラットフォーム プロジェクト データおよび関連ファイルを DSA ファイルにアーカイブし、プラットフォームのハードウェア コンポーネントを定義します。この章の説明は、Vivado Design Suite の一般的な機能およびプロセスに関する知識があり、プラットフォームのハードウェア用の Vivado プロジェクトを作成できることを前提として、ハードウェア プラットフォームの一般的な要件と Vivado プロジェクトにについて説明します。

図: プラットフォーム ハードウェア コンポーネントのデザイン フロー

ハードウェア要件

このセクションでは、SDSoC™ プラットフォームのハードウェア デザイン コンポーネントの要件を説明します。通常、Vivado Design Suite の IP インテグレーターを使用して作成した Zynq® UltraScale+™ MPSoC または UltraScale+™ デバイスをターゲットとするほぼすべてのデザインを、SDSoC プラットフォームのベースとして使用できます。

SDSoC ハードウェア プラットフォームを記述するプロセスはシンプルです。

  1. Vivado Design Suite および IP インテグレーター機能を使用してハードウェア システムをビルドおよび検証します。
  2. プラットフォームおよびインターフェイス プロパティをコンフィギュレーションします。
  3. DSA ファイルを記述します。

プラットフォーム ハードウェア デザインでは、次の規則に従ってください。

ヒント: ザイリンクス プロジェクトに複数のブロック図が含まれる場合、その中のブロック図の 1 つの名前がハードウェア プラットフォームと同じであり、そのブロック図が SDx プラットフォーム プロジェクトで使用される必要があります。
  • プラットフォーム デザインで使用される IP で標準の Vivado IP カタログに含まれていないものは、Vivado Design Suite プロジェクトのローカルに配置されている必要があります。外部 IP リポジトリ パスへの参照は、write_dsa コマンドではサポートされません。
  • すべてのハードウェア プラットフォームにザイリンクス IP カタログからの Processing System IP ブロックを含める必要があります。
  • SDSoC プラットフォームへの各ハードウェア ポート インターフェイスは、AXI、AXI4-Stream、クロック、リセット、または割り込みインターフェイスにする必要があります。カスタム バス タイプまたはハードウェア インターフェイスは、ハードウェア プラットフォームに含める必要があります。
  • 各プラットフォームで、Processing System IP からの少なくとも 1 つの汎用 AXI マスター ポート、または AXI マスター ポートに接続されているインターコネクト IP を宣言する必要があります。これらは、SDSoC コンパイラでデータ ムーバーおよびアクセラレータ IP のソフトウェア制御に使用されます。
  • 各プラットフォームで、少なくとも 1 つの AXI スレーブ ポートを宣言する必要があります。このポートは、SDSoC コンパイラでデータ ムーバーおよびアクセラレータ IP から DDR にアクセスするために使用されます。
  • SDSoC 環境とプラットフォーム ロジック (S_AXI_ACP など) 間で AXI ポートを共有するには、対応する AXI ポートに接続されている AXI Interconnect IP の未使用の AXI マスターまたはスレーブをエクスポートし、プラットフォームで最下位インデックスのポートが使用されるようにする必要があります。
  • 各プラットフォーム AXI インターフェイスは、SDSoC 環境により 1 つのデータ モーション クロックに接続されます。

    ヒント: SDSoC コンパイラで生成されたアクセラレータ関数は、プラットフォームで供給されるクロックとは異なるクロックで動作する場合があります。
  • エクスポートされた各プラットフォーム クロックに、Vivado IP カタログに含まれている Processing System Reset IP ブロックを付ける必要があります。
  • プラットフォームの割り込み入力は、Processing System 7 IP IRQ_F2P ポートに接続されている Concat (xlconcat) IP でエクスポートされる必要があります。プラットフォームに含まれている IP ブロックでは 16 個のファブリック割り込みの一部を使用できますが、IRQ_F2P ポートの最下位ビットからビットを飛ばさずに使用する必要があります。

Vivado プロジェクトの開始

SDSoC プラットフォーム プロジェクトでは、Vivado Design Suite プロジェクト ファイル (<platform>.xpr) を開始点として使用して、プラットフォーム デバイス サポート アーカイブ (DSA) ファイルがビルドされます。

プロジェクトには IP インテグレーター ブロック図が必ず含まれている必要があり、いくつでもソース ファイルを含めることができます。Zynq®-7000Zynq UltraScale+ MPSoC または MicroBlaze™ プロセッサをターゲットにするほとんどすべてのプロジェクトが SDSoC 環境プロジェクトの基盤となり得ますが、ハードウェア要件に示すいくつかの制限があります。

重要: プロジェクト ファイルを別のディレクトリに移動する場合は、Vivado Design Suite プロジェクト全体をプロジェクト ファイル (xpr) と同じディレクトリに含める必要があります。単に Vivado ツールのプロジェクトに含まれるファイルを別の場所にコピーすることはできません。Vivado Design Suite では、内部プロジェクト ステートとファイルどうしの関係性が管理されているので、単にコピーするだけでは、これらが保持されません。Vivado Design Suite プロジェクトを正しくコピーするには、ザイリンクス IDE で [File] > [Archive Project] をクリックして ZIP アーカイブを作成します。このアーカイブ ファイルを新しいディレクトリにコピーして解凍します。SDx IDE で Vivado ツールを起動する際に IP のロックを示すエラーが発生した場合は、Vivado プロジェクトが適切にコピーされなかったか、プロジェクト、IP および出力ファイルがツールの最新バージョン用にアップグレードされなかったことを意味します。

DSA 生成のデザイン フロー

SDSoC プラットフォームで使用できる Vivado Design Suite プロジェクトを作成方法は、次のとおりです。

  1. Vivado Design Suite IDE を起動します。
  2. Vivado Design Suite ホーム画面で [Quick Start] → [Create Project] リンクをクリックするか、Vivado Design Suite メニュー バーの [File] > [Project] > [New] をクリックして、New Project ウィザードを起動します。デフォルトのプロジェクト名 project_1 を使用します。
    ヒント: 既存のプロジェクトを変更して、新しい SDSoC ハードウェア プラットフォームを作成する開始点として使用することもできます。
  3. [RTL Project] タイプを選択し、[Default Part] ページに進み、SDSoC プラットフォームで使用するザイリンクス デバイスまたはサポートされるボードを選択します。この例の場合は、ZCU102 を使用します。プロジェクトの作成、パーツまたはボードの選択方法は、『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994) を参照してください。
  4. Vivado Design Suite IDE でプロジェクトが開いたら、[Flow Navigator][IP Integrator] の下の [Create Block Design] コマンドを使用してブロック デザインを作成します。デフォルト設定のままにします。ブロック デザインは design_1 という名前になります。
  5. IP インテグレーター キャンバスで [Add IP (+)] アイコンを使用してエンベデッド プロセッサ IP をインスタンシエートします。この例の場合、Zynq を検索し、Zynq UltraScale+ MPSoC を選択します。[Block Automation] を実行し、[Apply Board Preset] オプションを使用します。必要に応じて、IP カタログまたはカスタム IP から IP を追加します。次の図は、すべて追加した後の IP インテグレーター デザインを示しています。IP ブロックおよび接続が前述のハードウェア要件を満たすように追加されています。

    IP インテグレーターを使用してブロック デザインを作成する方法は、『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994) を参照してください。

    エンベデッド プロセッサ ブロック デザインを作成する方法は、『Vivado Design Suite ユーザー ガイド: エンベデッド プロセッサ ハードウェア デザイン』 (UG898) を参照してください。

    1. Clocking Wizard
      1. 次の 3 つの PL クロックを生成するように出力クロックをカスタマイズします。
        1. clk_out1 は 100 MHz、clk_out2 は 200 MHz、および clk_out3 は 300 MHz
      2. Reset Type = Active Low
    2. Processor System Reset
      1. 3 つのインスタンスを追加し、3 つの PL クロックそれぞれにリセットを指定します。
      2. clk_out1proc_sys_reset_0 を、clk_out2proc_sys_reset_1 を、clk_out3proc_sys_reset_2 を接続します。
      3. すべての dcm_locked 入力を clk_wiz_0 locked 出力に接続します。
      4. すべての ext_reset_in 入力をプロセッサ ブロックの pl_resetn0 出力に接続します。
    3. Concat
      1. Number of Ports = 1 に設定します。
    4. zynq_ultra_ps_i_0 PCW 設定を編集します。
      1. PS-PL Configuration > PS-PL Interfaces > Master Interface
        1. AXI_HPM0_FPD をオフにします。
        2. AXI_HPM1_FPD をオフにします。
  6. [Platform Interfaces] タブまたは Tcl コマンドのいずれかを使用してインターフェイス ポートに PFM プロパティを設定し、sds++ システム コンパイラで使用するプラットフォーム インターフェイスを宣言します。
  7. ブロック デザインを検証して問題がないことを確認したら、デザインを保存します。
  8. IP キャッシュを有効にすると、合成およびコンパイル時間を削減できます (オプション)。
  9. [Generate Output Products] をクリックして、ブロック デザイン内の IP の出力ファイルを生成します。
  10. [Create HDLWrapper] をクリックして最上位 RTL デザインを作成します。
  11. [Export Hardware] で SDK でソフトウェア開発できるようにハードウェアをエクスポートします。SDx IDE は、スタンドアロンおよび Linux ターゲット用のソフトウェアを生成するのにも使用できます。ソフトウェア コンポーネントの定義に関する詳細は、プラットフォーム ソフトウェア コンポーネントの作成 を参照してください。
  12. プログラマブル ロジック デバイス I/O ピンを使用する場合は、I/O ポート制約を割り当てます。
  13. デザインをシミュレーションしてインプリメンテーションし、機能とパフォーマンスを検証します (オプション)。
  14. プロジェクトをアーカイブして、バックアップを取っておきます。
  15. Vivado Design Suite の [Tcl Console] ウィンドウで write_dsavalidate_dsa を使用して DSA を記述して検証します。
ヒント: Vivado IDE では、前の手順で実行された Tcl コマンドを含むジャーナル ファイル (.jou) が作成されます。このファイルは、スクリプトを作成し、ハードウェア プラットフォームの作成を自動化するのに使用できます。

IP インテグレーターを使用したロジック デザイン

Vivado Design Suite IP インテグレーターからは、デザイン キャプチャ プロセスをスムーズにするため、インタラクティブなグラフィカル デザイン入力および設定機能が提供されています。この環境には、さまざまな自動設計アシスタンスおよび設定機能が含まれています。ほとんどのシステム デザインのニーズに答えられるよう、さまざまな AXI4 互換性のある IP が提供されています。

ロジック デザインは、IP インテグレーターまたは RTL ソースを使用して取り込むことができます。IP インテグレーター デザインおよび最上位 RTL モジュールをインスタンシエートするには、最上位ラッパーが使用されます。RTL モジュールは、IP インテグレーター ブロック デザイン (BD) に直接追加することもできます。

Zynq® SoC、Zynq UltraScale+ MPSoC、または MicroBlaze プロセッサのいずれかを含むハードウェア プラットフォーム ロジック デザインを取り込みます。

次は、「DSA 生成のデザイン フロー」セクションの方法を使用した ZCU102 ボード パーツに基づいたカスタム プラットフォームを示しています。各図のタイトルと設定の説明をガイドとして使用し、3 つの PL クロック、必須のプラットフォーム IP、およびプラットフォーム プロパティを含むハードウェア デザインを作成してください。

図: プロジェクトのデフォルト パーツの選択

図: IP インテグレーター ブロック デザインへのプロセッサの追加

図: ボード オートメーションの実行

図: プリセットの適用

ZCU102 ボード プリセットを適用すると、 Processor Configuration Wizard (PCW) を使用してプロセッサ ブロックをさらにカスタマイズできます。zynq_ultra_ps_e_0 をダブルクリックして、カスタマイズ ウィザードを開始します。PL-PS 割り込みのパスが存在することを確認します。次の PCW の図は、プロセッサへの IRQ0[0-7] 入力がイネーブルになっていることを示します。[AXI HPM0 FPD] および [AXI HPM1 FPD] マスターの PS-PL インターフェイスをオフにして、アクセラレータ接続に使用できるようにします。

図: Processor Configuration Wizard (PCW) の編集の適用

PCW 設定を適用すると、Clocking Wizard および Processor Sysetem Reset IP ブロックを追加およびカスタマイズします。

図: Clocking Wizard を使用した出力クロックの追加

図: クロックおよびプロセッサ リセット ブロック

図: コネクション オートメーションの実行

図: 割り込みをカスタマイズする Concat ブロック

図: 完成したカスタム プラットフォームの IP インテグレーター ハードウェア デザイン

ブロック デザインが終了したら、プラットフォーム プロパティを別のインターフェイスに適用して SDx 環境内のハードウェア関数で使用できるようにできます。

IP インテグレーターを使用したブロック デザインの作成の詳細、およびプラットフォーム プロパティをブロック デザインで使用可能なインターフェイスに適用する方法は、『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994)を参照してください。

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

Vivado Design Suite で IP インテグレーター ハードウェア ブロック デザインを完成させたら、クロッキング (Clocking Wizard)、割り込み (Concat)、リセット (Processor System Reset)、およびプロセッサ (Zynq UltraScale+ MPSoC) AXI インターフェイスなどの IP ブロックにプラットフォーム (PFM) プロパティを宣言して追加する必要があります。これで、これらの宣言済みインターフェイスが SDx 環境内でハードウェア関数に使用できるようになります。ブロック デザインの [Platform Interfaces] タブを使用すると、最もシンプルで簡単にこれらのインターフェイスおよびプロパティを宣言できます。[Platform Interfaces] タブは、Vivado メニュー バーから [Window] > [Platform Interfaces] をクリックし、[Enable platform interfaces] リンクをクリックすると表示できます。これらのプロパティは、一度に設定され、プロジェクトにに保存されます。PFM プロパティを設定するために実行された Tcl コマンドも参照用に表示されます。

図: [Platform Interfaces] タブの表示

これで [Platform Interfaces] タブが開きます。

図: [Platform Interfaces] タブでのインターフェイスのイネーブル

[Enable platform interfaces] リンクをクリックすると、PFM_NAME プロパティが自動的に生成され、SDx 環境内のハードウェア アクセラレータに使用できるインターフェイスすべてがリストされます。

[Platform Interfaces] タブで [Platform] を選択すると、プラットフォームの名前、ベンダー、ボード、およびバージョンなどの設定が [Platform Properties] ウィンドウに表示されます。これらのプラットフォーム プロパティは、各プロパティのテキスト ボックスをクリックすると編集できます。

図: プラットフォーム PFM_NAME: 名前、ベンダー、ボード、およびバージョンの設定

[Platform Interfaces] タブには、プラットフォーム特有プロパティを持つブロック デザインで使用可能なインターフェイスすべてが表示されるようになります。インターフェイスをイネーブルにするには、そのインターフェイスを右クリックし、[Enable] をクリックします。ZCU102 ハードウェア デザインの例の場合は、次に示すように zynq_ultra_ps_e_0、clk_wiz_0、および xlconcat_0 ポートをイネーブルにします。

図: プラットフォームでのインターフェイスのイネーブル

図: Clocking Wizard インターフェイスのイネーブル

図: Concat ブロックの割り込みインターフェイスのイネーブル

プラットフォームのデフォルトの PL クロック設定は必須で、[Platform Interfaces] ビューで必要なクロックを選択し、選択したクロックの [Platform Interface Properties] ダイアログ ボックスの [Options] タブをクリックします。[is_default] プロパティに関連するチェック ボックスをクリックして、設定を切り替えます。

図: デフォルト クロックの設定

残りの手順を実行し、ハードウェアをビルドして、DSA を生成します。この章の残りの部分では、プラットフォーム プロパティの詳細とハードウェア デザインのインプリメント方法について説明します。
  1. IP インテグレーター キャンバスで右クリックして [Validate Design] をクリックし、IP インテグレーター ブロック デザインに問題がないかどうかを検証します。
  2. [Sources] タブで design_1.bd を右クリックし、[Generate Output Products] をクリックします。デフォルトの [Out of context per IP synthesis] オプションと run 設定を使用したら、[Generate] をクリックします。
  3. [Sources] タブで design_1.bd を右クリックし、[Create HDL Wrapper] をクリックします
  4. Flow Navigator[Program and Debug][Generate Bitstream] をクリックします
  5. [File] > [Export] > [Export Hardware] をクリックし、プロジェクトのハードウェア記述ファイルを記述します。[Export Hardware] ダイアログ ボックスで [Include bitstream] を選択します。
  6. [Tcl Console] ウィンドウで DSA を記述して検証します。
    • write_dsa design_1.dsa
    • validate_dsa design_1.dsa

IP インテグレーターを使用したブロック デザインの作成の詳細、およびプラットフォーム プロパティをブロック デザインで使用可能なインターフェイスに適用する方法は、『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994)を参照してください。

プラットフォーム名の設定

プラットフォーム識別プロパティ (PFM_NAME) をハードウェア デザインで設定して、プラットフォームのベンダー、ライブラリ、名前、およびバージョン (VLNV) を定義する必要があります。

set_property PFM_NAME string [get_files design.bd]
説明:
  • string は次のような標準 VLNV フォーマットで定義されます。
    xilinx.com:my_lib:platformA:1.0
  • design.bd では、ブロック デザインのファイル名を指定します。
ヒント: PFM_NAME は、VLNV 形式から Name だけを使用した単純な形式で指定することもできます。ベンダー、ライブラリ、およびバージョン フィールドは、デフォルトの vendorlib、および 1.0 で生成されます。
例:
set_property PFM_NAME zcu102 [get_files zcu102.bd]

これは PFM_NAME: vendor:library:zcu102:1.0 になります。

Vivado ブロック デザインおよび DSA にこのプロパティが格納されます。

重要: write_bd_tcl コマンドでは、出力される bd_Tcl スクリプトに PFM プロパティは記述されません。これらのプロパティを保存するには、手動でエクスポートする必要があります。[Archive Project] コマンドを使用してプロジェクトのバックアップを取っておくことをお勧めします。

プラットフォーム インターフェイス プロパティのコンフィギュレーション

プラットフォーム インターフェイスは、次に示す 4 つの PFM プロパティを使用して定義されます。これらは、[Tcl Console] ウィンドウから手動で、またはそのデザインの Tcl スクリプトで定義できます。

4 つのプラットフォーム インターフェイスの Tcl API は、次のとおりです。

set_property PFM.AXI_PORT { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
set_property PFM.AXIS_PORT { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
set_property PFM.CLOCK { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
set_property PFM.IRQ { <port_name> {} <port2> {} ...} \
[get_bd_cells <cell_name>]

PFM プロパティの要件は、次のとおりです。

  • PFM インターフェイス プロパティの値は、Tcl ディクショナリ (名前/"値" のペア) として指定する必要があります。
    重要: 値は二重引用符で囲む必要があります。名前と値は大文字と小文字が区別されます。
  • bd_cell には複数の PFM インターフェイス定義を指定できます。ただし、PFM インターフェイスの各タイプごとに、すべてのポートを 1 つの set_property Tcl コマンドで設定する必要があります。
  • 各 PFM インターフェイス プロパティで、ポート オブジェクトに指定した名前が外部ポートまたは bd_cell のインターフェイスの名前と同じである必要があります。各外部ポートまたはインターフェイス オブジェクトに含めることができるのは、1 つの PFM インターフェイス定義だけです。
  • パラメーターは、PFM インターフェイスのタイプごとに異なることがあります。
  • PFM プロパティに NULL ("") 文字列を設定すると、前に定義した PFM インターフェイスが削除されます。

クロックの宣言

クロック ソースはプラットフォームと一緒にエクスポートできますが、各クロックに対してプラットフォームの Processor System Reset IP ブロックを使用して、同期リセット信号もエクスポートする必要があります。PFM.CLOCK プロパティは、BD セル、外部ポート、または外部インターフェイスに設定できます。

PFM.CLOCK プロパティを設定する Tcl コマンドは次のとおりです。

set_property PFM.CLOCK { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
引数の説明
  • Port_name: クロック ポート名。

  • Parameters:
    • id <value>: クロック ID は、固有の負でない整数にする必要のあるユーザー定義の値です。

    • is_default <value>: デフォルトのクロックの場合は true、それ以外の場合は false を指定します。デフォルトは false です。

    • proc_sys_reset <value>: この名前と値のペアは、クロック ポートに接続された同期リセット信号の proc_sys_reset ブロック インスタンスを指定します。

重要: SDSoC 環境で明示的にクロックが指定されていない場合は、すべてのプラットフォームで is_default パラメーターを true に設定したデフォルトのクロックを 1 つ宣言する必要があります。

例:

set_property PFM.CLOCK {
PL_CLK0 {id "0" is_default "true" proc_sys_reset \
"proc_sys_reset_0"} 
PL_CLK1 {id "1" is_default "false" proc_sys_reset \
"proc_sys_reset_1"} 
PL_CLK2 {id "2" is_default "false" proc_sys_reset \
"proc_sys_reset_2"} 
PL_CLK3 {id "3" is_default "false" proc_sys_reset \
"proc_sys_reset_3"} 
} [get_bd_cells /zynq_ultra_ps_e_0]

外部 PORT に CLOCK を設定:

set_property PFM.CLOCK
{ACLK_0 {id "4" is_default "false" proc_sys_reset \
"proc_sys_reset_4"}} [get_bd_ports /ACLK_0]

AXI ポートの宣言

PFM.AXI_PORT プロパティを設定する Tcl コマンドは次のとおりです。

set_property PFM.AXI_PORT { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
引数の説明
  • Port_name: AXI ポート名。
  • Parameters:
    • memport type: メモリ インターフェイスのポート タイプに該当。有効な type 値は、次のとおりです。
      • M_AXI_GP: 汎用 AXI マスター ポート
      • S_AXI_HP: 高パフォーマンスの AXI スレーブ ポート
      • S_AXI_ACP: アクセラレータ コヒーレント スレーブ ポート
      • S_AXI_HPC: 高パフォーマンスのアクセラレータ コヒーレント スレーブ ポート
      • MIG: MIG メモリ コントローラーに接続されている AXI スレーブ。デフォルトは MIG です。
    • sptag ID: (オプション) 最初の文字がアルファベットで始まる必要のあるユーザー定義の ID。ID の大文字/小文字は区別されます。システム ポート タグ (sptag) は、S_AXI_HP、S_AXI_ACP、M_AXI_GP などのプラットフォーム ポート接続のクラスを示すシンボル識別子です。複数のブロック デザイン プラットフォーム ポートが同じ sptag を共有できます。
    • memory: (オプション) 関連する MIG IP インスタンスと address_segment を指定します。memory タグは、IP インテグレーターの [Address Editor] ウィンドウの Cell 名と Base Name 列を組み合わせた独自の名前になります。このタグは、複数のブロック デザイン プラットフォーム ポートが同じ memory タグを共有可能な Memory Subsystem HIP への接続に関連付けられます。
重要: ACE およびACP ポートは Zynq UltraScale+ MPSoC プラットフォームではサポートされません。ただし、ACP は Zynq-7000 SoC プラットフォームでサポートされます。
Zynq UltraScale+ デバイスの HPC ポートのキャッシュ コヒーレンシ サポート

2018.2 の動作 (キャッシュを一掃してコヒーレンシなし) が想定される HPC ポートを使用するプラットフォームでは、ポートのラベルを S_AXI_HPC ではなく、S_AXI_HP にする必要があります。どちらも HP ポートのように動作しますが、コヒーレンシをイネーブルにするのは、S_AXI_HPC のラベルが付いたポートだけです。プラットフォームを作成する場合は、次に示すように BIF ファイルをコヒーレンシをイネーブルにした HPC ポート用に調整する必要もあります。

これは、レジスタが APU がリセット状態でなくなる前に書き込まれるようになるので、Linux ブートに推奨される方法です。

Boot ROM を使用すると、ブート イメージの init 値を使用してレジスタを記述できます。この init 値は、Bootgen でブート イメージに追加できます。次の bootgen の BIF ファイルからのコード例は、init 値を含むファイルの追加を示しています。

//arch = zynqmp; split = false; format = BIN
the_ROM_image:
{
   ...
   [init]<path>\regs.init
}

次のコードの行は、regs.init ファイルに含まれるべき init 値により、外側の共有可能なトランザクションが CCI にブロードキャストされるようになることを示しています。

.set. 0xFF41A040 = 0x3;

詳細は、Zynq UltraScale+ MPSoC キャッシュ コヒーレンシの Wiki ページを参照してください。

AXI インターコネクトの例
set_property PFM.AXI_PORT { \
	M_AXI_GP0 {memport "M_AXI_GP"} \
	M_AXI_GP1 {memport "M_AXI_GP"} \
	S_AXI_ACP {memport "S_AXI_ACP" sptag "ACP" memory \
"processing_system7_0 ACP_DDR_LOWOCM"} \
	S_AXI_HP0 {memport "S_AXI_HP" sptag "HP0" memory \
"processing_system7_0 HP0_DDR_LOWOCM"} \
	S_AXI_HP1 {memport "S_AXI_HP" sptag "HP1" memory \
"processing_system7_0 HP1_DDR_LOWOCM"} \
	S_AXI_HP2 {memport "S_AXI_HP" sptag "HP2" memory \
"processing_system7_0 HP2_DDR_LOWOCM"} \
	S_AXI_HP3 {memport "S_AXI_HP" sptag "HP3" memory \
"processing_system7_0 HP3_DDR_LOWOCM"} \
	} [get_bd_cells /processing_system7_0]
AXI インターコネクトのマスター ポートおよびスレーブ ポートのエクスポートには、いくつかの要件があります。
  1. プラットフォームで使用されるインターコネクト上のすべてのポートは、宣言されたプラットフォーム インターフェイスの前にインデックス順で宣言する必要があります。
  2. ポートのインデックス番号をスキップすることはできません。
  3. S_AXI_ACP ポートのマスター ID の最大数は 8 なので、接続された AXI インターコネクト上で宣言する使用可能なポートは {S00_AXI, S01_AXI, ..., S07_AXI} のいずれかである必要があります。プラットフォーム内で使用されるポートは宣言しないでください。できるだけ多くのポートを宣言すると、sds++ で生成されたユーザー システムでカスケード接続された axi_interconnects を回避できます。
  4. S_AXI_HP または MIG ポートのマスター ID の最大数は 16 なので、接続された AXI インターコネクト上で宣言する使用可能なポートは {S00_AXI, S01_AXI, ..., S15_AXI} のいずれかである必要があります。プラットフォーム内で使用されるポートは宣言しないでください。できるだけ多くのポートを宣言すると、sds++ で生成されたユーザー システムでカスケード接続された axi_interconnects を回避できます。
  5. M_AXI_GP ポートに接続されるインターコネクト上で宣言されるマスター ポートの最大数は 64 なので、接続された AXI インターコネクト上で宣言する使用可能なポートは {M00_AXI, M01_AXI, ..., M63_AXI} のいずれかである必要があります。プラットフォーム内で使用されるポートは宣言しないでください。できるだけ多くのポートを宣言すると、sds++ で生成されたユーザー システムでカスケード接続された axi_interconnects を回避できます。
その他の例

インターコネクトの AXI_port を定義:

set parVal []
for {set i 2} {$i < 64} {incr i} {
	lappend parVal M[format %02d $i]_AXI \
{memport "M_AXI_GP"}
}
set_property PFM.AXI_PORT $parVal [get_bd_cells /axi_interconnect_0]

SmartConnect IP の AXI_port を定義:

set parVal []
for {set i 1} {$i < 16} {incr i} {
	lappend parVal S[format %02d $i]_AXI \
{memport "MIG" sptag "Bank0"}
}
set_property PFM.AXI_PORT $parVal [get_bd_cells /smartconnect_0]

MIG IP に接続する AXI_PORT を定義:

set parVal []
for {set i 1} {$i < 16} {incr i} {
	lappend parVal S[format %02d $i]_AXI \
{memport "MIG" sptag "bank0" memory "ddrmem_0 C0_DDR4_ADDRESS_BLOCK"}
}
set_property PFM.AXI_PORT $parVal [get_bd_cells \
/memory_subsystem/interconnect_data/interconnect_aximm_ddrmem0]

AXI4 -Stream ポートを宣言

PFM.AXIS_PORT プロパティを設定するコマンドは、次のとおりです。

set_property PFM.AXIS_PORT { <port_name> {parameters} \
<port_name_2> {parameters} .. } [get_bd_cells <cell_name>] 
引数の説明
  • Port_name: AXI4-Stream のポート名。
  • Parameters:
    • type value: ストリーミング インターフェイス ポート タイプ。type の有効な値は、次のとおりです。
      • M_AXIS: 汎用 AXI マスター ポート
      • S_AXIS: 高パフォーマンスの AXI スレーブ ポート
set_property PFM.AXIS_PORT {AXIS_P0 {type "S_AXIS"}} \
[get_bd_cells /zynq_ultra_ps_e_0]

割り込みポートの宣言

割り込みは、プロセッシング システムに接続される IP インテグレーターの Concat (xlconcat) ブロックに接続する必要があります。Zynq-7000 ファミリの場合は、F2P_irq ポートです。Zynq UltraScale+ MPSoC デバイスの場合は、割り込みが pl_ps_irq0[7:1]pl_ps_irq1[7:1] の 2 つの 8 ビット ポートに分割されます。
重要: プラットフォームに含まれる IP に割り込みが含まれる場合、これらの割り込みで Concat ブロックの最下位ビットからビットを飛ばさずに使用する必要があります。

PFM.IRQ プロパティを設定する Tcl コマンドは次のとおりです。

set_property PFM.IRQ { <port_name> {} <port2> {} ...} \
[get_bd_cells <cell_name>]
引数の説明
  • Port_name: IRQ ポート名。
  • {}: プレースホルダーとして使用される空のリスト。
set irqProp [] 
for {set i 0} {$i < 8} {incr i} 
{ lappend irqProp In$i {} } 
set_property PFM.IRQ $irqProp [get_bd_cells /xlconcat_0] 
set_property PFM.IRQ $irqProp [get_bd_cells /xlconcat_1
ヒント: FOR ループは、次のような $irqProp で定義したように、PFM.IRQ プロパティになります。
In0 {} In1 {} In2 {} In3 {} In4 {} In5 {} In6 {} In7 {}

PFM プロパティ Tcl スクリプトの例

このスクリプト例では、PFM プロパティをザイリンクスの提供する ZCU102 プラットフォームのブロック デザインに割り当てています。

# set_property PFM_NAME "xilinx.com:zcu102:zcu102:1.0" \
[get_files ./zcu102/zcu102.srcs/sources_1/bd/zcu102/zcu102.bd]
# set_property PFM.CLOCK { \
# clk_out1 {id "0" is_default "false" proc_sys_reset \
"proc_sys_reset_0" } \
# clk_out2 {id "1" is_default "true" proc_sys_reset \
"proc_sys_reset_0" } \
# clk_out3 {id "2" is_default "false" proc_sys_reset \
"proc_sys_reset_0" } \
# clk_out4 {id "3" is_default "false" proc_sys_reset \
"proc_sys_reset_0" } \
# clk_out5 {id "4" is_default "false" proc_sys_reset \
"proc_sys_reset_0" } \
# clk_out6 {id "5" is_default "false" proc_sys_reset \
"proc_sys_reset_0" } \
# clk_out7 {id "6" is_default "false" proc_sys_reset \
"proc_sys_reset_0" } \
# } [get_bd_cells /clk_wiz_0]
# set_property PFM.AXI_PORT { \
# M_AXI_HPM0_FPD {memport "M_AXI_GP"} \
# M_AXI_HPM1_FPD {memport "M_AXI_GP"} \
# M_AXI_HPM0_LPD {memport "M_AXI_GP"} \
# S_AXI_HPC0_FPD {memport "S_AXI_HPC" sptag "HPC0"} \
# S_AXI_HPC1_FPD {memport "S_AXI_HPC" sptag "HPC1"} \
# S_AXI_HP0_FPD {memport "S_AXI_HP" sptag "HP0"} \
# S_AXI_HP1_FPD {memport "S_AXI_HP" sptag "HP1"} \
# S_AXI_HP2_FPD {memport "S_AXI_HP" sptag "HP2"} \
# S_AXI_HP3_FPD {memport "S_AXI_HP" sptag "HP3"} \
# } [get_bd_cells /ps_e]
# set intVar []
# for {set i 0} {$i < 8} {incr i} {
# lappend intVar In$i {}
# }
# set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_0]
# set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_1]

ハードウェア プラットフォーム デザインのインプリメンテーション

ハードウェア プラットフォーム デザインは、インプリメントして、検証し、ザイリンクス SDSoC フローで問題なく使用できるようにする必要があります。この検証プロセスでは、まずハードウェア プラットフォーム デザインが問題なく実行されるかどうかを確かめます。これには、テスト カーネル ロジックを使用してダイナミック領域を生成します。

IP キャッシュの使用

Vivado 合成の IP キャッシュ機能を使用すると、合成時間がかなり削減できます。IP キャッシュには、各 IP コンフィギュレーションの合成結果が格納され、出力生成中には IP を再合成せずにキャッシュ結果とコンフィギュレーションの同じ IP インスタンスが使用されます。

DSA 用に IP が問題なくキャッシュされるようにするには IP インテグレーター ブロック デザインの生成前に、[Cache location] が Vivado プロジェクトに対してローカルになるように、Vivado で設定しておく必要があります。これは、デフォルト設定です (次の図を参照)。

図: Vivado 設定 - IP キャッシュ

IP キャッシュのリポジトリを設定するには、IP キャッシュ リポジトリを指定する必要があります。次の Tcl コマンドを使用して、DSA の作成前にキャッシュを設定します。

set_property dsa.ip_cache_dir [get_property ip_output_repo \
[current_project]] [current_project]

デザイン制約の作成

このセクションでは、ハードウェア プラットフォームをサポートするのに必要なさまざまな物理的な制約について説明します。

タイミング制約

タイミング制約は、Vivado デザイン プロジェクトと同じ方法で指定します。少なくとも、すべてのクロックに対して制約を定義する必要があります。詳細は、『Vivado Design Suite ユーザー ガイド: 制約の使用』 (UG903) を参照してください。

I/O およびクロック制約の使用

DSA を設計する際は、ボード要件に必要な I/O インターフェイスを見つけることが重要です。プロセッシング システム関連の I/O は固定されていますが、プログラマブル ロジック (PL) からの外部インターフェイスには、インプリメンテーション ツールを駆動するために I/O 制約を割り当てる必要があります。物理的な I/O の位置はパフォーマンスに影響するので、プラットフォーム プランニング段階で注意する必要があります。

I/O およびクロック プランニングの詳細は、『Vivado Design Suite ユーザー ガイド: I/O およびクロック プランニング』 (UG899) を参照してください。

デザインのシミュレーション

Vivado Design Suite には、デザインのブロック レベルまたはシステム レベルの検証を有効にする拡張ロジック シミュレーション機能があります。使用可能なサードパーティ FPGA シミュレーション ツールもサポートされます。詳細は、『Vivado Design Suite ユーザー ガイド: ロジック シミュレーション』 (UG900) を参照してください。

インプリメンテーションおよびタイミングの検証

デザインは、合成し、インプリメントして、必要なパフォーマンスが達成できるようにする必要があります。最適なパフォーマンスにするには、フロアプランとインプリメンテーションを繰り返す必要のあることがよくあります。

また、ほとんどの場合、ハードウェア デザインでのインプリメンテーション、解析、イテレーションにより、カーネル インプリメンテーション中にタイミングが満たされ続けるようにすることが重要です。テスト カーネルを使用して、デザインをインプリメントし、インプリメント デザインを開いて、デザインがタイミングを満たすかどうかを確認します。

フロアプランは検証し、インプリメンテーション結果を最適化する必要がある場合は変更できます。詳細は、『Vivado Design Suite ユーザー ガイド: デザイン解析およびクロージャ テクニック』 (UG906) を参照してください。

デバイス サポート アーカイブの生成

ハードウェア プラットフォーム デザインが終了し、PFM プロパティを設定し、Vivado Design Suite を使用して有効なビットストリームを生成したら、SDSoC 開発環境で使用できるデバイス サポート アーカイブ (DSA) を作成できます。DSA は完全なハードウェア プラットフォーム デザインを取り込んだ単一ファイルで、SDSoC プラットフォーム プロジェクトの作成に使用されます。

重要: DSA ファイルを作成した後、ソースの Vivado Design Suite プロジェクト ファイルを保持しておくと、必要に応じて DSA ファイルを再作成またはアップデートできます。プロジェクトは archive_project Vivado Tcl コマンドを使用してアーカイブできます。

必要なプロパティを設定したら、Vivado ツールの [Tcl Console] ウィンドウから write_dsa コマンドを使用して DSA ファイルを生成します。

write_dsa <filename>.dsa -include_bit

これで、SDSoC 開発環境で必要とされる関連ファイルおよびデータをすべて含んだハードウェア プラットフォームのアーカイブが作成されます。write_dsa コマンドでは、まだ作成されていない場合、ビットストリーム ファイルも作成されます。

write_dsa 構文とショート ヘルプは、次のとおりです。

write_dsa  [-force] [-include_bit] [-include_emulation] [-legacy] [-minimal]
           [-quiet] [-verbose] [<file>]

Returns: 
The name of the dsa file

Usage: 
  Name                  Description
  ---------------------------------
  [-force]              Overwrite existing device support 
                        archive file
  [-include_bit]        Include bit file(s) in the dsa.
  [-include_emulation]  Generate and include hardware 
                        emulation support in the dsa.
  [-legacy]             Write a legacy DSA (based on OCL 
                        Block IP)
  [-minimal]            Add only minimal files in the dsa.
  [-quiet]              Ignore command errors
  [-verbose]            Suspend message limits during 
                        command execution
  [<file>]              Device Support Archive filename 
                        with alphanumeric characters and 
                        .dsa extension.

DSA の検証

validate_dsa コマンドを使用すると、カスタム DSA ファイルを検証して、適切な内容とザイリンクス SDSoC™ 環境でハードウェア プラットフォームをサポートするのに必要なメタデータが含まれていることを確認できます。次のコマンドを使用して DSA ファイルを検証します。

 validate_dsa <dsa file> -verbose