High fanout nets that have tight timing constraints require tightly clustered placement to meet timing. This can cause localized congestion as shown in the following figure. High fanout nets can also contribute to congestion by consuming routing resources that are no longer available for other nets in the congestion window.
To analyze the impact of high fanout non-global nets on routability in the congestion window you can:
- Select the leaf cells of the top hierarchical modules in the congestion window.
- Use the find command ( ) to select all of the nets of the selected cell objects (filter out Global Clocks, Power, and Ground nets).
- Sort the nets in decreasing Flat Pin Count order.
- Select the top fan-out nets to show them in relation to the congestion window.
This can quickly help you identify high-fanout nets which potentially contribute to congestion.
For high fanout nets with tight timing constraints in the congestion window, replicating the driver will help relaxing the placement constraints and alleviate congestion.
High fanout nets (fanout > 5000) with sufficient positive timing slack can be routed on global clock resources instead of fabric resources. The placer automatically routes high fanout nets with fanout > 1000 on global routing resources if those resources are available towards the end of the placer step. This optimization only occurs if it does not degrade timing.
You can also set the property
CLOCK_BUFFER_TYPE=BUFG_FABRIC on the net and let synthesis or logic optimization
automatically insert the buffer prior to the placer step. Review the newly inserted
buffer placement along with its driver and loads placement after
place_design to verify that it is optimal. If it is not optimal, use the
CLOCK_REGION constraint on the clock buffer to control its placement.