# Modeling Variation from OCV to AOCV

Keywords

OCV (On Chip Variation), AOCV (Advanced OCV), POCV (Parametric OCV), SOCV (Statistical OCV), LVF (Liberty Variation Format), CCS (Composite Current Source), NLDM (Non-Linear Delay Model), STA (Static Timing Analysis), VLSI characterization, timing variation model

## Variation Models?

There are several models that have attempted to model variation as listed below:

1. OCV, aka On-Chip Variation
2. AOCV, aka Advanced On-Chip Variation
3. SBOCV, aka Stage Based On-Chip Variation (same as AOCV)
4. LOCV, aka Location On-Chip Variation (Similar to AOCV)
5. POCV, aka Parametric On-Chip Variation
6. SOCV, aka Statistical On-Chip Variation (Similar to POCV)
7. LVF, aka Liberty Variation Format

In this article, we compare and contrast the progress of OCV model to AOCV model syntax.

OCV model is not part of liberty format. OCV Model is set of commands used during static timing analysis, whereas AOCV model is a simple table of derating factors indexed by path depth, which was later subsumed in liberty format. LVF (Liberty Variation Format) Model is part of liberty and is a 2-dimensional table of standard deviation of delay and slope values.

## OCV Model

Table below describe OCV model in an easy to read manner.

## STA/SDC syntax for OCV

``% set_timing_derate -cell_delay -rise -data -early 0.92``
``% set_timing_derate -cell_delay -rise -data -late 1.10``
``% set_timing_derate -cell_delay -rise -clock -early 0.95``
``% set_timing_derate -cell_delay -rise -clock -late 1.06``
``% set_timing_derate -cell_delay -fall -data -early 0.90``
``% set_timing_derate -cell_delay -fall -data -late 1.12``
``% set_timing_derate -cell_delay -fall -clock -early 0.94``
``% set_timing_derate -cell_delay -fall -clock -late 1.07 ``

## AOCV Model

Liberty IEEE-ISTO (Institute of electrical and electronics engineers – industry standards and technology organization) group did not propose a liberty format for AOCV model until late 2013. The need arose, before model could find a standard format, so it was being generated as a side AOCV file for timing analysis software. This ad-hoc format relied on few keywords to incorporate AOCV model details. These keywords are:

1. object_type
2. rf_type
3. delay_type
4. path_type
5. derate_type
6. depth
7. table

## AOCV Model Syntax

Below is one example of late rise clock derate AOCV table:

``object_type : lib_cell``
``rf_type     : rise``
``delay_type  : cell``
``derate_type : late``
``path_type   : clock``
``object_spec : 10nmlib/BUF_X4``
``depth       : 1 2 3 4 5 6 7 8 9 10``
``table: 1.183 1.145 1.122 1.109 1.0901 1.0801 1.0736 1.0650 1.0601 1.055``

Figure: Early and Late Cell Delay Variation in AOCV table

AOCV table above shows keywords and values for rf_type (rise or fall), derate_type (early or late), path (data or clock) and object_type (lib_cell or net). Last two indices depth and table representing stage depth of the path and applicable derate value for the path. Picture below shows early derate and late derate numbers (on y-axix) as a function of no. of stages (on x-axis). Note that both these number tend to converge to 1.0 as number of stages go up. It manifests random variation cancellation with higher number of stages in the path.

## Liberty AOCV syntax

Same table has been reproduced as liberty AOCV format below:

``library (guna_lib) {``
``  ocv_table_template(ocv_template) {``
``    variable_1: path_depth;``
``    index_1 (“1,2,3,4,5,6,7,8,9,10”);``
``  }``
``  ocv_table_template(ocv_template_2D) {``
``    variable_1: path_depth;``
``    variable_2: path_distance;``
``    index_1 (“1,2,3,4,5,6,7,8”);``
``    index_2 (“1,2,3,4,5,6,7,8”);``
``  }``
``  …``
``  cell (BUFX4) {``
``    …``
``    …``
``    ocv_derate_factors(ocv_template) {``
``      rf_type: rise;``
``      derate_type: late;``
``      path_type: clock;``
``      values(“1.18, 1.145, 1.12, 1.10 1.10 1.08 1.074 1.065 1.06 1.055”);``
``    }``
``  }``
``} ``

## Summary

In this article, we reviewed syntactical details of OCV and AOCV formats and how they are used in the flow.