时序约束之时序例外

       静态时序分析工具默认分析规则是在单周期下对所有时序路径进行分析,但是实际设计中并不是所有的路径都需要分析,而且也不是所有时序路径的延时都规定在一个时钟周期以内。所以通过定义时序例外来对特殊的时序路径进行特殊的声明,指导时序分析工具对特殊的时序路径做出正确分析,这样的特殊声明叫做时序例外。

        时序例外主要用于如下几种情况。

        1.多周期路径设置

        设计中存在时序路径延时比较长,并且设计允许信号在这类时序路径下的延时等于几个周期的时间,如下图所示。   

时序约束之时序例外

        由于发射时序单元和捕获时序单元中的逻辑电路延时有多个时钟,故需要设置几个时钟的建立时间,定义的命令如下。

        set_multicycle_path  5  -setup  -from  [get_pins  DFF1/Q]  -to  [get_pins DFF2/D]

         set_multicycle_path  5  -hold  -from  [get_pins  DFF1/Q]  -to  [get_pins  DFF2/D]

        以上命令定义触发器DFF1与DFF2之间时序路径建立时间的延时为第5个时钟周期检查,保持时间的延时为第4个周期检查,其延时波形如下图所示。

时序约束之时序例外

        2.伪路径设置

        当设计中存在不需要做时序分析的时序路径时,可以通过伪路径的设置移除该时序路径上的默认时序约束,指导时序分析工具对设置的时序路径停止时序分析。

        一般设计中满足如下情况的时序路径可以定义为伪路径:

        (1)设计中存在某些时序路径在特定的工作状态下是不工作的,那么在对应的工作状态下进行时序分析时,该时序路径实际上是不需要进行分析的。

        比如测试逻辑的时序路径,这种路径在正常工作模式下是不需要考虑的,这种时序路径在工作模式下的时序分析中就可以定义为伪路径,如下图所示。 

时序约束之时序例外

        (2)设计中存在某些时序路径的时序要求是非常的宽松,以至于不需要进行时序分析。

        比如复位控制信号的时序路径,如下图所示。 

时序约束之时序例外

        这种路径在设计中一般对时序要求比较宽松,所以根据设计要求可以定义为伪路径。

        还有一种具有反馈环的时序路径如下图所示。

时序约束之时序例外

        这种路径一般在设计中如果不设置伪路径,可能出现时序违反,但是这种违反是可以接受的 ,那么可以定义为伪路径。

        (3)设计中存在某些时序路径并不会有真正的工作信号通过,这种时序路径实际上是无效的时序路径。

        比如不同时钟域之间的时序路径,如下图所示。

时序约束之时序例外

        这种时序路径在设计中可能存在无关性,那么可以定义为伪路径。

        还有一种设计中数据信号通过某些逻辑单元的部分时序路径没有对应输入激励来触发工作,如下图所示。 

时序约束之时序例外

        两个同样的选择器,由于选择信号不一样,因此其中的部分时序路径一定不会被触发,那么可以把不工作的时序路径定义为伪路径。

        伪路径通过使用SDC命令set_false_path来定义,命令示例如下:

        set_false_path  -from  [get_clocks  CLK1]  -to  [get_clocks  CLK2]

        以上命令定义了两个时钟域CLK1和CLK2之间的时序路径为伪路径。

        set_false_path  -through  [get_pins  DFF/RST]

        以上命令定义通过单元DFF中RST引脚的时序路径为伪路径。

        3.最大延时和最小延时设置

        当设计需要对某些点对点路径进行特殊设置时,可以通过定义最大延时和最小延时来实现。如下图所示中,时钟域clk1和clk2之间的时序路径默认设置是伪路径,但是其中有一条从触发器F1通过组合逻辑1到触发器F2的时序路径需要有时序约束。

时序约束之时序例外

        可以对这条路径通过定义最大延时和最小延时来实现,该命令将会覆盖掉所设置路径的默认时序约束。

        通过使用SDC命令set_min_delay和set_max_delay来定义最大延时和最小延时,命令示例如下。

        set_max_delay  0.6  -from  DFF1/Q   -to  DFF2/Q

        set_min_delay  0.2  -from  DFF1/Q  -to  DFF2/Q

        以上命令定义单元DFF1到单元DFF2之间时序路径的时序约束的最大延时为0.6ns,最小延时为0.2ns。

        当最大延时和最小延时设置命令中约束的节点定义的是时序路径中的节点时,那么时序约束仅仅应用于两个节点之间。而当约束的节点定义的是一个时钟,最大延时和最小延时设置将应用于该时钟源所控制的所有路径,命令示例如下。

        set_max_delay  1.2  -from  [get_clocks  CLK1]  -to  [get_clocks  CLK2]

        set_min_delay  0.4  -from  [get_clocks  CLK1]  -to  [get_clocks  CLK2]

        以上命令定义从时钟域CLK1到CLK2之间所有时序路径的时序约束的最大延时为1.2ns,最小延时为0.4ns。