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

📅 2026/7/5 16:50:39
SDC命令详解:使用set_dont_touch命令进行约束
相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录对象列表/集合dont_touch属性的影响Multicorner-Multimode支持简单使用set_dont_touch命令用于在单元、线网、设计或库单元上显式设置dont_touch属性以防止它们在优化过程中被修改其实它并不是一个SDC命令归为此类只是为了方便管理。如果想要移除dont_touch属性使用remove_attribute命令。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_ideal_network命令的BNF范式有关BNF范式可以参考以往文章为set_dont_touch object_list [true | false] //注该命令的true或false参数一定要放在object_list参数后对象列表/集合指定一个对象列表/集合包含单元对象、线网对象、设计对象或库单元对象。对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571dont_touch属性的影响1、当设置层次单元的dont_touch属性时其下的所有单元和线网都会被设置dont_touch属性需要注意的是此时的dont_touch属性是隐式设置的这与使用set_dont_touch命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令、report_net命令或report_dont_touch命令间接查看remove_attribute命令只能移除显式设置的dont_touch属性隐式dont_touch属性的优先级低于显式dont_touch属性使用list_dont_touch_types命令可以列出单元和线网被设置dont_touch属性的原因显式或隐式。2、当设置库单元的dont_touch属性时其所有实例单元都会被设置dont_touch属性需要注意的是此时的dont_touch属性是隐式设置的这与使用set_dont_touch命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令、report_net命令或report_dont_touch命令间接查看remove_attribute命令只能移除显式设置的dont_touch属性隐式dont_touch属性的优先级低于显式dont_touch属性使用list_dont_touch_types命令可以列出单元和线网被设置dont_touch属性的原因显式或隐式。3、当设置线网的dont_touch属性时其连接的同一层级的已映射组合逻辑叶单元都会被设置dont_touch属性需要注意的是此时的dont_touch属性是隐式设置的这与使用set_dont_touch命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令、report_net命令或report_dont_touch命令间接查看remove_attribute命令只能移除显式设置的dont_touch属性隐式dont_touch属性的优先级低于显式dont_touch属性使用list_dont_touch_types命令可以列出单元和线网被设置dont_touch属性的原因显式或隐式。如果该线网只连接到未映射单元则其不会影响未映射单元且可能在综合过程中被移除Design Compiler会对此发出OPT-461警告特殊情况下如果将enable_keep_signal_dt_net变量默认值为false设置为true则其连接的叶单元会被设置size_only属性即使是未映射或时序逻辑这可能会降低QoRDesign Compiler会对此发出OPT-154警告该功能主要用于验证目的不应用于追求最终QoR的流程。4、当设置设计的dont_touch属性时其所有实例单元都会被设置dont_touch属性需要注意的是此时的dont_touch属性是隐式设置的这与使用set_dont_touch命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令、report_net命令或report_dont_touch命令间接查看remove_attribute命令只能移除显式设置的dont_touch属性隐式dont_touch属性的优先级低于显式dont_touch属性使用list_dont_touch_types命令可以列出单元和线网被设置dont_touch属性的原因显式或隐式。该设置对顶层设计无效因为顶层不是被实例化的设计。5、如果通用时序单元SEQGEN或者称为Generic/Unmapped Sequential Cell被设置了dont_touch属性则其在综合过程中不会被映射除非将2024版本引入的compile_seqmap_enable_dont_touch_seqcell_mapping变量默认为false设置为trueGTECH格式或者说Generic Technology格式的组合逻辑单元上的dont_touch属性不影响其在综合过程中的映射。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为例说明set_dont_touch命令的使用。图1 简单的例子下面使用set_dont_touch命令设置线网b的dont_touch属性可以使用report_dont_touch命令报告所有的dont_touch属性设置情况如图2所示。dcnxt_shell set_dont_touch [get_nets b]图2 dont_touch报告从图2中可以看出因为u1是已映射单元因此其也被隐式设置了dont_touch属性。使用get_dont_touch_cells命令可以创建一个设置了dont_touch属性的单元对象集合并可过滤被设置dont_touch属性的原因。使用get_dont_touch_nets命令可以创建一个设置了dont_touch属性的线网对象集合并可过滤被设置dont_touch属性的原因。