基于Xlinx的时序分析与约束(3)----基础概念(下)

news2025/1/17 2:58:09

1、4种基本的时序路径

        下图是一张典型的FPGA与上游器件、下游器件通信的示意图:

 

        其可以划分为4条基本的数据路径,这4条路径也是需要进行时序约束的最基本路径。

(1)寄存器到寄存器

        路径2,FPGA内部的寄存器到另一个寄存器, 即reg2reg(寄存器到寄存器),需要对其进行约束以满足FPGA端寄存器的建立时间和保持时间要求。

        路径2约束的是FPGA内部源寄存器(起点)和FPGA内部目的寄存器(终点)的数据路径,其目的是要通过提供要求的方式来使得综合工具vivado满足所有FPGA内部寄存器的建立时间要求和保持时间要求。

(2)管脚到寄存器

        路径1,上游器件通过FPGA管脚到FPGA的寄存器的时序路径,即pin2reg(管脚到寄存器),需要对其进行约束以满足FPGA端寄存器的建立时间和保持时间要求。

        路径1约束的是上游器件的源寄存器(起点)和FPGA内部的目的寄存器(终点)的数据路径,其目的是要满足后端即FPGA内部寄存器的建立时间要求和保持时间要求。

        路径1可以视为是路径2的一种,只不过路径1的源寄存器和目的寄存器都在FPGA内部,而路径2的源寄存器在上游器件中。

(3)寄存器到管脚

        路径3,FPGA管脚到下游器件的寄存器的时序路径,即reg2pin(寄存器到管脚),需要对其进行约束以满足下游器件的寄存器的建立时间和保持时间要求。

        路径3约束的是FPGA内部的源寄存器(起点)和下游器件的目的寄存器(终点)的数据路径,其目的是要满足前端即FPGA内部寄存器的建立时间要求和保持时间要求。

        路径3同样可以视为是路径2的一种,只不过路径1的源寄存器和目的寄存器都在FPGA内部,而路径3的目的寄存器在下游器件中。

(4)管脚到管脚

        路径4,FPGA管脚到FPGA管脚的时序路径(不通过任何寄存器),其本质上是纯组合逻辑电路,仅仅需要将其值约束在一个指定范围,不需要满足建立时间和保持时间要求。

        路径4中不存在任何寄存器,通常都是纯组合逻辑或者走线延迟等,所以也就不需要满足寄存器的建立时间要求和保持时间要求。需要的仅仅是根据开发需求约束其延迟的最小值和最大值。


2、发射沿(Launch Edge)与锁存沿(Latch Edge)

        路径1、2、3实际上都是对寄存器到寄存器之间的数据路径之间的约束,而路径4则是约束纯组合逻辑。

        由于寄存器的采样往往都发生在时钟的边沿,所以目的寄存器采样的值实际上是上个时钟周期的源寄存器的值,也就是说在源寄存器与目的寄存器之间其采样时间相差一个时钟周期。

 

  • 发射沿(Launch Edge) :是源寄存器采样的时间点,也是时序分析路径的起点
  • 锁存沿(Latch Edge):是目的寄存器采样的时间点,也是时序分析路径的终点

3、数据到达时间(Data Arrival Time)

        由于2个寄存器之间存在的组合逻辑和走线延迟等,使得在发射沿采样到的数据需要一定的时间才能到达后级的锁存沿,这个时间就被称为数据到达时间(Data Arrival Time)。

        如上图,在计算数据到达时间时,存在3个时间参数:

  • Tclk1:时钟信号从起点到达源寄存器REG1的时钟端口的时钟网络延时,产生原因一般是走线延迟
  • Tco:源寄存器REG1内部的数据输出延迟,这个延迟时间是寄存器的固有属性,只和使用的FPGA芯片型号有关
  • Tdata:数据从源寄存器REG1输出Q端到下级目的寄存器REG2的数据输入D之间的延时,一般是组合逻辑器件产生的固有延时和走线延时

        根据上图可以算出数据到达时间:Data Arrival Time = launch edge + Tclk1 + Tco +Tdata


4、数据需求时间--建立时间(Data Required Time - Setup)

        时序约束的本质就是要满足所有寄存器的建立时间要求和保持时间要求,所以在数据经过一定的延迟从源寄存器到达目的寄存器后,同样需要满足目的寄存器的建立时间要求(Tsu)。

 

        如上图,在计算数据需求时间--建立时间时,存在2个时间参数:

  • Tclk2:时钟信号从起点到达目的寄存器REG2的时钟端口的时钟网络延时,产生原因一般是走线延迟
  • Tsu :在时钟有效边沿到达之间,输入数据必须保持不变的时间,这意味着上级寄存器的输入至少要在这之前就保持稳定

        根据上图可以算出: Data Required Time + Tsu = latch edge + Tclk2 ,即Data Required Time = latch edge + Tclk2 - Tsu

        数据需求时间--建立时间,实际上是一种对石中盐到来之前数据保持稳定的最极端时间要求。比如为了满足目的寄存器的建立时间要求,计算得到上级寄存器的输出必须至少在3ns之前即保持稳定,这也就意味着上级数据能到达的最晚时间是3ns,那么1ns、2ns到达自然是可以的。


5、数据需求时间--保持时间(Data Required Time - Hold)

        建立时间和保持时间是寄存器的2个固定需求属性,所以在数据经过一定的延迟从源寄存器到达目的寄存器后,同样需要满足目的寄存器的保持时间要求(Th)。

        如上图,在计算数据需求时间--保持时间时,存在2个时间参数:

  • Tclk2:时钟信号从起点到达目的寄存器REG2的时钟端口的时钟网络延时,产生原因一般是走线延迟
  • Th:在时钟有效边沿到达之后,输入数据必须保持不变的时间,这意味着上级寄存器的输入至少要在这之后才能发生变化

        所以可以算出: Data Required Time = latch edge + Tclk2 + Th


6、建立时间裕量(Setup Slack)

        数据需求时间--建立时间实际上是一种对数据到来之前保持稳定的最极端的时间要求,比如为了满足目的寄存器的建立时间要求,计算得到上级寄存器的输出必须至少在时间刻度3ns之前即保持不变,这也就意味着上级数据能到达的最晚时间是3ns,那么1ns、2ns到达自然是可以的。

        如果数据在1ns即到达了目的寄存器,那么建立时间裕量就是3ns-1ns = 2ns,那么这个裕量有什么作用呢或者说代表着什么?前面我们知道到寄存器之间可能会存在一段组合逻辑和走线延迟,如果你的设计中某2个寄存器之间的建立时间裕量是2ns,则意味着你还有空间去折腾,比如寄存器彼此之间还可以增加一些组合逻辑器件或者更长的走线。

        

        根据上图,可以算出: Setup Slack = Data Required Time – Data Arrival Time,即Setup Slack = (latch edge + Tclk2 - Tsu ) – (launch edge + Tclk1 + Tco +Tdata )= (latch edge - launch edge) -(Tclk1 - Tclk2 )- (Tsu  + Tco +Tdata)=  Tperiod  - Tskew - (Tsu  + Tco +Tdata)

        如果Setup Slack为正,则说明数据在规定的时间内达到了目的寄存器;反之,则认为数据并没有在规定的时间达到目标,此时REG2锁存的数据很有可能是亚稳态状态。


7、保持时间裕量(Hold Slack)

        数据需求时间--保持时间实际上是一种对时钟沿到来之后数据保持稳定的最极端的时间要求,比如为了满足目的寄存器的保持时间要求,计算得到上级寄存器的输出必须至少在时间刻度3ns之前都保持不变,这也就意味着上级数据能变化的最早时间是3ns,那么4ns、5ns到达自然是可以的。

        如果数据在5ns处才在目的寄存器发生了变化,那么保持时间裕量就是5ns-3ns = 2ns。

        

        根据上图,可以算出:Hold Slack = Data Arrival Time - Data Required Time,即Hold Slack = (latch edge + Tclk1 + Tco +Tdata)  - (latch edge + Tclk2 + Th)= (Tclk1 - Tclk2)-(Tco +Tdata + Th)- (latch edge - latch edge)= (Tco +Tdata - Th) + Tskew

        如果Hold Slack为正,则认为数据在被锁存的时候有足够多的稳定时间,是有效的;反之则认为数据可能是亚稳态状态。


8、总结

        搞明白了这些概念,那么静态时序分析其实也就很简单了。上文出现了很多的公式,看起来有点晦涩难懂,但是没关系,这些公示实际上仅仅是起到一个辅助理解时序分析的作用,并不需要去记忆,更也不需要熟练掌握这些公式来生搬硬套时序分析。因为现在的综合工具已经足够智能了,你只需要提出时序约束的要求,综合工具vivado自然会对这些路径一一进行计算,你所要做的仅仅是找到时序裕量为负的路径并想办法改善即可。

        此外,通过对上面公式的分析,可以让我们更好的了解静态时序分析的本质。

        根据上文有(1)和(2)两式:

  • 建立时间裕量:Setup Slack = Tperiod  - Tskew - (Tsu  + Tco +Tdata)----(1)
  • 保持时间裕量:Hold Slack = (Tco +Tdata + Th) + Tskew  ----(2)

        其中,Tperiod 是时钟周期;Tskew 是寄存器之间的时钟偏差,产生的原因是时钟到达不同的寄存器的时钟端口有延迟;Tsu 与 Th分别是寄存器的建立时间要求和保持时间要求,这是寄存器的固有属性,只和FPGA的型号相关;Tco 是从寄存器的输入端口到输出端口所需要的延时时间,同样是寄存器的固有属性;Tdata是寄存器之间的组合逻辑和走线延迟等之和,这与具体设计有关,平时我们大多都是通过减少Tdata来使得时间裕量为正,以此实现设计的时序收敛。

        Tskew实际上是一个可以被忽略掉的较小值,所以把它去掉,再对 (1)和(2)两式做变形(Slack>0需被满足),然后有(3)和(4)两式

  • Tperiod >(Tsu + Tco +Tdata)----(3)
  • (Tco +Tdata ) > Th ----(4)

        (3)式子中的(Tsu  + Tco +Tdata)代表数据从源寄存器到目的寄存器所消耗的时间,即(Tsu + Tco +Tdata)< Tperiod 表示数据从源寄存器的采样时刻传到目的寄存器的采样时刻,不能超过一个时钟周期。如果数据传输超过一个时钟周期,那么就会导致目的寄存器器开始采样的时候,从源寄存器出发的数据还没有传过来。

        对于(4)式可以两边同时加上Tsu  ,得到(5)式:

  • (Tco +Tdata + Tsu  ) > (Th + Tsu)   ----(5)

       (5)式子中的(Tsu  + Tco +Tdata)代表数据从源寄存器到目的寄存器所消耗的时间,(Th + Tsu)是建立时间和保持时间之和,即寄存器的采样窗口时间。那么(Tsu + Tco +Tdata) > Th + Tsu表示数据从源寄存器的采样时刻传到目的寄存器的采样时刻,至少要大于寄存器的采样窗口。假如数据传输时间不大于采样窗口,则意味着数据的传输是特别快的,有可能目的寄存器开始采样时,源寄存器的采样仍没有结束,如果这个时候输入端数据有变化,那么不仅源寄存器处于亚稳态,目的寄存器也将处于亚稳态!

        所以,数据传输延时既不能太大以至于超过一个时钟周期,也不能太小以至于小于触发器采样窗口的宽度。这就是静态时序分析的物理意义了。


  • 📣博客主页:wuzhikai.blog.csdn.net
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵
  • 📣您有任何问题,都可以在评论区和我交流📞!
  • 📣创作不易,您的支持是我持续更新的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

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

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

相关文章

[附源码]Node.js计算机毕业设计高校医疗健康服务系统的设计与实现Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【C++初阶】类和对象(下)再谈构造函数、static成员、C++11的成员初始化新玩法、友元类、内部类

文章目录再谈构造函数static成员C11的成员初始化新玩法友元类内部类再谈构造函数 1.构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 虽然上述构造函数调用之后&#xff0c;对象中已经有了一个初始值&am…

客户管理系统如何提升体验

数字化时代&#xff0c;客户与企业交互的触点爆炸式增长&#xff0c;客户体验正从单一触点走向端到端旅程。众多的产品、海量的数据&#xff0c;导致客户对体验的要求越来越多......CRM客户管理系统是企业提升客户体验的有效工具&#xff0c;它不仅可以帮助您进一步了解客户&am…

App自动化之dom结构和元素定位方式(包含滑动列表定位)

先来看几个名词和解释&#xff1a; dom: Document Object Model 文档对象模型dom应用: 最早应用于html和js的交互。界面的结构化描述&#xff0c; 常见的格式为html、xml。核心元素为节点和属性xpath: xml路径语言&#xff0c;用于xml 中的节点定位&#xff0c;XPath 可在 xml…

javaSE - 三个常用的接口(Comparable,Comparator,Cloneable)

1、Comparable 英 [ˈkɒmpərəbl] 美 [ˈkɑːmpərəbl] 可比较的;可比的;可比性;可比;可比较   2、Comparator 美 [kəmˈpɜrətər] n. 比较器&#xff0c;比色器&#xff0c;比较电路&#xff0c;比长仪&#xff0c;场强计 3、 Cloneable 可复制的 一、Comparable …

MySQL性能优化浅析

1. 硬件 1.1 CPU IO密集型&#xff0c;提升CPU核心数 计算密集型&#xff0c;提升CPU频率 1.2 磁盘 机械硬盘在随机访问时&#xff0c;由于受磁针移动速度的限制&#xff0c;性能会大幅降低。使用固态硬盘可以大幅提升随机访问的能力。按需选择。 1.3 其他 带宽、内存频…

Superset 安装配置

文章目录Superset 安装配置一、Superset 概述1. Superset简介2. 功能概述3. 支持的数据库二、Superset 环境部署步骤三、创建虚拟机&#xff0c;安装CentOS1.下载CentOS2.创建虚拟机3.编辑虚拟机设置4.安装centos7.9mini版本5.启动centos&#xff0c;并进行登录四、CentOS配置1…

小米(Android)刷NetHunter安装指南

一、安装NetHunter 前提&#xff1a;确保手机已经root&#xff0c;已装上magisk。如果没有root&#xff0c;可用尝试magisk root 后执行此文 1、下载Nethunter&#xff1a;Get Kali | Kali Linux 然后push 到sdcard 里&#xff0c; 2、打开magisk&#xff0c;选择刚刚下好的…

Windows下安装libtorch与Clion配置

Windows 安装和使用libtorch 1.下载libtorch libtorch的下载链接&#xff0c;如下图所示&#xff0c;libtorch有release和debug版本可以选择。为了方便调试&#xff0c;下debug版。电脑上没CUDA&#xff0c;下次有需要再更新吧。 2.libtorch使用 在Visual Studio的使用可以参…

云原生周刊 | 让 ChatGPT 以电子邮件的方式来解释 KubeSphere

过去的一周是 ChatGPT 的狂欢&#xff0c;我猜每一位云原生玩家都很好奇他是如何看待 Kubernetes 的。咱们不防换个方式来提问&#xff0c;让它使用电子邮件的方式来向别人推荐 KubeSphere 和 OpenFunction。 开源项目推荐 Tailscale Ingress Controller 这是针对 Tailscale …

【DevOps实战系列】第七章:详解Docker私服Harbor篇

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 Harbor私服搭建 讲完Nexus3再来看下harbor&#xff0c;其实大同小异&#xff0c;只不过harbor的管理要比Nexus3更专业、功能更完善&#xff0c;大家按需选择即可&#xff0c;Nexus的优势是他能和…

web网站工程项目前期需求分析与规划怎么写?

在当下&#xff0c;判断一份网站工程项目文档是否优秀&#xff0c;项目目录是最直接的体现&#xff0c;同时&#xff0c;工程说明、需求分析和项目规划各版块的内容都缺一不可。工欲善其事必先利其器&#xff0c;前期准备得越充分&#xff0c;后期就会越顺利。 本期&#xff0c…

Centos7安装图形化界面并使用Windows远程桌面连接(包含离线部署)

一、在centos7 中部署远程桌面所使用的程序 1、关闭防火墙和selinux(xrdp是通过3389端口远程桌面连接 ) [rootlocalhost ~]# systemctl stop firewalld #临时关闭防火墙 [rootlocalhost ~]# systemctl disable firewalld.service #永久关闭防火墙 [rootlocalhost ~]# setenf…

SpringMVC:SpringMVC之JSON数据传输参数(5)

JSON数据传输参数1 JSON数据传输参数2 JSON普通数组3 JSON对象数据4 JSON对象数组5 小结1 JSON数据传输参数 现在比较流行的开发方式为异步调用。前后台以异步方式进行交换&#xff0c;传输的数据使用的是JSON,所以前端如果发送的是JSON数据&#xff0c;后端该如何接收? 对于…

面试官:单体架构怎么向分布式微服务架构演变的?(8000字干货)

随着网站规模越来越大&#xff0c;单体应用往往很难再满足要求&#xff0c;就需要向分布式&#xff0c;微服务架构演变。 那么这个演变过程是怎么样的呢&#xff1f;都涉及到哪些组件&#xff0c;会遇到哪些问题&#xff0c;以及相应的解决方案都是什么&#xff0c;本篇文章就…

ESP 低功耗入门

此篇博客以 ESP32 为例来说明 ESP 的睡眠模式。 ESP32 芯片可以大致分成以为五个模块&#xff1a; RF 模块&#xff0c;也就是射频模块&#xff0c;用于蓝牙 / Wi-Fi 的收发(TX / RX)功能。CPU&#xff0c;如 Xtensa 内核 (ESP32 / ESP32-S2 / ESP32-S3)&#xff0c;RISC-V 内…

ssm项目-商城管理系统

1 逆向工程设计 1.1 xml文件配置&#xff08;generatorConfig.xml&#xff09; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"&q…

滑动窗口的最大值【滑动窗口问题】

文章目录题目解题思路代码展示题目 给定一个长度为 n 的数组 num 和滑动窗口的大小 size &#xff0c;窗口从最左边滑动到最右边&#xff0c;每次向右边滑动一个位置&#xff0c;找出所有滑动窗口里数值的最大值。 窗口大于数组长度或窗口长度为0的时候&#xff0c;返回空 数…

硬件需知知识 -- 基本元件(电阻)

一、电阻 1.1 贴片电阻 1.1.1 贴片电阻的封装大小是和功率时相关的。 封装大小功率(W)0201120\frac{1}{20}201​0402116\frac{1}{16}161​0603110\frac{1}{10}101​080518\frac{1}{8}81​12060.2518120.5或1201012\frac{1}{2}21​25121或者21.1.2 贴片电阻读数 贴片电阻的读数…

Spring Security 竟然可以同时存在多个过滤器链?

目录Spring Security 中的过滤器多个过滤器链多个过滤器链配置例子http.authorizeRequests() 开头是什么意思&#xff1f;引用Spring Security 中的过滤器 Spring Security 中认证、授权功能的实现机制是通过过滤器来实现的。Spring Security 中一共提供了 32 个过滤器&#x…