天气: 阴雨
心情: 平静
“科学是严谨的,世界是模糊的。”
应用背景:在以往的时序分析模式中,会采取fast和slow的lib结合early和late路径进行时序的计算。但是,实际的工艺生产中对于时序的影响因素太多了,采取“一刀切”的算法过于悲观或乐观,为了更加准确的仿真实际情况而引进了derate这个调节参数。随着工艺制程的不断发展,静态时序分析模式也在一个阶段又一个阶段的发展,在不同的模式中,timing derate的用法也有一些差异,比如OCV,AOCV,SOCV等。
基本使用方法:
1.1在传统的singal,BC/WC和OCV模式下,derate的value通常是Foundry给定的针对特定工艺制程的一个参数,统一使用。例如,
set_timing_derate 0.9 -early -clock -data
set_timing_derate 1.1 -late -clock -data
通常的使用方法可参照如下表格:
|Violations| | Data | | Launch Clock| | Capture Clock| |
|SETUP | | -late -data | | -late -clock | | -early -clock | |
|HOLD | | -early -data| | -early -clock | | -late -clock |
|
也就是说在计算setup的时候,让launch部分乘上late的值,capture乘early的值,hold相反,这样约束就更加严格了。set_timing_derate的应用范围很广,可以针对cell,net, lib, rise, fall , clock, delay corner等诸多option进行应用。
特别说明,一般情况,final delay= delay * derate;
当原始delay是负值的时候,final dealy= delay*(2 - derate)。
但是,capture和launch有部分公共的路径,如果直接设置derate,就对公共部分重复操作了,为了避免过于严苛的约束,有引进了ccpr或cppr的模式,对公共路径部分进行参数调节。
1.2另外有一种使用情况,就是根据foundry和客户给定的要求,进行单边设derate。条件:针对ff/ss 的lib,rcmax/rcmin , cmax/cmin的rc corner,分别对data,clock上的cell和net来设置derate。参数10%。
原则:大库不能更大,小库不能更小。
举例说明:
对于delay corner如ss_rcmin,lib是大库,rc是小库,那么计算setup的时候要使得slack更严格,但是大库已经是最大的了,不能再更大了,所以不能再乘以大的参数。同样,小库不能再更小了。data path根据要求选择设derate或不设。
计算setup:slack(更悲观)=RT(变小)- AT(变大)
set_timing_derate -clock -cell -early 0.9
set_timing_derate -clock -data -net -late 1.1
计算hold:slack(更悲观)=AT(变小)- RT(变大)
set_timing_derate -clock -data -cell -early 0.9
set_timing_derate -clock -net -late 1.1
其他的情况以此类推。需要补充说明,net的rc file分为rcmax和cmax,其中rcmax是说R(电阻)对delay的影响大于C(电容),cmax则是说C的影响较大。即在某一工艺中,线宽较大,那么同样区域里的net的电阻就相对变小,而线间电容就变大了,对于delay的影响C就相对大于R,这就是Cmax/Cmin的情况;相反,线宽较小,R值就大,相对来说R的影响大于C的影响,就是Rcmax/Rcmin的情况。
而随着工艺越来越先进,对于delay的影响因素也越来越多,因此不能单纯的使用统一的derate来进行调节,需要更加准确的算法来完成,保证片上资源的有效利用,提高PPA。于是,AOCV的derate和SOCV的derate算法相继诞生,逐渐应用在28nm,16/14nm,12nm,7nm的制程当中。derate的用法就更加丰富了。
(未完待续。。。)