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

news2025/4/21 13:49:02

相关阅读

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


        当使用set_ideal_network命令将当前设计中的一组端口或引脚标记为理想网络源后,理想属性会沿着组合逻辑进行传播,理想网络中的线网和单元的延迟默认为0,可以通过set_ideal_latency命令指定理想网络的延迟(设置了理想网络对象的ideal_latency_max_rise、ideal_latency_max_fall、ideal_latency_max_rise、ideal_latency_max_rise属性)。如果想要移除理想延迟,使用remove_ideal_latency命令。

        建议在阅读本文前,先在下面的博客学习set_ideal_network命令。

静态时序分析:SDC约束命令set_ideal_network详解https://chenzhang.blog.csdn.net/article/details/146082417?spm=1001.2014.3001.5502        本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。set_ideal_latency命令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_ideal_latency
    delay
    object_list
    [-rise | -fall]
    [-min | -max]
    //注:该命令的object_list参数一定要放在delay参数后

指定理想延迟值

        指定一个理想的延迟值。它的单位必须和工艺库中指定的负载单位一致,例如工艺库中使用了纳秒,则该参数的单位也为纳秒。

指定理想网络对象

        指定一个理想网络对象列表,包含端口对象、线网对象或叶单元的引脚对象(不可以是层次单元的引脚),如果有多于一个对象,需要使用引号或大括号包围。如果延迟值设置的对象不属于理想网络,则设置无效。如果列表中包含线网对象,理想延迟将添加在驱动该线网的端口/引脚上。

指定上升、下降沿

        -rise选项用于指定延迟值作用于上升沿、-fall选项用于指定延迟值作用于下降沿。如果这两个选项都没有指定,延迟同时作用于上升沿和下降沿,它们不能同时使用。

指定最大、最小条件

        -max选项用于指定延迟值作用于最大延迟分析(一般情况下,如果不开启on_chip_variation,这指的是建立时间检查),-min选项用于指定延迟值作用于最小延迟分析(一般情况下,如果不开启on_chip_variation,这指的是保持时间检查)。如果这两个选项都没有指定,延迟同时作用于最大延迟和最小延迟分析,它们不能同时使用。

理想网络延迟的影响

        理想网络延迟代表了从理想网络源到理想网络终点的延迟,具体参考理想属性的传播规则,所有包含理想网络源的时序路径都会考虑这个延迟并将其记录在对应的Incr列旁用符号^标注。

        多个理想网络延迟可以叠加,这发生在时序路径中定义了多个延迟的情况。

简单使用

        下面以图1为例说明set_ideal_latency命令的使用。

图1 简单的例子

        首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟。 

create_clock -period 10 [get_port clk]

        接着使用set_input_delay命令在输入端口a、b、c上添加输入延迟,参考时钟为clk,此时经过端口a的时序报告如图2所示(注意,该时序报告使用了-input_pins选项来显示输入引脚)。  

set_input_delay 0.5 {a b c} -clock [get_clock clk]

图1 建立时间时序报告

        然后使用set_ideal_network命令设置端口a为理想网络源,根据理想属性的传播规则,线网a变成了理想线网,此时经过端口a的时序报告如图2所示,其中唯一的不同是线网a的延迟变成了0。 

set_ideal_network [get_port a]

图2 建立时间时序报告

        需要注意的是,此时只有端口a、线网a和引脚u1/A被标记为理想,但理想属性不会穿过单元u1,因为其另一个输入引脚不是理想的。 

         我们可以分别使用下面三个命令,将理想延迟设置在端口a、线网a或引脚u1/A上,相应的时序报告如图3、4、5所示。

set_ideal_latency 0.5 [get_port a]

图3 建立时间时序报告

set_ideal_latency 0.5 [get_net a]

图4 建立时间时序报告

set_ideal_latency 0.5 [get_pin u1/A]

图5 建立时间时序报告

        从上面三个图中可以看出啊,除了理想线网,其他延迟值都是设置在指定的理想网络对象上,出现在该对象的Incr列中,并且使用^进行标记。

        需要注意的是,通过端口b的时序路径并不会包含任何理想对象,因此不含有任何理想延迟。但如果在引脚u1/Y上设置理想延迟呢,是否会出现叠加情况?这是错误的,因为此时引脚u1/Y并不是理想对象,一种方法是使单元u1的所有输入引脚都为理想引脚,这样u1单元就成为理想单元,其输出引脚也就成为理想引脚了,这可以通过将端口b设置为理想网络源来完成。此时经过端口a的时序报告如图6所示。

set_ideal_network [get_port b]
set_ideal_latency 0.6 [get_pin u1/Y] 

图6 建立时间时序报告

        从图6中可以看出,引脚u1/A到引脚u1/Y的单元延迟此时已经不是之前的0.1567221,而是理想延迟0.6,并且两个理想延迟叠加了。

        如果我不将端口b设置为理想网络源,也可以直接设置引脚u1/Y为理想网络源,但此时经过端口a的时序报告如图7所示,这可能会令人疑惑。

set_ideal_network [get_pin u1/Y]
set_ideal_latency 0.6 [get_pin u1/Y] 

图7 建立时间时序报告

        引脚u1/A到引脚u1/Y的单元延迟似乎并不是设置的理想延迟0.6,而是奇怪的0.6217709,这是因为单元u1此时并不是理想单元,所以其单元延迟不为0,而是真实延迟叠加理想延迟。

        这也说明上一种方法中的单元延迟为0.6应该看作是0+0.6,其中0是理想单元的延迟,而0.6是理想延迟,而因为理想延迟恰好设置在引脚u1/Y上,所以进行了累加,读者可以尝试将理想延迟设置在u2/A上,看看此时引脚u1/A到引脚u1/Y的单元延迟是否为0。

        回到正题,如果这么说,那此时的单元延迟应该为之前的0.1567221加上0.6才对,这还是对不上。其实这是因为此时线网and_out为理想线网,其电容为0导致与之前电容不为0得到的单元延迟不同,可以使用report_delay_calculation命令查看单元延迟的计算方法,如图8所示。

图8 单元延迟计算

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库查看字符集编码

select SF_GET_UNICODE_FLAG(); 返回 0 代表数据库字符集编码为 GB18030 1 代表数据库字符集编码为 UTF-8 2 代表数据库字符集编码为韩文字符集 EUC-KR

Pac-Man(吃豆人) 游戏

目录 前言 1. Pygame游戏开发基础 1.1 Pygame简介 1.2 游戏开发基本概念 1.3 Pygame核心模块介绍 2. 游戏设计与规划 2.1 游戏规则设计 2.2 游戏对象规划 2.3 技术方案选择 3. 创建游戏窗口与初始化 3.1 初始化Pygame环境 3.2 设置游戏窗口 3.3 定义颜色和游戏参数…

【Spring】@PostConstruct详解

在 Java 开发中,尤其是在基于 Spring 框架的项目里,我们常常会遇到需要在对象创建并完成依赖注入后,执行一些初始化操作的场景。PostConstruct注解正是为解决此类问题而诞生的,它为我们提供了一种便捷且优雅的方式来处理对象的初始…

OEM SQL Details and Session Details 5s 或者parallel 才会在sql monitor显示

从企业管理器 13.4 版本更新 10 (RU10) 开始,ASH Analytics 的 SQL 详细信息和会话详细信息深入屏幕已更新为使用 Oracle JET UI。 在 Ash Analytics 中,单击左下角区域中“热门 SQL”中的 SQL ID 即可深入了解 SQL 详细信息。 单击右下角“热门会话”区…

JSAR 基础 1.2.1 基础概念_空间小程序

JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明,官网之前的文档准备废除了,基于xsml的开发将退出历史舞台,three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…

Spring Security的作用

一、概述 Spring Security是一个框架,提供认证(authentication)、授权(authorization)和保护,以抵御常见攻击。对 常见漏洞 的保护提供了全面的支持,它对保护命令式和响应式应用程序有一流的支…

数据结构与算法效率分析:时间复杂度与空间复杂度详解(C语言)

1. 算法效率 1.1 如何衡量一个算法的好坏? 在计算机程序设计中,衡量算法优劣的核心标准是效率。但效率不仅指运行速度,还需要综合以下因素: 时间因素:算法执行所需时间 空间因素:算法运行占用的内存空间…

数据类设计_图片类设计之4_规则类图形混合算法(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及图片的混合算法.前面的内容属于铺垫和基础,这篇内容和实际联系起来了. 背景图和前景图 这里笔者想先…

从零使用docker并安装部署mysql8.3.0容器

在开始使用docker到完成mysql的安装部署,中间有很多的坑等着 安装docker并配置 sudo yum install docker-ce 启动docker并设置开机启动项 sudo systemctl start docker sudo systemctl enable docker查看docker是否启动 sudo systemctl status docker 或者直接…

cpu 多级缓存L1、L2、L3 与主存关系

现代 CPU 的多级缓存(L1、L2、L3)和主存(DRAM)构成了一个层次化的内存系统,旨在通过减少内存访问延迟和提高数据访问速度来优化计算性能。以下是对多级缓存和主存的详细解析: 1. 缓存层次结构 现代 CPU 通…

基于Python+SQLite实现校园信息化统计平台

一、项目基本情况 概述 本项目以清华大学为预期用户,作为校内信息化统计平台进行服务,建立网页端和移动端校内信息化统计平台,基于Project_1的需求实现。 本项目能够满足校内学生团体的几类统计需求,如活动报名、实验室招募、多…

[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现

标题:[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现 水墨不写bug 文章目录 一、生产者消费者模型特点:二、实现2.1详细解释1. 成员变量2. 构造函数3. Isfull 和 Isempty4. Push 函数5. Pop 函数6. 析构函数7. GetSize 函数 三、总结与多线…

vue组件库el-menu导航菜单设置index,地址不会变更的问题

请先确认 1.路由已配置好 route-index.js如下, 2.view-ProHome.vue中已预留路由展示位 3.导航菜单复制组件库,并做修改 其中index与路由配置的地址一致 运行后发现点击菜单,url地址还是不变,查看组件库 Element - The worlds …

MySQL 优化方案

一、MySQL 查询过程 MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器,再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作,包括连接管理、查询解析、优化、执行和结果返回等。 1.1 查询过程的关键组件 连接管理器:管理…

智能对话小程序功能优化day1-登录鉴权

目录 1.数据库表构建。 2.完善登录相关的实例对象。 3.登录相关功能实现。 4.小程序效果。 最近尝试下trae加入claude3.7后的读图生成代码功能,可以看到简单的页面一次性生成确实准确率高了不少,想起来之前笔记中开发的智能问答小程序功能还是有些简…

MinIO的预签名直传机制

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口,然后我们在前端调用这些接口完成文件的上传下载机制,但是,当并发量过大,频繁访问会对后端的并发往往会对服务器造成极大的压力…

Qt开源控件库(qt-material-widgets)的编译及使用

项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址:qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图: 直接使用Qt Crea…

用python批量生成文件夹

问题描述 当批量生成文件夹时,手动右键创建文件夹是一个繁琐的过程,尤其是文件夹的命名过程。假设从3月10日到3月19日,每天要为某个日常工作创建一个名为2025031x的文件夹,手动创建文件夹并命名费时费力。 百度给出了以下四种方法…

【MySQL】基本操作 —— DDL

目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…

游戏引擎学习第152天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾昨天的内容 这个节目展示了我们如何从零开始制作一款完整的游戏。我们不使用任何游戏引擎或库,而是从头开始创建一款游戏,整个开发过程都会呈现给大家。你将能够看到每一行代码的编写,了解…