IntermediateQuestion 208 of 142Source PDF page undefined

Why must clock networks remain ideal during placement and pre-CTS optimization?

From PDVerse PnR Interview Handbook ยท pdVerse Mentor Guide

Short Answer

During placement, registers are still moving around the floorplan constantly โ€” you simply can't have a real, physically-routed clock tree yet, because the endpoints it would feed haven't settled into their final locations. Because of that, the timing engine models clocks as "ideal": every register's clock pin is assumed to transition at the same instant (often modeled as t=0 or a flat virtual-source latency), with clock uncertainty standing in as a placeholder margin (commonly around 100 ps) for the skew CTS will eventually introduce.

Technical Reference DiagramWhy must clock networks remain ideal during placement and pre-CTS optimization?
Why must clock networks remain ideal during placement and pre-CTS optimization?, illustrating the physical design concept.

Technical Explanation

  • During placement, registers are still moving around the floorplan constantly โ€” you simply can't have a real, physically-routed clock tree yet, because the endpoints it would feed haven't settled into their final locations.
  • Because of that, the timing engine models clocks as "ideal": every register's clock pin is assumed to transition at the same instant (often modeled as t=0 or a flat virtual-source latency), with clock uncertainty standing in as a placeholder margin (commonly around 100 ps) for the skew CTS will eventually introduce.
  • If you prematurely turn on propagated clocks [PrimeTime: set_propagated_clock] during placement, the timing engine sees zero clock-network insertion delay everywhere โ€” and since no real clock tree exists yet to balance that delay, ordinary data paths between registers suddenly show massive, entirely fictitious hold violations.
  • The placer doesn't know those violations are fake โ€” it will spend real routing resources inserting hold-fix delay buffers to chase phantom problems, permanently wasting area and congestion budget on a problem that was never real.
  • The fix is procedural, not clever: keep clocks ideal with realistic uncertainty margins through placement, and only propagate real clock delay once CTS has actually built the tree.

Common Mistake

The Trap: Running set_propagated_clock [all_clocks] before place_opt. The tool inserts thousands of hold delay buffers on unbuffered clock sinks, destroying floorplan area and routing channels.

Follow-up Question & Model Response

"How does the timing engine account for clock skew during pre-CTS optimization?"

Candidate Model Response: Pre-CTS SDC specifies clock uncertainty (e.g., set_clock_uncertainty 0.15 [get_clocks CLK]), reserving an explicit timing margin for expected post-CTS clock skew and jitter.

Practical Example

Pre-CTS Clock Sanity Verification:

# Verify that all clocks remain ideal during placement
report_clocks -attributes

# Ensure uncertainty includes skew margin pre-CTS
set_clock_uncertainty -setup 0.12 [get_clocks CORE_CLK]
set_clock_uncertainty -hold 0.05 [get_clocks CORE_CLK]

Physical Design & Planning Handbook

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