常见综合错误 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

以下是综合数学函数时常见的用法错误。这些错误通常是由于将 C 语言函数转换为 C++ 以便利用数学函数综合所导致的,但这并非唯一原因。

C++ cmath.h

如果使用 C++ cmath.h 头文件,则可使用浮点函数,如 sinfcosf。这样可在硬件中生成 32 位运算。cmath.h 头文件还会导致标准函数(如 sincos)重载,以使其可用于浮点类型和双精度类型。

C math.h

如果使用 C math.h 库,则需要单精度函数(如 sinfcosf)才能综合 32 位浮点运算。所有标准函数调用(如 sincos)都会导致对双精度和 64 位双精度运算进行综合。

警告

将 C 语言函数转换为 C++ 以利用 math.h 支持时,请确保在使用 Vitis HLS 综合前正确编译新 C++ 代码。例如,如果在代码中配合 math.h 使用 sqrtf(),则需将以下外部代码添加到 C++ 代码中以便为其提供支持:


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

为避免因类型转换而导致产生不必要的硬件,请遵循“浮点与双精度”中所述的混合双精度与浮点类型进行操作。