静态时序分析将一个名为“timing borrowing”的概念应用于基于latch的设计。
让我们考虑一个周期为10的时钟,占空比为50%:
让我们也考虑一个简单的电路,如下所示:
为了便于理解,让我们假设每个触发器的setup和hold检查是“0”。此外,假设clock skew和clock latency为“0”。
在时间0时从F1发射的数据在时间10时在F2采样。因此,如果数据在10单位时间后达到F2,F2将无法捕获正确的数据。
同样,从F2发射的数据有10个时间单位才能到达F3,它将在下一个时钟边缘进行采样。
现在让我们用latch替换F2:L2,并且由同一条时钟线驱动:让我们从概念上理解timing borrowing。
对于从F1启动的数据:
如果它在10之前到达latch输入,此数据将在latch的D引脚处等待。这与F2表现出的行为相似。
然而,当数据在10点后达到L2时会发生什么?
L2在10到15的时间内是“transparent”。
因此,即使数据在10单位时间后到达L2,只要数据在15单位时间前到达L2,L2也能采样到。
例如,如果数据在12单位时间达到L2,这意味着latch提供了2个时间单位的优势(比触发器)。
在这个例子中,L2所能提供的最大优势是5个时间单位。现在,让我们看看从L2到F3的路径。
数据在12单位时间从L2出来,并将在20单位时间在F3采样。因此,从L2到F3的路径只有8个时间单位。
在所有触发器的设计上,第二条路径有10个时间单位。然而,在这个基于latch的电路中,它少了2个时间单位。
本质上:
- 进入latch的路径获得了2个额外的时间单位。
- 因此,latch之后的路径必须从其份额(10个时间单位)中“赠送”这2个时间单位。
换句话说,进入latch的路径从latch之后的路径“borrow”了2个时间单位。
进入latch的路径能够借用额外的时间就是latch transparent。
上面的例子
- 可以借的=5个时间单位。
- 实际借的=2个时间单位。
既然我们了解了latch背景下的timing borrow概念,让我们看看STA工具如何对基于latch的设计进行时序分析。
对于从时间0开始的F1的数据:
L2在0到5期间开放。这是L2可以捕获数据的窗口。因此,从F1以0发射的数据可以在0到5期间被L2捕获。
对于setup分析:
- 0将被视为L2的捕获边沿,timing borrow能力为5。
STA工具将进行以下操作:在0处启动,并在0处捕获,额外的timing borrow 能力为5。
考虑从L2到F3的路径:在0处发射,在10处在F3处捕获。剩余的timing就是10减去被借用的时间。
现在让我们来看看hold分析:
对于hold分析,我们希望确保数据不会在上一周期内被捕获。
F1在0处发射的数据可以在0-5期间被L2捕获。
或者,L2在0-5期间捕获的数据应该是F1在0时发射的数据。
如果下一个数据在5单位时间之前到达L2,那么它将干扰F1在0处发出的数据。因此,应进行hold检查,以便下一个数据不应在5单位时间前达到L2。