多周期路径
利用这一约束可以修改STA时序分析的建立和保持关系。
单周期路径
默认情况下Vivado执行单周期的检查。
- setup 一个周期
- hold零个周期
如下图所示:
建立
- 建立关系是发送沿和捕获沿的关系。
- 建立要求 = 捕获沿 - 发送沿
STA实际会找到所有的建立要求,在图中仅画出最严苛的情况,因为STA时序只计算最严苛的情况,也就是建立要求的最小值,我们知道正常情况下,setup是正数才对,而正得越多建立的松弛(建立后的余量,越容易达到建立条件)越多,对应数值越大,所以这里要选择小的,即建立松弛小的。
保持
这里有两个保持要求:
- hold1
- 保持关系的发送沿==(默认就是上图的发送沿)发的数据不能被到达沿(默认是上图捕获沿的前一个周期)==捕获。
- 保持要求 = 到达沿 - 保持关系发送沿。
- 保持关系是到达沿与保持关系发送沿的关系。
- 因为保持关系发送沿可以根据约束移动,所以不一定保持关系发送沿的下一个周期就是源时钟的下一个发送沿。
- hold2
- 保持关系的发送沿的下一个发送沿==(默认就是发送沿的下一个周期即上图的下一个发送沿)==发送的数据不能被捕获沿捕获。
- 保持要求 = 捕获沿 - 保持关系的发送沿的下一个发送沿。
- 保持关系是到达沿下一个周期==(默认是捕获沿)与保持关系的发送沿的下一个发送沿(默认就是发送沿的下一个周期即上图的下一个发送沿)==关系。
- 因为到达沿可以根据约束移动,所以不一定到达沿下一个周期就是目的时钟捕获沿。
STA时序只计算最严苛的情况,也就是两个保持要求的最大值,我们知道正常情况下,hold1和hold2都是负数才对,因此而负得越多保持的松弛(保持后的余量,越容易达到保持条件)越多,而对应数值越小,所以这里要选择大的,即保持松弛小的。实际上第二个保持关系与第一个保持关系是同一个意思,发送沿当作下个发送沿,则到达沿就是捕获沿。每个建立条件都有两个保持关系,而建立条件的最严苛不一定对应于保持关系的最严苛,STA是单独计算的。换句话就是STA会找一个公共周期(在0位置对齐的相位开始,还有相同的对齐相位)内的所有建立关系,并选择最小的为关注点,每一个建立关系都有两个保持关系,STA会选择最大的为关注点,最大关注点保持关系不一定对应于最小关注点的建立关系。
建立保持检查
默认的STA将执行以下的建立与保持关系检查。
-
建立检查
- TDatapath(max) < TCLK(t=Period) - TSetup
-
保持检查
- TDatapath(min) > TCLK(t=0) + THold
对于其他情况下,可能需要多个周期或者为了让终端接收到稳定的数据,需要多个时钟周期才能将数据稳定。
用法
set_multicycle_path <path_multiplier> [-setup|-hold] [-start|-end] [-from <startpoints>] [-to <endpoints>] [-through <pins|cells|nets>]
保持关系在大多数情况下跟着建立关系走,且有下面的公式,默认情况下 setup path multiplier = 1,hold path multiplier = 0
h o l d _ c y c l e s = < s e t u p p a t h m u l t i p l i e r > − 1 − < h o l d p a t h m u l t i p l i e r > = 1 − 1 − 0 = 0