标准单元工艺库(TSMC 90nm)文件详解

工艺库详解

参考:
Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象
https://www.cnblogs.com/IClearner/p/6622524.html

本文章以TSMC 90nm的标准单元库slow.lib作为示例,解释工艺库内容。

一. 概述

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

  • 一系列单元(包括单元的引脚)。
  • 每个单元的面积(在深亚微米中,一般用平方微米表示,在亚微米工艺下,一般用门来称呼,至于具体的单位,可以咨询半导体制造商)。
  • 每个输出引脚的逻辑功能。
  • 每个输入到输出的传递延时,输出到输出的传递延时;inout到输出的传递延时。

二. 内容与结构

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

  • 单元(cell)(的信息):(主要有)功能、时间(包括时序器件的约束,如建立和保持)、面积(面积的单位不在里面定义,可按照规律理解,一般询问半导体厂商)、功耗、测试等。
  • 连线负载模型(wire load models):电阻、电容、面积。
  • 工作环境/条件(Operating conditions):制程(process)(电压和温度的比例因数k,表示不同的环境之间,各参数缩放的比例)。
  • 设计规则约束(Design ):最大最小电容、最大最小转换时间、最大最小扇出。

工艺库的结构如下所示:
在这里插入图片描述
下面分别详细讲解:

1. 库注释

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

2. 库组

2.1 库的属性

在这里插入图片描述

2.1.1 通用属性描述(general attribute):

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

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

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

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

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

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

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

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

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

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

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

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

Design Compiler工具本身是没有单位的。然而在建立工艺库和产生报告时,必须要有单位。库中有6个库级属性定义单位。

time_ unit(时间单位)、voltage_unit(电压单位)、current_ unit(电流单位)、pulling_resistance_unit(上/下拉电阻单位)、capacitive_load_unit(电容负载单位)、leakage_power_unit(漏电功耗单位)。

2.2 环境描述

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

2.2.1 操作条件(operation conditions):

在工艺库中,用操作条件设置了制程(process)、温度(temperature)、电压(voltage)与RC树模型(tree_type)。
在这里插入图片描述
在综合和静态时序分析时,DC要用到这些信息来计算电路的延迟,而库中的这组操作条件为基础(也就是nom_xxxx)操作条件。一个工艺库只有这么一组基础的操作条件,如果要使用不同的操作条件,则需要借助K参数进行缩放。制程、温度、电压这些很好理解,下面主要说一下这个RC树模型(tree_type)

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

连线延时(从驱动引脚的状态变化到每个接受单元输入引脚的状态变化,线负载模型设每个分枝的延迟是一样的。)的一个示例如下图所示:
在这里插入图片描述
在这个简单的电路中,BUF1的输出驱动两个单元BUF2与BUF3。在物理上,这是两根连线。而在网表中,两根连线用一个net来表示。 在布局前,假设这两根线有相同的寄生电阻与寄生电容,即Cwire1-Cwire2=R1-R2 。

假设我们想了解从BUF1的输出到BUF2的输入端的延时。这个延时实际上是给连线及BUF2的输入引脚负载进行充、放电所消耗的时间。如何计算这个延时呢? tree-type就是为此而定义的。

Tree-type有三种取值,这个延时就有三种计算模型。如下图所示:
在这里插入图片描述

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

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

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

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

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

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

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

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

根据提供的K参数,DC按下面的公式计算不同的制程,电压和温度的单元延迟:
D e l a y = ( n o m i n a l   d e l a y ) × ( 1 + ( D P ∗ K f a c t o r P ) ) × ( 1 + ( D V ∗ K f a c t o r V ) ) × ( 1 + ( D T ∗ K f a c t o r T ) ) Delay= (nominal\ delay)×(1+(DP*K_{factor}P))×(1+(DV*K_{factor}V))×(1+(DT*K_{factor}T)) Delay=(nominal delay)×(1+(DPKfactorP))×(1+(DVKfactorV))×(1+(DTKfactorT))

其中:
  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参数,表示制程、电压、温度对延时的影响。
在这里插入图片描述

2.2.6 I/Opad属性(pad attributes):

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

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

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

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

2.3 标准单元(cell)的描述

在这里插入图片描述

2.3.1 标准单元内容概述:

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

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

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

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

对于时序元件中的时钟引脚,专门用clock类型进行说明,如下所示:
在这里插入图片描述
单元的延时
在一个单元的综合库中,最核心的是对时序和功耗的描述。一个单元的延时跟以下因素有关:器件内部固有的延时、输入转换时间(也称为输入上升/下降时间)、负载(驱动的负载及连线)、温度、电压、制程变化。

前三个因素是由电路本身的特性所决定的,后三个因素是由环境决定的。在实际电路中,输入转换时间、负载与连接单元的电路有关,所以我们只需要列出在不同的输入转换时间、不同的负载下单元的延时就可以了。这个延时包括器件的内部固有延时。此外,利用前面提到K缩放因子,将温度、电压、制程的影响也考虑进来。如下面的这个反相器单元,它的延时就可以通过输入转换时间和负载决定:
在这里插入图片描述
说到单元的延时,不得不说计算单元延时的模型。Synopsys支持的延时模型包括:CMOS通用延时模型、CMOS分段线性延时模型和CMOS非线性延时查找表模型(Nonlinear Delay Model)。前两种模型精度较差,已经被淘汰,主要用非线性延时模型。下面进行解释非线性延时模型。

非线性延时模型也称为二维非线性延时模型。在该模型中,用二维列表的形式给出单元在特定的输入转换时间、输出负载下的延迟(包括单元的延时和单元的输出转换时间):
在这里插入图片描述
单元的输出转换时间又成为其驱动的下级单入的输ru转换时间。库中每个单元有两个NLDM表。上面的图中,当输出负载和输入转换时间为0.05 pF和0.5 ns时,从表中可查出单元的延迟为0.23 ns,输出转换时间为0.30 ns 。

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

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

2.3.2 反相器的综合模型:

综合库中主要给出了各端口的功能、电容、功耗及延时等信息(不同的库模型信息种类可能不一样)。反相器的功耗主要分为两部分:静态功耗和动态功耗。 其中静态功耗是指泄漏功耗,动态功耗包括翻转时的短路功耗及节点电容的充放电所消耗的功耗。节点电容充放电消耗的功耗仅跟VDD、节点翻转率及节点电容有关。其中,VDD和节点电容是固定的,节点翻转率跟输入激励有关,需要通过仿真激励进行计算。因此,在综合库中,不列出充放电功耗。而短路功耗跟输入转换时间和节点电容有关,一般以查找表的形式给出(在综合库中,用internal_power表示)。

具体的反相器的综合模型如下所示:
在这里插入图片描述
在这里插入图片描述
当然,上面看到的只是部分内容,有些内容折叠起来了比如输入引脚的等效负载、输出引脚的短路功耗等被折叠起来了,下面进行讲解:
在这里插入图片描述
引脚A表示反相器的输入(上图),展开后可以看到输入的引脚的等效负载,也就是等效电容的大小。

输出管脚Y有:
在这里插入图片描述
里面主要包含了引脚的功能(function)、短路功耗(internal_power)、时序信息(timing)、输出的最大负载(max_capacitance)等信息。

短路功耗信息(internal_power):

展开短路信息如下图所示:
在这里插入图片描述
短路功耗与A管脚相关联,也就是与A管脚有关系。

rise_power给出了Y从低到高时的短路功耗,功耗跟输入信号的转换时间(index_1)及节点电容(index_2)有关;根据不同的信息进行查表,表的值就是(value),7X7表示index_1是7,index_2也是7,因此value是7X7=49,如下图所示:
在这里插入图片描述
也给出了从高到低的短路功耗(fall_power),功耗跟输入信号的转换时间及节点电容有关;具体内容类似从低到高时的短路功耗,不再详述。

时序信息(timing):
在这里插入图片描述
主要包括相关引脚、时序敏感类型、单元延时、转换时间等。

Cell_rise 给出了Y从低到高时单元的延时,延时跟输入转换时间和节点电容有关:
在这里插入图片描述
Rise_transition给出Y从低到高时输出的延时(transtion),跟输入转换时间和节点电容有关:
在这里插入图片描述
Cell_fall、fall_transition:则是对应Y从高到低时的单元延时和输出延时,也是跟输入转换时间和节点电容有关。

单元的泄漏功耗(cell_leakage_power):

有时候,也给出在不同条件时的泄漏功耗(也就是查表的方式):
在这里插入图片描述
反相器作为组合逻辑最简单、最经典的模型,其综合库的模型内容就如上所示了,下面介绍时序逻辑的。

2.3.3 寄存器单元的综合模型:

寄存单元综合库模型主要包括以下内容:

  • 单元面积
  • D端短路功耗
  • D端的建立时间约束和保持时间约束
  • 时钟引脚上的短路功耗
  • 时钟引脚上的最小脉宽要求
  • 输出端的短路功耗
  • 输出端的延时
  • 输出端的最大负载约束
  • 单元的泄漏功耗

其综合库内容如下所示:
在这里插入图片描述
上面综合库的具体内容下面进行具体叙述:

D端口(引脚):

输入端口,主要包含输入的等效负载、短路功耗、时序信息。
在这里插入图片描述
D端消耗的短路功耗(internal_power):
在这里插入图片描述
rise_power给出D端由低电平变到高电平时的短路功耗,跟输入转换时间有关,电容为定值:
在这里插入图片描述
fall-power则给出D端由高电平变到低电平时的短路功耗,跟输入转换时间有关,电容为定值。

时序信息(Timing):
在这里插入图片描述
D的时序信息与“CK”端口有关,Setup_rising表明是setup(建立时间)的时序信息。

rise-constraint:给出D端由低电平变到高电平时的setup约束,跟D端输入转换时间和时钟的转换时间有关:
在这里插入图片描述
fall-constraint则给出D端由高电平变到低电平时的setup约束,跟输入转换时间和时钟的转换时间有关。

前面我们看到,有两个timing,一个既然是建立时间了,那么另外一个就是保持时间了:
在这里插入图片描述
rise-constraint:给出D端由低电平变到高电平时的hold约束,跟输入转换时间和时钟的转换时间有关。fall-constraint:给出D端由高电平变到低电平时的hold约束,跟输入转换时间和时钟的转换时间有关。

CK端口

这个是时钟端口,主要给出了输入的负载、最大转换时间约束、短路电流、高低电平的最小脉宽要求,如下图所示。
在这里插入图片描述
短路功耗(Internal_power):

在这里插入图片描述
也是分为CK上升时跟下降时的短路功耗,与D端有关。

min_pulse_width_high、min_pulse_width_low : 给出了时钟高低电平的最小脉宽要求。

ff:描述寄存器的功能。
在这里插入图片描述
Q端口
在这里插入图片描述
主要描述Q的功能,短路功耗,时序信息,输出最大的负载电容。

短路功耗(Internal_power):
在这里插入图片描述
rise_power给出了输出端由低电平变到高电平时的短路功耗,跟输入转换时间、Q端负载及QN端负载有关:
在这里插入图片描述
fall_power则输出端由高电平变到低电平时的短路功耗,跟输入转换时间、Q端负载及QN端负载有关。

时序信息(Timing):
在这里插入图片描述
说明Q端口与CK的上升沿有关。

cell-rise给出Q端由低电平变到高电平时CK到Q的延时,跟输入转换时间和输出节点电容有关:
在这里插入图片描述
rise-transitio给出了Q端由低电平变到高电平时Q端转换时间,跟输入转换时间和输出节点电容有关:
在这里插入图片描述
cell-fall给出了Q端由高电平变到低电平时CK到Q的延时,跟输入转换时间和输出节点电容有关;

fall-transition给出了Q端由高电平变到低电平时Q端转换时间,跟输入转换时间和输出节点电容有关。

max_capacitance: 是最大输出负载电容约束。

QN管脚:跟Q管脚类似,不进行陈述了。

cell_leakage_power:给出了默认单元漏电流大小。而下面的不同漏电流,则是根据端口信号处在不同状态时的漏电流大小:
在这里插入图片描述
注:对于有复位信号的寄存器,还有可能有下面的信息:

  • 复位引脚上的短路功耗;
  • 复位引脚上的最小脉宽要求;
  • 复位引脚上的recovery/removal时序约束;
  • 输出端的输出转换时间(相对于时钟);
  • 输出端的输出转换时间(相对于异步复位信号);
  • 输出端的延时(相对于异步复位信号);
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值