相关阅读
SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482
目录
简单使用
写在最后
set_logic_dc命令可以设置当前设计中的输入端口为不关心(设置输入端口的driven_by_dont_care属性为true),该输入端口在综合是可以被赋予任何信号,包括但不限于1或0以简化逻辑。如果使用了set_logic_dc命令,不能对同一个输入端口对象使用set_logic_one命令和set_logic_zero命令。如果想要移除不关心的输入端口,使用remove_attribute命令。
本文针对Design Compiler,但该命令同样存在于IC Compiler等工具中。set_logic_dc命令的BNF范式(有关BNF范式,可以参考以往文章)为:
set_logic_dc port_list该命令对所有场景生效。
关于场景的更多介绍,可以参考下面的博客。
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%257D&request_id=e3267dcc7cc26380435f53994dc8b9b8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-149578771-null-null.nonecase&utm_term=MCMM&spm=1018.2226.3001.4450
简单使用
下面以图1为例说明set_logic_dc命令的使用。
图1 布尔表达式SA+S'B
如果直接进行综合,结果如图2所示。
图2 直接综合结果
使用set_logic_dc命令后再综合,结果如图3所示。
dc_shell> set_logic_dc [get_ports A]图3 设置输入端口不关心后综合结果
图3中的输入端口A悬空,不驱动任何逻辑,这是set_logic_dc命令、set_logic_one命令和set_logic_zero命令的结果。
需要注意的是,此命令不能用于输出端口,若要指定未连接的输出端口,使用set_unconnected命令。
写在最后
理想情况下,对于SA+S'B的最佳优化应该是令输入端口A连接到输入端口B而不是1或0,此时化简后为B,如图4所示。但是真实的综合结果却不是这样(即使笔者尝试了加严约束等方法,依旧无法综合出想要的结果,疑似为bug)。
图4 设置输入端口不关心后综合结果(理想)
set_logic_dc命令可以直接影响综合,而set_case_analysis命令只能间接影响综合。顺带一提,常量是否能跨层次传播并直接影响综合可以由一些变量控制,具体可以参考下面的博客。
Design Compiler:边界优化(Boundary Optimization)https://blog.csdn.net/weixin_45791458/article/details/145666047?ops_request_misc=elastic_search_misc&request_id=23da72e4da13338190b465b95a415693&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-1-145666047-null-null.541^v3^pc_search_result_blog1&utm_term=%E8%BE%B9%E7%95%8C%E4%BC%98%E5%8C%96&spm=1018.2226.3001.4450关于Design Compiler中常量触发器移除的更多细节,可以参考下面的博客。
Design Compiler:常量触发器的移除https://blog.csdn.net/weixin_45791458/article/details/157099522?ops_request_misc=elastic_search_misc&request_id=8c25ae511a94a255e625223ccd11f147&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-2-157099522-null-null.541^v3^pc_search_result_blog1&utm_term=%E5%B8%B8%E9%87%8F%E4%BC%A0%E6%92%AD&spm=1018.2226.3001.4450
该约束只对当前设计生效(因为只有当前设计有端口的概念),且propagate_constraints命令对该约束无效,即无法将子设计的输入端口约束传播到顶层设计。