MAX_FANOUT forces the synthesis to replicate logic to meet a fanout limit. The tool is able to replicate logic, but not inputs or black boxes. Accordingly, if a MAX_FANOUT attribute is placed on a signal that is driven by a direct input to the design, the tool is unable to handle the constraint.
Take care to analyze the signals on which a MAX_FANOUT is placed. If a MAX_FANOUT is placed on a signal that is driven by a register with a DONT_TOUCH, the MAX_FANOUT attribute is not honored. When the signal drives signals in a different level of hierarchy with the DONT_TOUCH attribute on that hierarchy, the MAX_FANOUT attribute is also not honored.
Synthesis appends the replicated cells with _rep
for the first replication and subsequent replications are _rep__0, _rep__1, and so on. These cells
can be seen in the post synthesized netlist by selecting on cells.
place_design and phys_opt_design commands in the AMD Vivado™
tools perform placement-based replication, which is more effective than logical
replication in synthesis. If you want a specific fanout, manually coding the extra
registers is often worth the time and effort.