SDSoC プラットフォームの作成

SDx™ IDE は、ハードウェアおよびソフトウェア コンポーネントを SDSoC™ プラットフォームにアセンブルするために使用します。次はプラットフォーム生成のデザイン フローで、その後のプラットフォーム作成例でも使用しています。

図: プラットフォーム生成のデザイン フロー

SDx プラットフォーム プロジェクトを作成する際は、プラットフォーム コンフィギュレーション、システム コンフィギュレーション、およびドメインの設定を選択します。SDx IDE で反復および定義されるので、プラットフォームには複数のシステム コンフィギュレーションおよびドメインを含めることができます。プリビルド データのプラットフォーム設定を使用すると、ソフトウェア ソリューション (ハードウェア アクセラレータの必要ない、または作成しない) を作成する際に、ハードウェア ビットストリームまたはその自動生成を含めることができ、ハードウェア ビルド時間を節約できます。システム コンフィギュレーション設定では、必要なプラットフォーム ソフトウェア コンポーネントを生成したり、プリビルドのソフトウェア コンポーネントを参照したりできます。次に、ソフトウェア コンポーネントの ELF (Exectuable and Linkable Format)、BIF (Boot Image Format)、FIT (Flattened Image Tree) イメージ ファイルをリストします。ドメイン設定からは、プロセッサ、オペレーティング システム、およびランタイム環境を選択できます。

  • Zynq® UltraScale+™ MPSoC
    • FSBL (ELF)
    • PMU (ELF)
    • BL31 (ELF)
    • U-BOOT (ELF) - Linux ターゲット用
    • LINUX image.ub (FIT) - Linux ターゲット用
    • BOOT ファイル コンポーネント (BIF)
  • Zynq®-7000 SoC
    • FSBL (ELF)
    • U-BOOT (ELF) - Linux ターゲット用
    • LINUX image.ub (FIT) - Linux ターゲット用
    • BOOT ファイル コンポーネント (BIF)

生成されると、SDSoC プラットフォームのファイル システム レイアウトが次の図のような構造になります。

図: 典型的な SDSoC プラットフォームのディレクトリ構造

通常は、プラットフォーム プロバイダーのみでプラットフォームが SDSoC 環境内で問題なく使用されることを確認できます。ただし、 <SDx_Install_Dir>/samples/platforms/Conformance フォルダーには実行する必要のある基本的なテスト、およびそれらの実行方法が含まれています。これらのテストは正しくビルドされ、ハードウェア プラットフォーム上でテストされる必要があります。

注記: <SDx_Install_Dir> は、<SDx_Install_Dir> = <installation_path>/SDx/<version> など、リリース番号も含めた SDx ツールのインストール ディレクトリを示します。

プラットフォームには、すべてのカスタム インターフェイスに対するテストを含め、ユーザーがアプリケーション C/C++ コードからこれらのインターフェイスにアクセスする方法の例を取得できるようにする必要があります。

プラットフォームには、オプションでサンプル アプリケーションを含めることができます。アプリケーションのソース ファイルと description.json ファイルを含む samples というサブフォルダーを作成しておくと、ユーザーが SDx 環境 IDE の New Project ウィザードを使用したときにこれらのサンプル アプリケーションのいずれかを選択してビルドできるようになります。アプリケーション テンプレートの作成については、サンプル アプリケーションを参照してください。

SDx IDE を使用してプラットフォームを作成するには、アプリケーションを起動して、プラットフォーム プロジェクト タイプを選択します。
重要: プラットフォーム プロジェクトを作成する前に、SDSoC プラットフォームを定義するため、プラットフォーム ハードウェア コンポーネントの作成に示すような DSA ハードウェア定義と、プラットフォーム ソフトウェア コンポーネントの作成に示すようなソフトウェア ファイルが必要です。

SDx ワークスペースの使用

重要: Linux ホストは、SDSoC™ プラットフォームの開発に強く推奨され、またターゲットの Linux OS をサポートするプラットフォームを作成するには必須です。
  1. スクトップ アイコンまたはコマンド ラインから、次のいずれかの方法で SDx™ IDE を起動します。
    • コマンド プロンプトから次のいずれかのコマンドを使用します。

      sdx

      または

      sdx -workspace <workspace_name>

    • [SDx] アイコンをダブルクリックしてプログラムを開始します。
    • Windows OS の [スタート] メニューから起動します。
  2. SDx IDE が開き、次の図に示すワークスペースを選択するダイアログ ボックスが表示されます。

    図: SDx ワークスペースの指定

重要: SDx コマンドを入力するため新しいシェルを開いた場合は、まず settings64 および setup スクリプトをツール環境に読み込みます。Windows では、コマンド ライン シェルから settings64.bat ファイルを実行します。詳細は、SDSoC 開発環境 リリース ノート、インストール、およびライセンス ガイド を参照してください。

SDx ワークスペースは、プロジェクト、ソース ファイル、ツールでの処理結果を含むフォルダーです。プロジェクトごとに個別のワークスペースを定義したり、プロジェクトのタイプ別にワークスペースを定義したりできます。SDSoC プロジェクトのワークスペースを定義するには、次の手順に従います。

  1. [Browse] ボタンをクリックしてワークスペースを指定するか、[Workspace] フィールドに適切なパスを入力します。
  2. [Use this as the default and do not ask again] をオンにすると、指定したワークスペースがデフォルトになり、今後 SDx を起動したときにこのダイアログ ボックスは表示されなくなります。
  3. [Launch] をクリックします。
    ヒント: 現在のワークスペースを変更するには、SDx IDE で [File] > [Switch Workspace] クリックします。

これで SDx ワークスペースが作成されたので、プロジェクトを含めます。プラットフォームおよびアプリケーション プロジェクトが作成され、SDSoC プラットフォームを作成する SDx ツール フローが記述されます。

SDx IDE は、次のユーザーの選択した 3 つのタイプを使用したワークスペースを作成します。
  • アプリケーション プロジェクト
  • プラットフォーム プロジェクト
  • ライブラリ プロジェクト
次のセクションで、プラットフォームおよびアプリケーション プロジェクトを使用して SDSoC プラットフォーム例を構築する方法を説明します。

SDSoC プラットフォーム プロジェクトの作成

この章では、SDx インストール ツリーからのファイルを使用して 2 つのプラットフォーム プロジェクトを作成します。1 つ目のプラットフォームは Standalone 用で、プラットフォームを作成するのに必要なファイルと使用するファイルを示します。2 つ目のプラットフォームは同じフローですが、ターゲット ハードウェアで Linux を実行するプラットフォームのケースを示します。通常、Linux および Standalone システム コンフィギュレーションは 1 つのプラットフォームに共存可能なので、別々のプラットフォーム プロジェクトにする必要はありません。SDx ツールに含まれる ZCU102 プラットフォームから読み込んだファイルを使用して、プラットフォーム プロジェクト フローで新しいプラットフォームを作成します。この後の章では、Vivado® Design Suite を使用してプラットフォームのハードウェア コンポーネントを作成し、SDx IDE を使用して Standalone および Linux アプリケーションのソフトウェア コンポーネントを作成する方法を説明します。
ヒント: サンプル プラットフォーム ファイルは、SDx ツールソフトウェア インストール ディレクトリ (<SDx_Install_Dir>/platforms) に含まれています。

プリビルドのハードウェアおよびソフトウェアを使用した Standalone ドメインの定義

SDx IDE を起動したら、ウェルカム画面または SDx メニュー バーで [File] > [New] > [SDx Platform Project] をクリックし、新しい SDSoC プラットフォームを定義します。[New Platform Project] ダイアログ ボックスが開き、プロジェクト名を入力する画面が表示されます。この ZCU102 ベースの例では、プロジェクト名を platform_1 に指定します。

図: [New Platform Project] ダイアログ ボックス

[Next] をクリックし、次の画面へ進んで、プラットフォームのハードウェア仕様のソースを選択します。プラットフォームのハードウェア コンポーネントのソースとして、DSA を使用するか、既存プラットフォームを使用するかを選択します。この例の場合は DSA を選択します。

図: 新規プラットフォーム ソースの指定 - DSA または既存プラットフォーム

[Next] をクリックし、[Hardware Specification] に DSA を指定します。[Browse] ボタンで DSA を指定するか、パスを直接フィールドに入力します。SDx ツールには、SDSoC プラットフォームを作成する際の基礎として使用可能なプラットフォームおよび DSA ファイルが含まれます。Vivado Design Suite を使用して新しいプラットフォームの DSA を作成することもできます。DSA の作成方法の詳細は、プラットフォーム ハードウェア コンポーネントの作成を参照してください。この例の場合は、<SDx_Install_Dir>/platforms/zcu102/hw/zcu102.dsa の ZCU102 の DSA を使用します。

図: プラットフォーム ハードウェア仕様

[Operating system] と [Processor] は [standalone][psu_cortexa53_0] のままにしておきます。

[Finish] をクリックして、プラットフォーム プロジェクトを作成します。

プラットフォーム コンフィギュレーション設定が SDx IDE の編集エリアに開きます。この例の場合、 <SDx_Install_Dir>/platforms/zcu102 に含まれる SDx ツールで提供される ZCU102 プラットフォーム用にプリビルドされたハードウェア コンポーネントとソフトウェア コンポーネントを使用します。プラットフォーム コンフィギュレーション設定で [Use existing pre-built data] をオンにし、[Prebuilt Data]<SDx_Install_Dir>/platforms/zcu102/sw/prebuilt パスを指定します。

図: プラットフォーム コンフィギュレーション設定

ソフトウェア ファイル、ポート インターフェイス仕様およびビットストリームを含むプリビルド データを使用したプラットフォームを使用すると、ソフトウェア アプリケーションがハードウェア アクセラレーションされた関数を開始しないので、すばやくコンパイルおよび実行できます。

システム コンフィギュレーション画面で [sysconfig1] をクリックします。[Use pre-built software components] をオンにし、[Boot Directory]<SDx_Install_Dir>/platforms/zcu102/sw/a53_standalone/boot を指定します。[BIF File]<SDx_Install_Dir>/platforms/zcu102/sw/a53_standalone/boot/standalone.bif に設定します。

図: システム コンフィギュレーション設定

ドメイン設定画面で [psu_cortexa53_0] をクリックします。この例の場合はドメイン設定は変更しませんが、この画面ではボード サポート パッケージ、アプリケーション リンカー スクリプト、含まれるライブラリの設定を変更できます。

図: ドメイン コンフィギュレーション設定

この段階で、ZCU102 の Standalone プラットフォームを作成するのに必要なファイルすべてへの参照が設定されました。[Quick Links - #3 Generate Platform] をクリックし、プラットフォーム生成プロセスを終了します。プラットフォームが生成されたら、そのプラットフォームをターゲットにした SDx アプリケーションをビルドします。

プリビルドのハードウェアおよびソフトウェアを使用した Linuxドメインの定義

Linux アプリケーションの SDSoC プラットフォームを作成する例として、ZCU102 プラットフォームからのソース ファイルを再び使用し、platform_1 と同じワークスペースに 2 つ目のプラットフォーム platform_2 を新しく作成します。メニュー バーで [File] > [New] > [SDx Platform Project] をクリックして新しいプラットフォーム プロジェクトを作成します。<SDx_Install_Dir>/platforms/zcu102/hw/zcu102.dsa に含まれる先ほどと同じ ZCU102 の DSA を使用します。[Operating system][linux][Processor][psu_cortexa53] を選択します。

図: プラットフォーム ハードウェア仕様

プラットフォーム コンフィギュレーション設定で [Use existing pre-built data] をオンにし、[Prebuilt Data]<SDx_Install_Dir>/platforms/zcu102/sw/prebuilt パスを指定します。

図: プラットフォーム コンフィギュレーション設定

[linux on psu_cortexa53] をクリックして Linux ドメイン設定を表示したら、ダイアログ ボックスの 「The linux domain is not configured. Click here to update」 部分の [Click here] リンクをクリックします。

図: Linux ドメイン設定

ドメイン設定ダイアログ ボックスで、[Use pre-built software components] をオンにし、[Boot Directory]<SDx_Install_Dir>/platforms/zcu102/sw/a53_linux/boot を指定します。[BIF File]<SDx_Install_Dir>/platforms/zcu102/sw/a53_linux/boot/linux.bif に設定します。

図: Linux ブート ファイルおよび BIF ファイル

linux_domain コンフィギュレーション設定画面には、次の項目を指定するための追加フィールドが表示されるようになります。
  • Linux イメージ ディレクトリ
  • sysroot
ZCU102 プラットフォームからの既存の Linux ファイル (image.ub) は指定された image ディレクトリから参照されます。このドメイン設定画面で参照しておくと、オプションで sysroot をプラットフォームに関連付けることができます。

プラットフォームに sysroot を付けておくと、SDx IDE でインクルード パス、ライブラリ パスおよびその他のオプションを指定する際に、デフォルトの sysroot オプションを含む makefile を使用して Linux アプリケーションを作成できます。

[linux_domain] ビューで <SDx_Install_Dir>/platforms/zcu102/sw/a53_linux/a53_linux/image の Linux イメージを指定します。

図: 設定済み Linux ドメイン設定

sysconfig1 システム コンフィギュレーション設定は、[Boot Directory] および [Bif File] に入力した Linux ドメイン設定により自動的に生成されます。

図: Linux システム コンフィギュレーション設定

この段階で、ZCU102 の Linux プラットフォームを作成するのに必要なファイルすべてへの参照が設定されました。[Quick Links - #3 Generate Platform] をクリックし、プラットフォーム生成プロセスを終了します。プラットフォームが生成されたら、そのプラットフォームをターゲットにした SDx アプリケーションをビルドします。

プラットフォームが生成されると、SDx[Project Explorer] および [Assistant] ビューは次のようになります。

図: プラットフォーム生成後

プラットフォーム テスト用の SDSoC アプリケーション プロジェクトの定義

SDx IDE には、SDSoC プラットフォームで実行するアプリケーションを作成するためのコンパイル ツールおよびサンプル コード テンプレートが含まれます。SDx に含まれる Array zero_copy コード テンプレートを使用して、Standalone (platform_1) および Linux (platform_2) プラットフォームのサンプル アプリケーションを作成します。

コンパイル ログには、アプリケーションをビルドするために実行されたコマンドが含まれるので、ビルド プロセス中の動作のシーケンスを確認するのに便利です。データ モーション ネットワーク レポートには、アクセラレーションされた関数がリストされ、引数のマップ方法とプラットフォーム インターフェイスへの接続方法が示されます。各引数に使用されたデータ ムーバーのタイプもリストされます。

上記のセクションで作成した Standalone および Linux プラットフォームを含む SDx ワークスペース (sdx_workspace) を再利用します。

メニュー バーから [File] > [New] > [SDx Application Project] をクリックして、SDx アプリケーション プロジェクトを新しく作成します。[New SDx Application Project] ダイアログ ボックスが開き、プロジェクト名を入力する画面が表示されます。この ZCU102 ベースの例では、プロジェクト名を app_standalone に指定します。

図: [New SDx Application Project] ダイアログ ボックス

[Next] をクリックし、[Platform] ページに進みます。このプラットフォームは作成したときに Standalone ドメイン用にコンフィギュレーションしたので、platform_1 [custom] を選択します。

図: アプリケーション プラットフォームの選択

[Next] をクリックし、[System Configuration] ページに進みます。この設定はデフォルト ([System configuration]: sysconfig1[Runtime]: C/C++[Domain]: standalone on psu_cortexa53_0) のままにしておきます。platform_1 は作成したときに、単一の Standalone ドメインを含む単一のシステム コンフィギュレーションを使用してコンフィギュレーションしました。その他のシステム コンフィギュレーションまたはドメインがプラットフォームにある場合は、この [System Configuration] ページでそれらを使用するようにカスタマイズできます。

図: アプリケーションのシステム コンフィギュレーション

[Next] をクリックして [Templates] ページに進み、アプリケーションのコード ベースに [Array zero_copy] 例を選択します。

図: アプリケーション テンプレート

[Finish] をクリックし、テンプレート コードを SDx アプリケーションに追加します。編集エリアには、ハードウェア アクセラレーションに選択された関数を含むアプリケーション プロジェクト設定が表示されるようになります。[Project Explorer] および [Assistant] ビューには、新しい app_standalone アプリケーションが表示されるようになります。

図: アプリケーション プロジェクト設定

図: [Project Explorer] ビュー

[Assistant] ビューの [app_standalone [SDSoC]] リストを展開し、[Debug [Hardware]] を右クリックして [Build] を選択して app_standalone アプリケーションをビルドします。

図: アプリケーションのビルド - [Assistant] ビュー

アプリケーションがビルドされると、データ モーション ネットワーク レポートとコンパイル ログが [Assistant] ビューから確認できるようになります。コンパイル ログには、アプリケーションをビルドするために実行されたコマンドが含まれるので、ビルド プロセス中の動作のシーケンスを確認するのに便利です。データ モーション ネットワーク レポートには、アクセラレーションされた関数がリストされ、引数のマップ方法とプラットフォーム インターフェイスへの接続方法が示されます。各引数に使用されたデータ ムーバーのタイプもリストされます。

ターゲット ハードウェアでアプリケーションをブートおよび実行するためのファイル セットが生成され、[SD Card Image] を右クリックして [Open] → [Open in Project Explorer][Open] → [Open in File Browser]、または [Open] → [Open in Terminal] をクリックするとアクセスできるようになります。これらのファイルを FAT32 フォーマットの SD カードにコピーしてターゲット ハードウェア (この例の場合は ZCU102) をブートするのに使用し、アプリケーション コードを実行して生成されたプラットフォームをテストします。

[Array zero_copy] サンプル テンプレートを使用して先ほど生成した Linux プラットフォーム (platform_2) をテストする方法は、Standalone フローと同様です。ワークスペースを再び再利用して、app_linux という名前の別のSDx アプリケーション プロジェクトを追加し、platform_2 の Linux システム コンフィギュレーションを使用します。アプリケーションが問題なくビルドされると、[Project Explorer] および [Assistant] ビューは次のようになります。sd_card ディレクトリの中身は、ターゲット ハードウェアで Linux アプリケーションをブートおよび実行するために使用されます。

図: Linux アプリケーション ビルド後の [Project Explorer] ビュー

図: Linux アプリケーション ビルド後の [Assistant] ビュー

プラットフォームのクエリ

SDx 環境には、作成したプラットフォーム ファイルを読み込んでチェックするツールが含まれています。SDx IDE の SDx ターミナル ウィンドウから、生成されたプラットフォームが書き込まれた workspace/project_name/export のディレクトリ内で次のコマンドを実行すると、SDSoC プラットフォーム プロジェクトで作成されたプラットフォーム ファイルが正しく読み込まれたかどうかを確認できます。
> sds++ –sds-pf-list

このコマンドは、現在の作業ディレクトリのプラットフォーム フォルダーを読み込んでから、SDx インストール階層のプラットフォームを読み込んで、使用可能な SDx プラットフォームをリストします。カスタム プラットフォームを含むフォルダーからこのコマンドを指定した場合は、そこに入っているプラットフォームが読み込まれます。

前のコマンドでリストされたプラットフォームは、次のコマンドを使用すると、さらに詳細に表示できます。
> sds++ –sds-pf-info <platform_name>
ヒント: プラットフォームがインストール ディレクトリにない場合、platform_nameplatform ファイルを含むフォルダーのパスです。

このコマンドは、指定したプラットフォームの詳細を表示します。

次のコマンドを使用してプロジェクトに使用するプラットフォームを指定することもできます。
> sds++ –sds-pf <platform_name>
次のプラットフォーム プロパティは、sds++ -sds-pf-info zcu102 コマンドを実行したあとにレポートされます。
Platform Information
====================
Name: zcu102

Device
------
 Architecture: zynquplus
       Device: xczu9eg
      Package: ffvb1156
  Speed grade: -2

System Clocks
-------------
  Clock ID   Frequency
 ----------|------------
            1199.880127
         0    74.992500
         1    99.990000
         2   149.985000
         3   199.980000
         4   299.970000
         5   399.960000
         6   599.940000

Platform:    zcu102 (<SDx_Install_Dir>/platforms/zcu102)

Description: 
A basic platform targeting the ZCU102 evaluation board, which includes
4GB of DDR4 for the Processing System, 512MB of DDR4 for the Programmable
Logic, 2x64MB Quad-SPI Flash and an SDIO card interface. More information
at https://www.xilinx.com/products/boards-and-kits/ek-u1-zcu102-g.html
    
Available system configurations:
  a53_linux (a53_linux)
  a53_standalone (a53_standalone)
  r5_standalone (r5_standalone)
 
System Ports
 
Use the system port name in a sysport pragma, for example 
#pragma SDS data sysport(parameter_name:system_port_name)
 
System Port Name (Vivado BD instance name, Vivado BD port name)
ps_e_S_AXI_HPC0_FPD (ps_e, S_AXI_HPC0_FPD)
ps_e_S_AXI_HPC1_FPD (ps_e, S_AXI_HPC1_FPD)
ps_e_S_AXI_HP0_FPD (ps_e, S_AXI_HP0_FPD)
ps_e_S_AXI_HP1_FPD (ps_e, S_AXI_HP1_FPD)
ps_e_S_AXI_HP2_FPD (ps_e, S_AXI_HP2_FPD)
ps_e_S_AXI_HP3_FPD (ps_e, S_AXI_HP3_FPD)

詳細は、SDx コマンドおよびユーティリティ リファレンス ガイド を参照してください。