前言
在制程进入深次微米世代之后,晶片(IC)设计的高复杂度及系统单晶片(SOC)设计方式兴起。此一趋势使得如何确保IC品质成为今日所有设计从业人员不得不面临之重大课题。静态时序分析(Static Timing Analysis简称STA)经由完整的分析方式判断IC是否能够在使用者的时序环境下正常工作,对确保IC品质之课题,提供一个不错的解决方案。然而,对于许多IC设计者而言,STA是个既熟悉却又陌生的名词。本文将力求以简单叙述及图例说明的方式,对STA的基础概念及其在IC设计流程中的应用做详尽的介绍。
什么是STA?
STA的简单定义如下:套用特定的时序模型(Timing Model),针对特定电路分析其是否违反设计者给定的时序限制(Timing Constraint)。以分析的方式区分,可分为Path-Based及Block-Based两种。
先来看看Path-Based这种分析方式。如图一所示,讯号从A点及B点输入,经由4个逻辑闸组成的电路到达输出Y 点。套用的Timing Model标示在各逻辑闸上,对于所有输入端到输出端都可以找到相对应的延迟时间。而使用者给定的Timing Constraint为:
现在我们针对P1及P2两条路径(Path)来做分析。P1的起始点为A,讯号到达时间点为2。经过第1个逻辑闸之后,由于此闸有2单位的延迟时间,所以讯号到达此闸输出的时间点为4(2+2)。依此类推,讯号经由P1到达输出Y的时间点为7(2+2+3)。在和上述第三项Timing Constraint比对之后,我们可以得知对P1这个路径而言,时序(Timing)是满足使用者要求的。
按照同样的方式可以得到讯号经由路径B到达输出Y的时间点为11(5+1+3+2),照样和上述第三项Timing Constraint比对,我们可以得知对P2这个路径而言,Timing是不满足使用者要求的。
对图一的设计而言,总共有6个讯号路径。对于采用Path-Based分析方式的STA软体来说,它会对这6个讯号路径作逐一的分析,然后记录下结果。IC设计者藉由检视其分析报告的方式来判断所设计的电路是否符合给定的Timing Constraint。由于最常用来做静态时序分析验证核可(STA Signoff)的EDA软体PrimeTime?采用Path-Based的分析方式,所以本文将以Path-Based的分析方式介绍为主。
再来看看Block-Based的分析方式。此时时序资讯(Timing Information)的储存不再是以路径为单位,而是以电路节点(Node)为单位。由Timing Constraint我们仅能得知A节点的AT为2,B节点的AT为5以及Y节点的RT为10。Block-Based的分析方式会找出每个节点的AT和 RT,然后比对这两个数值。当RT的值大于AT时表示讯号比Timing Constrain中要求的时间还早到达,如此则Timing是满足的,反之则不满足。
STA资料准备
在做STA之前,我们必须对其准备工作有充分的了解。STA所需的资料如图三所示,以下我们分项说明。其中Design Data部分,由于Block Model和STA软体相关性太高,我们不在此加以说明,请直接参阅您STA软体的使用手册。
Library Data:
STA所需要的Timing Model就存放在标准元件库(Cell Library)中。这些必要的时序资讯是以Timing Arc的方式呈现在标准元件库中。Timing Arc定义逻辑闸任两个端点之间的时序关系,其种类有Combinational Timing Arc、Setup Timing Arc、Hold Timing Arc、Edge Timing Arc、Preset and Clear Timing Arc、Recovery Timing Arc、Removal Timing Arc、Three State Enable & Disable Timing Arc、Width Timing Arc。其中第1、4、5、8项定义时序延迟,其他各项则是定义时序检查。
Combinational Timing Arc是最基本的Timing Arc。Timing Arc如果不特别宣告的话,就是属于此类。如图四所示,他定义了从特定输入到特定输出(A到Z)的延迟时间。Combinational Timing Arc的Sense有三种,分别是inverting(或 negative unate),non-inverting(或 positive unate)以及non-unate。当Timing Arc相关之特定输出(图四Z)讯号变化方向和特定输入(图四A)讯号变化方向相反(如输入由0变1,输出由1变0),则此Timing Arc为inverting sense。反之,输出输入讯号变化方向一致的话,则此Timing Arc为non-inverting sense。当特定输出无法由特定输入单独决定时,此Timing Arc为non-unate。
其他的Timing Arc说明如下。
上文列出了标准元件库内时序模型的项目,但对其量化的数据却没有加以说明。接下来,我们就来看看到底这些时序资讯的确实数值是如何定义在标准元件库中的。
以Combinational Timing Arc为例,讯号从输入到输出的延迟时间可以描述成以输入的转换时间(Transition Time)和输出的负载为变数的函数。描述的方式可以是线性的方式,如图十三所示。也可以将这2个变数当成指标,建立时序表格(Timing Table),让STA软体可以查询出正确的延迟时间。这种以表格描述的方式会比上述线性描述的方式准确许多,因此现今市面上大部分的标准元件库皆采用产生时序表格的方式来建立Timing Model。
我们举个简单的例子来说明STA软体如何从时序表格计算出元件延迟时间。(图十四)
当输入的转换时间为0.5,输出负载为0.2时,可由图十四的时序表格查得元件I2的延迟时间为0.432。而由于表格的大小有限,对于无法直接由表格查询到的延迟时间(如输入转换时间0.25,输出负载0.15),STA软体会利用线性内插或外插的方式计算延迟时间。
对于其他的Timing Arc,不管是时序延迟或时序检查,其相对应的时序数值计算和上例的计算方式是一样的。
接下来我们说明操作环境(Operating Condition)对时序的影响。操作环境指的是制程(Process)、电压(Voltage)、温度(Temperature)三项因子。这三项因子通常会被简称为PVT,其对时序的影响可用下方线性方程式来描述。其中nom_process、nom_voltage及 nom_temperature会定义在标准元件库中,代表建立时序表格时的操作环境。
Interconnect Data:
在「什么是STA」段落的例子中,为了方便说明,我们并没有把逻辑闸和逻辑闸间的连线延迟(Interconnect Delay)考虑在内。事实上,许多DSM IC设计之时序表现是由连线延迟主导的,其重要性不容我们忽视。
连线延迟依照布局与绕线(P&R)前后有不同的考量。在布局与绕线前,元件在晶片中摆放的位置尚未确定,所以连线延迟是一个预估值。而在布局与绕线之后,连线延迟则是根据实际绕线计算出来的。对布局与绕线之前的连线延迟,通常是用Wireload Model来预估。Wireload Model根据晶片面积的预估大小及连线驱动元件数目(Fan-out)的多寡来决定连线的电阻和电容值,STA软体则利用这些电阻电容值计算出连线延迟。在布局与绕线之后,可以利用电阻电容萃取(RC Extraction)软体将绕线图形转换成实际的电阻电容电路,然后贴回(Back-annotate)STA软体计算连线延迟。
Timing Constraints:
Timing Constraint为使用者所给定,用来检验设计电路时序的准则。其中最重要的一项就是时脉(Clock)的描述。对于一个同步电路而言,暂存器和暂存器之间的路径延迟时间必须小于一个Clock周期(Period),也就是说,当我们确认了Clock规格,所有暂存器间的路径的Timing Constraint就会自动给定了。
Clock规格包含波形、Latency及Uncertainty的定义。波形定义一个Clock的周期及讯号上升缘及下降缘的时间点。 Latency定义从Clock来源到序向元件Clock输入端的延迟时间。Uncertainty则定义Clock讯号到序向元件Clock输入端可能早到或晚到的时间。
如果上面的文字让你有不知所云的感觉,那底下看图说故事的解说也许会让你有比较清晰的概念。在图十五的电路中,左边的正反器(Flip-Flop)在第一个Clock上升缘时会丢出资料,此资料会在第二个Clock上升缘让右边的Flip-Flop撷取。要分析右边的Flip-Flop能否正确撷取资料就必须知道第一个Clock上升缘到达节点C1的时间点和第二个上升缘到达节点C2的时间点。假设在时间点为0的时候,Clock讯号由S点出发,经过一段时间(source latency,1个时间单位,模拟晶片外的Clock延迟时间,例如板子上的绕线产生的讯号延迟时间)到达电路的Clock输入端点P,接下来再经过一段时间(晶片内Clock绕线造成的讯号延迟时间),Clock讯号分别到达C1和C2节点。如果电路已经进行布局与绕线,输入端点P到C1和C2的讯号延迟时间可由连线上的寄生电阻电容计算得来。比方说,经过计算发现讯号由P传递到C1需要1个时间单位,由P传递到C2需2个时间单位,则Clock讯号第一个上升缘到达C1和第二个上升缘到达C2的时间点就会如图十六下方两列所示,分别为时间点2和13(因为加上了1个时间单位的source latency)。
在布局与绕线之前,我们无法准确得知P到C1和C2的讯号延迟时间,仅能先做个预估。图十五的network latency及上文提到的Uncertainty就是用来做此种预估的。先假设我们拥有某种完美的布局与绕线软体可以让Clock输入端点P到所有 Flip-Flop的Clock输入端的讯号延迟时间一模一样,那么我们只要知道这个讯号延迟时间就可以得到Clock讯号到达C1和C2的时间点了。这个讯号延迟时间可以藉由电路特性(如预估面积大小,Flip-Flop数目等)来做预估,而这个预估值就是所谓的network latency。如果这种完美的软体存在的话,那Clock的上升缘到达C1和C2的时间点就可以由Latency(source latency + network latency)计算出来。
很不幸的,世界上没有这么完美的软体,在布局与绕线后Clock输入端点P到所有Flip-Flop的Clock输入端的讯号延迟时间不会完全一样。也就是说Clock的某个上升缘不会同时到达C1和C2。因此我们要对上述的预估值做些修正,加入Uncertainty的描述来定义Clock上升缘左右移动的可能范围。在图十六中,Uncertainty为1个时间单位,所以Clock第一个上升缘会在时间点3(因为 Latency为3)左右1时间单位范围内(也就是时间点2到时间点4)到达C1,。第二个上升缘则会在时间点12到14的范围内到达C2。
除了Clock之外,对于电路其他输出输入端点及其周边的环境(Boundary Condition)也要加以描述。在说明Boundary Condition之前,我们得对路径(Path)有更进一步的了解。上文曾提及STA会将电路中所有的Path找出来加以分析,但Path的定义是什么呢?
Path根据起点及终点可以分为4种:
当Clock规格确定了之后,第1种Path的时序限制(Timing Constraint)就自动的给定了。为了给定其他3种Path的时序限制,我们必须定义Boundary Condition。
一般来说,我们会定义下列的Boundary Condition:
在这些Boundary Condition定义之后,上述4种Path事实上都可看成是第1种Path(Flip-Flop到Flip-Flop)。也就是说,加上 Boundary Condition后,只要Clock给定,所有Path的Timing Constraint就会自动给定。。
由于每个Path都有Timing Constraint,所以时序分析都能够进行。但在某些情况下,有些Path的分析可能没有意义,因此你会想忽略这些Path的分析。或是有些Path 分析的方式不一样,你会想指定这些Path的分析方式。此时就要设定一些Timing Exception,如False Path和Multi-cycle Path等等来处理非一般性的时序分析。
STA流程及分析方式
STA的流程如图二十所示,而其分析验证的项目就是我们前文提及之时序检查相关的Timing Arc,如Setup Time、Hold Time等等。以下我们针对Setup Time举1实际范例来说明STA的分析方式。
Setup Time
设计电路如图二十一所示,时序模型(Timing Model)及时序限制(Timing Constraint)如下:
接下来,我们以Step-By-Step的方式说明时序分析的方式。
1. 首先找出所有Timing Path,我们只列出具代表性的3条Timing Path来加以说明。
2. 假设输入A讯号由0变1,计算第1条Path终点讯号到达的时间(Arrival Time简称AT)。
4. 计算第1条Path终点的需求时间(Required Time,简称RT)。
图二十五
5. 假设输入A讯号由0变1,计算第1条Path终点的Slack。Slack等于RT和AT的差值,对于Setup Time验证来说等于RT - AT,对于Hold Time验证来说等于AT - RT。在此Setup Time范例中,Slack为正,表示讯号实际到达Path终点时间比必须到达的时间还早,因此Timing是满足的。
6. 假设输入A讯号由1变0,计算第1条Path终点的Slack。Slack为正,因此Timing是满足的。
综合5和6,第1条Path的Timing是符合规格的,其Slack为4ns(取较差状况)。
7. 假设前级Flip-Flop的讯号由0变1,计算第2条Path终点的AT。
8. 假设前级Flip-Flop的讯号由1变0,计算第2条Path终点的AT。
9. 计算第2条Path终点的RT
10. 假设前级Flip-Flop的讯号由0变1,计算第2条Path终点的Slack。Slack为负,因此Timing不满足。
图三十一
11. 假设前级Flip-Flop的讯号由1变0,计算第2条Path终点的Slack。Slack为负,因此Timing不满足。
综合10和11,第2条Path的Timing不满足,其Slack为-3。
12. 假设前级Flip-Flop的讯号由0变1,计算第3条Path终点的AT。
图三十三
13. 假设前级Flip-Flop的讯号由1变0,计算第3条Path终点的AT。
图三十四
14. 计算第3条Path终点的RT。
图三十五
15. 假设前级Flip-Flop的讯号由0变1,计算第3条Path终点的Slack。Slack为负,因此Timing不满足。
图三十六
16. 假设前级Flip-Flop的讯号由1变0,计算第3条Path终点的Slack。Slack为负,因此Timing不满足。
综合15和16,第3条Path Timing不符合规格,其Slack为-4。
图三十七
综合上述分析结果,此电路的时序不符合规格,其Critical Path是Path3,Slack为-4。
总结
本文先对STA的概念做概念性的介绍,在下集的文章中,将对STA在实际IC设计流程中的应用举一范例说明,请各位拭目以待。
前言
在制程进入深次微米世代之后,晶片(IC)设计的高复杂度及系统单晶片(SOC)设计方式兴起。此一趋势使得如何确保IC品质成為今日所有设计从业人员不得不面临之重大课题。静态时序分析(Static Timing Analysis简称STA)经由完整的分析方式判断IC是否能够在使用者指定的时序下正常工作,对确保IC品质之课题,提供一个不错的解决方案。在「静态时序分析(Static Timing Analysis)基础及应用(上)」一文中笔者以简单叙述及图例说明的方式,对STA的基础概念做了详尽的说明。接下来,就让我们藉由实际设计范例来瞭解STA在设计流程的应用。
设计范例说明
设计范例为一个32bit x 32bit的Pipeline乘法器,其架构如图一所示。Pipeline共分3级,电路之输出输入端皆有暂存器储存运算数值。
图一
依据Cell-based设计的方式,首先以硬体描述语言设计图一之电路。接下来实作此电路,进行合成(Synthesis)及布局与绕线(P&R)。并在实作的各步骤后进行静态时序分析,确认时序规格是否满足。实作及验证所用到的软体及设计资料库如下所示:
在接下来的文章中,各位将会看到静态时序分析在实作过程中的应用。藉由实际产生的数据瞭解在不同实做步骤上时序分析的差异。
时序限制(Timing Constraint)
要作静态时序分析,首先要有时序限制。此设计范例的时序限制如下所述。(à后為设定时序限制之SDC指令)
1 时脉规格(Clock Specification)
1.1 週期:6ns à create_clock -name "MY_CLOCK" -period 6 -waveform {0 3} [get_ports {clk}]
1.2 Source Latency:1ns à set_clock_latency -source 1 [get_clocks {MY_CLOCK}]
1.3 Network Latency:1ns à set_clock_latency 1 [get_clocks {MY_CLOCK}]
1.4 Skew:0.5ns à set_clock_uncertainty 0.5 [get_clocks {MY_CLOCK}]
2 周边状况(Boundary Condition)
2.1 输入延迟(Input Delay):1.2ns à set allin_except_CLK [remove_from_collection [all_inputs] [get_ports clk] ]
set_input_delay $I_DELAY -clock MY_CLOCK $allin_except_CLK
2.2 输出延迟(Output Delay):1.2ns à set_output_delay $O_DELAY -clock MY_CLOCK [all_outputs]
2.3 输出负载(Output Loading):0.5pF à set_load $O_LOAD 0.5 [all_outputs]
3 时序例外(Timing Exception):无
合成软体之时序报告
当Synopsys Design Compiler将电路合成完毕后,执行下面指令可以產生时序报告:
report_timing -path full -delay max -max_paths 10 -input_pins \
-nets -transition_time -capacitance > timing_syn.txt
时序报告会储存在timing_syn.txt此档案中。在档案的开头不远处,会列出此电路最有可能不符合时序规格的路径(Critical Path)。例如:
Startpoint: S2/B2_reg_0_
(rising edge-triggered flip-flop clocked by MY_CLOCK)
Endpoint: S3/P3_reg_47_
(rising edge-triggered flip-flop clocked by MY_CLOCK)
Path Group: MY_CLOCK
Path Type: max
在这个例子中,Critical Path的起点Flip-Flop是第2个Pipeline Stage内的B2暂存器的第0个位元,终点Flip-Flop则是第3个Pipeline Stage内的P3暂存器的第47个位元(图二)。
在Critical Path报告的下方会有Wire Load Model的资讯,此范例使用的是UMC18_Conservative Model。这个Model会以较悲观的方式预估连线的延迟时间(Interconnect Delay)。
图二
继续往下检视档案,你会看到Critical Path的详细时序资讯。例如:
Point Fanout Cap Trans Incr Path
-------------------------------------------------------------------------------
clock MY_CLOCK (rise edge) 0.00 0.00
clock network delay (ideal) 2.00 2.00
S2/B2_reg_0_/CK (DFFHQX4) 0.00 0.00 2.00r
S2/B2_reg_0_/Q (DFFHQX4) 0.16 0.30 2.30r
S2/n36 (net) 1 0.03 0.00 2.30r
S2/U10/A (BUFX20) 0.16 0.00 2.30r
S2/U10/Y (BUFX20) 0.23 0.21 2.51r
...
...
S3/add_106/U0_5_47/A (XNOR2X2) 0.18 0.00 7.74f
S3/add_106/U0_5_47/Y (XNOR2X2) 0.12 0.22 7.96f
S3/add_106/SUM[47] (net) 1 0.01 0.00 7.96f
S3/add_106/SUM[47] (stage3_DW01_add_54_0) 0.00 7.96f
S3/N94 (net) 0.01 0.00 7.96f
S3/P3_reg_47_/D (DFFTRXL) 0.12 0.00 7.96f
data arrival time 7.96
clock MY_CLOCK (rise edge) 6.00 6.00
clock network delay (ideal) 2.00 8.00
clock uncertainty -0.50 7.50
S3/P3_reg_47_/CK (DFFTRXL) 0.00 7.50r
library setup time -0.28 7.22
data required time 7.22
--------------------------------------------------------------------------------
data required time 7.22
data arrival time -7.96
--------------------------------------------------------------------------------
slack (VIOLATED) -0.74
先由左往右看,第一个直行Point标示出路径中的节点,节点可以是元件的输出入端点,也可以是元件间的连线(Net)。第二个直行Fanout标示节点推动的元件个数。第三个直行Cap标示出节点推动的负载。第四个直行Trans标示出节点上信号的转换时间(Transition Time)。第五个直行Incr标示出节点造成的延迟时间。最后一个直行Path则是自路径起点到到此节点為止的总延迟时间。
再来我们由上往下检视Critical Path的时序资讯。
clock network delay (ideal) 2.00 2.00
此处的2ns的clock network delay是由我们给定的时序限制计算而来的,因為我们给定了各1ns的source latency及network latency,加起来共有2ns。
S2/B2_reg_0_/CK (DFFHQX4) 0.00 0.00 2.00 r
此行表示Critical Path的起点為S2 Instance下的B2_reg_0_这个instance的CK端点。由於有2ns的network delay,所以时脉信号到达此节点的时间為2ns(图三)。至於0ns的Transition Time则是因為我们没有在时脉规格中定义其数值,合成软体的会假设是一个0ns Transition Time的理想波形。最右边的r是因為这个Flip-Flop是正缘触发,所以以r表示。如果是f就是负缘触发。
图三
S2/B2_reg_0_/Q (DFFHQX4) 0.16 0.30 2.30 r
接著信号自起点开始向终点传递,这一行表示路径起点的Flip-Flop从CK端点到Q端点的时间延迟為0.3ns,且在此节点的Transition Time為0.16ns。所以信号到达此节点的时间為2+0.3=2.3ns(图四)。最右边显示r是因為Q端点从0变化到1时的延迟时间比1变化到0时的延迟时间还长,如果状况相反的话,最右边会标示f。以上数值是由元件库(Cell Library)裡的时序表(Timing Table)查出来的,其计算的方式请参照「静态时序分析(Static Timing Analysis)基础及应用(上)」。
S2/n36 (net) 1 0.03 0.00 2.30 r
S2/U10/A (BUFX20) 0.16 0.00 2.30 r
这两行和上一行最右边的Path栏位都一样,这是因為其实它们是同一个节点,所以信号到达时间一样。仔细的读者这时候可能会有个疑问,Flip-Flop的Q输出端和后面Buffer的输入端A信号到达时间应该有一个连线延迟(Interconnect Delay)的差距吧?想法上是没错,但因為Design Compiler这个合成器将连线延迟的时间合併到元件延迟(Cell Dealy)的时间内计算,所以从时序报告中看不到延迟时间的资讯。也就是说,如果Point栏是net的话,各位只需去检视Fanout和Cap栏位即可。S2/n36这个net只有推动一个Buffer,其Fanout為1。负载则是Buffer的输入负载和预估连线负载的总和,其值為0.03pF。
图四
S2/U10/Y (BUFX20) 0.23 0.21 2.51 r
这一行是描述Buffer从输入端到输出端的时间延迟,其值為0.21,所以信号到达Buffer输出端的时间為2.3+0.21=2.51ns(图五)。
接下来是一堆类似的元件时序资讯,我们略过它们不讨论,直接跳到最后面几个元件。
S3/add_106/U0_5_47/A (XNOR2X2) 0.18 0.00 7.74 f
S3/add_106/U0_5_47/Y (XNOR2X2) 0.12 0.22 7.96 f
这是到Critical Path终点前的最后一个元件,信号到达的时间是7.96ns。各位可以看到最右边的标示已经变成f了,这表示信号由1变0的状况元件延迟时间较长。
S3/add_106/SUM[47] (net) 1 0.01 0.00 7.96 f
S3/add_106/SUM[47] (stage3_DW01_add_54_0) 0.00 7.96 f
S3/N94 (net) 0.01 0.00 7.96 f
S3/P3_reg_47_/D (DFFTRXL) 0.12 0.00 7.96 f
data arrival time 7.96
这几行都是同一个节点的时序资讯,只是逻辑阶层(Logic Hierarchy)不同。信号最后到达Critical Path终点的时间為7.96ns(图六)。以上是Arrival Time(AT)的计算,接下来我们看Required Time(RT)的计算。
图五
图六
clock MY_CLOCK (rise edge) 6.00 6.00
clock network delay (ideal) 2.00 8.00
clock uncertainty -0.50 7.50
S3/P3_reg_47_/CK (DFFTRXL) 0.00 7.50 r
library setup time -0.28 7.22
data required time 7.22
Critical Path终点的Flip-Flop的时脉输入一样有2ns的network delay,所以本来1个时脉週期后(6ns)要抓取资料就变成了6+2=8ns后抓取资料,也就是Required Time(RT)变成8ns。但因為我们的时脉规格有0.5ns的不确定性(clock uncertainty),以最坏状况考量,时脉提早了0.5ns到,则RT变為8-0.5=7.5ns。再考量元件库中定义的Setup Time 0.28ns,RT就变為7.5-0.28=7.22ns(图七)。
图七
data required time 7.22
data arrival time -7.96
--------------------------------------------------------------------------------
slack (VIOLATED) -0.74
有了RT和AT就可以计算slack,这个例子的slack值是负的,也就是无法达到时序规格。由於我们只是要以实例说明STA,时序规格不符合也无所谓。实际製作晶片时,这当然是不允许的。
布局完成后之时序报告
在布局完成后,元件摆放的位置已经固定,元件间的绕线及其连线延迟(Interconnect Delay)也就可以大致上预估出来。此时估计的连线延迟会比合成时的Wire Load Model準确许多。以Astro这个布局与绕线软体来说,布局时的绕线预估叫做Virtual Route(VR)。VR会假设两个元件间以最短的可行距离去绕线。各位要注意的是「可行」两字,两元件间不见得所有区域都可以拿来做绕线,Astro的VR会自动避开这些区域。布局后的时序报告和合成时的很类似,也会先标示出Critical Path,然后紧接著是其时序资讯。
* Start point : S3.B3_reg_4_/CK
* ( Rising edge-triggered flipflop clocked by MY_CLOCK )
* End point : S4.out_reg_63_/D
* ( Rising edge-triggered flipflop clocked by MY_CLOCK at CK )
* Clock Group : MY_CLOCK
* Delay Type : Max
* Slack : -1.0682 (VIOLATED)
各位可以看到,此时的Critical Path和合成时的不一样。这是因為绕线预估不同,造成连线负载及连线延迟时间的估计值不一样,再加上佈局与绕线软体会对时序做最佳化,才会有如此结果。我们先来看看布局后Critical Path的时序资讯。
Port/Pin
Cap Fanout Trans. Incr Arri Master/Net
---------------------------------------------------------------------------------
Rising edge of clock MY_CLOCK 0.0000 0.0000
Clock Source delay 1.0000 1.0000
Clock Network delay 1.0000 2.0000
---------------------------------------------------------------------------------
S3.B3_reg_4_/CK
0.0000 0.0000 2.0000 r DFFTRX4
S3.B3_reg_4_/Q
0.1501 15 0.5663 0.5307 2.5307 r B3[4]
S4.mult_123.B3_reg_4_ASTipoInst106/A
0.5839 0.0294 2.5602 r BUFX1
S4.mult_123.B3_reg_4_ASTipoInst106/Y
0.0231 5 0.3842 0.3252 2.8853 r S4.mult_123.B3_4_ASThfnNet53
...
...
S4.add_133.U155/A
0.3328 0.0006 8.0590 f XNOR2X2
S4.add_133.U155/Y
0.0030 1 0.0894 0.2341 8.2931 f S4.N109
S4.out_reg_63_/D
0.0895 0.0001 8.2932 f DFFTRXL
---------------------------------------------------------------------------------
Rising edge of clock MY_CLOCK 6.0000 6.0000
Clock Source delay 1.0000 7.0000
Clock Network delay 1.0000 8.0000
Clock Skew 0.5000 7.5000
Setup time 0.2749 7.2251
---------------------------------------------------------------------------------
Required time 7.2251
Arrival time 8.2932
---------------------------------------------------------------------------------
Slack -1.0682 (VIOLATED)
这份报告和合成时的报告格式略有差异。合成后报告的Point栏位此时拆成Port/Pin和Master/Net栏位。我们从最上面一列开始检视此报告,Critical Path的起点為S3.B3_reg_4_的CK时脉输入端点,其信号到达的时间為时脉规格所描述的2ns(Source Latency + Network Latency)。接下来信号走到S3.B3_reg_4_的资料输出端点Q,花费了0.5307ns,也就是在2.5307ns时到达此节点。继续往下走,信号会经由绕线接到S4.mult_123.B3_reg_4_ASTipoInst106(通常这种名字的元件是佈局与绕线软体在做时序最佳化时加入的缓衝器或反相器)这个元件的输入端点A,花费了0.0294ns,也就是在2.5602ns时到达此节点。这段绕线软体会给予一个辨识的名称,就是所谓的Net Name,各位可以在报告最右边的栏位查询到Net的资讯。在合成软体的报告中,由於Net的连线延迟被内涵在元件的延迟中,所以永远為零。在佈局与绕线软体的报告中,则会像这样清楚的列出连线的延迟。
报告的后半部和合成时候的报告一样,我们就不加赘述。由於slack值為负,在佈局之后,时序规格不符合的状况仍旧没有改变。
绕线完成后之时序报告
在绕线完成后,不但元件的位置已经固定,所有的绕线的大小形状也都已经确定。此时的时序报告会更接近实际晶片的时序特性。在理想的状况下,佈局后的VR预估应该和实际绕线一致。但事情通常没有这麼简单,VR并没有考量到绕线壅塞的问题,实际绕线时可能在某些区域走了太多的绕线,会导致有些连线没办法沿著VR规划的路径走。此时佈局与绕线软体会强迫这些连线绕道通行,而这些绕道通行的连线,其连线距离一定会比VR规划的路径还要更长。这也意味著会有更多的连线负载,因此造成更多的连线延迟,导致时序上的特性变差。接下来,我们就来看看此范例绕线后的时序报告。
* Start point : S2.A2_reg_9_/CK
* ( Rising edge-triggered flipflop clocked by MY_CLOCK )
* End point : S3.P3_reg_32_/D
* ( Rising edge-triggered flipflop clocked by MY_CLOCK at CK )
* Clock Group : MY_CLOCK
* Delay Type : Max
* Slack : -0.2721 (VIOLATED)
*********************************************************************************
Port/Pin Cap Fanout Trans. Incr Arri Master/Net
---------------------------------------------------------------------------------
Rising edge of clock MY_CLOCK 0.0000 0.0000
Clock Source delay 1.0000 1.0000
Clock Network delay (propagated) 0.9998 1.9998
---------------------------------------------------------------------------------
S2.A2_reg_9_/CK 0.1451 0.0000 1.9998 r DFFHQX4
S2.A2_reg_9_/Q 0.0278 1 0.1576 0.3282 2.3280 r A2[9]
...
S3.P3_reg_32_/D 0.1001 0.0002 8.0062 f DFFTRXL
---------------------------------------------------------------------------------
Rising edge of clock MY_CLOCK 6.0000 6.0000
Clock Source delay 1.0000 7.0000
Clock Network delay (propagated) 0.9854 7.9854
Clock Skew 0.0000 7.9854
Setup time 0.2513 7.7341
---------------------------------------------------------------------------------
Required time 7.7341
Arrival time 8.0062
---------------------------------------------------------------------------------
Slack -0.2721 (VIOLATED)
各位可以看到,Critical Path又换了,原因和布局时的原因类似,一是绕线估算不一致,二是时序最佳化的影响。时序报告的格式和佈局后的报告一样,但内容有一重大的差异,就是时脉的资讯。在佈局之前,时脉的资讯是由时脉规格得来的,这只是一个预估值或称目标值。通常我们会在佈局后,合成时脉树(Clock Tree)来达到时脉规格。要完全百分之百达到时脉规格是件很不容易的事,所以通常绕线时的时脉资讯会和时脉规格定义的有些许差异,这会影响到静态时序分析的结果。
以上面的例子来说,Critical Path起点的Flip-Flop其Clock Network Delay(Latency)变為0.9998ns而不再是时脉规格中的1ns。而终点的Flip-Flop其Clock Network Delay(Latency)则变為0.9854ns,原来0.5ns的Clock Skew则被捨弃不用。如此,计算出来的slack值為-0.2721。很不幸,这仍然是一个负值,时序规格仍然无法达成。
比较布局和绕线后的slack值,各位会发现佈局时的时序特性比绕线后的时序特性优良,这和我们在本小节第一段的结论似乎有所抵触。造成这个现象的原因有二。首先,布局与绕线软体為避免绕线后的时序和布局后的时序差异太大,会在布局时用比较悲观的方式计算时序相关资讯。第二个原因则是在绕线时我们又做了很多最佳化的动作以求达到符合时序规格,所以时序特性比较好。不过,这个例子似乎无法用佈局绕线软体内建的最佳化功能来达到时序规格。必须再回到之前的合成步骤、硬体描述语言撰写步骤,甚至更早的架构规划步骤来修改。
总结
本文对STA在实际IC设计流程中的应用举一范例说明,希望各位在具有实际数据的范例导引下,能对STA的应用有更深一步的认识。(设计服务组/陈麒旭)
文章评论(0条评论)
登录后参与讨论