重要: 64 ビット システム用にのみコンパイルされるライブラリの依存関係のため、Vitis HLS では 32 ビット ビルドがサポートされません。このため、
-m32
フラグは使用できず、エラーの原因となります。実行ファイルへコンパイルされる C/C++ 関数で使用されるデータ型は、結果の精度、メモリ要件、パフォーマンスに影響します。32 ビット整数の int 型には、さらに多くのデータを保持できるので、8 ビットの char 型よりも精度が高くなりますが、さらに多くのストレージが必要となります。同様に、C/C++ 関数が RTL インプリメンテーションに合成される場合も、データ型が RTL デザインの精度、エリア、パフォーマンスに影響します。変数に使用されるデータ型により、必要な演算子のサイズが決まるので、RTL のエリアおよびパフォーマンスも決まります。
Vitis HLS では、固定長整数型を含むすべての標準 C/C++ データ型の合成がサポートされます。
-
(unsigned) char
、(unsigned) short
、(unsigned) int
-
(unsigned) long
、(unsigned) long long
-
(unsigned) intN_t
(N
は stdint.h で定義される 8、16、32、および 64) -
float
、double
固定長整数型を使用すると、デザインをシステムのすべてのデータ型間で移植できます。
C/C++ 規格では、(unsigned)long
型が 64 ビット OS では 64 ビットでインプリメントされます。合成ではこの動作に合わせて、Vitis HLS が実行される OS タイプによって、異なるサイズの演算子が生成されるので、異なる RTL デザインが生成されます。Windows OS の場合、Microsoft 社により OS に関係なく long 型が 32 ビットに定義されます。
- 32 ビットの場合、
(unsigned)long
型の代わりに、((unsigned)int
または(unsigned)int32_t
を使用します。 - 64 ビットの場合、
(unsigned)long
型の代わりに、((unsigned)long long
または(unsigned)int64_t
を使用します。
AMDでは、すべての変数のデータ型を 1 つの共通のヘッダー ファイルで定義することをお勧めします。このファイルは、すべてのソース ファイルに含めることができます。
- 通常の Vitis HLS プロジェクト フロー中には、たとえばサイズを削減したり、ハードウェア インプリメンテーションをより効率的にできるようにするために、変更可能なデータ型があります。
- 抽象度の高いレベルで変更をしておく利点の 1 つは、新しいデザイン インプリメンテーションをすばやく作成できる点にあります。通常同じファイルが後のプロジェクトで使用されますが、別の (より小型、より大型、またはより正確な) データ型を使用することもできます。
これらのタスクはどちらも、データ型が 1 つの箇所で変更できる場合は、より簡単に達成できます。または、複数ファイルを編集します。
重要: ヘッダー ファイルでマクロを使用する場合は、常に独自の名前を使用してください。たとえば、
_TYPES_H
という名前のマクロがヘッダー ファイルで定義されている場合、よくある名前なのでほかのファイルで定義されている可能性があり、ほかのコードがイネーブルまたはディスエーブルになって、予期しない問題が発生することがあります。ヒント:
std::complex<long double>
型は Vitis HLS でサポートされないので、使用しないでください。