How do dont_touch cells, fixed cells, and boundary cells differ in how remove_clock_trees treats them?
From PDVerse PnR Interview Handbook, part of the pdVerse Mentor Guide
Short Answer
All three are preserved by remove_clock_trees, but for different underlying reasons: a dont_touch cell is preserved because optimization is explicitly excluded from touching it; a fixed cell is preserved because its placement is locked, independent of dont_touch; a boundary cell is preserved specifically because it protects a hierarchical timing contract, and additionally cannot be moved or resized even outside the context of tree removal.
Technical Explanation
- A dont_touch cell is preserved by remove_clock_trees because optimization is explicitly excluded from touching it -- a general-purpose protection, not clock-tree-specific.
- A fixed cell is preserved because its placement is locked -- a different mechanism from dont_touch, though both result in preservation during tree removal.
- A boundary cell is preserved specifically because it protects a hierarchical timing contract at a block boundary, and it carries an additional, stronger constraint: it cannot be moved or resized even outside the context of remove_clock_trees.
- The distinction matters for debugging: three different reasons can each explain why a cell survived a rebuild, and they call for three different fixes if you actually need to change one.
Common Mistake
The Trap: Assuming all three (dont_touch, fixed, boundary) are the same protection mechanism under different names -- they're genuinely different constraints with different scopes and different reasons for existing.
Follow-up Question & Model Response
"If you needed to actually modify a boundary cell for a legitimate reason, what would that require beyond just clearing dont_touch?"
Candidate Model Response: It would require first establishing that the modification doesn't break the hierarchical timing contract the boundary cell protects -- likely re-characterizing the block's boundary timing and re-validating every sibling block that depends on it, not just clearing an attribute.
Practical Example
Debug Scenario: A cell survives remove_clock_trees unexpectedly. Checking why, it turns out to be a boundary cell (not simply dont_touch or fixed) -- meaning it's protected by the hierarchical-contract rule specifically, and the fix (if one is even appropriate) is different from clearing a generic dont_touch attribute.
PnR Flow Mentor Guide
Master the Physical Design Implementation Flow
Read the complete 8-chapter PnR Flow Mentor Guide free on the web โ library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.
Offline PDF Bundle
Want all 1109 questions offline?
Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

Continue practising