SDC命令详解:使用set_multicycle_path命令进行约束

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482


目录

        指定多周期值

        指定建立/保持时间检查

        指定上升/下降沿

        指定起点或终点

        指定时序路径起点

        指定时序路径经过点

        指定时序路径终点

        删除多周期路径

        添加注释

        单周期时序分析

        多周期时序分析


        本章将继续上章的步伐,讨论第二个点到点时序时序例外命令set_multicycle_path,它能改变默认的单周期时序路径分析模式,这会影响时序路径的建立/保持时间的检查方式。它是一种点到点时序例外命令,其他的点到点时序例外命令还有set_fasle_path、set_max_delay、set_min_delay、set_path_margin。如果想要移除多周期时序路径,使用reset_path命令或-reset_path选项。

        本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。set_multicycle_path命令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_multicycle_path
    path_multiplier
    [-setup | -hold] [-rise | -fall] [-start | -end]
    [-from from_list | -rise_from rise_from_list | -fall_from fall_from_list]
    [-through through_list] [-rise_through rise_through_list] [-fall_through fall_through_list]
    [-to to_list | -rise_to rise_to_list | -fall_to fall_to_list]
    [-reset_path] [-comment comment_string]
    //注:该命令的选项和参数顺序任意

指定多周期值

        参数path_multiplier指定了多周期路径的周期值,它会改变默认的发射/捕获时钟沿检查组合。对建立时间检查的多周期值设定也会影响保持时间检查,后面会进行详细说明。一般情况下,它是一个正数(表示放松时序),但是在某些特殊情况的约束中,会出现多周期值为负数的情况,例如源同步接口。

指定建立/保持时间检查

        -setup选项指定多周期值为建立时间设置,-hold选项指定多周期值为建立时间设置。如果这两个选项都没有指定,默认多周期值为建立时间设置,且设置保持时间的多周期值为0(无任何影响)。如果这两个选项都指定了,相当于多周期值同时为建立时间和保持设置,并为保持时间设置end属性(当设置了-start选项时,以其为准)。

指定上升/下降沿

        -rise选项指定只设置终点是上升沿的时序路径为多周期路径,-fall选项指定只设置终点是下降沿的时序路径为多周期路径。如果这两个选项都没有指定,时序路径为终点是上升沿和下降沿的多周期路径(相当于它们同时指定)。

指定起点或终点

        -start选项指定多周期值是对发射时钟沿起作用(设置start属性),-end选项指定多周期值是对捕获时钟沿起作用(设置end属性)。对于建立时间,默认多周期值是对捕获时钟沿起作用;对于保持时间,默认多周期值是对发射时钟沿起作用。

指定时序路径起点

        -from选项、-rise_from选项、-fall_from选项指定了需要设置为多周期路径的时序路径的起点列表,每条命令中它们三者中只能指定一个。

        -from选项指定了时序路径的起点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的起点是以该时钟触发的触发器时钟引脚;对象可以是端口,代表着时序路径的起点是该端口;对象可以是引脚,代表着时序路径的起点是该引脚(例如触发器时钟引脚);对象可以是单元,代表着时序路径的起点在该单元上(例如该单元时钟引脚)。

        -rise_from选项指定了时序路径的上升沿起点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的起点是所有以该时钟上升沿触发的触发器时钟引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号上升沿为准);对象可以是端口,代表着时序路径的起点是该端口的上升沿;对象可以是引脚,代表着时序路径的起点是该引脚(例如触发器时钟引脚)的上升沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元时钟引脚)的上升沿。

        -fall_from选项指定了时序路径的下降沿起点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的起点是所有以该时钟下降沿触发的触发器时钟引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号下降沿为准);对象可以是端口,代表着时序路径的起点是该端口的下降沿;对象可以是引脚,代表着时序路径的起点是该引脚(例如触发器时钟引脚)的下降沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元时钟引脚)的下降沿。

指定时序路径经过点

        -through选项、-rise_through选项、-fall_through选项需要设置为多周期路径的时序路径的途经点列表,这三个选项可以指定多个并可以以混合使用,表示依次途径每个列表中的一个对象的时序路径。

         -through选项指定了时序路径的途径点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是端口,代表着时序路径途径该端口;对象可以是引脚,代表着时序路径途径该引脚;对象可以是叶单元(库单元),代表着时序路径途径该单元。

        -rise_through选项指定了时序路径的上升沿途径点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是端口,代表着时序路径的上升沿途径该端口;对象可以是引脚,代表着时序路径的上升沿途径该引脚;对象可以是叶单元(库单元),代表着时序路径的上升沿途径该单元。

        -fall_through选项指定了时序路径的下降沿途径点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是端口,代表着时序路径的下降沿途径该端口;对象可以是引脚,代表着时序路径的下降沿途径该引脚;对象可以是叶单元(库单元),代表着时序路径的下降沿途径该单元。

指定时序路径终点

        -to选项、-rise_to选项、-fall_to选项指定了需要设置为多周期路径的时序路径的终点列表,每条命令中它们三者只能指定一个,并且不能与-fall选项和-rise选项的指定冲突(如有),即如果指定了-fall选项,则只能指定-fall_to选项,因为没有时序路径的终点即是上升沿也是下降沿。

        -to选项指定了时序路径的终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟触发的触发器数据输入引脚;对象可以是端口,代表着时序路径的终点是该端口;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚);对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)。

        -rise_to选项指定了时序路径的上升沿终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟上升沿触发的触发器数据输入引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号上升沿为准);对象可以是端口,代表着时序路径的终点是该端口的上升沿;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚)的上升沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)的上升沿。

        -fall_to选项指定了时序路径的下降沿终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟下降沿触发的触发器数据输入引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号下降沿为准);对象可以是端口,代表着时序路径的终点是该端口的下降沿;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚)的下降沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)的下降沿。 

删除多周期路径

        -reset_path选项移除了之前设置的多周期路径,使用该选项时,其它选项要和设置多周期路径时一样。

添加注释

        -comment选项允许添加一条字符串注释,工具会将注释保存在SDC对象中,以便在使用write_sdc或write_script命令写出约束时输出准确的字符串。注释在综合、布局布线以及时序分析的流中中保持完整。

单周期时序分析

        在学习多周期命令前,我们需要先了解单周期时序路径分析的过程,下面将以一个简单的例子说明。

图1 一个简单的例子

        图1所示的简单电路中两个上升沿触发器分别受到两个时钟端口控制,首先使用下面的命令在输入端口clk1和clk2定义两个时钟。

create_clock -period 5 -waveform {0 2.5} [get_ports clk1]
create_clock -period 20 -waveform {0 10} [get_ports clk2]

        图2和图3分别是这两个时钟的波形图。

图2 时钟clk1波形

图3 时钟clk2波形

        在进行单周期的建立时序分析时,DC会选择选择最难满足建立时间要求的发射/捕获时钟沿组合,全部组合方式为:一个发射沿,和其后的第一个捕获沿(不重合)组合。例如对于图1中的发射时钟为clk1,捕获时钟为clk2的情况,组合可以是下面的这些情况。

  • 发射沿0ns、捕获沿20ns。
  • 发射沿5ns、捕获沿20ns。
  • 发射沿10ns、捕获沿20ns。
  • 发射沿15ns、捕获沿20ns。
  • 发射沿20ns、捕获沿40ns(这与发射沿0ns、捕获沿20ns在分析时一模一样)。
  • 发射沿25ns、捕获沿40ns(这与发射沿5ns、捕获沿20ns在分析时一模一样)。
  • 以此类推,等等....

        因此组合“发射沿15ns、捕获沿20ns”是最难满足的(有多种等效情况)。

        在进行单周期的保持时序分析时,DC会选择选择最难满足保持时间要求的捕获时钟沿组合,全部的组合方式为:一个发射沿,和其后的第一个捕获沿(不重合)前的一个捕获沿组合,因此可以很容易地通过建立时序分析的组合得出建立时序分析的保持。例如对于图1中的发射时钟为clk1,捕获时钟为clk2的情况,组合可以是下面的这些情况。

  • 发射沿0ns、捕获沿0ns。
  • 发射沿5ns、捕获沿0ns。
  • 发射沿10ns、捕获沿0ns。
  • 发射沿15ns、捕获沿0ns。
  • 发射沿20ns、捕获沿20ns(这与发射沿0ns、捕获沿0ns在分析时一模一样)。
  • 发射沿25ns、捕获沿20ns(这与发射沿5ns、捕获沿0ns在分析时一模一样)。
  • 以此类推,等等....

        因此组合“发射沿0ns、捕获沿0ns”是最难满足的(有多种等效情况)。 

        下面的图4和图5是这种情况下的建立时序报告和保持时序报告。 

图4 建立时序报告

图5 保持时序报告

多周期时序分析

        有时候,我们需要指定某些时序路径为多周期路径,这会改变上面提到的发射/捕获时钟沿组合方式。

        还是拿图1的电路为例,我们使用下面的命令指定从发射触发器t_reg的时钟引脚CK到捕获触发器data_out_reg的数据引脚D的时序路径为建立时间分析时的多周期路径,周期数为2,捕获时钟沿起作用,可以使用report_timing_requirements命令报告多周期路径,如图6所示。

set_multicycle_path 2 -from [get_pins t_reg/CK] -to [get_pins data_out_reg/D] -setup -end
#上面的命令中,-end选项是可以省略的

 图6 多周期路径报告

        这里顺带一提,如果不指定-setup,则保持时间的多周期值会被设置为0(无任何影响),如图7所示,它们是等效的。

图7 多周期路径报告

        建立保持时间的多周期值设置为2会导致原本的建立时间的发射/捕获时钟沿组合方式变为,一个发射沿,和其后的第二个捕获沿(不重合)组合(即将原来的捕获沿向后移动一个周期),如下所示。

  • 发射沿0ns、捕获沿40ns。
  • 发射沿5ns、捕获沿40ns。
  • 发射沿10ns、捕获沿40ns。
  • 发射沿15ns、捕获沿40ns。
  • 发射沿20ns、捕获沿60ns(这与发射沿0ns、捕获沿40ns在分析时一模一样)。
  • 发射沿25ns、捕获沿60ns(这与发射沿5ns、捕获沿40ns在分析时一模一样)。
  • 以此类推,等等....

        因此组合“发射沿15ns、捕获沿40ns”是最难满足的(有多种等效情况),图8是此时的建立时间时序报告。

图8 建立时间报告

        建立时间的多周期值设置为2还会影响原本的保持时间的发射/捕获时钟沿(这是因为保持时间的检查方式是由建立时间的检查方式为基础导出的),组合方式变为,一个发射沿,和其后的第一个捕获沿(不重合)组合(多周期建立时间检查的捕获沿的前一个沿),如下所示。

  • 发射沿0ns、捕获沿20ns。
  • 发射沿5ns、捕获沿20ns。
  • 发射沿10ns、捕获沿20ns。
  • 发射沿15ns、捕获沿20ns。
  • 发射沿20ns、捕获沿40ns(这与发射沿0ns、捕获沿20ns在分析时一模一样)。
  • 发射沿25ns、捕获沿40ns(这与发射沿5ns、捕获沿20ns在分析时一模一样)。
  • 以此类推,等等....

        因此组合“发射沿0ns、捕获沿20ns”是最难满足的(有多种等效情况),图9是此时的保持时间时序报告,图中选择了等效组合“发射沿20ns、捕获沿40ns”。

图9 保持时间报告

        接着我们使用下面的命令指定从发射触发器t_reg的时钟引脚CK到捕获触发器data_out_reg的数据引脚D的时序路径为保持时间分析时的多周期路径,周期数为1,发射时钟沿起作用,可以使用report_timing_requirements命令报告多周期路径,如图10所示。 

set_multicycle_path 1 -from [get_pins t_reg/CK] -to [get_pins data_out_reg/D] -hold -start
#上面的命令中,-start选项是可以省略的

 图10 多周期路径报告

        保持时间的多周期值设置为1,导致在原本的保持时间的发射/捕获时钟沿组合方式(以被建立时间多周期影响后)基础上,发射沿又往后移动了一个周期,即一个发射沿和其前一个发射沿的后一个捕获沿组合,如下所示。

  • 发射沿5ns、捕获沿20ns。
  • 发射沿10ns、捕获沿20ns。
  • 发射沿15ns、捕获沿20ns。
  • 发射沿20ns、捕获沿20ns。
  • 发射沿25ns、捕获沿40ns(这与发射沿5ns、捕获沿20ns在分析时一模一样)。
  • 发射沿30ns、捕获沿40ns(这与发射沿10ns、捕获沿20ns在分析时一模一样)。
  • 以此类推,等等....

        因此组合“发射沿5ns、捕获沿20ns”是最难满足的(有多种等效情况),图11是此时的保持时间时序报告,图中选择了等效组合“发射沿25ns、捕获沿40ns”。

图11 保持时间报告

        当然也可以不使用默认情况,即在指定建立时间分析的多周期值时使用-start选项,此时会向前移动发射沿(对于默认情况下(或指定-end选项)是向后移动捕获沿);在指定保持时间分析的多周期值时使用-end选项,此时会向前移动捕获沿(对于默认情况下(或指定-start选项)是向后移动发射沿)。总之,一个正的多周期值会导致建立时间和保持时间的检查更为宽松;反之,一个负的多周期值会导致建立时间和保持时间的检查更为严格。另外要注意的是,对于建立时间的多周期值N指的是移动N-1个周期,而对于保持时间的多周期值N指的是移动N个周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日晨难再

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值