在分解计算函数时,适用与顶层函数内的连接相同的规则。以建立前馈连接为目标,并为每个连接变量设置单个生产者和使用者。如果变量必须由多个函数使用,则应明确复制它。
将数据块从一个计算块移动到另一个计算块时,开发者可以选择使用阵列或 hls::stream
对象。
使用阵列所需代码更改更少,在分解过程中,这通常是取得进展的最快方法。但是,使用 hls::stream
对象可能会导致设计使用的存储器资源减少并缩短时延。它还有助于开发者了解数据如何在内核中移动,在最优化吞吐量时这始终是需要掌握的重要信息。
使用 hls::stream
对象通常很有用,但将阵列转换为串流的最佳时机由开发者决定。某些开发者会早早进行转换,某些开发者则在最后进行转换,将其作为最终的最优化步骤。此操作也可以使用
pragma HLS dataflow
来完成。
在此阶段,维护内核架构的图形表示对于推理数据相依性、数据移动、控制流和并发度非常有用。