静态时序分析
input2reg的建立时间的检查
上图是一个input端口到寄存器的时序模型,他的时钟源头是输入端口,所以我们无法直接对这条时序路径进行分析,为了能够利用之前分析的结果,我们需要在input端口外面设定一个虚拟的触发器,这个触发器的输出经过input port到内部的寄存器,这样整个时序路径就和寄存器到寄存器的分析一样了。
通过下面的约束。我们可以将input delay设置一个最大值(分析setup time),这个最大值就包含前面所说的发射端寄存器的所有延时。
creat_clock -name VIRTUAL_CLKM -period 10 -waveform (0 5)
set input_delay -clock VIRTUAL_CLKM -max 2.55 [ get_ports INA]
剩下的分析就和寄存器到寄存器的时序分析一样了。下图是一个输入端口到寄存器的时序报告,我们可以看到,上部是外部的虚拟时钟的延迟,从INA(in)这里开始,就进入内部真实的时序延迟分析了。
reg2output的建立时间的检查
同理,使用相同的分析方法和约束可以分析reg2output的路径延时。有一点区别就是施加的时序约束的不同:
set output_delay -clock VIRTUAL_CLKP -max 5.1 [get ports ROUT]
set load 0.02 [get ports ROUT]
这里给output端口施加了一个load的约束,是因为影响cell的延时的因素主要有两个:一个是transition时间,也就是从0翻转到1的时间,另一个就是cell的load。所以这里的load约束应该是施加给out端口的这个cell,否则无法准确的估计这个cell的延时。
input2output的建立时间检查
同上面一样,input2output的路径指的是数据从输入端口进来,经过内部的组合逻辑之后,直接到达输出端口,所以对于这样的路径,我们只需要约束好input delay和output delay就可以了。
保持时间的检查
保持时间指的是数据在时钟沿到来之后必须保持稳定的时间。这里的**时钟沿**指的是发射路径的时钟沿,所以,根据保持时间的定义,很容易得出保持时间应该满足的条件:
T
l
a
u
n
c
h
+
T
c
k
2
q
+
T
d
p
>
T
c
a
p
t
u
r
e
+
T
h
o
l
d
T_{launch}+T_{ck2q}+T_{dp}>T_{capture}+T_{hold}
Tlaunch+Tck2q+Tdp>Tcapture+Thold
左边就是数据从发射端的边沿产生之后经过逻辑延时到达捕获端的时间,左边时捕获端的时钟沿加上hold time,这里
T
l
a
u
n
c
h
T_{launch}
Tlaunch与
T
c
a
p
t
u
r
e
T_{capture}
Tcapture使用的都是同一个时钟边沿,不等式就代表真实的数据到达时间必须大于保持时间。
还有一点值得注意的是,在保持时间检查的时候,各个器件的延时值都是取最小值,这一点和建立时间取最大值的原因是一样的。
检查的时候,各个器件的延时值都是取最小值,这一点和建立时间取最大值的原因是一样的。