よくある合成エラー - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

次は数学関数を合成する際によく発生する使用エラーです。これらは数学関数の合成の利点を生かすために、C 関数を C++ 関数へ変換した場合によく発生します。

C++ の cmath.h

C++ の cmath.h ヘッダー ファイルが使用されると、浮動小数点関数 (sinf および cosf など) が使用できます。これらはハードウェアで 32 ビット演算になります。cmath.h ヘッダー ファイルは標準関数 (sincos など) もオーバーロードするので、float および double 型にも使用できます。

C の math.h

C の math.h ライブラリが使用される場合は、32 ビットの浮動小数点演算を合成するために、単精度関数 (sinfcosf など) が必要です。すべての標準関数呼び出し (sincos など) は合成されると倍精度および 64 ビットの倍精度演算になります。

注意

math.h サポートの利点を生かすために C 関数を C++ に変換する場合は、Vitis HLS で合成する前に新しい C++ コードが正しくコンパイルされるようにする必要があります。たとえば、sqrtf()math.h と一緒にコードで使用される場合は、それをサポートするために次のコードを C++ コードに追加する必要があります。


#include <math.h>
extern “C” float sqrtf(float);

「float および double 型」で説明したように、float および double 型の混合に関する警告メッセージに従って、型変換によって不必要なハードウェアが作成されないようにします。