A typical timing path report shows the delay details of both source and destination clock paths, from their root to the sequential cell clock pins. As explained below, the source and destination clocks are analyzed with a different delay, even on their common circuitry.
This delay difference on the common section introduces some additional pessimism in the skew computation. To avoid unrealistic slack computation, this pessimism is compensated by a delay called the Clock Pessimism Removal (CPR) value.
Clock Pessimism Removal (CPR) = common clock circuitry (max delay - min delay)
The CPR is added or subtracted to the skew depending on the type of analysis performed:
- Max Delay Analysis (Setup/Recovery)
CPR is added to the destination clock path delay.
- Min Delay Analysis (Hold/Removal)
CPR is subtracted from the destination clock path delay.
The Vivado Design Suite timing reports clock skew for each timing path as shown below (hold analysis in this case):
- DCD - Destination Clock Delay
- SCD - Source Clock Delay
- CPR - Clock Pessimism Removal
Clock Path Skew: 0.301ns (DCD - SCD - CPR) Destination Clock Delay (DCD): 2.581ns Source Clock Delay (SCD): 2.133ns Clock Pessimism Removal (CPR): 0.147ns
In many cases, the CPR accuracy changes before and after routing. For example, let's consider a timing path where the source and destination clocks are the same clock, and the startpoint and endpoint clock pins are driven by the same clock buffer.
Before routing, the common point is the clock net driver, that is, the clock buffer output pin. CPR compensates only for the pessimism from the clock root to the clock buffer output pin.
After routing, the common point is the last routing resource shared by the source and destination clock paths in the device architecture. This common point is not represented in the netlist, so the corresponding CPR cannot be directly retrieved by subtracting common clock circuitry delay difference from the timing report. The timing engine computes the CPR value based on device information not directly exposed to the user.