SDC命令详解:使用set_dont_touch_network命令进行约束
相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录指定dont_touch网络源指定不传播dont_touch属性传播规则dont_touch网络的影响Multicorner-Multimode支持简单使用set_dont_touch_network命令可以将当前设计中的一组端口、引脚或时钟标记为dont_touch网络源设置端口、引脚或时钟对象的dont_touch_network属性为true且dont_touch属性会沿着组合逻辑进行传播其实它并不是一个SDC命令归为此类只是为了方便管理主要用于时钟路径以防止工具在优化过程中修改时钟树。如果想要移除dont_touch网络使用remove_attribute命令。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_dont_touch_network命令的BNF范式有关BNF范式可以参考以往文章为set_dont_touch_network objects [-no_propagate] //注该命令的选项和参数顺序任意指定dont_touch网络源指定一个对象列表/集合包含端口对象、引脚对象或时钟对象。对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571指定不传播-no_propagate选项指定dont_touch属性不会跨组合逻辑传播但仍然可以跨层次结构传播。默认情况下dont_touch属性会跨组合逻辑传播直到时序逻辑为止不会将时序逻辑标记为dont_touch。需要注意的是如果此时dont_touch网络源是叶单元的输入引脚则dont_touch属性可以跨该叶单元但无法跨后续的组合逻辑传播。dont_touch属性传播规则dont_touch属性的传播规则与set_ideal_network命令有所不同dont_touch网络源扇出中的所有单元和线网都会被设置dont_touch属性例如单元的一个输入引脚被设置为dont_touch网络源则该单元就会被标记为dont_touch如果是set_ideal_network命令则要求其所有输入引脚都被标记为理想。dont_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网络源是组合逻辑叶单元的输出引脚则该叶单元将被设置size_only属性这样可以确保dont_touch网络源不会在综合过程中被优化掉需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。3、如果使用-no_propagate选项则第一个被阻挡传播的组合逻辑叶单元将被设置size_only属性需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。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_network命令的使用。图1 简单的例子下面使用set_dont_touch_network命令设置端口a为dont_touch网络源可以使用get_attribute dont_touch_network命令确认一个对象是否是dont_touch网络源。dcnxt_shell set_dont_touch_network [get_ports a]下面使用report_dont_touch命令报告所有被设置为dont_touch属性的单元和线网如图2所示。dcnxt_shell report_dont_touch图2 dont_touch属性报告使用get_dont_touch_cells命令可以创建一个设置了dont_touch属性的单元对象集合并可过滤被设置dont_touch属性的原因。使用get_dont_touch_nets命令可以创建一个设置了dont_touch属性的线网对象集合并可过滤被设置dont_touch属性的原因。