时序分析基础(6)——input delay时序分析

1 简介

  FPGA对于外部的时钟以及数据的延时信息是不知道的,在低速时钟且时钟发射沿在数据正中心的时候,一般可以不做约束来直接使用。但是到了高速时钟或者双沿采样或者发射沿和数据对齐的情况下,这时候就需要告诉VIVADO外部的时钟与数据情况来让VIVADO分析能否满足建立时间与保持时间。INPUT约束仅仅只是告诉VIVADO外部的时钟情况,而内部的布局布线并不会因此改变。

2 INPUT模型

在这里插入图片描述

  上图两个图是外部时钟的两种模型,一种是源同步模型,源同步模型是指时钟给上游芯片,芯片发出时钟与数据给FPGA,这样的好处是时钟和数据同源,有利于时序分析。另一个是系统同步的FPGA输入模型,时钟分别给上游器件和FPGA,这种不好分析FPGA端口的数据与时钟关系,不利于时序约束。现在电路一般采用源同步模式,所以一般情况下只分析源同步模式。
  上游器件一般都是数据采集器件,如AD转换芯片,摄像头芯片。然后通过PCB走线进入到FPGA内部,其中,对于VIVADO来说,FPGA内部的延时是已知的,但是不知道外部数据与时钟的关系,这个时候就需要对外部的时钟以及数据进行约束来告诉FPGA时钟与数据的关系来看是否能正确采集到数据。
  外部的时钟与数据的延时一般情况下包含两个部分,一个是芯片在发射数据的时候,时钟与数据之间的时间延时,另一个就是数据与时钟在PCB走线的时候经过的延时,一般情况下,PCB在布线的时候数据和时钟会做等长设计,这里我们就先不考虑PCB延时。
  源同步模型如下:
在这里插入图片描述
  时钟给上游器件,然后上游器件发出时钟与数据经过PCB走线进入FPGA。这里我们主要分析的就是时钟的采样沿与数据到来的时间,这两个参数是需要给到VIVADO的。我们来在前面的基础上继续分析这个模型的数据实际到达时间与数据要求到达时间。
  数据实际到达的时间有:
D a t a    a r r i v a l    t i m e = T c o + T d _ b d + T d _ f i (1) Data \;arrival\;time=T_{co}+T_{d\_bd}+T_{d\_fi}\tag{1} Dataarrivaltime=Tco+Td_bd+Td_fi(1)
  数据要求到达的时间有:
D a t a    R e q u i r e    a r r i v a l    t i m e = T c y c l e + T c _ d + T c _ b d + T c _ f i − T s u (2) Data\;Require\;arrival\;time=T_{cycle}+T_{c\_d}+T_{c\_bd}+T_{c\_fi}-T_{su}\tag{2} DataRequirearrivaltime=Tcycle+Tc_d+Tc_bd+Tc_fiTsu(2)
  建立时间裕量有:
S e t u p    S l a c k = D a t a    R e q u i r e    t i m e − D a t a    a r r i v a l    t i m e   = T c y c l e + T c _ d + T c _ b d + T c _ f i − T s u − ( T c o + T d _ b d + T d _ f i ) (3) Setup \;Slack= Data \;Require\;time-Data \;arrival\;time\\ \,\\\qquad\qquad\qquad=T_{cycle}+T_{c\_d}+T_{c\_bd}+T_{c\_fi}-T_{su}-(T_{co}+T_{d\_bd}+T_{d\_fi})\tag{3} SetupSlack=DataRequiretimeDataarrivaltime=Tcycle+Tc_d+Tc_bd+Tc_fiTsuTco+Td_bd+Td_fi(3)
  由于数据一般是多bit并行输出的,且输出的时间与时钟并不是固定的延时,所以一般情况下, T c o T_{co} Tco T d _ b d T_{d\_bd} Td_bd存在一个最大最小值,在分析建立时间裕量的时候,从公式中可以看出当数据延时取最大值的时候,建立时间裕量最小。
  下面是保持时间分析:
  数据实际结束的时间有:
D a t a    f i n i s h    t i m e = T c o + T d _ b d + T d _ f i + T c y c l e (4) Data \;finish\;time=T_{co}+T_{d\_bd}+T_{d\_fi}+T_{cycle}\tag{4} Datafinishtime=Tco+Td_bd+Td_fi+Tcycle(4)
  数据要求结束的时间有:
D a t a    R e q u i r e    f i n i s h    t i m e = T c y c l e + T c _ d + T c _ b d + T c _ f i + T h (5) Data\;Require\;finish\;time=T_{cycle}+T_{c\_d}+T_{c\_bd}+T_{c\_fi}+T_{h}\tag{5} DataRequirefinishtime=Tcycle+Tc_d+Tc_bd+Tc_fi+Th(5)
  保持时间裕量有:
H o l d    S l a c k = D a t a    R e q u i r e    f i n i s h    t i m e − D a t a    f i n i s h    t i m e   = T c o + T d _ b d + T d _ f i + T c y c l e − ( T c y c l e + T c _ d + T c _ b d + T c _ f i + T h ) (6) Hold \;Slack= Data \;Require\;finish\;time-Data \;finish\;time\\ \,\\\qquad\qquad\qquad=T_{co}+T_{d\_bd}+T_{d\_fi}+T_{cycle}-(T_{cycle}+T_{c\_d}+T_{c\_bd}+T_{c\_fi}+T_{h})\tag{6} HoldSlack=DataRequirefinishtimeDatafinishtime=Tco+Td_bd+Td_fi+TcycleTcycle+Tc_d+Tc_bd+Tc_fi+Th(6)
  从公式中可以看出当数据延时取最小值的时候,保持时间裕量最小。

3 INPUT时序约束

  上游器件的时钟和数据一般有两种关系,一种是时钟发射沿和数据的起始对齐,另一种是时钟的发射沿与数据的保持时间中心对齐。一般情况下,数据在两个采样沿中心的时候,对于FPGA是时序最好的时候,而时钟的发射沿与数据对齐的时候,时序最容易出现违例的情况,而且建立时间和保持时间都有可能出现违例。
  input delay 描述的是发射沿与数据的起始位之间的关系。

3.1 input delay 中心对齐

在这里插入图片描述
  当时钟的发射沿与数据的正中心对齐时,这时候的只需要在时序约束中填上数据正中心的发射沿分别距离数据最小以及最大的延时即可,例如一个占空比50%的50MHz时钟,数据采用中心对齐的方式发送,数据的最小以及最大延时均为2ns,那么就要在时序约束的时候约束数据距离时钟的上升沿为8ns和12ns,采样时钟为上升沿。具体的时序约束在最后做,这里先略过。

3.2 input delay 边沿对齐

在这里插入图片描述
  上图是就是边沿对齐的传输方式,这种方式下就会有一个问题,时钟的发射沿相对于数据的延时时多少?

3.2.1 发射时钟与数据起始位对齐

  当将发射时钟与数据起始位对齐时,时序较容易出现保持时序违例,此时的约束里面应该填的就是±2ns,此时看时序报告,是非常容易出现违例的。
  当发射时钟比数据起始位快一个时钟的时候,此时的时序约束就应该填写18ns和22ns。此时看时序报告,时序报告最有可能出现建立时序违例。为什么会出现这种情况呢,首先需要搞明白当我们把最大最小的延时给到VIVADO后,VIVADO是怎么分析的。
在这里插入图片描述
  如图所示,当对时钟进行约束时,假设填的参数中最大最小延时的参考是发射沿与数据起始沿1,那么VIVADO就会默认采样沿采集的数据是数据起始沿1到数据起始沿2之间的数据,假如进入FPGA后时钟比数据快,建立时间能满足要求,但是保持时间不能满足;假如数据比时钟快,数据必须比时钟快2ns+保持时间门限以上保持时间才能满足保持时间的要求。
  假设填的参数中最大最小延时的参考是发射沿与数据起始沿12,那么VIVADO就会默认采样沿采集的数据是数据起始沿2后的一个数据,假如进入FPGA后时钟比数据快,即时钟左移,建立时间一定不能满足要求,但是保持时间能满足;假如数据比时钟快,即时钟右移,保持时间能满足要求,除非数据快2ns+建立时间门限,不然还是违例状态。
  综上所述,在发射沿与数据对齐的时候,一般时序较难满足,会用一些其他方式来调整时序以达到时序收敛。如PLL来调整时钟,或者原语来调整数据。

3.3 PLL调整input delay

  加入PLL后,即使不设置相移,时钟都会出现移相,一般情况下是时钟左移,在时序分析中经过PLL时序会有负数。加入在调节PLL左移,也就是负相的话不需要multicycle设置,而正相移动则需要multicycle设置。

3.4 DDR的input delay

  前面都是单沿采样,也就是都是上升沿采样,但是在实际中会有双沿采样的时候,也就是上升沿与下降沿都发射与采集数据。这时候就需要多做一组时序约束,用来约束下降沿的时序。

4 VIVADO的input delay约束

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Meachines][Medium]IClean

Main $ nmap -p- -sC -sV 10.10.11.12 -Pn --min-rate 1000 $ echo "10.10.11.12 capiclean.htb">>/etc/hosts 这题可能和python的SSTI有关 $ gobuster dir --url "http://capiclean.htb" --wordlist /usr/share/seclists/Discovery/Web-Content/c…

授权协议OAuth 2.0之通过OIDC实现SSO

写在前面 本文来一起看下OIDC(openid connect)相关内容。 1:什么是OIDC OIDC的全称是openid connect,和OAuth2.0一样,也是属于协议和规范的范畴。OAuth2.0是一种授权协议,即规定了what you can do的内容…

2024 证券从业资格证考试备考资料分享

2024 证券从业资格证考试备考资料分享 2024 年 06月1、2日 证券从业资格考试全国统一考试(统考),预计将于5月初(考前一个月)左右开启报名 有没有小伙伴在准备备考的,不知道大家都准备怎么学习呢&#xff…

前端css中keyframes(关键帧)的简单使用

前端css中keyframes的使用 一、前言二、例子(一)、例子源码1(二)、源码1运行效果1.视频效果2.截图效果 三、结语四、定位日期 一、前言 关键帧keyframes是css动画的一种,主要用于定义动画过程中某一阶段的样式变化&am…

【小白误闯】这可能是对 Tomcat 工作原理解释最详细的文章

脑子一闪而过,当年 V 哥在面试 Java 开发时,被问到让你写一个 Tomcat 服务器,你有什么想法?尼码,面试官摆明是在压工资了,你得逞了,我回答不上来,当时也没研究过 Tomcat 的源码&…

Codeforces Round 940 E. Carousel of Combinations 【威尔逊定理】

题意 给定一个正整数 n n n,定义 C ( i , j ) C(i, j) C(i,j) 为:从 ( 1 , 2 , 3 , . . . , i ) (1,2,3,...,i) (1,2,3,...,i) 中选出 j j j 个不同的数,构成一个圆排列的不同的方案数 求出: ∑ i 1 n ∑ j 1 i ( C ( i ,…

STM32的GPIO控制寄存器开发

寄存器GPIO控制 寄存器地址 寄存器地址计算 某个寄存器地址,由三个参数决定:1、总线基地址(BUS_BASE_ADDR);2,外设基于总线基地址的偏移量(PERIPH_OFFSET);3&#xff…

Linux系统CPU持续飙高,如何排查

若一台服务器CPU使用率持续处于一个高峰值,可能导致如:无法ssh链接、操作卡顿、用户访问超时等问题 1.查看CPU使用情况 top命令常用于分析内存指标使用情况 htop命令更直观于top 当CPU达到70%-80%以上时,使用率已过高需要处理 2.找出CPU占…

C++ Qt QMainWindow实现无边框窗口自定义标题栏可拖拽移动拉伸改变窗口大小

本篇博客介绍C Qt QMainWindow实现无边框窗口,适用于win10/win11系统。 QMainWindow相对于QWidget多了dockedwidget功能,跟多人可能更喜欢用QMainWindow做主窗口,如果不需要dockedwidget功能,QMainWindow与QWidget做主窗口基本无…

一款新型的Linux服务器管理工具

最近发现了一款新型的Linux服务器管理工具,名称叫1Panel,本文跟大伙分享一下。 一. 产品介绍 1Panel 是一个开源的 Linux 服务器运维管理面板,具有丰富的功能,可对服务器和容器进行管理。 产品提供简洁直观的We图形界面&#x…

如何使用RRT模式进行交易,昂首资本实例讲解

在上篇文章中,昂首资本用一篇文章讲解了,如何使用RRT模式进行交易以及背后的原理。如果没有看到的各位投资者可以往前翻一下,当然了也有投资者提到了新的问题,那就如何使用,今天昂首资本就用下面有几个例子实例讲解&am…

【C++】---STL之list详解

【C】---STL之list详解 一、了解list的基本信息二、成员函数1、构造2、迭代器3、empty()4、size()5、front()6、back()7、push_front()8、pop_front()9、push_back()10、pop_back()11、insert()12、erase()13、swap()14、sort()15、reverse() 一、了解list的基本信息 1、库里面…

windows查看xxx的版本号

node -v python --version redis-server --version java -version go version mvn -version git --version

【python】随机模拟——赶火车问题、醉汉回家

问题描述 1.赶火车问题。2.模拟二维随机游动(醉汉回家) 1.赶火车问题。 一列列车从A站开往B站,某人每天赶往B站上车。他已经了解到火车从A站到B站的运行时间是服从均值为30min,标准差为2min的正态随机变量。火车大约下午13&#…

Linux 深入理解Linux文件系统与日志分析

在Linux系统中,文件名和文件数据是分开存储的 文件数据包含 元信息(即不包含文件名的文件属性) 和 实际数据 文件元信息存储在 inode(索引节点)里, 文件实际数据存储在 block(块)里; 文件名存储在目录块里 查看文件的元信息 stat 文件名 [ro…

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion 基于函数计算FC2.0部署AI数字绘画stable-diffusion基于函数计算FC3.0部署AI数字绘画stable-diffusion总结 在经过了上一次曲线救国失败经历之后,失败经历参考博文:https://developer.aliyun.c…

C++ —— 继承

什么是继承? 继承是指一种代码可以被复用的机制,在一个类的基础上进行扩展,产生的新类叫做派生类,被继承的类叫基类。(也可称为子类和父类) 继承的写法: class B : 继承方式 A (…

MCU功耗测量

功耗测量 一、相关概念二、功耗的需求三、测量仪器仪表测量连接SMU功能SMU性能指标 四、功耗测量注意点板子部分存在功耗MCU方面,可能存在干扰项仪器仪表方面 一、相关概念 静态功耗和动态功耗:动态功耗为运行功耗,功耗测量注重每MHz下的功耗…

智能调度|AIRIOT智能车队管理解决方案

客运、货运、汽车租赁、出租运营等行业对车辆管理、车队管理以及司乘人员的管理方式,逐渐向数字化和智能化转型。传统的依赖人工调度、记录和跟踪的管理模式已经难以满足业务发展需要,存在如下痛点: 实时监控与定位功能弱:无法实时…

实验4 数字频率计

实验目的: 1、使用铆孔U7输出一个脉冲,频率不定。 2、使用铆孔V7测量脉冲频率,并在数码管上显示。 实验内容及步骤: 设计原理 测量频率的方法有很多,按照其工作原理分为无源测量法、比较法、示波器法和计数法等。…
最新文章