IntermediateQuestion 308 of 142Source PDF page undefined

What problem does split_fanout actually solve during a timing ECO, and how do you tell it what to split on?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

split_fanout optimizes net fanout during a timing ECO by inserting buffers to break up a high-fanout net -- specified either by -net/-driver plus -max_fanout (a numeric limit) or -load (an explicit list of pins/ports, optionally -hierarchy-aware). -on_route adds the buffers on the existing route topology (like ABOR); -max_distance_for_incomplete_route handles splitting fanout of a net that isn't fully routed, within a max distance, and errors if 0 or more than 1 routed segment is found in that distance.

Technical Reference DiagramWhat problem does split_fanout actually solve during a timing ECO, and how do you tell it what to split on?
What problem does split_fanout actually solve during a timing ECO, and how do you tell it what to split on?, illustrating the physical design concept.

Technical Explanation

  • split_fanout optimizes net fanout during a timing ECO by inserting buffers to break up a high-fanout net into smaller, more manageable groups.
  • Specify what to split on either by -max_fanout <n> (a numeric fanout limit) or -load {pins/ports} (an explicit list, optionally -hierarchy-aware).
  • -on_route adds the new buffers on the existing route topology, similar in spirit to add_buffer_on_route -- minimizing routing disturbance.
  • -max_distance_for_incomplete_route specifically handles splitting fanout of a net that isn't fully routed yet, within a stated max distance -- and it ERRORS if 0 or more than 1 routed segment is found within that distance, since the operation is ambiguous in either case.

Common Mistake

The Trap: Using -max_distance_for_incomplete_route on a net that's either fully routed already or has multiple candidate routed segments within the distance -- both cases are explicitly documented error conditions, not silently-handled edge cases.

Follow-up Question & Model Response

"Why would the command error out (rather than guess) when it finds more than one routed segment within the distance for -max_distance_for_incomplete_route?"

Candidate Model Response: Because with more than one candidate routed segment, there's genuine ambiguity about which one the fanout split should actually attach to -- guessing wrong could silently create an incorrect topology, so the command requires explicit disambiguation instead of picking one arbitrarily.

Practical Example

Practical Example: split_fanout -driver U5/Y -lib_cell BUF1 -max_fanout 8 -on_route breaks up a high-fanout net driven by U5/Y into groups of at most 8 loads per buffer, inserting the new buffers on the existing route topology rather than triggering a fresh route.

Physical Design & Planning Handbook

Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.