set_directive_loop_merge - 2021.2 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

描述

将所有循环合并到单一循环中。合并循环:

  • 减少 RTL 中循环主体实现间转换所需时钟周期数。
  • 允许并行实现循环(如果可能)。

循环合并规则为:

  • 如果循环边界为变量,则值(迭代数)必须相同。
  • 如果循环边界为常量,那么最大常量值用作为合并循环的边界。
  • 具有变量边界和常量边界的循环无法合并。
  • 要合并的循环之间的代码不得产生不同结果。多次执行此代码应生成相同结果。
    • 允许 a=b
    • 不允许 a=a+1
  • 包含 FIFO 读取的循环无法合并。合并会更改读取顺序。从 FIFO 或 FIFO 接口执行读取必须始终按顺序进行。

语法

set_directive_loop_merge <location>
  • <location> 是循环所在位置(格式为 function[/label])。

选项

-force
即使 Vitis HLS 发出警告仍强制合并循环。您必须确保合并后的循环功能正常。

示例

将函数 foo 中的所有连续循环都合并到单一循环中。

set_directive_loop_merge foo

函数 fooloop_2 内的所有循环(不包含 loop_2 本身)均通过使用 -force 选项来合并。

set_directive_loop_merge -force foo/loop_2