OpenCL™ - BSP - サポートセンター

インテル® FPGA SDK for OpenCL™ は、ソフトウェア開発者が、インテル® CPU と FPGA を使用したヘテロジニアス・プラットフォームをターゲットにすることで、アプリケーションの高速化を実現できる環境です。インテル® FPGA SDK for OpenCL™ は、インテル® Quartus® Prime 開発ソフトウェアの一部として、または別のパッケージとしてインストールすることができます。以下のリンクから、インテル® FPGA SDK for OpenCL™ をダウンロードすることができます。

インテル® FPGA SDK for OpenCL™ のダウンロード

OpenCL™ BSP サポートページへようこそ!ここでは OpenCL™ BSP のプランニング、デザイン、実装に関する情報を提供するとともに、デバッグのためのヒントやコツを紹介します。

このページは、OpenCL™ ボード・サポート・パッケージ (BSP) の開発プロセス (または OpenCL™ カーネル / アルゴリズムの設計 / 移行プロセス) に沿って各フェーズを紹介するように構成されています。リファレンス・デザインの変更のセクションには、インテル® リファレンス・プラットフォームを独自のカスタム・プラットフォームに変更する方法、およびタイミングの不具合なしにフラットデザインをコンパイルする方法に関するリソースを用意しています。フロアプランニングとタイミング・クロージャーのセクションでは、デザインをパーティション化する方法、および最大動作周波数を実現するためのガイダンスを提供しています。また、デザインでのタイミングの収束や、BSP の構築中のタイミング収束を保証するための手法についても説明します。MMD と OpenCL™ ユーティリティーのセクションでは、MMD を再構築する手順と、OpenCL™ ユーティリティーに関する詳細を提供します。デバッグのセクションでは、起こりうる問題をデバッグするためのいくつかのツールやリソースを提供します。すべてのセクションに、BSP 開発プロセスにおいて役立つドキュメントやトレーニング・コースを記載しています。

1. リファレンス・デザインの変更

スタートガイド

BSP 開発を開始する前に、次の手順を必ず実行しておきます。

  1. インテル® FPGA SDK for OpenCL™ とインテル® Quartus® Prime 開発ソフトウェアがインストールされていることを確認します。
  2. OpenCL™ リファレンス BSP と一致するツールバージョンが利用できることを確認します。
  3. インテル® Quartus® Prime 開発ソフトウェアのフルライセンスが利用できることを確認します。

リファレンス・デザインの選択

カスタム・プラットフォームに合うリファレンス・デザインの選択

インテルでは、次のプラットフォーム向けの OpenCL™ リファレンス BSP デザインをサポートしています。また、個々のプラットフォーム向けの OpenCL™ BSP 移植ガイドを参照することもできます。

リファレンス・デザインの変更

OpenCL BSP 移植ガイドの手順に従って、ご使用のプラットフォームに合わせたリファレンス・デザインの変更を開始します。デザインの変更が完了した後、最初のカーネルのコンパイルを試すことをお勧めします。通常、 Boardtest と呼ばれるカーネルを使用します。これによって BSP のさまざまなインターフェイスをテストします。Boardtest と一般的な BSP のビルド手順に関する情報は、次のガイドに記載されています。

インテル® FPGA SDK for OpenCL™ カスタム・プラットフォーム・ツールキット・ユーザーガイド (PDF) ›

BSP のビルドについての推奨手順:

  1. Boardtest を「フラット」フローでコンパイルして、タイミング収束済みの「.aocx」ファイルを生成します。
  2. Boardtest の実行により「.aocx」を検証し、このテストに基づきインターフェイス帯域幅の期待値をクロスチェックします。
  3. 「ベース」ビルド向けのフロアプランニングの作業を開始して、タイミング収束が保証された OpenCL™ BSP を作成します。

2. フロアプランニングとタイミング収束

スタートガイド

OpenCL では、フラット版とベース版という 2 種類のプロジェクトに対してタイミング作業を行う必要があります。フラット版は、パーティションやロジック・ロック・リージョンのないもので、hardware/flat.qsf ファイルを使用して実装します。一方、ベース版は、パーティションやロジックロックを含むもので、hardware/base.qsf ファイルを使用して実装します。インテルでは、速やかに開発を始められるように、まずはタイミングの問題のないフラット版を作成してから、フロアプランニングの作業を行って、タイミングの問題のないベース版のデザインを作成することを推奨しています。

コンパイルフローの詳細については、インテル® FPGA SDK for OpenCL™ ボード・サポート・パッケージ・フロアプラン最適化ガイドの OpenCL™ BSP コンパイルフローのセクションを参照してください。

フロアプラン・パーティション

フラットコンパイルから始めて、BSP のすべてのコンポーネントが自然に配置される場所を把握します (特に、PCIe*、DDR メモリーなど、I/O 接続のある Intellectual Property (IP) ブロック)。

これに関する詳しいガイドラインについては、インテル® FPGA SDK for OpenCL™ ボード・サポート・パッケージ・フロアプラン最適化ガイドの OpenCL™ BSP フロアプランニングのガイドラインのセクションを参照してください。

詳細については、パーシャル・リコンフィグレーション・ユーザーガイドを参照してください。

PR 領域の変更

ベースコンパイルでは、freeze_wrapper_inst|kernel_system_inst を含むカーネル上の LogicLock 領域から始めます。フラットコンパイルとチッププランナーを使用して、BSP ハードウェアのサイズと場所を特定します。ロジック・ロック・リージョンの活用により、kernel_system により多くのリソースを用意するようにします。

これに関する詳しいガイドラインについては、インテル® FPGA SDK for OpenCL™ ボード・サポート・パッケージ・フロアプラン最適化ガイドの OpenCL™ BSP フロアプランニングのガイドラインのセクションを参照してください。

タイミング違反の修正

デザインのタイミング違反を修正するには、IP コア間にパイプライン・ステージの追加が必要となる場合があります。

詳しいガイドラインについては、次のリンクを参照してください。

セットアップ / ホールドの制約

出力ディレクトリー内の .failing_paths.rpt と .failing_clocks.rpt は、デザインにおける主な不具合の一覧です。パスの一部に共通する不具合がある場合、そのクリティカル・パスの最小または最大遅延の制約を /hardware/top.sdc ファイル内に設定することもできます。

関連する問題については、ナレッジ・データベースのページに次の回避策を用意しています—インテル® Arria® 10 FPGA で競合するホールドとセットアップの違反についてタイミングを収束させる方法

3. MMD および OpenCL™ ユーティリティー

MMD ソースの開発または変更

MMD ソフトウェア・ライブラリーは、ホストとアクセラレーション・ボードとの間の基本入出力 (I/O) を実装し、オープン、読み取り、書き込みなどのインターフェイスを提供します。MMD ライブラリー・ドライバーは、Windows* 64 または Linux* 64 形式で格納され、ソースコードはソースフォルダーに保管されます。

詳細については、インテル® FPGA SDK for OpenCL™ カスタム・プラットフォーム・ツールキット・ユーザーガイドの MMD ライブラリーの作成のセクションを参照してください。

ユーティリティー・サポート

OpenCL™ ユーティリティーによって、インテル® FPGA SDK for OpenCL™ を使用したボードアクセスを実行できます。これには、aocl のインストール、aocl のアンインストール、aocl の診断、aocl プログラム、aocl フラッシュが含まれています。

詳細については、インテル® FPGA SDK for OpenCL™ カスタム・プラットフォーム・ツールキット・ユーザーガイドのインテル® FPGA SDK for OpenCL™ ユーティリティー・サポートの提供のセクションを参照してください。

ソフトウェア・ユーティリティーと MMD レイヤーを作成した後、ハードウェア・デザインをテストする必要があります。boardtest カーネルを生成して、ボード上で実行する方法が一般的です。

詳細については、インテル® FPGA SDK for OpenCL™ カスタム・プラットフォーム・ツールキット・ユーザーガイドのハードウェア・デザインのテストのセクションを参照してください。

4. デバッグ

ボード立ち上げ

このセクションでは、インテル® FPGA 開発キットまたは独自のカスタムボードの立ち上げの際に発生する問題のトラブルシューティングを行う方法について説明します。

ボードの立ち上げ時に直面する可能性のある既知の問題を確認するには、アプリケーション・ノート「AN 807: Configuring the Intel® Arria® 10 GX FPGA Development Kit for the Intel® FPGA SDK for OpenCL™ (インテル® FPGA SDK for OpenCL™ 向けのインテル® Arria® 10 GX FPGA 開発キットのコンフィグレーション)」の次のセクションを参照してください。

フロアプランとタイミング

静的ロジックに使用する領域を最小限にとどめて、OpenCL* カーネルにより多くのスペースを残す方法に関するヒントについては、 AN 824: インテル® FPGA SDK for OpenCL™ ボード・サポート・パッケージ・フロアプラン最適化ガイド (英語) を参照してください。

実行時のデバッグ

環境変数の中には、設定することで、ホスト・アプリケーションの実行中により多くのデバッグ情報を入手できるものがあります。これらはインテル® FPGA SDK for OpenCL™ に特有の環境変数で、カスタム・プラットフォーム・デザインでの問題の診断に役立ちます。

次の表に、こうしたすべての環境変数の一覧とその詳細を示します。

環境変数

詳細

ACL_HAL_DEBUG

この変数を 1 ~ 5 の値に設定すると、MMD レイヤーと直接インターフェイスする HAL (Hardware Abstraction Layer) からのデバッグ出力を増やすことができます。

ACL_PCIE_DEBUG

この変数を 1 ~ 10000 の値に設定すると、MMD からのデバッグ出力を増やすことができます。この変数設定は、バージョン ID レジスターを正しく読み取れたことや、UniPHY IP コアがキャリブレーションされていることを確認する場合に役立ちます。

ACL_PCIE_JTAG_CABLE

この変数を設定すると、ケーブル番号を指定するデフォルトの quartus_pgm 引数が上書きされます。デフォルトはケーブル 1 です。複数のインテル® FPGA ダウンロード・ケーブルが存在する場合、この変数を設定することで特定のケーブルを指定できます。

ACL_PCIE_JTAG_DEVICE_INDEX

この変数を設定すると、FPGA デバイスのインデックスを指定するデフォルトの quartus_pgm 引数が上書きされます。デフォルトでは、この変数の値は 1 です。FPGA が JTAG チェーンの中の最初のデバイスではない場合、この値をカスタマイズできます。

ACL_PCIE_USE_JTAG_PROGRAMMING

この変数を設定すると、パーシャル・リコンフィグレーションではなく、JTAG ケーブルを使用して MMD で強制的に FPGA の再プログラミングを行うことができます。

ACL_PCIE_DMA_USE_MSI

この変数は、Windows* 上でダイレクト・メモリー・アクセス (DMA) 転送に MSI を使用する場合に設定します。

シグナルタップ・デバッグ

OpenCL™ デザインではシミュレーション機能がサポートされていないため、シグナルタップ・ロジック・アナライザーを使用することが、これらのデザインをデバッグする最良の方法となります。

カーネルハング、またはメモリー・インターフェイスや aocl 診断のエラーに関連する問題のあるデザインをデバッグする場合は、シグナルタップ・ロジック・アナライザーの使用を推奨します。

シグナルタップ・ロジック・アナライザーに関する詳細については、デバッグ・ツール・ユーザーガイドのシグナルタップ・ロジック・アナライザーによるデザインのデバッグのセクションを参照してください。

次の手順を実行して、シグナルタップ・ファイルを BSP デザインに追加します。

1. シグナルタップ GUI を開いて、解析するすべてのシグナルを追加します。

2. STP ファイルを、インテル® Quartus® Prime 開発ソフトウェアのプロジェクト・ファイルと同じディレクトリーに保存します。

3. flat.qsf に次のコマンドラインを追加します。

  • set_global_assignment -name ENABLE_SIGNALTAP ON
  • set_global_assignment -name USE_SIGNALTAP_FILE <file_name>.stp
  • set_global_assignment -name SIGNALTAP_FILE <file_name>.stp

4. AOCL コマンドラインからカーネルを再コンパイルします。

確認されている問題点

5. 推奨の参照資料とトレーニング

OpenCL* ビデオ

タイトル

詳細

OpenCL* スタートガイド・パート 1 (英語)

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* 高速フーリエ変換 (FFT) の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL* スタートガイド・パート 2 (英語)

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL スタートガイド・パート 3 (英語)

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL スタートガイド・パート 4 (英語)

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

OpenCL スタートガイド・パート 5 (英語)

このビデオでは、Windows* コンピューターを使用して、OpenCL* HelloWorld と OpenCL* FFT の 2 つのアプリケーションを Cyclone® V SoC 上で実行するための基本手順を説明します。

カスタムの Verilog モジュール / デザイン を OpenCL* ライブラリーとしてパッケージする方法 (英語)

このビデオでは、この機能を使用して、カスタムの処理ブロック (RTL) を OpenCL* カーネルコードに含めることができる理由を説明します。make ファイル、config ファイルなどのデザイン例について説明し、コンパイルフローを説明します。また、このビデオではデザイン例のデモもご覧になれます。

インテル® FPGA SoC FPGA での OpenCL™ (Linux Host) - パート 1 - ツールのダウンロードとセットアップ

このビデオでは、インテル® SoC FPGA を対象とする OpenCL™ カーネルとホストコードの開発に必要なツールのダウンロード、インストール、および構成の方法について紹介します。

インテル® FPGA SoC FPGA での OpenCL™ (Linux Host) - パート 2 - エミュレーターによるベクトル加算のデザイン例の実行

このビデオでは、インテル® FPGA OpenCL™ に内蔵されているエミュレーターを対象とした、サンプルの OpenCL™ アプリケーションのダウンロード方法とコンパイル方法を紹介します。

インテル® FPGA SoC FPGA での OpenCL™ (Linux Host) - パート 3 - SoC FPGA 向けのカーネルおよびホストコードのコンパイル

このビデオでは、Cyclone® V SoC FPGA の FPGA とプロセッサーを対象として、OpenCL* カーネルおよびホストコードのコンパイル方法について紹介します。

インテル® FPGA SoC FPGA での OpenCL™ (Linux Host) - パート 4 - ランタイム環境の設定

このビデオでは、OpenCL* サンプルを動作させるための Cyclone® V SoC ボードのセットアップ方法、およびボード上でホストコードとカーネルを実行する方法について紹介します。

6. サポート

OpenCL™ 認定サービス・プロバイダー

インテル® FPGA ボード用の OpenCL™ ボード・サポート・パッケージの開発支援には、以下の認定サービス・プロバイダーをお勧めします。認定プロバイダー各社には、インテル® FPGA ボード用の高品質の OpenCL™ ボード・サポート・パッケージ、ドライバー、設計移行に関して豊富な開発実績があります。

Terasic Inc

OpenCL および OpenCL ロゴは Apple Inc. の商標であり、Khronos の許可を得て使用しています。