SOCV / POCV 数学模型
工艺误差自集成电路诞生之日起,就是一个没法规避的因素,芯片制造过程不比生个娃简单,且每个过程都极其精细,即便极尽所能地控制制造过程的误差,但随着工艺进步,工艺误差对芯片性能的影响却日渐凸现。为了模拟工艺误差对芯片性能的影响,引入了On chip variation模型,40nm 以前简单的flat derate模型基本能够覆盖大部分状况,且不过于悲观到不能接受。算法
但进入40 nm 以后flat derate 已再也不是一个『经济』的模型,因此引入了更复杂的AOCV (Advanced OCV) 模型,考虑depth 跟 distance的影响,此时AOCV table的背后已有『统计学』的支撑,即所谓的SSTA (statistical staic timing analysis). 但限于runtime 当今STA 默认都是基于GBA (Graph Based Analysis) 进行timing 分析,这就使得Depth 的计算并不精确,从而致使过于悲观,若是用PBA (Path Based Analysis) 方式来计算Depth runtime又不能接受。微信
因而进入16nm 以后,一种新的OCV 模型开始被普遍使用,C家称之为SOCV (statistical OCV), S家称之为POCV (Parametric OCV), 除了名字的差异,背后都是统计学都是正态分布,背后的算法也基本一致。由于SOCV / POCV 再也不是简单的设一个derate 值或查一个表格,而是要作一系列计算,正是由于这看似复杂的一系列计算,常常让习惯于查表的老硅农晕头转向。其实这就是几率论中最基本的一些概念跟计算,难道大家忘了当年高分拿下几率论这事儿了吗?app
几率论中涉及到的随机变量分离散随机变量和连续随机变量,芯片制造过程当中的工艺误差属于连续随机变量范畴,因此在进入SOCV / POCV 以前,先来捋清除几个概念:随机变量、几率函数、累积分布函数、几率密度函数、均值、方差。温习了这些概念以后,再看SOCV / POCV 一切只是套公式,并没想象中那么庞大复杂。dom
随机变量 (Random Variable):在现实世界中,许多量是没法准确预测的,故常用随机变量来表示。在学数字集成电路时,涉及最多的一个跟随机变量相关的概念应该是管子的阈值电压。ide
Chip 1函数 |
Chip 2工具 |
Chip 3性能 |
Chip 4测试 |
|
Vth | 0.20ui |
0.21 |
0.24 |
0.28 |
几率函数 (Probability):若是运行大量测试,会发现随机变量的值一般遵循必定规律。随机变量处于x的可能性称为几率,一般用P(x) 表示。
累积分布函数(Cumulative Distribution Function):又叫分布函数,用于描述一个实随机变量X的几率分布,是几率密度函数的积分。它就是几率函数取值的累加结果。
几率密度函数 (ProbabilityDensity Function):用于描述随机变量落在特定值范围内的几率,这个几率为几率密度函数在这个区域上的积分。以下图,该随机变量落在-1σ ~ 1σ间的几率是68.27%。SOCV / POCV 中sigma的取值,就是根据这个几率得来,所取sigma 的值须要保证大部分状况能够被覆盖到。
均值 (mean):用于表示几率分布或以该分布为特征的随机变量的集中趋势的一种度量。是随机试验在一样的机会下重复屡次的结果计算出的等同“指望”的平均值。
方差 (Sigma σ):用于描述随机变量与平均值的误差程度。方差在统计描述和几率分布中各有不一样的定义,并有不一样的公式。在统计描述中,方差用来计算每个变量(观察值)与整体均数之间的差别。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。
正态分布 (Normal distribution) 也称高斯分布 (Gaussian distribution); 对于正态分布,随机变量落在-1σ ~ 1σ间的几率是68.27%,落在-2σ ~ 2σ间的几率是95.45%,落在-3σ ~ 3σ间的几率是99.73%。这也是为何SOCV / POCV 取3σ 的缘由所在。
跋:SOCV / POCV就是一个基于正态分布的OCV 模型,本篇先捋基本概念,概念清除了以后再细看这一模型在STA 中的应用
为啥要SOCV / POCV
STA无疑是数字集成电路设计实现方法学中最『漂亮』的模型之一,可是随意着工艺进步,local varition 的随机性及重要性增长,传统STA 的局限性日渐突出。大概在十五年前,SSTA成了一个研究热点,相较于传统的STA,SSTA 再也不是针对单一的timing 进行分析,它的分析结果是一个统计分布,经过这个统计分布结果,可获得电路处在某个timing 点的几率。
"Statistical timing is a great approach," Keller said. "It's the most accurate I can think of, but it's also the most expensive. Except for IDMs, nobody could really deploy it in production because it required too much run time and memory."
local varition 本就是个正态分布(类正太分布),因此SSTA 能够近乎精确地对其进行模拟。然而因为SSTA 的复杂性,基本在正式工程应用中没法落地,因此这么些年来,都仍是在传统STA 模型上作精化,而『精化』的重头戏之一就是On chip variation。从OCV 到AOCV 到SOCV / POCV, 逐渐的加入更多因素,以获得更精确的模拟。
OCV: 同一个corner 同一段path 上的全部cell 用一个derate 值;不考虑path 的depth 跟 distance, 也不考虑cell 的类型。因此结果对大部分path 而言过于悲观,而对另外一小部分path 而言又过于乐观。
AOCV: 即所谓的stage based OCV (SBOCV), 将derate 模拟成path depth 跟 distance 的函数,因此对同一段path 上不一样depth、不一样类型的cell 有不一样的derate 值,并且同时还会考虑spatial 的影响 ( 即distance ) , 因此相较于OCV 更精确,可是AOCV 有两个局限:一是没有考虑cell 的trantion 跟 load 对variation 的影响,也没有考虑transition 的variation;二是depth 的计算,用GBA 过于悲观,而PBA runtime 又难以接受。
SOCV / POCV: 统计OCV 是一种使用单一local variable 的SSTA 简化模型,对每一个cell 分别建模,cell 的derate 再也不是path depth 的函数,而是一个基于单一 µ(均值) 和σ(方差) 的高斯随机变量函数。SOCV / POCV 能够弥补AOCV 的局限,它考虑cell 的transition 跟 load 对variation 的影响,也考虑variation 对cell transition 的影响;因为其不依赖于depth, 因此也不受depth 精度的影响。
注:1)同一段path 是指,在STA 能够分别对data/clock 的late/early 设不一样的derate值,因此用 "同一段path" 予以描述。2)Random variation 经过SPICE 作Monte Carlo 仿真获得。3)Spatial variation 用distance based OCV 来模拟,对于AOCV 跟 SOCV都须要,这部分variation 经过硅片测试获得。
此时应该回顾一下《论STA:SOCV / POCV 开篇》,SOCV / POCV 的根本是高斯分布,作SOCV / POCV STA 分析时,须要有描述derate 值的LVF 文件,一般LVF 文件由foundry 提供。
POCV / SOCV具备以下特色:
每一级delay 都是一个(µ,σ) 的分布,时序分布做为独立的随机变量经过时序图传播。
每一个cell / net 的variation 都用统计参数表示。
variation 是输入transition 跟输出load 的函数。
更精确,跟SPICE 仿真结果的correlation 更好。
timing report 中delay 值用µ + n*σ 表示,默认n 是3,即一般所说的3 sigma。
SOCV / POCV Variation
芯片制造涉及到许多复杂重复的过程,如:光刻、蚀刻、离子注入、扩散、退火。并且都是原子级操做,尽管控制很是严格,但误差不可避免。工艺误差会致使芯片物理参数误差,如:线宽、沟道掺杂浓度、线厚、临界尺寸、栅氧厚度;而物理参数误差会致使电特性参数误差,如:线的电容电阻、阈值电压、饱和电流、栅极电容;电特性参数误差会致使 cell delay, cell transtion, net delay的误差,这正是STA 要如此重视variation 的缘由所在。
PVT《巴山夜雨涨秋池,邀君共学PVT:STA之PVT》跟RC corner《抽刀断水水更流,RC Corner再也不愁:STA之RC Corner》《一曲新词酒一杯,RC Corner继续飞: STA之RC Corner拾遗》《且将新火试新茶,深究趁年华:STA之RC Corner再论》 从宏观上来看都属于对variation 模拟。
Environmental variation: 电压跟温度的变化,也就是PVT 中的V跟T。
Process variation: 工艺制造过程的误差,工艺误差一部分用PVT 中的P来模拟,另外一部分用OCV 来模拟。
Process variation
Process variation 可进一步细分为systematic 跟non-systematic 两种:
Systematic process variation: The behaviour of these physical parameter variations have been well understood and can be predicted apriori, by analyzing the layout of the design. The examples are variations due to optical proximity, CMP and metal fill etc.
Non systematic process variation: these have uncertain or random behaviour and arise from processes that are orthogonal to design implementation. The examples are the primary contributor to process variations RDF < Random dopant fluctuation >, LER < Line edge roughness >, OTV < Oxide thickness variation >.
而Non systematic process variation又能够进一步细分为Global varation 和local variation:
Global variation: 因为工艺偏移致使的die-to-die, wafer to wafer, lot to lot 之间误差,如:同一个chip上全部管子的沟道长度都比典型值偏大或偏小。
Local variation (within-die or intra-die): 同一芯片上不一样管子受工艺误差影响不一样< 注:on chip variation 之源>,如:同一芯片上有些管子的沟道长度偏小,而有些管子的沟道长度却偏大。显然,local variation 比 global variation 小。
Local variation又能够进一步细分:
Spatially correlated variations: 相较于距离相距较远的管子,相邻管子有像似特征。这也是AOCV 跟 SOCV / POCV 要考虑 spatial / distance 的缘由。
Random or independent variation: 在统计学上彻底随机独立,故须要SSTA 对其进行更精确模拟,而做为SSTA的简化模型,SOCV / POCV的精确性从下图可见一斑。
结:
工艺误差致使芯片物理参数误差,进一步致使管子电特性误差,在STA 中表现于cell delay, cell trantion 跟 net delay的误差。
STA 用PVT + OCV 来模拟cell 的timing,用Spice 仿真获得cell delay 跟variation。
STA 用RC corner来模拟互连线的variation。
PVT 跟RC corner 用于模拟Global varition。
Flatten OCV, AOCV, SOCV / POCV 用于模拟local variation.
POCV/SOCV 对lib 的要求
-
在芯片制造过程当中的工艺误差由global variation 和local variation 两部分组成。 -
在集成电路设计实现中,global variation 用PVT 跟 RC-corner 来模拟;local variation 用 OCV/ AOCV/ SOCV 来模拟。 -
在40nm 以前OCV 被普遍采用,可是OCV 对同一条path 上的全部cell 都设同一个derate 值,若是设的太严则过于悲观,若是设得太松又会致使过多的path 过于乐观,进入28nm 以后尤为是16nm 以后,OCV 模型愈来愈"力不从心",因而有了AOCV 模型。 -
AOCV 模型再也不是一个简单的derate 值,而是跟cell 所在path 的逻辑级数和物理位置相关,AOCV table 一般是基于Monte-Carlo 模型仿真获得的(对此有兴趣的驴友能够研究一下Virtuoso Variety),它的index 是逻辑级数或distance. 可是AOCV 有两缺点,其一:AOCV derate 值跟cell 的输入transition 和输出load 无关,因此不能考虑这部分因素;其二,GBA 模式下计算获得的逻辑级数和distance 过于悲观,而PBA 模式下能够获得精确的逻辑级数和distance 可是runtime 又不可接受。因而又进一步引入了SOCV 。 -
SOCV 能够很好的解决精度和runtime 的问题,本质上,SOCV 是在某个特定PVT 下的SSTA, 即单参数SSTA, 它再也不依赖于逻辑级数和distance, 因此也就避免了GBA 模式下计算获得的逻辑级数和distance 过于悲观;同时SOCV 模型考虑了输入transition 跟输出load 的影响,更贴合实际。 -
作精确的SOCV 分析,须要特别的库支持,在库里要有针对每个cell 每一条timing arc 的cell delay, output transition, timing check 的sigma table, table 的两个index 分别是输入transition 和输出load.
这个特别的库,就是本文的主题,即:LVF ( Liberty Validation Format ).
OpenSource Liberty Version 2013.12 开始支持LVF; 从2017 年开始,LTAB ( Liberty Advisory Board ) 批准了对LVF 的扩展,以提供先进的moment-based 模型。
传统LVF 中有对cell delay, output transiton, timing check 的ocv_sigma_* table, 这些值表示与相关NLDM表中包含的标称值的误差,该值用1-sigma 表示。在表中用关键词 "sigma_type" 来表示是用于early path 仍是late path 的分析,但timing check variation 的table 是不分early 跟late 的。
16nm 及如下的先进工艺结点和超低电压会产生强非高斯分布 (Strongly non-Gaussian ), 表现出均值偏移 ( mean-shift ) 和偏斜效应 ( skewness effects ). 因而从2017 年起新引入了3个moment-based 模型,用于对已有 ocv_sigma_* 模型的矫正。
这三个moment-based 分别是:mean-shift, Standard Deviation, Skewness.
Mean-shift:在表中用关键词ocv_mean_shift_* 定义,表示表中的标称值与分布平均值之间的差别,其定义为:
Standard Deviation: 在表中用ocv_std_dev_* 定义,其定义为:
Skewness: 在表中用ocv_skewness_* 定义,其定义为:
在没有LVF 时,能够用AOCV table 抽取一个SOCV sigma 值用于简单非精确分析,除此以外对于SOCV 若是使用Cadence 工具也可使用SOCV library format, 其格式以下:
POCV/ SOCV 分析
Library reading
-
Timing lib 中带有LVF data, T 家先进工艺的库大多以这种形式呈现,LVF data 集成在timing lib 中,以下图所示,每一个timing arc 都有 early/ late 的 ocv_sigma* 和LVF moment 表格,表格的纵坐标是输入pin 的slew, 表格的横坐标是输出pin 的load. -
独立的LVF data, 其内容同timing lib 中集成的LVF data 同样。 -
没有SOCV data, 须要基于AOCV 的table 抽取SOCV data.
对于不一样的lib 须要的注意的点有:
-
先进工艺的LVF libraries 包含两部份内容:
-
Early/Late sigma LVF, 在lib 中以ocv_sigma* 表示。 -
LVF 会分别有delay, transtion, constraint 的Early/Late sigma 值,能够经过以下命令选择当前分析使用哪些sigma 值:
-
Advanced moments based models, moment Groups 有一大组变量,能够回顾《论STA | POCV/SOCV 对lib 的要求》。 -
能够用以下命令来设置,是否使用LVF 中的moments 数据:
-
若是没有SOCV LVF, 能够用AOCV lib 抽取一个data 来模拟SOCV. 这种flow 只适用于flow tunning, 由于精度不够,不足以用于sign off. 由于AOCV 只有对delay 的variation, 因此没法从AOCV lib 中抽出transtion 跟constraints 的variation. -
要从AOCV lib 里抽取SOCV 在Innovus 跟Tempus 中必须设置以下变量:
-
在AOCV 跟SOCV 中常常提到sigma 的概念,回顾《论STA | SOCV / POCV 模型》可知,对于正态分布,随机变量落在-1σ ~ 1σ <即1 sigma >间的几率是68.27%,落在-2σ ~ 2σ <即2 sigma >间的几率是95.45%,落在-3σ ~ 3σ <即3 sigma > 间的几率是99.73%. 由此可知3 sigma 能够保证99.73 的状况均可以被覆盖到,因此当前最早进工艺仍用3 sigma 来卡。在用AOCV 抽SOCV 时,能够用以下变量来控制用几sigma, 该值默认是3.
除了随机variation 还能够读入Spatial derating file 来模拟distance axis based variation. 在早一点的工艺库中会把depth based 的AOCV variation 跟spatial based 的AOCV variation 分红两张table, 但在新工艺库中,一般会将两者合成一张表。
enable SOCV;
设置Flat OCV, Sigma variation Derate;
将要用flat OCV Corner 的sigma Variation reset 掉,此处为delay_corner dc1.
定义analysis_view.
View1 的sigma 为0,用flat OCV 进行分析。
View2 用SOCV data 进行分析:
POCV/ SOCV 时序报告解析
当前cell 的delay = Delay mean + N * Delay sigma;
当前cell 的Transition = Slew mean + N * Slew sigma;
其中:
Delay mean, Delay sigma, Slew mean, Slew sigma 都是从library 中读出的值;
N 就是一般所说的『几sigma』由统计学特性决定,目前经常使用的N=3 即常说的3-sigma.
N 值可在工具端设置,在Innovus /Tempus 中用以下变量控制:
Arrival Delay = Arrival Mean + N * Arrival Sigma;
其中:
Arrival Mean = Pre-Arrival Mean + Delay mean;
Arrival Sigma = sqr ( Pre-Arrival Sigma ^ 2 + Delay Sigma ^ 2);
-
从lib 中可得buff_4_2 falling edge 的:
到buff_4_1 的pre-Arrival Mean = 0.52430;
因此可得,到 buff_4_2/Z 的Arrival mean:
到buff_4_1 的Pre-Arrival Sigma= 0.00118;
因此可得,到 buff_4_2/Z 的Arrival sigma:
Arrival sigma= sqr (0.00118 ^ 2 + 0.00119 ^ 2)= 0.00168;
因此可得,到buff_4_2/Z 的Arrival delay 为:
Arrival delay = Arrival mean + N * Arrival sigma
= 0.54880 + 3*0.00168
= 0.55384
表头,每一个值的mean 跟sigma 如何计算获得?
读了SOCV 又设了timing derate 该如何解读?
在support.cadence.com 上正好有两篇对应文章,解释得简单明了,借用于此。
表头解析
-
第一行,可知当前是setup check, endpoint 的clock pin, 是否知足timing 需求; -
第二行,第三行,分别列出startpoint, endpoint, 跟对应的launch clock, capture clock, 以及对应的clock edge; -
第四行,给出当前path 所属的clock group; -
第五行,Other End Arrival time 就是capture clock path 的Arrival time, 计算方式同launch path 的Arrival time 相似,区别是对于setup check, capture clock path arrival time = mean - N * sigma. -
第六行,Phase shift, 若是无multi cycle 即为当前clock 的周期; -
第七行,CPPR 再也不是简单的Launch clock path common point arrival time - Capture clock path common point arrival time. 在Innovus/ Tempus 中用report_cppr 可获得对应的mean 跟sigma 值
由如上的report 可得:
-
当前时钟上升沿跟降低沿分别对应的Late/ Ealry 的Mean 和 Sigma. 对应到本例,是时钟上升沿check, 所对应的CPPR mean 在report_cppr 中用Pessimism Mean 表示,其计算方式是:
-
一样可获得上升沿对应的CPPR sigma, 即report_cppr 中的Pessimism Sigma, 其计算方式为:
-
timing report 中的CPPR 在report_cppr 中用Pessimism 表示,其计算方式为:
第八行,Required Time = Req Time Mean - N * Req Time Sigma. 其中每一个值的计算为:
第九行,Arrival Time 便是Launch Clock Path + Launch Data Path 的Arrival Time;
第十行,Slack Time = Slack Mean - N * Slack sigma. 其中每一个值的计算为:
对mean 跟Sigma 设了timing derate 的解析
对cell 的mean 和sigma 值分别设置Derate, 在Timing report 中会显示在"User Derate" 一列,格式是mean : sigma, 设置示例:
对net 的mean 和sigma 值分别设置Derate, 在Timing report 中会显示在"User Derate" 一列,格式是mean : sigma, 设置示例:
对net 或 cell 设置incremental derate, 在Timing report 中会与"User Derate" 相加后呈如今"Total Derate" 一列,设置示例:
设置timing derate 的timing report 以下所示,在该例中,Total mean/ sigma derate, Delay Mean, Delay sigma 的计算分别为,其余的计算跟不带set_timing_derate 的一致。
Total mean Derate = User mean Derate + incr_adjust;
Total sigma Derate = User sigma Derate;
Delay mean = Total mean Derate * Delay mean from lib;
Delay sigma = Total sigma Derate * Delay sigam from lib;
POCV / SOCV total derate 计算
cell: 带LVF 信息的library 中的POCV/ SOCV 值都是针对cell 的;
net: 在某些工艺点T 会给出一个net 的POCV/ SOCV table; 在没有table 的状况下一般用以下命令设一个定值:
cell check: 寄存器的setup/ hold time 就是这里的cell check, 若是是flat OCV 可用以下命令设置:
cell delay: 就是全部cell 的delay 值。
-
Guardband derate: 由LVF 定义的POCV/ SOCV 再乘以由set_timing_derate -mean/ -sigma 的设置值计算获得;
-
Distance based derate: 标示local variations, 同一条path 上相距越远的cell 之间的variation 越大,该部分derate 也是一张表,由library vendor 提供,其内容大体以下,关于这部份内容后续文章会展开阐述。
-
incremental derate: 用图示中的命令设置,某些cell 的variation 天生就比别人大,好比delay cell,对于这类cell 若是要加额外的derate 就须要用到该命令;固然也能够用该命令模拟温度和电压对variation 的影响。
POCV/ SOCV spatial derate
spatial derate 也叫distance-based derate 也叫location-based derate 用于模拟location variations, 理论上相对位置越远工艺误差越大。LVF 是能够支持saptial derate 建模的,可是目前大部分Feb 都会提供一张单独spatial derate 表格。一般SOCV spatial derate 表格有以下两种格式:
-
Design-level spatial derate data -
Library cell-level spatial derate data
-
若是同时设置了Design-level 跟Library Cell-level 的spatial derate, 则library cell-level spatial derate 优先级更高,Design-level spatial derate 会用于net. -
若是只指定了某一种path_type 的cell-level spatial derate, 则其他部分用Design-level spatial derate 计算; -
若是同对一个cell 设置了两次类型相同的spatial derate, 则先设的优先级高。
Innovus/Tempus SOCV spatial derate Flow
读入SOCV side-file;
-
设置spatial derate analysis; -
进行spatial derate timing 分析。
single mode single coner, 用命令read_lib -socv 读入:
Multi mode multi coner, 在view definition 中用create_library_set 或update_library_set 读入:
主要由如下几个变量控制,除此处列出的变量还有控制计算total derate 时是将spatial derate 『加上』仍是『乘以』跟是否将spatial derate 应用于sigma. 在计算derate distance 时有两种模式:
-
Bounding_box, 跟计算AOCV distance 同样,从common point 起到endpoint 止,框一个矩形,矩形的对角线即为所求distance 值。
chip_size, 用timing_spatial_derate_chip_size 指定一个固定值。chip_size 能够从带坐标信息的SPEF 中读入,也能够从DEF 中读入。
-
GBA bounding-box mode -
GBA chip-size mode -
PBA bounding-box mode
GBA 模式,工具不精确计算每一条path 的bounding-box, 针对一对startpoint-endpoint 从common point 起将该对timing check point 间全部timing path 的全部cell 都框起,用最长的对角线来计算这一组timing path 的spatial derate. 这种方式计算获得的distance 使setup 更悲观,该模式不建议应用于hold 分析。
GBA Bounding-box 只能用于design-level spatial derate table, 不能用于cell-level spatial derate table;
GBA Bounding-box 的spatial derate 直接应用于timing report最后arrival time 和required time 的计算,不体现于timing path 的每个cell 上;
GBA Bounding-box 不能分别针对data, clock, net, cell 跟不一样电压进行设置;
因为如上诸多限制,GBA bounding-box 模式一般不建议用于sign-off. 建议使用GBA chip-size 模式作sign-off
GBA chip-size mode 用design-level spatial derate 对net 作derate, 能够同时读入cell-level spatial derate 对cell 作derate.
GBA chip-size mode, spatial derate 针对timing path 上的cell 设置,能够分别针对data, clock, net, cell 跟不一样电压进行设置。
在timing report 中spatial derate 呈如今socv_derate 列:

PBA bounding-box mode
PBA 模式,若是物理坐标数据可用,工具会针对每一条path 计算一个精确的distance 值;若是物理坐标数据不可用,工具将默认使用芯片的尺寸来得到距离参数。
PBA bounding-box mode, 针对一对startpoint-endpoint 从common point 起到endpoint 止将当前timing path 框起,计算对角线距离为distance 值,若是该条timing path 没有common point 则用chip-size 计算distance.
PBA bounding-box mode, spatial derate 针对timing path 上的cell 设置,能够分别针对data, clock, net, cell 跟不一样电压进行设置。
在timing report 中spatial derate 呈如今socv_derate 列
本文分享自微信公众号 - 陌上风骑驴看IC(MoShangFengQiLv)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。