描述
将所有循环合并到单一循环中。合并循环:
- 减少 RTL 中循环主体实现间转换所需时钟周期数。
- 允许并行实现循环(如果可能)。
循环合并规则为:
- 如果循环边界为变量,则值(迭代数)必须相同。
- 如果循环边界为常量,那么最大常量值用作为合并循环的边界。
- 具有变量边界和常量边界的循环无法合并。
- 要合并的循环之间的代码不得产生不同结果。多次执行此代码应生成相同结果。
- 允许
a=b
- 不允许
a=a+1
。
- 允许
- 包含 FIFO 读取的循环无法合并。合并会更改读取顺序。从 FIFO 或 FIFO 接口执行读取必须始终按顺序进行。
语法
syn.directive.loop_merge=[options] <location>
-
<location>
是循环所在位置(格式为function[/label]
)。
选项
-
force
- 即使 Vitis HLS 发出警告仍强制合并循环。您必须确保合并后的循环功能正常。
示例
将函数 foo
中的所有连续循环都合并到单一循环中。
syn.directive.loop_merge=foo
函数 foo
的 loop_2
内的所有循环(不包含 loop_2
本身)均通过使用 force
选项来合并。
syn.directive.loop_merge=force foo/loop_2