重要: 鉴于库依赖关系是专为 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
为 8、16、32 或 64,在 stdint.h 中定义) -
float
和double
精确宽度整数类型可用于确保设计在各种类型的系统之间的可移植性。
C/C++ 语言标准规定 (unsigned)long
类型在 64 位操作系统上作为 64 位来实现。综合可根据运行 Vitis HLS 的操作系统类型来匹配此行为并生成不同大小的运算符,从而生成不同 RTL 设计。在 Windows 操作系统上,Microsoft 将 long 类型定义为 32 位,与操作系统无关。
- 针对 32 位,使用
(unsigned)int
或(unsigned)int32_t
数据类型代替(unsigned)long
类型。 - 针对 64 位,使用
(unsigned)long long
或(unsigned)int64_t
数据类型代替(unsigned)long
类型。
AMD 强烈建议在单一公用头文件中定义所有变量的数据类型,该头文件可包含在所有源文件中。
- 在一般 Vitis HLS 工程中,可对部分数据类型进行调优,例如,用于减小其大小和支持更高效的硬件实现。
- 提高工作的抽象层次的主要作用之一在于能够快速创建新设计实现。通常在后续工程中使用的文件是相同的,但可能使用的数据类型不同(更小、更大或更准确)。
在单一位置更改数据类型更便于完成这 2 项任务:替代方法是对多个文件进行编辑。
重要: 在头文件中使用宏时,请始终使用专有名称。例如,如果头文件中定义了 1 个名为
_TYPES_H
的宏,由于此名称较为常见,在其他系统文件中可能也会定义相同名称,它可能会启用或禁用某些其他代码,从而导致不可预见的意外结果。提示:
std::complex<long double>
数据类型在 Vitis HLS 中不受支持,不应使用。