pragma HLS expression_balance

Description

Sometimes a C-based specification is written with a sequence of operations resulting in a long chain of operations in RTL. With a small clock period, this can increase the latency in the design. By default, Vivado HLS rearranges the operations using associative and commutative properties. This rearrangement creates a balanced tree that can shorten the chain, potentially reducing latency in the design at the cost of extra hardware.

The EXPRESSION_BALANCE pragma allows this expression balancing to be disabled, or to be expressly enabled, within a specified scope.

Syntax

Place the pragma in the C source within the boundaries of the required location.

#pragma HLS expression_balance off

Where:

  • off: Turns off expression balancing at this location.
    Tip: Leaving this option out of the pragma enables expression balancing, which is the default mode.

Example 1

This example explicitly enables expression balancing in function my_Func:

void my_func(char inval, char incr) {  
  #pragma HLS expression_balance

Example 2

Disables expression balancing within function my_Func:

void my_func(char inval, char incr) {  
  #pragma HLS expression_balance off

See Also

  • Vivado Design Suite User Guide: High-Level Synthesis (UG902)