HLS优化总结


部分内容总结自

  • https://blog.csdn.net/weixin_41967965/article/details/82080230
  • http://www.openhw.org/module/forum/forum.php?mod=viewthread&tid=595819&highlight=HLS%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0

1 任意精度数据类型

在这里插入图片描述

ap_[u]fixed<int W, int I, ap_q_mode Q, ap_o_mode O, ap_sat_bits N>;

  • W代表整个数据的字长
  • I代表整数部分的字长,那么小数部分被的字长就是W-I
  • Q表示量化模式,针对低位部分,
  • O表示溢出模式,针对高位部分

比如说ap_fixed<3, 2, AP_RND, AP_SAT>
AP_RND 指示该值应舍入到最接近ap_ [u]定点类型的可表示值。
AP_SAT 表示取到剩余位数能表示的最大的值
AP_RND_ZERO 向零取整
AP_RND_MIN_INF 向负无穷取整

2 unroll&pipeline

  • 当一个函数或者循环被pipeline后,他嵌套的循环都会被unroll
  • 如果一个循环要被unroll,他必须有fixed的边界
  • pipeline的效果比unroll好
  • 一旦并行计算,DSP的数值会增加很多

下面的内容取自http://www.openhw.org/module/forum/forum.php?mod=viewthread&tid=595819&highlight=HLS%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0

2.1 循环平坦化

在这里插入图片描述
在这里插入图片描述

2.2 循环展开

单纯的流水线优化和循环展开相比,在提升性能的基础上流水线优化更能节省乘法器资源。

2.3 循环合并

遇到多个独立的循环时,在一定情况下,Vivado hls可以自动地合并循环。
在这里插入图片描述
在这里插入图片描述
这是因为函数可并行执行:

3 dataflow

神器,时序直接就达标了

  • 使用dataflow之后,memory buffer会自动加到函数之间,使得即使之前的计算还未结束,之后的计算就可以开始
  • memory buffer默认用ping-pong buffer实现,会增加BRAM的量
  • memory buffer还可以用FIFO实现,好处是size可以直接控制。FIFO不消耗BRAM_18K

4 数组

本文摘自http://www.openhw.org/module/forum/forum.php?mod=viewthread&tid=595929&highlight=HLS%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0

通常情况下,数组一般被综合为存储器结构,比如RAM、ROM或者FIFO等,而设计内部的中间数组变量会根据设置被综合成block RAM,LUTRAM或者register。

针对固定的数组,也就是数组一旦初始化后就不再改变,程序只是调用这个数组,而不会再对这个数组进行写入,这个时候HLS就会将数组综合成ROM。
很多时候,数组元素的读取会成为瓶颈。

4.1 array partition

数组分割就是将一个多维数多元素的数组“分割”成多个相对独立的模块,当设置将数组分割成多个模块(BLOCK)时,HLS综合成RTL RAM,当将数组分割成单独的元素,则每个元素都以寄存器形式存储,这样当我们将数组分割成单个元素的时候,在同一个时钟周期,就能将A[N]全部读取出来,但是会占很多的LUT
在这里插入图片描述

4.2 array reshape

据说是array partition的逆运算

5 inline

when inline directive is applied to a function, the lower level hierarchy is automatically dissolved.

6 interface

Add INTERFACE directive to create AXI4LiteS adapters so IP-XACT adapter can be generated during the RTL Export step

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值