前面一个介绍详细了ocv的使用原因以及使用方法,参考Signoff Criteria — ocv applied and results。
OCV一般是针对工艺节点在90nm以上的芯片制造,到了90nm一下,45nm/22nm等等,如果还用这种ocv的方法,直接在data path和clock path上增加统一的derate值,可能会增加signoff的悲观程度,并导致过度设计、降低设计性能和更长的设计周期。因此为了降低我们signoff时候ocv带来的悲观度,引入了更先进的ocv分析方法:AOCV/POCV。其实AOCV/POCV的引入,无非是在OCV的基础上,降低我们STA的悲观度,从而减少ECO的工作量。
1. Overview
AOCV (advanced ocv)通过使用考虑位置和被分析的每条路径的逻辑深度的可变降额因素,对影响时序的 IC 上的随机和系统变化进行建模。通过使用local derate值而不是global derate值,也就是data path和clock path不再是统一的一个derate,而是各个不同。通过这种方法降低悲观减少过多的设计余量并减少时序违规。
POCV(parametric ocv)的出现是因为AOCV的方法,根据逻辑深度进行设置依然是一种简单的方法,依然可能造成过于悲观。pocv是基于每一个cell进行单独的高斯分布的建模处理,cell 的derate不再受逻辑深度的影响。
如下图所示,为不同的ocv技术对应的STA的悲观程度。接下来讲比较详细的讨论AOCV和POCV
2. AOCV原理介绍
Advanced on chip variation,相比较于OCV来说,对于悲观度的去除很有效。相比较与ocv对于整个design中的lauch/capture path设置统一的derate值,aocv通过将cell derate值与cell的逻辑深度以及实际的位置结合起来进行derate值的设定。那么这种derate如何能够设置到具体的cell呢,其实是我们在跑STA时候会读入相关的aocv lib file,里面有专门对相关的cell进行的aocv derate值的描述。举例如下所示为3.0版本的一个INV的aocv描述:
> version: 3.0
> group_name: core_tables
> object_type: lib_cell
> object_spec: LIB/INVX1
> rf_type: rise fall
> derate_type: late
> path_type data clocck
> depth: 1 2 3 4 5
> distance: 500 1000
> table: \
> 1.123 1.119 1.080 1.060 1.054 \
> 1.125 1.121 1.082 1.062 1.056
该部分是一个二维表格的描述,如果只有一维表格描述,一般就只有depth相关的内容,没有distance相关内容。那我们知道了相关的derate值如何查找表得到,可是这个查找表的输入两个值:depth和distance又是从何而来呢?接下来就要介绍两种aocv技术,GBA mode和PBA mode,其中两种mode对应的悲观度不同,对应的depth和distance 值不同,相应的结果也是不同的。
2.1 GBA-AOCV
2.1.1 首先关于depth:
基于GBA mode 的AOCV技术,关于depth的获取,如下图所示,拿buf0为例来讲,用GBA的方式获取buf0相关的path ,那么他的depth值就会有多个可能,比如作为data path时候,buf0到FF1有三个cell,因此depth为3,作为lauch path时候,buf0到FF2的D有两种可能5/6,取较小者,作为capture path时候,buf0到FF2的CP端口有四个cell,因此depth为4,那么buf0在报FF1到FF2的这条path时候,他会取几呢?答案是会取3。它会取GBAmode下抓取的所有的depth中的最小值。因为在上面的lib里面可以看到,depth越小,相应的derate值也越大。所以说GBA会取最悲观的数据进行derate设置。
2.1.2 其次关于distance:
无论是基于cell计算distance还是基于net计算distance,GBAmode下,总会选取整个GBAmode组里面最大的那个distance值作为我们GBA check时候的derate值的设置依据,因为在二维查找表总可以看出来的,distance越大,对应的derate也是越大的,举例越远意味着我们工艺制造过程中的差距可能越大。
2.2 PBA-AOCV
PBA mode其实是在GBA抓取的path group组里面进行更加细致的分析,不像GBA那么的悲观,但是相对来说用的run time就要更长了。
2.2.1 depth获取
关于PBA mode下的path获取,如下图所示,首先会去除一个common point,因为相同的common点,也就是同一个cell,在实际的特定的工作条件下的相关属性是一定的,不可能由于被分为lauch或者capture而改变,因此在STA path中会增加crpr的技术取消除common point的悲观性。言归正传,PBA的就是非常具体的path的分析了,如下图所示,为FF1到FF2的timing path,针对这条path,buf0作为common point点不用关注,而穿过FF1的path就只能被认为是lauch path,depth5/6不同对应不同的timing 报告。而capture path在经过约束的分析之后也只能作为capture path,因为它到l FF2的cp端口,不可能是data path,因此capture path的depth为3。可以看到PBA和GBA的区别,PBA具体到每一条真实的path,不会把一个group的path放在一起分析,而GBA是把一个group的path里面最差 的情况用到了所有的path中。因此PBA降低了悲观度。
2.2.1 distance获取
关于distance,PBA和GBA也是不同的,这个不同之处和depth的获取有类似的情况。如下图所示,pba针对的是一条具体的path,那么它的distance就是唯一的,每一个cell的distance也就是唯一的,而不像GBA中的选取这个group组中的最大的distance值去进行计算,因此来说PBA是降低了悲观度的。
3. AOCV使用
STA阶段如何使用AOCV,其实就是正常的需要的内容读入,参考Timing Check – Timing signoff env之后,设置aocv analysis的enable然后specify aocv相关信息即可。
> set_app_var timing_aocvm_enable_analysis true
设置了这个命令之后,在update timing步骤,会自动进行GBA aocv 的timing update
> read_aocvm xxx.aocvm
这个就是lib相关的读入了,只有读入了才会有相关的二维查找表。
这两个就是主要的AOCV读入的必不可少的内容。当我们搞完之后如何查看我们的AOCV的设置呢?可以通过
> report_aocvm 会打印出被aocvm annotated的cell的数量
> report_aocvm [get_timing_path -from FF1/CP -to FF2/D] -path_type full_clock -pba_mode path 会把相关的path的distance/launch depth/capture depth搞出来
> reportt_aocvm [get_timing_arc -from buf0/I to buf0/Z] 会把buf0相关的详细的aocvm信息打印出来
4. 注意事项
- aocv file支持一维和二维查找表
- 有很多相关的变量设置针对我们在实际计算时候如何考虑data /clock depth的内容,或者针对clock/data设置derate内容等等还是很复杂的不展开讨论,可自行研究
- guard-banding是人为设定的和工艺无关的和aocv有关的影响因子,比如和IR drop/专门设定margin等等。在设定了guardband的影响因子之后,对于一条arc上的 总的影响就是Faocv*Fguardband。guardband只对aocv的内容有影响,之外毫无影响。
set_timing_derate -aocvm_guardband -early 0.95
set_timing_derate -aocvm_guardband -late 1.05 - ocv和aocv之间的优先级是有一些规定的,感兴趣 的可以自己研究。可以通过控制某些变量让ocv的设置或者aocv的设置无效。如果ocv和aocv都想用到,那么可以通过在命令中增加-increment命令,使得derate可以叠加。比如本来aocv和guard band计算之后buf0的late derate为1.05,early为0.95,那么加上如下命令,最终late为1.08,early为0.92
set_timing_aocvm_enable_analysis true 设置了aocv
set_timing_derate -increment -late 0.03 [get_cells buf0]
set_timing_derate -increment -early -0.03 [get_cells buf0]
就先到这这吧,下一章节介绍POCV