syn.directive.loop_flatten - syn.directive.loop_flatten - 2025.2 简体中文 - UG1702

Vitis 参考指南 (UG1702)

Document ID
UG1702
Release Date
2025-11-20
Version
2025.2 简体中文

描述

将嵌套循环平铺为单一循环层级。

在 RTL 实现中,在循环层级内的循环之间移动需耗时 1 个时钟周期。将嵌套循环平铺即可允许将多个循环优化为单一循环。这样可节省时钟周期,从而进一步对循环主体逻辑进行优化。

完美循环嵌套
  • 仅限最内层循环才包含循环主体内容。
  • 在循环语句之间不指定任何逻辑。
  • 所有循环边界均为常量。
半完美循环嵌套
  • 仅限最内层循环才包含循环主体内容。
  • 在循环语句之间不指定任何逻辑。
  • 最外层的循环边界可采用变量。
非完美循环嵌套

当内层循环具有变量边界时,或者如果循环主体未完全包含在内层循环内,请执行以下操作。请尝试重构代码或者将循环主体中的循环展开以创建完美循环嵌套。

语法

syn.directive.loop_flatten=[OPTIONS] <location>
  • <location> 表示最内层循环的位置,格式为 function[/label]

选项

off
防止发生循环平铺。可防止对某些循环进行平铺,同时对指定位置的所有其他循环执行平铺。
重要: 存在 LOOP_FLATTEN 编译指示和指令即表示启用优化。添加 off 则表示禁用优化。

示例

foo 函数中的 loop_1 及循环层级中位于其上层的所有(完美或半完美)循环平铺为单一循环。

set_directive_loop_flatten=foo/loop_1

防止在 foo 函数的 loop_2 中进行循环平铺。

set_directive_loop_flatten=off foo/loop_2