关于时序库的概述
对应于流程图里面红色框的部分:
先给出一个库的模型,库的模型一般有两种格式:db和lib。其中lib可以打开看,db则不能。他们的内容是一样的,只是格式不同。
dalay_model : table_lookup 查找表的形式、给出时间的单位ns、电压的单位v、电流的单位uA、电容、功耗的单位......
库中某个Cell的内容:
Non-Linear Dealy Model 非线性延迟模型
以一个反相器为例:
在静态时序分析里面,时序模型的Timing主要有两方面的影响因素:
(1)the output load,输出负载,即输出引脚的电容负载
(2)the transition time,输入的transition的时间
关于transition time和latency的关系:https://blog.csdn.net/LEBRON599/article/details/139498166?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139498166%22%2C%22source%22%3A%22LEBRON599%22%7D
有了这两个之后,标准单元就可以计算出延时信息。(分为线性和非线性两种)
对线性:(随着半导体工艺的进步,线性已经用的很少)
对非线性模型:
一般是通过一个二维的查找表来体现非线性模型。输入input transition time 和 output load capacitance。通过查找表得到输出--delay。
从下图中还可以得到的信息:是从INP1到OUT的延迟,并且分为cell_rise(上升的延迟)和cell_fall(下降的延迟)
Q:如果input transition time 和 output load capacitance不在查找表里面应该怎样计算?
如下例,每个格点代表查找表中的一个值,但当x=0.32,y=0.05。不在查找表的格点上时,怎样得到延迟?
A:一般采样高斯消元法求得:(以周围的四个点为依据计算)
Slew Derate
查找延迟一般是通过查找表,那么该表是如何确定的呢?
如下图,在0.25um及更老的工艺用的是10%到90%的点。但是随着半导体工艺的推进,现在大多数新的工艺用的是30%-70%。
实际的延时值是30%-70%(中间是40%)。库里面的是10%-90%(中间是80%)。所以实际的值是库里面值的一半,所以我们实际中用到这个库的时候,是需要用他的一半的值,所以我们设置:slew_derate_from_library : 0.5。这就是Slew Derate 的意义。
所以在一般的定义中:
又如下图所示,我们可以算出库里面是0%-100%的
如果我们要得到真实的值,就要用库里的值 * slew_derate就可以得到延迟是多大。
为什么需要slew_derate:当我们需要创建一个新的库的时候,最简单办法就是在原有库的基础上去扩展,这样利用slew_derate就可以更方便的去建一个新的库。
Wireload Models:线负载模型
一般分为两个模型:T-model 和 Pi-model
线负载模型的例子:
给了线负载模型的名字、电阻、电容、面积、斜率、线长。。。。
其中如下右边的图,对于不同的面积有不同的模型对应