数据类型
下图给出了C和C++的数据类型,同样也指出了在HLS中不支持的数据类型。
为什么要进行任意精度处理
在C语言的数据类型下,比特都是给定的8,16,32,64。而不同于FPGA内部可以实现任意位宽的一个调配。所以在这个标准的下,FPGA内部的资源可能会造成浪费。
在下图的PPT中,高亚军老师也给出了一个18*18的乘法器的例子,输入的端口为18比特仅仅比16多了2个比特,就浪费地使用了32位的资源这不是我们FPGA所期望的。
所以在HLS中我们就使用工具对精度进行了任意分配,以实现最大效率的利用资源。
任意精度数据类型
图中给出了常用的任意精度数据类型的表示方式,当然在使用时要进行头文件的包含。
使用任意精度的数据类型的对比
同样以前面的乘法器为例子对比结果如图,实现的结果中我们可以看出,任意精度的数据类型有更高的时钟频率,也就是我们的设计可以跑到更高的时钟。更快的数据吞吐,以及使用了更少的资源。
小技巧:在头文件中定义数据类型
- 让我们的设计可以更高效的进行修改,方便debug
- 同时在图中可以看到HLS的人性化设计,在Outline中对我们定义并使用到的数据类型进行了高亮显示,方便我们进行设计。
使用sizeof()函数
总结