Mutual Exclusion, Resources, and Predicates - Mutual Exclusion, Resources, and Predicates - 2026.1 English - UG1448

Vitis HLS Messaging (UG1448)

Document ID
UG1448
Release Date
2026-06-23
Version
2026.1 English

In some cases, the scheduler is able to prove that some operations can never be executed together: that is, they are mutually exclusive. Two or more mutually exclusive operations can be scheduled on one resource in a given cycle. Mutual exclusion conditions take two forms:

  1. Control conditions (also known as control predicates), when the operations are executed under a certain condition. For example, if (cond) … = A[i] else … = A[i+1];.
  2. Observability conditions (also known as observability predicates), when the result of an operation is used only under a certain condition. For example, t = (cond) ? A[i] : A[i+1];.

In both cases, the scheduler can schedule both memory reads in the same clock cycle using only one memory port resource. The following conditions apply:

  • The scheduler always uses control predicates for operations with side effects (for example: memory writes, stream reads and writes, and accumulations).
  • The scheduler uses control and observability predicates only if it can schedule the predicate computation at least one cycle before the operation controlled by the predicate for operations without side effects (memory reads, multiplications, and floating point operations).

Ignoring predicates for operations with side effects leads to functional errors. Ignoring predicates for operations that can be allocated on demand leads to an increase in resources. For memory and stream operations, ignoring predicates leads to an increase in II and latency.

In the case of memory reads or arithmetic operations, if the scheduler cannot schedule the predicate evaluation before the predicated operations due to pipelining constraints, it can “speculatively” execute both operations and then use a multiplexer to merge the results when the condition can be evaluated.