静态时序分析:SDC约束命令set_load详解

相关阅读

静态时序分析icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


        set_load命令用于指定端口(port)或线网(net)的负载电容,该指令的BNF范式(有关BNF范式,可以参考以往文章)为:

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

目录

指定负载值

指定对象列表

简单使用

指定最大、最小条件

对于端口

对于线网

指定引脚、线负载

指定减去引脚负载

移除负载值

写在最后


指定负载值

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

指定对象列表

        指定一个对象列表,包含端口对象或线网对象,如果有多于一个对象,需要使用引号或大括号包围。

简单使用

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

create_clock -period 10 [get_port clk]

图1 一个简单的例子

        接着在输入端口d、c,输出端口q上分别定义三个输入延迟,参考时钟为clk。

set_input_delay 0.5 -clock clk [get_port d]
set_input_delay 0.5 -clock clk [get_port c]
set_output_delay 0.5 -clock clk [get_port q]

       使用下面的命令为设计指定线负载模型。

set_wire_load_model -name tsmc13_wl50 -library typical

        下面使用set_load命令在输出端口q指定负载值0.4。

set_load 0.4 [get_port q]

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

图2 端口负载报告

        可以看到输出端口q的引脚负载(pin load)为0.4,而线网负载(wire load)为0。(从图2中也能看出,端口默认拥有pin load(max)和wire load(max)属性以及默认值0),这两者的差异在后面会说明。

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

图3 线网q信息报告(最大条件)

        需要注意的是,报告中的min和max应该是显示bug,实际上报告的信息都是最大条件(max)下的,如果需要报告最小条件下的信息,需要添加-min选项。图中的wire capacitance指的是线网负载总量,这是累计了端口和线网的线网负载的结果,图中的pin capacitance指的是引脚负载总量,这是累积了端口和引脚的引脚负载的结果。图中的total capacitance指的是负载总量,是线网负载总量加上引脚负载总量的结果。

指定最大、最小条件

对于端口

        -max选项用于指定负载值为最大条件(建立时间分析)设置,-min选项用于指定负载值为于最小条件(保持时间分析)设置。如果这两个选项都没有指定,负载值只为最大条件设置(就像是指定了-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命令直接获得端口上的属性,如下所示。

get_attribute [get_port q] load     //获取输出端口q上的max_pin_load
0.4                                 //这符合预期
get_attribute [get_port q] min_load //获取输出端口q上的min_pin_load
//这也符合预期,我们说了当-min、-max都不指定时,默认只设置最大条件的负载值
Warning: Attribute 'min_load' does not exist on port 'q'. (UID-101)

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

图4 线网q信息报告(最小条件)

         从图4中可以看到,尽管没有设置端口q在最小条件下的负载值,但DC使用了最大条件下的负载值。

        下面使用set_load命令在输出端口q明确指定最小条件的负载值0.6。

set_load 0.6 -min [get_port q]

        此时使用命令get_attribute [get_port q] min_load可以得到结果0.6,而线网q最小条件下的信息报告如图5所示。

图5 线网q信息报告(最小条件)

对于线网

        -max选项用于指定负载值为最大条件(建立时间分析)设置,-min选项用于指定负载值为于最小条件(保持时间分析)设置。如果这两个选项都没有指定,负载值同时为最大条件和最小条件设置(相当于它们同时指定)。如果使用命令时仅指定了-min选项,但此时最大条件情况下的线网负载尚未设置,则命令同时会设置最大条件的线网负载;如果使用命令时仅指定了-max选项,但此时最小条件情况下的线网负载尚未设置,则命令同时会设置最大条件的线网负载。

        对于线网而言,-max选项设置了wire_capacitance_max属性,-min选项设置了wire_capacitance_min属性。

        如下所示的命令指定了线网q在最小条件下的线网负载(对于线网而言,只能使用命令指定线网负载,而不能指定引脚负载(线网的引脚负载总量是累计得到的);对于端口而言,既能使用命令指定线网负载,也能指定引脚负载)。假设此时尚未指定最大条件的线网负载,则结果如图6、图7所示。

set_load 0.1 -min [get_net q]

 图6 线网q信息报告(最小条件)

图7 线网q信息报告(最大条件) 

        可以看到,命令仅仅使用了-min选项,但最大条件依然被设置了(再次强调,这仅限于某一个条件下的线网负载尚未设置时)。另外从图中的线网负载总量可以看出,直接使用set_load指定线网负载会覆盖使用线负载模型得出的线网负载

指定引脚、线负载

        上面说到,端口可以指定引脚负载线网负载,这是由-pin_load和-wire_load选项指定的,当两者都不指定时,默认指定引脚负载;当两者都指定时,负载值同时设置为引脚负载线网负载

        端口上的线网负载会被累加到与端口连接的线网的线网负载总量之中,注意这里在进行端口的线网负载的设置时,“对于端口”小节中红字相关的描述也成立,即如只设置了最大条件下的线网负载,最小条件分析时会使用最大条件下的线网负载

        我们首先使用 reset_design命令复位设计,便于下面的实验。下面使用set_load命令在输出端口q指定引脚负载值0.4,线网负载值0.5,如图8所示。(注意,这里两者都默认只设置了最大条件)

set_load 0.4 -pin_load [get_port q]
set_load 0.5 -wire_load [get_port q]

图8 端口负载报告

        接着我们查看线网q在最大条件和最小条件下的负载信息,如图9、图10所示。

图9 线网q信息报告(最小条件)

 图10 线网q信息报告(最大条件)

        可以看到,尽管我们只设置了端口最大条件下的引脚负载线网负载,即只设置了端口q的load和wire_capacitance属性,最小条件的引脚负载线网负载也被累计进线网q的引脚负载总量线网负载总量了(但注意,此时线网q的wire_capacitance_max和wire_capacitance_min属性尚未设置)。

        使用下面的命令设置线网q在最大条件下的线网负载,如图11、图12所示。

set_load 1 [get_net q]

图11 线网q信息报告(最小条件)

图12 线网q信息报告(最大条件)

        可以看到,最大、最小条件下线网的线网负载都被累计进线网负载总量了,这正如“对于线网” 小节中说的那样,当wire_capacitance_min属性尚未设置时,如果指定了-max选项设置了wire_capacitance_max属性,则wire_capacitance_min属性也会一起被设置。

        -pin_load选项和-wire_load选项只能用于给端口对象指定负载值,这很好理解,因为给线网对象指定的负载值都是指线网负载,这没得选。

指定减去引脚负载

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

set_load 1 -subtract_pin_load [get_net q]

图12 线网q信息报告(最大、最小条件) 

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

移除负载值

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

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

remove_attribute [get_port d] load

写在最后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499521.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode :杨辉三角

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 思路:双循环,一个是层数,一个是当前数组的生成;两侧为1,需要边界判断条件…

【招生】江西师范大学—地质灾害研究团队—地理与环境学院/鄱阳湖流域实验室

【招生】江西师范大学—地质灾害研究团队—地理与环境学院/鄱阳湖流域实验室 研究方向:InSAR、极化SAR、GNSS、地球物理、GIS 招生专业:GIS、人文地理 学院地址:江西南昌江西师范大学

Docker 安装配置数据库

那么在安装之前小编给猿友们普及一下mysql的作用! MySQL是一个关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,现在属于Oracle旗下产品。它是世界上最流行的关系型数据库管理系统之一,尤其在WEB应…

解密犯罪时间 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 HH:MM 表示的时刻。 根据警察和线人的约定,为了隐蔽,该…

Java中几种常见的创建线程的方式

创建线程的几种方式 方法解释Thread()创建线程对象Thread(String name)创建线程对象,并给线程命名,不会影响线程Thread(Runnable runnable)使用Runnable对象创建线程Thread(Runnable runnable, String name)使用Runnable对象创建线程并给线程命名 方式…

AI论文速读 | 立场观点:时间序列分析,大模型能告诉我们什么?

题目:Position Paper: What Can Large Language Models Tell Us about Time Series Analysis 作者:Ming Jin ; Yifan Zhang ; Wei Chen ; Kexin Zhang ; Yuxuan Liang ; Bin Yang ; Jindong Wang ; Shirui Pan ; Qingsong Wen 机构:莫纳什大…

【C++】STL容器之string(修改操作)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

MYSQL学习笔记:索引

MYSQL学习笔记:索引 文章目录 MYSQL学习笔记:索引索引的分类索引的创建删除索引优化B树索引B树InnoDB主键和二级索引树聚集索引与非聚集索引哈希索引INNODB的自适应哈希索引索引和慢查询 用索引也是要涉及磁盘I/O的操作的索引也是一种数据结构&#xff0…

连续小波变换

1 连续小波变换 连续小波变换(CWT)用于分解小波信号。小波是时间上小的、高度局部的振荡。傅里叶变换将信号分解为无限长的正弦和余弦,从而丢失了所有时间位置信息,而CWT 的基本功能是时间局部化父小波的缩放和移位版本。CWT 用于构建信号的时频表示&am…

LeetCode225. 用队列实现栈(C++)

LeetCode225. 用队列实现栈 题目链接代码 题目链接 https://leetcode.cn/problems/implement-stack-using-queues/description/ 代码 class MyStack { public:queue<int> q1;queue<int> q2;MyStack() {}void push(int x) {q1.push(x);}int pop() {int size q1…

45、WEB攻防——通用漏洞PHP反序列化POP链构造魔术方法原生类

文章目录 序列化&#xff1a;将java、php等代码中的对象转化为数组或字符串等格式。代表函数serialize()&#xff0c;将一个对象转换成一个字符&#xff1b;反序列化&#xff1a;将数组或字符串等格式还成对象。代表函数unserialize()&#xff0c;将字符串还原成一个对象。 P…

配置前端项目到 github-pages

Quickstart for GitHub Pages - GitHub Docs