OpenCL 用 FPGA SDK
ユーザーガイド
UG-OCL009
2017.05.08
インテル® Quartus® Prime Design Suite の最終更新: 17.0
購読する
フィードバックを送信
インテル® FPGA SDK for OpenCL™ インテル® Cyclone®V SoC 開発キット・リファレンス・プラットフォーム・ポーティング・ガイド
V SoC 開発キット リファレンス プラットフォーム ポーティング ガイドでは、インテル Cyclone V SoC 開発キット リファレンス プラットフォーム (c5soc) のハードウェアおよびソフトウェア設計について説明しており、OpenCL 向けインテル ソフトウェア開発キット (SDK) で使用できます。 インテル ® FPGA SDK for OpenCL ™ インテル Cyclone ® . 開始する前に、インテルは次のドキュメントの内容をよく理解しておくことを強くお勧めします。
- Intel FPGA SDK for OpenCLIntel Cyclone V SoC 入門ガイド
- インテル FPGA SDK for OpenCL カスタム・プラットフォーム・ツールキットのユーザーガイド
- Cyclone V Device Handbook, Volume 3: Hard Processor System Technical Reference Manual さらに、アルテラの Cyclone V SoC Development Kit and SoC Embedded Design Suite ページを参照してください。 web詳細については、サイトをご覧ください。 1 2
注意: インテルは、インテル FPGA SDK for OpenCL カスタム・プラットフォーム・ツールキット・ユーザーガイドを十分に理解していることを前提としています。 Cyclone V SoC 開発キット リファレンス プラットフォーム ポーティング ガイドでは、SDK のカスタム プラットフォーム ツールキットを使用して Cyclone V SoC 開発キット用のカスタム プラットフォームを実装する方法については説明していません。 Cyclone V SoC 開発キットの SDK サポートと OpenCL カスタム・プラットフォーム用の一般的なインテル FPGA SDK の違いのみを説明します。
関連リンク
- Intel FPGA SDK for OpenCL Cyclone V SoC 入門ガイド
- インテル FPGA SDK for OpenCL カスタム・プラットフォーム・ツールキットのユーザーガイド
- Cyclone V デバイス・ハンドブック、第 3 巻: ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル
- アルテラの Cyclone V SoC Development Kit および SoC Embedded Design Suite ページ webサイト
- OpenCL および OpenCL ロゴは、Khronos Group™ の許可を得て使用される Apple Inc. の商標です。
- インテル FPGA SDK for OpenCL は、公開されている Khronos 仕様に基づいており、Khronos コンフォーマンス テスト プロセスに合格しています。 現在の適合状況は、次の場所にあります。 www.khronos.org/conformance.
インテルコーポレーション。 全著作権所有。 Intel、Intel ロゴ、Altera、Arria、Cyclone、Enpirion、MAX、Nios、Quartus、および Stratix の単語とロゴは、米国およびその他の国における Intel Corporation またはその子会社の商標です。 インテルは、インテルの標準保証に従って、FPGA および半導体製品の性能を現在の仕様に合わせて保証しますが、予告なしにいつでも製品およびサービスを変更する権利を留保します。 インテルは、インテルが書面で明示的に同意した場合を除き、ここに記載されている情報、製品、またはサービスの適用または使用から生じる一切の責任を負わないものとします。 インテルのお客様は、公開されている情報を信頼したり、製品やサービスを注文したりする前に、最新バージョンのデバイス仕様を入手することをお勧めします。
*その他の名称およびブランドは、一般に各社の所有物である場合があります。
1.1.1 Cyclone V SoC 開発キット リファレンス プラットフォーム ボードのバリアント
インテル FPGA SDK for OpenCL Cyclone V SoC 開発キット リファレンス プラットフォームには、XNUMX つのボード バリアントが含まれています。
- c5socボード
このデフォルト ボードは、XNUMX つの DDR メモリ バンクへのアクセスを提供します。 HPS DDR は、FPGA と CPU の両方からアクセスできます。 FPGA DDR は FPGA からのみアクセスできます。 - c5soc_sharedonly ボード
このボード バリアントには、HPS DDR 接続のみが含まれます。 FPGA DDR にアクセスできません。 このボード バリアントは、5 つの DDR メモリ バンクをサポートするために必要なハードウェアが少ないため、面積効率が高くなります。 cXNUMXsoc_sharedonly ボードは、単一の DDR メモリ バンクを備えた最終製品ボードのプロトタイプ作成プラットフォームとしても適しています。
OpenCL カーネルをコンパイルするときにこのボード バリアントをターゲットにするには、aoc コマンドに -board c5soc_sharedonly オプションを含めます。
ボードの詳細については、 aoc コマンドのオプションについては、Intel FPGA SDK for OpenCL Programming Guide を参照してください。
関連リンク
特定の FPGA ボード (–board )
1.1.2 Cyclone V SoC 開発キット リファレンス プラットフォームの内容
Cyclone V SoC 開発キット リファレンス プラットフォームは、以下で構成されています。 filesおよびディレクトリ:
File またはディレクトリ | 説明 |
ボード環境.xml | 拡張マークアップ言語 (XML) file c5soc を Intel FPGA SDK for OpenCL に記述します。 |
linux_sd_card_image.tgz | 圧縮された SD フラッシュ カード イメージ file これには、SDK ユーザーが SDK で Cyclone V SoC 開発キットを使用するために必要なすべてが含まれています。 |
アーム32 | 以下を含むディレクトリー: |
1.1.3 Cyclone V SoC 開発キットの関連機能
以下のリストは、インテル FPGA SDK for OpenCL に関連する Cyclone V SoC 開発キットのコンポーネントと機能を強調しています。
- 9 ビット Linux を実行するデュアルコア ARM Cortex-A32 CPU。
- HPS と FPGA コア ファブリック間の Advanced eXtensible Interface (AXI) バス。
- それぞれが 1 ギガバイト (GB) の DDR3 SDRAM に接続する XNUMX つのハード化された DDR メモリ コントローラー。
— XNUMX つの DDR コントローラーは、FPGA コアのみ (つまり、FPGA DDR) にアクセスできます。
— もう一方の DDR コントローラーは、HPS と FPGA (つまり、HPS DDR) の両方にアクセスできます。 この共有コントローラにより、CPU と FPGA コアの間で自由にメモリを共有できます。 - CPU は FPGA コア ファブリックを再構成できます。
1.1.3.1 Cyclone V SoC 開発キット リファレンス プラットフォームの設計目標と決定 インテルは、Cyclone V SoC 開発キット リファレンス プラットフォームの実装をいくつかの設計目標と決定に基づいています。 インテルは、このリファレンス・プラットフォームを SoC FPGA ボードに移植する際に、これらの目標と決定を考慮することをお勧めします。
以下は、c5soc の設計目標です。
- FPGA 上のカーネルと DDR メモリ システムの間で可能な限り高い帯域幅を提供します。
- FPGA (つまり、OpenCL カーネル) での計算が、周辺機器のサービスを含む可能性のある他の CPU タスクに干渉しないようにします。
- インターフェイス コンポーネントではなく、カーネル計算用にできるだけ多くの FPGA リソースを残します。
以下は、インテルの設計目標の直接的な結果である高レベルの設計上の決定事項です。
- リファレンス プラットフォームは、可能な限り広い構成 (256 ビット) のハード DDR メモリ コントローラーのみを使用します。
- FPGA は、HPS 内部の AXI バスや L3 スイッチを介さずに、HPS DDR メモリ コントローラーと直接通信します。 直接通信は、可能な限り最高の帯域幅を DDR に提供し、FPGA の計算が CPU とその周辺機器間の通信に干渉しないようにします。
- スキャッター ギャザー ダイレクト メモリ アクセス (SG-DMA) は、FPGA インターフェイス ロジックの一部ではありません。 DDR メモリ システム間で大量のデータを転送する代わりに、データを共有 HPS DDR に格納します。 FPGA による CPU メモリへの直接アクセスは、DMA よりも効率的です。 ハードウェア リソース (つまり、FPGA 領域) を節約し、Linux カーネル ドライバーを簡素化します。
警告: 共有 HPS DDR システムと、FPGA のみがアクセスできる DDR システムとの間のメモリ転送は非常に低速です。 あなたがすることを選択した場合
この方法でメモリを転送する場合は、非常に少量のデータのみに使用してください。 - ホストとデバイスは、2 つの 32 ビット ポートのみを使用して、HPS-to-FPGA (H32F) ブリッジを介して相互に非 DMA データ転送を実行します。 その理由は、DMA がない場合、Linux カーネルは単一の XNUMX ビットの読み取りまたは書き込み要求しか発行できないため、より広い接続を持つ必要がないからです。
- ホストは、軽量の H2F (LH2F) ブリッジを介してデバイスに制御信号を送信します。
ホストからデバイスへの制御信号は低帯域幅信号であるため、LH2F ブリッジはこのタスクに最適です。
1.2 SoC FPGA ボードへのリファレンス プラットフォームの移植
Cyclone V SoC 開発キット リファレンス プラットフォームを SoC FPGA ボードに移植するには、以下のタスクを実行します。
- 設計の開始点として、c5soc リファレンス プラットフォームの XNUMX つの DDR メモリまたは XNUMX つの DDR メモリ バージョンを選択します。
- ALTERAOCLSDKROOT/board/c5soc/ のピン位置を更新します。 /top.qsf fileここで、ALTERAOCLSDKROOT は Intel FPGA SDK for OpenCL インストールの場所へのパスです。 ボード バリアントのディレクトリ名です。 c5soc_sharedonly ディレクトリは、5 つの DDR メモリ システムを備えたボード バリアント用です。 cXNUMXsoc ディレクトリは、XNUMX つの DDR メモリ システムを搭載したボード バリアント用です。
- ALTERAOCLSDKROOT/board/c5soc/ の HPS および/または FPGA SDRAM ブロックの DDR 設定を更新します。 /system.qsys file.
4. すべての Intel FPGA SDK for OpenCL 優先ボード デザインは、保証されたタイミング クロージャを達成する必要があります。 そのため、デザインの配置はタイミング クリーンである必要があります。 c5soc ボード パーティション (acl_iface_partition.qxp) を SoC FPGA ボードに移植するには、次のタスクを実行します。
ボード パーティションの変更と保存の詳細な手順については、Quartus
Quartus Prime Standard Edition Handbook の Prime Incremental Compilation for Hierarchical and Team-Based Design の章。
a. ALTERAOCLSDKROOT/board/c5soc/c5soc ディレクトリから acl_iface_partition.qxp を削除します。
b. Tcl コマンド set_global_assignment -name LL_ENABLED OFF -section_id acl_iface_region を set_global_assignment -name LL_ENABLED ON -section_id acl_iface_region に変更して、acl_iface_region LogicLock™ 領域を有効にします。
c. ボード用の OpenCL カーネルをコンパイルします。
d. 必要に応じて、LogicLock 領域のサイズと位置を調整します。
e. デザインの配置がタイミング クリーンであることに満足したら、そのパーティションを acl_iface_partition.qxp Quartus Prime Exported Partition としてエクスポートします。 File.
AIntel FPGA SDK for OpenCL Custom Platform Toolkit User Guide のEstablishing Guaranteed Timing Flowセクションで説明されているように、この.qxpをインポートして file 最上位デザインに追加することで、タイミング クロージャ フローが保証されたボード デザインを提供するという要件を満たすことができます。
エクスポートされたパーティションの結果の品質 (QoR) に影響を与える可能性のある要因については、インテル FPGA SDK for OpenCL カスタム・プラットフォーム・ツールキット・ユーザーガイドのエクスポートされたボード・パーティションに関する一般的な結果の品質に関する考慮事項セクションを参照してください。
f. ステップ 2 のコマンドを set_global_assignment -name LL_ENABLED OFF section_id acl_iface_region に戻して、acl_iface_region LogicLock 領域を無効にします。 - SoC FPGA ボードが HPS ブロックの異なるピンとペリフェラルを使用している場合は、プリローダーとデバイス ツリー ソース (DTS) を再生成します。 file. HPS DDR メモリー・コントローラーの設定を変更した場合は、プリローダーを再生成してください。
- SD フラッシュ カード イメージを作成します。
- SD フラッシュ カード イメージを含むカスタム プラットフォームを作成します。
- インテル FPGA ランタイム環境 (RTE) for OpenCL で使用するカスタム・プラットフォームのランタイム環境バージョンを作成することを検討してください。 カスタム プラットフォームの RTE バージョンには、ハードウェア ディレクトリと SD フラッシュ カード イメージが含まれていません。 このカスタム プラットフォームを SoC FPGA システムにロードして、ホスト アプリケーションを実行できるようにします。 対照的に、カスタム プラットフォームの SDK バージョンは、SDK が OpenCL カーネルをコンパイルするために必要です。
ヒント: RTE 用のカスタム プラットフォームの SDK バージョンを使用できます。 保存する
カスタム プラットフォームの RTE バージョンから SD フラッシュ カード イメージを削除します。 - カスタム プラットフォームをテストします。
詳細については、Intel FPGA SDK for OpenCL Custom Platform Toolkit User Guide の Testing the Hardware Design セクションを参照してください。
関連リンク
- ハードウェア設計のテスト
- 階層およびチーム・ベースのデザインのための Quartus Prime インクリメンタル・コンパイル
- 保証されたタイミング フローの確立
- エクスポートされたボード パーティションの一般的な結果の品質に関する考慮事項
1.2.1 移植された参照プラットフォームの更新
Cyclone V SoC 開発キット リファレンス プラットフォームの現在のバージョンでは、HPS ブロックはすべての非カーネル ロジックを定義するパーティション内にあります。 ただし、HPS を .qxp の一部としてエクスポートすることはできません。 file. 以前のバージョンの c5soc から変更した既存のカスタム プラットフォームを更新するには、QXP 保存フローを実装し、SD フラッシュ カード イメージを更新して最新のランタイム環境を取得し、board_spec.xml を更新します。 file 自動移行を有効にします。
Altera® SDK for OpenCL バージョン 14.1 以降は、 ボード仕様.xml file ボード情報、および自動更新を実装します。 を変更するため、
QXP 保存フローを実装して設計する場合、board_spec.xml を更新する必要があります。 file 現在のバージョンの形式に。 の更新 file SDK が保存されていないカスタム プラットフォームと現在の QXP ベースのカスタム プラットフォームを区別できるようにします。 詳細は、インテル FPGA SDK for OpenCL カスタム・プラットフォーム・ツールキット・ユーザーガイドの前方互換性のためのカスタム・プラットフォーム自動移行を参照してください。
- 以前のバージョンの c5soc から移植された Cyclone V SoC FPGA ハードウェア デザインに QXP 保存フローを実装するには、以下の手順を実行してサブパーティションを作成し、HPS を .qxp から除外します。 file:
を。 非カーネル ロジックの周りにパーティションを作成する前に、.qsf Quartus Prime 設定で HPS の周りにパーティションを作成します。 File.
例えばamp上:
# HPS 専用 I/O をモデル化するインスタンスを手動で分割するsystem_acl_iface_hps_18261_hps_io_border:border」-section_id「system_acl_iface_hps_0_hps_io_border:border」
# パーティションを HPS_PARTITION タイプに設定して、残りの Quartus によって正しく処理されるようにします
set_global_assignment -name PARTITION_TYPE HPS_PARTITION -section_id “system_acl_iface_hps_0_hps_io_border:border”
quartus_cdb トップ -c トップ
–incremental_compilation_export=acl_iface_partition.qxp
–incremental_compilation_export_partition_name=acl_iface_partition
–incremental_compilation_export_post_synth=オン
–incremental_compilation_export_post_fit=on
–incremental_compilation_export_routing=オン
–incremental_compilation_export_flatten=オフ
HPS をパーティションから除外した後、.qxp をインポートできます。 file 設計をコンパイルします。 - 以下のタスクを実行して、インテル FPGA RTE for OpenCL の現在のバージョンで SD フラッシュ・カード・イメージを更新します。
を。 マウント file 割り当てテーブル (fat32) および拡張 file システム (ext3) パーティションをループバック デバイスとして既存のイメージに追加します。 詳細な手順については、SD フラッシュ カード イメージの構築の手順 2 を参照してください。
b. /home/root/opencl_arm32_rte ディレクトリで、 fileRTE の以前のバージョンから。
c. RTE の現在のバージョンを /home/root/opencl_arm32_rte ディレクトリにダウンロードして解凍します。
d. の中に/driver/version.h file カスタム プラットフォームの ACL_DRIVER_VERSION 割り当てを次のように更新します。 . (例えばampファイル、16.1.x (16.1 は SDK のバージョン、x は設定したドライバーのバージョン)。
e. ドライバーを再構築します。
f. カスタム プラットフォームのハードウェア フォルダーを削除します。 カスタム プラットフォームを、更新されたドライバーと共に /home/root/opencl_arm_rte/board ディレクトリにコピーします。
g. Altera.icd をコピーします。 file /home/root/opencl_arm32_rte ディレクトリから、/etc/OpenCL/vendors ディレクトリに追加します。
h. 新しいイメージをアンマウントしてテストします。 詳細な手順については、SD フラッシュ カード イメージのビルドの手順 8 ~ 11 を参照してください。
関連リンク
- SD フラッシュ カード イメージの作成 (14 ページ)
新しい SD フラッシュ カード イメージを作成するオプションもあります。 - 上位互換性のためのカスタム プラットフォーム自動移行
1.3 共有メモリのソフトウェア サポート
FPGA と CPU 間の共有物理メモリは、SoC FPGA で実行される OpenCL カーネルに適したメモリです。 FPGA は、共有仮想メモリではなく共有物理メモリにアクセスするため、ユーザーの仮想アドレスを物理ページ アドレスにマップする CPU のページ テーブルにはアクセスできません。
ハードウェアに関しては、OpenCL カーネルは、HPS DDR ハード メモリ コントローラーへの直接接続を介して共有物理メモリにアクセスします。 ソフトウェアに関しては、共有物理メモリのサポートには次の考慮事項が含まれます。
- CPU にメモリを割り当てるための典型的なソフトウェア実装 (例:ampファイル、malloc() 関数) は、FPGA が使用するメモリ領域を割り当てることができません。
malloc() 関数が割り当てるメモリは、仮想メモリ アドレス空間で連続していますが、基礎となる物理ページが物理的に連続している可能性はほとんどありません。 そのため、ホストは物理的に連続したメモリ領域を割り当てることができなければなりません。 ただし、この機能は Linux のユーザー空間アプリケーションには存在しません。 したがって、Linux カーネル ドライバーが割り当てを実行する必要があります。 - OpenCL SoC FPGA Linux カーネル ドライバーには、共有物理メモリを割り当ててユーザー空間にマップするための mmap() 関数が含まれています。 mmap() 関数は、標準の Linux カーネル呼び出し dma_alloc_coherent() を使用して、デバイスと共有する物理的に連続したメモリ領域を要求します。
- デフォルトの Linux カーネルでは、dma_alloc_coherent() はサイズが 0.5 メガバイト (MB) を超える物理的に連続したメモリを割り当てません。 dma_alloc_coherent() が大量の物理的に連続したメモリを割り当てられるようにするには、Linux カーネルの連続メモリ アロケータ (CMA) 機能を有効にしてから、Linux カーネルを再コンパイルします。
Cyclone V SoC 開発キット リファレンス プラットフォームの場合、CMA は 512 GB の物理メモリのうち 1 MB を管理します。 アプリケーションが必要とする共有メモリの量に応じて、この値を増減できます。 dma_alloc_coherent() 呼び出しは、512 MB の物理的に連続したメモリを完全に割り当てることができない場合があります。 ただし、通常は約 450 MB のメモリを取得できます。 - CPU は、dma_alloc_coherent() 呼び出しが割り当てるメモリをキャッシュできます。 特に、ホスト アプリケーションからの書き込み操作は、OpenCL カーネルからは見えません。 OpenCL SoC FPGA Linux カーネル ドライバーの mmap() 関数には、このメモリ領域のキャッシュを明示的に無効にする pgprot_noncached() または remap_pf_range() 関数の呼び出しも含まれています。
- dma_alloc_coherent() 関数が物理的に連続したメモリを割り当てた後、mmap() 関数は、割り当てたメモリのアドレス スパンである範囲の先頭に仮想アドレスを返します。 ホスト アプリケーションは、メモリにアクセスするためにこの仮想アドレスを必要とします。 一方、OpenCL カーネルには物理アドレスが必要です。 Linux カーネル ドライバーは、仮想アドレスから物理アドレスへのマッピングを追跡します。 ドライバーにクエリを追加することで、mmap() が返す物理アドレスを実際の物理アドレスにマップできます。
aocl_mmd_shared_mem_alloc() MMD アプリケーション プログラミング インターフェイス (API) 呼び出しには、次のクエリが組み込まれています。
を。 メモリを割り当てて仮想アドレスを返す mmap() 関数。
b. 返された仮想アドレスを物理アドレスにマップする追加のクエリ。
aocl_mmd_shared_mem_alloc() MMD API 呼び出しは、XNUMX つのアドレスを返します。
—実際に返されるアドレスは仮想アドレスであり、物理アドレスは device_ptr_out になります。
注記: ドライバーは、mmap() 関数が返す仮想アドレスのみを物理アドレスにマップできます。 他の仮想ポインターの物理アドレスを要求すると、ドライバーは NULL 値を返します。
警告: インテル FPGA SDK for OpenCL ランタイム・ライブラリーは、共有メモリーが board_spec.xml にリストされている最初のメモリーであると想定しています。 file. つまり、Linux カーネル・ドライバーが取得する物理アドレスは、OpenCL カーネルが HPS SDRAM に渡す Avalon® アドレスになります。
ランタイム ライブラリに関しては、次の方法で clCreateBuffer() 呼び出しを使用して共有メモリをデバイス バッファとして割り当てます。
- 共有メモリと非共有メモリの両方を備えた XNUMX DDR ボード バリアントでは、CL_MEM_USE_HOST_PTR フラグを指定すると、clCreateBuffer() が共有メモリを割り当てます。 他のフラグを使用すると、clCreateBuffer() は非共有メモリにバッファを割り当てます。
- 共有メモリのみを持つ XNUMX DDR ボード バリアントの場合、指定したフラグに関係なく、clCreateBuffer() は共有メモリを割り当てます。
現在、ARM CPU での 32 ビット Linux サポートは、SDK ランタイム ライブラリでの共有メモリ サポートの範囲を管理しています。 つまり、他の環境にコンパイルされたランタイム ライブラリ (例:ampファイル、x86_64 Linux または 64 ビット Windows) は、共有メモリをサポートしていません。
C5soc は、次の理由により、共有メモリと非共有メモリを区別する異種メモリを実装しませんでした。
1. 歴史 - 共有メモリ サポートが最初に作成されたとき、異機種間メモリ サポートは利用できませんでした。
2. 統一されたインターフェイス — OpenCL はオープン スタンダードであるため、インテルは異種コンピューティング プラットフォーム ベンダー間の一貫性を維持しています。 したがって、共有メモリの割り当てと使用には、他のボード ベンダーのアーキテクチャと同じインターフェイスが使用されます。
1.4 FPGA の再構成
SoC FPGA の場合、CPU は CPU の動作を中断することなく FPGA コア ファブリックを再構成できます。 HPS とコア FPGA にまたがる FPGA Manager ハードウェア ブロックが再構成を実行します。 Linux カーネルには、FPGA Manager に簡単にアクセスできるドライバーが含まれています。
- に view FPGA コアのステータスを確認するには、cat /sys/class/fpga/fpga0/ status コマンドを呼び出します。
Cyclone V SoC 開発キット リファレンス プラットフォームで利用可能な Intel FPGA SDK for OpenCL プログラム ユーティリティは、このインターフェイスを使用して FPGA をプログラムします。 実行中の CPU で FPGA コアを再プログラムする場合、プログラム ユーティリティは次のすべてのタスクを実行します。
1. 再プログラミングの前に、FPGA と HPS の間のすべての通信ブリッジ (H2F ブリッジと LH2F ブリッジの両方) を無効にします。
再プログラミングが完了したら、これらのブリッジを再度有効にします。
注意: OpenCL システムは、FPGA-to-HPS (F2H) ブリッジを使用しません。 詳細については、Cyclone V Device Handbook, Volume 3: Hard Processor System Technical Reference Manual の HPS-FPGA Interfaces セクションを参照してください。
2. 再プログラミング中は、FPGA と HPS DDR コントローラー間のリンクが無効になっていることを確認します。
3. 再プログラミング中に FPGA の FPGA 割り込みが無効になっていることを確認します。
また、再プログラミング中に FPGA からの割り込みを拒否するようにドライバーに通知します。
実際の実装の詳細については、プログラム ユーティリティのソース コードを参照してください。
警告: CPU の実行中は、HPS DDR コントローラーの構成を変更しないでください。
これを行うと、CPU からの未処理のメモリ トランザクションがあるときに DDR コントローラの構成を変更する可能性があるため、致命的なシステム エラーが発生する可能性があります。 つまり、CPU の実行中は、別の構成で HPS DDR を使用するイメージで FPGA コアを再プログラムすることはできません。
OpenCL システムと、Intel SoC FPGA Embedded Design Suite (EDS) で利用可能なゴールデン ハードウェア リファレンス デザインは、HPS DDR をシングル 256 ビット モードに設定することに注意してください。
分岐プレディクタやページ テーブル プリフェッチャーなどの CPU システム パーツは、CPU で何も実行されていないように見える場合でも、DDR コマンドを発行する場合があります。
したがって、ブート時は HPS DDR コントローラー構成を設定するための唯一の安全な時間です。
これは、U-Boot に未加工のバイナリが必要であることも意味します。 file (.rbf) イメージをメモリにロードします。 そうしないと、FPGA の未使用ポートで HPS DDR を有効にしてから、後でポート構成を変更する可能性があります。 このため、OpenCL Linux カーネル ドライバーには、HPS DDR コントローラー構成を設定するために必要なロジックが含まれなくなりました。
Cylone V SoC 開発キットの SW3 デュアル インライン パッケージ (DIP) スイッチは、期待される形式の .rbf イメージを制御します (つまり、 file 圧縮および/または暗号化されています)。 C5soc、および SoC EDS で利用可能なゴールデン ハードウェア リファレンス デザインには、圧縮されているが暗号化されていない .rbf イメージが含まれています。 Intel FPGA SDK for OpenCL Cyclone V SoC Getting Started Guide で説明されている SW3 DIP スイッチ設定は、この .rbf イメージ構成と一致します。
関連リンク
- HPS-FPGA インターフェイス
- SW3 スイッチの設定
1.4.1 FPGA システム アーキテクチャの詳細
Cyclone V SoC Development Kit Reference Platform のサポートは、Intel FPGA SDK for OpenCL で利用可能な Stratix® V Reference Platform (s5_ref) に基づいています。
c5soc Qsys システムとカーネル ドライバーの全体的な構成は、s5_ref のものと非常によく似ています。
次の FPGA コア コンポーネントは、c5soc と s5_ref の両方で同じです。
- VERSION_ID ブロック
- レスト機構
- メモリーバンクディバイダー
- キャッシュ スヌープ インターフェイス
- カーネルクロック
- 制御レジスタ アクセス (CRA) ブロック
1.5 SD フラッシュ カード イメージのビルド
Cyclone V SoC FPGA は完全なシステム オン チップであるため、システムの完全な定義を提供する責任があります。 インテルでは、SD フラッシュ カード イメージの形式で配布することをお勧めします。 インテル FPGA SDK for OpenCL のユーザーは、イメージをマイクロ SD フラッシュ カードに書き込むだけで、SoC FPGA ボードをすぐに使用できます。
13 ページの既存の SD フラッシュ カード イメージの変更
インテルは、Cyclone V SoC 開発キット リファレンス プラットフォームで利用可能なイメージを単純に変更することをお勧めします。 新しい SD フラッシュ カード イメージを作成するオプションもあります。
SD フラッシュ カード イメージの作成 (14 ページ)
新しい SD フラッシュ カード イメージを作成するオプションもあります。
1.5.1 既存の SD フラッシュ カード イメージの変更
インテルは、Cyclone V SoC で利用可能なイメージを単純に変更することをお勧めします
開発キット リファレンス プラットフォーム。 新しい SD フラッシュ カード イメージを作成するオプションもあります。
c5soc linux_sd_card_image.tgz イメージ file ALTERAOCLSDKROOT/board/c5soc ディレクトリーで使用できます。ALTERAOCLSDKROOT は、インテル FPGA SDK for OpenCL のインストール・ディレクトリーのパスを指します。
注意: SD フラッシュ カード イメージを変更するには、root または sudo 権限が必要です。
- $ALTERAOCLSDKROOT/board/c5soc/linux_sd_card_image.tgz を解凍するには filetar xvfzlinux_sd_card_image.tgz コマンドを実行します。
- hello_world OpenCL ex をコンパイルするampカスタム プラットフォーム サポートを使用してファイルを設計します。 .rbf の名前を変更します file インテル FPGA SDK for OpenCL オフライン・コンパイラーが opencl.rbf として生成し、SD フラッシュ・カード・イメージ内の fat32 パーティションに配置します。
hello_world ex をダウンロードできますampOpenCL Design Ex からのファイル デザインampアルテラのファイルページ webサイト。 - .rbf を配置する file フラッシュ カード イメージの fat32 パーティションにコピーします。
注意: fat32 パーティションには、両方の zImage が含まれている必要があります file と.rbf file. .rbf なし fileドライバを挿入すると致命的なエラーが発生します。 - SD カード イメージを作成したら、次のコマンドを呼び出してマイクロ SD カードに書き込みます: sudo dd if=/path/to/sdcard/image.bin of=/dev/sdcard
- SD フラッシュ カード イメージをテストするには、次のタスクを実行します。
を。 マイクロ SD フラッシュ カードを SoC FPGA ボードに挿入します。
b. ボードの電源を入れます。
c. aocl 診断ユーティリティ コマンドを呼び出します。
1.5.2 SD フラッシュ カード イメージの作成
新しい SD フラッシュ カード イメージを作成するオプションもあります。 新しい SD フラッシュ カード イメージの構築および既存の SD フラッシュ カード イメージの再構築に関する一般的な手順については、RocketBoards.org の GSRD v14.0.2 – SD カード ページを参照してください。 webサイト。
以下の手順では、Golden System Reference Design (GSRD) SD フラッシュ カード イメージから linux_sd_card_image.tgz イメージを作成する手順について説明します。
注記:
c5soc イメージからイメージを作成するには、この手順で概説されている該当するすべてのタスクを実行します。
- Rocketboards.org から GSRD SD フラッシュ カード イメージ バージョン 14.0 をダウンロードして解凍します。
- マウント file 割り当てテーブル (fat32) および拡張 file このイメージのシステム (ext3) パーティションをループバック デバイスとして使用します。 パーティションをマウントするには、次の手順を実行します。
を。 /sbin/fdisk -lu image_ を呼び出して、イメージ内のパーティションの開始バイトを特定します。file 指示。
例えばampファイル、タイプ W1 FAT のパーティション番号 95 のブロック オフセットは 2121728 です。ブロックあたり 512 バイトの場合、バイト オフセットは 512 バイト x 2121728 = 1086324736 バイトです。
b. 空いているループ デバイスを特定します (例:ample, /dev/loop0) を、losetup -f コマンドを入力して作成します。
c. /dev/loop0 が空きループ デバイスであると仮定すると、losetup /dev/loop0 image_ を呼び出して、フラッシュ カード イメージをループ ブロック デバイスに割り当てます。file -0 1086324736 コマンド。
d. mount /dev/loop0 /media/disk1 コマンドを呼び出して、ループ デバイスをマウントします。
画像内 file、/media/disk1 はマウントされた fat32 パーティションになりました。
e. ext3 パーティションについて、手順 a ~ d を繰り返します。 - Cyclone V SoC FPGA バージョンの Intel FPGA Runtime Environment for OpenCL パッケージをアルテラのダウンロード・センターからダウンロードします。 webサイト。
を。 Quartus Prime ソフトウェア・エディションの横にある Download ボタンをクリックします。
b. リリース バージョン、オペレーティング システム、およびダウンロード方法を指定します。
c. [Additional Software] タブをクリックし、インテル FPGA のダウンロードを選択します。
OpenCL Linux Cyclone V SoC TGZ のランタイム環境。
d. aocl-rte- をダウンロードしたら、 .arm32.tgz fileに解凍します。
あなたが所有するディレクトリ。 - 解凍した aocl-rte- を配置します。 イメージの ext32 パーティションの /home/root/opencl_arm32_rte ディレクトリに .arm3 ディレクトリ file.
- カスタム プラットフォームのハードウェア フォルダーを削除し、カスタム プラットフォームを /home/root/opencl_arm32_rte のボード サブディレクトリに配置します。
- init_opencl.sh を作成します。 file 次の内容の /home/root ディレクトリに: export ALTERAOCLSDKROOT=/home/root/opencl_arm32_rte export AOCL_BOARD_PACKAGE_ROOT=$ALTERAOCLSDKROOT/board/ export PATH=$ALTERAOCLSDKROOT/bin:$PATH export LD_LIBRARY_PATH=$ALTERAOCLSDKROOT/host/arm32/lib:$LD_LIBRARY_PATH insmod $AOCL_BOARD_PACKAGE_ROOT/driver/aclsoc_drv.ko
SDK ユーザーは source ./init_opencl.sh コマンドを実行して、環境変数と OpenCL Linux カーネル ドライバーを読み込みます。 - プリローダーを更新する必要がある場合は、DTS files、または Linux カーネルの場合、SoC EDS の arm-linux-gnueabihf-gcc コンパイラが必要です。 インテル SoC FPGA エンベデッド・デザイン・スイートのユーザーガイドに記載されている手順に従って、ソフトウェアを取得し、再コンパイルして、関連するソフトウェアを更新します。 files をマウントされた fat32 パーティションに配置します。
注意: カスタム プラットフォームのピンの使用方法が c5soc のものと異なる場合は、プリローダーを更新する必要がある可能性が高くなります。
注意: Linux カーネルを再コンパイルする場合は、同じ Linux カーネル ソースを使用して Linux カーネル ドライバーを再コンパイルします。 file秒。 Linux カーネル ドライバーと Linux カーネルの間に不一致がある場合、ドライバーは読み込まれません。 また、CMA を有効にする必要があります。
詳細については、Linux カーネルの再コンパイルを参照してください。 - hello_world OpenCL ex をコンパイルするampカスタム プラットフォーム サポートを使用してファイルを設計します。 .rbf の名前を変更します file インテル FPGA SDK for OpenCL オフライン・コンパイラーが opencl.rbf として生成し、SD フラッシュ・カード・イメージ内の fat32 パーティションに配置します。
hello_world ex をダウンロードできますampOpenCL Design Ex からのファイル デザインampアルテラのファイルページ webサイト。
9. 必要なものをすべて保管したら、 file■ フラッシュ カード イメージに、次のコマンドを呼び出します。
a. 同期
b. /media/disk1 をアンマウントする
c. アンマウントどこは、3 ページの 3 で ext3 パーティションをマウントするために使用するディレクトリ名です (例:ampファイル、/media/disk2)。
d. Loosetup -d /dev/loop0
e. Loosetup -d /dev/loop1 - 次のコマンドを呼び出して、SD フラッシュ カード イメージを圧縮します。tar cvfz .tgz linux_sd_card_image
- お届け.tgz file カスタム プラットフォームのルート ディレクトリ内。
- SD フラッシュ カード イメージをテストするには、次のタスクを実行します。
を。 結果の非圧縮イメージをマイクロ SD フラッシュ カードに書き込みます。
b. マイクロ SD フラッシュ カードを SoC FPGA ボードに挿入します。
c. ボードの電源を入れます。
d. aocl 診断ユーティリティ コマンドを呼び出します。
関連リンク
- インテル SoC FPGA エンベデッド・デザイン・スイートのユーザーガイド
- OpenCL 設計例ampアルテラのファイルページ webサイト
- Linux カーネルの再コンパイル (16 ページ)
CMA を有効にするには、最初に Linux カーネルを再コンパイルする必要があります。 - FPGA ボードのデバイス名のクエリ (診断)
1.6 Cyclone V SoC FPGA 用 Linux カーネルのコンパイル
Cyclone V SoC FPGA ボードで OpenCL アプリケーションを実行する前に、Linux カーネル ソースをコンパイルし、OpenCL Linux カーネル ドライバーをコンパイルしてインストールする必要があります。
- Linux カーネルの再コンパイル (16 ページ)
CMA を有効にするには、最初に Linux カーネルを再コンパイルする必要があります。 - 17 ページの「OpenCL Linux カーネル ドライバーのコンパイルとインストール」 コンパイル済みのカーネル ソースに対して OpenCL Linux カーネル ドライバーをコンパイルします。
1.6.1 Linux カーネルの再コンパイル
CMA を有効にするには、最初に Linux カーネルを再コンパイルする必要があります。
- RocketBoards.org のリソース ページにある GSRD v14.0 – Compiling Linux リンクをクリックします。 webLinux カーネル ソース コードのダウンロードと再構築の手順にアクセスするには、このサイトを参照してください。
™ インテル FPGA SDK for OpenCL で使用するには、socfpga-3.13-rel14.0 を. - 注: ビルド プロセスにより、arch/arm/configs/socfpga_defconfig が作成されます。 file。 これ file socfpga デフォルト構成の設定を指定します。
次の行を arch/arm/configs/socfpga_defconfig の一番下に追加します file.
CONFIG_MEMORY_ISOLATION=y
CONFIG_CMA=y
CONFIG_DMA_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_SIZE_MBYTES=512
CONFIG_CMA_SIZE_SEL_MBYTES=y
CONFIG_CMA_ALIGNMENT=8
CONFIG_CMA_AREAS=7
CONFIG_CMA_SIZE_MBYTES 構成値は、使用可能な物理的に連続したメモリの合計数の上限を設定します。 より多くのメモリが必要な場合は、この値を増やすことができます。 - 注意: SoC FPGA ボード上の ARM プロセッサが使用できる物理メモリの合計量は 1 GB です。 インテルは、CMA マネージャーを 1 GB 近くに設定することをお勧めしません。
- make mrproper コマンドを実行して、現在の構成を消去します。
- make ARCH=arm socfpga_deconfig コマンドを実行します。
ARCH=arm は、ARM アーキテクチャを構成することを示します。
socfpga_defconfig は、デフォルトの socfpga 構成を使用することを示します。 - export CROSS_COMPILE=arm-linux-gnueabihf- コマンドを実行します。
このコマンドは、CROSS_COMPILE 環境変数を設定して、目的のツール チェーンのプレフィックスを指定します。 - make ARCH=arm zImage コマンドを実行します。 結果のイメージは arch/arm/boot/zImage で利用できます file.
- zImage を配置する file フラッシュ カード イメージの fat32 パーティションにコピーします。 詳細な手順については、Rocketboards.org の Cyclone V SoC FPGA 固有の GSRD ユーザー マニュアルを参照してください。
- 注: OpenCL Linux カーネル ドライバーを正しく挿入するには、最初に SDKgenerated.rbf をロードします。 file FPGAに。
.rbf を作成するには file、SDK デザイン ex をコンパイルしますampCyclone V SoC 開発キット リファレンス プラットフォームをターゲット カスタム プラットフォームとしてファイルに追加します。
9. .rbf を配置する file フラッシュ カード イメージの fat32 パーティションにコピーします。
注意: fat32 パーティションには、両方の zImage が含まれている必要があります。 file と.rbf file. .rbf なし fileドライバを挿入すると致命的なエラーが発生します。 - 以前に変更または作成した SD カード イメージを含むプログラム済みマイクロ SD カードを Cyclone V SoC 開発キットに挿入し、SoC FPGA ボードの電源を入れます。
- uname -r コマンドを実行して、インストールされている Linux カーネルのバージョンを確認します。
- カーネルで CMA が正常に有効になったことを確認するには、SoC FPGA ボードの電源を入れた状態で、grep init_cma /proc/kallsyms コマンドを実行します。
出力が空でない場合、CMA は有効になります。 - SDK で再コンパイルされた Linux カーネルを使用するには、Linux カーネル ドライバーをコンパイルしてインストールします。
関連リンク
- ゴールデン システム リファレンス デザイン (GSRD) ユーザー マニュアル
- SD フラッシュ カード イメージのビルド (13 ページ)
Cyclone V SoC FPGA は完全なシステム オン チップであるため、システムの完全な定義を提供する責任があります。
1.6.2 OpenCL Linux カーネル ドライバーのコンパイルとインストール
コンパイルされたカーネル ソースに対して OpenCL Linux カーネル ドライバーをコンパイルします。
ドライバーソースは、Cyclone V SoC FPGA バージョンのインテル FPGA ランタイム環境 for OpenCL で利用できます。 さらに、インテル FPGA SDK for OpenCL で生成された .rbf がロードされていることを確認してください。 file を FPGA に挿入して、Linux カーネル モジュールの誤ったインストールを防ぎます。
- Cyclone V SoC FPGA バージョンの Intel FPGA Runtime Environment for OpenCL パッケージをアルテラのダウンロード・センターからダウンロードします。 webサイト。
を。 Quartus Prime ソフトウェア・エディションの横にある Download ボタンをクリックします。
b. リリース バージョン、オペレーティング システム、およびダウンロード方法を指定します。
c. [Additional Software] タブをクリックし、インテル FPGA のダウンロードを選択します。
OpenCL Linux Cyclone V SoC TGZ のランタイム環境。
d. aocl-rte- をダウンロードしたら、 .arm32.tgz fileに解凍します。
あなたが所有するディレクトリ。
ドライバのソースは aocl-rte- .arm32/board/c5soc/ ドライバー ディレクトリ。 - OpenCL Linux カーネル ドライバーを再コンパイルするには、ドライバーの Make で KDIR 値を設定します。file Linuxカーネルソースを含むディレクトリへ files.
- export CROSS_COMPILE=arm-linux-gnueabihf- コマンドを実行して、ツール チェーンのプレフィックスを指定します。
- make clean コマンドを実行します。
- make コマンドを実行して、aclsoc_drv.ko を作成します。 file.
- opencl_arm32_rte ディレクトリを Cyclone V SoC FPGA ボードに転送します。
scp -r の実行root@your-ipaddress: コマンドは、ランタイム環境を /home/root ディレクトリに配置します。 - SD カード イメージをビルドしたときに作成した init_opencl.sh スクリプトを実行します。
- aocl 診断ユーティリティ コマンドを呼び出します。 init_opencl.sh を正常に実行すると、診断ユーティリティは合格の結果を返します。
1.7 既知の問題
現在、インテル FPGA SDK for OpenCL を Cyclone V SoC 開発キット・リファレンス・プラットフォームで使用する場合、特定の制限があります。
- clGetDeviceInfo() 呼び出しの CL_DEVICE_VENDOR および CL_DEVICE_NAME 文字列によって報告されたベンダー名とボード名を上書きすることはできません。
- ホストが共有 DDR システム (つまり、HPS DDR) に定数メモリを割り当て、カーネルの実行後に定数メモリを変更すると、メモリ内のデータが古くなる可能性があります。 この問題は、FPGA コアが CPU から HPS DDR トランザクションをスヌープできないために発生します。
以降のカーネル実行が古いデータにアクセスするのを防ぐには、次の回避策のいずれかを実装します。
• 初期化後に定数メモリを変更しないでください。
• 複数の __constant データ セットが必要な場合は、複数の定数メモリ バッファーを作成します。
• 可能な場合は、アクセラレータ ボードの FPGA DDR に定数メモリを割り当てます。 - ARM の SDK ユーティリティは、プログラムおよび診断ユーティリティ コマンドのみをサポートします。
flash、install、および uninstall ユーティリティー・コマンドは、以下の理由により、Cyclone V SoC 開発キットには適用されません。
を。 インストール ユーティリティは、aclsoc_drv Linux カーネル ドライバーをコンパイルし、SoC FPGA で有効にする必要があります。 開発マシンはコンパイルを実行する必要があります。 ただし、SoC FPGA 用の Linux カーネル ソースが既に含まれています。 開発マシンの Linux カーネル ソースは、SoC FPGA のものとは異なります。 SoC FPGA の Linux カーネル ソースの場所は、SDK ユーザーにはわからない可能性があります。 同様に、アンインストール ユーティリティも Cyclone V SoC 開発キットでは使用できません。
また、Cyclone V SoC 開発キットのデフォルト ディストリビューションには Linux カーネル インクルードが含まれていないため、aclsoc_drv を SoC ボードに配布するのは困難です。 files または GNU Compiler Collection (GCC) コンパイラ。
b. フラッシュ ユーティリティでは、.rbf ファイルを配置する必要があります file マイクロ SD フラッシュ カードの FAT32 パーティションに OpenCL デザインをコピーします。 現在、SDK ユーザーがボードの電源を入れたときに、このパーティションはマウントされません。 したがって、パーティションを更新する最善の方法は、フラッシュ カード リーダーと開発マシンを使用することです。 - インテル FPGA SDK for OpenCL Offline Compiler 実行ファイルを切り替える場合 file異なるボード バリアント (つまり、c5soc および c5soc_sharedonly) に対応する s (.aocx) の場合、SDK のプログラム ユーティリティを使用して .aocx をロードする必要があります。 file 初めての新しいボードバリアント。 新しいボード バリアントを使用してホスト アプリケーションを実行するだけで、FPGA に別のボード バリアントのイメージが含まれている場合、致命的なエラーが発生する可能性があります。
- .qxp file Quartus Prime ソフトウェアは一貫してこのパーティションのタイミング要件を満たしているため、インターフェイス パーティションの割り当ては含まれません。
- ボードの電源を入れると、メディア アクセス制御 (MAC) アドレスが乱数に設定されます。 LAN ポリシーでこの動作が許可されていない場合は、次のタスクを実行して MAC アドレスを設定します。
を。 U-Boot の電源投入中に任意のキーを押して、U-Boot コマンド プロンプトに入ります。
b. コマンド プロンプトで setenv ethaddr 00:07:ed:00:00:03 と入力します。
任意の MAC アドレスを選択できます。
c. saveenv コマンドを入力します。
d. ボードを再起動します。
1.8ドキュメントの改訂履歴
表1.
インテル FPGA SDK for OpenCL Cyclone V SoC の文書改訂履歴
開発キット リファレンス プラットフォーム ポーティング ガイド
日付 | バージョン | 変更点 |
17年XNUMX月 | 2017.05.08 | •メンテナンスリリース。 |
2016 年 XNUMX 月 | 2016.10.31 | • Altera SDK for OpenCL を Intel FPGA SDK for OpenCL にリブランド。 • Altera Offline Compiler を Intel FPGA SDK for OpenCL Offline Compiler にリブランド。 |
16年XNUMX月 | 2016.05.02 | • SD フラッシュ カード イメージの構築と変更に関する手順を修正。 • Linux カーネルと OpenCL Linux カーネル ドライバーの再コンパイルに関する手順を変更。 |
11月-15 | 2015.11.02 | • メンテナンス リリース、および Quartus II のインスタンスを Quartus Prime に変更。 |
15年XNUMX月 | 15.0.0 | •FPGAリコンフィギュレーションで、FPGAコアを再プログラムする命令を削除 とともに 。 猫の呼び出しによるrbf画像 file名前>. rbf > /dev/ fpga0 コマンドは、この方法は推奨されないためです。 |
14年XNUMX月 | 14.1.0 | • ドキュメントの名前を Altera Cyclone V SoC Development Kit Reference Platform Porting Guide に変更。 •再プログラム ユーティリティを aocl プログラムに更新しました。filename>.aocx ユーティリティ コマンド。 •診断ユーティリティを aocl 診断および aocl 診断に更新しました。 ユーティリティ コマンド。 •「リファレンス プラットフォームを SoC ボードに移植する」セクションの手順を更新して、c5soc ボード パーティションを移植および変更して、保証されたタイミング クロージャ フロー用のタイミング クリーン パーティションを作成する手順を追加しました。 •次のタスクの手順を概説するために、移植された参照プラットフォームの更新のトピックを挿入しました。 1. ボード パーティション内のハード プロセッサ システム (HPS) ブロックを除く 2.SDフラッシュカードイメージのアップデート •「SD フラッシュ カード イメージのビルド」セクションを更新しました。 SoC Embedded Design Suite (EDS) で利用可能なイメージではなく、Golden System Reference Design (GSRD) イメージのバージョン 14.0 を開始点として使用することをお勧めします。 •「Linux カーネルと OpenCL Linux カーネル ドライバーの再コンパイル」セクションを更新しました。 1.CROSS COMPILE変数を設定する命令を追加。 2.CMA が正常に有効化されていることを確認するために実行するコマンドを変更しました。 |
14月XNUMX日 | 14.0.0 | •初回リリース。 |
ドキュメント / リソース
![]() |
Intel FPGA SDK for OpenCL [pdf] ユーザーガイド FPGA SDK for OpenCL、FPGA SDK、SDK for OpenCL、SDK |