インテル® HLS コンパイラー: リファレンス・マニュアル

ID 683349
日付 6/23/2017
Public
ドキュメント目次

1.5. 標準 C および C++ ライブラリー

HLSコンパイラーは次のヘッダーファイルにより定義された特定の標準 C および C++ 関数の効果的な実装をサポートしています。

math.h

合成されるコンポーネントからmath.h関数にアクセスするには、ソースコードにHLS/math.hファイルをインルードします。コンパイラーは、コンポーネントがハードウェア・バージョンの数学関数を呼び出すようにします。

サポートされるmath.h関数について詳しくは、この資料の HLSコンパイラーでサポートされる標準数学関数の章を参照してください。

stdio.h

合成したコンポーネント関数は一般的に FILE ポインターといった C および C++ 標準ライブラリー関数をサポートしません。

コンポーネントはヘッダーファイルHLS/stdio.hをインクルードすることでprintfをコールできます。このヘッダーはコンパイルの対象に応じてprintfの動作を変更します。

  • x86-64 アーキテクチャー ( つまり、-march=x86-64) を対象とするコンパイルの場合、printfコールが通常通りに動作します。
  • FPGA アーキテクチャー ( つまり、-march="<FPGA_family_or_part_number>") を対象とするコンパイルの場合、コンパイラーはprintfコールを削除します。

初めにコードに#include "HLS/stdio.h"行を含めずに ハードウェアを FPGA アーキテクチャーにコンパイルすると、次に類似したエラーメッセージが表示されます。

$ i++ -march="<FPGA_family_or_part_number>" -I${<path to i++ installation>}/include --component dut test.cpp
Error: HLS gen_qsys FAILED.
See ./dut.prj/dut.log for details.

fopenprintfなどの C および C++ 標準ライブラリー関数は、すべての非コンポーネント関数で通常通りに使用できます。

iostream

合成したコンポーネント関数は一般的に C++ ストリーム・オブジェクト (coutなど ) のような C++ 標準ライブラリー関数をサポートしません。

コンポーネントはヘッダーファイルHLS/iostreamをインクルードすることでcoutまたはcerrをコールできます。このヘッダーはコンパイルの対象に応じてcoutcerrの動作を変更します。

  • x86-64 アーキテクチャー ( つまり、-march=x86-64) を対象とするコンパイルの場合、coutまたはcerrコールが通常通りに動作します。
  • FPGA アーキテクチャー ( つまり、-march="<FPGA_family_or_part_number>") を対象とするコンパイルの場合、コンパイラーはcoutまたはcerrコールを削除します。

初めにコードに#include "HLS/iostream"行を含めずにcoutまたはcerrをコンポーネント関数で使用すると、ハードウェアを FPGA アーキテクチャーにコンパイルすると、次に類似したエラーメッセージが表示されます。

$ i++ -march="<FPGA_family_or_part_number>" run.cpp run.cpp:5: 
Compiler Error: Cannot synthesize std::cout used inside of a component.
HLS Main Optimizer FAILED.
重要: ヘッダーファイルHLS/iostreamをインクルードすると、coutおよびcerrへの書き込みのみに影響を与えます。他の標準入出力ストリーム・オブジェクトを使用すると、コンパイル時エラーが発生します。標準の入出力ストリーム・オブジェクトを使用するテストベンチ・コードのセクションが多い場合は、HLS/iostreamヘッダーファイルを使用しないでください。