描述
“循环次数”是指循环执行的迭代总数。Vitis HLS 可报告每个循环的总时延(执行循环的所有迭代所需周期数)。因此,此循环时延为循环次数(循环迭代次数)的函数。
重要: LOOP_TRIPCOUNT 编译指示或指令仅用于分析,不影响综合结果。
循环次数可为常量值。它取决于循环表达式(例如,x<y
)中使用的变量值或循环内使用的控制语句。
在某些情况下,Vitis HLS 无法判定循环次数。例如,如果用于判定循环次数的变量属于:
- 输入实参,或者
- 采用动态运算来计算的变量
在以下示例中,for 循环的最大迭代次数由输入 num_samples
的值来确定。在 C 语言函数中不定义 num_samples
的值,该值从外部进入函数。
void foo (num_samples, ...) {
int i;
...
loop_1: for(i=0;i< num_samples;i++) {
...
result = a + b;
}
}
如果循环时延未知或者无法计算,那么 set_directive_loop_tripcount
允许您指定循环迭代次数的最小、最大和平均值。这样该工具即可分析循环时延给报告中的设计总时延造成的影响,并帮助您为设计决定合适的最优化措施。
提示: 如果使用 C 语言断言宏来限制循环变量的大小,那么 Vitis HLS 可将其用于定义循环限制以供报告之用,并根据这些限制创建大小精确的硬件。
语法
set_directive_loop_tripcount [OPTIONS] <location>
-
<location>
表示循环中指定循环次数的位置(格式为function[/label]
)。
选项
-
-avg <integer>
- 指定平均迭代次数。
-
-max <integer>
- 指定最大迭代次数。
-
-min <integer>
- 指定最小迭代次数。
示例
函数
foo
中的 loop_1
的最小循环次数指定为 12,最大循环次数则为 16:set_directive_loop_tripcount -min 12 -max 16 -avg 14 foo/loop_1