C++ 任意精度定点类型:参考信息 - 2023.2 简体中文

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文
重要: 任意精度定点类型要求代码中包含 ap_fixed.h 头文件。

本章节包含有关使用 ap_(u)fixed<N> 任意精度定点数据类型的方法、综合行为和各方面的全面信息。

  • 用于将常量和初始化值赋值给任意精度整数(包括大于 1024 位的值)的方法。
  • 上溢和饱和模式的详细描述。
  • 描述 Vitis HLS 帮助程序方法,包括打印、串联、位切片 (bit-slicing) 和范围选择函数。
  • 描述运算符行为,包括移位操作(即导致反向移位的负移位值)的描述。

Vitis HLS 支持定点类型,定点类型支持轻松处理小数运算。定点运算的优势如下示例所示。

ap_fixed<11, 6> Var1 = 22.96875; // 11-bit signed word, 5 fractional bits
ap_ufixed<12,11> Var2 = 512.5; // 12-bit word, 1 fractional bit
ap_fixed<16,11> Res1; // 16-bit signed word, 5 fractional bits

Res1 = Var1 + Var2; // Result is 535.46875

即使 Var1Var2 精度不同,但定点类型在执行运算前(此处为加法)仍可确保小数点正确对齐。您无需在 C 语言代码中执行任何操作来使小数点对齐。

用于存储任意定点运算结果的类型大小(包括整数位和小数位)必须足以存储完整结果。

否则,ap_fixed 类型会执行以下操作:

  • 使处理上溢(前提是结果所含 MSB 多于指定类型支持的数量)
  • 量化(或舍入,前提是结果所含 LSB 少于指定类型支持的数量)

ap_[u]fixed 类型可提供有关上溢和量化执行方式的多种不同选项。这些选项如下所述。