BeginnerQuestion 324 of 97Source PDF page undefined

What's the practical difference between marking a cell dont_touch and marking it size_only?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

set_dont_touch excludes a cell from optimization entirely -- nothing about it changes. set_size_only allows sizing (swapping to a different drive-strength variant) but nothing else -- the cell stays in place, keeps its function, but can still be resized to help timing. dont_touch is the stronger, more restrictive constraint; size_only is a middle ground that still gives the optimizer one lever to use.

Technical Reference DiagramWhat's the practical difference between marking a cell dont_touch and marking it size_only?
What's the practical difference between marking a cell dont_touch and marking it size_only?, illustrating the physical design concept.

Technical Explanation

  • set_dont_touch excludes a cell from optimization entirely -- nothing about it (size, position within optimization's control, logic) changes.
  • set_size_only allows sizing (swapping to a different drive-strength library variant) but nothing else -- the cell keeps its identity and logical function, but the optimizer can still resize it to help timing.
  • dont_touch is the stronger, more restrictive constraint; size_only is a genuine middle ground that still gives the optimizer one real lever (sizing) to use.
  • dont_touch has higher precedence than boundary_optimization and size_only -- if a cell somehow has conflicting constraints, dont_touch wins.

Common Mistake

The Trap: Using dont_touch when size_only would have been sufficient -- dont_touch removes ALL optimization freedom including sizing, which may leave real timing margin on the table that size_only would have let the tool recover.

Follow-up Question & Model Response

"Why would dont_touch have higher precedence than size_only rather than the two being independent, combinable constraints?"

Candidate Model Response: Because dont_touch is a stronger, more absolute statement ("do not change this cell in any way") that logically subsumes size_only's more permissive statement ("you may resize, but nothing else") -- if both were somehow applied, honoring the stronger constraint is the only consistent behavior.

Practical Example

Debug Scenario: A cell needs to keep its exact placement and connectivity but could still benefit from resizing to help close a nearby timing violation. Using set_size_only instead of set_dont_touch gives the optimizer that one lever, rather than locking the cell down completely.

Physical Design & Planning Handbook

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