pragma HLS expression_balance - 2021.2 English

Vitis High-Level Synthesis User Guide (UG1399)

Document ID
Release Date
2021.2 English


Sometimes C/C++ code 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, the Vitis HLS tool 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.

Expression balancing rearranges operators to construct a balanced tree and reduce latency.

  • For integer operations expression balancing is on by default but may be disabled.
  • For floating-point operations, expression balancing is off by default but may be enabled.

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


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

#pragma HLS expression_balance off


Turns off expression balancing at this location.
Specifying #pragma HLS expression_balance enables expression balancing in the specified scope. Adding off disables it.

Example 1

Disables expression balancing within function my_Func.

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

Example 2

This example explicitly enables expression balancing in function my_Func.

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