Boundary Optimization is a synthesis optimization technique to exploit functional constraints across design hierarchies. Boundary Optimization includes the following:
- Constant propagation across designs / hierarchies
- Unloaded logic removal if the hierarchical pins are unloaded or become unloaded
- Hierarchical pin inversion pushes (pushing inverters across hierarchies)
- Equal or opposite pin merging
- Re-wring feedthroughs across hierarchical pins
The diagram below shows each of the above techniques.

Note, optimizations within the sub-design are not considered as Boundary Optimizations, for example, constant and unloaded register removal if the source of the constant / unloaded is within the sub-design.
In the Design Compiler, there are knobs to turn on/off individual Boundary Optimization techniques. For example:
# Enable constant propagation
# Combined only with “-no_boundary_optimization” option of “compile_ultra”
set compile_enable_constant_propagation_with_no_boundary_opt true
# Enable constant register removal
# Independent of “-no_boundary_optimization”
set compile_seqmap_propagate_constants true
# Enable unloaded register removal
# Independent of “-no_boundary_optimization”
set compile_delete_unloaded_sequential_cells true

Leave a comment