当前位置: 首页 > news >正文

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

相关阅读

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


目录

指定值

指定端口/引脚列表

简单使用


        set_case_analysis命令用于对电路进行特定模式的设定,例如对于一个工作在正常模式下的芯片,其扫描触发器的测试引脚应该设定为0;对于一个时钟选择器的选择引脚,在特定模式工作时应该为确定值。这个命令很有用,因为它可以帮助减少很多不必要的时序路径分析。

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

set_case_analysisvalue port_or_pin_list//注:该命令的port_or_pin_list参数一定要放在value参数后

        该命令可以指定端口或引脚处是恒定的1或0,或者端口或引脚处仅允许上升沿或下降沿。

指定值

        参数value指定了端口或引脚处的固定值或转换方向。对于固定值,它可以是1、0、one或zero。对于转换方向,它可以是rising、falling、rise或fall。

指定端口/引脚列表

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

简单使用

        本文仅讨论固定值的模式分析,这是多数情况下该命令的使用方式。

        首先我们可以解决静态时序分析:SDC约束命令create_clock详解一文中出现的时序路径混乱问题,原文的图7如本文图1所示,首先在输入端口clk_1和clk_2定义两个时钟。

create_clock -period 10 [get_port clk_1]
create_clock -period 15 [get_port clk_2]

图1 有两个时钟驱动的电路单元

        对于上面的电路,本意是b_reg触发器和c_reg触发器同时受时钟clk_1或时钟clk_2之一触发,但如果不使用set_case_analysis命令,在使用report_timing命令后会出现时钟clk_2和时钟clk_1之间的时序分析报告,如图2、图3所示,我们真正需要的是图4的时序报告(本文如不加说明,默认时序报告为建立时间报告)。

图2 发射时钟是clk_2,捕获时钟时clk_1

图3 发射时钟是clk_2,捕获时钟时clk_1

图4 发射时钟是clk_2,捕获时钟是clk_2

        下面我们使用set_case_analysis命令,固定选择端sel的信号为0,可以使用report_case_analysis命令查看指定的模式分析值,如图5所示。还可以使用report_disable_timing命令查看此时失效的时序弧,如图6所示,可以看到此时选择引脚S0到输出引脚Y的时序弧和输出引脚B到输出引脚Y的时序弧都失效了。此时的时序分析结果如图7和图8所示。

set_case_analysis 0 [get_port sel]

图5 模式分析报告

图6 失效时序弧报告

图7 发射时钟和捕获时钟都是clk_2

图8 发射时钟和捕获时钟都是clk_2

        下面我们使用set_case_analysis命令,固定选择端sel的信号为1,可以使用report_case_analysis命令查看指定的模式分析值,如图9所示,可以看到之前设置的0被更改为了1。还可以使用report_disable_timing命令查看此时失效的时序弧,如图10所示,可以看到此时选择引脚S0到输出引脚Y的时序弧和输出引脚A到输出引脚Y的时序弧都失效了。此时的时序分析结果如图11和图12所示。

set_case_analysis 1 [get_port sel]

图9 模式分析报告

图10 失效时序弧报告

图11 发射时钟和捕获时钟都是clk_1

图12 发射时钟和捕获时钟都是clk_1

        set_case_analysis命令还会导致设定的值沿着时序路径向后传播,从而打断某些时序路径(使这些路径不能出现信号翻转),例如对于图13所示的电路图。

图13 一个简单的例子

        首先在输入端口clk定义一个时钟。

create_clock -period 10 [get_port clk]

         此时如果直接使用report_timing命令,则t_reg和data_out_reg之间的时序路径会正常报告,如图14所示。

图14 两个触发器间的时序报告

        下面使用set_case_analysis命令固定使能信号enable为0,可以使用report_disable_timing命令查看此时失效的时序弧,如图15所示,我们发现,这和图10报告有所差异,按照之前的分析,此时应显示单元U4从输入引脚A和输入引脚B到输出引脚Y的时序弧失效,但图15却显示触发器data_out_reg从时钟引脚CK到输入引脚D的建立时间和保持时间时序弧失效了,这是因为DC检测到此时D引脚的值为固定值0,因此无需检测建立时间和保持时间。触发器t_reg和触发器data_out_reg之间的时序路径消失了(实际上,某点的固定值会使通过该点时序路径直接消失),如图16所示。

set_case_analysis 0 [get_port enable]

图15 失效时序弧报告

图16 两个触发器间的时序路径消失了

        图17所示的例子在与门U4后又添加了一个或门,这样的话,即使与门U1的输出固定为0,也不会传播到触发器data_out_reg的D引脚,此时使用set_case_analysis 0 [get_port enable]命令后的失效时序弧报告如图18所示,可以看到固定值0传播至或门U2输入,并使或门U2的输入到输出的时序弧失效了,这里没有明确给出U1的的输入到输出的时序弧失效,它们被包含在U2时序弧的失效中,报告只会列出传播终点的时序弧失效情况。如果此时使用set_case_analysis 0 [get_port enable_1]命令,则定值0会继续传播至触发器data_out_reg的D引脚,此时的失效时序弧报告就和图15一样了。

图17  定值0不会传播至触发器输入

图18 失效时序弧报告

        在编写Verilog代码时,直接将与门的一个输出引脚固定为0,这也会打断时序路径(假设电路没有被逻辑优化),如图19所示的电路图。

图19 编写代码时指定引脚值为0

        在图19中,我们设法使得某些器件不被优化掉,并构造了一个奇怪的电路图。此时在逻辑上讲,与门的输出是一个固定值0,使用report_disable_timing命令查看此时失效的时序弧,如图20所示,可以看到此时居然和图15的报告一模一样,这代表着DC正确识别了这种情况,并且从Flag栏的c也可以看出,此时DC按照模式分析的规则传播了这个固定值0。此时使用report_timing命令无法看到t_reg和data_out_reg之间的时序路径,如图21所示。

图20 失效时序弧报告

图21 两个触发器间的时序路径消失了

        但是我们再来看一下图22所示的电路图(假设电路没有被逻辑优化),可以看出按照逻辑关系,与门U2的输出是一个固定值0,但是此时使用report_timing命令可以看到t_reg和data_out_reg之间的时序路径,如图23所示。此时使用report_disable_timing命令查看此时失效的时序弧,图24显示此时没有失效的时序弧。这代表了,即使DC会考虑直接指定常数和使用模式分析指定常数时电路的逻辑传播情况,但不会考虑更复杂的情况。

图22 与门U2的输出引脚值为0

图23 两个触发器间的时序报告

图24 失效时序弧报告

        如果此时在编写Verilog代码时又将enable信号固定为1(假设电路没有被逻辑优化),这和使用set_case_analysis固定输入端口enable为1是一样的,如图25所示,则时序路径又会被打断。使用report_disable_timing命令查看此时失效的时序,如图26所示,其中固定值1传播至触发器data_out_reg的输入引脚D,导致触发器data_out_reg从时钟引脚CK到输入引脚D的建立时间和保持时间时序弧失效了,并且固定值1还传播到了U1的1输入端A,这导致了与门U1输入端A到输出端Y的时序弧失效了,但这不会继续传播下去了,因为一个与门输入固定为1并不会使输出也为固定值(但其实这条是多余的,因为触发器data_out_reg从时钟引脚CK到输入引脚D的建立时间和保持时间时序弧都已经失效了)。

图25 编写代码时指定引脚值为0

图26 失效时序弧报告

        最后要注意的是,固定值的传播会在到达时序路径终点而停止,并不会继续传播下去,比如图25中的data_out_reg到输出端口的时序路径并不会因为触发器时钟引脚CK到输入引脚D的时序弧失效而被打断。

        最后做个总结,不管是直接明确使用固定值还是使用模式分析命令set_case_analysis指定固定值,固定值都会沿着逻辑传播(与门的某个输入为固定0,或门的某个输入为固定1,与门的所有输入固定为1,或门的所有输入固定为0,等情况),直到传播终点为止(固定值不能继续传播下去),时序弧失效报告中,只显示传播终点的失效时序弧(因为这也能间接说明传播路径中的时序弧也失效了),如果传播终点是触发器的输入端,则触发器从时钟引脚CK到输入引脚D的时序弧会失效,此时不会进行建立时间和保持时间的检查。

相关文章:

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

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 目录 指定值 指定端口/引脚列表 简单使用 set_case_analysis命令用于对电路进行特定模式的设定,例如对于一个工作在正常模式下的芯片,…...

C++ · 代码笔记4 ·继承与派生

目录 前言010继承与派生简单例程020多级继承030使用using关键词更改访问权限040隐藏050派生类与基类成员函数同名时不构成重载060使用多级继承展示成员变量在内存中的分布情况071派生类在函数头调用基类构造函数072构造函数调用顺序080构造函数与析构函数的调用顺序091多重继承…...

解决uni-app中使用webview键盘弹起遮挡input输入框问题

这个平平无奇的回答&#xff0c;可能是全网最靠谱的解决方案。 这里我用的是vue3 setup .vue文件的方式 <view> <web-view :fullscreen"false" :webview-styles"{top: statusBarHeight40,height:height,progress: {color: green,height:1px } }"…...

Java注解介绍

Java注解 注解介绍元注解RetentionTargetDocumentedInherited接口类测试结果 注解介绍 Java注解&#xff08;Annotation&#xff09;是一种元数据&#xff08;Metadata&#xff09;的形式&#xff0c;它可以被添加到Java代码中的类、方法、变量、参数等元素上&#xff0c;以提…...

万字详解,Java实现低配版线程池

文章目录 1.什么是线程池2.线程池的优势3.原理4.代码编写4.1 阻塞队列4.2 ThreadPool线程池4.3 Worker工作线程4.4 代码测试 5. 拒绝策略5.1 抽象Reject接口5.2 BlockingQueue新增tryPut方法5.3 修改ThreadPool的execute方法5.4 ThreadPool线程池构造函数修改5.5 拒绝策略实现1…...

挂耳式蓝牙耳机哪家的好用?购买耳机前必须了解的几大要点

随着健康意识的提升&#xff0c;越来越多的人开始热衷于运动。运动不仅能够增强体质&#xff0c;对于我们这些忙碌的上班族而言&#xff0c;它也是一种极佳的减压方式。经过一天的辛勤工作&#xff0c;能够在户外跑步&#xff0c;让汗水带走压力&#xff0c;实在是一种享受。在…...

CSS文本属性

CSS文本属性 1.文本颜色2.文本间距3. 文本修饰4 .文本缩进5.文本对齐_水平6.行高7. vertical-align 1.文本颜色 属性名&#xff1a;color作用&#xff1a;控制文字的颜色。可选值&#xff1a; 颜色名rgb或rgbaHEX或HEXA &#xff08;十六进制&#xff09;HSL或HSLA 开发中常用…...

MySQL篇—执行计划之覆盖索引Using index和条件过滤Using where介绍(第三篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…...

最短路径(2.19)

目录 1.网络延迟时间 弗洛伊德算法 迪杰斯特拉算法 2. K 站中转内最便宜的航班 3.从第一个节点出发到最后一个节点的受限路径数 4.到达目的地的方案数 1.网络延迟时间 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的…...

vue 总结

1.vue 的生命周期 1. es6 2. vue 基本属性指令 <template><div><!--<h1>vue基本指令的使用方式</h1><a :href"url">v-bind使用链接</a><img :src"srcUrl" /><div>解决闪烁问题<p v-cloak>{{…...

深入理解TCP/IP协议:互联网通信的核心

深入理解TCP/IP协议&#xff1a;互联网通信的核心 在数字化时代&#xff0c;TCP/IP协议是支撑全球互联网通信的基石。它不仅负责数据的传输和路由&#xff0c;还确保了信息传递的准确性和完整性。本文将深入探讨TCP/IP协议的工作原理、结构以及它在网络编程中的应用。 TCP/IP…...

Python数据处理实战(4)-上万行log数据提取并作图进阶版

系列文章&#xff1a; 0、基本常用功能及其操作 1&#xff0c;20G文件&#xff0c;分类&#xff0c;放入不同文件&#xff0c;每个单独处理 2&#xff0c;数据的归类并处理 3&#xff0c;txt文件指定的数据处理并可视化作图 4&#xff0c;上万行log数据提取并作图进阶版&a…...

JavaWeb Tomcat启动、部署、配置、集成IDEA

web服务器软件 服务器是安装了服务器软件的计算机&#xff0c;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让用户通过浏览器来访问这些项目。 Web服务器是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序…...

关于Vue3的一些操作

1. 设置浏览器自动打开 在package.json 中设置 dev: vite --open 2.给src文件夹配置别名 在vite.config.ts配置文件中添加以下内容 3. 如果2中有红色波浪线的问题 ***安装一个文件包***npm install types/node3. 在tsconfig.json配置文件中&#xff0c;找到配置项compi…...

外贸常用的出口认证 | 全球外贸数据服务平台 | 箱讯科技

出口认证是一种贸易信任背书&#xff0c;对许多外贸从业者而言,产品的出口认证和当前的国际贸易环境一样复杂多变&#xff0c;不同的目标市场、不同的产品类别,所需要的认证及标准也不同。 国际认证 01 IECEE-CB IECEE-CB体系的中文含义是“关于电工产品测试证书的相互认可体…...

C++ 标准库类型string

C/C总述&#xff1a;Study C/C-CSDN博客 目录 定义和初始化string对象 string的增 使用push_back进行尾插 使用insert插入 使用append函数完成string的拼接 string的删 使用pop_back进行尾删 使用erase删除 string的查 使用find函数正向搜索第一个匹配项 使用rf…...

Material UI 5 学习02-其它按钮组件

Material UI 5 学习02-其它按钮组件 一、IconButton按钮二、 ButtonGroup按钮组1、最基本的实例2、垂直按钮组 一、IconButton按钮 图标按钮通常适用于切换按钮&#xff0c;允许选择或选择单个选项 取消选择&#xff0c;例如在项目中添加或删除星号。 <IconButton aria-lab…...

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…...

influxdb2.0插入数据字段类型出现冲突问题解决

一、问题出现 一个学校换热站自控系统&#xff0c;会定时从换热站获取测点数据&#xff0c;并插入到influxdb数据库中。influxdb插入数据时&#xff0c;报错提示&#xff1a; com.influxdb.exceptions.UnprocessableEntityException: failure writing points to database: par…...

[C++]类和对象,explicit,static,友元,构造函数——喵喵要吃C嘎嘎4

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...