Walk through a full setup check including clock reconvergence pessimism (CRPR) โ why does OCV derating create artificial pessimism on shared clock paths, and how is it removed?
From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide
Short Answer
A setup check compares when data arrives at a flip-flop against the latest time it is allowed to arrive. On-chip variation (OCV, the assumption that identical cells on the same chip can still run at slightly different speeds) forces the tool to derate the launch clock path late and the capture clock path early, even though both paths often share the same physical wires up to some branch point. That double-counts variation on the shared segment. Clock reconvergence pessimism removal (CRPR) finds that shared segment and credits back the extra margin.
Technical Explanation
- The tool builds the full setup path in four segments: launch clock path (source to launch flop), data path (launch flop to capture flop), capture clock path (source to capture flop), and the flop's own setup requirement.
- Data arrival time is the launch clock edge plus clock path delay plus data path delay; the required time is the next capture clock edge plus clock path delay, minus the setup requirement and any uncertainty. Slack is required time minus arrival time.
- In on-chip variation mode, the tool applies
set_timing_derate(SDC) factors so the launch side of a setup check uses late (slow) derating and the capture side uses early (fast) derating โ modeling one flop's neighborhood running slow while another runs fast. - The launch and capture clock trees usually share the same buffers and wires from the clock root out to some divergence point, because both flops sit on the same physical clock tree. Applying opposite derates on the same physical segment is not physically possible โ one buffer cannot be both fast and slow at once.
- CRPR (clock reconvergence pessimism removal, sometimes labeled CPPR for common-path pessimism removal) finds the common point where the launch and capture clock paths diverge, computes the derated delay difference on that shared segment, and adds the difference back into slack as a credit.
report_crpr(PT) prints the exact common-point pin and the size of the pessimism credit for a given path, andreport_timing -derate(PT) shows the per-segment derate factor actually applied, so both are the way to confirm CRPR fired rather than trusting the summary slack number alone.- What breaks without it: paths with a long shared clock trunk and a short divergence โ common in a balanced clock tree โ show slack that is more pessimistic than physically possible, which can trigger unnecessary ECO buffer insertion or over-conservative floorplan decisions.
Common Mistake
The Trap: assuming CRPR removes all OCV pessimism on a path, not just the pessimism from the shared clock segment.
- CRPR never touches the data path or the divergent portion of either clock path โ those keep their full derate, because there is no physical reason those segments must track each other.
- A path with almost no shared clock trunk (the two flops sit on opposite corners of the block) gets little or no CRPR credit, so it is a mistake to expect the same relief on every violating path just because CRPR is enabled globally.
Follow-up Question & Model Response
"If CRPR gives back a large slack credit on one specific path, what would make you suspicious that the credit itself is wrong rather than trust it at face value?"
Candidate Model Response: I would check the common point report_crpr reports and confirm it actually sits on the true shared clock segment for both the launch and capture flop โ a wrong common point (for example, one computed before a useful-skew clock-gating cell was accounted for) can hand back credit that does not correspond to real shared silicon. I would also check whether the launch and capture edges are the same clock edge; CRPR credit is largest and most trustworthy at zero-cycle, same-edge checks, and shrinks or should be treated cautiously once launch and capture use different edges of a multicycle or generated-clock relationship, where the 'shared' delay no longer occurs at the same physical instant.
Practical Example
Worked case: a setup path launches from regA and captures at regB, both driven by CLK through a shared 4-buffer trunk and then diverging into two separate branches of 2 buffers each. Shared trunk delay is 220 ps, late-derated (1.10x) to 242 ps and early-derated (0.92x) to 202 ps depending on which side is being computed. Without CRPR the tool would apply 242 ps on the launch side and 202 ps on the capture side of that same physical trunk, an artificial 40 ps of slack loss. report_crpr on this path reports the common point at the trunk's last shared buffer output and a credit of 40 ps, restoring the 40 ps of slack that CRPR shows was never physically possible to lose.
Complete STA Handbook
Master Signoff-Ready Static Timing Analysis
Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.
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