syn.directive.loop_tripcount - 2024.1 English

Vitis Unified Software Platform Documentation: Application Acceleration Development (UG1393)

Document ID
UG1393
Release Date
2024-07-03
Version
2024.1 English

Description

The loop tripcount is the total number of iterations performed by a loop. Vitis HLS reports the total latency of each loop (the number of cycles to execute all iterations of the loop). This loop latency is therefore a function of the tripcount (number of loop iterations).

Important: syn.directive.loop_tripcount is for analysis only, and does not impact the results of synthesis.

The tripcount can be a constant value. It might depend on the value of variables used in the loop expression (for example, x<y) or control statements used inside the loop.

Vitis HLS cannot determine the tripcount in some cases. These cases include, for example, those in which the variables used to determine the tripcount are:

  • Input arguments, or
  • Variables calculated by dynamic operation

In the following example, the maximum iteration of the for-loop is determined by the value of input num_samples. The value of num_samples is not defined in the C function, but comes into the function from the outside.

void foo (num_samples, ...) {
   int i;
   ...
   loop_1: for(i=0;i< num_samples;i++) {
     ...
     result = a + b;
   }
}

In cases where the loop latency is unknown or cannot be calculated, syn.directive.loop_tripcount allows you to specify minimum, maximum, and average iterations for a loop. This lets the tool analyze how the loop latency contributes to the total design latency in the reports and helps you determine appropriate optimizations for the design.

Tip: If a C assert macro is used to limit the size of a loop variable, Vitis HLS can use it to both define loop limits for reporting and create hardware that is exactly sized to these limits.

Syntax

syn.directive.loop_tripcount=[OPTIONS] <location>
  • <location> is the location of the loop (in the format function[/label]) at which the tripcount is specified.

Options

avg=<integer>
Specifies the average number of iterations.
max=<integer>
Limits the maximum number of iterations.
min=<integer>
Limits the minimum number of iterations.

Examples

loop_1 in function foo is specified to have a minimum tripcount of 12, and a maximum tripcount of 16:
syn.directive.loop_tripcount=min=12 max=16 avg=14 foo/loop_1