syn.compile.pipeline_loops
配置命令支持根据迭代计数对循环进行自动流水打拍。循环次数大于指定限值的所有循环都会自动流水打拍。默认限值为 64。
给定以下示例代码:
loop1: for (i = 0; i < 5; i++) {
// do something 5 times ...
}
如果 syn.compile.pipeline_loops
命令设为 4,那么 for
循环 (loop1
) 会进行流水打拍。这等同于添加 PIPELINE 编译指示,如下代码片段所示:
loop1: for (i = 0; i < 5; i++) {
#pragma HLS PIPELINE II=1
// do something 5 times ...
}
但对于嵌套循环,该工具会从最内层循环开始,判定它是否能流水打拍,然后沿循环嵌套上移。在以下示例中,syn.compile.pipeline_loops
阈值仍为 4,最内层循环 (loop1
) 标记为等待流水打拍。随后,该工具会对该循环对的父循环 (loop2
) 进行求值,发现它仍能流水打拍。在此情况下,该工具会将 loop1
展开到 loop2
内,并将 loop2
标记为等待流水打拍。随后,它将上移至父循环 (loop3
) 并重复分析操作。
loop3: for (y = 0; y < 480; y++) {
loop2: for (x = 0; x < 640; x++) {
loop1: for (i = 0; i < 5; i++) {
// do something 5 times ...
}
}
}
如果设计中有部分无需使用自动流水打拍的循环,请对此类循环应用含 off
选项的 PIPELINE 指令。off
选项可阻止自动循环流水打拍。
重要: 该工具会在执行所有用户指定的指令后应用
syn.compile.pipeline_loops
命令。例如,如果向循环应用用户指定的 UNROLL 指令,那么会首先展开该循环,但无法应用自动循环流水打拍,因为此循环已被消除。