インテル® HLS コンパイラー: ユーザーガイド

ID 683456
日付 12/22/2017
Public
ドキュメント目次

A. インテル® HLS コンパイラーの制限事項

HLSコンパイラーを使用して IP を作成する場合は、現在のソフトウェアおよびプログラミングのセットの制限事項に注意する必要があります。

コンパイラー・サポート

Linux コンパイラー・サポート
HLS コンパイラーは GCC 4.7.0 以降をサポートしていません。コンパイラーには GCC コンパイラーおよび C++ ライブラリーのバージョン 4.4.7 が必要です。
Windows コンパイラー・サポート
Windows 向けHLSコンパイラーは Microsoft Visual Studio 2010 のみと互換性があります。

C++ 言語の制限

C++ でソースコードをプログラムします。可能であれば、合成を目的とするコード ( つまり、コンポーネント関数内のコード ) での OpenCLでサポートされている C99 サブセットでプログラムします。

  • コンポーネントは仮想関数、関数ポインター、およびビットフィールドを含むことはできません。
  • コンポーネントの一部である関数スコープ静的変数は、関数の引数で初期化できません。
C++11 の制限
  • HLSコンパイラーはイニシャライザー・リストやラムダ関数などの特定の C++11 機能をサポートしていません。
メンバーシップ・クラス
  • HLS コンポーネントは C++ クラスメンバーまたは宣言されたネームスペースであってはいけません。コンポーネントをこのように使用する場合は、実際に実装をコールするクラスまたはネームスペースの一部ではないコンポーネントを作成し、そのコンポーネントをコールします。
例外処理
  • コンポーネントに例外処理を含めることはできません。
Library コール
  • HLSコンパイラーは、現在、テストベンチ・コードからのコールを含めて、Windows で C++ ランタイム・ライブラリーを呼び出しません。
Library 関数
  • コンポーネントは、 インテル® HLS コンパイラーで提供されるヘッダーファイルで明示的にサポートされている場合を除き、標準の C または C++ ライブラリー関数を含めることができません。

    printf()またはcoutコールを含むコンポーネントは x86 実装で動作します。しかしながら、 インテル® HLS コンパイラーで提供されるHLS/stdio.hライブラリーやHLS/iostream 標準 C ライブラリー関数を含む場合、生成された RTL にはiostreamまたはcout関数コールを含んでいません。通常のstdio.hまたはiostreamヘッダーで RTL を生成しようとすると、コンパイラーのエラーが発生する安納正があります。

複数のインターフェイス
  • HLSコンパイラーはパラメーターとして使用されている複数のインターフェイスを持つクラスをサポートしていません。各クラスが最大で 1 つのクラスを直接継承している限り、クラスをパラメーターとして使用することができます。
ネームスペース
  • HLS コンポーネントは C++ クラスメンバーまたは宣言されたネームスペースであってはいけません。コンポーネントをこのように使用する場合は、実際に実装をコールするクラスまたはネームスペースの一部ではないコンポーネントを作成し、そのコンポーネントをコールします。
オーバーロード / テンプレート
  • コンポーネントは、テンプレート化された関数またはオーバーロードされた関数にすることはできません。このようにコンポーネントを使用する必要がある場合は、テンプレート関数またはオーバーロードされた関数の一部ではないコンポーネントを作成し、そのコンポーネントを呼び出します。
パラメーター
  • HLS コンパイラーは、複数の継承がパラメーターとして使用されているクラスをサポートしていません。各クラスが最大で 1 つのクラスを直接継承している限り、クラスをパラメーターとして使用できます。
再帰
  • HLS コンパイラーは、再帰を使用するコンポーネントの合成をサポートしていません。ただし、末尾再帰がサポートされています。

    コンポーネントに再帰を使用するアルゴリズムがあり、それが FPGA アクセラレーションで識別されている場合、可能であれば、末尾再帰を使用するようにアルゴリズムを変更します。