纳米设计下的静态时序分析08
Chapter 8 时序验证
本章介绍作为静态时序分析一部分执行的检查。 这些检查旨在彻底验证分析中设计的时间。
两个主要检查是建立和保持检查。 一旦在触发器的时钟引脚上定义了时钟,就会自动为触发器建立设置和保持检查。 定时检查通常在多种条件下执行,包括最坏情况下的慢条件和最佳情况下的快速条件。 通常情况下,最坏情况下的缓慢条件对于设置检查是至关重要的,而最佳情况下的快速条件对于保持检查是非常关键的,尽管保持检查也可能在最坏的情况下执行。
本章介绍的例子假设净延迟为零; 这是为了简单起见而完成的,并不改变这里给出的概念。
8.1 建立时序检查
建立时序检查验证时钟与触发器的数据引脚之间的时序关系,以满足建立时间要求。 换句话说,设置检查确保在触发器的时钟输入之前数据在触发器的输入端可用。 在时钟的有效沿到达触发器之前,数据应该稳定一段时间,即触发器的建立时间。 这个要求确保数据被可靠地捕获到触发器中。 图8-1给出了典型触发器的设置要求。 设置检查验证触发器的设置要求。
一般来说,有一个启动触发器 - 启动数据的触发器和一个捕获触发器 - 捕获必须满足设置时间的数据的触发器。 设置检查验证从启动触发器到捕获触发器的长(或最大)路径。 这两个触发器的时钟可以相同,也可以不同。 设置检查是从启动触发器的时钟的第一个有效沿到捕捉触发器的最接近的下一个有效沿。 设置检查确保从前一个时钟周期启动的数据准备好在一个周期后被捕获。
我们现在来看一个简单的例子,如图8-2所示,其中启动和捕捉触发器都具有相同的时钟。 时钟CLKM的第一个上升沿出现在发射触发器的Tlaunch时刻。 该时钟沿发出的数据出现在触发器UFF1的D引脚的Tlaunch + Tck2q + Tdp时刻。 时钟的第二个上升沿(设置通常在一个周期后被检查)出现在捕获触发器UFF1的时钟管脚的时间Tcycle + Tcapture处。 这两个时间之间的差值必须大于触发器的建立时间,以便在触发器中可靠地捕获数据。
设置检查可以在数学上表示为:
Tlaunch + Tck2q + Tdp <Tcapture + Tcycle - Tsetup
其中Tlaunch是启动触发器UFF0的时钟树的延迟,Tdp是组合逻辑数据路径的延迟,Tcycle是时钟周期。 Tcapture是捕捉触发器UFF1的时钟树的延迟。
换句话说,数据到达捕捉触发器的D引脚所花费的总时间必须小于时钟传送到捕捉触发器所花费的时间加上时钟周期延迟减去建立时间。
由于建立时间检查会造成最大限制,因此设置检查始终使用最长或最长时间路径。 出于同样的原因,这种检查通常在延迟最大的慢角处进行核实。
8.1.1触发器到触发器路径
这是建立时间检查的路径报告。
起始点:UFF0(由CLKM提供时钟的上升沿触发触发器)
端点:UFF1(由CLKM定时的上升沿触发触发器)
路径组:CLKM
路径类型:最大
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
UFF0/CK (DFF ) 0.00 0.00 r
UFF0/Q (DFF ) <- 0.16 0.16 f
UNOR0/ZN (NR2 ) 0.04 0.20 r
UBUF4/Z (BUFF ) 0.05 0.26 r
UFF1/D (DFF ) 0.00 0.26 r
data arrival time 0.26
clock CLKM (rise edge) 10.00 10.00
clock network delay (ideal) 0.00 10.00
clock uncertainty -0.30 9.70
UFF1/CK (DFF ) 9.70 r
library setup time -0.04 9.66
data required time 9.66
---------------------------------------------------------------
data required time 9.66
data arrival time -0.26
---------------------------------------------------------------
slack (MET) 9.41
报告显示,启动触发器(由Startpoint指定)具有实例名称UFF0,并且由时钟CLKM的上升沿触发。 捕捉触发器(由端点指定)为UFF1,也由时钟CLKM的上升沿触发。 Path Group行表示它属于路径组CLKM。 正如前一章所讨论的,设计中的所有路径根据捕获触发器的时钟分为路径组。 路径类型行表示此报告中显示的延迟都是最大路径延迟,表示这是设置检查。 这是因为设置检查对应于通过逻辑的最大(或最长路径)延迟。 请注意,保持检查对应于通过逻辑的最小(或最短路径)延迟。
Incr列指定所指示的端口或引脚的增量单元或网络延迟。 “路径”列显示到达的累积延迟和所需的数据路径。 这里是这个例子中使用的时钟规范。
create_clock -name CLKM -period 10 -waveform {0 5} \
[get_ports CLKM]
set_clock_uncertainty -setup 0.3 [all_clocks]
set_clock_transition -rise 0.2 [all_clocks]
set_clock_transition -fall 0.15 [all_clocks]
发射路径需要0.26ns才能到达触发器UFF1的D引脚 - 这是捕获触发器输入端的到达时间。捕捉边缘(这是设置检查的一个周期)在10ns。本时钟的时钟不确定度为0.3ns,因此时钟周期因不确定性裕度而降低。时钟不确定性包括由于时钟源中的抖动和用于分析的任何其他时序余量而导致的周期时间变化。触发器的建立时间为0.04ns(称为库建立时间),从总捕获路径中扣除,产生9.66ns的所需时间。由于到达时间是0.26ns,所以在这个定时路径上有9.41ns的正向松弛。请注意,所需时间与到达时间之间的差异可能为9.40ns,但实际值为9.41ns(出现在报告中)。存在异常是因为报告在小数点后只显示两位数,而内部计算和存储的值比报告的精度要高。
时序报告中的时钟网络延迟是什么?为什么它被标记为理想的? 时序报告中的这一行表示时钟树被视为理想的,假设时钟路径中的任何缓冲器都具有零延迟。 一旦建立了时钟树,时钟网络可以被标记为传播 - 这导致时钟路径显示出真正的延迟,如下一个示例性时序报告所示。 0.11ns延迟是启动时钟的时钟网络延迟,0.12ns延迟是捕获触发器的时钟网络延迟。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock network delay (propagated) 0.11 0.11
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNOR0/ZN (NR2 ) 0.04 0.30 r
UBUF4/Z (BUFF ) 0.05 0.35 r
UFF1/D (DFF ) 0.00 0.35 r
data arrival time 0.35
clock CLKM (rise edge) 10.00 10.00
clock network delay (propagated) 0.12 10.12
clock uncertainty -0.30 9.82
UFF1/CK (DFF ) 9.82 r
library setup time -0.04 9.78
data required time 9.78
---------------------------------------------------------------
data required time 9.78
data arrival time -0.35
---------------------------------------------------------------
slack (MET) 9.43
时序路径报告可任选地包括拓展时钟路径,即,与时钟树中明确示出。 这是一个例子。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNOR0/ZN (NR2 ) 0.04 0.30 r
UBUF4/Z (BUFF ) 0.05 0.35 r
UFF1/D (DFF ) 0.00 0.35 r
data arrival time 0.35
clock CLKM (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKM (in) 0.00 10.00 r
UCKBUF0/C (CKB ) 0.06 10.06 r
UCKBUF2/C (CKB ) 0.07 10.12 r
UFF1/CK (DFF ) 0.00 10.12 r
clock uncertainty -0.30 9.82
library setup time -0.04 9.78
data required time 9.78
---------------------------------------------------------------
data required time 9.78
data arrival time -0.35
---------------------------------------------------------------
slack (MET) 9.43
请注意,时钟缓冲区UCKBUF0,UCKBUF1和UCKBUF2出现在上面的路径报告中,并提供了如何计算时钟树延迟的详细信息。
第一个时钟单元UCKBUF0的延迟是如何计算的? 如前几章所述,单元延迟是根据单元的输入转换时间和输出电容来计算的。 因此,问题是在时钟树中的第一个单元的输入处使用了什么转换时间。 第一个时钟单元的输入引脚上的转换时间(或摆动)可以使用set_input_transition命令明确指定。
set_input_transition -rise 0.3 [get_ports CLKM]
set_input_transition -fall 0.45 [get_ports CLKM]
在上面显示的set_input_transition规范中,我们规定输入上升过渡时间为0.3ns,下降过渡时间为0.45ns。 在没有输入转换规范的情况下,在时钟树的原点处假设理想的摆动,这意味着上升和下降转换时间都是0ns。
时序报告中的“r”和“f”字符表示时钟或数据信号的上升沿和下降沿。 上一个路径报告显示了从UFF0 / Q的下降沿开始到UFF1 / D的上升沿的路径。 由于UFF1 / D可以是0或1,所以在UFF1 / D的下降沿也可以有一条路径。 这是一条路。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNOR0/ZN (NR2 ) 0.02 0.28 f
UBUF4/Z (BUFF ) 0.06 0.33 f
UFF1/D (DFF ) 0.00 0.33 f
data arrival time 0.33
clock CLKM (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKM (in) 0.00 10.00 r
UCKBUF0/C (CKB ) 0.06 10.06 r
UCKBUF2/C (CKB ) 0.07 10.12 r
UFF1/CK (DFF ) 0.00 10.12 r
clock uncertainty -0.30 9.82
library setup time -0.03 9.79
data required time 9.79
---------------------------------------------------------------
data required time 9.79
data arrival time -0.33
---------------------------------------------------------------
slack (MET) 9.46
请注意,触发器的时钟引脚(称为有效沿)的边沿保持不变。 它只能是一个上升或下降的有效沿,这取决于触发器是分别是上升沿触发还是下降沿触发。
什么是时钟源延迟? 这也被称为插入延迟,是一个时钟从源地传播到被分析设计的时钟定义点所花费的时间,如图8-3所示。 这对应于设计之外的时钟树的延迟。 例如,如果此设计是较大块的一部分,则时钟源延迟会指定时钟树的延迟,直到所分析的设计的时钟引脚。 这个延迟可以使用set_clock_latency命令明确指定。
set_clock_latency -source -rise 0.7 [get_clocks CLKM]
set_clock_latency -source -fall 0.65 [get_clocks CLKM]
在没有这样的命令的情况下,假定延迟为0。这是早期路径报告中使用的假设。请注意,源延迟不会影响设计内部的路径,并具有相同的启动时钟和捕捉时钟。这是因为相同的延迟被添加到启动时钟路径和捕获时钟路径。然而,这种延迟确实会影响正在进行分析的设计的输入和输出的时序路径。
如果没有-source选项,set_clock_latency命令会定义时钟网络延迟 - 这是从DUA中的时钟定义点到触发器的时钟引脚的延迟。时钟网络等待时间用于在时钟树建立之前,即在时钟树合成之前,通过时钟路径建模延迟。一旦时钟树被建立并被标记为传播,这个时钟网络延迟规范被忽略。 set_clock_latency命令可以用来模拟从主时钟到其生成的时钟之一的延迟,如7.3节所述。当时钟产生逻辑不是设计的一部分时,该命令也用于模拟片外时钟延迟。
8.1.2输入到触发器路径
这是一个通过输入端口到触发器的示例路径报告。 图8-4显示了与输入路径和时钟波形有关的原理图。
Startpoint: INA (input port clocked by VIRTUAL_CLKM)
Endpoint: UFF2 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock VIRTUAL_CLKM (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
input external delay 2.55 2.55 f
INA (in) <- 0.00 2.55 f
UINV1/ZN (INV ) 0.02 2.58 r
UAND0/Z (AN2 ) 0.06 2.63 r
UINV2/ZN (INV ) 0.02 2.65 f
UFF2/D (DFF ) 0.00 2.65 f
data arrival time 2.65
clock CLKM (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKM (in) 0.00 10.00 r
UCKBUF0/C (CKB ) 0.06 10.06 r
UCKBUF2/C (CKB ) 0.07 10.12 r
UCKBUF3/C (CKB ) 0.06 10.18 r
UFF2/CK (DFF ) 0.00 10.18 r
clock uncertainty -0.30 9.88
library setup time -0.03 9.85
data required time 9.85
---------------------------------------------------------------
data required time 9.85
data arrival time -2.65
---------------------------------------------------------------
slack (MET) 7.20
首先要注意的是由VIRTUAL_CLKM定时的输入端口。 正如7.9节所讨论的那样,这个时钟可以被认为是驱动设计的输入端口INA的设计之外的虚拟(虚拟)触发器。 这个虚拟触发器的时钟是VIRTUAL_CLKM。 另外,从这个虚拟触发器的时钟引脚到输入端口INA的最大延迟被指定为2.55ns - 这在报告中显示为输入外部延迟。 这两个参数都是使用以下SDC命令指定的。
create_clock -name VIRTUAL_CLKM -period 10 -waveform {0 5}
set_input_delay -clock VIRTUAL_CLKM \
-max 2.55 [get_ports INA]
请注意,虚拟时钟VIRTUAL_CLKM的定义没有与其关联的设计中的任何引脚; 这是因为它被认为是在设计之外定义的(这是虚拟的)。 输入延迟规范set_input_delay规定了相对于虚拟时钟的延迟。
输入路径从端口INA开始; 如何计算连接到端口INA的第一个单元UINV1的延迟? 一种方法是通过指定输入端口INA的驱动单元。 这个驱动单元用于确定驱动强度,从而确定端口INA上的摆动,然后用它来计算单元UINV1的延迟。 在输入端口INA没有任何摆动规范的情况下,假设端口的转换是理想的,这对应于0ns的转换时间。
set_driving_cell -lib_cell BUFF \
-library lib013lwc [get_ports INA]
图8-4还显示了如何完成设置检查。 数据到达UFF2 / D的时间是9.85ns。 然而,数据到达2.65ns,因此报告显示在这条道路上有7.2ns的积极松弛。
输入路径与实际时钟
输入到达时间也可以相对于实际时钟指定; 这些不一定必须针对虚拟时钟来指定。 实际时钟的例子是设计中的内部引脚或输入端口上的时钟。 图8-5描述了一个例子,其中端口CIN上的输入约束是相对于输入端口CLKP上的时钟而规定的。 这个约束被指定为:
set_input_delay -clock CLKP -max 4.3 [get_ports CIN]
下面是对应于本说明中的输入路径报告。
Startpoint: CIN (input port clocked by CLKP)
Endpoint: UFF4 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock network delay (propagated) 0.00 0.00
input external delay 4.30 4.30 f
CIN (in) 0.00 4.30 f
UBUF5/Z (BUFF ) 0.06 4.36 f
UXOR1/Z (XOR2 ) 0.10 4.46 r
UFF4/D (DFF ) 0.00 4.46 r
data arrival time 4.46
clock CLKP (rise edge) 12.00 12.00
clock source latency 0.00 12.00
CLKP (in) 0.00 12.00 r
UCKBUF4/C (CKB ) 0.06 12.06 r
UCKBUF5/C (CKB ) 0.06 12.12 r
UFF4/CK (DFF ) 0.00 12.12 r
clock uncertainty -0.30 11.82
library setup time -0.05 11.77
data required time 11.77
---------------------------------------------------------------
data required time 11.77
data arrival time -4.46
---------------------------------------------------------------
slack (MET) 7.31
请注意,Startpoint指定输入端口的参考时钟为预期的CLKP。
8.1.3触发器到输出路径
类似于上述的输入端口约束,可以相对于虚拟时钟或设计的内部时钟,输入时钟端口或输出时钟端口来约束输出端口。 这里是一个例子,显示了输出引脚ROUT相对于虚拟时钟的限制。 输出限制如下:
-max 5.1 [get_ports ROUT]
set_load 0.02 [get_ports ROUT]
Startpoint: UFF4 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: ROUT (output port clocked by VIRTUAL_CLKP)
Path Group: VIRTUAL_CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.06 0.06 r
UCKBUF5/C (CKB ) 0.06 0.12 r
UFF4/CK (DFF ) 0.00 0.12 r
UFF4/Q (DFF ) 0.13 0.25 r
UBUF3/Z (BUFF ) 0.09 0.33 r
ROUT (out) 0.00 0.33 r
data arrival time 0.33
clock VIRTUAL_CLKP (rise edge) 12.00 12.00
clock network delay (ideal) 0.00 12.00
clock uncertainty -0.30 11.70
output external delay -5.10 6.60
data required time 6.60
---------------------------------------------------------------
data required time 6.60
data arrival time -0.33
---------------------------------------------------------------
slack (MET) 6.27
请注意,指定的输出延迟显示为输出外部延迟,并且表现为虚拟触发器所需的建立时间。
8.1.4输入到输出路径
设计可以有一个从输入端口到输出端口的组合路径。 这个路径可以像我们前面看到的输入和输出路径一样被约束和计时。 图8-7显示了这样一个路径的例子。 虚拟时钟用于指定输入和输出端口的约束。
这里是输入和输出延迟规格。
set_input_delay -clock VIRTUAL_CLKM \
-max 3.6 [get_ports INB]
set_output_delay -clock VIRTUAL_CLKM \
-max 5.8 [get_ports POUT]
这是一个路径报告,通过从输入INB到输出POUT的组合逻辑。 请注意,任何内部时钟延迟(如果存在)都不会影响路径报告。
Startpoint: INB (input port clocked by VIRTUAL_CLKM)
Endpoint: POUT (output port clocked by VIRTUAL_CLKM)
Path Group: VIRTUAL_CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock VIRTUAL_CLKM (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
input external delay 3.60 3.60 f
INB (in) <- 0.00 3.60 f
UBUF0/Z (BUFF ) 0.05 3.65 f
UBUF1/Z (BUFF ) 0.06 3.72 f
UINV3/ZN (INV ) 0.34 4.06 r
POUT (out) 0.00 4.06 r
data arrival time 4.06
clock VIRTUAL_CLKM (rise edge) 10.00 10.00
clock network delay (ideal) 0.00 10.00
clock uncertainty -0.30 9.70
output external delay -5.80 3.90
data required time 3.90
---------------------------------------------------------------
data required time 3.90
data arrival time -4.06
---------------------------------------------------------------
slack (VIOLATED) -0.16
8.1.5频率直方图
如果要绘制一个典型设计的设置松弛频率直方图与路径数量的关系,它将如图8-8所示。 取决于设计的状态,是否已经优化,零松弛线对于未优化的设计来说更接近右侧,对于优化的设计来说更靠左。 对于零违规的设计,即没有负松弛的路径,整个曲线将在零松弛线的右侧。
这是以文本形式显示的直方图,通常可以通过静态时序分析工具生成。
{-INF 375 0}
{375 380 237}
{380 385 425}
{385 390 1557}
{390 395 1668}
{395 400 1559}
{400 405 1244}
{405 410 1079}
{410 415 941}
{415 420 431}
{420 425 404}
{425 430 1}
{430 +INF 0}
前两个索引表示松弛范围,第三个索引是该松弛范围内的路径数量,例如,在410ps至415ps范围内有941条松弛路径。 直方图表明这种设计没有失败的路径,即所有的路径都有正面的松弛,而最关键的路径在375ps和380ps之间有一个正的松弛。
很难满足时序的设计会让直方图的驼峰更靠左,也就是说,有很多路径的松弛接近于零。 通过观察频率直方图可以得出另一个观察结果,即进一步优化设计以实现零余量的能力,即关闭时间有多困难。 如果故障路径的数量少,负松弛也小,则设计相对接近满足所需的时间。 但是,如果失效路径的数量很大,负的松弛幅度也很大,这意味着设计需要付出很大的努力来满足所需的时间。
8.2保持时间检查
保持时序检查确保在触发器有机会捕获其原始值之前,正在改变的触发器输出值不会传递到捕获触发器并覆盖其输出。 这个检查是基于触发器的保留要求。 触发器的保持规格要求被锁存的数据在时钟的有效沿之后应保持稳定一段指定的时间。 图8-9显示了典型触发器的保持要求。
就像安装检查一样,保持时间检查位于启动触发器(触发器启动数据)和捕获触发器(触发器)之间,触发器捕获数据并保持其持续时间。 这两个触发器的时钟可以相同,也可以不同。 保持检查从启动触发器的时钟的一个有效沿到捕获触发器的相同时钟沿。 因此,保持检查独立于时钟周期。 保持检查在捕获触发器的每个有效沿进行。
我们现在来看一个简单的例子,如图8-10所示,其中启动和捕捉触发器都具有相同的时钟。
考虑时钟CLKM的第二个上升沿。 由时钟上升沿发出的数据需要Tlaunch + Tck2q + Tdp时间才能到达捕捉触发器UFF1的D引脚。 时钟的相同边缘需要捕捉时间才能到达捕捉触发器的时钟引脚。 其目的是在下一个时钟周期内由捕捉触发器捕捉启动触发器的数据。 如果在相同的时钟周期内捕获到数据,则会覆盖捕获触发器中的数据(从前一个时钟周期开始)。 保持时间检查是为了确保捕捉触发器中的预期数据不被覆盖。 保持时间检查验证这两个时间(数据到达时间和捕捉触发器的时钟到达时间)之间的差值必须大于捕捉触发器的保持时间,以使得触发器上的先前数据 不会被覆盖,并且数据在触发器中被可靠地捕获。
保持检查可以在数学上表示为:
Tlaunch + Tck2q + Tdp > Tcapture + Thold
其中Tlaunch是发射触发器的时钟树的延迟,Tdp是组合逻辑数据路径中的延迟,Tcapture是捕获触发器的时钟树上的延迟。 换句话说,时钟边缘发送的数据到达捕捉触发器的D引脚所需的总时间必须大于时钟的相同边沿传送到捕捉触发器加上保持所需的时间 时间。 这确保了UFF1 / D在其时钟引脚UFF1 / CK上的时钟上升沿之后直到触发器的保持时间保持稳定。
保持检查对捕获触发器上的数据引脚的路径施加下限或最小限制; 需要确定捕捉触发器的D引脚的最快路径。 这意味着保持检查总是使用最短路径进行验证。 因此,保持检查通常在快速定时角落执行。
即使在设计中只有一个时钟的情况下,时钟树也可能导致发射和捕捉触发器的时钟到达时间大不相同。 为了确保可靠的数据捕获,捕获触发器的时钟边沿必须在数据发生改变之前到达。 保持时间检查确保(见图8-11):
•来自后续启动沿的数据不能由设置接收边沿捕获。
•来自设置启动边沿的数据不能被前面的接收边沿捕获。
如果启动和捕捉时钟属于同一个时钟域,这两个保持检查基本上是相同的。 然而,当启动和捕捉时钟处于不同频率或不同时钟域时,上述两种情况可能映射到不同的约束条件。 在这种情况下,最差的检查是报告的检查。 图8-11显示了这两个检查。
UFF0是发射触发器,UFF1是捕获触发器。 安装检查位于安装启动边缘和安装接收边缘之间。 随后的发射边缘不能如此快地传播数据,以至于设置接收边缘没有时间来可靠地捕获其数据。 另外,设置启动边缘不能如此快地传播数据,以至于前面的接收边缘没有机会捕获其数据。 最差的保持检查对应于上述各种场景中最严格的保持检查。
更常用的时钟,如多循环路径和多频路径,分别在第8.3节和第8.8节讨论。 讨论内容包括设置检查和保持检查之间的关系,特别是如何从设置检查关系导出保持检查。 虽然设置声音会导致设计的工作频率降低,但保持违规可能会导致设计中断,也就是使设计无法在任何频率下工作。 因此了解保持时间检查并解决任何违规是非常重要的。
8.2.1触发器到触发器路径
本节以图8-2所示的例子说明触发器到触发器的保持路径。 下面是第8.1节关于设置检查路径的例子的保持时间检查的路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNOR0/ZN (NR2 ) 0.02 0.28 f
UBUF4/Z (BUFF ) 0.06 0.33 f
UFF1/D (DFF ) 0.00 0.33 f
data arrival time 0.33
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF2/C (CKB ) 0.07 0.12 r
UFF1/CK (DFF ) 0.00 0.12 r
clock uncertainty 0.05 0.17
library hold time 0.01 0.19
data required time 0.19
---------------------------------------------------------------
data required time 0.19
data arrival time -0.33
---------------------------------------------------------------
slack (MET) 0.14
注意,路径类型被描述为min,表示使用沿着最短路径的信元延迟值,其对应于保持时间检查。 库保持时间指定触发器UFF1的保持时间。 (如3.4节所述,触发器的保持时间也可以是负的)。请注意,捕捉和接收时序都是在时钟CLKM的上升沿(触发器的有效沿)计算的。 时序报告显示,在使先前的数据被安全地捕获的同时,新数据能够到达UFF1的最早时间是0.19ns。 由于新的数据到达0.33ns,报告显示0.14ns的正面持有松弛。
图8-12显示了发射和捕获触发器的时钟信号的时间,以及捕获触发器的数据的最早允许和实际到达时间。 由于数据到达的时间晚于数据所需的时间(保持时间是最早允许的),因此满足保持条件。
保持松弛计算
需要注意的一个有趣的地方在于设置和保持时间报告的松弛计算方式的差异。 在设置时间报告中,计算到达时间和所需时间,并且计算松弛为所需时间减去到达时间。 然而,在保持时间报告中,当我们计算所需时间减去到达时间时,负的结果转化为正的松弛(意味着保持约束被满足),而正的结果转化为负的松弛(意味着保持约束不被满足)。
8.2.2触发器路径的输入
接下来描述来自输入端口的保持时间检查。 参见图8-4的例子。 输入端口的最小延迟是使用虚拟时钟指定的:
set_input_delay -clock VIRTUAL_CLKM \
-min 1.1 [get_ports INA]
这是保持时间报告。
Startpoint: INA (input port clocked by VIRTUAL_CLKM)
Endpoint: UFF2 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock VIRTUAL_CLKM (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
input external delay 1.10 1.10 f
INA (in) <- 0.00 1.10 f
UINV1/ZN (INV ) 0.02 1.13 r
UAND0/Z (AN2 ) 0.06 1.18 r
UINV2/ZN (INV ) 0.02 1.20 f
UFF2/D (DFF ) 0.00 1.20 f
data arrival time 1.20
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF2/C (CKB ) 0.07 0.12 r
UCKBUF3/C (CKB ) 0.06 0.18 r
UFF2/CK (DFF ) 0.00 0.18 r
clock uncertainty 0.05 0.23
library hold time 0.01 0.25
data required time 0.25
---------------------------------------------------------------
data required time 0.25
data arrival time -1.20
---------------------------------------------------------------
slack (MET) 0.95
set_input_delay显示为输入外部延迟。 保持检查在VIRTUAL_CLKM的上升沿和CLKM的上升沿之间的时间0完成。 UFF2在不违反保持时间的情况下所要求的数据到达时间为0.25ns,这表明数据应在0.25ns之后到达。 由于数据只能到达1.2ns,因此显示0.95ns的正向松弛。
8.2.3触发器到输出路径
这是一个输出端口的保持时间检查。 示例如图8-6所示。 输出端口规格如下所示:
set_output_delay -clock VIRTUAL_CLKP \
-min 2.5 [get_ports ROUT]
输出延迟是相对于虚拟时钟指定的。 这是举保持时间报告。
Startpoint: UFF4 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: ROUT (output port clocked by VIRTUAL_CLKP)
Path Group: VIRTUAL_CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.06 0.06 r
UCKBUF5/C (CKB ) 0.06 0.12 r
UFF4/CK (DFF ) 0.00 0.12 r
UFF4/Q (DFF ) 0.13 0.25 f
UBUF3/Z (BUFF ) 0.08 0.33 f
ROUT (out) 0.00 0.33 f
data arrival time 0.33
clock VIRTUAL_CLKP (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
clock uncertainty 0.05 0.05
output external delay -2.50 -2.45
data required time -2.45
---------------------------------------------------------------
data required time -2.45
data arrival time -0.33
---------------------------------------------------------------
slack (MET) 2.78
请注意,set_output_delay显示为输出外部延迟。
触发器用实际时钟输出路径
这里是保持时间检查到输出端口的路径报告。 见图8-13。 输出最小延迟是相对于实际时钟指定的。
set_output_delay -clock CLKP -min 3.5 [get_ports QOUT]
set_load 0.55 [get_ports QOUT]
这是保持时间报告。
Startpoint: UFF4 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: QOUT (output port clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.06 0.06 r
UCKBUF5/C (CKB ) 0.06 0.12 r
UFF4/CK (DFF ) 0.00 0.12 r
UFF4/Q (DFF ) 0.14 0.26 r
UINV4/ZN (INV ) 0.75 1.01 f
QOUT (out) 0.00 1.01 f
data arrival time 1.01
clock CLKP (rise edge) 0.00 0.00
clock network delay (propagated) 0.00 0.00
clock uncertainty 0.05 0.05
output external delay -3.50 -3.45
data required time -3.45
---------------------------------------------------------------
data required time -3.45
data arrival time -1.01
---------------------------------------------------------------
slack (MET) 4.46
保持时序检查在时钟CLKP的上升沿(触发器的有效沿)执行。 以上报告表明,触发器输出在保持时间内有4.46ns的正向松弛。
8.2.4输入到输出路径
以下是对输入到输出路径的保持时间检查,如图8-7所示。端口的规格如下:
set_load -pin_load 0.15 [get_ports POUT]
set_output_delay -clock VIRTUAL_CLKM \
-min 3.2 [get_ports POUT]
set_input_delay -clock VIRTUAL_CLKM \
-min 1.8 [get_ports INB]
set_input_transition 0.8 [get_ports INB]
Startpoint: INB (input port clocked by VIRTUAL_CLKM)
Endpoint: POUT (output port clocked by VIRTUAL_CLKM)
Path Group: VIRTUAL_CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock VIRTUAL_CLKM (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
input external delay 1.80 1.80 r
INB (in) <- 0.00 1.80 r
UBUF0/Z (BUFF ) 0.04 1.84 r
UBUF1/Z (BUFF ) 0.06 1.90 r
UINV3/ZN (INV ) 0.22 2.12 f
POUT (out) 0.00 2.12 f
data arrival time 2.12
clock VIRTUAL_CLKM (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
clock uncertainty 0.05 0.05
output external delay -3.20 -3.15
data required time -3.15
---------------------------------------------------------------
data required time -3.15
data arrival time -2.12
---------------------------------------------------------------
slack (MET) 5.27
输出端口的规格是相对于虚拟时钟指定的,因此在该虚拟时钟的上升(默认有效)边沿上执行保持检查。
8.3多循环路径
在某些情况下,两个触发器之间的组合数据路径可能需要超过一个时钟周期才能通过逻辑传播。 在这种情况下,组合路径被声明为多周期路径。 即使数据在每个时钟沿由捕获触发器捕获,我们也会指示STA相应的捕获沿出现在指定的时钟周期数之后。
图8-14显示了一个例子。 由于数据路径最多可能需要三个时钟周期,因此应指定三个周期的设置多周期检查。 下面给出了指定实现这个的多周期设置约束。
create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup \
-from [get_pins UFF0/Q] \
-to [get_pins UFF1/D]
设置多周期约束指定从UFF0 / CK到UFF1 / D的路径最多可能需要三个时钟周期才能完成设置检查。 这意味着设计仅在每个周期而不是每个周期使用来自UFF1 / Q的所需数据。
以下是指定了多周期约束的设置路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock network delay (propagated) 0.11 0.11
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNOR0/ZN (NR2 ) 0.04 0.30 r
UBUF4/Z (BUFF ) 0.05 0.35 r
UFF1/D (DFF ) 0.00 0.35 r
data arrival time 0.35
clock CLKM (rise edge) 30.00 30.00
clock network delay (propagated) 0.12 30.12
clock uncertainty -0.30 29.82
UFF1/CK (DFF ) 29.82 r
library setup time -0.04 29.78
data required time 29.78
---------------------------------------------------------------
data required time 29.78
data arrival time -0.35
---------------------------------------------------------------
slack (MET) 29.43
请注意,捕捉触发器的时钟边沿现在是三个时钟周期,时间为30ns。
我们现在检查示例多周期路径上的保持时间检查。 在大多数情况下,我们希望保留检查保持原来的状态,如图8-14所示。 这确保了数据在三个时钟周期之间的任何地方自由改变。 指定两个保持多周期以获得与单个循环设置案例中的保持检查相同的行为。 这是因为在没有这种保持多周期规范的情况下,在设置捕捉边缘之前的活动边缘上进行默认的保持检查,而非意图。 我们需要在默认保持检查边缘的两个周期之前移动保持检查,因此指定两个保持多周期。 预期的行为如图8-15所示。 在多周期保持的情况下,数据路径的最小延迟可以小于一个时钟周期。
set_multicycle_path 2 -hold -from [get_pins UFF0/Q] \
-to [get_pins UFF1/D]
在多周期保持上表示的周期数指定从其默认保持检查边沿(在设置捕捉边沿之前的一个活动边沿)移回多少个时钟周期。 这是路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF0/CK (DFF ) 0.00 0.07 r
UFF0/Q (DFF ) <- 0.15 0.22 f
UXOR1/Z (XOR2 ) 0.07 0.29 f
UFF1/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UCKBUF5/C (CKB ) 0.06 0.13 r
UFF1/CK (DFF ) 0.00 0.13 r
clock uncertainty 0.05 0.18
library hold time 0.01 0.19
data required time 0.19
---------------------------------------------------------------
data required time 0.19
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.11
由于该路径具有三个设置多周期,所以其默认保持检查在捕捉边缘之前的活动边缘上。 在大多数设计中,如果最大路径(或设置)需要N个时钟周期,那么实现最小路径约束大于(N-1)个时钟周期是不可行的。 通过指定两个周期的多周期保持,保持检查边沿移回到发射边沿(0ns),如上面的路径报告所示。
因此,在大多数设计中,指定为N(周期)的多周期设置应该伴随有指定为N-1(周期)的多周期保持约束。
如果指定了N的多周期设置,但是相应的N-1多周期保持丢失,会发生什么? 在这种情况下,在设置捕捉边沿之前一个周期的边沿执行保持检查。 图8-16显示了这种多周期设置为3的情况。
这就限制了数据只能在设置捕捉边缘之前的一个周期内改变,如图所示。 因此数据路径必须有至少两个时钟周期的最小延迟来满足这个要求。 这是一个路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNOR0/ZN (NR2 ) 0.02 0.28 f
UBUF4/Z (BUFF ) 0.06 0.33 f
UFF1/D (DFF ) 0.00 0.33 f
data arrival time 0.33
clock CLKM (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKM (in) 0.00 20.00 r
UCKBUF0/C (CKB ) 0.06 20.06 r
UCKBUF2/C (CKB ) 0.07 20.12 r
UFF1/CK (DFF ) 0.00 20.12 r
clock uncertainty 0.05 20.17
library hold time 0.01 20.19
data required time 20.19
---------------------------------------------------------------
data required time 20.19
data arrival time -0.33
---------------------------------------------------------------
slack (VIOLATED) -19.85
从路径报告中注意到,在捕捉边缘之前的一个时钟边缘检查了保持,导致很大的保持违规。 实际上,保持检查在组合逻辑中需要至少两个时钟周期的最小延迟。
穿越时钟领域
让我们考虑一下在同一时期的两个不同时钟之间存在多轮的情况。 (时钟周期不同的情况将在本章后面介绍。)
Example I:
create_clock -name CLKM \
-period 10 -waveform {0 5} [get_ports CLKM]
create_clock -name CLKP \
-period 10 -waveform {0 5} [get_ports CLKP]
设置多周期乘法器表示给定路径的时钟周期数。 如图8-17所示。 默认设置捕捉边缘总是一个周期。 2的设置多周期将捕捉边缘距离发射边缘两个时钟周期。
保持多周期乘法器表示保持检查将发生的建立捕捉边沿之前的时钟周期数,而不管发送边沿如何。 如图8-18所示。 默认保持检查是设置捕捉边缘之前的一个周期。 保持多周期指定为1时,在默认保持检查之前一个周期进行保持检查,从而变成捕获边沿之前的两个周期。
set_multicycle_path 2 \
-from [get_pins UFF0/CK] -to [get_pins UFF3/D]
# Since no -hold option is specified, the default option
#-setup is assumed. This implies that the setup
# multiplier is 2 and the hold multiplier is 0.
以下是对应于多周期规范的设置路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UINV0/ZN (INV ) 0.03 0.28 r
UFF3/D (DFF ) 0.00 0.28 r
data arrival time 0.28
clock CLKP (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKP (in) 0.00 20.00 r
UCKBUF4/C (CKB ) 0.06 20.06 r
UFF3/CK (DFF ) 0.00 20.06 r
clock uncertainty -0.30 19.76
library setup time -0.04 19.71
data required time 19.71
---------------------------------------------------------------
data required time 19.71
data arrival time -0.28
---------------------------------------------------------------
slack (MET) 19.43
请注意,路径报告中指定的路径组始终是捕获触发器,在本例中为CLKP。
接下来是保持时间检查路径报告。 保持乘数默认为0,因此保持检查在捕获沿之前的一个时钟周期的10ns处执行。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UINV0/ZN (INV ) 0.02 0.28 f
UFF3/D (DFF ) 0.00 0.28 f
data arrival time 0.28
clock CLKP (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKP (in) 0.00 10.00 r
UCKBUF4/C (CKB ) 0.06 10.06 r
UFF3/CK (DFF ) 0.00 10.06 r
clock uncertainty 0.05 10.11
library hold time 0.02 10.12
data required time 10.12
---------------------------------------------------------------
data required time 10.12
data arrival time -0.28
---------------------------------------------------------------
slack (VIOLATED) -9.85
上面的报告显示了通过设置1的多周期保持可以消除的保持违反。这在下面的单独示例中进行说明。
Example II:
下面给出了在两个不同的时钟域中指定的多周期的另一个例子。
set_multicycle_path 2 \
-from [get_pins UFF0/CK] -to [get_pins UFF3/D] -setup
set_multicycle_path 1 \
-from [get_pins UFF0/CK] -to [get_pins UFF3/D] -hold
# The -setup and -hold options are explicitly specified.
这里是2的多周期设置的建立时间路径时间报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNAND0/ZN (ND2 ) 0.03 0.29 r
UFF3/D (DFF ) 0.00 0.29 r
data arrival time 0.29
clock CLKP (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKP (in) 0.00 20.00 r
UCKBUF4/C (CKB ) 0.07 20.07 r
UFF3/CK (DFF ) 0.00 20.07 r
clock uncertainty -0.30 19.77
library setup time -0.04 19.72
data required time 19.72
---------------------------------------------------------------
data required time 19.72
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 19.44
这里是1的多周期保持的保持检查时序路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.16
请注意,本节中用于设置和保持检查的示例报表适用于相同的时间角。 但是,在最差的慢角落,安装检查通常最难达到(具有最低的松弛度),而在最好的情况下,检查通常最难达到(具有最低的松弛度)。
8.4 False Paths
某些时序路径在设计的实际功能操作中可能不是真实的(或不可能的)。 通过将这些路径设置为错误路径,可以在STA期间关闭这些路径。 一个错误的路径被忽略STA分析。
错误路径的例子可以是从一个时钟域到另一个时钟域,从触发器的时钟引脚到另一个触发器的输入,通过单元的引脚,通过多个单元的引脚,或者 这些。 当通过单元的引脚指定错误路径时,所有通过该引脚的路径都将被忽略以进行时序分析。 识别错误路径的好处是减少了分析空间,从而使分析仅仅关注真实路径。 这有助于缩短分析时间。 然而,使用贯穿规范通配的错误路径太多会减慢分析速度。
错误的路径是使用set_false_path规范设置的。 这里有些例子。
set_false_path -from [get_clocks SCAN_CLK] \
-to [get_clocks CORE_CLK]
# Any path starting from the SCAN_CLK domain to the
# CORE_CLK domain is a false path.
set_false_path -through [get_pins UMUX0/S]
# Any path going through this pin is false.
set_false_path \
-through [get_pins SAD_CORE/RSTN]]
# The false path specifications can also be specified to,
# through, or from a module pin instance.
set_false_path -to [get_ports TEST_REG*]
# All paths that end in port named TEST_REG* are false paths.
set_false_path -through UINV/Z -through UAND0/Z
# Any path that goes through both of these pins
# in this order is false.
下面给出几条有关设置错误路径的建议。 要在两个时钟域之间设置错误路径,请使用:
set_false_path -from [get_clocks clockA] \
-to [get_clocks clockB]
instead of:
set_false_path -from [get_pins {regA_*}/CP] \
-to [get_pins {regB_*}/D]
第二种形式要慢得多。
另一个建议是尽量减少对通过选项的使用,因为它增加了不必要的运行时复杂性。 只能在绝对必要的地方使用-through选项,并且没有其他方法来指定错误路径。
从优化的角度来看,另一个方针是在多循环路径是真正意图的时候不要使用错误路径。 如果信号在已知或可预测的时间采样,无论距离多远,都应使用多周期路径规范,以使路径具有一定的约束条件,并进行优化以满足多周期约束条件。 如果在很多时钟周期之后的采样路径上使用了错误的路径,那么剩余逻辑的优化可能总是减慢这条路径,甚至超出可能需要的路径。
8.5 半周期路径
如果一个设计既有负沿触发的触发器(有效时钟沿是下降沿),也有正边沿触发的触发器(有效时钟沿是上升沿),设计中可能存在半周期路径。 半周期路径可能是从上升沿触发器到下降沿触发器,反之亦然。 图8-19显示了一个启动时间在触发器UFF5时钟下降沿的例子,捕获在触发器UFF3时钟的上升沿。
Startpoint: UFF5(falling edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (fall edge) 6.00 6.00
clock source latency 0.00 6.00
CLKP (in) 0.00 6.00 f
UCKBUF4/C (CKB ) 0.06 6.06 f
UCKBUF6/C (CKB ) 0.06 6.12 f
UFF5/CKN (DFN ) 0.00 6.12 f
UFF5/Q (DFN ) <- 0.16 6.28 r
UNAND0/ZN (ND2 ) 0.03 6.31 f
UFF3/D (DFF ) 0.00 6.31 f
data arrival time 6.31
clock CLKP (rise edge) 12.00 12.00
clock source latency 0.00 12.00
CLKP (in) 0.00 12.00 r
UCKBUF4/C (CKB ) 0.07 12.07 r
clock uncertainty -0.30 11.77
library setup time -0.03 11.74
data required time 11.74
---------------------------------------------------------------
data required time 11.74
data arrival time -6.31
---------------------------------------------------------------
slack (MET) 5.43
请注意起点和终点的边缘规格。 下降沿出现在6ns,上升沿出现在12ns。 因此,数据只有半个周期,即6ns,传播到捕获触发器。
虽然数据路径的设置检查只有半个周期,但是保持时间检查可以使用额外的半个周期。 这里是保持时间的路径。
Startpoint: UFF5(falling edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (fall edge) 6.00 6.00
clock source latency 0.00 6.00
CLKP (in) 0.00 6.00 f
UCKBUF4/C (CKB ) 0.06 6.06 f
UCKBUF6/C (CKB ) 0.06 6.12 f
UFF5/CKN (DFN ) 0.00 6.12 f
UFF5/Q (DFN ) <- 0.16 6.28 r
UNAND0/ZN (ND2 ) 0.03 6.31 f
UFF3/D (DFF ) 0.00 6.31 f
data arrival time 6.31
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -6.31
---------------------------------------------------------------
slack (MET) 6.18
pin(CDN) {
. . .
timing() {
related_pin : "CK";
timing_type : removal_rising;
. . .
}
}
Startpoint: UFF5(falling edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF6 (removal check against rising-edge clock CLKP)
Path Group: **async_default**
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (fall edge) 6.00 6.00
clock source latency 0.00 6.00
CLKP (in) 0.00 6.00 f
UCKBUF4/C (CKB ) 0.06 6.06 f
UCKBUF6/C (CKB ) 0.07 6.13 f
UFF5/CKN (DFN ) 0.00 6.13 f
UFF5/Q (DFN ) 0.15 6.28 f
UINV8/ZN (INV ) 0.03 6.31 r
UFF6/CDN (DFCN ) 0.00 6.31 r
data arrival time 6.31
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UCKBUF6/C (CKB ) 0.07 0.14 r
UCKBUF7/C (CKB ) 0.05 0.19 r
UFF6/CK (DFCN ) 0.00 0.19 r
clock uncertainty 0.05 0.24
library removal time 0.19 0.43
data required time 0.43
data required time 0.43
data arrival time -6.31
---------------------------------------------------------------
slack (MET) 5.88
端点显示这是删除检查。 它在触发器UFF6的异步引脚CDN上。 该触发器的去除时间被列为库去除时间,其值为0.19ns。
所有异步计时检查都分配给异步默认路径组。
8.7恢复时间检查
恢复时序检查确保异步信号变为非活动状态和下一个活动时钟沿之间的最小时间间隔。 换句话说,这个检查确保在异步信号变为非活动状态之后,有足够的时间恢复,以便下一个有效的时钟边沿可以有效。 例如,考虑异步复位变为无效和触发器的时钟有效沿之间的时间。 如果在复位释放后太快发生活动时钟边沿,则触发器的状态可能未知。 恢复检查如图8-21所示。 该检查基于单元库文件中触发器的异步引脚指定的恢复时间,其摘录如下所示。
pin(RSN) {
. . .
timing() {
related_pin : "CK";
timing_type : recovery_rising;
. . .
}
}
像安装程序检查一样,除了处于异步信号之外,这是一个最大路径检查。
这是一个恢复路径报告。
Startpoint: UFF5(falling edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF6 (recovery check against rising-edge clock CLKP)
Path Group: **async_default**
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (fall edge) 6.00 6.00
clock source latency 0.00 6.00
CLKP (in) 0.00 6.00 f
UCKBUF4/C (CKB ) 0.06 6.06 f
UCKBUF6/C (CKB ) 0.07 6.13 f
UFF5/CKN (DFN ) 0.00 6.13 f
UFF5/Q (DFN ) 0.15 6.28 f
UINV8/ZN (INV ) 0.03 6.31 r
UFF6/CDN (DFCN ) 0.00 6.31 r
data arrival time 6.31
clock CLKP (rise edge) 12.00 12.00
clock source latency 0.00 12.00
CLKP (in) 0.00 12.00 r
UCKBUF4/C (CKB ) 0.07 12.07 r
UCKBUF6/C (CKB ) 0.07 12.14 r
UCKBUF7/C (CKB ) 0.05 12.19 r
UFF6/CK (DFCN ) 0.00 12.19 r
clock uncertainty -0.30 11.89
library recovery time 0.09 11.98
data required time 11.98
---------------------------------------------------------------
data required time 11.98
data arrival time -6.31
---------------------------------------------------------------
slack (MET) 5.67
端点显示它是恢复检查。 UFF6触发器的恢复时间被列为库恢复时间,其值为0.09ns。 恢复检查也属于异步默认路径组。
8.8 跨时钟域的时序
8.8.1慢到快时钟域
让我们检查一下当路径从一个较慢的时钟域到一个更快的时钟域时的设置和保持检查。 如图8-22所示。
下面是我们的例子中的时钟定义。
create_clock -name CLKM \
-period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP \
-period 5 -waveform {0 2.5} [get_ports CLKP]
当发射触发器和捕获触发器的时钟频率不同时,通过首先确定一个公共基期来执行STA。 下面给出以上述两个时钟对STA进行设计时产生的消息的一个例子。 更快的时钟被扩展,从而获得一个公共周期。
将时钟“CLKP”扩大至20.00的基准时间段(旧周期为5.00,加入6-边缘)。
设置检查如图8-23所示。 默认情况下,使用最受约束的建立边缘关系,在这种情况下,它是下一个捕获边缘。 这是一个设置路径报告,显示了这一点。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNAND0/ZN (ND2 ) 0.03 0.29 r
UFF3/D (DFF ) 0.00 0.29 r
data arrival time 0.29
clock CLKP (rise edge) 5.00 5.00
clock source latency 0.00 5.00
CLKP (in) 0.00 5.00 r
UCKBUF4/C (CKB ) 0.07 5.07 r
UFF3/CK (DFF ) 0.00 5.07 r
clock uncertainty -0.30 4.77
library setup time -0.04 4.72
data required time 4.72
---------------------------------------------------------------
data required time 4.72
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 4.44
注意,启动时钟在时间0ns,而捕获时钟在5ns。
如前所述,保持检查与设置检查有关,并确保时钟边沿发起的数据不会干扰先前的捕获。 这是保持检查时间报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.16
在上面的例子中,我们可以看到发射数据在捕获时钟的每个第四个周期都是可用的。 让我们假设目的不是捕获CLKP的下一个有效沿上的数据,而是捕获每4个捕获边沿上的数据。 这个假设给出了触发器四个CLKP周期传播的组合逻辑,这是20ns。 我们可以通过设置下面的多周期规范来做到这一点:
set_multicycle_path 4 -setup \
-from [get_clocks CLKM] -to [get_clocks CLKP] -end
-end指定4的多周期表示结束点或捕获时钟。 这个多周期规范将设置和保持检查更改为图8-24所示的检查。 这是设置报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNAND0/ZN (ND2 ) 0.03 0.29 r
UFF3/D (DFF ) 0.00 0.29 r
data arrival time 0.29
clock CLKP (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKP (in) 0.00 20.00 r
UCKBUF4/C (CKB ) 0.07 20.07 r
UFF3/CK (DFF ) 0.00 20.07 r
clock uncertainty -0.30 19.77
library setup time -0.04 19.72
data required time 19.72
---------------------------------------------------------------
data required time 19.72
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 19.44
图8-24显示了保持检查 - 请注意保持检查是从设置检查导出的,默认为预期捕获边沿之前的一个周期。 这是保持时间报告。 请注意,保持捕捉边缘在设置捕捉边缘之前的一个周期的15ns。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 15.00 15.00
clock source latency 0.00 15.00
CLKP (in) 0.00 15.00 r
UCKBUF4/C (CKB ) 0.07 15.07 r
UFF3/CK (DFF ) 0.00 15.07 r
clock uncertainty 0.05 15.12
library hold time 0.02 15.13
data required time 15.13
---------------------------------------------------------------
data required time 15.13
data arrival time -0.29
---------------------------------------------------------------
slack (VIOLATED) -14.84
在大多数设计中,这不是预期的检查,保持检查应该一直移动到发射边缘的位置。 我们通过设置3的保持多周期规范来做到这一点。
set_multicycle_path 3 -hold \
-from [get_clocks CLKM] -to [get_clocks CLKP] -end
3的周期将保持检查沿移回三个周期,即到0ns。 与设置多周期的区别在于,在设置中,设置捕捉边沿从默认设置捕捉边沿向前移动指定的循环次数; 在保持多周期中,保持检查边缘从默认保持检查边缘向后移动(建立边缘之前的一个周期)。 -end选项意味着我们要将端点(或捕获边沿)移回指定的周期数,即捕获时钟周期数。 而不是-end,另一个选项-start选项指定要移动的启动时钟周期数; -end选项指定要移动的捕获时钟周期数。 -end是多周期设置的默认设置,-start是多周期保持的默认设置。
通过附加的多周期保持规范,用于保持时序检查的时钟边沿被移回一个周期,检查如图8-25所示。 多轮持有规格的召开报告如下。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DF ) 0.00 0.11 r
UFF0/Q (DF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.16
总之,如果指定了N个周期的设置多周期,那么也应该指定N-1个周期的保持多周期。 在慢速到快速时钟域之间的路径情况下,多频率多周期路径规范的一个很好的经验法则是使用-end选项。 使用此选项,建立和保持检查将根据快速时钟的时钟周期进行调整。
8.8.2 快慢时钟域
在本小节中,我们考虑数据路径从快速时钟域到慢速时钟域的示例。 使用以下时钟定义时,默认设置和保持检查如图8-26所示。
create_clock -name CLKM \
-period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP \
-period 5 -waveform {0 2.5} [get_ports CLKP]
有四个设置时间检查可能; 请参阅图中的Setup1,Setup2,Setup3和Setup4。 但是,限制最严格的是Setup4检查。 这是最严格的道路报告。 请注意,启动时钟沿位于15ns,捕捉时钟沿位于20ns。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 15.00 15.00
clock source latency 0.00 15.00
CLKP (in) 0.00 15.00 r
UCKBUF4/C (CKB ) 0.07 15.07 r
UFF3/CK (DFF ) 0.00 15.07 r
UFF3/Q (DFF ) <- 0.15 15.22 f
UNOR0/ZN (NR2 ) 0.05 15.27 r
UBUF4/Z (BUFF ) 0.05 15.32 r
UFF1/D (DFF ) 0.00 15.32 r
data arrival time 15.32
clock CLKM (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKM (in) 0.00 20.00 r
UCKBUF0/C (CKB ) 0.06 20.06 r
UCKBUF2/C (CKB ) 0.07 20.12 r
UFF1/CK (DFF ) 0.00 20.12 r
clock uncertainty -0.30 19.82
library setup time -0.04 19.78
data required time 19.78
---------------------------------------------------------------
data required time 19.78
data arrival time -15.32
---------------------------------------------------------------
slack (MET) 4.46
与设置检查类似,有四个保持检查可能。 图8-26显示了最严格的保持检查,确保0ns处的捕获边沿不会捕获在0ns处启动的数据。 这是保持检查的时间报告。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
UFF3/Q (DFF ) <- 0.16 0.22 r
UNOR0/ZN (NR2 ) 0.02 0.25 f
UBUF4/Z (BUFF ) 0.06 0.30 f
UFF1/D (DFF ) 0.00 0.30 f
data arrival time 0.30
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF2/C (CKB ) 0.07 0.12 r
UFF1/CK (DFF ) 0.00 0.12 r
clock uncertainty 0.05 0.17
library hold time 0.01 0.19
data required time 0.19
---------------------------------------------------------------
data required time 0.19
data arrival time -0.30
---------------------------------------------------------------
slack (MET) 0.12
一般来说,设计者可以将从快时钟到慢时钟的数据路径指定为多周期路径。 如果安装检查放松,为数据路径提供两个更快的时钟周期,则此多周期规范包含以下内容:
set_multicycle_path 2 -setup \
-from [get_clocks CLKP] -to [get_clocks CLKM] -start
set_multicycle_path 1 -hold \
-from [get_clocks CLKP] -to [get_clocks CLKM] -start
# The -start option refers to the launch clock and is
# the default for a multicycle hold.
在这种情况下,图8-27显示了用于建立和保持检查的时钟沿。 -start选项指定周期数(本例中为2)的单位是启动时钟(本例中为CLKP)的单位。 2的设置多周期在启动边缘之前移动启动边缘一个边缘,即在10ns而不是默认的15ns。 保持多周期确保由于在0ns的发射边缘,在0ns处可靠地发生早期数据的捕获。
这是设置路径报告。 正如所料,启动时钟沿在10ns,捕捉时钟沿在20ns。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKP (in) 0.00 10.00 r
UCKBUF4/C (CKB ) 0.07 10.07 r
UFF3/CK (DFF ) 0.00 10.07 r
UFF3/Q (DFF ) <- 0.15 10.22 f
UNOR0/ZN (NR2 ) 0.05 10.27 r
UBUF4/Z (BUFF ) 0.05 10.32 r
UFF1/D (DFF ) 0.00 10.32 r
data arrival time 10.32
clock CLKM (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKM (in) 0.00 20.00 r
UCKBUF0/C (CKB ) 0.06 20.06 r
UCKBUF2/C (CKB ) 0.07 20.12 r
UFF1/CK (DFF ) 0.00 20.12 r
clock uncertainty -0.30 19.82
library setup time -0.04 19.78
data required time 19.78
---------------------------------------------------------------
data required time 19.78
data arrival time -10.32
---------------------------------------------------------------
slack (MET) 9.46
这是保持路径计时报告。 捕捉和启动时钟都有上升沿时,保持检测位于0ns。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
UFF3/Q (DFF ) <- 0.16 0.22 r
UNOR0/ZN (NR2 ) 0.02 0.25 f
UBUF4/Z (BUFF ) 0.06 0.30 f
UFF1/D (DFF ) 0.00 0.30 f
data arrival time 0.30
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF2/C (CKB ) 0.07 0.12 r
UFF1/CK (DFF ) 0.00 0.12 r
clock uncertainty 0.05 0.17
library hold time 0.01 0.19
data required time 0.19
---------------------------------------------------------------
data required time 0.19
data arrival time -0.30
---------------------------------------------------------------
slack (MET) 0.12
与从慢时钟域到快时钟域的路径不同,在从快速到慢时钟域的路径情况下,多频率多周期路径规范的一个很好的经验法则是使用-start选项。 然后根据快速时钟调整建立和保持检查。
8.9 例子
在本节中,我们将介绍启动和捕捉时钟的不同场景,并展示如何执行设置和保持检查。 示例中的配置如图8-28所示。
Half-cycle Path - Case 1
在这个例子中,两个时钟具有相同的周期,但是是相反的。 这里是时钟规范 - 波形如图8-29所示。
create_clock -name CLKM \
-period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP \
-period 20 -waveform {10 20} [get_ports CLKP]
设置检查从0ns的发射边缘到10ns的下一个捕获边缘。 保持检查的半周期余量可用,验证20ns时发射的数据是否在10ns时未被捕获沿捕获。 这是设置路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNAND0/ZN (ND2 ) 0.03 0.29 r
UFF3/D (DFF ) 0.00 0.29 r
data arrival time 0.29
clock CLKP (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKP (in) 0.00 10.00 r
UCKBUF4/C (CKB ) 0.07 10.07 r
UFF3/CK (DFF ) 0.00 10.07 r
clock uncertainty -0.30 9.77
library setup time -0.04 9.72
data required time 9.72
---------------------------------------------------------------
data required time 9.72
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 9.4
以下是保持路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKM (in) 0.00 20.00 r
UCKBUF0/C (CKB ) 0.06 20.06 r
UCKBUF1/C (CKB ) 0.06 20.11 r
UFF0/CK (DFF ) 0.00 20.11 r
UFF0/Q (DFF ) <- 0.14 20.26 r
UNAND0/ZN (ND2 ) 0.03 20.29 f
UFF3/D (DFF ) 0.00 20.29 f
data arrival time 20.29
clock CLKP (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKP (in) 0.00 10.00 r
UCKBUF4/C (CKB ) 0.07 10.07 r
UFF3/CK (DFF ) 0.00 10.07 r
clock uncertainty 0.05 10.12
library hold time 0.02 10.13
data required time 10.13
---------------------------------------------------------------
data required time 10.13
data arrival time -20.29
---------------------------------------------------------------
slack (MET) 10.16
Half-cycle Path - Case 2
这个例子类似于情况1,发射和捕获时钟是相反的。 启动时钟正在转换。 这里是时钟规格; 波形如图8-30所示。
create_clock -name CLKM \
-period 10 -waveform {5 10} [get_ports CLKM]
create_clock -name CLKP \
-period 10 -waveform {0 5} [get_ports CLKP]
设置检查是从5ns的启动时钟沿到10ns的下一个捕捉时钟沿。 保持检查是从5ns的发射边缘到0ns的捕获边缘。 这是设置路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 5.00 5.00
clock source latency 0.00 5.00
CLKM (in) 0.00 5.00 r
UCKBUF0/C (CKB ) 0.06 5.06 r
UCKBUF1/C (CKB ) 0.06 5.11 r
UFF0/CK (DFF ) 0.00 5.11 r
UFF0/Q (DFF ) <- 0.14 5.26 f
UNAND0/ZN (ND2 ) 0.03 5.29 r
UFF3/D (DFF ) 0.00 5.29 r
data arrival time 5.29
clock CLKP (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKP (in) 0.00 10.00 r
UCKBUF4/C (CKB ) 0.07 10.07 r
UFF3/CK (DFF ) 0.00 10.07 r
clock uncertainty -0.30 9.77
library setup time -0.04 9.72
data required time 9.72
---------------------------------------------------------------
data required time 9.72
data arrival time -5.29
---------------------------------------------------------------
slack (MET) 4.44
Here is the hold path timing report.
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 5.00 5.00
clock source latency 0.00 5.00
CLKM (in) 0.00 5.00 r
UCKBUF0/C (CKB ) 0.06 5.06 r
UCKBUF1/C (CKB ) 0.06 5.11 r
UFF0/CK (DFF ) 0.00 5.11 r
UFF0/Q (DFF ) <- 0.14 5.26 r
UNAND0/ZN (ND2 ) 0.03 5.29 f
UFF3/D (DFF ) 0.00 5.29 f
data arrival time 5.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -5.29
---------------------------------------------------------------
slack (MET) 5.16
Fast to Slow Clock Domain
在这个例子中,捕捉时钟是启动时钟的二分频。 这里是时钟规格。
create_clock -name CLKM \
-period 10 -waveform {0 5} [get_ports CLKM]
create_clock -name CLKP \
-period 20 -waveform {0 10} [get_ports CLKP]
波形如图8-31所示。 设置检查是从10ns的发射边缘到20ns的捕获边缘。 保持检查从0ns的发射边沿到0ns的捕获边沿。 这是设置路径报告。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 10.00 10.00
clock source latency 0.00 10.00
CLKM (in) 0.00 10.00 r
UCKBUF0/C (CKB ) 0.06 10.06 r
UCKBUF1/C (CKB ) 0.06 10.11 r
UFF0/CK (DFF ) 0.00 10.11 r
UFF0/Q (DFF ) <- 0.14 10.26 f
UNAND0/ZN (ND2 ) 0.03 10.29 r
UFF3/D (DFF ) 0.00 10.29 r
data arrival time 10.29
clock CLKP (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKP (in) 0.00 20.00 r
UCKBUF4/C (CKB ) 0.07 20.07 r
UFF3/CK (DFF ) 0.00 20.07 r
clock uncertainty -0.30 19.77
library setup time -0.04 19.72
data required time 19.72
---------------------------------------------------------------
data required time 19.72
data arrival time -10.29
---------------------------------------------------------------
slack (MET) 9.44
Here is the hold path timing report.
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.16
Slow to Fast Clock Domain
在这个例子中,捕捉时钟的速度是启动时钟的两倍。 图8-32显示了与建立和保持检查相对应的时钟沿。 安装程序检查从0ns的发射边缘到5ns的下一个捕获边缘完成。 在设置捕捉边沿之前一个周期,捕捉边沿完成保持检查,即启动边沿和捕捉边沿都处于0ns。
Here is the setup path report.
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 f
UNAND0/ZN (ND2 ) 0.03 0.29 r
UFF3/D (DFF ) 0.00 0.29 r
data arrival time 0.29
clock CLKP (rise edge) 5.00 5.00
clock source latency 0.00 5.00
CLKP (in) 0.00 5.00 r
UCKBUF4/C (CKB ) 0.07 5.07 r
UFF3/CK (DFF ) 0.00 5.07 r
clock uncertainty -0.30 4.77
library setup time -0.04 4.72
data required time 4.72
---------------------------------------------------------------
data required time 4.72
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 4.44
Here is the hold timing report.
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.16
8.10 多个时钟
8.10.1整数倍数
通常在设计中定义了多个时钟,频率彼此之间是简单的(或整数)倍数。 在这种情况下,通过计算所有相关时钟之间的公共基本周期来执行STA(如果两个时钟在其域之间具有数据路径,那么两个时钟是相关的)。 共同的基地期间建立,使所有的时钟同步。
下面是一个显示四个相关时钟的例子:
create_clock -name CLKM \
-period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKQ -period 10 -waveform {0 5}
create_clock -name CLKP \
-period 5 -waveform {0 2.5} [get_ports CLKP]
在分析CLKP和CLKM时钟域之间的路径时,使用20ns的通用基极周期(如图8-33所示)。
Expanding clock 'CLKP' to base period of 20.00 (old period was 5.00, added 6 edges).
Expanding clock 'CLKQ' to base period of 20.00 (old period was 10.00, added 2 edges).
以下是从较快的时钟到较慢的时钟的路径的建立时间报告。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 15.00 15.00
clock source latency 0.00 15.00
CLKP (in) 0.00 15.00 r
UCKBUF4/C (CKB ) 0.07 15.07 r
UFF3/CK (DFF ) 0.00 15.07 r
UFF3/Q (DFF ) <- 0.15 15.22 f
UNOR0/ZN (NR2 ) 0.05 15.27 r
UBUF4/Z (BUFF ) 0.05 15.32 r
UFF1/D (DFF ) 0.00 15.32 r
data arrival time 15.32
clock CLKM (rise edge) 20.00 20.00
clock source latency 0.00 20.00
CLKM (in) 0.00 20.00 r
UCKBUF0/C (CKB ) 0.06 20.06 r
UCKBUF2/C (CKB ) 0.07 20.12 r
UFF1/CK (DFF ) 0.00 20.12 r
clock uncertainty -0.30 19.82
library setup time -0.04 19.78
data required time 19.78
---------------------------------------------------------------
data required time 19.78
data arrival time -15.32
---------------------------------------------------------------
slack (MET) 4.46
这是相应的保持路径报告。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
UFF3/Q (DFF ) <- 0.16 0.22 r
UNOR0/ZN (NR2 ) 0.02 0.25 f
UBUF4/Z (BUFF ) 0.06 0.30 f
UFF1/D (DFF ) 0.00 0.30 f
data arrival time 0.30
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF2/C (CKB ) 0.07 0.12 r
UFF1/CK (DFF ) 0.00 0.12 r
clock uncertainty 0.05 0.17
library hold time 0.01 0.19
data required time 0.19
---------------------------------------------------------------
data required time 0.19
data arrival time -0.30
---------------------------------------------------------------
slack (MET) 0.12
8.10.2 非整数倍数
考虑在两个时钟域之间存在频率不是彼此的倍数的数据路径的情况。 例如,启动时钟被一个公共时钟8分频,捕获时钟被公共时钟5分频,如图8-34所示。 本节介绍如何在这种情况下执行建立和保持检查。
这里是时钟定义(波形如图8-35所示)。
create_clock -name CLKM \
-period 8 -waveform {0 4} [get_ports CLKM]
create_clock -name CLKQ -period 10 -waveform {0 5}
create_clock -name CLKP \
-period 5 -waveform {0 2.5} [get_ports CLKP]
时序分析过程计算相关时钟的共同周期,然后将时钟扩展到这个基周期。 请注意,公共周期仅适用于相关时钟(即在它们之间具有时序路径的时钟)。 CLKQ和CLKP之间数据通路的共同周期仅扩展到10ns的基准周期。 CLKM和CLKQ之间的数据通路的公共周期是40ns,CLKM和CLKP之间的数据通路的公共周期也是40ns。
让我们考虑从CLKMclock域到CLKP时钟域的数据路径。 时序分析的通用基准时间是40ns。
将时钟“CLKM”扩展到基准周期40.00(旧时期为8.00,增加了8个边沿)。
将时钟“CLKP”扩展到基准周期40.00(旧时期为5.00,增加了14个边沿)。
设置检查发生在启动边沿和时钟捕捉边沿之间的最短时间内。 在我们的从CLKM到CLKP的示例路径中,这将是在24ns的时钟CLKM和在25ns的时钟CLKP下的捕获。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 24.00 24.00
clock source latency 0.00 24.00
CLKM (in) 0.00 24.00 r
UCKBUF0/C (CKB ) 0.06 24.06 r
UCKBUF1/C (CKB ) 0.06 24.11 r
UFF0/CK (DFF ) 0.00 24.11 r
UFF0/Q (DFF ) <- 0.14 24.26 f
UNAND0/ZN (ND2 ) 0.03 24.29 r
UFF3/D (DFF ) 0.00 24.29 r
data arrival time 24.29
clock CLKP (rise edge) 25.00 25.00
clock source latency 0.00 25.00
CLKP (in) 0.00 25.00 r
UCKBUF4/C (CKB ) 0.07 25.07 r
UFF3/CK (DFF ) 0.00 25.07 r
clock uncertainty -0.30 24.77
library setup time -0.04 24.72
data required time 24.72
---------------------------------------------------------------
data required time 24.72
data arrival time -24.29
---------------------------------------------------------------
slack (MET) 0.44
这里是保持时间的路径。 最严格的保持路径是从CLKM的0ns发射到CLKP的0ns的捕获边缘。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CLKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Path Group: CLKP
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DFF ) 0.00 0.11 r
UFF0/Q (DFF ) <- 0.14 0.26 r
UNAND0/ZN (ND2 ) 0.03 0.29 f
UFF3/D (DFF ) 0.00 0.29 f
data arrival time 0.29
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
clock uncertainty 0.05 0.12
library hold time 0.02 0.13
data required time 0.13
---------------------------------------------------------------
data required time 0.13
data arrival time -0.29
---------------------------------------------------------------
slack (MET) 0.16
现在我们检查从CLKP时钟域到CLKM时钟域的建立路径。 在这种情况下,最严格的建立路径是从时钟CLKP的15ns的发射边沿到时钟CLKM的16ns的捕捉边沿。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 15.00 15.00
clock source latency 0.00 15.00
CLKP (in) 0.00 15.00 r
UCKBUF4/C (CKB ) 0.07 15.07 r
UFF3/CK (DFF ) 0.00 15.07 r
UFF3/Q (DFF ) <- 0.15 15.22 f
UNOR0/ZN (NR2 ) 0.05 15.27 r
UBUF4/Z (BUFF ) 0.05 15.32 r
UFF1/D (DFF ) 0.00 15.32 r
data arrival time 15.32
clock CLKM (rise edge) 16.00 16.00
clock source latency 0.00 16.00
CLKM (in) 0.00 16.00 r
UCKBUF0/C (CKB ) 0.06 16.06 r
UCKBUF2/C (CKB ) 0.07 16.12 r
UFF1/CK (DFF ) 0.00 16.12 r
clock uncertainty -0.30 15.82
library setup time -0.04 15.78
data required time 15.78
---------------------------------------------------------------
data required time 15.78
data arrival time -15.32
---------------------------------------------------------------
slack (MET) 0.46
这里是保持路径报告,再次是限制性最强的是在0ns。
Startpoint: UFF3 (rising edge-triggered flip-flop clocked by CLKP)
Endpoint: UFF1 (rising edge-triggered flip-flop clocked by CLKM)
Path Group: CLKM
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CLKP (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKP (in) 0.00 0.00 r
UCKBUF4/C (CKB ) 0.07 0.07 r
UFF3/CK (DFF ) 0.00 0.07 r
UFF3/Q (DFF ) <- 0.16 0.22 r
UNOR0/ZN (NR2 ) 0.02 0.25 f
UBUF4/Z (BUFF ) 0.06 0.30 f
UFF1/D (DFF ) 0.00 0.30 f
data arrival time 0.30
clock CLKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CLKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF2/C (CKB ) 0.07 0.12 r
UFF1/CK (DFF ) 0.00 0.12 r
clock uncertainty 0.05 0.17
library hold time 0.01 0.19
data required time 0.19
---------------------------------------------------------------
data required time 0.19
data arrival time -0.30
---------------------------------------------------------------
slack (MET) 0.12
8.10.3 移相
这里是两个时钟相对于彼此90度相移的示例。
create_clock -period 2.0 -waveform {0 1.0} [get_ports CKM]
create_clock -period 2.0 -waveform {0.5 1.5} \
[get_ports CKM90]
图8-36显示了这些时钟的一个例子。 设置路径时间报告如下。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CKM90)
Path Group: CKM90
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock CKM (rise edge) 0.00 0.00
clock source latency 0.00 0.00
CKM (in) 0.00 0.00 r
UCKBUF0/C (CKB ) 0.06 0.06 r
UCKBUF1/C (CKB ) 0.06 0.11 r
UFF0/CK (DF ) 0.00 0.11 r
UFF0/Q (DF ) <- 0.14 0.26 f
UNAND0/ZN (ND2 ) 0.03 0.29 r
UFF3/D (DF ) 0.00 0.29 r
data arrival time 0.29
clock CKM90(rise edge) 0.50 0.50
clock source latency 0.00 0.50
CKM90(in) 0.00 0.50 r
UCKBUF4/C (CKB ) 0.07 0.57 r
UFF3/CK (DF ) 0.00 0.57 r
clock uncertainty -0.30 0.27
library setup time -0.04 0.22
data required time 0.22
---------------------------------------------------------------
data required time 0.22
data arrival time -0.29
---------------------------------------------------------------
slack (VIOLATED) -0.06
在0.5ns的CKM90的第一个上升沿是捕捉边缘。 保持检查是在设置捕捉边沿之前的一个周期。 对于2ns的发射边沿,建立捕捉边缘为2.5ns。 因此,保持检查位于0.5ns的前一个捕捉边缘。 保持路径时间报告如下。
Startpoint: UFF0 (rising edge-triggered flip-flop clocked by CKM)
Endpoint: UFF3 (rising edge-triggered flip-flop clocked by CKM90)
Path Group: CKM90
Path Type: min
Point Incr Path
---------------------------------------------------------------
clock CKM (rise edge) 2.00 2.00
clock source latency 0.00 2.00
CKM (in) 0.00 2.00 r
UCKBUF0/C (CKB ) 0.06 2.06 r
UCKBUF1/C (CKB ) 0.06 2.11 r
UFF0/CK (DF ) 0.00 2.11 r
UFF0/Q (DF ) <- 0.14 2.26 r
UNAND0/ZN (ND2 ) 0.03 2.29 f
UFF3/D (DF ) 0.00 2.29 f
data arrival time 2.29
clock CKM90(rise edge) 0.50 0.50
clock source latency 0.00 0.50
CLM90(in) 0.00 0.50 r
UCKBUF4/C (CKB ) 0.07 0.57 r
UFF3/CK (DF ) 0.00 0.57 r
clock uncertainty 0.05 0.62
library hold time 0.02 0.63
data required time 0.63
---------------------------------------------------------------
data required time 0.63
data arrival time -2.29
---------------------------------------------------------------
slack (MET) 1.66
其他定时检查,如数据到数据检查和时钟门控检查在第10章中描述。