Incremental Synthesis - 2022.1 English

Versal ACAP Hardware, IP, and Platform Development Methodology Guide (UG1387)

Document ID
UG1387
Release Date
2022-05-25
Version
2022.1 English

You can use incremental synthesis to reuse existing synthesis results. This approach reduces typical synthesis compile times by 50%.

When a design is synthesized, it is broken into RTL partitions. Incremental synthesis reuses RTL partitions from a previous synthesis run. RTL partitions are typically created along logical hierarchies. Incremental synthesis only runs if the design is large enough that synthesis creates at least 4 RTL partitions, each containing at least 25000 instances. Instances include both logical hierarchy and RTL primitives.

Following are the different modes available when using the synth_design -incremental_mode <value> command:

off
Incremental synthesis is not run.
quick
Fastest results but no cross boundary optimizations. This mode limits logic performance.
default
Most logic optimizations enabled, including cross-boundary optimization. Compile time is significantly reduced from non-incremental synthesis.
aggressive
All optimizations are enabled. Compile time is significantly reduced from non-incremental synthesis.

The quick mode is typically recommended for low-performance designs only. Without cross boundary optimizations, typical designs have reduced performance. However, if a design is well constructed with registered hierarchical boundaries, performance might not be affected. Due to the limits on cross-boundary optimization, resynthesis in a given area is caused by RTL changes only in that area. Changes in another synthesis partition do not trigger changes beyond that partition. This leads to more reuse and a faster synthesis result. For other modes, this is not the case, and RTL changes might trigger the resynthesis of more partitions beyond just the partition the cell is in. When more than 50% of partitions are modified, a full resynthesis is triggered.

For high-performance designs, the default, aggressive, and off modes are recommended. More optimizations are enabled in aggressive and off modes, which might lead to more resynthesis but higher QoR.

To more aggressively address compile time concerns, you can compare the incremental synthesis against OOC synthesis. OOC synthesis is typically used by IP, and setup is automatic. Global synthesis with incremental synthesis offers the advantage of cross-boundary optimizations as well as compile time benefits. Following are areas to consider:

  • Compile time

    OOC synthesis is faster, because it reduces the amount of code that is elaborated each time. RTL is only elaborated if the RTL is modified within the OOC module.

  • Performance

    Incremental synthesis has a performance advantage over OOC synthesis, because optimization is not possible across OOC boundaries.

  • Setup

    For non-IP flows, when you create an OOC synthesis run, you must create a wrapper when generics/parameters are passed from higher modules. In addition, you must create a separate timing constraint file to target the OOC-level ports. Incremental synthesis does not have these requirements.

For more information, see the Vivado Design Suite User Guide: Synthesis (UG901).