下面我们进入今天的主题。主要介绍OCV和CRPR的概念以及他们对setup,hold的影响。
OCV的全称是On Chip Variation。OCV的类型分为两种。一种被称之为global variation。另外一种则是Local variation。
Global variation:
它是指受Process,Voltage,Temperature(简称PVT)的影响,芯片之间的性能差异性。因为芯片是成批加工制造的,无法保证每颗芯片上同一个device的性能一致性。
Local variation:
它是指受Process,Voltage,Tempeture(简称PVT)的影响,同一个device在同一颗芯片上表现出性能的不一致性。它与Global variation的相同点是都是受PVT的影响而表现出来的性能不一致性。
Process
芯片中的所有晶体管不能期望具有相同的加工制造工艺。由于掩模印刷、蚀刻等工艺的缺陷,沟道长度、氧化层厚度、掺杂浓度、金属厚度等都会发生变化。具体理论的知识可以自行查阅相关教程。
关键公式: ID = (1/2)μnCox (W/L)(VGS – VTh)2 (这个公式模电里面也学过的,忘记了可以翻书去)
Voltage
由于标准单元是被摆放在芯片中的不同位置,所以外部电源的供电电压从源头的参考电压,经历一段电源网络后,达到每个标准单元时的电压会显现出差异性。这就是我们经常所说的IR drop。
Temperature
芯片内的晶体管密度不均匀。芯片的某些区域的高cell density,高翻转率,会导致功耗比较高。因此,这些区域的结温较高,形成局部热点。芯片温度的变化会导致不同的延迟。
受到OCV的影响,一些cell可能快或慢于预期。如果不考虑这些变化,结果可能是乐观的,而实际情况可能导致setup或hold违例。那么,在数字IC设计实现阶段我们应该如何来表征这个OCV效应呢?我们的方法就是采用timing derate的方式来进行最终的Timing signoff。
考虑OCV效应的setup检查
如果不考虑OCV的影响,图1中的电路实际最高工作周期T=5.49ns,周期为1/T=182MHz(是不是发现跟上一期的思考题类似,其实有所区别)。下面我们
假设考虑OCV引进time derate的约束,命令如下:
set_timing_derate -early 0.9
set_timing_derate -late 1.2
set_timing_derate -late 1.1 -cell_check
Launch clock path=2.0*1.2=2.4ns
MaxDataPath=5.2*1.2=6.24ns
CaptureClockPath=2.06*0.9=1.854ns
Tsetup_UFF1=0.35*1.1=0.385
Tmin=7.171ns
通过计算确实周期T变大了,即电路实际工作频率变低了(Performance降低)。同时我们发现UFF0和UFF1的clock tree上存在1.2ns的common path即那两个clock buffer(或者inverter),既在launch 的clock path上,又在capture的clock path上。所以在计算seutp时,common path上的cell delay被分别乘以不同的derate值(实际情况在芯片上只会处于一个特定的PVT环境下),这样的计算方式显然太过悲观。
因此,我们引进了CRPR(Clock Reconvergence Pessimism Removal)的概念,它的数值等于这两个差异值之差。
LatestArrivalTime atCommonPoint = 1.2 * 1.2 = 1.44ns
EarliestArrivalTime at CommonPoint = 1.2 * 0.9 = 1.08ns
CRPR值=1.44-1.08=0.36ns
因此CRPR补偿后,Tmin=7.171-0.36=6.811ns
图1 考虑ocv的setup检查
考虑OCV效应的hold检查
不考虑OCV的影响,图2中没有hold violation。假设施加以下timing derate:
set_timing_derate -early 0.9
set_timing_derate -late 1.2
set_timing_derate -early 0.95 -cell_check
LaunchClockPath = 0.85 * 0.9 = 0.765
MinDataPath = 1.7 * 0.9 = 1.53
CaptureClockPath = 1.00 * 1.2 = 1.2
Thold_UFF1 = 1.25 * 0.95 = 1.1875
Common clock path pessimism: 0.25 * (1.2 - 0.9) = 0.075
因此hold slack=0.765 + 1.53 – 1.2 - 1.1875 + 0.075 = -0.0175ns,即存在hold violations。
图2 考虑ocv的hold 检查
这里说明一点,正常我们timing signoff时derating都不会这么悲观。对于setup检查来说,检查的是在最worst的corner底下,此时cell delay已经是最慢,最悲观的,因此无需在launch path上加derate,只需要在capture上加额外的derate即可。同理,对hold检查来说,只需要在launch path上加derate。当然很多时候对于launch或者capture path,我们还区分clock path和data path,可以针对性设置derate。
介绍了这么多的概念和计算过程后,吾爱IC社区的小编又要抛出一个思考题给大家了,接招吧!
对于图2中的电路,假设在common_clock_tree path上存在0.10ns的crosstalk,请分析其对setup和hold的影响。这道题算是拓展题,面试的时候很有可能问到哦,以后可能成为你的加分项。
小编都无私地分享了这么高级的玩意了,你们是不是得给小编打赏下(目前平均下来一天获得打赏1元钱,呵呵)。小编发文后开车都盼着每个路口遇红灯,为什么呢?目的有两个,一个是看阅读量,另外一个是看你们给打赏了没,呵呵。所以,请多多打赏,请多多转发,感谢!还是感谢!
联系客服