热度 7| |||
####为了学习记录AOCV库的相关知识,转载了3篇好的文章,感谢三位3大佬,内容仅作为学习使用,如有侵权请联系删除!
今天我们要介绍的时序分析概念是AOCV。全称Stage Based Advanced OCV。我们知道,在OCV分析过程中,我们会给data path,clock path上设定单一的timing derate值。随着工艺演变的加速,我们发现这种设置方法是过于悲观的,大家可以想象下,OCV是片上误差,就代表一条path上有的cell delay大于标准值,那也有的cell delay会小于标准值。因此不能一味的加大或减小delay来模拟片上误差。
如下图所示,对于下面这样一条buffer链,假设8个buffer处于不同的PVT条件下,OCV会将8个buffer都选用最差的条件来分析(同一derate参数),而AOCV则会采用不同的timing derate值来分析。
AOCV有它专门的libary库,我们称为AOCV table。按照维度分为两种,一种是一位的只以stage count作为计算的表格,如下图所示:
version: 2.0
object_type: lib_cell
object_spec: LIB/BUF1X
rf_type: rise fall
delay_type: cell
derate_type: late
path_type: data
depth: 1 2 3 4 5
distance:
table:
1.123 1.090 1.075 1.067 1.062
depth就代表着stage count,从表格中我们可以看到随着;路径的深入,derate的效应会减小。那我们怎么来计算stage count呢?
通常这个计算方法比较复杂,不同的电路情况对应着不同的count计算方式:如下timing path,我们将L1,L2,DFF1,U1,U2,U3的stage count设成6,而C1,C2,C3,C4的stage count需要设成4,这边需要说明的是B1,B2由于是common point,所以在计算stage count时需要忽略。
另外一种是以distance和stage count混合组成的二维AOCV table. 它在计算derate时同时考虑了timing path的距离因素,当然这个虽然更加精确,但是会增加runtime,所以一般现在一维表格用的更多。
version: 2.0
object_type: lib_cell
object_spec: LIB/BUF1X
rf_type: rise fall
delay_type: cell
derate_type: late
path_type: data
depth: 1 2 3 4 5
distance: 500 1000 1500 2000
table:
1.123 1.090 1.075 1.067 1.062
1.124 1.091 1.076 1.068 1.063
1.125 1.092 1.077 1.070 1.065
1.126 1.094 1.079 1.072 1.067
使用方法:
set_analysis_mode -aocv true
######################以上内容转载自:https://www.sohu.com/a/237459990_99933533
芯片在生产过程中,由于外界条件和生产条件的变化,比如PVT,可能会产生不同的误差从而导致同一晶圆上不同区域上的芯片里的晶体管速度变快或者变慢,并因此产生corner概念。
BCWC:即为best case corner和worst case corner,分别代表两种不同的PVT环境。BC时,timing-arc的时间最短,WC时,timing-arc的时间最长。OCV模式,AOCV模式,POCV模式,LVF模式均是在不同PVT(不同corner)的基础上添加derate。[3]
一、OCV介绍(on chip variation 片上抖动):
同理,同一块芯片上的晶体管也会有变快或者变慢的现象,因此产生了OCV的概念。
OCV在path上设置统一的derate,悲观度较高。derate数值是指对launch、capture、data line的cell或者net上添加一个比理想情况更为悲观的倍数,比如针对setup,launch的derate统一设置为1.1,表示delay时间增加值原来的1.1倍,capture的derate统一设置为0.9,表示delay时间变为原来的0.9倍。从而使设计能够覆盖实际生产过程中产生的variation。针对common path,利用cppr将悲观量移除。
实现方式:
(1)运用于主PVT库对应的微小差异PVT库
(2)set_timing_derate命令设置全局derate值
二、AOCV(Advanced on chip variation (先进的片上抖动))
在传统OCV上引入了对路径长度和整个路径在物理上所跨越的距离的考虑。在实际设计中,通过对一条line中cell在不同的逻辑深度时的仿真,以及基于前后级在物理中不同距离来得到一个更精确的derate值来进行时序分析,而不是OCV传统的粗放式的统一的derate。[1]
AOCV derate table:
(1)path depth:基于cell在整条时序路径中所处的深度或者级数来考虑derate
(2)path distance:基于路径中cell或net跨越的物理距离来给出相应的derate
三、POCV
POCV,又称SOCV(Statistical On Chip Variation),如下图所示,POCV将delay模拟成一个正态分布。每个cell的delay最高概率出现在 u周围。整体落在区间内的概率为99.7%。[2]
如果在.lib中提供了sigma的数值,则可以通过公式(1)算出,如果通过read_aocvm读取的POCV的参数文件(包含参数C),则可以通过公式(2)算出。
四、LVF
LVF,liberty variation format。是一种和liberty库文件(.lib)有关的数据格式。[4]
有两种方式可以得到LVF中的sigma:
(1)montecarlo蒙特卡洛模拟
(2)Sensitivity-Based-Analysis
############################以上内容转载自:https://blog.csdn.net/hepiaopiao_wemedia/article/details/98985633
为什么要引入AOCV
为了精确性,为了剔除悲观度。用set_timing_derate来设置OCV,对于一个固定的corner,只能对data/clock, cell/net, late/early分别设不同的值,由下图可知,这个值是个trade off的结果,在保证yield的前提下,尽量不那么悲观,但由于其『固定天性』,这个值既不能cover最悲观的部分,而对另一部分又过于悲观。
什么是AOCV
AOCV是一种用伪统计(pseudo-statistical )来模拟variation的方法,相对于传统OCV更精确,它用于模拟random 和systematic variations:
Systematic variation:即Distance based AOCV,用于模拟global variation,根据芯片制造过程的统计特性,距离越远的cell之间相对的variation越大,所以用distance based AOCV来描述距离跟derate之间的关系,距离越大derate越大,这个距离是指一条timing path所在『物理范围』内对角线的长度。timing path的位置信息由SPEF提供,这要求抽SPEF时需要将坐标信息抽出,在STA中读SPEF时要把SPEF的坐标读入。
Random variation:即Depth based AOCV,用于模拟Local variation,由于random variation相互抵消作用,derate随着路径深度的增加而减小。
通常AOCV table有一维跟二维两种,一维table的index是depth,二维table的index是depth跟distance。对于每种类型的cell,foundry会针对rise/fall, late/early, data/clock分别提供一个table。
object_type : lib_cell
rf_type : rise
delay_type : cell
derate_type : late
path_type : data
object_spec : 10nmlib/BUF_X4
depth : 1 2 3 4 5
table: 1.183 1.145 1.122 1.109 1.0901
object_type : lib_cell
rf_type : rise
delay_type : cell
derate_type : early
path_type : data
object_spec : 10nmlib/BUF_X4
depth : 1 2 3 4 5
distance: 0 500 1000 1500
table: 1.123 1.090 1.075 1.067 1.062
1.124 1.0911.076 1.068 1.063
1.125 1.0921.077 1.070 1.065
1.126 1.0941.079 1.072 1.067
如何使用AOCV做STA分析
BA AOCV:
对于一个cell,其Depth取其所在所有timing path上的最小值;
不考虑distance based OCV,即不计算distance的值;
如果AOCV table是二维的,STA工具通常会选最后一行做GBA分析,以保证distance值最悲观。
PBA AOCV:
在GBA的基础上,针对用户指定的一组path重新计算timing,并重新计算该组path上每个cell的Depth;
对于一个cell,其Depth对不同的path分别计算,分别取该cell所在path上的精确值;
如果提供了distance basbed AOCV table,会根据SPEF中的坐标信息,计算对应path所在区域的对角线长度,即derate值从二维表格中得到。
PBA计算得到的值更精确,但需要特别特别特别长的runtime。
Tool:因为方法学上一致,在工具端,除了变量/命令命名方式不同,剥去这层外衣,里面都是一样雪白的肉体。此处仍以Tempus为例,来介绍工具端使用模型(use model)。
使能AOCV 分析:
setAnalysisMode –aocv true –analysisType onChipVariation
读入AOCV table:
Single corner: read_lib -aocv my.aocv
MMMC: create_library_set -name mylib -timing my.lib -aocv my.aocv
AOCV相关变量设置:
列几个常用变量,至于每个变量用于什么用途,请自行查guide。这里需要特别说明的一点是:如果既读入了AOCV table又用set_timing_derate设了OCV,不同工具的行为有所差别,都有相应的变量控制。对于Tempus工具在计算最后的derate时会根据以下标红变量的不同设置,做不同计算。
timing_aocv_analysis_mode
timing_aocv_derate_mode
timing_derate_aocv_reference_point
timing_derate_ocv_reference_point
timing_derate_aocv_dynamic_delays
AOCV report:
report_aocv_derate
report_timing -retime aocv/aocv_path_slew_propagation
report_timing -format { ... stage_count aocv_derateuser_derate ...}
################以上内容转载自:https://www.cnblogs.com/lelin/p/11392051.html