SDSoC 環境

SDSoC™ (Software-Defined System-on-Chip) 環境は、Zynq® UltraScale+™ MPSoC または Zynq-7000 デバイスにヘテロジニアス エンベデッド システムをインプリメントするのに必要なツールです。ハードウェアとソフトウェアの分割のデザイン タスクおよび試行には、Eclipse ベースの統合設計環境である SDx™ IDE を使用します。SDx IDE は、ソフトウェア開発 IDE に慣れたユーザーが使いやすいように設計されています。SDx IDE では、アプリケーション プロジェクト、プラットフォーム プロジェクト、ライブラリ プロジェクトを作成できます。次の図に、これらのデザイン フローの概要を示します。このユーザー ガイドでは、アプリケーション プロジェクトおよびライブラリ プロジェクトについて説明します。プラットフォーム プロジェクトについては、SDSoC 環境プラットフォーム開発ガイド を参照してください。

図: SDx デザイン フロー

プラットフォームは、SDSoC アプリケーションを構築するハードウェア、ソフトウェア、メタデータ コンポーネントを定義するので、SDSoC 環境には不可欠なコンセプトです。SDx IDE には複数の基本的なプラットフォームが含まれており、SDSoC アプリケーションを作成するのに使用できるので、カスタム プラットフォームを一から作成する必要はありません。SDx IDE では、sds++ システム コンパイラを使用して C/C++ コードを高パフォーマンスのハードウェア アクセラレータに変換します。このアクセラレータは、プラットフォーム設計者およびアプリケーション コードのプラグマが指定したように、プラットフォーム インターフェイスに接続されます。プラットフォーム メタデータ内の宣言では、ハードウェア アクセラレータをベース プラットフォームに接続する際にシステム コンパイラで使用されるインターフェイス ポート、クロック、割り込み、およびリセット ブロックを指定します。

図: プラットフォームのブロック図

システム コンパイラは、プログラムを解析し、ソフトウェアとハードウェア関数間のデータフローを判断して、アプリケーション特定のシステム オン チップを生成します。sds++ システム コンパイラで生成されたハードウェア IP およびソフトウェア制御コードは、自動的にデータ転送をインプリメントし、ハードウェア アクセラレータとアプリケーション ソフトウェアを同期します。通信と計算をパイプライン処理して、次の図に示すような最大限に並列実行されるハードウェア関数を生成することにより、パフォーマンスを達成します。

図: データ転送と計算のパイプライン処理

sds++ システム コンパイラは Vivado® 高位合成 (HLS) ツールを起動し、ソフトウェア関数を SoC のプログラマブル ロジック (PL) を定義して設定するビットストリームに変換します。スタブ関数も生成され、標準 GCC ツールチェーンを使用してコンパイルおよびリンクされたアプリケーション ソフトウェアでインプリメントされたハードウェア関数が使用されます。必要なドライバーおよびライブラリは、すべてこのシステム コンパイル プロセスに自動的に含まれます。

システム コンパイルの最終出力は sd_card ディレクトリに生成され、最低でも Zynq ブート可能 BOOT.BIN ファイル、実行可能およびリンク可能フォーマット (ELF) ファイルのアプリケーション コード、およびREADME.txt ブート命令ファイルが含まれます。BOOT.BIN ファイルには、生成したシステムをターゲット ボードでブートするのに必要なブートローダー、ビットストリーム、およびアプリケーション コードが含まれます。ターゲット ボードで Linux を実行するシステムの場合は、sd_card ディレクトリにブート プロセスで使用される Linux イメージ ファイルも含まれます。

SDSoC システム コンパイラでは完全なアプリケーションが生成され、プログラム レベルでリファクタリングすることによりデザインおよびアーキテクチャの機能を調整していくことができ、ターゲット プラットフォームで実行可能なアプリケーションを達成するのにかかる時間を短縮できます。高パフォーマンスを達成するには、各ハードウェア関数を独立させて実行する必要があります。システム コンパイラでは、ハードウェア関数とアプリケーション ソフトウェア間の同期を維持しながら計算および通信のパイプライン処理をイネーブルにして、ハードウェアおよびソフトウェアのコンポーネントが生成されます。アプリケーション コードには、多数のハードウェア関数、特定のハードウェア関数の複数のインスタンス、プログラムの異なる部分からのハードウェア関数呼び出しなどを含めることができます。

SDSoC 環境では、これは Zynq-7000 SoC または Zynq UltraScale+ MPSoC デバイス ファミリ内で使用可能なリソースおよびパフォーマンスを反映しています。特定のリアルタイム ビヘイビアーが必要なアプリケーションを作成する場合は、実行環境に注意する必要があります。

Zynq-7000 ファミリには、専用 Arm® プロセッシング コア、オンチップ メモリ、エンベデッド ペリフェラル、インターコネクト ブロック、DDR メモリ コントローラーを含むプロセッサ システム (PS) と、SDSoC で生成されたアクセラレータで使用されるプログラマブル ロジック (PL) が含まれます。

次の表に、Zynq-7000 SoC および Zynq UltraScale+ MPSoC データシートからのスイッチ特性を使用した理想的なプロセッサ、メモリ、および AXI インターフェイス パフォーマンスを示します。

表 1. プロセッサ、メモリ、および AXI インターフェイスのパフォーマンス
クロックまたはインターフェイス Zynq UltraScale+ MPSoC Zynq-7000 SoC
最大 APU クロック周波数 ArmCortex™-A53 64 ビット クワッド コア: 1500 MHz Arm Cortex-A9 32 ビット デュアル コア: 1000 MHz
最大 RPU クロック周波数 Arm Cortex-R5 32 ビット デュアル コア: 600 MHz なし
DDR タイプおよびビット幅 DDR4: x32、x64 DDR3: x16、x32
DDR 最大パフォーマンス 2400 Mb/s 1333 Mb/s
DDR 最大理想スループット 153.6 Gb/s 42.6 Gb/s
AXI インターフェイス幅 128 ビット、64 ビット、32 ビット 64 ビット、32 ビット
AXI インターフェイス最大周波数 333 MHz 250 MHz
AXI インターフェイス最大理想スループット 42.6 Gb/s 16 Gb/s
AXI インターフェイス ポート数 12 6
AXI スループット合計 511.2 Gb/s 96.0 Gb/s

はじめに

SDSoC 開発環境 リリース ノート、インストール、およびライセンス ガイド の手順に従って SDSoC ツール スイートをダウンロードおよびインストールします。

SDSoC をダウンロードした後、プロジェクト作成、プログラマブル ロジックで実行する関数の指定、システムのコンパイル、デバッグ、およびパフォーマンス見積もりなどの主要なワークフローの詳細な手順とと体験型チュートリアルは『SDSoC 環境チュートリアル: 概要』 (UG1028) に掲載されています。チュートリアルおよび演習を実際に実行してみるのが SDSoC 環境の概要を理解するのに最適な方法なので、アプリケーション開発前に実行しておくことをお勧めします。

注記: SDSoC ツール スイートには、ビットストリーム、オブジェクト コード、実行ファイルを生成するためのツールすべてが含まれます。ザイリンクス Vivado Design Suite およびソフトウェア開発キット (SDK) ツールを個別にインストールした場合、これらのインストールを SDSoC 環境とまとめないようにしてください。ツールが SDSoC インストール (Vivado Design Suite および SDK ツールを含む) から実行されていることを確認してください。
注記: SDSoC では、Windows ホストでの Linux アプリケーション開発がサポートされていますが、SDSoC プラットフォーム環境には Linux ホストが強く推奨されます。ターゲットの Linux OS をサポートするプラットフォームを作成する場合は、Linux ホストが必要です。

SDSoC のエレメント

SDSoC 環境には、完全なハードウェア/ソフトウェア システムを生成するシステム コンパイラ (sds++)、プロジェクトとワークフローを作成して管理する Eclipse ベースのユーザー インターフェイス、ハードウェア/ソフトウェア インターフェイスのさまざまな what-if シナリオを試すためのシステム パフォーマンス見積もり機能などが含まれます。SDx ツールには、次が含まれます。

  • Eclipse ベースの IDE
  • sds++ システム コンパイラ
  • 高位合成 (HLS)
  • Vivado Design Suite
  • IP インテグレーターおよび IP ライブラリ
  • Vivado で生成された SDx プラットフォーム
  • SDx で生成されたハードウェア アクセラレータおよび関連する制御ソフトウェア
  • SDx で生成されたデータ ムーバーおよび関連する制御ソフトウェア
  • TCF (Target Communication Framework)
  • GNU ソフトウェア開発ツール

SDSoC 環境には、GNU ツールチェーンと標準ライブラリ (例: glibc)、Eclipse C/C++ Development Tooling (CDT) ベース GUI 内のパフォーマンス解析パースペクティブ、およびコマンド ライン ツールが含まれます。

SDSoC システム コンパイラでは、Vivado HLS、IP インテグレーター、データ移動およびインターコネクト用の IP ライブラリ、および RTL 合成、インプリメンテーション、ビットストリーム生成ツールを含む Vivado Design Suite HLx Edition からのツールが使用されます。

SDSoC 環境で使用されるワークフローは、確立されたプラットフォーム ベースの設計手法を使用しており、デザイン再利用の原則が基礎となっています。SDSoC システム コンパイラでは、ターゲット プラットフォームをカスタマイズしてアプリケーション特定のシステム オン チップが生成されます。

SDSoC 環境には、アプリケーション開発用の多数のビルトイン プラットフォームが含まれていますが、ザイリンクス パートナーから提供されるプラットフォームや FPGA 設計チームの開発したカスタム プラットフォームから提供されるプラットフォームも使用できます。SDSoC 環境プラットフォーム開発ガイド には、Vivado Design Suite を使用したデザインの作成方法、プラットフォーム インターフェイスを定義および設定するためのプラットフォーム プロパティの指定方法、プラットフォームを構築するソフトウェア ランタイム環境を定義して SDSoC 環境で使用できるようにする方法などが記載されています。

SDSoC プラットフォームでは、次を含むベース ハードウェア、ソフトウェア アーキテクチャおよびアプリケーション コンテキストが定義されます。
  • プロセッシング システム
  • 外部メモリ インターフェイス
  • カスタム入力/出力
  • オペレーティング システム (たとえば、Linux、FreeRTOS、またはスタンドアロン)、ブートローダー、プラットフォーム ペリフェラルのドライバー、ルート ファイル システムなどのソフトウェア ランタイム
SDSoC 環境内で作成するプロジェクトはすべて特定のプラットフォームをターゲットにします。SDx IDE を使用して、アプリケーション特定のハードウェア アクセラレータおよびデータ モーション ネットワークを含めてベース プラットフォーム基盤をビルドし、アクセラレータをプラットフォームに接続すると、さまざまなベース プラットフォーム用にカスタマイズされたアプリケーション特定のシステム オン チップ (SoC) を簡単に作成でき、ベース プラットフォームをさまざまなアプリケーションに使用できるようになります。

SDx インストールに含まれる定義済みプラットフォームか、カスタム プラットフォームを選択するオプションがあります。カスタム プラットフォームは、Vivado ツールまたは定義済みプラットフォームからのデバイス サポート アーカイブ (DSA) ハードウェア仕様を基に生成できます。

最新のサポート デバイスと必要なソフトウェアのリストは、SDSoC 開発環境 リリース ノート、インストール、およびライセンス ガイド を参照してください。

デザイン フローの概要

SDSoC 環境は、ベース ハードウェアおよびターゲット アーキテクチャを提供するプラットフォームから開始して、効率的な SoC アプリケーションをビルドするためのツール スイートです。ブート イメージおよび実行可能アプリケーション コードは SDSoC ツールで生成されます。

次の図に、ツール スイートの主なコンポーネントを使用したデザイン フローを示します。説明のため、ここではデザイン フローは 1 つの手順から次の手順に順に進められますが、実際には異なるエントリ ポイントおよびエグジット ポイントを使用したほかのワークフローを選択することもできます。

まず、CPU 用にコンパイルされたアプリケーションのソフトウェアのみのバージョンから開始します。主な目標は、プログラマブル ロジックに移行するプログラム部分を特定し、ベース プラットフォームにビルドされたハードウェアおよびソフトウェアにアプリケーションをインプリメントすることです。

注記: エミュレーションは、ベース プラットフォームでのみ使用できます。デバッグおよびエミュレーションの詳細は、SDSoC 環境デバッグ ガイド を参照してください。

図: ユーザー デザイン フロー

手順は次のとおりです。

  1. 開発プラットフォームを選択し、アプリケーションをコンパイルして、プラットフォームで正しく実行されるかどうかを確認します。
  2. システム パフォーマンスを改善するため、プログラマブル ロジックに移行する計算負荷の高い部分を特定し、ハードウェアにコンパイル可能な関数に分離します。ハードウェア アクセラレーション用の関数の選択を参照してください。
  3. SDSoC システム コンパイラを起動して、アプリケーション用の SoC と SD カードを生成します。コードの使用を参照してください。

必要に応じてコードにパフォーマンスを解析するコードを含め、環境内で指示子とツールのセットを使用して、システムおよびハードウェア関数を最適化できます。プロファイリングおよび最適化のベスト プラクティスについては、SDSoC プロファイリングおよび最適化ガイド を参照してください。

sds++ システム コンパイラは、IDE を使用するか、コマンド ラインと makefile を使用したターミナル シェルを使用して、システム生成プロセスを実行します。ハードウェアで実行する関数を選択し、アクセラレータおよびシステム クロックを指定して、データ転送のプロパティを設定します。プラグマをアプリケーション ソース コードに挿入してアクセラレータおよびデータ モーション ネットワークをインプリメントするための指示子をシステム コンパイラに供給することにより、システム マップおよび生成フローを制御できます。

完全なシステムのコンパイルには、従来の CPU のコンパイルに比べて時間がかかるため、SDSoC 環境にはパフォーマンスをより高速に見積もる機能があります。この見積もりにより、選択したハードウェア関数に対してソフトウェアのみのインプリメンテーションと比較してどれくらいスピードアップするかを大まかに予測できます。これは、システム エミュレーションでも論理的に検証および解析できます。システム エミュレーション機能では、ソフトウェアを実行するクイック エミュレーション (QEMU) モデルとハードウェア関数の RTL モデルを使用して、高速で正確なシステム解析が実行されます。

デザイン プロセスは、生成されたシステムがパフォーマンスおよびコストの目標を達成するまで繰り返し実行されます。

入門チュートリアルを実行して、プロジェクトの作成、ハードウェア関数の選択、およびターゲット プラットフォームでの生成されたアプリケーションのコンパイルと実行について理解するには、『SDSoC 環境チュートリアル: 概要』 (UG1028) を参照してください。

SDx GUI の理解

SDx IDE でプロジェクトを開くと、ワークスペースにビューおよびエディターが特定の配置 (IDE ではパースペクティブと呼ばれる) で表示されます。次の図に示す SDx パースペクティブ (デフォルト) が開きます。

図: SDx – デフォルト パースペクティブ

デフォルト パースペクティブには、次のビューおよびエディターが含まれます。

[Project Explorer] ビュー
プロジェクト フォルダーおよびソース ファイル、ビルド ファイル、ツールで生成されるレポートをツリー ビューで表示します。
[Assistant] ビュー
SDSoC アプリケーションの設定の表示および編集、アプリケーションのビルドおよび実行、プロファイリングおよびデバッグ セッションの実行、レポートを開くなどの作業を実行できます。
エディター エリア
プロジェクト設定、ビルド コンフィギュレーションを表示し、プロジェクトを操作するための多くのコマンドにアクセスできます。
コンソール エリア
コマンド コンソール、デザインのガイダンス、プロジェクト プロパティ、ログ、ターミナル ビューなどの複数のビューを表示します。
[Outline] ビュー
エディター エリアで開いている現在のソース ファイルのアウトラインを表示します。
[Target Connections] ビュー
Vivado ハードウェア サーバー、TCF (Target Communication Framework)、およびクイック エミュレーター (QEMU) ネットワーキングなどの SDx ツールに接続されるさまざまなターゲットのステータスを表示します。

ビューを閉じるには、ビューのタブ上の [Close] ボタンをクリックします。ビューを開くには、[Window] > [Show View] をクリックし、該当するビューをクリックします。ビューは IDE 内でドラッグ アンド ドロップして並べ替えることができます。

[Window] > [Perspective] > [Save Perspective As] をクリックすると、ビューの配置をパースペクティブとして保存できます。これにより、最初のプロジェクト編集、レポート解析、デバッグなどのに合わせてパースペクティブを定義できます。パースペクティブとして保存しない変更は、ワークスペースに保存されます。ビューのデフォルトの配置を復元するには、[Window] > [Perspective] > [Reset Perspective] をクリックします。

別のパースペクティブを開くには、[Window] > [Perspective] > [Open Perspective] をクリックします。

SDx (デフォルト) パースペクティブを復元するには、メイン ツールバーの右側にある [SDx] ボタン をクリックします。