[看完就懂]DC综合4--综合库和DC的设计对象概述(上)

前面一直说到综合库/工艺库这些东西,现在就来讲讲讲综合库里面有什么东西,同时也讲讲synopsys的Design Ware库。主要内容分为三个部分:标准单元库、DC的设计对象、Design Ware库。

(1)标准单元库

绝大多数的数字设计流程都是基于标准单元的半定制设计流程。标准单元库包含了反相器、缓冲、与非、或非、与或非、锁存器、触发器等等逻辑单元综合模型的物理信息,标准单元是完成通用功能的逻辑,具有同等的高度(宽度可以不同),这样方便了数字后端的自动布局布线。

①概述

一个ASIC综合库包括如下信息:

·一系列单元(包括单元的引脚)。

·每个单元的面积(在深亚微米中,一般用平方微米表示,在亚微米工艺下,一般用来称呼,至于具体的单位,可以咨询半导体制造商)。

·每个输出引脚的逻辑功能。

·每个输入到输出的传递延时,输出到输出的传递延时;inout到输出的传递延时。

②内容与结构

Synopsys的工艺库是一个.lib文件,经过LC编译后,产生.db文件。工艺库文件主要包括如下信息:

·单元(cell)(的信息):(主要有)功能、时间(包括时序器件的约束,如建立和保持)、面积(面积的单位不在里面定义,可按照规律理解,一般询问半导体厂商)、功耗、测试等。

·连线负载模型(wire load models):电阻、电容、面积。

·工作环境/条件(Operating conditions):制程(process)(电压和温度的比例因数k,表示不同的环境之间,各参数缩放的比例)

·设计规则约束(Design ):最大最小电容、最大最小转换时间、最大最小扇出。

工艺库的结构如下所示:

文本描述如下所示:

我使用的TSMC90nm的工艺库,我用slow.lib这个库来给大家介绍:

这个库总共三万多行,不可能每一行都解说,因此我按照结构进行介绍。

打开这个.lib文件,可以看到最前面:


最前面的是这些注释,描述的是:制程(是慢的模型)、电压、温度等数据信息。

接下来才是真正的库的信息:

库组(大结构)

Library(library_name){

......

......

}

A首先是库的属性的描述:


下面是这张图的解释:

·通用属性描述(general attribute)

主要是工艺类型、延迟模型、替代交换方式、库特征、总线命名方式等信息

工艺类型:这个库没有给出,主要用来说明这个库是CMOS工艺还是FPGA工艺。默认是CMOS工艺。

延迟模型:指明在计算延迟时用的那个模型,主要有generic_cmos(默认值)、table-lookup(非线性模型)、piecewise-cmos(optional)、dcm(Delay Calculation Module)、polynomial。这个库使用的非线性模型。

替代交换方式:这里选的是匹配封装的方式。具体的信息可以查阅其他治疗或者询问半导体厂商。

库特征:报告延迟计算,也就是这个库具有延迟计算的特征。

总线命名方式:定义库中总线命名规则。例如:busnamingstylF:"Bus%spin%d";这个库没有进行总线规则的命名。

·库的文档资料属性(document attribute):

主要是库的版本、库的日期、还有注释。例如:

用库报告命令report_lib可显示日期例如:DatF:"Wed Jun 22 12:31:54 2005"。

修正版属性定义库的版本号码,例如Revision:1.3;

注释属性用于报告report_lib命令所显示的信息,如版权或其他产品信息。例如:Comment:"Copyright (c) 2005 Artisan Components, Inc. All Rights Reserved.”

·定义单位属性(unit attribute):

Design Compiler工具本身是没有单位的。然而在建立工艺库和产生报告时,必须要有单位。库中有6个库级属性定义单位:time_ unit(时间单位)、voltageunit(电压单位)、current unit(电流单位)、pullingresistanceunit(上/下拉电阻单位)、capacitiveloadunit(电容负载单位)、leakagepowerunit(漏电功耗单位)。

单位属性确定测量的单位,例如可在库中用毫微秒(nanoseconds)或皮法拉(picofar-ads)作为时间和电容负载的单位。

注:关于面积的单位,前面已经说了,这里不再详述。

B接下来是环境描述

主要包括操作条件(operation conditions)、临界条件定义(threshold definitions)、默认的一些环境属性(default attributes)、一些(时序、功耗)模型(templates)、比例缩放因子(k-factors)、I/O pad属性(pad attributes)、线负载模型(wire-loads)。

·操作条件(operation conditions):

在工艺库中,用操作条件设置了制程(process)、温度(temperature)、电压(voltage)与RC树模型(tree_type)。

在综合和静态时序分析时,DC要用到这些信息来计算电路的延迟,而库中的这组操作条件为基础(也就是nomxxxx)操作条件。一个工艺库只有这么一组基础的操作条件,如果要使用不同的操作条件,则需要借助K参数了(见后面)。制程、温度、电压这些很好理解,下面主要说一下这个RC树模型(treetype)。

tree-type属性定义了布局之前延时的计算方式。此外,线负载模型(后面有讲)是根据连线的扇出来估算连线的RC寄生参数的,RC如何分配就是根据这个tree-type属性来的。

连线延时(从驱动引脚的状态变化到每个接受单元输入引脚的状态变化,线负载模型设每个分枝的延迟是一样的。)的一个示例如下图所示:

在这个简单的电路中,BUF1的输出驱动两个单元:BUF2与BUF3。在物理上,这是两根连线。而在网表中,两根连线用一个net来表示。

在布局前,假设这两根线有相同的寄生电阻与寄生电容,即Cwire1-Cwire2=R1-R2 。

假设我们想了解从BUF1的输出到BUF2的输入端的延时。这个延时实际上是给连线及BUF2的输入引脚负载进行充、放电所消耗的时间。

如何计算这个延时呢?tree-type就是为此而定义的。Tree-type有三种取值,这个延时就有三种计算模型,这三种模型有两种理解方式,这两种理解方式是等价的。

第一种理解方式的三种模型:

A:当它取值为worst-case-tree时,连线的寄生参数采用集总模型,即用Cwire*(Cwire 1+Cwire2)这个乘积表示连线的等效电容,Rwire(R1+R2)表示连线的等效电阻。C1表示BUF1输入引脚的等效电容。C2表示BUF2输入引脚的等效电容。从BUF 1到BUF2的延时计算模型下图所示:

在这种模型中,net本身的延迟为Rwire*Cwire .

B:当tree-type取值为best-case-tree时,计算延时的RC模型如下图所示:

在这种模型中,Rwire为0,因此net本身的延时为0

C:当tree-type取值为balanced-tree时,计算延时的RC模型如下图所示:

在这种模型中,net的延时为Rwire*Cwire/(N^2)。这里N表示负载数目,本例中取值为2.

第二种理解方式的三种模型:

无论是从哪一种方式理解,这个库中使用的是平衡树的模型。

·临界条件定义(threshold definitions):

主要是定义一些极限值,比如时钟抖动的最大最小值、输出输出的上升下降沿的最大最小值等等信息,如下图所示:

·默认的一些环境属性(default attributes):

主要是默认漏电流功耗密度、标准单元的漏电流功耗、扇出负载最大值、输出引脚的电容、IO类型的端口电容、输入引脚的电容、最大转换时间。

·一些(时序、功耗)模型(templates):

都是写查找表模型,主要是功耗(比如输入转移时间的功耗)、时序(比如输入线转换的延时、建立时间和保持时间的延时)等等,根据不同的操作环境,进行查表进行选择对应的参数。

·比例缩放因子(k-factors):

由于一般库中只有单元“nom_xxx”的值,为了计算不同的制程、电压和温度下单元的延迟(或者说是计算不同的操作条件),库中提供了比例缩放因子

比例因子有许多,这里只是列举了这几个。

根据提供的K参数,DC按下面的公式计算不同的制程,电压和温度的单元延迟:

Delay derated = (nominal delay)*(1+(DP*KfactorP))*(1+(DV*KfactorV))*(1+(DT*KfactorT))**

其中:

delta = current-nominal ;

DP = CP-NP,CP为current process,NP为nominal process;

DV=CV-NV,CV为current voltage,NP为nominal voltage;

DT=CT-NT,CT为current temperature,NT为nominal temperature.

KfactorP、KfactorV、KfactorT分别是对于的K参数,表示制程、电压、温度对延时的影响。

·I/Opad属性(pad attributes):

主要就是定义I/O引脚的电平属性,告诉你输入是COMS还是TTL,什么时候达到高电平、什么时候是低电平。

·线负载模型(wire-loads):

工艺库的线负载模型如下所示:

DC采用wire-load模型在布局前预估连线的延时。通常,在工艺库中,根据不同的芯片面积给出了几种模型(上图所示)。这些模型定义了电容、电阻与面积因子。此外,导线负载模型还设置了slope与fanout_length,fanout-length设置了与扇出数相关的导线的长度。

有时候,除了扇出与长度,该属性还包括其他参数的值(这个工艺库没有),例如averagecapacitance、standarddeviation与numberofnets,在DC产生导线负载模型时会自动写出这些值。对于超过fanout-length属性的节点,可将该导线分成斜率不同的几段,以确定它的值。

C工艺库剩下的全是标准单元(cell)的描述:如反相器、触发器、与非门、或非门的描述等:

·标准单元内容概述

综合库中的每个单元都包括一系列的属性,以描述功能、时序与其他的信息。在单元的引脚描述中,包含了如下内容:输入引脚的fanout-load属性、输出引脚的maxfanout属性、输入或输出引脚的maxtransition属性、输出或者inout引脚的max_capacitance属性。利用这些描述,可以对设计进行DRC(设计规则检查)。如果某个单元的输出最大只能接0.2pF的负载,但在实际综合的网表中却连接了0.3pF的负载,这时候综合工具就会报出DRC错误。

通常,fanoutload与maxfanout一起使用maxtransition与maxcapacitance一起使用。如果一个节点的扇出为4,它驱动3个与非门,每个与非门的fanout-load是2,则这三个与非门无法被驱动(因为3*2>4)。

maxtransition通常用于单元的输入引脚,maxcapacitance一般用于单元的输出引脚。如果任何节点的transition时间大于引脚的maxtransition值,则该节点不能连接。如果发生违例,则DC用一个具有更大maxcapacitance值的单元来取代驱动单元。

在对输出引脚的描述中,给出了该引脚的功能定义,以及与输入弓}脚相关的延时。输入引脚定义了它的引脚电容与方向。这个电容值不能与maxcapacitance值相混。DC利用输入引脚的电容值进行延时计算,而maxcapacitance仅用来进行设计规则检查。

对于时序元件中的时钟引脚,专门用clock类型进行说明,如下所示:

注:许多设计者都会抱怨工艺库中对单元的DRC属性设置不当,这是由于库的能力是有限的所致。对于一个设计,综合库的DRC设置可能很合适,而对于另一个设计就可能不太合适。这时候,需要设计者对综合库进行“剪裁”。当然,这种“剪裁”必须比库中的定义更为严格。如将一个库中buffd0的Z端的max_fanout由4.0改为2.0的命令:

dcshell> setaddribute find(pin, ex25/BUFFDO/Z) max_fanout 2.0

上述的命令可以写在synopsys-dc.setup文件中。

(单元的延时)

在一个单元的综合库中,最核心的是对时序和功耗的描述。一个单元的延时跟以下因素有关:

器件内部固有的延时、输入转换时间(也称为输入上升/下降时间)、负载(驱动的负载及连线)、温度、电压、制程变化。

前三个因素是由电路本身的特性所决定的,后三个因素是由环境决定的。在实际电路中,输入转换时间、负载与连接单元的电路有关,所以我们只需要列出在不同的输入转换时间、不同的负载下单元的延时就可以了。这个延时包括器件的内部固有延时。此外,利用前面提到K缩放因子,将温度、电压、制程的影响也考虑进来。如下面的这个反相器单元,它的延时就可以通过输入转换时间和负载决定:


说到单元的延时,不得不说计算单元延时的模型

Synopsys支持的延时模型包括:CMOS通用延时模型、CMOS分段线性延时模型和CMOS非线性延时查找表模型(Nonlinear Delay Model)。前两种模型精度较差,已经被淘汰,主要用非线性延时模型。下面进行解释非线性延时模型。

非线性延时模型也称为二维非线性延时模型。在该模型中,用二维列表的形式给出单元在特定的输入转换时间、输出负载下的延迟(包括单元的延时和单元的输出转换时间):

单元的输出转换时间又成为其驱动的下级单入的输ru转换时间。库中每个单元有两个NLDM表。上面的图中,当输出负载和输入转换时间为0.05 pF和0.5 ns时,从表中可查出单元的延迟为0.23 ns,输出转换时间为0.30 ns 。

对于在范围之内的点,可以用插值的方法得到;对于在范围之外的点,可以用外推的方法得到。线性插值如下图所示:

计算延时的公式为:

Z=A+BXX+CXY+DXXXY

其中,Z代表单元的延时,A, B, C, D是系数,X为输出节点电容,Y为输入转换时间。

输入的上升、下降时间是由上一级输出的上升、下降时间得到的。输出节点的电容可以由负载的输入引脚电容及连线负载计算得到。在综合时,使用导线负载表可以预测导线负载。导线负载模型在综合库中进行了定义。当然,用户也可以自己生成连线负载模型。该模型也是用查找表的方式,列出在不同负载下的平均连线延迟。在布局之后,可以得到更为精确的导线长度。在布线后,可以得到最确切的导线长度。可以用该导线负载来计算最终的延时,以便进行静态时序分析与时序计算。

使用线性插值的举例:一个标准单元的延迟查找表如下图所示:

在查找表中,根据不同的输入转换时间和输出节点电容,列出了标准单元的延时。例如,当输入节点的转换时间为0.1 ns,输出负载为0.01pF时,单元的延时为0.17 ns。如果单元的输入转换时间为0.2 ns,输出节点电容为0.002 pF,则从表中无法直接查找到延时,需要通过线性插值的方法来求得该值:

计算延时的第一步,是求出延时公式中的系数A, B, C, D,然后根据实际的输入转换时间和输出电容求出实际的延时。

假设该单元的输入转换时间为0.2(位于查找表的第1列与第2列之间),输出节点电容为0.003(位于查找表的第1行与第2行之间),这样,我们将查找表中的相应的4值代入延时公式,可得:

0 .080=A+B0.1 +C *0.001 +D0.1*0.001;

0 .130=A+B * 0 .5+C * 0.001 +D0.50.001;

0 .170=A+B * 0 .1+C0.01 +D0.1*0 .01

0 .220=A+B * 0.5+C0.01 +D0.5*0.01

求解这4个等式,可得 A=0 .057 52,B=0 .1248,C=9 .9998,D=0 .2。

接下来,我们将实际的节点电容、输入转换时间代入延时公式,可以得到这种情形下该单元的实际延时为:

Z=0 .5752+0.1248X0.003+9.9998 X 0.2+0.2X0.2X0.003 (ns)

单位为ns,输出转换时间、短路功耗的计算与此类似。

说明:利用DC中的reportpowercalculation命令,可以显示出某一节点处energy的具体求解过程;利用DC中的reportdelaycalculation命令,可以显示出某一节点处延迟或输出转换时间的具体求解过程。

本文系转载。出处为 http://www.cnblogs.com/IClearner/ ,作者:IC_learner

全部评论
感谢分享
点赞 回复 分享
发布于 2022-07-10 11:01

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务