set_directive_loop_tripcount - 2023.2 简体中文

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

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

描述

循环次数”是指循环执行的迭代总数。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