SDC命令详解:使用set_input_delay命令进行约束 相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录指定延迟值指定端口、引脚列表/集合指定参考时钟简单使用指定时钟下降沿指定参考端口、引脚包含源、网络延迟指定电平敏感指定上升、下降沿指定最大、最小条件指定不覆盖添加延迟Multicorner-Multimode支持本章将讨论使用set_input_delay命令对输入端口引脚的约束。首先需要说明的是在进行静态时序分析时任何一条时序路径都需要有约束约束指的是时序路径的起点发射触发器和终点捕获触发器都有时钟信号的控制对于典型时序路径而言。但是对于起点是输入端口引脚、终点是输出端口引脚的时序路径而言没有显然的发射触发器、捕获触发器因此需要使用set_input_delay命令进行约束。如果想要移除输入延迟使用remove_input_delay命令。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_input_delay命令的BNF范式有关BNF范式可以参考以往文章为set_input_delay delay_value port_pin_list [-reference_pin pin_port_name] [-clock clock_name] [-clock_fall] [-level_sensitive] [-network_latency_included] [-source_latency_included] [-rise] [-fall] [-max] [-min] [-add_delay] //注该命令的port_pin_list参数一定要放在delay_value参数后指定延迟值延迟值指的是输入端口引脚的数据相对参考时钟的延迟大小这个参考时钟触发了一个假象的外部发射触发器模拟了从发射触发器有效沿到达发射触发器到数据到达输入端口引脚的组合逻辑延迟提供了分析输入端口引脚到捕获触发器时序路径的依据。指定端口、引脚列表/集合port_pin_list指定了添加输入延迟的端口和引脚对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571如果指定的对象是一个叶单元的引脚则该引脚所属的叶单元会被设置size only属性确保其不会在综合过程中被优化掉需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看也无法使用查询命令的-filter选项过滤而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。这还会导致时序路径分割详见静态时序分析典型与非典型时序路径的约束详解一。一般情况下只会对输入端口添加输入延迟因此在本文中我们只考虑输入端口。指定参考时钟-clock选项指定了参考时钟它可以是一个虚拟时钟无源对象也可以是一个有源对象的时钟。一般都需要指定-clock选项例外情况可以是作为数据使用的时钟端口和传播时钟端口在此不进行详述用户可以自行尝试。简单使用在理解了上面三项后便可以使用简单的set_input_delay命令了以图1所示的简单D触发器为例。图1 D触发器的例子首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟。create_clock -period 10 [get_ports clk]我们可以首先看一下端口d到触发器的D引脚的时序报告如图2所示。图2 建立时间时序报告可以从报告中看到 由于输入端口d没有被时钟约束因此无法进行时序路径的建立时间分析报告的最后也显示了(Path is unconstrained)。接着我们使用set_input_delay命令在输入端口d上添加一个输入延迟参考时钟为clk此时的时序报告如图3所示。set_input_delay 0.5 -clock [get_clocks clk] [get_ports d]图3 建立时间时序报告可以从时序报告中看出d端口的input external delay此时拥有延迟值0.5。可以使用report_port -verbose命令报告端口延迟如图4所示。图4 输入端口延迟报告指定时钟下降沿-clock_fall选项指定了假象的外部发射触发器由下降沿触发。在默认情况下假象的外部发射触发器由上升沿触发如图3中的(rise edge)显示的那样。下面我们在输入端口c上添加一个输入延迟参考时钟为clk指定时钟下降沿如图5所示此时的时序报告如图6所示。set_input_delay 0.6 -clock_fall -clock [get_clocks clk] [get_ports c]图5 输入端口延迟报告图6 建立时间时序报告可以从图6中看出输入端口c此时受到时钟clk的下降沿约束。指定参考端口、引脚-reference_pin选项可以指定延迟的参考引脚它可以是一个叶单元引脚或端口从图3和图6中可以看出约束端口的参考时钟的clock network delay为0这是因为我们还没有给参考时钟设置任何延迟但如果使用了这个选项则clock network delay会包括参考时钟传播到参考引脚的延迟如果参考时钟是传播时钟则是源延迟加时钟传播到参考引脚的网络延迟如果参考时钟是理想时钟则是源延迟加指定的网络延迟这是默认的下面进行举例说明。我们给输入端口d设置一个参考端口clk参考时钟依然为clk并给时钟clk添加源延迟如图7所示注意其中的输入端口d关联的两个clk对象其中一个是时钟clk另一个是端口clk。此时的时序报告如图8所示。set_input_delay 0.7 -reference_pin [get_ports clk] -clock clk [get_ports d] set_clock_latency 0.1 -source [get_clocks clk]图7 输入端口延迟报告图8 建立时间时序报告可以看到此时的clock network delay包含了时钟clk的源延迟。最后需要注意的是-reference_pin选项不能和即将谈到的-network_latency_included和-source_latency_included选项一起使用。包含源、网络延迟默认情况下在进行端口的时序分析时参考时钟的延迟会被考虑进来。对于理想时钟延迟包括了源延迟和网络延迟对于传播时钟延迟只包括了源延迟下面对此举例说明。首先使用下面的命令设置时钟clk的网络延迟为0.05目前它拥有0.1源延迟和0.05网络延迟。set_clock_latency 0.05 [get_clocks clk]然后我们查看输入端口c的时序报告如图9所示。图9 建立时间时序报告从时序报告中可以看出clock network delay包含了时钟clk的源延迟0.1网络延迟0.05。下面我们使用-network_latency_included选项表示时钟的网络延迟已经被包含在delay_value中了则STA时就不会重复计算网络延迟如图10、图11所示。set_input_delay 0.6 -network_latency_included -clock [get_clocks clk] [get_ports c]图10 输入端口延迟报告图11 建立时间时序报告图11中展示的时序报告显示捕发射时钟的clock network delay只包含了时钟clk的源延迟而没有包含网络延迟。注意-network_latency_included选项只能对理想时钟使用因为默认情况下传播时钟的clock network delay只包含源延迟除非使用-reference_pin但-reference_pin不能与这两个选项一起使用。-source_latency_included选项与-network_latency_included选项的用法相似不同的是其对理想时钟和传播时钟都有用很好理解因为在任何情况下源延迟是两类时钟共有的。指定电平敏感-level_sensitive选项指定使用假象的外部发射锁存器这允许针对锁存器时序进行特殊的分析。如果不指定该选项则默认使用假象的外部发射触发器。指定上升、下降沿-rise选项用于指定延迟值作用于端口的上升沿、-fall选项用于指定延迟值作用于端口的下降沿。如果这两个选项都没有指定延迟同时作用于时钟的上升沿和下降沿相当于它们同时指定。下面的命令改变输入端口c的上升沿输入延迟为0.8如图12所示。此时的时序报告如图13所示。set_input_delay 0.8 -clock_fall -rise -clock [get_clocks clk] [get_ports c]图12 输入端口延迟报告图13 建立时间时序报告指定最大、最小条件-max选项用于指定延迟值作用于最大延迟分析一般情况下如果不开启on_chip_variation这指的是建立时间检查-min选项用于指定延迟值作用于最小延迟分析一般情况下如果不开启on_chip_variation这指的是保持时间检查。如果这两个选项都没有指定延迟同时作用于最大延迟和最小延迟分析相当于它们同时指定。下面的命令改变输入端口c的最大上升沿输入延迟为0.9最小上升沿输入延迟为0.5如图14所示。此时的建立、保持时序报告如图15、图16所示。set_input_delay 0.9 -max -clock_fall -rise -clock [get_clocks clk] [get_ports c] set_input_delay 0.5 -min -clock_fall -rise -clock [get_clocks clk] [get_ports c]图14 输入端口延迟报告图15 建立时间时序报告图16 保持时间时序报告指定不覆盖添加延迟-add_delay选项用于以不覆盖和自动推断的形式添加延迟下面将举例说明。假设如图17所示已经给输入端口c设置了最小条件的输入延迟现在如果再添加一个参考时钟为clk1的最小条件的上升沿的输入延迟则会出现图18所示的覆盖情况。图17输入端口延迟报告图18 延迟覆盖情况如果继续指定参考时钟为clk1的最小条件的下降沿的输入延迟则参考时钟为clk的输入延迟会被全部覆盖如图19所示。图19 延迟覆盖情况这不仅仅出现在不同时钟间就连相同时钟的不同触发沿是否指定clock_fall选项也会出现覆盖。如果使用-add_delay选项则图18、图19的覆盖情况消失如图20所示。图20 延迟不覆盖情况-add_delay选项还有一个作用是可以自动推断最差的延迟并覆盖。比如对于图21如果指定参考时钟为clk的最小条件的输入延迟为0.6并指定-add_delay则会被忽视因为0.6大于0.5这是一个更宽松的最小条件这是不使用-add_delay选项的命令所不具有的功能。Multicorner-Multimode支持该命令仅对当前场景生效换句话说只能在当前场景约束输入端口引脚。关于场景的更多介绍可以参考下面的博客。Design Compiler多工艺角和多工作模式(Multicorner-Multimode, MCMM)https://blog.csdn.net/weixin_45791458/article/details/149578771?ops_request_misc%257B%2522request%255Fid%2522%253A%2522e3267dcc7cc26380435f53994dc8b9b8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_ide3267dcc7cc26380435f53994dc8b9b8biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-149578771-null-null.nonecaseutm_termMCMMspm1018.2226.3001.4450