1、建立时间检查

时序数据监控 时序检查_数据路径


时序数据监控 时序检查_时钟周期_02

时序数据监控 时序检查_时钟周期_03

2、保持时间检查

时序数据监控 时序检查_数据路径_04


时序数据监控 时序检查_触发器_05

时序数据监控 时序检查_触发器_06


3、多周期路径

某些情况下,两个寄存器之间的组合逻辑数据路径可以超过一个周期。这种情况下,可以声明一个组合逻辑路径是一个多周期路径。尽管数据采样寄存器每个周期都对数据进行采样,但可以让STA发生在几个指定的周期之后。可以用以下命令对花费3个时钟周期的数据路径进行约束。

时序数据监控 时序检查_时序数据监控_07


时序数据监控 时序检查_时钟周期_08


默认的保持时间检查发生在建立时间检查的前一个周期,这不是我们希望的。我们需要把默认的保持时间检查向前移动2个周期。用以下指令后,数据路径最短延迟将被约束在一个时钟周期内。

时序数据监控 时序检查_时序数据监控_09


多周期的hold的周期数指定了把默认保持时间检查边沿往回移动多少个时钟边沿。

一般的设计中,hold time约束大于1个时钟周期是行不通的,而要移回到发射边沿。

跨时钟域

(1)不同时钟,相同周期。

时序数据监控 时序检查_时钟周期_10


时序数据监控 时序检查_时序数据监控_11


没声明-setup就默认setup,这样hold time没指定周期就默认setup前一个。大概率违例。

时序数据监控 时序检查_时序数据监控_12


用这个设置后将hold time检查移至发射起点。

4、伪路径
有可能某条时序路径不是设计的真实存在的路径。这些路径可以被设置为伪路径而关闭STA。错误路径被STA忽略。

伪路径的例子可以是从一个时钟域到另一个时钟域,从一个触发器的时钟引脚到另一个寄存器的输入引脚,穿过一些组合逻辑。设置伪路径的优点是分析量减少了,让分析只聚焦于真实路径。这也减少了分析时间。但是,使用through参数通配的过多的伪路径将使STA变慢。

使用set_false_path参数的例子:

时序数据监控 时序检查_数据路径_13


时序数据监控 时序检查_触发器_14


在跨时钟域时,最好使用get_clocks而不是*通配符

时序数据监控 时序检查_时序数据监控_15


第二种将很慢。另外,尽量不要使用-through选项,因为会很慢。5、半周期路径

如果设计中同时存在上升沿触发器和下降沿触发器,则有可能存在半周期路径。

时序数据监控 时序检查_时序数据监控_16


如图,发射触发器是下降沿的,采样触发器是上升沿的。发射沿在6ns,采样沿在12ns,数据路径只有半个时钟周期6ns来传播。

hold检查出现在setup检查的前一个周期,所检查的采样沿是0ns时刻的。

6、移除时间检查
移除时间确保了一个有效时钟沿到一个异步控制信号之间有足够的时间。这个检查有效时钟沿没生效因为异步控制信号一直保持有效时钟沿之后的移除时间之后才变化。也就是说,异步控制信号在有效时钟沿很久(足够久)后才释放,这使得有效时钟沿没有发生作用。

就像一个hold检查,这是一个最短路径检查只不过发生在触发器的一个异步引脚。

时序数据监控 时序检查_触发器_17


所有异步时序检查被分配至async default路径组。7、恢复时间检查

这个检查确保了异步信号变无效到下一个有效时钟边沿之间的最短时间。

时序数据监控 时序检查_数据路径_18


类似于setup检查,这是一个最长路径检查,不能长到越过Recovery边界。8、跨时钟域

(1)慢时钟域到快时钟域

时序数据监控 时序检查_数据路径_19


在发射触发器和采样触发器的时钟是不同频率时,sta需要指定在第一个公共基准周期进行。快时钟需要扩展周期来获得一个公共的周期。

时序数据监控 时序检查_数据路径_20


默认的(最严格的)setup检查发生在采样触发器最靠近发射沿的时钟沿。也就是发射时钟的0ns时刻和采样时钟的5ns时刻。hold检查默认在setup检查前一个周期,也就是采样时钟的0ns时刻。

但是发射数据在每4个采样时钟周期才会有效一次。所以不需要每个CLKP都采样(做sta),这给了数据路径4个clkp周期来传播,也就是20ns。可以通过多周期指令设置。

时序数据监控 时序检查_触发器_21


-end选项指定了4个多周期是对终点时钟也就是采样时钟的设置。这个设置改变了setup和hold检查时刻。

时序数据监控 时序检查_时钟周期_22


但是hold检查应该移回到发射边沿(0ns),所以要对hold多周期指定为3,setup和hold的多周期设置的区别就是setup是将采样时钟沿向后移动指定数目的周期,而hold是将默认的hold采样时钟沿(setup检查沿的前一个边沿)向回移动。

时序数据监控 时序检查_时钟周期_23


-start选项就是移动发射时钟沿。-end在setup检查里是默认选项,-start在hold time里是默认选项。指定完后检查如下图所示。

时序数据监控 时序检查_触发器_24


总而言之,如果setup检查指定多周期为N,那hold检查应指定为N-1。

在快时钟域到慢时钟域的情况下,应该用-end选项。在这个选项下,setup检查和hold检查的移动都基于快时钟。(2)快时钟域到慢时钟域

时序数据监控 时序检查_触发器_25


在如上图这种情况下,将会出现4次setup检查,但是,最严格的是setup4,因为留给它的时间只有一个快时钟周期,其他都是两个以上。如果setup4满足时序要求,那其他的一定满足。

同样,hold检查也出现4次,但是,最严格的是在0ns发生的,因为它最短。

如果不需要这么严格,可以指定多周期路径。

时序数据监控 时序检查_时钟周期_26


-start选项说明移动的是发射时钟沿。移动完后变为下图检查。

时序数据监控 时序检查_时序数据监控_27


在这种情况下,最严格的路径也有个2个时钟周期来传播。所以快时钟到慢时钟的情况下应该使用-start选项,setup和hold检查时刻将基于快时钟移动。9、例子

时序数据监控 时序检查_数据路径_28


(1)半周期

时序数据监控 时序检查_时序数据监控_29


时序数据监控 时序检查_数据路径_30


(2)快时钟到慢时钟

时序数据监控 时序检查_时钟周期_31


默认是严格的约束,也就10ns到20ns的约束。

(3)慢时钟到快时钟

时序数据监控 时序检查_时序数据监控_32


默认的采样时钟是离发射时钟最近的采样时钟边沿。10、多时钟

(1)整数倍频

经常在设计中会出现几个时钟,其频率是某个时钟的整数倍频。在这种例子中,STA通过在相关时钟间计算一个公共的基础周期(如果存在数据路径)。建立这个周期是为了所有时钟都同步。

时序数据监控 时序检查_数据路径_33


在这里例子中,这个公共的基础周期是20ns,其实就是所有时钟周期的最小公倍数。假设对CLKP和CLKM之间的数据路径做setup检查,则sta的数据路径会从15ns开始检查(最严格),采样时钟从20ns开始。hold检查则均从0ns开始。

(2)非整数倍频

时序数据监控 时序检查_数据路径_34


时序数据监控 时序检查_时序数据监控_35


先考虑CLKM到CLKP之间的数据路径,setup检查发生在24ns到25ns之间(最严格)。hold检查则发生在0ns。

再考虑CLKP到CLKM之间的数据路径,setup检查发生在15ns到16ns之间,hold检查则发生在0ns。

(3)相位移动

先定义一个时钟和其相位移动90度的时钟。

时序数据监控 时序检查_时钟周期_36


时序数据监控 时序检查_时钟周期_37


setup检查发生在0ns到0.5ns之间。hold检查发生在2ns到0.5ns之间。