SDAccel のビルド プロセス
SDAccel™ 環境には、ホスト アプリケーション用に最適化されたコンパイラ、FPGA 用のクロスコンパイラ、コードの問題を特定して解決するための安定したデバッグ環境、ボトルネックを特定してコードを最適化するためのパフォーマンス プロファイラーなどの標準的なソフトウェア開発環境の機能がすべて含まれています。この環境内の SDAccel ビルド プロセスでは、標準のコンパイルおよびリンク プロセスをプロジェクトのソフトウェア要素とハードウェア要素の両方に使用します。次の図に示すように、ホスト アプリケーションは標準 GCC を使用した 1 つのプロセスでビルドされ、FPGA バイナリはザイリンクス XOCC コンパイラを使用した別のプロセスでビルドされます。
図: ソフトウェア/ハードウェアのビルド プロセス
- GCC を使用したホスト アプリケーションのビルド プロセス:
- ホスト アプリケーションのソース ファイルをそれぞれオブジェクト ファイル (.o) にコンパイルします。
- オブジェクト ファイル (.o) をザイリンクス SDAccel ランタイム共有ライブラリとリンクし、実行ファイル (.exe) を作成します。
XOCCを使用した FPGA ビルド プロセス:- 各カーネルを個別にザイリンクス オブジェクト (.xo) ファイルにコンパイルします。
- C/C++ および OpenCL C カーネルを
XOCCコンパイラを使用して FPGA にインプリメンテーションできるようにコンパイルします。この手順には、Vivado® HLS コンパイラが使用されます。Vivado HLS でサポートされるのと同じプラグマおよび属性を C/C++ および OpenCL C カーネル ソース コードで使用し、必要なカーネルのマイクロ アーキテクチャを指定して、コンパイル プロセスの結果を制御できます。 package_xoユーティリティを使用して RTL カーネルをコンパイルします。SDAccel 環境の RTL Kernel ウィザードを使用すると、このプロセスを簡単に実行できます。
- C/C++ および OpenCL C カーネルを
- カーネル .xo ファイルをハードウェア プラットフォーム (.dsa) にリンクし、FPGA バイナリ (.xclbin) を作成します。アーキテクチャの重要な点は、リンク段階で指定します。特に、カーネル ポートからグローバル メモリ バンクまでの接続を確立し、各カーネルのインスタンス数を指定します。
- ビルド ターゲットがソフトウェアまたはハードウェア エミュレーションの場合は、次に説明するように、
xoccでデバイスの内容のシミュレーション モデルが生成されます。 - ビルド ターゲットがシステムまたはアーキテクチャ ハードウェアの場合は、
xoccで FPGA バイナリが生成され、デバイスが Vivado® Design Suite を使用して合成およびインプリメンテーションできるようになります。
- ビルド ターゲットがソフトウェアまたはハードウェア エミュレーションの場合は、次に説明するように、
注記:xoccコンパイラでは Vivado HLS および Vivado Design Suite ツールが自動的に使用され、FPGA プラットフォームで実行するカーネルがビルドされます。この場合、ツールで良い QoR (結果の品質) が得られる定義済み設定が使用されます。SDAccel 環境およびxoccコンパイラの使用には、これらのツールの知識は必要ありませんが、ハードウェアに精通していると、これらのツールで使用可能なすべての機能を活用してカーネルをインプリメントできます。- 各カーネルを個別にザイリンクス オブジェクト (.xo) ファイルにコンパイルします。
ビルド ターゲット
SDAccel ビルド プロセスでは、ホスト アプリケーションの実行ファイル (.exe) と FPGA バイナリ (.xclbin) を生成します。SDAccel ビルド ターゲットでは、ビルド プロセスで生成される FPGA バイナリの特性が定義されます。
SDAccel には、デバッグおよび検証に使用する 2 つのエミュレーション ターゲット、および実際の FPGA バイナリを生成するのに使用されるデフォルトのハードウェア ターゲットの 3 つのビルド ターゲットがあります。
- ソフトウェア エミュレーション (
sw_emulator): ホスト アプリケーション コードとカーネル コードの両方を x86 プロセッサで実行できるようコンパイルします。これにより、高速なビルドおよび実行ループを使用した反復アルゴリズムによる改善が可能になります。このターゲットは、構文の問題を特定し、アプリケーションと共に実行されるカーネル コード ソース レベルのデバッグを実行し、システムの動作を検証するのに便利です。 - ハードウェア エミュレーション (
hw_emu): カーネル コードをハードウェア モデル (RTL) にコンパイルし、専用シミュレータで実行します。ビルドおよび実行ループにかかる時間は長くなりますが、詳細でサイクル精度のカーネル アクティビティが表示されます。このターゲットは、FPGA に含まれるロジックの機能をテストして、最初のパフォーマンス見積もりを得る場合に便利です。 - システム (
hw): カーネル コードをハードウェア モデル (RTL) にコンパイルした後 FPGA デバイスにインプリメントし、実際の FPGA で実行されるバイナリを生成します。