我们知道,cell delay是根据input transition和output load计算得到的。如图所示,为X8驱动的buffer的timing查找表。由于buffer是正单边类型cell,那么当一个1 -> 0 翻转的信号经过buffer时,计算timing delay应该去查找cell_fall这个表格。假设input transition为0.29845ns,output load为0.021292pf,根据查找表就可以计算出cell delay为0.096698ns。
但实际上,我们很难碰到input transition和output load正好在查找表上,或多或少都有些偏差。那么,怎么去计算cell delay呢?这个时候就要用到插值法去计算了。
插值法的公式:Z = A + B * X + C * Y + D * X * Y,其中X为input transition,Y为output load,A、B、C、D为四个参数,Z为delay值。
那么如何计算得到A、B、C、D四个参数呢?请看下面一个案例。
假设一个信号从1 -> 0 ,input transition为0.014930ns, output load为0.296311pf,便可以知道其input transition在0.01到0.035723, output load介于0.23365到0.45078之间(见图中绿色框)。因此,便得到了4组X/Y/Z的值,分别是
X=0.01 X=0.035723
Y=0.23365 Z=0.12525 Z=0.13431
Y=0.45078 Z=0.2144 Z=0.22323
知道了4组X/Y/Z的值,我们便可以带入计算得到一个四元一次方程组,即:
0.12525 = A+ B * 0.01+ C * 0.23365 + D * 0.01 * 0.23365
0.2144 = A+B * 0.01+C * 0.45078 + D * 0.01 * 0.45078
0.13431=A+B * 0.035723+C * 0.23365+D * 0.035723 * 0.23365
0.22323 = A+B * 0.035723+C * 0.45078+D * 0.035723 * 0.45078
从而得到A = 0.08075,B = 3.47539,C = 0.04008,D = 0.01648
从而得到Z=-0.086176 + 11.5493 * x + 0.65917 * y - 24.859 * x * y,当X=0.014930、Y=0.296311时,得到Z=0.1716ns(此处计算结果有误,可参照上图计算结果)
#小编是一个入行多年的数字后端工程师,本身对编程方面比较感兴趣,在数字后端的脚本、flow上比较擅长,可以为大家提供答疑咨询服务。另外,可以加入我的群聊和志同道合朋友交流。也欢迎大家加入我的知识星球“芯冰乐”或者关注微信公众号“芯冰乐”,获取更多干货知识。