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,还是老老实实的手动处理掉吧

上一篇:你的安卓项目编译要花 10 分钟,如何缩短到 1 分钟?


下一篇:java – IntelliJ / Maven不会更新Artifactory中的工件