Tempus Mentor Guide · Chapter 7

SOCV and Wire Variation: Timing with Mean and Sigma

By the end of this chapter you will be able to explain why statistical timing removes pessimism. You will load sigma data, turn on SOCV and read mean and sigma in reports. You will know which inputs carry no sigma, and you will add per-layer wire variation to path-based analysis.

40 min read · Free, no login ·

Chapter overview

In Analysis Modes, CPPR and AOCV we pushed every cell to a worst-case delay with derates. That approach is safe, but its fixed factors act as if every cell on a path were slow at once. In real silicon, that almost never happens. Some cells are a little slow and some a little fast, and the errors partly cancel.

Statistical on-chip variation (SOCV) models this directly. Each delay becomes a mean and a sigma. The tool combines them along the path and reports a single, less pessimistic number. For deep paths, this can turn a false violation into a passing path.

The same idea extends to wires. Metal layers vary in resistance and capacitance from one chip to the next. Wire variation adds those per-layer effects to path-based analysis.

This chapter covers both, from the data files to the report fields. We also spend time on the traps. Several common inputs quietly carry no sigma, and a beginner can lose margin without noticing.

Learning objectives

  1. Explain mean and sigma for a cell delay, and why sigmas add as root-sum-square.
  2. Calculate a path arrival at n sigma, and compare it with a stage-by-stage sum.
  3. Describe the two sources of SOCV data – Liberty LVF and the .socv file – and their main attributes.
  4. Load SOCV data for single-corner and MMMC sessions, and bootstrap it from AOCV tables for experiments.
  5. Turn on SOCV analysis, set the statistical min/max mode and the reporting n-sigma.
  6. Read SOCV report fields and timing properties, including mean and sigma values.
  7. List the inputs and outputs that carry no sigma, or only the mean, and avoid their traps.
  8. Set up wire variation with an extended SPEF, a side file and path-based reporting.
  9. Choose between the statistical and binomial wire variation models.

Chapter roadmap

The chapter moves in six steps, from the statistical idea to per-layer wire effects. Figure 1 shows the order. Come back to it whenever you lose your place.

SOCV and wire variation on one page
Six steps from mean and sigma to per-layer wire effects
SOCV and wire variation on one page
Figure 1 The chapter as a map: the concept, the data, the switches, the reports, the traps and wire variation.What to notice: Steps 1 to 5 are about cells. Step 6 applies the same statistics to metal layers.

Key commands

Table 1 lists the commands and settings covered in this chapter, grouped by the section that teaches them. Do not try to memorize them now. Each one is explained when it is first needed.

Table 1 Key commands in this chapter
Section Command or setting What it does
Data read_lib -⁠socv, read_lib (LVF) Load sigma from .socv or LVF
Data create_library_set -⁠socv Attach .socv files in MMMC
Data timing_library_infer_socv_from_aocv Infer sigma from AOCV (experiments)
Data timing_library_scale_aocv_to_socv_to_n_sigma Sigma level of an AOCV value
Enable set_analysis_mode -⁠socv true Turn on statistical analysis
Enable timing_socv_statistical_min_max_mode Rule for statistical max and min
Enable set_socv_reporting_nsigma_multiplier n in mean + n × sigma for reports
Reports timing_report_enable_verbose_ssta_mode Show mean and sigma details
Traps set_timing_derate -⁠mean, -⁠sigma Derate only the mean or the sigma
Traps write_sdf -⁠no_variation Write mean-only delays to SDF
Traps -⁠via_variation_file Add via variation
Wires read_spef -⁠extended -⁠wire_variation_file Read layer tags and wire variation
Wires timing_enable_wire_variation Turn on wire variation
Wires set_wire_variation_mode Choose the wire variation model
Wires report_timing -⁠retime path_slew_propagation Path-based report with wire variation

1  From flat derates to statistics

1.1  The concept

Let us start with one cell. If we build the same cell on many chips, its delay is not one number. Tiny differences in transistor size, doping and thickness make each copy a little different. The delays spread around an average value.

The average is the mean, written μ. The spread is measured by the standard deviation, or sigma, written σ. A small sigma means most copies behave almost the same. A large sigma means the delay is hard to predict.

For example, assume a buffer has a mean delay of 100 ps and a sigma of 10 ps. Figure 2 shows the spread. About 99.7% of chips fall between μ − 3σ and μ + 3σ – here, between 70 ps and 130 ps.

Delay of one cell as a distribution
Most chips sit near the mean; few reach the tails
Delay of one cell as a distribution
Figure 2 One cell's delay spread, with mean 100 ps and sigma 10 ps (illustrative).What to notice: A 3-sigma delay of 130 ps is a rare case. Few chips have this cell this slow.

The term n sigma means mean + n × σ. At n = 3, this buffer's late delay is 100 + 3 × 10 = 130 ps. At n = 2, it is 120 ps. Thus, n is a confidence knob: a larger n covers more chips, but adds more margin.

1.2  A picture from daily life

Think of a trip to work in three legs: a bus, a train and a short walk. Each leg usually takes about 10 minutes. On a bad day, each leg can take 13 minutes.

If you plan for every leg being bad on the same day, you leave 39 minutes for the trip. However, that day is very rare. Usually one leg runs late while another runs early, and the delays partly cancel. A planner who knows this can leave about 35 minutes and still arrive on time almost every day.

SOCV is that smarter planner. Each cell delay is one leg of the trip. The path arrival is the whole trip.

Where the analogy breaks – read this twice
  • Real stages are not always independent. Cells close together can vary together, so the cancelling is a model, not a law.
  • Not every delay follows a perfect bell curve. The statistical model is a close approximation, not an exact copy of silicon.
  • The 99.7% figure is for one bell curve. A path with many stages follows the same rules only as a model.

1.3  Why it matters

A flat derate assumes every cell on a path hits its slow tail at once. On a long path, that is very unlikely. AOCV softens this with depth-based tables, but still applies fixed factors. Thus, flat methods add pessimism, and the pessimism grows with path depth.

Let us put a number on it. Take a path of 10 stages, each with sigma 10 ps, reported at 3 sigma:

  • Flat sum of tails: each stage adds 3 × 10 = 30 ps of margin, so the path gets 300 ps of margin.
  • Statistical sum: the path sigma is √10 × 10 = 31.6 ps, so the margin is 3 × 31.6 = 94.9 ps.

The flat method adds about three times as much margin on this path. Pessimism is not free. It creates false violations, which cost area, power and engineering days to fix. SOCV removes most of this pessimism, while still covering the variation that is real.

1.4  How the tool combines variation

Let us consider the path in Figure 3. Three stages sit between FF1 and FF2. Each stage has a mean of 100 ps and a sigma of 10 ps.

A three-stage path with mean and sigma per stage
Means add directly; sigmas combine as root-sum-square
A three-stage path with mean and sigma per stage
Figure 3 Each stage carries its own mean and sigma; the arrival at FF2/D combines them statistically.What to notice: The combined sigma, 17.3 ps, is much smaller than the simple sum of 30 ps.

The tool combines the stages with two rules:

  • Means add. The mean arrival is 100 + 100 + 100 = 300 ps.
  • Sigmas add as root-sum-square (RSS). Square each sigma, add the squares, then take the square root. The path sigma is √(10² + 10² + 10²) = √300 = 17.3 ps.

Now compare two ways to get a 3-sigma arrival, against a required time of 380 ps. Figure 4 draws both.

  • A – add n sigma per stage: 130 + 130 + 130 = 390 ps. The slack is 380 − 390 = −10 ps.
  • B – statistical: 300 + 3 × 17.3 = 352 ps. The slack is 380 − 352 = +28 ps.
Linear sum versus statistical sum
The same path, reported two ways at n = 3
Linear sum versus statistical sum
Figure 4 Adding each stage's 3-sigma delay gives 390 ps; combining statistically gives 352 ps.What to notice: Only method A fails. The 38 ps difference is pure pessimism, because three stages are rarely slow together.

Thus, the statistical answer is less pessimistic, and the gap grows as the path gets deeper. With one stage, both methods agree. With three stages, they differ by 38 ps. With ten stages, as we saw above, they differ by about 205 ps.

1.5  License

SOCV analysis needs the Tempus XL base license. It is not available on Tempus L. If your session runs on Tempus L, plan the license before you plan the analysis, as described in Getting Started with Tempus.

TakeawaySOCV stores a mean and a sigma per delay. Means add, sigmas add as root-sum-square, so deep paths lose most of their flat-derate pessimism.

2  Variation data: LVF and .socv files

The tool can only do statistics if the libraries carry sigma values. An ordinary library gives one delay per arc. SOCV needs a second number for each arc – its sigma.

There are two standard sources, plus a bootstrap path for experiments. Figure 5 shows how each one reaches the analysis.

Where sigma data comes from
Three sources, loaded per library, used per corner
Where sigma data comes from
Figure 5 LVF and .socv data are production sources; AOCV inference is for experiments.What to notice: Every source ends in library data with variation attached, then in SOCV analysis.

2.1  Liberty Variation Format (LVF)

LVF puts sigma tables directly inside the Liberty .lib file. The library supplier characterizes each cell many times and stores the spread next to the normal delay tables. The main attributes are:

  • ocv_sigma_cell_rise and ocv_sigma_cell_fall – sigma tables for the cell delay, for rising and falling outputs. Rise and fall are separate because the pull-up and pull-down transistors vary differently.
  • sigma_type – which side the table applies to: early, late or early_and_late. A library can give one table for both sides, or separate tables when the spread is not symmetric.
  • ocv_derate_distance_group – names a distance-based derate group for the cell.

Because the data lives in the .lib, a plain read_lib loads it. No extra option is needed.

2.2  The .socv side file

A .socv file is a separate text file that holds sigma values next to an ordinary library. Teams use it when the timing library has no LVF, or when the sigma data comes from a different source.

Each entry follows a logical order. It first names the object, then the timing arc, then the conditions, and finally the sigma values. Table 2 lists every attribute.

Table 2 Attributes of a .socv entry
Group Attribute What it describes
Object object_type The kind of object the entry applies to
Object object_spec Which object, for example a library cell
Arc pin, pin_direction The pin of the arc and its direction
Arc related_pin, related_direction The related (input or clock) pin and its direction
Arc type delay, slew, setup, hold, recovery or removal
Conditions when The logic condition of the arc
Conditions related_transition The transition on the related pin
Conditions output_loading The output load points of the table
Conditions constraint_transition The transition axis for timing-check entries
Value sigma The sigma values
Distance late_distance, late_distance_derate Distance points and derates for the late side
Distance early_distance, early_distance_derate Distance points and derates for the early side

Let us read the table as a story. An entry first picks a cell with object_spec. It then picks the arc from related_pin to pin, and its type, such as delay. Finally, it gives the conditions and the sigma values. The distance attributes then add separate derates that depend on distance, for the late and early sides. Figure 6 draws the same story as five steps.

Anatomy of a .socv entry
Object, arc, conditions, values, then distance terms
Anatomy of a .socv entry
Figure 6 Each entry narrows down from a cell to one arc under one condition, then gives its sigma values.What to notice: The type attribute decides what the sigma varies – a delay, a slew or a timing check.

Note that type covers more than delay. Sigma can also apply to slew and to setup, hold, recovery and removal checks. Thus, a full .socv file varies the timing checks too, not only the path delays.

2.3  Loading the data

The load command depends on the data format and on how the session is built. In a single-corner session, read_lib loads both forms:

LOADING SOCV DATA
tempus> read_lib -socv [list libA.socv libB.socv]    ;# .socv side files
tempus> read_lib [list libA-LVF.lib libB-LVF.lib]    ;# Liberty with LVF tables
  • read_lib -⁠socv – reads .socv side files. The timing libraries themselves are read as usual.
  • read_lib with LVF libraries – reads the timing data and the sigma tables together.

In an MMMC session, the .socv files belong to a library set. Each set then carries its own variation data for its corner:

ATTACHING .SOCV FILES TO A LIBRARY SET (MMMC)
tempus> create_library_set -name libsetMax \
          -timing [list lib1.lib lib2.lib] \
          -socv [list lib1.socv lib2.socv]   ;# timing libs plus sigma files
Note

A library set takes -⁠aocv or -⁠socv data, not both. Multi-mode multi-corner setup is covered in Multi-Mode Multi-Corner Analysis.

2.4  Bootstrapping from AOCV tables

Sometimes a team has AOCV tables but no sigma data yet. The tool can infer sigma from the AOCV tables. This is meant for experiments only, and it models delay variation only.

Why would anyone do this? It answers an early planning question: how much slack would SOCV give back? The team can measure that before paying for full sigma characterization.

Both settings must come before any library is read:

INFERRING SOCV DATA FROM AOCV TABLES (EXPERIMENTS ONLY)
tempus> set timing_library_infer_socv_from_aocv true        ;# build sigma from AOCV
tempus> set timing_library_scale_aocv_to_socv_to_n_sigma 3  ;# AOCV value treated as 3 sigma
tempus> read_lib -aocv myDerates.aocv.lib                   ;# or create_library_set -aocv
  • timing_library_infer_socv_from_aocv true – tells the tool to turn AOCV tables into sigma data as they are read.
  • timing_library_scale_aocv_to_socv_to_n_sigma – says how many sigmas an AOCV derate stands for. With 3, the tool treats each AOCV value as a 3-sigma point.
  • read_lib -⁠aocv or create_library_set -⁠aocv – then loads the AOCV tables in the usual way.

If the settings come after the libraries, the libraries are already loaded without sigma. The inference then has nothing to work on. Figure 7 shows the correct order and both limits.

Inferring sigma from AOCV tables
Two settings first, then the AOCV read
Inferring sigma from AOCV tables
Figure 7 The two globals must be set before any library is read; the result covers delay variation only.What to notice: The red card is the most common failure: a library read before the switch gets no sigma.
Common beginner mistake

Signing off with AOCV-inferred sigma. It covers delay variation only, so slew and timing-check variation are missing. Use it to estimate the gain from SOCV, then switch to real LVF or .socv data.

TakeawaySigma comes from LVF inside the .lib or from a .socv side file. AOCV inference is a quick experiment, set before any library is read.

3  Enabling and tuning SOCV analysis

3.1  Turning SOCV on

Loading sigma data does not change the analysis by itself. The tool still times with single numbers until SOCV is switched on. One command does that:

TURNING ON SOCV ANALYSIS
tempus> set_analysis_mode -socv true -analysisType onChipVariation -cppr both
                                       ;# statistical OCV with CPPR for setup and hold
  • -⁠socv true – use mean and sigma for every arc that has variation data. Arcs without data typically keep a sigma of 0.
  • -⁠analysisType onChipVariation – SOCV builds on on-chip variation analysis. Early and late values are still used for launch and capture, as in Analysis Modes, CPPR and AOCV.
  • -⁠cppr both – remove clock pessimism for both setup and hold. Without it, the shared part of the clock tree gets both an early and a late value, which adds pessimism.

3.2  The statistical min/max mode

When two paths meet at a gate, the tool must pick one arrival to carry forward. For setup it takes the later one, and for hold the earlier one. With single numbers, this is easy: 300 ps is later than 290 ps.

With distributions, "the later one" needs a rule. Let us say path A has mean 300 ps and sigma 5 ps. Path B has mean 290 ps and sigma 20 ps. At 3 sigma, A reaches 315 ps but B reaches 350 ps. Which one is "later" depends on how we look. The global timing_socv_statistical_min_max_mode sets this rule. Figure 8 draws the two arrivals.

Taking the later of two statistical arrivals
A narrow and a wide distribution meet at one gate
Taking the later of two statistical arrivals
Figure 8 Path A has the later mean, but path B has the later 3-sigma value, because its spread is four times wider.What to notice: Neither answer is wrong. The min/max mode decides which view of "later" the tool carries forward.
SETTING THE STATISTICAL MIN/MAX MODE
tempus> set timing_socv_statistical_min_max_mode mean_and_three_sigma_bounded
                                       ;# bound the result by mean and 3-sigma values

Two values are in common use, mean_and_three_sigma_bounded and three_sigma_bounded. As the names suggest, the first bounds the result using both the mean and the 3-sigma values. The second bounds it using the 3-sigma values. Many example scripts use three_sigma_bounded. Confirm the default and all allowed values with help in your installation before choosing.

3.3  Choosing n for reports

Reports show each value as mean + n × sigma. The command set_socv_reporting_nsigma_multiplier sets n for a check type, here setup, and can limit it to one view.

SETTING THE REPORTING N-SIGMA
tempus> set_socv_reporting_nsigma_multiplier -setup 2.5 -view std_max_setup
                                       ;# setup reports at mean + 2.5 sigma
  • -⁠setup 2.5 – the n used for setup checks. Other check types typically have their own option; confirm the list with help set_socv_reporting_nsigma_multiplier.
  • -⁠view std_max_setup – limits the setting to one analysis view, so each corner can use a different n.

Let us see the effect on the path from Figure 3. At n = 3, the arrival is 300 + 3 × 17.3 = 352 ps. At n = 2.5, it is 300 + 2.5 × 17.3 = 343.3 ps. The slack against 380 ps grows from 28 ps to 36.7 ps. Figure 9 marks both points on the arrival distribution.

The same arrival reported at two values of n
n = 2.5 and n = 3 on one distribution
The same arrival reported at two values of n
Figure 9 The path arrival has mean 300 ps and sigma 17.3 ps; n moves the reported point along the tail.What to notice: The distribution does not change. Only the point we report from moves, and with it the slack.

A smaller n reports less pessimistic numbers. However, it also covers fewer chips. Thus, n is a signoff decision, agreed with the foundry and the project team. It is not a knob to turn when a path fails.

3.4  Verbose statistical reports

By default, a report shows the final n-sigma values. To see the mean and sigma behind each value, turn on verbose mode:

SHOWING MEAN AND SIGMA IN REPORTS
tempus> set timing_report_enable_verbose_ssta_mode true   ;# add mean and sigma detail
Mentor's tip

Turn on verbose mode while you learn SOCV and while you debug a surprising path. It shows whether a large value comes from the mean or from the sigma. A large mean points to a slow cell or a long wire. A large sigma points to a cell with high variation, typically a weak or low-voltage cell.

TakeawayTurn SOCV on with set_analysis_mode -⁠socv true, choose the min/max mode, and set the reporting n for setup, per view if needed.

4  Reading SOCV reports

4.1  What the numbers mean

Every delay, slew and arrival in an SOCV report is shown as mean + n × sigma. However, the arrival column does not equal the sum of the delay column. This surprises almost everyone the first time.

Let us return to Figure 3 at n = 3. Each stage shows 130 ps. A beginner expects the arrival to reach 390 ps. The tool shows 352 ps instead, because it adds the means and combines the sigmas by RSS. The excerpt below walks through it stage by stage.

ILLUSTRATIVE OUTPUT - SOCV PATH AT N = 3 (PS, VALUES ROUNDED)
# Delay and Arrival columns show mean + 3 sigma
Pin        Delay   Arrival   Arr. mean   Arr. sigma
FF1/Q        -       0.0
U1/Y       130.0   130.0       100         10.0
U2/Y       130.0   242.4       200         14.1
U3/Y       130.0   352.0       300         17.3

Read it row by row:

  1. After U1, the arrival has mean 100 ps and sigma 10 ps. At 3 sigma, that is 130 ps.
  2. After U2, the mean is 200 ps. The sigma is √(10² + 10²) = 14.1 ps, so the arrival is 200 + 42.4 = 242.4 ps.
  3. After U3, the mean is 300 ps. The sigma is 17.3 ps, so the arrival is 300 + 52 = 352 ps.

Figure 10 draws these three rows as bars, next to the simple sums a beginner expects.

Why the arrival column is not the sum of the delays
Each row is the arrival after one stage, at n = 3
Why the arrival column is not the sum of the delays
Figure 10 The mean grows by 100 ps per stage, but the 3-sigma tail grows only from 30 to 42.4 to 52 ps.What to notice: The red dashed marks show the simple sums, 260 and 390 ps. The real arrivals stop short of them.
Common beginner mistake

Adding the delay column by hand and reporting a tool bug. In SOCV, arrivals never add exactly. Check the mean and sigma columns instead.

Figure 11 shows the same result as a timing diagram at the capture flop.

SOCV slack at the capture flop
The data arrival is a spread, not a single edge
SOCV slack at the capture flop
Figure 11 The mean arrival is 300 ps; the 3-sigma arrival is 352 ps, against a required time of 380 ps.What to notice: Slack is measured from the n-sigma arrival, not from the mean. The slack here is 28 ps.

In this illustrative case, the capture edge is at 400 ps and setup needs 20 ps. Thus, the required time is 380 ps. The slack is the gap between the 3-sigma arrival and the required time.

4.2  Report fields

With verbose mode on, these fields can appear in timing reports:

  • delay_mean, delay_sigma – the mean and sigma of each arc delay.
  • slew_mean, slew_sigma – the mean and sigma of each slew. Slew sigma matters because a varying slew changes the next stage's delay.
  • arrival_mean, arrival_sigma – the mean and sigma of each arrival, after RSS combining.

4.3  Timing properties

Scripts can read the same data as properties. This is useful when you want to sort paths by sigma, or flag cells with high variation. The names follow a pattern:

  • Arc properties: delay_{mean|sigma}_{max|min}_{rise|fall}. For example, delay_sigma_max_rise is the late sigma of a rising arc.
  • Pin properties: arrival_*, slack_{mean|sigma}_{max|min}[_{rise|fall}] and slew_*. For example, slack_mean_max is the mean of the setup slack.

The braces list the choices, and you pick one from each group. The rise/fall part of the slack name is optional, as the brackets show. Thus, slack_sigma_min_fall and slack_sigma_min are both valid names.

TakeawayReport values are mean + n × sigma, and arrivals are not sums of the delays. Use the mean and sigma fields and properties to see why.

5  What carries sigma, and what does not

5.1  The traps

SOCV is only as good as the inputs that carry variation. Several inputs and outputs carry no sigma, or carry only part of it. None of them raises an error. Table 3 lists them.

Table 3 Inputs and outputs with partial or no sigma
Item What happens in SOCV What to do
Values from SDC Sigma is 0 Do not expect SDC delays or uncertainty to vary statistically
set_timing_derate Scales both mean and sigma Use -⁠mean or -⁠sigma to derate only one
read_sdf Annotates the mean only Do not expect sigma on SDF-annotated arcs
write_sdf Writes mean + n × sigma Add -⁠no_variation for mean-only delays
report_delay_calculation Shows the mean by default Remember the value is not the n-sigma delay

Let us go through them one by one.

  • SDC values. An input delay or a clock uncertainty is a fixed number. It has no spread, so its sigma is 0. Any margin you want there must be in the mean value itself.
  • Derates. A derate multiplies a delay. By default it multiplies both parts. This is covered below with numbers.
  • SDF input. An SDF file holds one delay per arc. Thus, read_sdf can only set the mean, and annotated arcs lose their sigma.
  • SDF output. write_sdf writes the n-sigma value, which is pessimistic for simulation. Add -⁠no_variation to write the mean only.
  • Delay calculation report. report_delay_calculation shows the mean by default. Its number will not match the n-sigma value in report_timing.

5.2  The derate trap in numbers

Let us look at the derate trap. Assume a cell with mean 100 ps and sigma 10 ps, and a late derate of 1.05. Figure 12 compares the two outcomes at n = 3.

What a derate scales
Default derate versus a mean-only derate, at n = 3
What a derate scales
Figure 12 By default a 1.05 derate scales both parts; with -mean only the mean moves.What to notice: The default adds 6.5 ps at 3 sigma; the mean-only derate adds 5 ps.
  • Default: the mean becomes 105 ps and the sigma becomes 10.5 ps. At 3 sigma, the delay is 105 + 31.5 = 136.5 ps.
  • With -⁠mean: the mean becomes 105 ps and the sigma stays 10 ps. At 3 sigma, the delay is 105 + 30 = 135 ps.

The difference looks small on one cell. On a long path, the extra sigma adds up and can hide real slack. If you only wanted extra margin on the mean, use -⁠mean:

DERATING ONLY THE MEAN
tempus> set_timing_derate -late -cell_delay 1.05 -mean   ;# scale the mean, keep sigma

Similarly, -⁠sigma scales only the sigma. This is useful when the foundry asks for extra variation margin, but not a slower mean.

Common beginner mistake

Writing SDF from an SOCV session for gate-level simulation without thinking. The file holds mean + n × sigma delays. If the simulation needs nominal delays, use write_sdf -⁠no_variation.

5.3  Via variation

Vias also vary. A via is the small vertical link between two metal layers, and its resistance changes from chip to chip. A via variation file adds that effect to the parasitics. It is given per RC corner:

ADDING VIA VARIATION
tempus> read_spef -rc_corner rc_max -via_variation_file via_var.txt top.spef.gz
                                       ;# SPEF plus via variation for rc_max
  • -⁠rc_corner rc_max – the RC corner that the parasitics and the via data belong to.
  • -⁠via_variation_file via_var.txt – the file with the via variation values.

The same option exists on read_parasitics. In MMMC sessions, attach the file to the RC corner with create_rc_corner -⁠via_variation_file or update_rc_corner -⁠via_variation_file. It is better to attach it to the corner, because the data then follows the corner into every view that uses it. Figure 13 compares the two ways.

Two ways to add via variation
At read time, or on the RC corner
Two ways to add via variation
Figure 13 The same via file can be given when the parasitics are read, or attached to the RC corner in an MMMC setup.What to notice: In route B the corner carries the data, so no view can miss it.
TakeawaySDC values carry no sigma, SDF in carries the mean only, and derates hit both mean and sigma unless told otherwise. Know these before trusting a margin.

6  Wire variation

6.1  The concept

Cells are not the only things that vary. The width and thickness of each metal layer vary from chip to chip. A wider wire has lower resistance (R) and higher capacitance (C). Thus, wire R and C vary too, and each layer varies on its own.

Why on its own? Each metal layer is made in a separate set of process steps. One layer can come out slightly thick on a wafer, while the next comes out slightly thin. Thus, a net that uses two layers sees two separate sources of variation.

Let us consider the net in Figure 14. It starts on M2, climbs to M3 through a via and comes back down. If M3 is slightly thicker on one chip, only the M3 part of the net changes.

Per-layer wire variation
Each layer's resistance and capacitance vary separately
Per-layer wire variation
Figure 14 A net routed on M2 and M3, with variation values given per layer in a side file.What to notice: The tool needs to know which resistor sits on which layer. That is what the layer tags provide.

6.2  Why it is path-based only

Wire variation applies only in path-based analysis (PBA). It does not apply to graph-based analysis (GBA), exhaustive PBA or infinite PBA.

Here is the short version of the difference. GBA times every pin once, with worst-case slews merged from all paths. PBA then retimes selected paths one at a time, with the real slews of each path. Wire variation is applied during this retiming step. Path-based analysis is covered in detail in Path-Based and Robustness Analysis.

Because only retimed paths see wire variation, the path list matters. Report with a high -⁠nworst and a maximum slack above 0. Otherwise, a path that looks safe in GBA could hide a wire-variation violation. For example, a path with +5 ps of GBA slack is not retimed if the slack limit is 0. Wire variation could have pushed it to −3 ps. Figure 15 shows this case.

Which paths get retimed
The maximum slack limit decides which paths see wire variation
Which paths get retimed
Figure 15 Four paths with their graph-based slack; only paths inside the slack limit are retimed with wire variation.What to notice: With a limit of 0, only P1 is retimed. A limit of +15 ps also catches P2, which fails after retiming.

6.3  The inputs

Wire variation needs two inputs.

1. An extended SPEF. A normal SPEF lists resistors and capacitors, but not the layer each one is on. The tool needs the layer to apply the right variation. Thus, the parasitics must record the layer of each resistor:

  • A *LAYER_MAP section maps layer numbers to layer names.
  • Each resistor carries a $LAYER= tag that names its layer.

2. A wire variation side file. It lists the variation per layer. Table 4 lists its fields.

Table 4 Fields of the wire variation side file
Field Meaning
version Format version of the file
layer_name The layer the following values apply to
resistance_meanshift, resistance_stddev Shift of the mean and standard deviation of resistance
capacitance_meanshift, capacitance_stddev Shift of the mean and standard deviation of capacitance
coupling_capacitance_meanshift, coupling_capacitance_stddev The same for coupling capacitance

Each quantity has two numbers, and they do different jobs:

  • A mean shift moves the center of the distribution. It says the layer is, on average, a little different from the extracted value.
  • A standard deviation sets the spread around that center. It feeds the sigma of the wire delay.

If the coupling values are missing for a layer, the tool uses that layer's capacitance values for coupling as well. Thus, a short side file still works, but coupling then varies with the same values as ground capacitance.

6.4  The flow

Figure 16 shows the six main steps of a wire variation run. Step 4 also notes the optional clock-wire setting.

The wire variation flow
Six steps from parasitics to a path-based report
The wire variation flow
Figure 16 Read the extended parasitics, turn on SOCV, update, enable wire variation, choose the model and report with PBA.What to notice: The last step must be path-based. A plain graph-based report shows no wire variation.
WIRE VARIATION RUN
tempus> read_spef -extended top.spef.gz -wire_variation_file wireVar.txt
                                                   ;# layer-tagged SPEF plus side file
tempus> set_analysis_mode -socv true               ;# wire variation builds on SOCV
tempus> update_timing -full                        ;# full timing update
tempus> set timing_enable_wire_variation true      ;# turn wire variation on
tempus> set timing_disable_retime_clock_path_slew_propagation false
                                                   ;# let clock wires vary too
tempus> set_wire_variation_mode -correlation_type statistical \
          -rc_correlation_factor -1                ;# statistical model, R-C correlation -1
tempus> report_timing -retime path_slew_propagation ;# path-based report with wire variation

Let us walk through the script, using the step numbers of Figure 16:

  1. read_spef -⁠extended ... -⁠wire_variation_file – reads the layer-tagged parasitics and the per-layer variation in one step.
  2. set_analysis_mode -⁠socv true – wire variation produces sigma values, so it needs statistical analysis.
  3. update_timing -⁠full – a full update builds the graph-based timing that PBA starts from.
  4. timing_enable_wire_variation true – turns wire variation on for retimed paths. The optional timing_disable_retime_clock_path_slew_propagation false belongs to this step. By default, clock-path wires do not vary in retiming; setting this global to false adds variation to clock wires as well.
  5. set_wire_variation_mode – chooses the model, explained next.
  6. report_timing -⁠retime path_slew_propagation – runs PBA on the reported paths, where wire variation is applied.

6.5  Choosing the model

The command set_wire_variation_mode has two main options.

  • -⁠rc_correlation_factor – the correlation between the R and C variations. The allowed values are -⁠1 and 1. Physically, a wider wire lowers R but raises C, so R and C often move in opposite directions. A value of -⁠1 typically models that case. Confirm its exact meaning with help set_wire_variation_mode.
  • -⁠correlation_type – how the layer variations are combined: statistical or binomial.

The two correlation types behave very differently:

  • Statistical – the tool combines the layer variations and the cell sigma by RSS. The result is smooth and less pessimistic.
  • Binomial – the tool evaluates the worst of 2ⁿ corners, where each layer is pushed up or down. This is more pessimistic and more like a corner-based check.

Figure 17 compares the two correlation types, and lists the options that apply only to binomial mode.

Statistical versus binomial wire variation
Two ways to combine variation from several layers
Statistical versus binomial wire variation
Figure 17 Statistical uses root-sum-square over layers and the cell; binomial evaluates every layer corner and keeps the worst.What to notice: Binomial grows as 2ⁿ with the number of layers n. With two layers it checks four corners.

Let us compare them on a simplified example. A stage has a cell sigma of 12 ps. Its M2 part adds 4 ps of wire sigma, and its M3 part adds 3 ps.

  • Statistical: √(12² + 4² + 3²) = √169 = 13 ps.
  • Binomial: the worst layer corner pushes both layers the slow way, giving 4 + 3 = 7 ps of wire effect. With the default RSS combination with the cell, √(12² + 7²) = 13.9 ps.

These numbers are illustrative and simplified. They show the trend: binomial is more pessimistic, because the worst corner adds the layers linearly.

Binomial mode has two extra options:

  • -⁠wire_cell_variation_correlation 1 – treat wire and cell variation as fully correlated, so they add linearly. The default is 0, which combines them by RSS. In the example above, a value of 1 would give 12 + 7 = 19 ps.
  • -⁠use_nsigma_slew_for_timing_check true – use the n-sigma slew for timing checks. The default is false. This typically adds slew variation to setup and hold checks, which is more pessimistic.
BINOMIAL MODEL WITH ITS EXTRA OPTIONS
tempus> set_wire_variation_mode -correlation_type binomial \
          -wire_cell_variation_correlation 1 \
          -use_nsigma_slew_for_timing_check true   ;# worst corner, linear wire+cell
Mentor's tip

Start with the statistical model, because it matches how SOCV treats cells. Use binomial when the signoff rules ask for a corner-style check, and expect smaller slack.

6.6  Reading the results

Wire variation adds its own report fields:

  • retime_slew_wire_stddev – the wire part of the slew standard deviation.
  • retime_delay_wire_stddev – the wire part of the delay standard deviation.
  • arrival_wire_stddev – the wire part of the arrival standard deviation.

These fields answer one question: how much of the variation comes from metal? Compare arrival_wire_stddev with the total arrival sigma. A large share means the path is sensitive to wires, not cells.

To see the delay calculation details at chosen pins of a retimed path, use report_timing -⁠retime_delaycal_pins with the pin list.

DELAY CALCULATION DETAIL ON RETIMED PINS
tempus> report_timing -retime path_slew_propagation -retime_delaycal_pins {U2/A U3/A}
                                       ;# show retimed delay calculation at two pins
Common beginner mistake

Expecting wire variation in a normal report_timing. Without -⁠retime, the report is graph-based, and wire variation does not apply.

TakeawayWire variation needs layer-tagged SPEF, a per-layer side file, SOCV and path-based reporting. Statistical blends layers; binomial keeps the worst layer corner.

7  Worked example: a statistical signoff run

Let us join the pieces in one session. The assumptions are written as comments at the point of use. After each step, we note what to check before moving on.

The task. A block has one setup view, std_max_setup. The libraries ship with LVF. The foundry asks for setup at 3 sigma, and the project wants per-layer wire variation on the critical paths.

Step 1 – load libraries with variation

STEP 1 - LIBRARIES WITH LVF
# Assuming LVF tables are inside both .lib files
tempus> read_lib [list std_ss-LVF.lib mem_ss-LVF.lib]   ;# LVF is read with the timing data

Because LVF lives inside the .lib, no -⁠socv option is needed. Check the log for library warnings. A library without LVF typically leaves its cells with a sigma of 0, and no error is raised.

Step 2 – load the design and parasitics

STEP 2 - DESIGN AND EXTENDED PARASITICS
tempus> read_verilog top.v                ;# netlist
tempus> set_top_module top                ;# link the design
tempus> read_sdc top.sdc                  ;# constraints (these values carry no sigma)
tempus> read_spef -extended top.spef.gz -wire_variation_file wireVar.txt
                                          ;# layer tags plus per-layer variation

The SPEF must come from an extraction run that writes layer tags. If the extended form is missing, wire variation has no layers to work with.

Step 3 – turn on SOCV and set reporting

STEP 3 - SOCV SETTINGS
tempus> set_analysis_mode -socv true -analysisType onChipVariation -cppr both
                                          ;# statistical OCV with CPPR
tempus> set timing_socv_statistical_min_max_mode mean_and_three_sigma_bounded
                                          ;# rule for statistical max and min
tempus> set_socv_reporting_nsigma_multiplier -setup 3 -view std_max_setup
                                          ;# foundry asks for 3 sigma on setup
tempus> set timing_report_enable_verbose_ssta_mode true   ;# show mean and sigma

Here n is 3 because the foundry asked for it. It is not tuned to make paths pass.

Step 4 – graph-based check first

STEP 4 - GRAPH-BASED SOCV REPORT
tempus> update_timing -full               ;# full update with SOCV
tempus> report_timing -nworst 50          ;# GBA view of the worst paths

Assume a path shows a mean arrival of 300 ps and a sigma of 17.3 ps. At n = 3, the arrival is 352 ps. With a required time of 380 ps, the slack is +28 ps.

Before going on, check two things in the verbose fields. First, every cell on the path should have a non-zero sigma. Second, the arrival should match mean + 3 × sigma, not the sum of the delays.

Step 5 – add wire variation on retimed paths

STEP 5 - WIRE VARIATION WITH PBA
tempus> set timing_enable_wire_variation true                ;# enable wire variation
tempus> set timing_disable_retime_clock_path_slew_propagation false
                                                             ;# vary clock wires too
tempus> set_wire_variation_mode -correlation_type statistical \
          -rc_correlation_factor -1                   ;# statistical model
tempus> report_timing -retime path_slew_propagation -nworst 50
                                                             ;# PBA with wire variation

Now check the arrival_wire_stddev field on the critical path. Assume it is 9 ps, while the total arrival sigma grows to about 19.5 ps (illustrative). Assume also that no layer has a mean shift. Then the slack at 3 sigma drops by about 6.6 ps, from +28 ps to about +21 ps.

If the wire part is a large share of the total sigma, the path is sensitive to metal variation. Thus, a reroute on a different layer may help more than a cell upsize.

Note

In practice, add a maximum slack limit above 0 to the PBA report. This keeps nearly-passing paths in the list, since wire variation can push them negative.

8  Common mistakes and how to catch them

Table 5 gathers the mistakes from this chapter. Each row gives the symptom you would see first.

Table 5 Common SOCV and wire variation mistakes
Symptom Likely cause Fix
SOCV cannot be enabled Session runs on Tempus L Use Tempus XL
Sigma is zero on every cell Libraries have no LVF and no .socv was loaded Load LVF libraries or add read_lib -⁠socv
AOCV inference has no effect Settings applied after libraries were read Set both inference globals before any read_lib
Arrival is not the sum of the delays Expected behavior: means add, sigmas RSS Read arrival_mean and arrival_sigma
Derate changed the sigma too set_timing_derate scales mean and sigma Add -⁠mean or -⁠sigma
SDF-annotated arcs show no variation read_sdf annotates the mean only Expect it, or calculate those arcs instead
Simulation delays look pessimistic write_sdf wrote mean + n × sigma Use write_sdf -⁠no_variation
report_delay_calculation disagrees with the report It shows the mean by default Compare with the mean field, not the n-sigma value
No wire variation in reports Graph-based report, or wire variation not enabled Enable it and report with -⁠retime path_slew_propagation
Clock wires never vary Clock-path slew propagation in retiming is off by default Set the clock retiming global from Section 6.4 to false
Wire variation hits a near-passing path missed by the report Low -⁠nworst or slack limit at 0 Use a high -⁠nworst and a maximum slack above 0

9  Interview preparation

Beginner
Q1. What do mean and sigma represent for a cell delay?

The mean is the average delay across chips; sigma measures how widely the delay spreads.

  • A 3-sigma delay is mean + 3 × sigma.
  • For mean 100 ps and sigma 10 ps, the 3-sigma delay is 130 ps.
  • About 99.7% of chips fall within ±3 sigma of the mean.
What is being tested:the basic statistical vocabulary of SOCV.
Beginner
Q2. Why is SOCV less pessimistic than a flat derate?

Because stage variations partly cancel: means add, but sigmas add as root-sum-square.

  • A flat derate assumes every stage is slow at once.
  • The gap grows with depth. Take 10 stages with sigma 10 ps each, at 3 sigma.
  • The flat margin is 300 ps, but the statistical margin is only about 95 ps.
What is being tested:the core reason SOCV exists.
Intermediate
Q3. Three stages each have mean 100 ps and sigma 10 ps. What is the 3-sigma arrival?

About 352 ps: mean 300 ps plus 3 × 17.3 ps.

  • The path sigma is √(3 × 10²) = 17.3 ps.
  • Adding 130 ps three times gives 390 ps, which is pessimistic.
  • Against a required time of 380 ps, the slack is +28 ps instead of −10 ps.
What is being tested:the ability to do the RSS calculation by hand.
Intermediate
Q4. In an SOCV report, the arrival is less than the sum of the delays. Is that a bug?

No. Each value is mean + n × sigma, and sigmas do not add linearly.

  • Check arrival_mean and arrival_sigma with verbose mode on.
  • The mean parts of the delays add up exactly; only the sigma parts do not.
What is being tested:reading SOCV reports correctly.
Beginner
Q5. Where can SOCV sigma data come from?

From Liberty LVF tables, or from a separate .socv file loaded with read_lib -⁠socv.

  • In MMMC, .socv files attach to a library set with create_library_set -⁠socv.
  • AOCV tables can be converted for experiments, covering delay variation only.
What is being tested:knowledge of variation data formats.
Intermediate
Q6. You set the AOCV inference globals, but sigma is still zero. Why?

The globals were set after the libraries were read; they must come before any library read.

  • Inference happens while the AOCV tables are read.
  • Once libraries are loaded without sigma, setting the globals later changes nothing.
What is being tested:order-dependent setup.
Intermediate
Q7. What does set_socv_reporting_nsigma_multiplier control?

The n used to report values as mean + n × sigma, for a check type such as setup, optionally per view.

  • Example: -⁠setup 2.5 -⁠view std_max_setup.
  • A lower n gives more slack but covers fewer chips, so n is a signoff decision.
What is being tested:control of reporting confidence.
Advanced
Q8. Which inputs or outputs carry no sigma, or only part of it, in SOCV?

SDC values have sigma 0, read_sdf annotates the mean only, and report_delay_calculation shows the mean by default.

  • set_timing_derate scales both mean and sigma unless -⁠mean or -⁠sigma is used.
  • write_sdf writes mean + n × sigma unless -⁠no_variation is used.
  • None of these raises an error, so they must be known in advance.
What is being tested:awareness of hidden traps in a statistical flow.
Intermediate
Q9. Why does a normal report_timing show no wire variation?

Wire variation applies only to path-based analysis, not to graph-based results.

  • Report with -⁠retime path_slew_propagation.
  • It also does not apply to exhaustive or infinite PBA.
  • Use a high -⁠nworst and a slack limit above 0 so near-passing paths are retimed.
What is being tested:knowing where wire variation is applied.
Advanced
Q10. What does wire variation need in the parasitics, and in the side file?

An extended SPEF with a *LAYER_MAP and $LAYER= tags, plus per-layer mean shift and standard deviation for R, C and coupling C.

  • The layer tags tell the tool which variation applies to each resistor.
  • Missing coupling values fall back to the capacitance values.
What is being tested:the data requirements of the flow.
Advanced
Q11. Compare the statistical and binomial wire variation models.

Statistical combines layer and cell variation by RSS; binomial takes the worst of 2ⁿ layer corners.

  • Binomial is more pessimistic, because the worst corner adds layers linearly.
  • Binomial can also correlate wire and cell variation fully with -⁠wire_cell_variation_correlation 1.
  • Its default of 0 combines wire and cell by RSS.
What is being tested:choosing a model and understanding its pessimism.

Chapter recap

Key takeaways

  • SOCV stores each delay as a mean and a sigma. Means add, sigmas add as root-sum-square.
  • Deep paths gain the most, because flat derates assume every stage is slow at once.
  • Sigma comes from LVF or .socv data. AOCV inference is for experiments, set before any library read.
  • Reports show mean + n × sigma, and arrivals are not sums of the delay column.
  • SDC values, SDF input and derates need care, because they carry no sigma or affect it in hidden ways.
  • Wire variation adds per-layer R and C effects, but only in path-based analysis.

Command recap

Table 6 Command recap
Command or setting Purpose
read_lib -⁠socv, create_library_set -⁠socv Load .socv sigma data
timing_library_infer_socv_from_aocv, timing_library_scale_aocv_to_socv_to_n_sigma Infer sigma from AOCV tables
set_analysis_mode -⁠socv true -⁠analysisType onChipVariation -⁠cppr both Turn on SOCV
timing_socv_statistical_min_max_mode Rule for statistical max and min
set_socv_reporting_nsigma_multiplier n used in reports, for setup and per view
timing_report_enable_verbose_ssta_mode Show mean and sigma detail
set_timing_derate -⁠mean, -⁠sigma Derate only one part
write_sdf -⁠no_variation Mean-only SDF
-⁠via_variation_file Via variation on SPEF or RC corner
read_spef -⁠extended -⁠wire_variation_file Layer-tagged SPEF plus wire variation data
timing_enable_wire_variation Turn on wire variation
timing_disable_retime_clock_path_slew_propagation Set to false to vary clock wires
set_wire_variation_mode Model, R-C correlation and binomial options
report_timing -⁠retime path_slew_propagation, -⁠retime_delaycal_pins PBA report and delay-calculation detail

Compact glossary

Table 7 Terms used in this chapter
Term Meaning
Mean (μ) The average delay across many chips
Sigma (σ) Standard deviation; how widely the delay spreads
n sigma Mean + n × sigma, the value shown in reports
RSS Root-sum-square: the square root of the sum of squares
SOCV Statistical on-chip variation: timing with mean and sigma
LVF Liberty Variation Format: sigma tables inside a .lib
.socv file A side file holding sigma values for a library
Via variation Chip-to-chip variation of via resistance, given per RC corner
Wire variation Per-layer variation of wire resistance and capacitance
Mean shift A change in the center of a layer's R or C distribution
Extended SPEF SPEF with a layer map and per-resistor layer tags
Binomial model Wire model that keeps the worst of 2ⁿ layer corners
GBA Graph-based analysis: each pin timed once with merged worst slews
PBA Path-based analysis: selected paths retimed with their own slews

Practical perspective

On advanced nodes, SOCV is often the default signoff method. The usual fight is not about the commands. It is about the inputs. Does every library have LVF? Which n does the foundry require? Do SDF or derates quietly drop sigma?

Thus, check the data first and the margins second. A missing sigma looks like good news in a report, which is exactly why it is dangerous. Wire variation then shows which critical paths depend on metal, which guides reroutes during ECO.

What comes next

So far we have timed one view at a time. Real signoff covers many corners and modes together. In the next chapter, Multi-Mode Multi-Corner Analysis, we build library sets, RC corners, delay corners and views. Then we run them concurrently or distributed.