Vivado HLS 中DATAFLOW优化Bypass的一些问题
作者:互联网
最近在项目开发中使用到了DATAFLOW优化数据流,从而提高整个系统的运行效率。在设计程序时,发现虽然在官方的文档中明确指出Bypass的情况需要通过打节拍的方式处理掉,否则会出现错误,但在实际的程序设计中,Vivado HLS并没有将Bypass情况表示为错误,甚至没有警告。因此认为Vivado HLS可以通过自身对于代码的优化将Bypass优化掉。
通过代码综合也可以发现,HLS确实通过对代码的优化以及模块化,实现了DATAFLOW应有的Iteration Interval,有效的提高了系统的并行性。自以为大功告成之时,经过Cosim,却发现Iteration Interval 掉回了原来的程序总Latency。也就是说,仿真结果表明,实际系统并没有正确的完成DATAFLOW.
经过反复的验证和实践,发现问题所在:HLS确实会对Bypass进行优化,但一些情况可以正确有效,而一些则不行,而且HLS在Cosim仿真前是无法自行发现错误的。具体来说,对于单一变量的Bypass情况,HLS可以优化使其正常工作;而对于数组类型的变量则不行,尤其在程序比较复杂,Bypass的变量比较多的时候,要么Iteration Interval会非常长,将整个Bypass包含在一个Iteration Interval中来避免Bypass,要么就错误优化。不管哪种情况,都是我们不愿意看到的。
总结一下,Vivado HLS 对Bypass的确会进行优化,但这个优化过程是不可控的。所以,对于数组的Bypass,还是老老实实的手动处理掉吧
标签:DATAFLOW,Iteration,HLS,Vivado,Bypass,优化 来源: https://blog.csdn.net/qq_36569040/article/details/122647238