以下是综合数学函数时常见的用法错误。这些错误通常是由于将 C 语言函数转换为 C++ 以便利用数学函数综合所导致的,但这并非唯一原因。
C++ cmath.h
如果使用 C++ cmath.h
头文件,则可使用浮点函数,如 sinf
和 cosf
。这样可在硬件中生成 32 位运算。cmath.h
头文件还会导致标准函数(如 sin
和 cos
)重载,以使其可用于浮点类型和双精度类型。
C math.h
如果使用 C math.h
库,则需要单精度函数(如 sinf
和 cosf
)才能综合 32 位浮点运算。所有标准函数调用(如 sin
和 cos
)都会导致对双精度和 64 位双精度运算进行综合。
警告
将 C 语言函数转换为 C++ 以利用 math.h
支持时,请确保在使用 Vitis HLS 综合前正确编译新 C++ 代码。例如,如果在代码中配合 math.h
使用 sqrtf()
,则需将以下外部代码添加到 C++ 代码中以便为其提供支持:
#include <math.h>
extern “C” float sqrtf(float);
为避免因类型转换而导致产生不必要的硬件,请遵循“浮点与双精度”中所述的混合双精度与浮点类型进行操作。