set_multicycle_path

在了解set_multicycle_path的用法之前,我们需要了解一下建立时间和保持时间,让我们从单个触发器的数据传输开始。

1.建立时间,保持时间

当外面有数据传输到d触发器的门口时,此时我们想用上升沿触发的D触发器采到这个数据,这个时候,对于发来的数据,必须满足一些条件,才能被触发器捕捉到,这个条件就是建立和保持时间。

建立时间(setup time):时钟有效沿到来前,数据必须保持稳定的时间;

保持时间(hold time):时钟有效沿到来后,数据必须保持稳定的时间;

前面所说的捕获这个动作也叫capture,就是能采到数据。我们做sta分析的时候一般认为数据来源于外部的一个触发器,那么对于外部的触发器来说,发射这个数据的动作就叫launch。

image-20240726225859792

那么我们直接拿两个触发器分析一下他们之间的建立和保持时间。这是一个经典的两级触发器的结构,它们由同一个时钟驱动。DFF0作为launch的触发器,发出launch时钟以及数据,第二级触发器DFF1去捕获DFF0发出的数据。

第一级的触发器launch数据后会经过一段组合逻辑到达DFF1的D端。

所以下一个时钟沿,想要捕获到数据,这段延迟时间不能太长,必须满足setup时间的要求

image-20240727084036287

那么DFF0发数据,数据应该紧贴着launch时钟发出,但是由于触发器本身有一个ck到q端的delay,加上组合逻辑的延迟,所以真正launch的data,会在launch时钟沿之后一段时间才会发出。这就有了第一个公式,Tco + Tcomb < Tclk-Tsetup.

因为他们是同一个时钟,所以在当前launch时钟发出时,数据还没到DFF1的时候,DFF1的D一定是采到上一次launch之后的数据。所以检查的点是当前launch的时钟和上一个阶段的capture时钟,也就是下图中的同沿检查hold,那么hold需要满足的时间实际上是上一个launch的data延迟之后的时间,也就是Tco+Tcomb > Thold

那么总结一下,建立时间就是launch clock发出的数据,在capture之前需要稳定一段时间;保持时间就是capture的数据在下一个launch时钟到来前需要稳定的时间。

image-20240727084518778

那我们再来看一个带有skew的建立时间保持时间的分析。此处,launch clock发出的数,很快就有capture clock来捕获,此时建立时间的分析变得严苛,必须要在极短的时间内捕获数据,那么对于hold来说,我只要捕获到了数据,维持到下一个launch clock来的这个时间前保持稳定,很容易达到,所以对于setup check来说,检查launch clock到capture clock,那么对于hold来说就是检查capture的数据在next launch clock到来前是不是能稳定一段时间。也可以反过来说,上一次的capture clock在当前launch clock发数据之前能不能稳定一段时间

image-20240726224709456

2.multicycle path

通常情况下,两个同步的 reg 进行 timing check 时,组合逻辑的 delay 必须在一个时钟周期内到达,才能满足 setup 的时序。但在某些情况下,从一个寄存器输出到另外一个寄存器的 data 端需要不止一个 cycle 的时间,而且又不影响逻辑的功能。此时,我们可以将这样的 path 约束为 multicycle path。