news 2026/10/16 4:02:59

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

作者头像

张小明

前端开发工程师

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

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482


目录

指定负载值

指定对象列表/集合

简单使用

指定最大、最小条件

对于端口

对于线网

指定设置端口的引脚、互连负载

指定减去引脚负载

移除负载值

Multicorner-Multimode支持

写在最后


本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。

set_load命令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_load value object_list [-min][-max] [-pin_load] [-wire_load] [-subtract_pin_load] //注:该命令的objects参数一定要放在value参数后

指定负载值

指定要设置在端口或引脚的负载值。它的单位必须和工艺库中指定的负载单位一致,例如工艺库中使用了皮法,则该参数的单位也为皮法。

指定对象列表/集合

指定一个对象列表/集合,包含端口对象或线网对象。对于列表而言,如果有多于一个对象,需要使用引号或大括号包围(对使用集合无效),关于列表和集合的区别,可以参考下面的博客。

SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571

简单使用

以图1所示的电路图为例,首先在输入端口clk定义一个时钟。

dcnxt_shell> create_clock -period 10 [get_ports clk]

图1 一个简单的例子

下面使用set_wire_load_model命令为设计设置线负载模型。

dcnxt_shell> set_wire_load_model -name tsmc090_wl50 -library fast

下面使用set_load命令在输出端口q设置负载为0.4。

dcnxt_shell> set_load 0.4 [get_ports q]

对于端口上设置的负载,可以使用report_port -verbose命令查看,如图2所示。

图2 端口负载报告

可以看到输出端口q的引脚负载(Pin Load)为0.4,而互连负载(Wire Load)为0,这两者的差异在后面会说明。

使用report_net -connections -verbose [get_nets q]命令可以报告线网q相关的详细信息,如图3所示。

图3 线网q的详细信息报告(最大延迟)

需要注意的是,报告中出现了min和max字段是因为Design Compiler中默认开启了增强型引脚负载电容建模(timing_use_enhanced_capacitance_modeling变量默认为true),本文不涉及该内容因此报告中的min和max值始终相等,关于增强型引脚负载电容建模,可以参考下面的博客。

Design Compiler:增强型引脚负载电容建模(LoadUR、LoadUF、LoadLR、LoadLF)https://chenzhang.blog.csdn.net/article/details/156806751?spm=1001.2014.3001.5502图3报告中的信息是最大延迟下的,如果需要报告最小延迟下的信息,需要在使用report_net命令时添加-min选项,wire capacitance指的是线网的互连负载总量,这是累加了端口和线网的互连负载的结果,pin capacitance指的是线网的引脚负载总量,这是累加了端口和引脚的引脚负载的结果(无法直接设置),total capacitance指的是线网的负载总量,是累加了互连负载总量和引脚负载总量的结果(分别使用线网的total_capacitance_max和total_capacitance_min属性保存)。

指定最大、最小条件

对于端口

-max选项用于指定负载为最大延迟分析(一般情况下,如果不开启on_chip_variation,这指的是建立时间检查)设置,-min选项用于指定负载为于最小延迟分析(一般情况下,如果不开启on_chip_variation,这指的是保持时间检查)设置。

如果这两个选项都没有指定,引脚负载、互连负载只为最大延迟设置(就像是指定了-max选项那样,这与很多命令不同),但在最小延迟分析时如果没有设置引脚负载、互连负载则会使用最大延迟下的引脚负载、互连负载,反之不成立,在最大延迟分析时如果没有设置引脚负载、互连负载则会使用默认负载0。

对于端口而言,-max选项加-pin_load选项设置了端口的引脚负载(使用端口的load属性保存),-max选项加-wire_load选项设置了端口的互连负载(使用端口的wire_capacitance属性保存),-min选项加-pin_load选项设置了端口的引脚负载(使用端口的min_load属性保存),-min选项加-wire_load选项设置了端口的互连负载(使用端口的min_wire_capacitance属性保存)。

现在出现了一个问题,report_port命令并没有提供-min选项,如何得知端口的最小延迟下的负载设置情况呢?这时候就需要使用get_attribute命令直接获得端口上的属性,如下所示。

dcnxt_shell> get_attribute [get_ports q] load // 获取输出端口q上的max_pin_load属性 0.4 //这符合预期 dcnxt_shell> get_attribute [get_ports q] min_load // 获取输出端口q上的min_pin_load属性 Warning: Attribute 'min_load' does not exist on port 'q'. (UID-101) // 这也符合预期,当-min、-max都不指定时,默认只设置最大延迟下的负载

使用report_net -connections -verbose -min [get_nets q]命令可以报告线网q相关的最小延迟下的详细信息,如图4所示。

图4 线网q的详细信息报告(最小延迟)

从图4中可以看到,尽管没有设置端口q在最小延迟下的引脚负载,但Design Compiler使用了其在最大延迟下的引脚负载0.4。

下面使用set_load命令明确设置输出端口q在最小延迟下的引脚负载。

dcnxt_shell> set_load 0.6 -min [get_ports q]

此时使用get_attribute [get_ports q] min_load命令可以得到结果0.6,而线网q相关的最小延迟下的详细信息报告如图5所示。

图5 线网q的详细信息报告(最小延迟)

对于线网

-max选项用于指定负载为最大延迟分析(一般情况下,如果不开启on_chip_variation,这指的是建立时间检查)设置,-min选项用于指定负载为于最小延迟分析(一般情况下,如果不开启on_chip_variation,这指的是保持时间检查)设置。

如果这两个选项都没有指定,互连负载同时为最大、最小延迟分析设置(相当于它们同时指定);如果仅指定了-min选项,但此时最大延迟下的互连负载尚未设置,则命令同时会设置最大延迟下的互连负载;如果仅指定了-max选项,但此时最小延迟下的互连负载尚未设置,则命令同时会设置最大延迟下的互连负载。

对于线网而言,-max选项设置了线网的互连负载(使用线网的load属性和wire_capacitance_max属性保存),-min选项设置了线网的互连负载(使用线网的min_load属性和wire_capacitance_min属性保存)。

下面使用set_load命令设置线网q在最小延迟下的互连负载,假设此时尚未指定最大延迟下的互连负载,线网q相关的最大、最小延迟下的详细信息报告如图6、图7所示。

dcnxt_shell> set_load 0.1 -min [get_nets q]

图6 线网q的详细信息报告(最小延迟)

图7 线网q的详细信息报告(最大延迟)

可以看到,即使set_load命令仅仅使用了-min选项,但最大延迟下的互连负载也被设置了(再次强调,这仅限于某一个条件下的互连负载尚未设置时)。另外从图6、图7中的互连负载可以看出,直接使用set_load设置线网的互连负载会覆盖使用线负载模型(非拓扑模式)或虚拟布线(拓扑模式)得出的互连负载。

指定设置端口的引脚、互连负载

对于线网而言,只能使用set_load命令设置互连负载而不能设置引脚负载(线网的引脚负载总量是累加得到的);对于端口而言,既能使用set_load命令设置互连负载,也能设置引脚负载,这是由-pin_load和-wire_load选项指定的。

如果这两个选项都没有指定,默认设置引脚负载;如果同时指定这两个选项,设置引脚负载、互连负载。

端口上的互连负载会被累加到与端口连接的线网的互连负载总量之中,注意这里在进行端口的互连负载的设置时,如果只设置了最大延迟下的互连负载,最小延迟分析时会使用最大延迟下的互连负载,这对端口的引脚负载、互联负载都成立。

首先使用reset_design命令复位设计,便于下面的实验,接着使用set_load命令设置输出端口q在最大延迟下的引脚负载、互连负载,如图8所示。

dcnxt_shell> reset_design dcnxt_shell> set_load -pin_load -max 0.4 [get_ports q] dcnxt_shell> set_load -wire_load -max 0.5 [get_ports q]

图8 端口负载报告

接着查看线网q相关的最大、最小延迟下的详细信息报告,如图9、图10所示。

图9 线网q的详细信息报告(最小延迟)

图10 线网q的详细信息报告(最大延迟)

可以看到,尽管只设置了输出端口q在最大延迟下的引脚负载、互连负载,最小延迟下的引脚负载、互连负载也被累加进线网q的引脚负载总量、互连负载总量了。

下面使用set_load命令设置线网q在最大延迟下的互连负载,结果如图11、图12所示,可以看到,最大、最小延迟下线网的互连负载都被累加进互连负载总量了。

dcnxt_shell> set_load 1 [get_nets q]

图11 线网q的详细信息报告(最小延迟)

图12 线网q的详细信息报告(最大延迟)

指定减去引脚负载

-subtract_pin_load选项指定了在设置线网的互连负载时,该互连负载会首先先减去线网上的引脚负载总量。例如使用下面的命令,则互连负载在设置前会被减去引脚负载总量0.4,如图12所示。

dcnxt_shell> set_load 1 -subtract_pin_load [get_nets q]

图12 线网q的详细信息报告(最小延迟)

从图中可以看出,负载总量为1-0.4+0.5+0.4=1.5,这符合预期结果。该选项主要用于避免某些情况下引脚负载被重复指定两次。

移除负载值

如果想要移除之前设置的各种负载,需要使用remove_attribute命令或remove_capacitance命令(对于PrimeTime,只能使用remove_capacitance命令),这时需要使用具体的属性名作为参数,这也是为什么本文解释了各选项分别设置了哪些属性。

下面的命令移除了端口q上的最大延迟下的引脚负载(这里说是移除属性,实际上load属性还是会保留,并被设置为0,这与很多其他属性不一样)。

dcnxt_shell> remove_attribute [get_ports d] load

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

写在最后

set_load命令的设置规则较为复杂,需要熟悉线网的互连负载、互连负载总量、引脚负载总量、负载总量与端口的互连负载、引脚负载这几个概念之间的区别与联系。

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

cert-manager 与 ACME DNS01 实现 Kubernetes 证书全自动管理

某天凌晨三点,手机告警群突然炸了——某个生产集群的Kubernetes Ingress证书过期,所有HTTPS访问全部报错,浏览器里那个刺眼的“不安全”提示持续了整整二十分钟。也是从那次之后,我彻底把 cert-manager 配合 ACME DNS01 挑战这套自…

作者头像 李华
网站建设 2026/10/16 4:02:50

MFC中CListCtrl数据导出Excel:二进制写入方案与避坑指南

简介:这份资源面向使用 MFC 进行桌面开发的程序员,聚焦于将 CListCtrl 控件中的列表数据导出到 Excel 表格这一常见需求。内容围绕 COM 自动化接口展开,涵盖 Excel 应用程序对象创建、工作簿与工作表操作、逐行逐列读取 ListCtrl 单元格数据并…

作者头像 李华
网站建设 2026/10/16 4:02:08

用WorkBuddy把散装资料变成可直接授课的教案和PPT:一条实战工作流

上周接到一门企业内训课,主题是《数据分析入门——数据清洗与可视化》,学员是 40 多名刚入职的非技术岗员工,课时只有 90 分钟。最让我头疼的不是讲课本身,而是开课前一天晚上,我盯着电脑里的"课程资料"文件…

作者头像 李华
网站建设 2026/10/16 4:01:18

JSP+Session购物车案例:不登录不依赖数据库实现跨请求购物车

简介:这份购物车案例【简单版】面向Java Web初学者与课程设计需求者,用JSP、Servlet、Tomcat、Session与数据库搭建了一个可运行的电商购物车最小闭环,帮助理解从商品展示、加入购物车到状态保持的完整请求链路。压缩包共62个文件&#xff0c…

作者头像 李华
网站建设 2026/10/16 4:00:48

内网离线安装Docker与Docker Compose实战指南

简介:这份资源面向需要在无外网环境下部署容器服务的内网运维与开发人员,提供一套完整的离线安装方案,解决服务器无法访问公网、依赖缺失导致 Docker 与 Docker Compose 装不上的问题。压缩包共 22 个文件,约 120.91MB&#xff0c…

作者头像 李华
网站建设 2026/10/16 3:59:57

字节码指令全解析:从javap到JVM性能调优实战

调试线上问题的时候,我习惯先看一眼javap -c的输出。这不是强迫症,而是很多看起来玄乎的性能问题,最后都能在字节码指令这一层找到最原始的答案。class 文件里的字节码指令,是 Java 源码和 JVM 运行时之间的桥梁,也是 …

作者头像 李华