前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STA | 哐!一文打尽 SOCV / POCV

STA | 哐!一文打尽 SOCV / POCV

作者头像
老秃胖驴
发布2020-04-08 17:59:41
21.6K0
发布2020-04-08 17:59:41
举报
文章被收录于专栏:陌上风骑驴看IC陌上风骑驴看IC

去年一年分了九次填了SOCV / POCV 这个大坑,整合到一起,方便查阅。关于设计余量跟各种Variation 模型《好文共赏 | 浅谈芯片设计——设计余量,Design Margin》这篇文章提出了有意思的观点,值得一读。

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 值或查一个表格,而是要做一系列计算,正是因为这看似复杂的一系列计算,经常让习惯于查表的老硅农晕头转向。其实这就是概率论中最基本的一些概念跟计算,难道你们忘了当年高分拿下概率论这事儿了吗?

概率论中涉及到的随机变量分离散随机变量和连续随机变量,芯片制造过程中的工艺偏差属于连续随机变量范畴,所以在进入SOCV / POCV 之前,先来捋清除几个概念:随机变量、概率函数、累积分布函数、概率密度函数、均值、方差。温习了这些概念之后,再看SOCV / POCV 一切只是套公式,并没想象中那么庞大复杂。

随机变量 (Random Variable):在现实世界中,许多量是无法准确预测的,故经常使用随机变量来表示。在学数字集成电路时,涉及最多的一个跟随机变量相关的概念应该是管子的阈值电压。

Chip 1

Chip 2

Chip 3

Chip 4

Vth

0.20

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


目前,SOCV 可以三种形式呈现:

  • 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.

对于LVF 的三种呈现形式,Innovus 跟Tempus 在single mode single corner (SMSC) 跟multi mode multi corner (MMMC) 读入时有些许差别。

对于不同的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 中必须设置如下变量:

set timing_library_infer_socv_from_aocv true

  • 在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.

timing_library_scale_aocv_to_socv_to_n_sigma

  • 除了随机variation 还可以读入Spatial derating file 来模拟distance axis based variation. 在早一点的工艺库中会把depth based 的AOCV variation 跟spatial based 的AOCV variation 分成两张table, 但在新工艺库中,通常会将二者合成一张表。

Innovus/ Tempus 中的变量设置


Innovus 跟Tempus 中SOCV 的相关设置如下表所示。

如果在同一个Design 中,对某个corner 想用flat OCV, 而其他corner 用SOCV; 假设SOCV LVF lib 已在view Definition 中定义好,可以通过如下方式将某个Corner 的SOCV reset 掉,用Flat OCV 的值代替:

  • enable SOCV;
  • 设置Flat OCV, Sigma variation Derate;
  • 将要用flat OCV Corner 的sigma Variation reset 掉,此处为delay_corner dc1.
  • 定义analysis_view.

对于如上设置,View1 跟View2 的timing report 分别为:

  • View1 的sigma 为0,用flat OCV 进行分析。
  • View2 用SOCV data 进行分析:

POCV/ SOCV 时序报告解析


关于时序报告的解析,可回顾《论STA | 读懂timing report, 很重要》,SOCV 之前的时序报告都一样,delay 值可以相加得到,带SOCV 的时序报告会多出很多列,用以表述不同类型的mean 跟sigma 值。

在Innovus/ Tempus 中,默认的时序报告的格式仍同之前一样,只是Delay 值不再是简单相加。对于下图所示的时序报告,Arrival time != pre-Arrival time + Delay.

要搞清楚Arrival time 如何计算,需要通过如下命令,将delay mean, delay sigma, arrival mean, arrival sigma 分别列出然后计算。

如下所示,是一个列出了mean 跟sigma 值的时序报告,要读懂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 Delay = Arrival Mean + N * Arrival Sigma;

其中:

  • Arrival Mean = Pre-Arrival Mean + Delay mean;
  • Arrival Sigma = sqr ( Pre-Arrival Sigma ^ 2 + Delay Sigma ^ 2);

结合上例,计算buff_4_2/Z 的Arrival Delay:

  • 从lib 中可得buff_4_2 falling edge 的:

Delay mean = 0.02450;

Delay sigma = 0.00119;

  • 到buff_4_1 的pre-Arrival Mean = 0.52430;
  • 所以可得,到 buff_4_2/Z 的Arrival mean:

Arrival mean= 0.52430 + 0.02450 = 0.54880

  • 到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

示例中,buff_4_2/Z 的arrival delay 值为0.55383, 是因为工具在计算时是按照浮点数位宽计算的,最后显示在时序报告中的值做过四舍五入。

在Innovus/ Tempus 中如果设置了如下变量,时序报告的表头也会分别列出mean 和sigma 值:

接下来看下两点:

  • 表头,每个值的mean 跟sigma 如何计算得到?
  • 读了SOCV 又设了timing derate 该如何解读?

在support.cadence.com 上正好有两篇对应文章,解释得简单明了,借用于此。

表头解析


从这个timing report 的表头,可分别得到:

  • 第一行,可知当前是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 表示,其计算方式是:

Late Mean - Early Mean =

0.279 - 0.229 = 0.51

  • 同样可得到上升沿对应的CPPR sigma, 即report_cppr 中的Pessimism Sigma, 其计算方式为:

sqr (Late Sigma ^ 2 + Early Sigma ^ 2) =

sqr (0.023 ^ 2 + 0.019 ^2) = 0.030

  • timing report 中的CPPR 在report_cppr 中用Pessimism 表示,其计算方式为:

Pessimism Mean + N * Pessimism Sigma =

0.51 + 3*0.030 = 0.141

再回到timing report:

  • 第八行,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 的解析


如果要在SOCV 的基础上加更多的Derate 可以用命令set_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 计算


应某猪要求,撸一下POCV/ SOCV total derate 的计算。在没有找到更有效的方法,机器无法承受SSTA 之前,目前看来POCV/ SOCV 似乎是唯一出路,然而为了更完备地模拟各种『因素』对delay 的影响,POCV/ SOCV 看上去很胖,以至于猪同学挠着一头乱发在四海八荒群里『控诉』。

其实POCV/ SOCV 只是看上去胖,解析开也简单,首先要明确当前derate 的对象:

  • cell: 带LVF 信息的library 中的POCV/ SOCV 值都是针对cell 的;
  • net: 在某些工艺点T 会给出一个net 的POCV/ SOCV table; 在没有table 的情况下通常用如下命令设一个定值:

如果是cell derate, 需要明确是针对cell check 还是cell delay:

  • cell check: 寄存器的setup/ hold time 就是这里的cell check, 如果是flat OCV 可用如下命令设置:
  • cell delay: 就是所有cell 的delay 值。

cell delay 的total derate 由以下几部分内容构成:

  • Guardband derate: 由LVF 定义的POCV/ SOCV 再乘以由set_timing_derate -mean/ -sigma 的设置值计算得到;

猪问:为什么LVF 定义了POCV/ SOCV 还需要再用set_timing_derate 设一个值呢?

驴答:目前LVF 中定义的POCV/ SOCV 只表征了PVT 中的P, 即工艺偏差,那如果要将温度跟电压对mean 跟sigma 的影响考虑在内时,就需要再用set_timing_derate 额外设置。

  • Distance based derate: 标示local variations, 同一条path 上相距越远的cell 之间的variation 越大,该部分derate 也是一张表,由library vendor 提供,其内容大致如下,关于这部分内容后续文章会展开阐述。
  • incremental derate: 用图示中的命令设置,某些cell 的variation 天生就比别人大,比如delay cell,对于这类cell 如果要加额外的derate 就需要用到该命令;当然也可以用该命令模拟温度和电压对variation 的影响。

在STA 分析中,total derate 是如何计算的呢?C 跟S 的计算公式类似,只是对incremental derate 的处理方式不一致。

POCV/ SOCV spatial derate


回顾一下《论STA | POCV / SOCV total derate 计算解析》total derate 的计算公式,其中distance derate 就是本文要论及的spatial derate. 此处total derate 的计算公式中都是乘以distance derate, 实际上不论是C 还是S, 在其timing 计算引擎中,都有相应控制变量来控制是『加上』还是『乘以』distance derate. 到目前为止,默认行为应该都是『乘以』。

如果设置了用『相加』的模式来计算total 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 spatial derate data:

Design-level spatial derate 对当前design 的所有cell 跟net 都有效,可以使用path_type 指定是针对clock path 还是data path;也可以使用delay_type 指定是针对cell delay 还是net delay, 其格式为:

Library cell-level spatial derate data

Library cell-level spatial derate 针对lib cell 设置,可以使用path_type 指定是针对clock path 还是data path,其格式为:

优先级:

  • 如果同时设置了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 分析。

读入SOCV side-file

  • single mode single coner, 用命令read_lib -socv 读入:
  • Multi mode multi coner, 在view definition 中用create_library_set 或update_library_set 读入:

设置spatial derate analysis

主要由以下几个变量控制,除此处列出的变量还有控制计算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 模式,即可以将distance_mode 设为chip_size 也可以设为bounding_box; 在PBA 模式通常用bounding_box.

进行spatial derate timing 分析

  • GBA bounding-box mode
  • GBA chip-size mode
  • PBA bounding-box mode

GBA 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 chip-size mode

  • 由于如上诸多限制,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 列

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陌上风骑驴看IC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SOCV / POCV 数学模型
  • 为啥要SOCV / POCV
  • SOCV / POCV Variation
  • POCV/SOCV 对lib 的要求
  • POCV/ SOCV 分析
  • POCV/ SOCV 时序报告解析
  • POCV / SOCV total derate 计算
  • POCV/ SOCV spatial derate
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档