上篇博文讲了输入延迟约束( Input Delay Constraints):输入延迟约束(Constraining Input Delay)

这篇博文讲解具体的实例,通过实例去学习是最有效果的。

实例1

如图1所示系统,以太网PHY芯片与FPGA相连,分为三组接口:

  RX接口:时钟RXCK和数据RXD

 TX接口:时钟TXCK和数据TXD

  MII管理接口:时钟MDC和数据MDIO

(图1)

其中RX接口属于源同步输入接口,以下就以RX接口为例讲解一下约束input delay

Clock Constraints

首先约束时钟,如图2所示为PHY(DP83849ID)在100Mb/s模式下的时序图,时钟和数据为Center Aligned关系,因此时钟在FPGA中无需再移相,可直接使用RXCK采集数据,时钟约束如下:

create_clock –name RXCK –period 40 –waveform {0 20} [get_ports {RXCK}]

(图2)

​​​​​​​Input Delay Value

       根据上节中源同步输入计算Input Delay的公式:

       max_input_delay = Tbd_max + Tco_max - Tcd_min

       min_input_delay = Tbd_min + Tco_min - Tcd_max

 Tbd为数据线RXD在板上的延时,也就是信号在电路板上的传播时间。查找了网上的一些资料:

“信号速度还与不同材料的介电常数相关,具体计算公式是   V=C/Er0.5    ,其中Er是信号线周围材料的相对介电常数。我们常见的PCB材料Fr4的介电常数在4.2-4.5左右,为了计算方便我们取4。带入公式可以算出,Fr4材料制作的PCB板上面信号的传输速度是光速的二分之一。光速大约等于12inch/ns,计算得出Fr4板上信号速度大约是6inch/ns。换算成延时,也就是166ps/inch。这就是我们经常说的PCB板上信号延时大约是166ps/inch

在此例中,通过PCB设计软件计算得到RXD[3:0]的走线长度,分别是LRXD[3]=426mil,LRXD[2]=451mil,LRXD[1]=502mil,LRXD[0]=406mil,因此可以计算得到:

       Tbd_max = 502mil * 166ps/inch = 0.083332ns

       Tbd_min = 406mil * 166ps/inch = 0.067396ns

Tcd为时钟线RXCK在板上的延时,走线长度LRXCK=399mil,因此可以计算得到:

       Tcd_max=Tcd_min=399mil * 166ps/inch = 0.066234ns

Tco为RX接口clock_to_output时间,如图2中,等于T2.5.2时间参数,因此可得到:

       Tco_max = 30ns

       Tco_min = 10ns

       综上:

  max_input_delay = Tbd_max + Tco_max - Tcd_min = 0.083332ns + 30ns - 0.066234ns = 30.017098ns

 min_input_delay = Tbd_min + Tco_min - Tcd_max = 0.067396ns + 10ns - 0.066234ns = 10.001162ns

​​​​​​​Constraints

  很显然,RX接口为SDR,时钟约束和input delay值的计算后,可以对input delay进行约束,命令如下:

set_input_delay -clock[get_clocks RXCK] -max 30.017098[get_ports {RXD[3] RXD[2] RXD[1] RXD[0]}]

set_input_delay -clock[get_clocks RXCK] -min 10.001162[get_ports {RXD[3] RXD[2] RXD[1] RXD[0]}]

       在Vivado的GUI界面中也可以进行约束,设计经过综合实现后,打开编辑约束文件,如图3所示

(图3)

选择Set Input Delay,在右侧双击,可弹出Input Delay设置窗口,如图4所示

(图4)

在弹出的Input Delay窗口中设置参数,如图5所示,Input Delay约束完成。

(图5)

实例2

在实例1中,如图1所示,对RX接口进行了约束。另外MII管理接口,其中MDIO是双向数据接口,肯定需要input delay的约束

(图1)

 最初以为MII接口属于源同步输入,但是仔细查看后发现不对劲儿,时钟MDC并不是由PHY提供的,而是FPGA输出给PHY的,这与源同步接口的定义矛盾,源同步需要时钟和数据来自同一个源。因此只能划分到系统同步输入范畴了,仔细一想还是能说得通的,系统同步中只要求source clock和destination clock来自同一个时钟网络即可,不管是在FPGA外部还是内部,如图2所示,

(图2)

系统同步输入的input delay value计算公式如下:

       max input delay = Tclkd_ext_max + Tco_max + Tbd_max – Tclkd_int_min

        min input delay = Tclkd_ext_min + Tco_min + Tbd_min – Tclkd_int_max

此例的情况,时钟源到FPGA输入端口的延时Tclkd_int等于0,时钟源到外部芯片的延时为TCD,因此得到变化后的公式如下:

       max input delay = TCD_max + TCO_max + TBD_max

         min input delay = TCD_min + TCO_min + TBD_min

各时间参数的计算如下:

   TCD :时钟线MDC在板上的长度LMDC=489mil,TCD_max= TCD_min=489mil*166ps/inch= 0.081174ns

   TBD:数据线MDIO在板上的长度LMDIO=634mil,TBD_max= TBD_min=634mil*166ps/inch= 0.105244ns

   TCO:  参考PHY(DP83849ID)的手册,如图3所示,TCO等于时间参数T2.3.1,得到TCO_max=30ns,TCO_min=0ns

图3

得到input delay值如下:

  Max_input_delay = TCD_max + TCO_max + TBD_max

=0.081174ns+30ns+0.105244ns=30.186418ns

 min input delay  = TCD_min + TCO_min + TBD_min

=0.081174ns+0ns+0.105244ns=0.186418ns

       综上,MII管理接口的约束如下:

create_clock –name MDC –period 400 –waveform {0 200} [get_ports {MDC}]

set_input_delay -clock[get_clocks MDC] -max 30.186418[get_ports {MDIO}]

set_input_delay -clock[get_clocks MDC] -min 0.186418[get_ports {MDIO}]

       在Vivado中的约束如图4,5所示:

图4、5、6

【 Vivado 】输入延迟约束实例相关推荐

  1. TIMING_06 VIVADO环境下的时序约束 之 输入延迟约束

    由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/ ...

  2. (50)IO的延迟约束(输入延迟约束)

    (50)IO的延迟约束(输入延迟约束) 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)IO的延迟约束(输入延迟约束) 5)技术交流 6)参考资料 2 时序约束引言 1 ...

  3. 【 Vivado 】输入延迟约束(Constraining Input Delay)

    前几篇博文提到了四种时序路径:基本的时序约束.分析的概念 1)      FPGA内部时序单元间的路径 2)      输入端口到FPGA内部时序单元的路径 3)      FPGA内部时序单元到输出 ...

  4. 【 Vivado 】输出延迟约束实例

    Output Delay Constraints Instance 本节讲解一下output delay的实例.依旧是Ethernet PHY和FPGA的接口,框图如图1所示,其中TX接口,MII管理 ...

  5. Vivado时序约束之—— set_max_delay、set_min_dealy(最大最小延迟约束)

    set_max_delay.set_min_delay(最大.最小延迟约束) 1. set_max_delay.set_min_delay约束的目的 最大最小延迟约束主要是为了解决异步信号之间的时序路 ...

  6. 主键约束、外键约束、唯一约束、检查约束、默认值约束实例

    http://xinxinyin666.i.sohu.com/blog/view/226237927.htm 主键(primary key)约束.外键(foreign key)约束.唯一(unique ...

  7. (10)Vivado 异步时钟约束

    (10)Vivado 异步时钟约束 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado 异步时钟约束 5)技术交流 6)参考资料 2 时序约束引言 1)什么是 ...

  8. oracle非延迟约束,Oracle可延迟约束Deferable的使用

    标准规定,约束可以是deferrable或not deferrable(默认). not deferrable 约束在每一个DML语句后检查: deferrable 约束可以在每一个insert,de ...

  9. 小梅哥FPGA时序分析和约束实例演练课程

    看过了他的nios课程,对他的能力很认同 只有前5讲是开源的,后面需要在淘宝上购买,暂时用不到,我就没有买课程,只看了前5讲感觉还挺有用,需要的时候再说吧. 小梅哥 FPGA时序分析 FPGA时序约束 ...

最新文章

  1. 如何关闭事件跟踪程序
  2. 那些做了多少次错了多少次的题目
  3. FileZilla 连接不上虚拟机 ubuntu
  4. windows电脑制作mac os u盘重装系统_图文演示u盘重装系统步骤
  5. 简述enumerate函数
  6. 网络模块优化方案(1)——封装网络框架
  7. 过去几小时,以太坊2.0信标链主网超过75位验证者被Slash罚款
  8. elfutils库交叉编译
  9. (转) EF三种编程方式的区别Database first ,Model first ,code first
  10. 冰点下载器手机版apk_冰点下载器安卓版下载
  11. lin接口 连接计算机,db9接口(lin接口db9定义)
  12. 通过配置ant提高EJB开发效率
  13. 常见的二十种软件测试方法详解(史上最全)
  14. 树莓派4b安装Android TV 10
  15. java反射类型转换_Java反射探索研究(转)
  16. 凡科php项目模块,如何创建一个DouPHP新模块
  17. 金融时间序列分析:5. AR模型实例(Python)
  18. 计算机服务里打印设置在哪,电脑打印页面设置在哪
  19. android 键盘码表,键盘码表,键盘扫描码,ASCII码
  20. 悟透JavaScript _转载

热门文章

  1. Mahout分布式推荐引擎介绍
  2. POJ 2186 Popular Cows
  3. 最长递增子序列问题的求解
  4. java android 数组_android中数组的定义与使用
  5. java键盘输入运算符_Java基础学习-三元运算符和键盘录入的基本步骤和使用
  6. java 约瑟夫问题 链表_【链表问题】环形单链表约瑟夫问题
  7. 怎么解决tomcat占用8080端口问题图文教程 端口被占用
  8. otto android,Albert otto
  9. 服务器otter部署-实现MySql数据同步
  10. 第十六届全国大学生智能汽车竞赛航天智慧物流总决赛暨第二届“航天杯”移动机器人AI创新技术挑战赛圆满举办