电子说
高能正文:
Slew从名称上讲和transition并没有多大区别,但是两者的time值可能并不相同。因为如果两者完全相同的话,那为什么.lib里面slew和transition要用两个词而不用一个词呢?所以两者是有区别的。
上面说的可能,意思是说有时候两者相同,有时候两者不同,对于之前比较老的工艺而言,一般是相同的,但是随着工艺先进性的提高,两者逐渐不同了,两者的关系体现在一个系数上:
slew_derate_from_library
首先讲一下slew
实际波形的末端是渐近的,很难确定过渡的确切起点和终点。因此,.lib库中都会基于特定阈值来定义slew,即Slew的值依赖于.lib里面指定的测量阈值,对于之前比较老的工艺(比如0.25um/0.18um或者更老),它们一般使用10%和90%作为slew或者transition time测量的阈值,此时slew和transition的值是一样的。如下图所示为某Foundary 0.18um工艺对Slew阈值与derate的定义:
Slew与Transition的关系
关键:Slew阈值的选择对应于波形线性的部分。
随着工艺尺寸的减小,实际波形最线性的部分通常在30%至70%之间。因此,大多数新一代时序库都将Slew测量点指定为Vdd的30%和70%。
但是,由于之前老工艺中测得的transition time时间在10%至90%之间,因此在k库填写里面的transition time时,通常将测得的30%至70%的slew time加倍。
这由slew derate系数指定,通常指定为0.5。slew阈值为30%和70%,slew derate为0.5时,等效测量点为10%和90%。
Transition time: 10% ~ 90%,范围80%,derate 0.5之后和下面的一样:
Slew time: 30% ~ 70%,范围40%
阈值设置的示例设置如下所示:
/* Threshold definitions */
slew_lower_threshold_pct_fall : 30.0;
slew_upper_threshold_pct_fall : 70.0;
slew_lower_threshold_pct_rise : 30.0;
slew_upper_threshold_pct_rise : 70.0;
input_threshold_pct_fall : 50.0;
input_threshold_pct_rise : 50.0;
output_threshold_pct_fall : 50.0;
output_threshold_pct_rise : 50.0;
slew_derate_from_library : 0.5;
注意:上面说的是通常情况下transition对于波形VDD的10%~90%,但是并非一定,具体slew和transition time的百分比还要看.lib里面的trip points定义的阈值以及slew derate的值,为了清楚理解他们之间的关系,大家可以看下面两个例子。
例1:
/* Threshold definitions 20/80/1 */
slew_lower_threshold_pct_fall : 20.0;
slew_upper_threshold_pct_fall : 80.0;
slew_lower_threshold_pct_rise : 20.0;
slew_upper_threshold_pct_rise : 80.0;
/* slew_derate_from_library not specified */
Slew指定的是波形20%~90%的部分,库中没有指定slew_derate_from_library,默认为1,因此Slew和Transition time的值是相同的。
例2:
slew_lower_threshold_pct_rise : 20.00;
slew_upper_threshold_pct_rise : 80.00;
slew_lower_threshold_pct_fall : 20.00;
slew_upper_threshold_pct_fall : 80.00;
slew_derate_from_library : 0.6;
可以看到slew的trip points定义为VDD的20%和80%,范围是60%,且slew derate值是0.6,因此transition time就对应扩展为VDD的0%到100%的时间,如下图所示:
最后根据看到的文献补充一下就是:
EDA tool内部计算用的应该是Slew值也就是波形线性的部分,也是transition derate之后的值;
而在工具中report_timing或者get_attribute报告出来的是transition的值;
lib LUT中的input/output transition正如名字一样,用的就是transition的值;
现在某些EDA工具里面可能已经混用了Slew和Transition的概念(比如Innovus,你报告transition,报告上方显示的是Slew...)不过.lib里面不存在这种问题。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !