2

学fpga(hls之unroll的使用)

 2 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/124550092
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

学fpga(hls之unroll的使用)

费晓行 已于 2022-05-03 09:12:00 修改 74

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        hls里面除了提供了c、c++的编辑、综合功能之外,还提供了很多与之配套的功能,比如说testbench、co-sim、open wave viewer、compare report等等。这些都是分析fpga效果的利器。大家在学习hls的时候,要时刻记得是,我们编写的不是代码,其实是电路,和verilog一样的电路。言归正传,今天还是看一下hls里面unroll是怎么使用的。

1、简单多项式计算

        综合一下,看一下效果,

        进一步分析计算的流程,从图中可以看出来,tmp1和tmp_2是可以一起完成的,

2、强制顺序执行的多项式计算

        分析方法和1是一样的,只不过这个时候latency和interval都变成了3。

        进一步分析调度器视图,

3、加入循环的多项式计算

        和2相比较,输入数据变成了src数组和dst数组,长度为10。与此同时,通过综合报告,我们发现interval和latency也发生了变化,

        此外,可以再次确认下状态机效果,

4、 添加unroll之后的多项式计算

        4和3的区别其实就是添加了#pragma HLS UNROLL这个语句。可以看一下效果如何,

         从report可以看出,latency和interval大幅度降低到12,

        从状态图可以发现,整个循环其实被分解成了一个pipeline操作。似乎从图形上看,这也不是我们想要的结果。

5、去除interface定义后的unroll操作

         还是这一段代码,可以通过interface的定义,直接用unroll来进行处理。

        果不其然,latency的时间再次大幅度减小,可以打开状态图确认下,

6、当然latency和interval只是一方面,大家还可以自己编写testbench进行分析和计算,

        优化是一个循序渐进的操作,更多的时候是一个妥协。一方面,需要调高运算的速度;另外一方面需要降低使用的资源。这中间寻找平衡点是非常重要的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK