FPGA静态时序分析与约束(二)、时序分析

系列文章目录

FPGA静态时序分析与约束(一)、理解亚稳态
FPGA静态时序分析与约束(三)、读懂vivado时序报告


文章目录

  • 系列文章目录
  • 前言
  • 一、时序分析基本概念
    • 1.1 时钟抖动
    • 1.2 时钟偏斜
    • 1.3 时钟不确定性Uncertainty
    • 1.4 建立时间和保持时间
    • 1.5 启动沿和锁存沿
  • 二、时序分析基本步骤
    • 2.1 时序分析基本模型
    • 2.2 理想建立时间和保持时间
    • 2.3 实际建立时间和余量分析
      • 2.3.1 分析建立时间延迟参数
      • 2.3.2 分析锁存沿时间延迟参数
      • 2.3.3 建立时间余量分析
      • 2.3.4 理想建立时间值
    • 2.4 实际保持时间和余量分析
      • 2.4.1 分析保持时间延迟参数
  • 三、总结
  • 参考资料


前言

从上篇理解亚稳态的文章可知,如果数字电路中出现了亚稳态现象,则可能导致整个系统失效;而出现亚稳态现象的最主要的原因就是寄存器在传输数据过程中发生了建立时间( t s u t_{su} tsu)或者保持时间( t h t_h th)的违规。因此时序分析至关重要,只有正确的时序才能让整个系统无异常的跑起来。


一、时序分析基本概念

1.1 时钟抖动

理想的时钟信号是非常完美的正弦波,但是实际晶振产生的正弦波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动,英文名叫做 Clock Jitter,是相对于理想时钟沿实际时钟存在不随时间积累的、时而超前、时而滞后的偏移称为时钟抖动,如下图所示:
在这里插入图片描述

1.2 时钟偏斜

时钟偏差:Clock Skew,是指同一个时钟域内的时钟信号到达数字电路各个部分(一般是指寄存器)所用时间的差异。时序分析的起点一般是源寄存器(reg1),终点一般是目标寄存器(reg2)。时钟和其它信号的传输一样会有延时的。下图中,时钟信号从时钟源传输到源寄存器的延时我们定义为 Tc2s,传输到目标寄存器的延时我们定义为 Tc2d。如下图所示:
在这里插入图片描述
时钟网络延时 Tskew 就是 Tc2d 与 Tc2s 之差,即 Tskew=Tc2d-Tc2s

1.3 时钟不确定性Uncertainty

Clock Uncertainty就是时钟的不确定性。时钟的不确定性主要是由 Clock Skew 和 Jitter 构成。因此 Clock Uncertainty = Clock Skew + Clock Jitter。一般标准的时序约束文件中,都需要加 Clock Uncertainty 的约束,这个约束是为了让时序分析更贴近真实的电路设计。

1.4 建立时间和保持时间

建立时间:Setup Time,缩写是 T s u T_{su} Tsu,即在时钟上升沿之前数据必须稳定的最短时间。若不满足 setup time,数据无法进入寄存器,也就是说寄存器的数据采样会失败。(简单来说,建立时间就是数据变化必须在目标寄存器采样沿之前的最短时间)。
保持时间:Hold Time,缩写是 T h T_h Th,即在时钟上升沿之后数据必须稳定的最短时间。若不满足 hold time,数据也无法进入寄存器,也就是说寄存器的数据采样也会失败。(简单来说,保持时间就是数据变化必须在目标寄存器采样沿之后的最短时间)

总体来说,寄存器的采样需要同时满足建立时间和保持时间,如果不满足任何一个,那么寄存器可能采样失败从而进入亚稳态。

1.5 启动沿和锁存沿

寄存器发送数据和接收数据都是需要在时钟边沿进行的,因此对寄存器来说,都有一个发起沿和一个采样沿。
启动沿:lunch edge,是发送数据的时钟边沿,通常选择上升沿。
锁存沿:latch edge,是采样到该数据的时钟边沿,通常也是上升沿。理想情况这两个边沿会有一个时钟周期的差别。如图所示:
在这里插入图片描述

理想时序关系
在 T0 的时候 CLK 的上升沿使得 reg1 给 reg2 输出数据,这个上升沿也称为“启动沿(lunch edge)”。在 T1 的时候,CLK的上升沿使得reg2 保存 reg1 发过来的数据,此时刻的上升沿也称为“锁存沿 (latch edge)”。

二、时序分析基本步骤

2.1 时序分析基本模型

时序分析是两个节点之间的时序分析,有以下四种情况:
在这里插入图片描述

  1. 管脚输入(PAD)和寄存器之间的路径(即 pin2reg)
  2. 寄存器和寄存器之间的路径(即 reg2reg)
  3. 寄存器和管脚输出(PAD)之间的路径(即 reg2pin)
  4. 管脚输入(PAD)和管脚输出 (PAD)之间的路径(即 pin2pin)
    在这里插入图片描述
    1、pin2reg:
    从外部芯片到FPGA 的第一级寄存器的输入端口,这个部分包括 3 个延迟,分别是 Tco(外部芯片时钟到外部芯片寄存器输出延时),Input Delay(PCB 板子的输入走线延迟)和Internal Delay(FPGA 内部的输入走线延迟)。
    2、reg2reg:
    FPGA内部两个寄存器之间的路径包括 2 个延迟,分别是 Tco(FPGA内部时钟到内部寄存器输出延时)和 Data Path Delay(FPGA 内部的组合逻辑和数据走线延迟)。
    3、reg2pin:
    最后一级寄存器到外部芯片数据端口的路径部分包括 3 个延迟,分别是 Tco(FPGA内部时钟到内部寄存器输出延时),Internal Delay(FPGA 内部的输入走线延迟)和Output Delay(PCB 板子的输出走线延迟)。
    4、pin2pin:
    端口到端口的路径这个部分包括 1 个延迟,即 Data PathDelay(FPGA 内部的组合逻辑和数据走线延迟)。

2.2 理想建立时间和保持时间

在这里插入图片描述

在 T0 的时候,reg1 向 reg2 发送数据1,该数据长达一个周期时间,这段时间也称为“建立关系时间”,也就是图中T0红色箭头(启动沿)和T1红色箭头(锁存沿)之间的时间。理想情况下,CLK1与CLK2同频率,所以:

理想建立时间关系值=时钟周期

保存时间:reg2 用来锁存 reg1 发送过来数据所需的“最小时间”
在这里插入图片描述
在 T0 的时候 CLK1 的启动沿(红色的箭头↑)使得 reg1 向 reg2 发送数据。然后在 T1 的时候CLK2 的锁存沿(绿色箭头↑)使得 reg2 保存 reg1 发送过来的数据。换句话说,reg1 在 T0 向 reg2 发送的数据,而 reg2 乘数据还没有更新之前,reg2 必须迅速的将 reg1 在 T0 发送过来的数据保存起来。

保持关系值 = 0ns

2.3 实际建立时间和余量分析

在实际电路传输过程中,时钟和数据传输有一定的延迟,寄存器锁存数据和寄存器输出数据都有一定延迟,如下图所示:
在这里插入图片描述

  • Tclk1Tclk2是时钟走线延时,由时钟源到两个寄存器的延迟时间
  • Tdata 是指数据路径延迟,数据由上一节点输出端,经过走线到下一节点输入端的延迟时间
  • Tco 是数据从寄存器输入端到寄存器输出端需要的延迟时间
  • Tsu是寄存器在锁存沿之前需要的数据"最小准备时间"
  • Th 是寄存器在锁存数据过后需要的数据“最小保持时间

其中Tco、Tsu、Th是由FPGA出厂就自带的,不同的工艺、不同的芯片型号,这三个都不同。

2.3.1 分析建立时间延迟参数

在这里插入图片描述
如上图所示,红色虚线是整条链路的延迟路径,假设signal in已经准备好数据
在这里插入图片描述
源时钟CLK 的上升沿受到 Tclk1 的延迟来到 reg1 之前, 当 reg1_clk 的启动沿(红色箭头)触发 reg1 向 reg2 发送数据时,reg1 还要需要 Tco 的寄存器内部延迟时间。当经过 Tco 的延迟之后,数据从 Reg1-Q端 发送出去,数据到达reg2_D端之前还有 Tdata 的延迟。Tdata 延迟的产生源除了路径本身的延迟以外,最主要还是“组合逻辑”。最后 reg1 向 reg2 发送的数据经过 Tdata 的延迟之后就抵达reg2 的入口(reg2-D)。

如果源时钟输入管脚为0时刻,那么数据到达Reg2的D端所走过的延迟是Tclk1+Tco+Tdata
所以:
数据到达时间 Data Arrival time = Tclk1 + Tco + Tdata
由公式可以看出,建立时间延迟受Tclk1、Tco、Tdata影响

2.3.2 分析锁存沿时间延迟参数

在这里插入图片描述
如上图所示,Tclk2 和 Tsu。Tclk2 是锁存沿抵达 reg2 之前时钟路径的延迟。Tsu 是在 reg2 要锁存从 reg1 发来的数据之前,需要的最小准备时间。
在这里插入图片描述
源时钟锁存沿经过Tclk2延迟后到达Reg2,Tsu为数据采集前最小准备时间,所以数据至少提前锁存沿Tsu的时间到来,因此:

数据锁存时间 Data Required Time = 锁存沿时间 + Tclk2 - Tsu
由公式可知,数据锁存时间延迟跟Tclk2、Tsu有关。

2.3.3 建立时间余量分析

建立时间余量为正值,说明整体设计时序合格,甚至还能跑更高的时钟频率。公式为:

建立时间余量 = D a t a R e q u i r e d T i m e − D a t a A r r i v a l t i m e 建立时间余量 = Data_{ }Required_{ }Time - Data_{ }Arrival_{ }time 建立时间余量=DataRequiredTimeDataArrivaltime
= L a t c h e d g e + T c l k 2 – T s u – ( L u n c h e d g e + T c l k 1 + T c o + T d a t a ) =Latch_{ }edge + Tclk2 –Tsu– (Lunch_{ }edge+ Tclk1 +Tco +Tdata) =Latchedge+Tclk2–Tsu(Lunchedge+Tclk1+Tco+Tdata)

  • 举例:时钟周期Tcyc = 10ns、Tclk1 = 2ns、Tclk2 = 1ns、 Tco = 1ns、Tsu = 0.5ns、Tdata = 3ns;那么建立时间余量为多少?
  1. 数据到达时间 Data Arrival time = 2 + 1 + 3 =6ns
  2. 数据锁存时间 Data Required Time = 10 + 1 - 0.5 = 10.5ns
  3. 建立时间余量 Tsu slack = 10.5 - 6 = 4.5ns

最大主频 = 1 时钟周期 − 建立时间余量 = 1 10 − 4.5 = 222 M h z 最大主频=\frac{1}{时钟周期 - 建立时间余量}=\frac{1}{10 - 4.5}=222Mhz 最大主频=时钟周期建立时间余量1=104.51=222Mhz

只要建立时间余量为正数,那么两个节点之间就能合格的传输数据,那么是不是建立时间余量越大越好?建立时间余量最大是多少呢?

2.3.4 理想建立时间值

在这里插入图片描述
理想建立时间 = 锁存沿时间

还是上面那个例子,假如时钟周期为10ns,我们将latch沿的时钟相移动45度(即将时钟左移1.25ns)如图所示:
在这里插入图片描述

此时

  1. 数据到达时间 Data Arrival time = 2 + 1 + 3 =6ns
  2. 数据锁存时间 Data Required Time = 8.75 + 1 - 0.5 = 9.25ns
  3. 建立时间余量 Tsu slack = 10.5 - 6 = 3.25ns

时序余量相对于第一个例子的4.5ns,变少了,但没超过锁存沿的时间8.75ns。

那么我们再假如假如时钟周期为10ns,我们将latch沿的时钟相移动-45度(即将时钟右移1.25ns)如图所示:
在这里插入图片描述
此时

  1. 数据到达时间 Data Arrival time = 2 + 1 + 3 =6ns
  2. 数据锁存时间 Data Required Time = 11.25 + 1 - 0.5 = 11.75ns
  3. 建立时间余量 Tsu slack = 10.5 - 6 =5.75ns

时序余量相对于第一个例子的4.5ns,变多了,但没超过锁存沿的时间11.25ns。

结论:理想建立关系值和锁存沿时间在评估数据锁存时间是等价的关系,在原理上“建立余量是不可能超过理想建立关系值”,如果超过了,那么两个节点(寄存器)之间的建立关系就违规,或者不合格化了。

2.4 实际保持时间和余量分析

保持时间是寄存器在读取某个数据以后,需用一段最小时间来“确保数据锁存”的稳定。
在这里插入图片描述

理想保持时间

2.4.1 分析保持时间延迟参数

在这里插入图片描述
在这里插入图片描述

数据保持时间 Data Hold Time = Tclk1 + Tco + Tdata +时钟周期
数据锁存时间 Data Required Time = 锁存沿 + Tclk2 + Th
保持余量 = 数据保持时间 - 数据锁存时间

  • 举例:时钟周期Tcyc = 10ns、Tclk1 = 2ns、Tclk2 = 1ns、 Tco = 1ns、Th = 0.5ns、Tdata = 3ns;那么建立时间余量为多少?
  1. 数据保持时间 Data Hold Time = 2 + 1 + 3 + 10 =16ns
  2. 数据锁存时间 Data Required Time = 10 + 1 + 0.5 = 11.5ns
  3. 保持时间余量 Th slack = 16 - 11.5 = 4.5ns

最后取得的保持余量是 4.5ns,保持余量是正值,所以reg1和reg2之间传输的的保持关系是合格的。
根据保持时间余量公式可以看出,Data Hold Time - Data Required Time 其中的时钟周期相互抵消了,所以保持时间余量跟时钟频率没有关系。

三、总结

数据到达时间 Data Arrival time = Tclk1 + Tco + Tdata
数据锁存时间 Data Required Time = 锁存沿时间 + Tclk2 - Tsu
建立余量公式Setup Slack= 数据锁存时间 - 数据抵达时间

数据保持时间 Data Hold Time = Tclk1 + Tco + Tdata +时钟周期
数据锁存时间 Data Required Time = 锁存沿 + Tclk2 + Th
保持余量 = 数据保持时间 - 数据锁存时间
FPGA静态时序分析与约束(三)、读懂vivado时序报告

参考资料

  • 《正点原子 FPGA 静态时序分析与时序约束_V2.3》
  • 《FPGA那些事儿–TimeQuest静态时序分析》
  • 《FPGA时序约束与分析_吴厚航》

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

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

相关文章

DVWA靶场-CSRF跨站请求伪造

CSRF(跨站请求伪造)简介概念 CSRF(Cross—site request forgery),跨站请求伪造,是指利用受害者未失效的身份认证信息(cookie,会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面…

nacos2.2.3 适配dm数据库

从github上下载了源码,选择了2.2.3分支后修改 适配后的代码下载,本地install用: nacos2.2.3_dm: 适配dm数据库 (gitee.com) alibba加了很多检查,跳过检查install命令: mvn -Prelease-nacos -Dmaven.test.skiptrue -D…

Django和Mysql数据库

Django学习笔记 Django和Mysql数据库 Django开发操作数据库更简单,内部提供了ORM框架。 1)安装mysqlclient pip3 install mysqlclient2)ORM ORM可以帮助我们做两件事: 1.创建、修改、修改数据库中的表(不用写sql语句)[不能创…

运维自动化之——Ansible

目录 一、自动化运维 1、通过xshell实现自动化运维 2、Ansible简介 3、Ansible特点及优势 4、Ansible核心程序 5、Ansible工作原理及流程 6、部署Ansible自动化运维工具 7、Ansible常用模块 ①ansible命令模块 ②command模块 ③shell模块 ④cron模块 ⑤user模块 …

Redis:ClassCastException【bug】

Redis:ClassCastException【bug】 前言版权Redis:ClassCastException【bug】错误产生相关资源控制器:UserController("/user")配置:RedisConfiguration实体类:User数据表:User 解决 最后 前言 2…

Windows蓝牙驱动开发之模拟HID设备(一)(把Windows电脑模拟成蓝牙鼠标和蓝牙键盘等设备)

by fanxiushu 2024-03-14 转载或引用请注明原作者 把Windows电脑模拟成蓝牙鼠标和蓝牙键盘,简单的说,就是把笨重的PC电脑当成鼠标键盘来使用。 这应该是一个挺小众的应用,但有时感觉也应该算比较好玩吧, 毕竟实现一种一般人都感觉…

Docker安装蜜罐Hfish

前言 无意中发现公司的一台服务器被爆破,修改了密码,为了确定内网是否安装需要搭建一个蜜罐来看一下是否存在隐患。 如何安装Docker,请查看我另一篇文章 https://blog.csdn.net/l1677516854/article/details/136751211 一、拉取镜像 dock…

工具类实现导出复杂excel、word

1、加入准备的工具类 package com.ly.cloud.utils.exportUtil;import java.util.Map;public interface TemplateRenderer {Writable render(Map<String, Object> dataSource) throws Throwable;}package com.ly.cloud.utils.exportUtil;import java.util.Map;public int…

Unity中的网格创建和曲线变形

Unity中的网格创建和曲线变形 3D贝塞尔曲线变形贝塞尔曲线基础线性公式二次方公式三次方公式 Unity 实现3D贝塞尔曲线变形准备工作脚本概述变量定义 变量解析函数解析 获取所有子节点GetAllChildren 获取所有子节点UpdateBezierBend 控制点更新CalculateBezier Bezier 曲线公式…

【算法杂货铺】二分算法

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 朴素二分查找 &#x1f4c2; 朴素二分模板 &#x1f4c1; 查找区间端点处 细节&#xff08;重要&#xff09; &#x1f4c2; 区间左端点处模板 &#x1f4c2; 区间右端点处模板 &#x1f4c1; 习题 1. 35. 搜索插入位…

phpcms头像上传漏洞引发的故事

目录 关键代码 第一次防御 第一次绕过 第二次防御 第二次绕过 第三次防御 第三次绕过 如何构造一个出错的压缩包 第四次防御 第四次绕过 本篇文章是参考某位大佬与开发人员对于文件包含漏洞的较量记录下的故事&#xff0c;因为要学习文件包含漏洞&#xff0c;就将大佬…

什么是 HTTPS?它是如何解决安全性问题的?

什么是 HTTPS&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种安全的通信协议&#xff0c;用于在计算机网络上安全地传输超文本&#xff08;如网页、图像、视频等&#xff09;和其他数据。它是 HTTP 协议的安全版本&#xff0c;通过使用加…

Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式

Java大数据开发和安全开发 &#xff08;一)Java的变量和方法1.1 成员变量1.2 成员方法1.3 static关键字1.3.1 static修饰成员变量1.3.1 static修饰成员变量的应用场景1.3.1 static修饰成员方法1.3.1 static修饰成员方法的应用场景1.3.1 static的注意事项1.3.1 static的应用知识…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中

文章目录 一、DSL查询文档1.1 简单查询1.2 复合查询 二、搜索结果处理三、RestClient演示 查询与结果分析四、案例4.1 问题解析4.2 代码4.2.1 实体bean4.2.2 控制层4.2.3 业务service4.2.4 启动类 一、DSL查询文档 1.1 简单查询 # 1. DSL查询 # 1.1 查询所有GET /hotel/_searc…

JavaScript 进阶(一)

一、作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a; 局部作用域 、全局作用域。 1.1局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域&#xff1a; 在函数…

分布式系统常见负载均衡实现模式

分布式系统常见负载均衡实现模式 1. 4层负载均衡1.1. 负载均衡的常见需求1.2. 负载均衡的实现模式1.2.1 DR模式1.2.2 TUN模式1.2.3 NAT模式1.2.4 FULLNAT模式1.2.5 4种模式的差异 1.3. 负载均衡的均衡算法1.3.1 静态负载均衡1.3.2 轮询法1.3.3 加权循环法1.3.4 IP 哈希法1.3.5 …

Vue前端开发记录(一)

本篇文章中的图片均为深色背景&#xff0c;请于深色模式下观看 说明&#xff1a;本篇文章的内容为vue前端的开发记录&#xff0c;作者在这方面的底蕴有限&#xff0c;所以仅作为参考 文章目录 一、安装配置nodejs,vue二、vue项目目录结构三、前期注意事项0、组件1、数不清的报…

首个ChatGPT机器人- Figure 01;李开复旗下零一万物推出Yi系列AI大模型API

&#x1f989; AI新闻 &#x1f680; 首个ChatGPT机器人- Figure 01 摘要&#xff1a;Figure 01是一个由初创公司Figure联合OpenAI开发的人形机器人。它展示了与人类和环境互动的能力&#xff0c;可以说话、看东西&#xff0c;并且可以执行各种任务&#xff0c;如递食物、捡垃…

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…

算法的基本概念和复杂度

目录 一. 算法的基本概念1.1 什么是算法1.2 算法的五个特性1.3 怎么才算好的算法 二. 算法的时间复杂度三. 算法的空间复杂度 \quad 一. 算法的基本概念 \quad \quad 1.1 什么是算法 算法可以用自然语言来描述, 也可以用伪代码和代码来描述 \quad 1.2 算法的五个特性 有穷性, 一…