【STA】多场景时序检查学习记录

单周期路径

建立时间时序检查

在时钟的有效沿到达触发器之前,数据应在一定时间内保持稳定,这段时间即触发器的建立
时间。满足建立时间要求将确保数据可靠地被捕获到触发器中。
建立时间检查是从发起触发器中时钟的第一个有效沿到捕获触发器中时钟后面最接近的那个有效沿。
在这里插入图片描述

触发器到触发器路径

在这里插入图片描述
建立时间检查可以用数学公式表示:

Tlaunch + Tck2q + Tdp < Tcapture + Tcycle - Tsetup

其中Tlaunch是发起触发器UFF0的时钟树延迟,Tdp是组合逻辑数据路径的延迟,Tcycle是时钟周期,Tcapture是捕获触发器UFF1的时钟树延迟。

触发器间可能存在多条路径,每条路径均需满足建立时间的要求,这等价于在延时最高的工作条件(PVT)下,触发器间的最长时序路径需要满足建立时间的要求。因此在时序报告中建立时间用-max表示。

输入引脚到触发器路径

输入引脚数据采用虚拟时钟发出

在这里插入图片描述

输入引脚数据采用实际时钟发出

在这里插入图片描述

触发器到输出引脚路径

输出引脚数据采用虚拟时钟捕获

在这里插入图片描述

输入引脚到输出引脚路径(组合逻辑路径)

在这里插入图片描述

保持时间时序检查

触发器的保持时间要求规定在时钟的有效沿之后的指定时间段内,被锁存的数据应保持稳定。
保持时间检查可确保正在变化的触发器输出值不会传递到捕获触发器,并在捕获触发器有机会捕获其原始值之前覆盖其输出。

在这里插入图片描述

触发器到触发器路径

在这里插入图片描述
保持时间检查可以用数学公式表示为:

Tlaunch + Tck2q + Tdp > Tcapture + Thold

其中Tlaunch是发起触发器的时钟树延迟,Tdp是组合逻辑数据路径中的延迟,Tcapture是捕获触发器的时钟树延迟。换句话说,由时钟边沿发起的数据到达捕获触发器D引脚所需的总时间必须大于时钟同一边沿到达捕获触发器所需的时间加上保持时间。这样可以确保UFF1 / D保持稳定状态,直到触发器的时钟引脚UFF1 / CK时钟上升沿之后的保持时间为止。

触发器间可能存在多条路径,每条路径均需满足保持时间的要求,这等价于在延时最低的工作条件(PVT)下,触发器间的最短时序路径需要满足保持时间的要求。因此在时序报告中建立时间用-min表示。

保持时间检查需要确保:

  • 当前数据发起时钟沿(Setup launch edge)的下一个(subsequent)时钟沿发起的数据不被当前数据捕获时钟沿(Setup receiving edge)所捕获。
  • 当前数据发起时钟沿发起的数据不被当前数据捕获时钟沿的前一个(Preceding)时钟沿所捕获。

在这里插入图片描述

触发器到输出引脚路径

输出引脚数据采用已知时钟捕获

在这里插入图片描述

多周期路径

两个触发器之间的数据路径可能需要一个以上的时钟周期才能传播通过逻辑。在这种情况下,这条组合逻辑路径会被定义为多周期路径。这意味着设计中后继触发器每隔多个周期才会使用一次前级触发器输出引脚上的数据,而不是每个周期都使用。

create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
在这里插入图片描述

伪路径

  1. 利用已知/可预测时钟对信号采样时,尽量用多周期路径代替伪路径约束。

  2. 尽量不用-through复杂性高。

  3. 若要在两个时钟域之间设置伪路径,使用get_clocks效率更高:

set_false_path -from [get_clocks clockA] -to [get_clocks clockB]

  代替

set_false_path -from [get_pins {regA_ * }/CK] -to [get_pins {regB_ * }/D]

半周期路径

设计中同时具有负边沿触发的触发器(有效时钟沿为下降沿)和正边沿触发的触发器(有效时钟沿为上升沿),则设计中可能存在半周期路径。

在这里插入图片描述

半周期路径的建立时间、保持时间捕获时钟沿与发起时钟沿偏移均为半个时钟周期。

撤销时间检查

撤销时间检查用于确保在有效时钟沿与释放异步控制信号之间有足够的时间。类似于保持时间检查。

在这里插入图片描述

恢复时间检查

恢复时间检查用于确保异步信号变为无效状态的时刻与下一个有效时钟沿之间的时间间隔大于一个最
小值。类似于建立时间检查。

在这里插入图片描述

跨时钟域

当数据发起触发器和捕获触发器的时钟频率不同时,STA会首先确定一个公共基本周期(common base period)。快时钟的时钟周期会被延拓,以便获得两个时钟的一段公共周期。

慢时钟到快时钟

对于nMHz的慢时钟到4nMHz的快时钟数据传输:
在这里插入图片描述
假设该设计的目的是在CLKP的每隔第4个捕获沿上捕获数据,且数据发起沿后数据会发生变动,即需要将保持时间检查一直移回到数据发起沿所在位置,对应波形图如下:

在这里插入图片描述

对应上述波形图可使用的多周期约束如下。

set_multicycle_path 4 -setup -from [get_clocks CLKM] -to [get_clocks CLKP] -end
set_multicycle_path 3 -hold -from [get_clocks CLKM] -to [get_clocks CLKP] -end

其中-end表示依照捕获时钟沿,默认情况下-setup使用-start即发起时钟沿,-hold使用-end即捕获时钟沿。使用-end时会从默认的捕获时钟沿开始前移指定倍数周期,使用-start会从默认的发起时钟沿后移指定倍数周期。

快时钟到慢时钟

在这里插入图片描述

如果设计能够支持放宽建立时间检查要求,为数据路径提供两个快时钟周期,此时波形图如下:

在这里插入图片描述
此时多周期路径约束如下:

set_multicycle_path 2 -setup -from [get_clocks CLKP] -to [get_clocks CLKM] -start
set_multicycle_path 1 -hold -from [get_clocks CLKP] -to [get_clocks CLKM] -start

多时钟域

不同频率

  • 整数倍:设计中多个时钟的频率是彼此的整数倍。在这种情况下,会通过计算所有相关时钟之间的公共基本周期,以便所有时钟同步。
  • 非整数倍:对于两个频率不是彼此整数倍的时钟域之间存在数据路径的情况,时序分析会先计算相关时钟的公共周期,然后再将时钟扩展到该公共周期。之后,建立时间检查在时钟发起沿和捕获沿之间的最短时间内进行(根据建立时间不等式,两沿最短时检查最严格)。保持时间检查在发起时钟沿对应捕获时钟沿的前一周期与当前发起时钟沿最小时进行。

在这里插入图片描述

不同相位

在这里插入图片描述

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

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

相关文章

理解大模型的5个关键公式

理解大模型的5个关键公式_哔哩哔哩_bilibili PPT&#xff1a;https://link.excalidraw.com/p/readonly/aBWlNjEckdUlrszwwo6V

基于springboot+vue的社区医院管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

chatgpt-3的文章生成器有哪些?可以批量生成文章的生成器

GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;作为人工智能领域的一项重大突破&#xff0c;开启了新一代的文本生成技术。同时市面上也涌现出了一些GPT-3文章生成器&#xff0c;为用户提供了快速、高效地生成各种类型文章的工具。本文将介绍一些中国的GP…

unity-unity2d基础操作笔记(三)0.5.000

目标是:牢记以下137条操作,越级上升到中级阶段 unity-unity2d基础操作笔记(三) 一百零一、如何操作一个游戏物体由多个部分组成的动画一百零二、如何使用rigidbody 2d进行物体移动一百零三、获取游戏物体身上的组件方法一百零四、代码控制物体朝向一百零五、不使用插件,纯…

C#上位机调试经验

1.使用Visual Studio的远程工具 因为上位机软件安装在工控机上&#xff0c;不方便调试。如果直接把代码放在工控机上&#xff0c;又不太安全。 可以在工控机上安装一个Visual Studio的远程工具&#xff0c;把随身带的笔记本电脑通过网线插在工控机上 这样可以在笔记本上使用…

s3cmd工具使用

1. 安装s3cmd工具 [roottestserver01 ~]# yum install s3cmd 2. 配置s3cmd, 按提示输入相应的ak&#xff0c;sk&#xff0c;endpoint等信息 [roottestserver01 ~]# s3cmd --configure 3. s3cmd使用 [roottestserver01 ~]# s3cmd mb s3://abc &#xff08;创建一个桶&am…

python笔记_程序流程控制

A&#xff0c;顺序控制 程序从上到下逐行执行 python定义变量时&#xff0c;会合法地向前引用 age 1 age2 age 1 age2 age 1 age 1 ——>错误&#xff0c;age应在age2之前 B&#xff0c;分支控制 1&#xff0c;单分支if 语法 if 条件表达式 &#xff1a; 代码块 说明…

【六】【SQL】多表查询,笛卡尔积

笛卡尔积 笛卡尔积发生在当你在查询中将两个或多个表进行交叉连接&#xff08;CROSS JOIN&#xff09;或者没有指定任何连接条件时。假设第一个表有M行&#xff0c;第二个表有N行&#xff0c;那么结果集将包含M x N个记录。在大多数情况下&#xff0c;笛卡尔积并不是你想要的结…

数字化转型导师坚鹏:证券公司数字化思维升级之道

证券公司数字化思维升级之道 ——数字化思维之六脉神剑 课程背景&#xff1a; 很多证券公司存在以下问题&#xff1a; 不知道数字化转型如何改变思维模式&#xff1f; 不清楚需要建立什么样的数字化思维&#xff1f; 不知道如何开展数字化思维提升工作&#xff1f; 课…

Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式 Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基础 CRUD&#xff08;创建、读取、更新和删除&#xff09;操作的一个接口。在与 Redis 集成时&#xff0c;尽管 Redis 是一个键值存储系统&#xff0c;并没有像关系型…

华为机试真题实战应用【算法代码篇】-去除多余空格(附Java、C++和python代码)

目录 问题描述 输入描述 输出描述 样例 思路解析 代码实现

关于福彩历史数据采集器和体彩历史数据采集器的下载安装说明

前段时间因为研究基于人工神经网络&#xff08;深度学习&#xff0c;所谓的“AI”算法&#xff09;对3D开奖数据进行预测&#xff0c;开发了两款浏览器插件----“福彩历史数据采集器”和“体彩历史数据采集器”。之所以开发这两款插件&#xff0c;是因为不管是基于什么样的方式…

Unity 游戏设计模式:观察者模式

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com 在 unity 游戏设计中&#xff0c;观察者模式&#xff08;Observer Pattern&#xff09;有着重要的作用&#xff0c;它主要用于实现对象之间的一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#x…

【QT+QGIS跨平台编译】之六十三:【QGIS_CORE跨平台编译】—【错误处理:未定义的类QgsMapLayer - QgsMapLayerModel】

文章目录 一、未定义的类QgsMapLayer二、解决办法 一、未定义的类QgsMapLayer 报错&#xff1a; 二、解决办法 QgsMapLayerModel.h文件中 ①第27行修改为&#xff1a; #include "QgsMapLayer.h" ②第23行增加&#xff1a; #include <QPointer>

Github 2024-03-03 开源项目日报Top9

根据Github Trendings的统计&#xff0c;今日(2024-03-03统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量非开发语言项目4Rust项目1C项目1Jupyter Notebook项目1Python项目1Shell项目1 任天堂Switch模拟器yuzu&#x…

将jar程序封装为docker镜像 shell脚本

将JAR程序封装为Docker镜像通常涉及编写一个Dockerfile&#xff0c;然后使用docker build命令构建镜像。然而&#xff0c;如果你想要通过一个shell脚本来自动化这个过程&#xff0c;你可以创建一个脚本&#xff0c;该脚本首先创建一个Dockerfile&#xff0c;然后使用docker bui…

嵌入式驱动学习第一周——linux设备管理模型

前言 现在来聊点原理性的东西——linux设备管理模型 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论一起学习。现在关注就是老粉啦&#xff01; 行文目录…

编写dockerfile挂载卷

编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq docker-test-volume]#使用do…

leetcode:51.N皇后(复习)

题目理解&#xff1a;&#xff08;回溯算法&#xff09; 树形结构——层数代表行数&#xff0c;递归的深度就是总行数。 代码实现&#xff1a;

解释Android中的Activity生命周期,以及在哪个生命周期方法中可以进行布局的初始化?

在Android中&#xff0c;Activity的生命周期是指Activity从创建到销毁的整个过程&#xff0c;这个过程中会经历一系列的回调方法。了解Activity的生命周期对于管理资源、处理用户交互和确保应用的稳定性非常重要。下面是Activity生命周期的主要阶段及其对应的回调方法&#xff…