相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录指定最大转换时间值指定数据路径指定时钟路径指定对象列表/集合Multicorner-Multimode支持简单使用写在最后set_max_transition命令用于设置最大转换时间设置了对象的max_transition属性这是一种设计规则约束(Design Rule Constraint)Design Compiler在综合的门级优化阶段会尝试确保每个线网的转换时间不超过线网连接的所有引脚和端口上设置的最严格的最大转换时间优先级高于优化约束(Optimization Constraint)即可能以时序违例为代价修复设计规则违例。在逻辑库中可以使用库属性default_max_transition或库引脚属性max_transition优先级高于库属性指定最大转换时间输入/输出端口的最大转换时间默认为无穷大。需要注意的是set_max_transition命令只能比库属性或库引脚属性更严格如果设置的值更宽松更大则会被忽略。如果想要移除最大转换时间使用remove_attribute命令。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_max_transition命令的BNF范式有关BNF范式可以参考以往文章为set_max_transition transition_value [-data_path] [-clock_path] object_list //注该命令的object_list参数一定要放在transition_value参数后指定最大转换时间值transition_value是一个非负的转换时间代表了需要设置在对象上的最大转换时间它的单位要与工艺库中指定的时间单位一致。指定数据路径-data_path选项用于指定当对象列表中包含时钟对象时最大转换时间只会影响该时钟发射的数据路径中的引脚默认情况下如果对象列表中包含时钟对象会产生以下警告并同时影响数据路径和时钟路径。Warning:set_max_transition has been applied on clock objects without specifying -clock_path. Constraint will be considered by both clock network pins and data pins launched by that clock.(OPT-1029)指定时钟路径-clock_path选项用于指定当对象列表中包含时钟对象时最大转换时间只会影响该时钟发射的时钟路径中的引脚默认情况下如果对象列表中包含时钟对象会产生以下警告并同时影响数据路径和时钟路径。Warning:set_max_transition has been applied on clock objects without specifying -clock_path. Constraint will be considered by both clock network pins and data pins launched by that clock.(OPT-1029)指定对象列表/集合指定一个列表/集合包含时钟对象、端口对象或设计对象影响设计中的所有单元引脚和端口需要注意的是无法直接指定某个单元引脚的最大转换时间。对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571Multicorner-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所示的电路图为例逻辑库中使用库属性default_max_transition定义了最大转换时间为0.46而库单元CLKBUFX1的输出引脚定义了库引脚属性max_transition为0.8优先级更高。图1 简单的例子接着在输出端口b上定义输出负载。dc_shell set_load 0.1 [get_ports b]可以使用report_net [get_nets b] -transition_time命令查看线网b的转换时间如图2所示。图2 线网b的转换时间可以从图2中看出线网b的上升/下降转换时间都满足了库引脚属性的约束也可以使用report_constraint -max_transition命令查看此时设计的整体约束情况如图3所示。图3 最大转换时间约束满足下面使用set_max_transition命令设置输出端口b的最大转换时间为0.5此时对于线网b来说其需要满足的最大转换时间从0.8变成了0.5。dc_shell set_max_transition 0.5 [get_ports b]此时的整体约束情况如图4所示可以看出此时出现设计规则违例代价函数的值此时恰好为0.53-0.50.03。图4 最大转换时间约束违例写在最后1、如果同时在时钟对象、端口对象和设计对象上设置了最大转换时间Design Compiler在计算时会选择最严格的最大转换时间。2、计算线网是否满足最大转换时间时只会选择最大条件下线网的转换时间而不会考虑最小条件下线网的转换时间。3、如果使用了增强型引脚负载电容建模则以考虑库引脚属性capacitance的负载总量为准即使用report_cell命令时显示的Load而不是LoadUR或LoadUF关于增强型引脚负载电容建模可以参考下面的博客。Design Compiler增强型引脚负载电容建模LoadUR、LoadUF、LoadLR、LoadLFhttps://blog.csdn.net/weixin_45791458/article/details/156806751?sharetypeblogdetailsharerId156806751sharereferPCsharesourceweixin_45791458spm1011.2480.3001.81184、对于时钟信号等特殊信号其设计规则约束不会被检查具体可见下面的博客。Design Compiler时钟树等高扇出信号在综合时的特性https://blog.csdn.net/weixin_45791458/article/details/154489915?ops_request_miscelastic_search_miscrequest_ide753ed6a1950984ee7d9bfa2a99ce736biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-1-154489915-null-null.541^v3^controlutm_term%E6%97%B6%E9%92%9F%E6%A0%91spm1018.2226.3001.44505、如果指定的对象为输入端口则该约束只对当前设计生效因为只有当前设计有端口的概念。propagate_constraints命令对该约束无效即无法将子设计的最大转换时间约束传播到顶层设计。6、如果指定的对象为时钟则该约束只对当前设计生效。propagate_constraints命令对该约束无效即无法将子设计的最大转换时间约束传播到顶层设计。7、当设置设计对象的max_transition属性时即使其所有实例单元都会被设置max_transition属性需要注意的是此时的max_transition属性是显式继承设置的如Synopsys设计对象是什么一文所说但该约束在顶层设计并不生效即只有顶层设计的max_transition属性生效。propagate_constraints命令对该约束无效即无法将子设计的最大转换时间约束传播到顶层设计。