VIVADO HLS循环语句的优化

参考文献

[1]、lauren的FPGA(微信公众号)
[2]、Xilinx暑期学校

项目描述

有软件基础的同学应该知道程序的两个衡量指标是时间复杂度与空间复杂度,与我们FPGA中的最大时钟频率与资源相对应。时间复杂度的体现形式是循环的结构,这也是主要时间消耗的地方。那么,对于使用VIVADO HLS工具进行进一步的编译,程序的时间延迟也会主要体现在循环语句中。所以,我们只要使用HLS对软件的循环语句添加一定的约束,便很可能取到我们要求的指标。这篇博客主要介绍各种循环语句的优化,进而减少FPGA侧的资源与始终延迟。

循环的主要优化措施有Pipeline、Unrolling。

for循环的衡量指标

衡量一个for循环的指标有:
1、Loop Iteration Latency :C函数中的for循环每迭代一次需要多少时钟周期。
2、Loop Iteration Interval(Loop II):本次循环开始到下一次循环开始所需要的周期数。
3、Loop Latency :完成整个循环需要多少个时钟周期。
4、Loop Trip Count : for循环的循环迭代的次数。
举一个例子如下:
在这里插入图片描述
在这里插入图片描述

对for循环设置Pipeline操作

还是以上面的例子添加了Pipeline的约束,如下:
在这里插入图片描述
1、添加Pipeline约束的方法。
2、添加Pipeline约束进行性能优化之后的性能指标。
3、为什么添加Pipeline可以减少for循环的指标。

对for循环设置Unrolling操作

在默认的情况下for循环是被折叠的,可以理解for循环每次迭代都使用了同一套电路,所谓展开就是电路被复制了n份。
举例如下:
在这里插入图片描述
由上图可知,for循环的迭代被复制了三份,消耗的资源量如下:
在这里插入图片描述
1、Unroll的设置方法。
2、消耗的资源量。

for循环的合并

对于两个完全并列的for循环约束方法——合并for循环

举一个例子如下:
在这里插入图片描述
for循环综合后的结果是:
在这里插入图片描述 在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值