The Physical Synthesis phys_opt_design command performs timing-based logic replication of high-fanout drivers and critical-path cells. Drivers are replicated, then loads are distributed among the replicated drivers, and then the replicated drivers are automatically placed. This optional command is run after placement and before routing.
The phys_opt_design command optimizes the current placed netlist.
Following is a high-level description of how phys_opt_design replicates high-fanout nets:
1. Nets with high fanout are considered for replication. Replication candidates are:
a. Limited to nets in negative slack paths.
b. Further restricted to nets with slack within 10% of the worst negative slack in order to focus on the worst paths.
2. Loads are clustered based on proximity. Drivers are replicated and placed for each additional load cluster.
3. Timing is analyzed for each high-fanout net and replicas. Logical changes are committed if timing improves.
4. After replication, the design is checked again for high fanout nets to replicate. If high fanout nets still exist, the replication process continues until there are no high fanout nets.
The command reports each replicated net, how many times its driver was replicated, and the worst negative slack (WNS) before and after optimization. Replicated objects are named by appending _replica to the original object name, followed by the replicated object count.
The phys_opt_design command also replicates cells in failing paths. For example, if a cells loads are placed far apart, the cell may be replicated with new drivers placed closer to loads. High fanout is not a requirement for this optimization to occur, but the path must fail timing with slack within 10% of the worst negative slack.
The phys_opt_design command operates on the design in memory and can be run as many times as wanted. If run again, the new run tries to optimize the results of the previous run. It is not guaranteed that timing continues to improve.
Running phys_opt_design on a design with routed nets is not supported.
phys_opt can massively improve timing score (saw dramatic results like 5M down to 500k after phys_opt once, down to 50k after phys_opt again)
phys_opt does add runtime (in the range of placement runtime)