set_directive_unroll - 2023.2 简体中文

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

描述

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

循环的迭代执行次数由循环归纳变量来指定。迭代次数也可能受到循环主体内的逻辑影响(例如,对任意循环出口变量进行中断或修改)。在 RTL 中,循环按表示循环主体的逻辑块来实现,此类逻辑块会执行相同次数的迭代。

set_directive_unroll 命令支持将循环完全展开。展开循环会在 RTL 中创建循环主体副本,副本数量与循环迭代次数相同,或者也可按因数 N 部分展开,从而创建循环主体的 N 份副本并对循环迭代次数进行相应的调整。

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

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

语法

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

选项

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

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

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

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

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

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

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

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

示例

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

set_directive_unroll foo/L1

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

set_directive_unroll -skip_exit_check -factor 4 foo/L2