syn.directive.unroll - 2025.2 简体中文 - UG1399

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

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

描述

通过创建循环主体的多个副本来变换循环。

循环感应变量用于指定循环执行的迭代次数。循环主体内的逻辑(例如,对任意循环出口变量进行中断或修改)也会影响迭代次数。代表循环主体的逻辑块会在 RTL 中实现此循环。该逻辑会执行相同次数的迭代。

syn.directive.unroll 命令允许将此循环部分或全部展开。完全展开循环会在 RTL 中创建循环主体副本,副本数量与其中的循环迭代次数相同。按因子 N 部分展开循环会创建 N 份循环主体副本并对循环迭代进行相应调整。

如果用于部分展开的因数 N 并非原始循环迭代计数的整数倍,那么在循环主体的每个展开片段后请检查原始退出条件。

要完全展开循环,在编译时循环边界必须已知。对于部分展开则无需满足此条件。

语法

syn.directive.unroll=[OPTIONS] <location>
  • <location> 表示要展开的循环位置(格式为 format function[/label])。

选项

factor=<integer>
指定非零整数,表示已请求部分展开。

循环主体会重复整数次。迭代信息会进行相应的调整。

skip_exit_check
仅当指定因数时才有效(部分展开)。
  • 固定边界

    如果迭代计数为因数的倍数,则不执行出口条件检查。

    如果迭代计数并非因数的整数倍,则该工具将执行以下操作:

    • 阻止展开。
    • 发出警告,称必须执行出口检查后才能继续。
  • 变量边界

    移除出口条件检查。您必须确保:

    • 变量边界为因数的整数倍。
    • 无需出口检查。
off=true
为指定循环禁用展开。

示例

展开 foo 函数内的 L1 循环。将编译指示置于 L1 循环的主体内。

syn.directive.unroll=foo/L1

foo 函数的 L2 循环上指定展开因数 4。移除出口检查。将编译指示置于 L2 循环的主体内。

syn.directive.unroll=skip_exit_check factor=4 foo/L2