需求问题:需要使用3个GPIO实现相同的脉冲信号,三个信号之间的上升沿时延不能超过200ps。

测试环境:ZYNQ7020的黑金开发板
测试过程:
代码:

module gpio_jitter_test   (input                               clk_osc             ,   //50Moutput                              ld_0                ,output                              ld_1                ,output                              ld_2
);wire                                clk;reg     [9:0]                       counter = 4'h0;(* dont_touch="true" *) reg                                 ld;assign ld_0                         = ld;assign ld_1                         = ld;assign ld_2                         = ld;BUFG BUFG_inst (.O(clk              ), // 1-bit output: Clock output.I(clk_osc          )  // 1-bit input: Clock input);always @(posedge clk) begincounter                         <= counter + 1'b1;endalways @(posedge clk) beginif (counter<10'h2) beginld                          <= 1'b1;endelse beginld                          <= 1'b0;endendendmodule

开始选择了三个GPIO管脚约束,其他未加任何约束。时序很不好。
开启约束之路:
方法一:
(1) 将管脚配置为fast模式
set_property SLEW FAST [get_ports ld_0]
set_property SLEW FAST [get_ports ld_1]
set_property SLEW FAST [get_ports ld_2]
改观不大,更多是影响管脚上的上升沿和下降沿敏感性,对相互之间的延时没有太大影响。
(2) 布局中发现,寄存器进行了备份
(3) 加上don’t touch,避免寄存器复制

延时集中于寄存器输出至管脚的obuf之间,ld0和ld1相互之间的延时133ps,ld2和ld1延时在228ps。由于ld2管脚距离ld1之间过远。

(4) 由于U21下方的管脚没有在开发板上接出来,没办法精确测量;将三个管脚改为U12,U11,U10。


由此可见,虽然管脚相邻,但是走线的长度差距还是很大,导致延时超过300ps。

(5) 添加max_delay和min_delay,三个管脚的max_delay 为4.6ns,min_delay为4.5ns。max_delay选择为datapath。

set_max_delay -datapath_only -from [get_pins ld_reg/C] -to [get_ports ld_0] 4.600
set_max_delay -datapath_only -from [get_pins ld_reg/C] -to [get_ports ld_1] 4.600
set_max_delay -datapath_only -from [get_pins ld_reg/C] -to [get_ports ld_2] 4.600set_min_delay -from [get_pins ld_reg/C] -to [get_ports ld_0] 4.500
set_min_delay -from [get_pins ld_reg/C] -to [get_ports ld_1] 4.500
set_min_delay -from [get_pins ld_reg/C] -to [get_ports ld_2] 4.500


测试结果:

测了三组上升沿之间的差值分布数据:
1) ld_1 - ld_0 -130ps
2) ld_1 – ld_2 -250ps
3) ld_2 – ld_0 +50ps

结果分析:
从时序报告中,ld_0 最后一步走线delay是4.546ns,ld_1最后一步走线delay是4.663ns,ld_2的delay是4.535ns。
所以,理论值分析
1) ld_1 - ld_0 = (-4.663)-(-4.546)=117ps
2) ld_1 – ld_2 = (-4.663)-(-4.535)=128ps
3) ld_2 – ld_0 = (-4.535)-(-4.546)=11ps

由上面数据分析,第二组测试结果偏差较大,原因可能是ld0和ld1是一对差分线,ld2是另外一对差分线,ld0和ld1走线的长度一致,但是ld2走线不同,但是和ld0 ld1差值有些过大,问题在哪??

跟FAE交流后,发现在FPGA的管脚上存在pin delay,这个并不在时序报告中(pin delay不在时序报告中体现)。如何导出pin delay?tcl命令行中:
输入 link_design –part xc7z020i-clg484; write_csv filename
会输出7020的pin delay文件,如下图

因此三个管脚的delay应该是:
Delay(ld0) = -(4.546+210.804/1000)=-4.756ns
Delay(ld1) = -(4.663+217.94/1000)=-4.881ns
Delay(ld2) = -(4.535+79.947/1000)=-4.615ns
1) ld_1 - ld_0 = (-4.756)-(-4.881)=-125ps
2) ld_1 – ld_2 = (-4.881)-(-4.615)=-266ps
3) ld_2 – ld_0 = (-4.615)-(-4.756)=141ps
与实际测量值比较
测了三组上升沿之间的差值分布数据:
1) ld_1 - ld_0 -130ps
2) ld_1 – ld_2 -250ps
3) ld_2 – ld_0 +60ps

从这个结果中,假设ld0与ld1的板上pcb布线延时为x,ld2板上布线延时为y,则理论值计算中:
4) ld_1 - ld_0 = (-4.756-x)-(-4.881-x)=-125ps
5) ld_1 – ld_2 = (-4.881-x)-(-4.615-y)=-(266+x-y)ps
6) ld_2 – ld_0 = (-4.615-y)-(-4.756-x)=(141+x-y)ps
由1) 2) 4)5)可解出 x-y=-21ps,带入6)则 ld2-ld0=120ps, 由于1)与4),2)与5)之间存在测量的误差,这部分可能引入到计算中,因此包含了20ps左右的误差,这样看来,理论值与测量值的差距为120-60-20=40ps,与实际测量值偏差还是有些大。
这个原因就不好找了,可能由于手抖的测量问题,也可能是ld0与-ld1的实际pcb走线并不相等,差别还是客观存在的。再次不再深入分析。

方法一结论:
方法一,当前FPGA可以满足3个GPIO信号之间200ps(FPGA内部)的时延范围。
需要注意的问题:
1) 工程阶段,需要根据实际逻辑情况进行约束,会增加工程测试时间;
2) 3个GPIO一定要选择在FPGA管脚的物理上相邻位置,同时要查询pin_delay的表格找到delay相近的三个管脚,最好上下各空出一个io管脚,保证管脚附近有充足的布线资源和寄存器资源,这一点非常重要;
3) 由于逻辑确定后,FPGA走线延时可以确定,因此可以对此进行一定的校正。

方法二、
跟FAE沟通后,又提供了一种思路,使用OBUF中的寄存器。这意味着ld信号出来之后是在各个GPIO的管脚位置开始分叉,用各自的寄存器驱动相应的pad。时延就变成了两个因素影响:(1)各个GPIO寄存器的clock skew;(2)各个GPIO寄存器与pad的之间的pin delay+logic delay+net delay(时延非常小)。
步骤:
(1) 代码中删除don’t touch
(2) 约束文件中增加:set_property IOB TRUE [get_ports ld_?]
(3) 增加到8个ld接口,方便观察时序变化情况。

布局布线后,发现每一个之前OBUF附近的寄存器都使用起来了,ld_reg复制了多份。旧的布局(方法一中布局)如下图:

新的布局如下图:

时序情况如下:

可以看到各个GPIO之间的延时大概差别在200ps以内。

方法二结论:
方法二,当前FPGA可以满足3个GPIO信号之间200ps(FPGA内部)的时延范围。

最终总结!!
两种方法:
1) 使用max_delay, min_delay配合don’t touch进行约束,对于资源不紧张时候可以尝试,延时控制范围更好。
2) 使用IOB TRUE 进行约束,对于资源紧张是可以使用,也能够达到200ps要求,但是延时基本固定(因为OBUF的寄存器与pad的布线是固定的)。

GPIO的同步性约束相关推荐

  1. ZYNQ基本使用(2) GPIO的使用

    目录 GPIO使用 Zynq GPIO简介 硬件系统 添加MIO和EMIO 添加AXI GPIO 管脚约束 软件系统 MIO和EMIO AXI_GPIO 备注 参考 GPIO使用 Zynq GPIO简 ...

  2. 时序约束方法及解决timing问题的方法(一)

    承接上一篇文件< 基于xilinx FPGA验证ASIC可能遇到的timing问题>中提到的问题,本文列数一下在vivado中可能用到的约束方法和面对timing问题的解决办法. (1)详 ...

  3. 从VHDL到UVM验证平台转变的优点评估

    路科验证官网:路科验证 - 专注于数字芯片验证的系统思想和前沿工程领域 EETOP路科首页: EETOP - 路科验证 - IC验证培训 CSDN路科首页:CSDN - 路科验证 - IC验证培训 由 ...

  4. ZYNQ 的三种GPIO :MIO EMIO AXI_GPIO

    学了zynq一段时间,一上来的时候就被zynq的GPIO唬住了,实在没搞清楚zynq的GPIO怎么回事,一会这样,一会那样,最后才慢慢发现zynq至少有3种GPIO可以调用.难怪我觉得每篇介绍GPIO ...

  5. zynq学习03 zynq中三种实现GPIO的方式

    http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...

  6. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED

    在pg144-axi-gpio(LogiCORE IP Product Guide)中可以看见AXI GPIO提供通用输入输出接口到AXI接口,32位软核,设计与AXI4-Lite接口进行连接.IOP ...

  7. ZYNQ之GPIO机制

    目录 一.简介 二.MIO 三.EMIO 四.AXI GPIO 五.相关函数介绍 1.MIO / EMIO ① GPIO配置以及初始化 ②GPIO操作函数集 2.AXI GPIO ① GPIO配置以及 ...

  8. STM32 TIM PWM高阶操作:刹车及状态约束

    STM32 TIM PWM高阶操作:刹车及状态约束 刹车及状态约束是STM32 TIM PWM控制里面比较复杂的一部分,涉及到PWM波形产生前,中,后的管脚状态输出. 这里先引入两个描述,一个是&qu ...

  9. ZYNQ7000系列入门之GPIO点灯

    文章目录 ZYNQ AC7020 一.简介 二.MIO和EMIO/AXI_GPIO 1.MIO 2.EMIO 3.AXI_GPIO 三.开发板IO口 四.裸机开发点灯 1.代码部分 2.测试 五.li ...

  10. FPGA工程师面试——时序约束

    1. 时序约束的概念和基本策略 答:时序约束主要包括周期约束,偏移约束,静态时序路径约束三种.通过附加时序约束可以综合布线工具调整映射和布局布线,是设计达到时序要求. 策略:附加时序约束的一般策略是先 ...

最新文章

  1. 2009年2月Windows Mobile Webcast预告
  2. 但是我们还是不想留遗憾,我们不后悔!
  3. FineUI(开源版)v4.2.2发布(8年125个版本,官网示例突破300个)!
  4. C语言switch分支结构
  5. java类加载器_类加载器
  6. JS中闭包的应用自定义JS模块
  7. 大学生想要通过看书自学编程,却始终没成功,是因为你没有技巧!
  8. 专业课程设计之客户与服务器程序的同步与通信机制的设计(二)TCP通信
  9. 工厂模式和策略模式区别
  10. Qt 内嵌浏览器几种办法
  11. 利用AirPlayer空中播放PC服务器视频、音乐、图片
  12. 物联网项目设计(一) 需求分析与概要设计
  13. 3D打印机打印中途停止且显示挤出头温度过低
  14. 文件夹提示文件或目录损坏且无法读取怎么修复
  15. 【漆天编程】最牛逼的均线交叉指标,做出了EA历史数据测试器的效果
  16. Odoo报表的report标签和报表格式定义
  17. 织梦个人网站即时到账支付插件
  18. HDU 4313 最小生成树
  19. LeetCode 单调栈练习题归纳总结
  20. android简单文件管理器源码,文件管理器-android源代码

热门文章

  1. 个人学习无人驾驶的路线
  2. 手把手教用matlab做无人驾驶(二十三)--LMPC
  3. WAIC直击:星环科技以大数据AI技术构建新型数字底座
  4. 查询和01号的同学学习的课程完全相同的其他同学的信息的优化
  5. 鸟哥惠新宸:PHP 7.1 的新特性我并不是很喜欢
  6. 人力资源领域RPA的应用场景
  7. WEB前端代码:边框阴影、边框图片、背景样式、文本样式、字体样式
  8. java深度模仿支付宝订单号/交易流水号(高性能,不重复)
  9. Focal-UNet
  10. WPS个人版如何启用VBA(宏)