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

2024-03-03 07:52

本文主要是介绍静态时序分析: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,时序分析结果如图5和图6所示。

set_case_analysis 0 [get_port sel]

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

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

        下面我们使用set_case_analysis命令,固定选择端sel的信号为1,时序分析结果如图7和图8所示。 

set_case_analysis 1 [get_port sel]

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

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

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

图9 一个简单的例子

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

create_clock -period 10 [get_port clk]

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

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

        现在我们使用set_case_analysis命令固定使能信号enable为0,这就使得与门U4的输出固定为0,无法翻转,因此t_reg和data_out_reg之间的时序路径被打断了,如图10所示。

图10 两个触发器间的时序路径被打断了

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

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

        在图11中,我们设法使得某些器件不被优化掉,并构造了一个奇怪的电路图。此时在逻辑上讲,与门的输出是一个固定值0,此时使用report_timing命令无法看到t_reg和data_out_reg之间的时序路径,如图12所示。

图12 两个触发器间的时序路径被打断了

        但是我们再来看一下图13所示的电路图(假设电路没有被逻辑优化),可以看出与门U2的输出是一个固定值0,但是此时使用report_timing命令可以看到t_reg和data_out_reg之间的时序路径,如图14所示。这代表了,即使DC会考虑某些情况下电路的逻辑情况,但不是所有。

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

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

        如果此时在编写Verilog代码时又将enable信号固定为1(假设电路没有被逻辑优化),则时序路径又会被打断,如图15所示。

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

         这代表着,如果在写Verilog时固定了某个电路中某个引脚或端口的信号值,则这个确定值也会沿着时序路径传播,并可能打断路径,但推荐使用set_case_analysis命令来完成这一目标。

        最后要注意的是,确定值的传播会在到达时序路径终点而停止,并不会继续传播下去,比如图15中的data_out_reg到输出端口的时序路径并不会因为与门U2的输出为确定值0而被打断。

这篇关于静态时序分析:SDC约束命令set_case_analysis详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768967

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV