インテルのみ表示可能 — GUID: ewa1462826746626
Ixiasoft
1.5. 標準 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.
fopenやprintfなどの C および C++ 標準ライブラリー関数は、すべての非コンポーネント関数で通常通りに使用できます。
iostream
合成したコンポーネント関数は一般的に C++ ストリーム・オブジェクト (coutなど ) のような C++ 標準ライブラリー関数をサポートしません。
コンポーネントはヘッダーファイルHLS/iostreamをインクルードすることでcoutまたはcerrをコールできます。このヘッダーはコンパイルの対象に応じてcoutとcerrの動作を変更します。
- 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.