Advanced Variation: AOCV, POCV & Derate Strategy
Chapter 21 — Advanced Variation Modeling: AOCV, POCV/SOCV
Math, and Derate Strategy
Chips vary. Two identical cells on one die do not switch at the same speed. Process, voltage, and temperature (PVT) cause this. PVT means the manufacturing spread, supply level, and heat. You cannot fix this with one number. Timing signoff (the final timing check before tape-out) has improved over years. It moved away from crude, blanket pessimism. It moved toward physical, statistical margins. This chapter follows that path. We start with flat on-chip variation (OCV). Then we add depthand distance-aware OCV (AOCV). Then we reach parametric/statistical OCV (POCV/SOCV). There, every cell carries its own sigma (a measure of spread). By the end, you can combine variances by hand. You can defend a sigma multiplier in an interview. You can explain why statistical derating plus common-path pessimism removal (CPPR) recovers margin that flat OCV wastes.
Recap: Flat OCV and Why It Over-Margins
On-chip variation (OCV) captures one truth. Identical cells do not switch at the same speed. Doping changes, edge placement, heat, and IR drop all differ locally. So one cell is fast and its neighbor is slow. Flat OCV models this with two blunt multipliers. A late derate slows cells down. An early derate speeds cells up.
A setup check tests the maximum delay. The tool wants the worst case. It wants slow data and a fast capture clock. So it multiplies data and launch-clock cells by 1.06. It multiplies capture-clock cells by 0.94.
# illustrative — generic, not tool-specific
set_timing_derate -late 1.06 -cell_delay -data
set_timing_derate -early 0.94 -cell_delay -clock
# hold check uses the opposite sense (covered later)
The flaw is sameness. Flat OCV gives the same 6% to every path. It treats a 3-stage path like a 30stage path. But variation has two parts. One part is random. One part is systematic (it follows a pattern across the die). The random part averages out. Picture a long chain of stages. Each stage swings fast or slow on its own. Over many stages, fast and slow cancel. So the chain's fractional swing shrinks. Think of flipping many coins. The average lands near half, not at an extreme. Flat OCV ignores this averaging. So it over-margins long paths badly. At advanced nodes this can be hundreds of picoseconds. That is real performance thrown away. Worse, it can flag false violations. Those trigger needless fixes.

AOCV: Derate as a Function of Depth and Distance
Advanced OCV (AOCV) keeps the multiplier idea. But the multiplier now changes along two physical axes.
- Path depth (number of logic stages): More stages mean more averaging. So the random part shrinks. This is the averaging idea made practical. A depth-1 path keeps almost the full random margin. A depth-20 path keeps far less.
- Distance (physical span): Systematic variation grows with span. This comes from lithography gradients, well proximity, and heat. Cells far apart see more uncorrelated shift. So the derate grows with distance. AOCV splits total variation into two terms. One random term shrinks with depth. One systematic term grows with distance.
derate_effective ≈ 1 ± ( random_component / √depth + systematic_component × f(distance) ) The tool reads a precharacterized AOCV table. It looks up the multiplier by (depth, distance) per path. The random term divides down for deep paths. So AOCV is less pessimistic than flat OCV on long paths. Those are exactly the paths flat OCV punishes most.
| Path depth | Flat-OCV late derate | AOCV late derate (illustrative) | Margin recovered |
|---|---|---|---|
| 1 | 1.060 | 1.060 | 0.0% |
| 4 | 1.060 | 1.040 | 1.9% |
| 9 | 1.060 | 1.030 | 2.8% |
| 16 | 1.060 | 1.025 | 3.3% |
| 25 | 1.060 | 1.020 | 3.8% |
The 1/√depth shape shows here. Recovered margin grows fast at first. Then it flattens. A simple AOCV setup just points the tool at the table.
# illustrative — generic, not tool-specific
read_aocv_table ./aocv/slow_corner.aocv
set_aocv_mode -analysis_type depth_and_distance
set_aocv_mode -derate_mode aocv
report_timing -derate ;# show per-path effective derate
WORKED EXAMPLE 1 — AOCV DEPTH-BASED DERATE LOOKUP
Say flat OCV uses a late data derate of 1.060. That is a 6% slow-down. Split it into two parts. Use a 4% random part and a 2% systematic part. The systematic part does not average with depth. The depth-scaled derate is: derate(depth) = 1 + 0.02 + 0.04 / √depth For a path of depth 16: derate = 1 + 0.02 + 0.04/√16 = 1 + 0.02 + 0.01 = 1.030 For a path of depth 4: derate = 1 + 0.02 + 0.04/2 = 1 + 0.02 + 0.02 = 1.040
Now use a real number. Take a depth-16 data path. Its nominal delay is 800 ps.
- Flat OCV: 800 × 1.060 = 848 ps
- AOCV: 800 × 1.030 = 824 ps AOCV recovers 24 ps of data-path delay on this one path. That goes straight back into setup slack. Multiply across thousands of critical paths. AOCV alone can buy a frequency bin. It can remove a whole fix pass.
POCV / SOCV: Parametric and Statistical Variation
AOCV is still a table of multipliers. It is a smart approximation. But it bakes in assumptions. It fixes the random/systematic split and the distance function in advance. It can miss when a path's cell mix differs from the table's guess. The next step drops the multiplier. It characterizes variation per cell, per arc as a distribution. Parametric OCV (POCV) is also called statistical OCV (SOCV). It treats each cell-arc delay as a random variable. delay_i = μ_i + σ_i · n where n ~ N(0,1) Each library arc has a mean μ and a sigma σ. Sigma is often given as a ratio σ/μ. The path delay sums these independent variables. For the random part, variances add. So standard deviations combine by root-sum-of-squares (RSS). μ_path = Σ μ_i σ_path = √( Σ σ_i² ) (random part, assuming independence) This RSS rule is the heart of why long paths vary less in relative terms. Take ten equal stages, each with sigma σ. The path sigma is √10·σ ≈ 3.16σ. It is not 10σ. The means grow ×10. The sigma grows only ×3.16. So the fractional spread shrinks. This is the same averaging effect AOCV approximated. Now we derive it exactly from per-cell data. Slack is computed at a chosen confidence point. For setup: arrival_statistical = μ_arrival + k · σ_arrival required_statistical = μ_required − k · σ_required slack = required_statistical − arrival_statistical The k is the sigma multiplier. It is the number of standard deviations of guardband. Three-sigma (k = 3) covers about 99.87% of a normal distribution. The leftover escape risk is about 0.13% per tail. Higher k
means safer but slower silicon. Lower k means more aggressive silicon. The choice is a yield decision. It is not a timing one.
| Method | What varies | Combination rule | Accuracy | Runtime |
|---|---|---|---|---|
| Flat OCV | one global multiplier | linear, fixed % | Low (very pessimistic) | Fastest |
| AOCV | multiplier vs depth/distance | 1/√depth + distance fn | Medium | Fast |
| POCV/SOCV | per-cell μ, σ | RSS of variances | High (path-accurate) | Slower |
# illustrative — generic, not tool-specific
read_pocv_data ./pocv/slow_corner.lvf ;# per-arc mean/sigma
set_pocv_mode -enable true
set_pocv_mode -sigma 3.0 ;# k = 3
report_timing -variation
Why is POCV the most accurate? It never assumes a path's cell mix. A path of low-σ cells gets a small path sigma. A path of high-σ cells gets a large one. AOCV's table cannot tell those two apart if they share depth and distance. POCV can. It carries each cell's own σ.

WORKED EXAMPLE 2 — RSS SIGMA COMBINATION OVER FOUR STAGES
Take a four-stage data path. Each stage has a mean delay and a sigma.
| Stage | μ (ps) | σ (ps) | σ² (ps²) |
|---|---|---|---|
| 1 | 260 | 10 | 100 |
| 2 | 190 | 8 | 64 |
| 3 | 300 | 14 | 196 |
| 4 | 150 | 6 | 36 |
| Sum | 900 | — | 396 |
Path mean and path sigma:
μ_path = 260 + 190 + 300 + 150 = 900 ps σ_path = √(100 + 64 + 196 + 36) = √396 = 19.90 ps At k = 3, the statistical late arrival from this data path is: 900 + 3 × 19.90 = 900 + 59.70 = 959.70 ps Now compare flat OCV on the same 900 ps path. Use a 1.060 late derate. flat OCV = 900 × 1.060 = 954 ps Note this. Here flat OCV (954) looks less pessimistic than 3σ POCV (959.70). This path is short and shallow. At low depth, the per-cell sigmas have not averaged down. So 3σ is a genuinely wide band. POCV wins on deep paths. Re-run with sixteen stages instead. In reality, deeper paths use smaller cells, so each stage has a smaller sigma. Say each of sixteen stages has σ = 3 ps. σ_path = √(16 × 3²) = √(16 × 9) = √144 = 12 ps 3σ contribution = 900 + 3 × 12 = 900 + 36 = 936 ps Compare flat OCV's fixed 954 ps. POCV recovers 18 ps here. And the recovery scales correctly with depth. The √(Σσ²) term grows sub-linearly. Flat OCV can never do this. AOCV only approximates it.
Derate Strategy: Signs, Sides, and Targets
The direction of margining must match the check type. A wrong sign gives optimistic timing. That is the most dangerous error. It ships to silicon.
| Check | Data path | Launch clock | Capture clock |
|---|---|---|---|
| Setup (max) | LATE (slow) | LATE (slow) | EARLY (fast) |
| Hold (min) | EARLY (fast) | EARLY (fast) | LATE (slow) |
The logic is simple. Setup wants the latest data racing the earliest capture edge. So slow the data and launch. Speed up the capture. Hold is the mirror. The earliest data must still land after the latest capture edge. So speed up data and launch. Slow the capture. Derates also split by cells and nets. They also split by data and clock.
# illustrative — generic, not tool-specific
# setup-oriented derates
set_timing_derate -late 1.06 -cell_delay -data
set_timing_derate -late 1.04 -net_delay -data
set_timing_derate -early 0.94 -cell_delay -clock
set_timing_derate -early 0.96 -net_delay -clock
# hold-oriented derates (opposite sense), typically a second run/scenario
set_timing_derate -early 0.94 -cell_delay -data
set_timing_derate -late 1.06 -cell_delay -clock
Net derates are usually gentler than cell derates. Interconnect variation is more spatially correlated. It already tracks with extraction corners. Clock derates need extra care. The clock network is shared. Double-counting variation on shared clock segments is real pessimism. CPPR exists to remove it.
Interaction With CPPR (Common Path Pessimism Removal)
Launch and capture flops often share a common clock path. This is the root buffers up to where the tree branches. OCV/AOCV/POCV derate that shared segment in opposite directions. Launch gets late. Capture gets early. But it is the same wire and gates. It cannot be slow and fast at once. That contradiction is pure fake pessimism. CPPR fixes this. It is also called clock reconvergence pessimism removal (CRPR). It finds the common segment. It credits back the differential derate. For a setup check: CPPR credit ≈ (late_derate − early_derate) × common_clock_delay
WORKED EXAMPLE 3 — STATISTICAL METHODS + CPPR TOGETHER
The common clock path nominal delay is 500 ps. Setup derates are late = 1.06 and early = 0.94. Pessimism on common path = (1.06 − 0.94) × 500 = 0.12 × 500 = 60 ps CPPR removes that full 60 ps. Now add POCV. The common segment also has a sigma. Say σ_common = 8 ps. Without CPPR, the tool would add 3σ on the launch side. It would subtract 3σ on the capture side. Both on the same gates. That is another 2 × 3 × 8 = 48 ps of false spread. Statistical CPPR removes that correlated part too. The common cells are perfectly correlated with themselves. Combined recovery on this path is large. Roughly 60 ps (derate) + up to 48 ps (correlated sigma) ≈ 108 ps of pessimism removed. This is why statistical timing and CPPR ship together. POCV gives accurate per-cell variation. CPPR ensures shared clock variation is counted once, with the right correlation. It is not counted twice with opposite signs.

Choosing the Right Method per Node and Maturity
No single method is right. The choice tracks process node, library data, and schedule risk.
| Situation | Recommended method | Rationale |
|---|---|---|
| Mature / large node (≥ 28 nm), early | Flat OCV floorplanning | Fast, conservative, no extra characterization |
| Mid node, tables available | AOCV | Good pessimism reduction, modest |
runtime
| Advanced node (≤ 16/14 nm and | POCV/SOCV | Variation too large to over-margin; |
|---|---|---|
| below) | accuracy mandatory | |
| Block bring-up vs final signoff | Flat/AOCV early, POCV at signoff | Trade speed for accuracy as design matures |
The runtime/accuracy trade-off is the key. Flat OCV is one multiply per arc. It runs fastest. But it can over-margin a deep path by 100+ ps. POCV must carry a (mean, sigma) pair through every arc. It does RSS at every merge point. It tracks correlation. That is slower and uses more memory. But it is the only method that does not waste silicon at small geometries. There, per-stage σ/μ can top 10%. The smart flow uses cheap methods during exploration. It saves statistical signoff for the final passes. And it always pairs that with CPPR.
Interview Q&A
fixed percentage for every path. It ignores that random variation averages out over many stages. AOCV indexes the derate by depth. It scales the random part by about 1/√depth. So deep paths keep less random margin. The systematic part follows distance, not depth. The distance axis handles it.
Independent random variables have variances that add. Standard deviation is the square root of
variance. So σ_path = √(Σσ_i²). A plain sum assumes every stage hits its worst case at once. That is almost impossible and grossly pessimistic. RSS captures that fast and slow stages cancel on average.
guardbands three standard deviations. That covers about 99.87% of the distribution per tail. Raising k buys yield and safety. It costs slower, more conservative timing. Lowering k gives more aggressive frequency. It raises escape risk. It is a yield target decision, set by reliability needs. It is not a timing engine knob.
capture clock EARLY (fast). Hold: data and launch clock EARLY (fast), capture clock LATE (slow). Setup races the latest data against the earliest capture. Hold races the earliest data against the latest capture.
pessimism on the shared clock path. That path is derated in opposite directions for launch and capture. The same gates cannot be both fast and slow. With POCV, CPPR also removes the correlated sigma double-counted on the common segment. Together they can recover 100+ ps on one path. Without CPPR, statistical timing still carries large fake pessimism on the clock common path.
Use it during floorplanning or coarse exploration. There, characterized LVF/POCV data may not exist yet. Runtime matters more than the last picoseconds. Flat OCV is conservative and fast. You migrate to AOCV, then POCV, as data arrives and signoff accuracy becomes the priority.
Key Takeaways
- Flat OCV uses one blunt multiplier. It over-margins deep paths because it ignores the averaging of random variation.
- AOCV makes the derate depend on depth and distance. The random part scales ~1/√depth. The systematic part grows with span. This recovers pessimism without per-cell data.
- POCV/SOCV characterizes each arc as (μ, σ). Path mean adds linearly. Path sigma combines by RSS, √(Σσ²). This is the exact form of the averaging AOCV approximates.
- Signoff slack is mean ± k·σ. The sigma multiplier k (commonly 3) is a yield decision, not a timing one.
- Derate signs must match the check. Setup slows data/launch and speeds capture. Hold is the mirror. Apply distinct cell vs net and data vs clock derates.
- CPPR removes the contradiction of derating shared clock gates both ways. With POCV's correlation handling, it removes the largest single chunk of pessimism.
- Match the method to maturity. Use flat/AOCV for early and mid-node work. Use POCV plus CPPR for advanced-node signoff. Trade runtime for the accuracy small geometries demand.
ChipBuddy
← Home
Comments
Leave a Reply