任意精度定点数据类型 - 2022.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

某些现有应用使用浮点数据类型,因为这些应用是专为其它硬件架构而编写的。但定点数据类型非常适合替代需要多个时钟周期才能完成的浮点类型。在考量为应用和加速器选择实现浮点运算还是定点运算时,请谨慎评估两者在功耗、成本、效率和精度方面的利弊。

由浮点转为定点助力降低功耗与成本(WP491) 中所述,对应用使用定点运算替代浮点运算可以提升能效,并降低所需的总功耗。除非需要浮点类型的完整范围,否则通常使用定点类型即可实现相同精度,并且硬件更小也更快。

定点数据类型将数据作为整数位和小数位形式进行建模。定点数据类型需要 ap_fixed 报头,并且支持有符号格式和无符号格式,如下所示:

报头文件
ap_fixed.h
有符号定点
ap_fixed<W,I,Q,O,N>
无符号定点
ap_ufixed<W,I,Q,O,N>
  • W = 总宽度 < 1024 位
  • I = 整数位宽度。I 的值必须小于或等于宽度 (W)。W 减去 I 即表示小数部分的位数。只能使用常量整数表达式来指定整数宽度。
  • Q = 量化模式。只能使用预定义的枚举值来指定 Q。可接受的值包括:
    • AP_RND:舍入到正无穷。
    • AP_RND_ZERO:舍入到 0。
    • AP_RND_MIN_INF:舍入到负无穷。
    • AP_RND_INF:舍入到无穷。
    • AP_RND_CONV:收敛(无偏)舍入。
    • AP_TRN:截位。不指定 Q 时,这是默认值。
    • AP_TRN_ZERO:截位到 0。
  • O = 上溢模式。只能使用预定义的枚举值来指定 O。可接受的值包括:
    • AP_SAT:饱和。
    • AP_SAT_ZERO:饱和到 0。
    • AP_SAT_SYM:对称饱和。
    • AP_WRAP:卷绕。不指定 O 时,这是默认值。
    • AP_WRAP_SM:符号量值卷绕。
  • N = 上溢卷绕 (WRAP) 模式中的饱和位数。只能使用常量整数表达式作为参数值。默认值为零 (0)。

在以下代码示例中,使用 ap_fixed 类型来定义有符号 18 位变量,其中 6 个位表示二进制小数点前的整数值,暗示 12 个位表示二进制小数点后的小数值。量化模式设为舍入到正无穷 (AP_RND)。由于未指定上溢模式和饱和位数,因此使用默认值 AP_WRAP 和 0。

#include <ap_fixed.h>
...
  ap_fixed<18,6,AP_RND> my_type;
...

执行计算时,如果其中所含变量具有不同位数 (W) 或不同精度 (I),那么二进制小数点将自动对齐。如需了解有关使用定点数据类型的更多信息,请参阅 Vitis HLS 用户指南(UG1399) 中的 C++ 任意精度定点类型