When would you use add_buffer instead of add_buffer_on_route for a post-CTS ECO fix?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
add_buffer inserts a buffer on a net by specifying the net and library cell directly (-object_list, -lib_cell), letting the tool determine placement -- appropriate for a net that isn't already routed, or where preserving exact existing routing topology doesn't matter. add_buffer_on_route (ABOR) specifically adds buffers based on the EXISTING routing topology, minimizing disturbance to routes that are already in place -- the right choice post-route specifically, when you don't want to risk re-routing everything.
Technical Explanation
- add_buffer inserts a buffer on a net directly (-object_list, -lib_cell), with the tool determining placement -- fine when there's no existing routing to preserve, or preserving it doesn't matter.
- add_buffer_on_route (ABOR) specifically adds buffers based on the EXISTING routing topology, minimizing disturbance to routes already in place.
- Post-route, ABOR is generally the right choice specifically because it avoids the risk (and cost) of triggering a broader re-route just to accommodate a new buffer.
- add_buffer supports -inverter_pair (requires an inverting-output library cell) and -respect_voltage_areas (mutually exclusive with -snap, which places new buffers next to the target cell on the closest legal site).
Common Mistake
The Trap: Using add_buffer for a post-route ECO fix when add_buffer_on_route was the right tool -- add_buffer doesn't preserve existing routing topology the way ABOR specifically does.
Follow-up Question & Model Response
"Why would -respect_voltage_areas and -snap be mutually exclusive options on add_buffer?"
Candidate Model Response: Because -snap places the new buffer physically adjacent to a specific target cell on the nearest legal site, while -respect_voltage_areas requires the buffer to land within the hierarchy of a specific voltage area -- those two placement goals (snap-to-neighbor vs respect-voltage-boundary) can conflict, so the tool doesn't let you request both at once.
Practical Example
Debug Scenario: A post-route hold fix needs a buffer inserted without disturbing the already-completed detail routing around it. add_buffer_on_route is used specifically because add_buffer would let the tool re-derive placement and routing for that net, risking unnecessary disturbance to routing that was already correct.
Physical Design & Planning Handbook
Master ASIC Physical Design Planning & Floorplanning
Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.
Continue practising