Today, the semiconductor market is flooding with demands of high speed, low power, and highly reliable SoCs, due to the rapid growth of IoT, networking, AI, and more.

To accommodate more functionality on a single chip, the semiconductor industry is shrinking down the transistor technology at every node. But this technology gain comes with a great deal of challenges, in terms of reliability, manufacturability, and design complexity. One of the primary challenges is variation in manufacturing parameters, namely random and systematic variations.

To model these parameter variations, a few engineers came up with the on-chip variation (OCV) model. The concept of OCV was first introduced in technology nodes above 90nm. The fundamental idea behind OCV is to apply global derates on the whole design irrespective of the type of cells, its individual variation or its slew-load conditions. But this simple concept became ineffective in lower technology nodes. Unfortunately, global derates make the design too optimistic for shorter paths and too pessimistic for longer paths. Subsequently, expected results are not accurate and reliable enough, which affects the performance of the chip.

In order to overcome the extra pessimism added due to OCV, advanced on-chip variation (AOCV) technique was introduced for nodes below 65nm. AOCV technique adds derates in the design based on the logic depth and distance of the cell in the timing path. The depth of the cell models the random variation component, while distance (location) of the cell in the path models systematic variation of the cells. But below 40nm, this method too becomes inaccurate as it cannot further reduce pessimism. To address the shortcomings of AOCV, parametric on-chip variation (POCV) evolved.

POCV
In POCV, instead of applying a specific derating factor to a cell, cell delay is calculated based on a delay variation of that cell. This delay variation (σ) for each cell is obtained through Monte-Carlo HSPICE simulation. The variation value σ is a unique value specific to that library cell.

Some of the terminologies used for POCV analysis are briefly explained below:

Normal distribution curve: Data distribution for any entity can be spread out in different ways. [4] In a normal distribution curve, the data tends to be around a central value with no bias on the left or right, as shown in Figure 1.

For POCV, it is assumed that the nominal delay (expected delay) value of a cell follows a normal distribution curve. The delay value of the cell is calculated after many experiments and their mean is taken as the nominal delay.

Figure 1 Normal distribution curve

Standard deviation (σ): For a normal distribution curve, data tends to be denser in the center and less dense on the edges as shown in Figure 1. In order to measure the variations from the mean, the metric named standard deviation (σ) is used. It measures how far any data value deviates from the mean. If the delay values of the cell deviate from the nominal value to the left or right by any amount, then more changes in the timing of that cell are expected. This deviation of the delay from its expected value is modeled using σ, as shown in Figure 2.

Figure 2 Standard deviation of the data from the mean

The normal distribution curve obeys the following rules [5]:

  • About 68% of the area under the curve falls within 1σ of the mean.
  • About 95% of the area under the curve falls within 2σ of the mean.
  • About 99.7% of the area under the curve falls within 3σ of the mean.

POCV analysis

POCV uses a nominal value for modeling random variations on the die instead of using min-max delay values for timing arc. When using min-max values to model delay variations, there is a probability of actual delay falling anywhere between the min-max extremes. While in POCV, there are maximum chances of the delay occurring near the nominal value and fewer chances of falling farther away from it. POCV calculates the arrival time and required time statistically instead of using the min-max values. Hence, the results are less pessimistic and more accurate. [1]

POCV analysis uses nominal delay (μ) and variation (σ) for timing analysis in the following way:

  1. The tool takes the value of σ from the timing library or an external file containing POCV coefficient C.
  1. Each arc timing is then calculated statistically as the total of the nominal delay and the variation.
  1. The tool then calculates the delay of the path by statistically combining these arc delays and then checks whether the chip works at the expected frequency.

By default, the tool performs POCV analysis at three standard deviations (3σ) from the mean. One can specify the number of standard deviations to be used for delay calculation. Increasing the value of standard deviations tightens the timing requirement making it more pessimistic.

POCV data-types

The input for the delay variation σ can be provided to the tool for POCV analysis in two different formats: [2]

Using single coefficient (C): This external file contains the coefficients for delay variation. It applies a single coefficient value C for each library cell, hierarchical cell or design.  The coefficient is the value of the variation at 1 standard deviation from the nominal delay. Monte Carlo analysis is used to get the POCV coefficients. There is only one value of C for each timing arc of the cell irrespective of the input transition and output load.

The delay variation σ = C * nominal delay [1]

Example of POCV coefficient file:

version: 4.0

ocvm_type: pocvm

object_type: lib_cell

rf_type: rise fall

delay_type: cell

derate_type: early

object_spec: */INV*

coefficient: 0.0693

ocvm_type: pocvm

object_type: lib_cell

rf_type: rise fall

delay_type: cell

derate_type: late

object_spec: */INV*

coefficient: 0.0693

Library variation format (LVF):[2] The information of POCV variation is directly provided in the library itself. The variations are loaded in the design by loading the library. It contains the value of variation 𝛔 for multiple slew-load conditions of the cell instead of a single value of C. Using this format greatly improves the accuracy of the design at 16nm and below nodes. Similar to cell delay check, LVF supports POCV coefficients for transition and setup-hold checks as well.

Example of POCV LVF format for cell delay:

ocv_sigma_cell_rise (delay_template_7x7) {

sigma_type: early;

index_1 ("0.002, 0.00461012, 0.0106266, 0.0244949, 0.0564622, 0.130149, 0.3");

index_2 ("0.0001, 0.00250277, 0.00625692, 0.0156423, 0.0391057, 0.0977643, 0.244411");

values (\

"0.000434399, 0.000455441, 0.000498544, 0.000643925, 0.00110701, 0.002339, 0.00552623", \

"0.000465907, 0.000485971, 0.000527015, 0.000666568, 0.00111898, 0.002343, 0.00552553", \

"0.000559323, 0.000576732, 0.00061235, 0.000736174, 0.00115814, 0.00235789, 0.0055262", \

"0.000833633, 0.000845754, 0.000870591, 0.00096033, 0.00130148, 0.00242147, 0.00553974", \

"0.00155978, 0.00156506, 0.00157629, 0.00161976, 0.00181337, 0.00270592, 0.00563372", \

"0.00297234, 0.00297538, 0.0029818, 0.00300669, 0.00312188, 0.00374041, 0.00625192", \

"0.00634754, 0.00635019, 0.00635524, 0.00637265, 0.00644564, 0.00682909, 0.00862102" \

          );

        }

        ocv_sigma_cell_rise (delay_template_7x7) {

          sigma_type: late;

          index_1 ("0.002, 0.00461012, 0.0106266, 0.0244949, 0.0564622, 0.130149, 0.3");

          index_2 ("0.0001, 0.00250277, 0.00625692, 0.0156423, 0.0391057, 0.0977643, 0.244411");

   Values (\

   "0.000437286, 0.000457105, 0.000497985, 0.000637304, 0.00108629, 0.00232209, 0.00552685", \

   "0.000472301, 0.000491262, 0.000530344, 0.000664675, 0.0011057, 0.00233411, 0.0055369", \

   "0.000574762, 0.000591464, 0.000625872, 0.000746679, 0.00116358, 0.00236878, 0.00556326", \

   "0.000870467, 0.00088302, 0.000908713, 0.00100148, 0.0013543, 0.00248368, 0.0056407", \

   "0.00164304, 0.00165109, 0.00166724, 0.00172592, 0.00197057, 0.0029014, 0.0059028", \

   "0.00310016, 0.00310792, 0.00312195, 0.00316698, 0.00333794, 0.00397815, 0.00652495", \

   "0.00660483, 0.00661643, 0.00663544, 0.00668762, 0.00684624, 0.00721525, 0.0089517" \

          );

 

 

       ocv_sigma_rise_transition (delay_template_7x7) {

          sigma_type: early;

          index_1 ("0.002, 0.00461012, 0.0106266, 0.0244949, 0.0564622, 0.130149, 0.3");

          index_2 ("0.0001, 0.00250277, 0.00625692, 0.0156423, 0.0391057, 0.0977643, 0.244411");

          values (\

     "0.000100569, 0.000134978, 0.000229249, 0.00050401, 0.00121671, 0.002993, 0.00743829", \

    "0.000100892, 0.000134484, 0.000227994, 0.000501646, 0.00121207, 0.00298969, 0.00743821", \

    "0.00010187, 0.000133514, 0.000225182, 0.000496229, 0.00120143, 0.00298208, 0.00743812", \

    "0.000105258, 0.000132198, 0.000219147, 0.00048392, 0.00117714, 0.00296469, 0.00743831", \

    "0.000118334, 0.000133252, 0.000207293, 0.000456511, 0.00112259, 0.00292568, 0.00744099", \

    "0.000168981, 0.000168312, 0.000220293, 0.000457211, 0.00113847, 0.00304919, 0.00783808", \

    "0.000309985, 0.00029017, 0.000296889, 0.000480193, 0.00118862, 0.0033512, 0.00879209" \

);

        }

Typically, index_1 denotes input transition and index_2 denotes output load.

Example of POCV LVF format for cell transition:

        ocv_sigma_rise_transition (delay_template_7x7) {

          sigma_type : late;

          index_1 ("0.002, 0.00461012, 0.0106266, 0.0244949, 0.0564622, 0.130149, 0.3");

          index_2 ("0.0001, 0.00250277, 0.00625692, 0.0156423, 0.0391057, 0.0977643, 0.244411");

          Values (\

    "0.000101973, 0.000136203, 0.000229893, 0.000503623, 0.00121432, 0.00298556, 0.00741802", \

    "0.000101225, 0.000134939, 0.00022865, 0.000502868, 0.00121478, 0.00298412, 0.00741178", \

    "9.97202e-05, 0.000132145, 0.000225846, 0.000501159, 0.00121589, 0.00298082, 0.00739744", \

    "9.75555e-05, 0.000126401, 0.000219724, 0.000497394, 0.00121862, 0.00297336, 0.00736471", \

    "9.97943e-05, 0.000118493, 0.000208207, 0.000489711, 0.00122584, 0.00295674, 0.00729086", \

    "0.000140894, 0.000144669, 0.000213026, 0.000477088, 0.00120078, 0.0029501, 0.00733229", \

    "0.000284099, 0.000264038, 0.000279106, 0.000470411, 0.00116213, 0.0029572, 0.00747957" \

          );

Typically, index_1 denotes input transition and index_2 denotes output load.

If both data-types are present in the design then by default the file with POCV single coefficient has higher precedence than POCV slew-load table in LVF format.

POCV delay calculation

POCV works on a path by path basis. The delay is calculated as follows:

Delay of cell = Nominal delay +/- Variation                                                - - - > equation (1)

                      = Nominal delay +/- (C*Nominal delay)*N                          - - - > equation (2)

                          where C = POCV coefficient

                          N = No. of standard deviations

The value of variation is added or subtracted from the nominal delay for maximum and minimum delay analysis respectively. [2]

The detailed calculation for POCV is explained with the help of Primetime timing report as follows:

Sigma: 3.0

 

                                                              --------- Incr -------------   ------- Path ---------

Point                                                    Mean   Sensit Corner   Value   Mean   Sensit    Value

--------------------------------------------------------------------------------------

clock clk (rise edge)                                                                0.00                              0.00

clock network delay (propagated)      0.379   0.005   0.393    0.393   0.379   0.005     0.393        

reg/phi                                                 0.000   0.000   0.000   0.000   0.379   0.005     0.393 r             

reg/q                                                    0.098   0.004   0.111   0.103   0.477   0.006 &   0.496 f                                               

NAND/i2                                            0.004   0.000   0.005   0.004   0.482   0.006 &   0.501 f

NAND/o                                             0.102 0.008   0.126    0.113   0.584   0.010 &   0.614 r

NOR/i0                                               0.007   0.000   0.008    0.007   0.591   0.010 &   0.622 r

NOR/o                                                0.143   0.010   0.175    0.157   0.735   0.015 &   0.778 f

AOI/i1_0                                            0.024   0.001   0.028    0.025   0.759   0.015 &   0.803 f

AOI/o                                                 0.112   0.013   0.152    0.127   0.871   0.020 &   0.930 r

NAND1/i3           &nnbsp;                             0.010   0.000   0.010    0.010   0.881   0.020 &   0.940 r

NAND1/o                                          0.083   0.005   0.100    0.086   0.964   0.020 &   1.025 f

NOR1/i3                                            0.018   0.000   0.018    0.018   0.982   0.020 &   1.044 f

NOR1/o                                             0.161   0.008   0.185    0.166   1.143   0.022 &   1.209 r

NAND2/i2                                         0.061   0.000   0.061    0.061   1.204   0.022 &   1.270 r

NAND2/o                                          0.087   0.009   0.114    0.092   1.290   0.024 &   1.362 f

AOI1/i2                                              0.002   0.000   0.002   0.002   1.293   0.024 &   1.364 f

AOI1/o                                               0.072   0.004   0.084   0.073   1.365   0.024 &   1.437 f

BUF1/i                                               0.001   0.000   0.001   0.001   1.365   0.024 &   1.438 f

BUF1/o                                              0.085   0.004   0.098   0.086   1.450   0.025 &   1.524 f

BUF2/i                                               0.015   0.001   0.019   0.015   1.465   0.025 &   1.539 f

BUF2/o                                              0.076   0.005   0.092   0.078   1.541   0.025 &   1.617 f

BUF3/i                                               0.013   0.001   0.017   0.014   1.555   0.025 &   1.630 f

BUF3/o                                              0.098   0.006   0.115   0.100   1.653   0.026 &   1.730 f

reg/d                                                   0.014   0.001   0.018   0.014   1.667   0.026 &   1.745 f

data arrival time                                                                                 1.667   0.026        1.745

 

 

clk (rise edge)                                  1.538                              1.538   1.538   0.000     1.538

clock network delay (propagated)    0.349   0.005   0.335      0.335   1.887   0.005     1.873

clock reconvergence pessimism       0.006 -0.004   0.018      0.012   1.893   0.003     1.886

inter-clock uncertainty                    -0.093                             -0.093   1.800   0.003     1.793

reg/phi                                              0.000   0.000   0.000      0.000   1.800   0.003     1.793

library setup time                            -0.046   0.006  -0.063    -0.057   1.754   0.006     1.735

data required time                                                                               1.754   0.006     1.735

  -------------------------------------------------------------------------------------------------------------------------

data required time                                                                               1.754   0.006     1.735

data arrival time                                                                                  -1.667   0.026    -1.745

  -------------------------------------------------------------------------------------------------------------------------

statistical adjustment                                                               0.017                              0.007

slack (MET)                                                                                        0.087   0.027     0.007

                                                               

Some of the terms in the timing report are explained as below:

Incr Column:  Delay calculation for that specific stage

Path Column:  Total delay of the path up to that stage

Mean             :  Nominal delay (Delay without POCV coefficient applied)

Sensit            :  Sensitivity (Value of variation due to POCV coefficient at 1 sigma corner)

                          Sensit = Mean *POCV coefficient(C)                                     - - -> equation (3)

Corner          :  Delay value after POCV calculation

                        Corner = mean +/- N*Sensit [1]                                                 - - -> equation (4)

                        where N = total no. of standard deviations

Incr value     :  Current stage path value - Previous stage path value               - - -> equation (5)

Mean for Path column: mean_1st_stage + mean_2nd_stage +...+ mean_current_stage         

                                                                                                             - - - > equation (6)

Sensit for Path column: sqrt [sensit_1st_stage^2 + sensit_2nd_stage^2 + …. +

                                                sensit_current_stage^2]                             - - - > equation (7)

Path value    : Path mean + [Path sensit*N]                                                  - - -> equation (8)

The POCV calculation for the highlighted line is explained below:

 

                                                              --------- Incr -------------   ------- Path ---------

Point                                                    Mean   Sensit Corner   Value   Mean   Sensit    Value

--------------------------------------------------------------------------------------

NAND/i2 0.004 0.000& 0.005 0.004 0.482 0.006 0.501 f

NAND/o 0.102 0.008 0.126 0.113 0.584 0.010 & 0.614 r

Figure 3 Calculations for incr column for the above example

 

         Figure 4 Calculations for path column for the above example

As seen from above, the delay calculation for the path [mean and sensit] is done statistically. Sensit is calculated by using RSS value. This reduces extra pessimism in the path as compared to simply adding the sensit values. By simple addition, the total sensit value of the path will be 0.017 as opposed to 0.010 calculated using RSS.

AOCV distance derates in POCV

POCV models the random variations on the chip. In order to model systematic variations as well, distance based AOCV derating is used along with POCV. Distance derates are provided in a similar LVF format in library. POCV coefficient and distance derates are mutually exclusive. Distance-based derates are usually generated from silicon data measurements from the test chip. [1]

An example of AOCV table:

version: 4.0 

ocvm_type: pocvm

object_type: lib_cell

rf_type: rise fall

delay_type: cell

derate_type: early

object_spec: */*INV*

distance: 0 250000 1000000 2250000 4000000 6250000 9000000 12000000 16000000 20000000 30000000

table: 1.025 1.025 1.025 1.025 1.025 1.025 1.025 1.025 1.025 1.025 1.025

ocvm_type: pocvm

object_type: lib_cell

rf_type: rise fall

delay_type: cell

derate_type: late

object_spec: */*INV*

Distance: 0 250000 1000000 2250000 4000000 6250000 9000000 12000000 16000000 30000000

table: 1.025 1.054 1.065 1.074 1.082 1.089 1.095 1.100 1.105 1.110 1.119

Guard-banding in POCV

To model non-process related variations such as voltage and temperature, guard banding is used. It applies to both nominal delay and sigma.

When both derates; distance-based and guard band are present then total derate will be the product of the two. [POCV distance derate * POCV guard band].

The two most used timing closure methodologies can be compared as follows:

Maitry Ramesh has experience in ASIC physical design, including place & route, static timing analysis, physical verification, and signal integrity analysis.