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

📅 2026/8/27 13:10:47
SDC命令详解:使用set_false_path命令进行约束
相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录指定建立/保持时间检查指定上升/下降沿指定时序路径起点指定时序路径经过点指定时序路径终点删除虚假路径添加注释Multicorner-Multimode支持简单使用写在最后在之前的文章中我们讨论了如何使用set_case_analysis命令和set_disable_timing命令它们都能使时序弧失效本章我们将学习一个虽然不使时序弧失效但会影响时序路径的时序检查的命令——set_false_path就像前文中直接指定触发器data_out_reg的时钟引脚CK到数据引脚D的时序弧失效一样。set_false_path命令用于指定一条时序路径为虚假路径虚假路径是不需要满足任何时序要求的路径工具会忽略这种路径上的时序检查。如果想要移除虚假路径使用reset_path命令或-reset_path选项。它是一种点到点时序例外命令其他的点到点时序例外命令还有set_multicycle_path、set_max_delay、set_min_delay、set_path_margin。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_false_path命令的BNF范式有关BNF范式可以参考以往文章为set_false_path [-setup | -hold] [-rise | -fall] [-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] //注该命令的选项和参数顺序任意指定建立/保持时间检查-setup选项指定只设置时序路径为建立时间检查时的虚假路径只检查保持时间-hold选项指定只设置时序路径为保持时间检查时的虚假路径只检查建立时间。如果这两个选项都没有指定时序路径为建立时间和保持时间的虚假路径此时这两种时序都不检查相当于它们同时指定。指定上升/下降沿-rise选项指定只设置终点是上升沿的时序路径为虚假路径-fall选项指定只设置终点是下降沿的时序路径为虚假路径。如果这两个选项都没有指定时序路径为终点是上升沿和下降沿的虚假路径相当于它们同时指定。指定时序路径起点-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选项指定了时序路径的下降沿终点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的终点是以该时钟下降沿触发的触发器数据输入引脚对象可以是端口代表着时序路径的终点是该端口的下降沿对象可以是引脚代表着时序路径的终点是该引脚例如触发器数据输入引脚的下降沿对象可以是叶单元代表着时序路径的终点是该叶单元上的下降沿。注意如果对象列表/集合包含时钟则此时的上升、下降沿指的是时钟对象本身的上升、下降沿而不是到达各触发器时钟引脚的上升、下降沿这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转。size_only属性当指定的时序路径起点/经过点/终点包含组合逻辑叶单元的引脚则该引脚所属的叶单元会被设置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属性的原因显式或隐式。当指定的时序路径起点/经过点/终点包含组合逻辑叶单元时则其会被设置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属性的原因显式或隐式。删除虚假路径-reset_path选项移除了之前设置的虚假路径使用该选项时其它选项要和设置虚假路径时一样。添加注释-comment选项允许添加一条字符串注释工具会将注释保存在SDC对象中以便在使用write_sdc或write_script命令写出约束时输出准确的字符串。注释在综合、布局布线以及时序分析的流中中保持完整。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简单使用下面将通过具体实例加深印象首先来看图1所示的简单电路其中两个触发器分别受到两个时钟端口控制。图1 一个简单的例子首先使用下面的命令在输入端口clk1和clk2定义两个时钟。create_clock -period 10 [get_ports clk1] create_clock -period 15 [get_ports clk2]随后使用下面的命令在输入端口data_in定义输入延迟。set_input_delay 0.5 -clock clk1 [get_ports data_in]此时使用report_timing命令t_reg和data_out_reg以及端口data_in和t_reg之间的时序路径会正常报告如图2、图3、图4、图5所示本文如不加说明默认时序报告为建立时间报告。图2 时序报告输入端口上升沿图3 时序报告输入端口下降沿图4 时序报告触发器引脚输出上升沿图5 时序报告触发器引脚输出下降沿接着使用下面的命令将起点是输入端口data_in下降沿的所有数据路径设置为虚假路径可以使用report_timing_requirements报告设置的虚假路径如图6所示。set_false_path -fall_from [get_ports data_in]图6 时序例外报告此时的输入端口下降沿的时序报告如图7所示可以看出时序路径未约束可以将其与图3对比。图7 时序报告输入端口下降沿最后我们使用下面的命令设置时序路径的起点是clk1时钟终点是clk2时钟如图8所示注意这里如果使用-fall_from、-fall_to选项是没有意义的因为本例的触发器都是上升沿触发。set_false_path -from [get_clocks clk1] -to [get_clocks clk2]图8 时序例外报告此时两个触发器之间的所有时序路径都被设置为虚假路径工具不会检查其建立时间和保持时间如图9所示。图9 时序报告触发器引脚输出上升/下降沿写在最后set_false_path是一个点对点时序例外命令其他的点对点时序例外命令包括set_max_delay命令、set_min_delay命令和set_multicycle_path命令。它们之间可能产生冲突具体的解析规则可以查阅DC的手册。在实践中建议减少-through选项、-rise_through选项、-fall_through选项的使用因为它可能增加不必要的运行时间只在必要时使用它们。在实践中指定两个时钟域之间的时序路径为虚假路径路径时对象列表可以直接使用这两个时钟对象而不必使用繁杂的引脚列表这会增加运行时间。