循环中的数据依赖关系可能影响循环流水打拍或循环展开的结果。这些循环依赖关系可能存在于任一循环的单次迭代中,或者存在于任一循环的不同迭代之间。了解循环依赖关系的直接方法是检验极端示例。在以下代码示例中,循环结果用作为循环持续条件或循环退出条件。循环的每次迭代必须完成后才能开始下一次迭代。
Minim_Loop: while (a != b) {
if (a > b)
a -= b;
else
b -= a;
}
此循环无法流水打拍。前一次迭代结束后,下一次循环迭代才能开始。
处理与 Vitis 编译器之间的各种类型的依赖关系是一个牵涉很广的话题,需要详细了解编译器底层的高层次综合过程。如需了解更多信息,请参阅 Vitis 高层次综合用户指南(UG1399)。