当前位置:   article > 正文

静态时序分析:SDC约束命令set_clock_latency详解_sdc中clk到clk的max delay的原因

sdc中clk到clk的max delay的原因

相关阅读

静态时序分析icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


目录

延迟值

对象列表

指定沿

最大、最小条件

早、晚延迟

时钟列表选项

移除属性

其他

注意事项


        时钟的延迟可以使用set_clock_latency命令设置,这里的时钟延迟包括源延迟(source latency),即时钟对象到时钟源对象(时钟定义点)的延迟,又叫插入延迟(insertion delay);以及网络延迟(network latency),即时钟源到各触发器时钟引脚的延迟。正如上一篇文章中说的一样静态时序分析:SDC约束命令set_clock_transition详解-CSDN博客,因为时钟树尚未创建,时钟端口的高扇出会导致,任何在时钟路径上的转换时间和延迟的计算都是毫无意义的,网络延迟只是一种预布局阶段(pre-layout)的估计,但注意源延迟在时钟树综合完成后依然会存在。

        该指令的BNF范式(有关BNF范式,可以参考以往文章)为:

  1. set_clock_latency
  2. delay object_list [-rise] [-fall] [-min] [-max]
  3. [-source] [-early] [-late] [-dynamic jitter]
  4. [-clock clock_list]
  5. //注:该命令的object_list参数一定要放在delay参数后

延迟值

        delay参数指定了时钟延迟值,默认情况下是指网络延迟,当使用了-source选项后指的是源延迟。注意,这个值一般为正,如果为负会出现如下所示的警告。

Warning: Value for <delay> is negative. (UID-450)

对象列表

        object_list参数指定了延迟值的作用对象,对于网络延迟,它可以是时钟、端口和引脚;对于源延迟,它可以是时钟以及源对象(即定义了时钟的端口或引脚)。

        如果对象是时钟,则源延迟或网络延迟会直接被指定在时钟上;如果对象是端口,则所有经过该端口的时钟会被指定源延迟或网络延迟;如果对象是引脚,则所有经过该引脚的所有时钟会被指定源延迟或网络延迟。

        下面对上面的描述进行举例说明,以图1所示的电路为参考。

图1 一个简单的例子 

        下面的命令创建了两个时钟对象,其中一个时钟clk控制发射触发器,一个时钟CLK控制捕获触发器(有关发射、捕获触发器,可以看以往的文章静态时序分析:建立时间分析-CSDN博客

  1. create_clock -period 10 [get_port clk]
  2. create_clock -period 20 [get_port CLK]

        下面的命令给clk时钟设置了源延迟和网络延迟。

  1. set_clock_latency 0.1 [get_clock clk]
  2. set_clock_latency -source 0.2 [get_clock clk]

        可以使用report_clock -skew命令查看时钟(包括其他允许的对象)的延迟情况,如图2所示。 

图2 时钟延迟报告

        下面的命令继续在端口clk上设置了源延迟和网络延迟,注意这两条命令与之前的区别。

  1. set_clock_latency 0.3 [get_port clk]
  2. set_clock_latency -source 0.4 [get_port clk]

         延迟情况如图3所示,可以看到其中有两个clk对象的源延迟和网络延迟,这是因为其中一个clk指的是时钟对象,另一个clk指的是端口对象。

图3 时钟延迟报告

         使用report_timing命令给出时序分析报告,如图4所示。

图4 时序分析报告

        可以看出,源延迟和网络延迟被叠加后合称为clock network delay,并且使用的是clk端口的延迟0.4源延迟+0.3网络延迟而不是clk时钟的延迟0.2源延迟+0.1网络延迟,这是因为端口的延迟覆盖了时钟的延迟,也可以时钟延迟指定的优先级低于端口指定的延迟。

        另外,我们可以看出对于理想时钟,DC并不会直接计算其实际时钟路径上的延迟(如计算U1、U2的延迟),而是直接使用set_clock_latency指定。

指定沿

        -rise选项用于指定延迟值作用于上升沿、-fall选项用于指定延迟值作用于下降沿。如果这两个选项都没有指定,延迟同时作用于时钟的上升沿和下降沿(相当于它们同时指定)。

        下面的命令更改端口clk的上升沿网络延迟为0.5,保持其下降沿网络延迟为0.3,延迟情况如图5所示。

set_clock_latency 0.5 -rise [get_port clk]

图5 时钟延迟报告

        使用report_timing命令给出时序分析报告,如图6所示。

图6 时序分析报告

        可以看出,由于本例的触发器是上升沿触发,因此我们的设置起了作用,现在的clock network delay是0.4源延迟+0.5网络延迟。

最大、最小条件

        -max选项用于指定延迟值作用于最大路径时序分析(一般情况下,这指建立时间分析),-min选项用于指定延迟值作用于最小路径时序分析(一般情况下,这指保持时间分析)。如果这两个选项都没有指定,延迟同时作用于最大路径和最小路径时序分析(相当于它们同时指定)。

        下面的命令更改端口clk的上升沿最大网络延迟为0.6,上升沿最小网络延迟为0.7,延迟情况如图7所示。

  1. set_clock_latency 0.6 -rise -max [get_port clk]
  2. set_clock_latency 0.7 -rise -min [get_port clk]

图7 时钟延迟报告

        使用report_timing命令分别给出建立时间和保持时间的时序分析报告,如图8和图9所示。

图8 建立时间时序报告

 图9 保持时间时序报告

        可以看出,建立时间时序分析时,clock network delay是0.4源延迟+0.6网络延迟;而保持时间时序分析时,clock network delay是0.4源延迟+0.7网络延迟。

早、晚延迟

        -early选项只能用于指定源延迟(即只能搭配-source使用),用于指定最快(最小源延迟)的源路径; -late选项只能用于指定源延迟(即只能搭配-source使用),用于指定最慢(最大源延迟)的源路径。在建立时间分析(最大路径)和保持时间分析(最小路径)中,会对发射时钟和捕获时钟的这点进行考虑,给出最差情况下的分析结果。如果这两个选项都没有指定,源延迟同时作用于最快情况和最慢情况(相当于它们同时指定)。为了与实际情况吻合,-early指定的源延迟应小于-late指定的源延迟。

        这是一个对于发射触发器和捕获触发器影响不同的选项,而-min/-max选项是在最大/最小时序路径分析时同时影响发射触发器和捕获触发器。

        我们用下面的命令给端口CLK(即捕获时钟)设置一个最快源延迟0.1,一个最慢源延迟0.2,延迟情况如图10所示。

  1. //注意-early和-late选项必须搭配-source使用
  2. set_clock_latency -early -source 0.1 [get_port CLK]
  3. set_clock_latency -late -source 0.2 [get_port CLK]

图10 时钟延迟报告

        使用report_timing命令分别给出建立时间和保持时间的时序分析报告,如图11和图12所示。 

图11 建立时间时序报告

图12 保持时间时序报告

        可以看到,在建立时间分析时,捕获时钟CLK使用了最小源延迟0.1;在保持时间分析时,捕获时钟CLK使用了最大源延迟0.2。这两者都是最坏的情况下的结果。发射时钟clk的不同延迟是因为上节中的-min/-max选项,注意要辨别这两者的差异。这点从时钟延迟报告中也可以看出,-min/-max、-early/-late、-rise/-fall这几组选项是可以任意搭配的。

        -source选项的作用,在前面已经进行过说明。-dynamic选项用于模拟时钟延迟的抖动,用得较少。

时钟列表选项

        时钟选项-clock用于指定一个列表,因为对象列表中可以有端口和引脚,会出现多个时钟从同一个端口或引脚经过。如果没有使用-clock选项指定,则命令对多个时钟生效;如果指定了-clock选项和时钟列表,则命令只对时钟列表中的时钟生效。

        在下面的例子中,我们使用命令在CLK端口又定义了一个时钟CLK1,并令端口CLK的源延迟为0.5,这会使得CLK1和CLK时钟在经过CLK端口时都受到影响,如图13、图14和图15所示。

  1. create_clock -period 30 -add -name CLK1 [get_port CLK]
  2. set_clock_latency -source 0.5 [get_port CLK]

图13 时钟延迟报告

 图14 捕获时钟为CLK的时序报告

图15 捕获时钟为CLK1的时序报告

        现在我们使用带-clock选项的命令,将CLK端口对CLK1的源延迟影响变成0.6,如图16、图17和图18所示。

set_clock_latency -source 0.6 [get_port CLK] -clock CLK1

图16 时钟延迟报告

图17 捕获时钟为CLK的时序报告

图18 捕获时钟为CLK1的时序报告 

        可以看到,端口CLK对CLK的源延迟影响依然是0.5,但对CLK1的源延迟影响已经变成了0.6。

移除属性

      使用remove_clock_latency可以移除时钟延迟属性,注意为了移除源延迟属性,需要加上-source选项。

其他

        -dynamic选项用于指定时钟延迟的抖动(jitter),这个选项不常使用,用于指定延迟中,不确定部分的延迟值,对于建立时间分析/保持时间分析,发射时钟/捕获时钟会有不同的情况,以使得最差情况的时序得到分析。

注意事项

        正如文章开头所说的,set_clock_latency命令只能模拟时钟树综合前的理想时钟的网络延迟,一旦时钟树综合完成,理想时钟会被转化为传播时钟,此时传播时钟的有关网络延迟相关的属性会被直接删除(而不是失效),DC将使用真实时钟路径上网路延迟进行分析(这也代表着它会忽略所有端口和引脚上定义的时钟延迟)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/635254
推荐阅读
相关标签
  

闽ICP备14008679号