HLS优化调试技巧

  1. 确定优化方向,分析数据流和数据间的dependency,综合考虑resource and throughput, 基本确定能达到的优化目标;

  2. 根据HLS synth report, 分析整体的latency以及其具体组成,然后从对latency影响最大的模块开始着手优化;

  3. 对于csim和cosim结果不一致的情况,一般原因均是因为变量、数组没有初始化引起的,因为未初始化的变量csim时会初始化为0,而cosim不会。有时候我们未对变量进行初始化,而且根据设计流程也应该是先写后读,但实际执行过程却不是这样,所以要特别注意;另一个可能出现结果不一致的情况就是操作数组时出现边界溢出的情况,所以要特别注意。

  4. 对于csim pass,cosim hang的问题,如果设计采用了dataflow,就要看stream的empty、full会不会导致某一级stream不能正常工作,如果不是dataflow,那么很可能还是上面提到的问题。

  5. 对CModel optimization,最重要的就是要有硬件工程师的思维。下面介绍的是一些优化技巧:

    1. Optimize loop

      1. 减少循环层次;

      2. 合并同层循环;

    2. 对于先读后写(顺序、次数不固定)同一BRAM地址,可以采用双份资源解除depenency;

    3. 对于不同时使用的数组存储资源,可以分时复用;

    4. pragma inline,可以尽可能的复用DSP资源,但会影响timing,需综合考虑,在复用情况下,以mul为例,mul的使用量是在同一时钟下使用最多mul,即为实际mul的使用个数;

    5. 代码设计时,一定不能忽略BRAM未完全初始化以及数组索引溢出未知取值的问题,都可能导致cosim error;

    6. 对于二维及以上数组,设计时应先考虑是否能降维储存,考虑每一个维度的数据实时计算代替储存;

    7. 储存资源和latency的互相,尤其对于底层循环,在不大量增加储存资源的前提下,可以通过储存读取替代实时计算来减少latency;

    8. 对于pragma的使用,由于不同HLS工具版本是具有一定区别的,不同版本的优化综合策略是有一定区别的,所以即使工具能自动生成了期望的II、resource,最好也应该加上合理的pragma。

  6. 更多请参考[HLS开发宝典](https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug902-vivado-high-level-synthesis.pdf)。

发布了10 篇原创文章 · 获赞 0 · 访问量 6265

猜你喜欢

转载自blog.csdn.net/u010379248/article/details/101988933
HLS
今日推荐