pragma HLS loop_tripcount - 2023.2 简体中文

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

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

描述

将该编译指示手动应用于循环,用于指定循环执行的迭代总数。

重要: LOOP_TRIPCOUNT 编译指示或指令仅用于分析,不影响综合结果。

Vitis HLS 工具会报告每个循环的总时延,即执行循环的所有迭代的时钟周期数。因此,循环时延即为循环迭代次数(或循环次数)的函数。

循环次数可为常量值。它取决于循环表达式(例如,x < y)中使用的变量值或循环内使用的控制语句。在某些情况下,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;
   }
}

如果循环时延未知或者无法计算,那么 LOOP_TRIPCOUNT 编译指示会要求您指定循环迭代次数的最小、最大和平均值。这样该工具即可分析循环时延给报告中的设计总时延造成的影响,并帮助您为设计决定合适的优化措施。

提示: 如果使用 C 语言断言宏来限制循环变量的大小,那么 Vitis HLS 可将其用于定义循环限制以供报告之用,并根据这些限制创建大小精确的硬件。

语法

将 C 语言源代码中的编译指示置于循环的主体内。

#pragma HLS loop_tripcount min=<int> max=<int> avg=<int>

其中:

max= <int>
指定循环迭代次数的最大值。
min=<int>
指定循环迭代次数的最小值。
avg=<int>
指定循环迭代次数的平均值。

示例

在以下示例中,函数 foo 中的 loop_1 的最小循环次数指定为 12,最大循环次数则为 16:

void foo (num_samples, ...) {
  int i;
  ...
  loop_1: for(i=0;i< num_samples;i++) {
   #pragma HLS loop_tripcount min=12 max=16
   ...
    result = a + b;
  }
}