任意精度 (AP) 数据类型 - 2023.2 简体中文

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

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

基于 C/C++ 语言的原生数据类型都位于 8 位边界(8 位、16 位、32 位和 64 位)上。但是,RTL 总线(对应于硬件)支持任意数据长度。使用标准 C/C++ 语言数据类型可能导致硬件实现效率低下。例如,AMD 器件中的基本乘法单位是 DSP 库单元。32 位“ints”整数乘法需要多个 DSP 单元,而使用任意精度类型则可以每次乘法仅使用一个单元。 

任意精度 (AP) 数据类型允许您的代码使用位宽更小的变量,并且可供 C/C++ 语言仿真用于确认功能保持不变或者可接受。较小的位宽所生成的硬件运算符也更小且运行更快。这样即可允许在 FPGA 中布局更多逻辑,并允许以更高的时钟频率来执行逻辑。

AP 数据类型是专为 C++ 提供的,支持您对 1 位到 1024 位之间的任意位宽的数据类型进行建模。您必须将 AP 库包含在自己的 C++ 源代码中才能指定使用这些 AP 库,如 任意精度数据类型库 中所述。

提示: 任意精度类型通常仅在函数边界处才需要,因为 Vitis HLS 会最优化内部逻辑并移除不扇出到输出端口的数据位和逻辑。

AP 示例

例如,含用于通信协议的筛选函数的设计需要 10 位输入数据和 18 位输出数据以满足数据传输需求。使用标准 C/C++ 语言数据类型时,输入数据必须至少为 16 位,输出数据必须至少为 32 位。在最终硬件中,这会在输入和输出之间创建过宽的数据路径、使用过多的资源、延迟过长(例如,32 位乘 32 位的乘法耗时比 18 位乘 18 位的乘法更长),并且需要更多时钟周期才能完成。

在此设计中使用任意精度数据类型时,可以在综合前指定代码中所需的精确位数、对更新后的代码进行仿真,并在综合前验证结果。请参阅 GitHub 上的 Vitis-HLS-Introductory-Examples/Modeling,以获取有关使用任意精度和定点 AP 数据类型的示例。