First it's necessary to understand how a net is classified as a high fanout net.
When the fanout of a net exceeds the limit set by the high_fanout_net_threshold
variable, the net is marked as high fanout. Note that in this case, fanout
refers to the actual number of connections to the load pins of the net and not
the fanout load, which is classically used in the set_max_fanout constraint.
The number of connections of a net can be obtained from the report_net command.
High fanout nets are not ideal or dont_touch by default.
Classification of a net as high fanout affects only the way in which total
pin capacitance is computed on the net. The pin capacitance on a high fanout
net is calculated using the threshold value and the value of the
high_fanout_net_pin_capacitance variable. This pin capacitance value is
then used for other purposes, such as evaluating max_capacitance violations
and net loading.
By default, Design Compiler fixes violations of DRC constraints such as
max_capacitance, max_fanout, and max_transition even on high fanout nets.
Note that even if a net is classified as high fanout, it can still be free
of max_fanout violations; similarly, a net can have max_fanout violations and
not be a high fanout net. This is so because the max_fanout constraint is
concerned with the sum of the fanout load of the load pins and not the actual
connections.
After max_fanout and max_capacitance violations have been fixed through
buffering, a net might no longer be a high fanout net.
A constant net or a clock net might also be (and most likely will be) a high
fanout net, but such nets are also marked "dr," in which case no DRC fixing
will be performed on them. On nets that are not marked "dr," it is best to
apply both set_dont_touch and set_ideal_net commands so that no optimization
is performed, thus saving runtime. |