DC概论总结.docx

上传人:b****4 文档编号:5195609 上传时间:2022-12-13 格式:DOCX 页数:70 大小:2.48MB
下载 相关 举报
DC概论总结.docx_第1页
第1页 / 共70页
DC概论总结.docx_第2页
第2页 / 共70页
DC概论总结.docx_第3页
第3页 / 共70页
DC概论总结.docx_第4页
第4页 / 共70页
DC概论总结.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

DC概论总结.docx

《DC概论总结.docx》由会员分享,可在线阅读,更多相关《DC概论总结.docx(70页珍藏版)》请在冰豆网上搜索。

DC概论总结.docx

DC概论总结

DC概论总结

1DC概论之一setuptime与holdtime之一2

2DC概论二之fanout与skew5

3DC概论三setuptime与holdtime之二…………11

4DC概论四setuptime与holdtime之三15

5DC概论五之highfanout21

6DC概论六之multicycle_path32

7DC概论七之multicycle_path补充42

8DC概论八之gatedclock之一47

9DC概论九之gatedclock之二52

10DC概论十之virtualclock55

11DC概论十一之IO约束58

12DC概论十二之优化约束63

1DC概论之一setuptime与holdtime之一

IC代码的综合过程可以说就是时序分析过程,dc会将设计打散成一个个路经,这些路经上有cell延迟和net延迟,然后dc会根据你加的约束,来映射库中符合这种延迟以及驱动的器件。

从而达到综合的目的。

dc的所有时序约束基础差不多就是setuptime和holdtime。

可以用下面的图片说明:

所谓setuptime即建立时间,也就说数据在时钟到来之前保持稳定所需要的时间,holdtime即保持时间,也就是说在时钟到来之后数据需要保持稳定的时间。

在深入建立时间和保持时间之前。

先了解下dc中的路经以及startpoint ,endpoint。

 所谓startpoint就是:

1.inputport(顶层设计的输入端口)

2.clockpinofsequentialcell(触发器的clockpin)所谓的endpoint就是:

1outputport(顶层设计的输出端口)

3.datapinof sequentialcell(触发器的datapin)了解startpoint和endpoint,就可以方便的了解dc是如何将设计打散成路经,一个设计中基本的路经分为4种,如下图:

path1:

Inputporttodatapinofsequentialcell

path2:

Inputporttooutputport

path3:

Clockpintodatapinofnextsequentialcell

path4:

Clockpintooutputport

所有的设计也就这四种类型的路径。

另外一种就是带反馈的,也就是本身的clockpintodatapin 。

 

有了路径的概念之后,我们可以分析更复杂的setuptime和holdtime。

 dc中对于建立时间的分析是基于路径的最大延迟;而对于保持时间的分析是基于路径的最小延迟。

看下面一个例子:

 这个是给定setuptime和holdtime的案例,要求算出最小时钟周期。

同理也可以给你一个周期和setuptime和holdtime,计算时间裕度。

我们假设时钟周期是20,每个触发器的cell延迟是1,触发器的建立时间是1,保持时间是0.5,分析下列图中的建立时间和保持时间的slack。

看到设计,首先要分析路径,找出最长和最短路径,因为dc的综合都是根据约束而得到最短和最长路径来进行器件选择的。

所以接下来将图中的所有路径标出。

因为没有前级(input_delay)和后级电路(output_delay),我们只分析图中给出的路径,如下图:

对于红色路径:

Td=Tcell+Td4+Td5+Td6=1+4+3+1=9

对于黄色路径:

Td=Tcell+Td4+Td5+Td6+Td8=1+4+3+1+2=11

对于紫色路径:

Td=Tcell+Td1+Td2+Td3=1+2+3+2=8

对于绿色路径:

Td=Tcell+Td7+Td2+Td3=1+2+3+2=8

所以Tlongest=11,Tshortest=8

对于setuptime的slack:

Tclk-Tlongest-Tsetup=20-11-1=8

对于holdtime的slack:

Tshortest-Thold=8-0.5=7.5

对于setuptime和holdtime的slack的计算,可以体会下面的示意:

对照第一副示意图与此比较,建立时间看D2,保持时间看D1,因为同时把Tl和Ts放在一个图例中,看起来可能有些误解:

 有空会继续讨论setuptime和holdtime,下次讨论将包括clockskew和inputdelay,outputdelay在其中。

2DC概论二之fanout与skew

Dc综合是基于路径,每个路径上都有Cell和net,所以基于路径的综合就是计算路径上的delay和rc(dc是使用互连线模型进行估算)。

 在了解delay和rc的计算时,我们要先了解一下一个cell对于drive(前级)和driven(后级)所用到的模型是什么。

如下图,一个buffer,从前级看过来是一个load(capacitance,想获得这个load,可以通过load_ofbuffer/a获得),从后级看来是一个drive(resistance)。

电路的的驱动能力是上一级的1/R,即电阻的倒数,驱动能力大,说明看过去的电阻小,也说明这个器件比较大(大器件有较大的驱动能力)。

电路的负载能力是下一级的load(即电容)总和,负载能力大,说明能驱动下级的器件就很多。

大器件是大电容,小电阻,而小器件是小电容,大电阻。

理解这些,对于dc综合以及后端apr版图都有很好的操作。

 对于cell的延迟,dc是根据input_transition和out_load对应的查找表来计算的。

对于net的延迟,dc是根据wire_load_model中的fanout_length和resistance,capacitance,area的查找表计算的。

例如:

Wire_load(small){

Resistance   :

0.2;

Capacitance  :

1.0;

Area        :

0;

Slop        :

1.0;

Fanout_length(1,0.022);

Fanout_length(2,0.046);

Fanout_length(3,0.070);

Fanout_length(4,0.095);

}

比如现在扇出是2,

根据fanout_length(2,0.046)可以知道这个互连线的长度是0.046,然后再根据capacitance,resistence可以得出这个互连线的电容为:

0.046x1.0,互连线电阻为:

0.046x0.2。

 

如果扇出是5,在查找表中没有找到fanout_length为5的項,互连线长度将会是=fanout_length(4,0.095)+(5-4)*slop=0.095+1*1.0=1.095

 得出了rc就可以计算出信号的transition时间=2.2RC。

实际的互联线如下:

扇出线上的转换时间根据在版图之后提取的rc参数信息求得:

2.2RC=(Rnet+Rout)×(Cnet+Cin)

无论如何,要记住的就是dc是基于路径分析的(怎么划分路径请参考另一篇:

由上面可以知道fanout影响到load(capacitance),transition,delay。

了解了上面,我们来理解下dc中对design建模,所用到的一些跟fanout有关的参数。

Dc中的约束,其实就是给chip设计一个环境,比如驱动这个chip输入端口的cell,或者这个chip输出端口驱动了那些单元或者端口接入了哪些负载,以及这个芯片的工艺,电压,温度,等等。

对于一个cell来说,输出端口具有max_fanout属性,输入端口有fanout_load属性。

例如将一个AND2作为design的驱动cell(set_driving_cell),这样就把AND2的max_fanout属性加在了输入端口上。

如果一个AND2的输出端口max_fanout是5,输入端口fanout_load是2。

一个buffer输入端口的fanout_load是3。

那么这个AND2的输出端可以接2个AND2,或者可以接一个buffer,或者可以接一个buffer和一个AND2。

如上图所示,则会引起DC产生DRC错误。

因为输入端口的fanout_load=2XAND2+buffer=7,超过了AND2的max_fanout2.如果使用了系统提供的set_max_fanout5[all_inputs],将会忽略set_driving_cell中cell的max_fanout属性,而使用set_max_fanout属性

如果将一个AND2作为design的负载,那么这个输出端口上的fanout_load属性将会为2.dc中一般的做法是set_fanout_load[expr[get_attributeslow/and2/afanout_load]*xxx][all_outputs],来设置输出端口的fanout_load属性。

这样dc就可以根据这些设置,选择优化端口处的器件,以及时序。

说到fanout,所以顺带说明一下容易混淆的max_fanout,max_capacitance。

如上图所示,

输入端口的fanout_load=2个与门的fanout_load和一个buffer的fanout_load。

输入端口的load(capacitance)=2个与门的load_of和一个buffer的load_of。

(如果通过set_load设置了输入端口,另外还要加上set_load的值)。

 

Max_fanout检查的是输入端口的fanout_load最大值,

Max_capacitance检查的是inputportoroutputportordesign的load值。

两者概念不同。

 

下面讲下fanout与delay,看如下一个例子:

到buffer的net延迟是2,buffer延迟是1,fanout为1时net延迟为3,每增加一个扇出,net延迟增加2.如果一个信号经过这个扇出网络后,那么延迟为:

2+1+(3+(8-1)×2)=20;

如果把扇出结构优化成如下形式:

那么信号经过这个网络后,延迟为:

2+1+2+1+(3+(4-1)×2)=15.

那么延迟减少了5。

 接下来讲一下skew,既然知道了fanout对于delay的影响,下面看一个例子:

 

由于时钟到每个触发器的互连线长短不一样,造成信号到达clockpin的时间也不一样,触发器也不会同时翻转。

Skew的定义就是最长路径减去最短路径的值。

 

根据时钟域以及路径关系,skew可以分为globalskew,localskew,interclockskew。

Globalskew是指,同一时钟域,任意路径的最大skew。

Localskew是指,同一时钟域,任意2个有逻辑关联关系的路径最大skew。

interClockskew是指,不同时钟域之间路径的最大skew 

另外还有一个usefulskew。

本来打算在setuptime和holdtime中讲解。

这里先大概说下

如下图:

时钟周期为10ns,各时钟路径延迟如下:

可以看到有一条路径的slack为-1,说明这条路径违规。

可以看到与这条路径相关的skew是T3-T2=-1ns。

下面我们利用usefulskew向前面一个slack比较充裕的路径(slack=2ns)借点time,来修正现在这条路径。

如下图:

 

经过usefulskew,修正了原来的violator。

这就是usefulskew的作用,可以向前,或者向后接time来修正violator

本节告一段落,欢迎访问:

) 

接下来会讲下setuptime和holdtime

(二)加入input_delayoutput_delay以及skew

3DC概论三setuptime与holdtime之二

前面一篇讲了基本的建立时间和保持时间以及时序路径划分。

在这篇开始之前,先介绍一下很经典而且会时常用到的用来讲解的一个电路图,如下。

这篇文章的讲解也会给予这个电路图,讲解的时候我把电路图分割成需要的部分:

既然我们知道了建立时间和保持时间的含义,这篇主要是根据工厂提供的标准单元库中时序器件的建立时间和保持时间来预估我们的约束对设计的影响,是否满足时序要求,简单点就是说,时序有没有violator。

set_input_delay:

input_delay是设置外部信号到达输入端口的时间,dc会用它来计算留给内部逻辑的空余时间是多少。

之所以让ClkA和Clk的时钟周期不一致,主要是用来说明上图中黄色部分的。

黄色部分的确认是很重要的。

这是DC用来确定时间余量(slack)的关键。

如上图所示,黄色部分已经确实是最小相位差。

那么根据input_delay时间以及库中触发器的setup建立时间,可以知道留给内部逻辑的延迟时间是红色部分Tmin-Tinput_delay-Tsetup。

综合过程中,dc会优化Logic2的时序,以使他达到时序要求。

 

同样set_output_delay是设置输出端口到数据采集处的延迟。

如下图:

DC会根据他来计算留给内部逻辑的时间。

这里还是要强调一下不同频率的问题:

) 

介绍完了input_delay和output_delay,以及skew(上篇:

在分析时间余量之前再介绍下时钟的latency。

Latency分为sourcelantency和一般的latency。

Sourcelatency指的是时钟源到时钟端口的延迟。

Latency指的是时钟端口到内部时序器件的时钟管脚的延迟。

一般只考虑latency即可。

再看下latency对于内部逻辑的影响.下图是不考虑latency的情况:

内部逻辑延迟的限度为T2-T1-Tinput_delay-Tsetup。

当考虑了latency的时候。

D1上的clock会变成时序图中的红色部分

那么留给内部逻辑的最大延迟为:

T2’(T2+Tlatency)-T1-Tinput_delay-Tsetup。

会发现留给内部逻辑的延迟会变大,那么会给DC更大的空间来综合。

 

同样如果ClockA上面如果也设置了Latency在分析slack的时候也要算进去。

顺便介绍一下时钟的jitter,如下图

正常的时钟到来时蓝色的时序图。

但是由于无法预知的因素,时钟可能提前(粉色)或者延迟(红色)到来,这就是jitter。

提前到来充为setupjitter,延迟到来充为holdjitter。

DC中把skew和jitter合成一个uncertainty。

用set_clock_uncertainty来设置。

下文中提到的skew指的是合体,即uncertainty。

Uncertainty分为setup和hold,顾名思义,如上图理解即可。

4DC概论四setuptime与holdtime之三

下面开始正式分析时间余量slack。

其实有了上面的知识,只要稍微说明下大家都会很明白。

在介绍slack之前,我们要先了解一下要求时间(requiredtime)和达到时间(arrivetime)的概念以及计算方法。

如果没有特殊说明,黑色clock代表没有影响因素的理想时钟,红色(粉色)clock代表受到latency影响的时钟。

蓝色clock代表同时受到latency和skew(uncertainty)影响的时钟。

 

对于建立时间(setuptime)的到达时间和要求时间。

 

在分析前,记住,建立时间是分析路径中的考虑到各种最不利因素的最大延迟,打个比方:

前面一级用尽最大程度向后推(最大的延迟),本级就尽最大力气向前顶(最大不确定因素)。

然后看中间有没有漏气(slack为负,时序违规)。

--[if!

supportLists]-->1, 

--[endif]-->输入端口到时序器件的数据端口。

上图中

要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup

到达时间=T1+Tlantency+Tinput_delay+Tlogic2

--[if!

supportLists]-->2, 

--[endif]-->时序器件的输出管脚到输出端口

上图中:

要求时间=T2+Tlatency-Toutput_delay-Tuncertainty_setup

到达时间=T1+Tlatency+Tcell+Tlogic5

3.时序器件到时序器件

上图:

要求时间=T2+Tlatency-Tuncertainty_setup-Tsetup

到达时间=T1+Tlatency+Tcell+Tlogic

4,输入端口到输出端口

如上图:

要求时间=T2+Tlatency-Tuncertainty_setup-Toutput_delay

到达时间=T1+Tlatency+Tinput_delay+Tlogic

 

我们再来看下保持时间,保持时间的到达时间和建立时间的到达时间是一样的。

只是保持时间的要求时间不一样而已.

保持时间类似于龟兔赛跑:

系统要求时间就是尽可能的向后,而线上信号就是追那个要确定的时间,追上了,就没问题,追不上问题就有了。

说明:

红色和粉色表示受latency影响,蓝色表示受uncertainty影响。

1.输入端口到时序器件的数据端口。

到达时间:

Tarrive=T1+Tlatency+Tinput_delay+Tlogic

要求时间:

Trequire=T2+Tlatency+Tuncertainty_hold+Thold

2.时序器件的输出管脚到输出端口

到达时间:

Ta=T1+Tlatency+Tcell+Tlogic

要求时间:

Tr=T2+Tlatency+Tuncertainty_hold+Thold-Toutput_delay

3时序器件到时序器件

到达时间:

Ta=T1+Tlatency+Tcell+Tlogic

要求时间:

Tr=T2+Tlatency+Tuncertainty_hold+Thold

4,输入端口到输出端口

到达时间:

Ta=T1+Tlatency+Tinput_delay+Tlogic

要求时间:

Tr=T2+Tlatency+Tuncertainty_hold+Thold-Toutput_delay

 

Slack计算:

对于建立时间:

Slack=要求时间-到达时间

对于保持时间

Slack=到达时间-要求时间

5DC概论五之highfanout

dc在综合高扇出的网络的时候,约束优先级是:

1.功能正确

2.DRC(max_transition,max_fanout,max_capacitance)

3.Setuptime (max_delay)

4.Holdtime(min_delay)

5.Other...

为了符合drc要求,dc通常花费很多时间来编译和修正这些DRCviolators。

路径上的cell延迟由input_transition和output_load(包括扇出pin上的load)决定,这个由查抄表可以得到。

而net延迟是由net上的R,C决定的。

在没有布局布线之前,我们不知道实际的R,C是多少,dc根据互联线模型(set_wire_load_model)来计算出R,C。

然后根据得到的R,C计算出net上的延迟:

Net_delay=R*C*OC

其中系数OC是根据操作环境(set_opearting_conditions)中设置的rc树模型得到。

一般的工艺库的操作环境有三种,WORST,TYPICAL,BEST,分别是最差,典型,最坏。

在ic中出现highfanout的情况基本有三种:

1.时钟clock

2.复位reset

3.一般信号

--[if!

supportLineBreakNewLine]-->

--[endif]-->

dc中对于高扇出net的处理,基本就是加buffer(前提,如果没有对这条net设置一些约束,比如set_ideal_network,set_dont_touch,后面会讲到),以此来减少cell输出端的负载,从而减少transitiontime和delaytime,以及max_capacitance。

而事实上我们是不希望dc这么处理的,我们希望的是可以在后端版图的时候让后端工具自己加buffer,因为我们不知道真实的highfanoutnet上的RC,所以不知道应该加怎么样的buffer,dc只是根据互联线模型来计算RC,接着加入buffer,不是真实的,只有布线以后我们才可以得到几乎真实的rc。

 

所以在dc综合过程中我们要阻止dc最highfanoutnet进行insertbuffer处理。

因此这些没被处理的高扇出net就会引起一些drc或者timing错误,在dc中,dc用价值函数(costfunction)来判断这些约束对设计的影响。

价值函数=DRCviolator和+timingviolator和。

一般的,dc会根据所有drc和timing错误,通过使价值函数趋近等于0来修正这些违规。

为了达到效果,dc会每次修正一个路径,然后重新计算价值函数,如果价值函数变小,说明设计被改进了。

在介绍如何处理highfanoutnet之前,先介绍3个命令。

Set_ideal_net(已经被set_ideal_network-no_propagate代替)忽略port,pin,net上的时序优化(timingoptimization),以及drc修正(drcfixxing)。

network具有传输型。

Set_dont_touch(已经被set_dont_touch_network-no_propagate代替)忽略,port,cell,design,pin上的优化(timingoptimization),但是不会忽略DRC。

network具有传输型

这样我们在综合的时候就要对highfanoutnet做一定的约束,让dc不对这些net做优化以及加入buffer。

下面分三种情况来说明。

1.Clock,对于clock,当我们用create_clock,orcreat_generated_clock创建clock的时候,这些clock已经有了ideal_network的属性。

Dc已经不会在clocktree上加入buffer,同时也不会计算drcviolation,但是del

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1