news 2026/8/24 8:17:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SDC命令详解:使用set_max_transition命令进行约束

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.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/147144571

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%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所示的电路图为例,逻辑库中使用库属性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.5=0.03。

图4 最大转换时间约束(违例)

写在最后

1、如果同时在时钟对象、端口对象和设计对象上设置了最大转换时间,Design Compiler在计算时会选择最严格的最大转换时间。

2、计算线网是否满足最大转换时间时,只会选择最大条件下线网的转换时间而不会考虑最小条件下线网的转换时间。

3、如果使用了增强型引脚负载电容建模,则以考虑库引脚属性capacitance的负载总量为准,即使用report_cell命令时显示的Load,而不是LoadUR或LoadUF,关于增强型引脚负载电容建模,可以参考下面的博客。

Design Compiler:增强型引脚负载电容建模(LoadUR、LoadUF、LoadLR、LoadLF)https://blog.csdn.net/weixin_45791458/article/details/156806751?sharetype=blogdetail&sharerId=156806751&sharerefer=PC&sharesource=weixin_45791458&spm=1011.2480.3001.8118

4、对于时钟信号等特殊信号,其设计规则约束不会被检查,具体可见下面的博客。

Design Compiler:时钟树等高扇出信号在综合时的特性https://blog.csdn.net/weixin_45791458/article/details/154489915?ops_request_misc=elastic_search_misc&request_id=e753ed6a1950984ee7d9bfa2a99ce736&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-1-154489915-null-null.541^v3^control&utm_term=%E6%97%B6%E9%92%9F%E6%A0%91&spm=1018.2226.3001.4450

5、如果指定的对象为输入端口,则该约束只对当前设计生效(因为只有当前设计有端口的概念)。propagate_constraints命令对该约束无效,即无法将子设计的最大转换时间约束传播到顶层设计。

6、如果指定的对象为时钟,则该约束只对当前设计生效。propagate_constraints命令对该约束无效,即无法将子设计的最大转换时间约束传播到顶层设计。

7、当设置设计对象的max_transition属性时,即使其所有实例单元都会被设置max_transition属性(需要注意的是,此时的max_transition属性是显式继承设置的,如Synopsys:设计对象是什么一文所说),但该约束在顶层设计并不生效(即只有顶层设计的max_transition属性生效)。propagate_constraints命令对该约束无效,即无法将子设计的最大转换时间约束传播到顶层设计。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 8:16:40

AI代码助手静默语义失败:成因剖析与防御实践指南

1. 项目概述:当代码助手“自信地”犯错“Confident and Wrong: Silent Semantic Failures in Coding Agents”,这个标题精准地戳中了当前AI编程助手(如GitHub Copilot、Amazon CodeWhisperer、Cursor等)使用体验中一个令人不安却又…

作者头像 李华
网站建设 2026/8/24 8:16:32

DeepResearch-9K:AI智能体深度研究能力的标准化评估基准

1. 项目概述:为什么我们需要一个“深度研究”的基准测试?最近在AI研究圈子里,一个词被反复提及:Agent。无论是大厂发布会还是开源社区的新项目,似乎不提“智能体”就落伍了。但热闹归热闹,一个根本性的问题…

作者头像 李华
网站建设 2026/8/24 8:16:30

htop 主题定制:改 3 个开关,默认界面一眼看清谁在吃 CPU

htop 主题定制:改 3 个开关,默认界面一眼看清谁在吃 CPU 【免费下载链接】htop htop is an interactive text-mode process viewer for Unix systems. It aims to be a better top. 项目地址: https://gitcode.com/gh_mirrors/hto/htop 盯着默认 htop 盯了五分钟,还是分…

作者头像 李华
网站建设 2026/8/24 8:15:05

AI编码代理的“自信且错误”陷阱:静默语义失败与防御策略

1. 从一次“完美”的代码评审说起上周,团队里一位同事提交了一段代码,功能是解析一个复杂的JSON配置文件,并根据其中的字段动态生成一个数据校验规则。代码写得相当漂亮:结构清晰,变量命名规范,甚至还加了详…

作者头像 李华
网站建设 2026/8/24 8:13:38

应广PMS132B单片机入门:从寄存器操作到点灯实战

1. 从“点灯”开始:为什么选择应广PMS132B作为入门如果你刚接触单片机,或者是从51、STM32这类更“主流”的平台转过来,第一次听说“应广”这个名字,心里可能会犯嘀咕:这牌子靠谱吗?资料多吗?社区…

作者头像 李华