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