HLS Learning P4 - Data Type - Arbitrary Precision
1. C-based Data Types
为了避免 C 语言中固定数据类型长度带来的资源浪费,提供了任意精度数据类型的描述。首先来看下传统的 C 语言所支持的数据类型,需要注意的是对于 Vivado HLS 而言 Char 类型是不支持的。
传统的 C 语言的数据类型,受限于冯若依曼架构设计以及编译器等,都是以 8 为单位。这样的数据宽度在 FPGA 硬件设计上是难以接受的,一是 FPGA 本身是支持任意宽度的,二是为了满足这样的位宽,很容易导致资源浪费。比如设计一个 18x18 的乘法器,在 综合时为了满足要求只能使用 32x32 的硬件资源来实现,导致直接浪费掉了 4 个 DSP48E1 在 7 系列 FPGA 上。
2. Arbitrary Precision Data Types
W 的取值范围可以是 1~1024,注意使用 ap_int 类型时要包括头文件。
HLS 也支持 System C 的任意精度类型,感兴趣参考下图中提示的文件
修改为任意精度的数据类型后可以使用更少的资源,获得更高的时钟频率以及更低的时延,并且 ap_int 支持基本所有的 C int 的运算。
将数据类型定义在头文件中方便后期 Debug
3. Sizeof()
4. Used in Microsoft VS
5. Summary
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.