IntermediateQuestion 119 of 222

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 Reference DiagramHow do dont_touch cells, fixed cells, and boundary cells differ in how remove_clock_trees treats them?

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

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.

See what's inside the bundle
PnR Flow Physical Design Mentor Guide โ€” eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out.