インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

12.1.3.1. インテル® FPGA SDK for OpenCL™ ライブラリー機能に対するRTLサポートの制約と制限

インテル® FPGA SDK for OpenCL™ は、OpenCLライブラリーにおけるRTLモジュールの使用を、いくつかの制約と制限をともないサポートしています。

RTLモジュールを作成する際は、次の制約内で動作させることを確認してください。

  • RTLモジュールは、単一入力のAvalon®-STインターフェイスを使用する必要があります。つまり、readyvalidロジックの単一ペアが、すべての入力を制御しなければなりません。

    必要なAvalon-STポートを提供し、RTLモジュールをストールのないモジュールとして宣言するオプションもあります。この場合、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーはモジュールに向けてラッパーを作成するため、適切なストール動作を実装する必要はありません。構文と使用法に関する詳細は、RTLモジュールのXML構文、およびシンプルな関数で動作するOpenCLライブラリーの使用 (例1) を参照ください。

    注: RTLモジュールが内部状態を持つ場合は、ivalid信号を適切に処理する必要があります。詳しくは、ストールのないRTLを参照ください。
  • RTLモジュールは、カーネルのクロック周波数にかかわらず正確に動作する必要があります。
  • データの入力および出力サイズは、charの8ビットからlong16の1024ビットまでの有効なOpenCLデータ型と一致する必要があります。

    例えばRTLモジュールで24ビットの値を使用する場合、入力が32ビットになるよう宣言し、SDKライブラリーのヘッダー・ファイルで関数シグニチャーを宣言しuintデータ型を受け取るようにします。その後、RTLモジュールで32ビットの入力を受け入れ、上位8ビットを破棄します。

  • RTLモジュールは、外部I/O信号に接続することができません。入出力信号はすべて、OpenCL カーネルから発行される必要があります。
  • RTLモジュールには、clockポート、resetnポート、Avalon-ST入力および出力ポート (ivalidovalidireadyoready) が必要です。ここで指定されている通りに名前を付けてください。
  • 外部メモリーと通信する RTLモジュールには、対応するカスタム・プラットフォーム・パラメーターに一致するAvalonメモリーマップド (Avalon-MM) ポートのパラメーターが必要です。オフライン・コンパイラーは、幅またはバーストの調整を行いません。
  • 外部メモリーと通信するRTLモジュールは、次のように動作する必要があります。
    • バースト境界を越えてバーストしないこと。
    • クロックサイクルごとに要求を行い、アービトレーション・ロジックを独占しハードウェアをストールさせないこと。RTLモジュールは定期的に要求を一時停止し、他のロードまたはストアユニットが動作を実行できるようにする必要があります。
  • RTLモジュールは、独立したOpenCLカーネルとして動作することはできません。RTLモジュールはヘルパー関数にしかなれず、カーネルのコンパイル時にOpenCLカーネルに統合されます。
  • RTLモジュールのインスタンス化に対応する関数呼び出しはすべて、他のインスタンス化から完全に独立しています。ハードウェアの共有はありません。
  • カーネルコード (kernelとしてマークされた関数) は、.aoclibライブラリー・ファイルに組み込まないでください。カーネルコードをライブラリー・ファイルに組み込むと、オフライン・コンパイラーはエラーメッセージを発行します。ヘルパー関数をライブラリー・ファイルに組み込むことは可能です。
  • RTLコンポーネントは、すべての入力を同時に受け取る必要があります。単一のivalid入力は、すべての入力が有効なデータを含んでいることを意味します。
  • SDKはI/O RTLモジュールをサポートしません。
  • RTLモジュールのパラメーターは、OpenCLカーネル・ソース・ファイルではなく、 <RTL module description file name>.xml仕様ファイルでのみ設定できます。同じRTLモジュールを複数のパラメーターで使用するには、個別のFUNCTIONタグを各パラメーターの組み合わせに作成します。

SDKのRTLモジュールのライブラリー機能に対するサポートには現在、次の制限があります。

  • RTLモジュールへのデータ入力は、OpenCLカーネルコードを介した値でのみ渡すことができます。参照渡し、構造体、またはチャネルを介しRTLモジュールにデータ入力を渡さないでください。チャネルデータの場合は、まずチャネルからデータを抽出し、抽出したスカラーデータを RTLモジュールに渡します。
    注: 参照渡しまたは構造体によってデータ入力をRTLモジュールに渡すと、オフライン・コンパイラーで致命的なエラーが発生します。
  • デバッガー (LinuxのGDB、など) は、エミュレーション中にライブラリー関数にステップインできません。さらに、最適化レポートおよびエリアレポートは、ライブラリー関数の横にコード行番号を含みません。
  • RTLモジュールのソースファイル名は、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラー IPファイル名と競合することはできません。RTLモジュールのソースファイルとオフライン・コンパイラーのIPファイルはどちらも、 <kernel file name>/system/synthesis/submodulesディレクトリーに格納されます。名前が競合すると、ディレクトリーにある既存のオフライン・コンパイラーIPファイルが、RTLモジュールのソースファイルに上書きされます。
  • SDK.qipファイルをサポートしません。ネスト化された.qipファイルを手動で解析し、RTLファイルのフラットリストを作成する必要があります。
  • 単独では正しく動作する一方で、OpenCLカーネルの一部としては正しく動作しない RTLモジュールをデバッグすることは非常に困難です。 <RTL module description file name>.xmlファイルのATTRIBUTES要素にあるパラメーターをすべて再度確認してください。
  • オフライン・コンパイラーのエリア見積りツールはすべて、RTLモジュールのエリアが0であると仮定しています。SDKは現在、RTLモジュールのエリアモデルを指定する機能をサポートしていません。
  • RTLモジュールは、カーネルクロックと同位相でありカーネルクロック周波数の2倍の、2xクロックにアクセスできません。