本文摘自《Vivado使用误区与进阶》,作者为Xilinx工具与方法学应用专家Ally Zhou。

《XDC 约束技巧之时钟篇》中曾对 I/O 约束做过简要概括,相比较而 言,XDC 中的 I/O 约束虽然形式简单,但整体思路和约束方法却与 UCF 大 相径庭。加之 FPGA 的应用特性决定了其在接口上有多种构建和实现方 式,所以从 UCF 到 XDC 的转换过程中,最具挑战的可以说便是本文将要 讨论的 I/O 约束了。

原标题:【Vivado使用误区与进阶】XDC约束技巧之I/O篇(上)

01

I/O约束的语法

XDC 中可以用于 I/O 约束的命令包括set_input_delay/set_output_delay 和set_max_delay/set_min_delay。其中,只有那些从 FPGA 管脚进入和/或输出都不经过任何时序元件的纯组合逻辑路径可以用set_max_delay/      set_min_delay 来约束,其余I/O时序路径都必须由set_input_delay/      set_output_delay来约束。如果对 FPGA 的 I/O 不加任何 约束,Vivado 会缺省认为时序要求为无穷大,不仅综合和实现时不会考虑 I/O 时序,而且在时序分析时也不会报出这些未约束的路径。

本文以下章节将会着重讨论 XDC 接口约束和时序分析的基础,介绍如 何使用set_input_delay/set_output_delay 对 FPGA 的 I/O 时序进行约束。

Input约束

上图所示 set_input_delay 的基本语法中,<objects> 是想要设定 input 约束的端口名,可以是一个或数个 port;-clock 之后的 <clock_name> 指 明了对 <objects> 时序进行分析所用的时钟,可以是一个FPGA 中真实存在的时钟也可以是预先定义好的虚拟时钟;-max之后的<maxdelay>描 述了用于 setup 分析的包含有板级走线和外部器件的延时;-min之后的 <mindelay> 描述了用于hold分析的包含有板级走线和外部器件的延时。上述这些选项是定义 Input 约束时必须写明的,还有少数几个可选项,如-add_delay和-clock_fall用于DDR接口的约束。

Output

上图所示set_output_delay的基本语法中,<objects> 是想要设定output 约束的端口名,可以是一个或数个port;-clock之后的<clock_name>指明了对<objects> 时序进行分析所用的时钟,可以是一个 FPGA 中真实存在的时钟也可以是预先定义好的虚拟时钟;-max 之后的<maxdelay>描述了用于 setup 分析的包含有板级走线和外部器件的延时;-min之后的<mindelay>描述了用于 hold 分析的包含有板级走线和外部器件的延时。上述这些选项是定义Output约束时必须写明的,还有少数几个可选项如-add_delay 和 -clock_fall用于DDR接口的约束。

02

Setup/Hold时序分析

我们知道约束是为了设计服务,而设置好的约束必须在时序报告中加以验证。所以,怎样理解时序分析中 的检查规则就成了重中之重,这一点对 I/O 约束来说尤为重要。理解时序分析工具如何选取路径分析的发送端 (Launch)和接收端(Capture)时钟沿(Clock Edges),在Setup和Hold 分析时又有怎样的具体区别,以及这些数字在时序报告中如何体现等等是设置正确I/O 约束的基础。更具体的时序分析方法以及如何深入解读时序报告等内容将会在后续另开主题文章详述,这里仅就Setup/Hold分析时对时钟边沿的选择加以描述,便于以下章节的展开。

Setup时序分析

同步电路设计中,一般情况下,数据在时钟上升沿发送,在下一个时钟上升沿接收,发送的时钟沿称作Launch Edge,接收沿称作Capture Edge。时序分析中的 Setup Check跟Capture Edge 的选择息息相关。

在 SDR 接口的 setup 分析中,工具如下图这样识别发送和接收时钟沿。

而在DDR接口的setup分析中,因为数据是双沿采样,所以发送和接收时钟沿变成上升(下降)沿发送,下降(上升)沿接收。

Hold时序分析

Hold Check主要是为了保证数据在接收(采样)端时钟沿之后还能稳定保持一段时间,对Hold分析而言,同一个时钟沿既是Launch Edge也是 Capture Edge,这一点对SDR和 DDR(不论是中心对齐还是边沿对齐)都一样。

03

Input接口类型和约束

由于历史的原因,相当一部分FPGA设计仍然在系统中起到胶合逻辑(Glue Logic)的作用,当然,如今的FPGA中嵌入了高速串行收发器和嵌入式处理器等,早就不仅仅局限于系统设计的配角,反而成为了其中的主角甚至是明星。但数据接口的同步一直是FPGA设计中的常见问题,也是一个重点和难点,很多设计不稳定都是因为数据接口的同步有问题。

FPGA 的数据接口同步根据系统级设计方式来讲可以分为系统同步和源同步两种。

系统同步接口

系统同步接口(System Synchronous Interface)的构建相对容易,以 FPGA 做接收侧来举例,上游器件 仅仅传递数据信号到 FPGA 中,时钟信号则完全依靠系统板级来同步。时钟信号在系统级上同源,板级走线的 延时也要对齐。正因为这样的设计,决定了数据传递的性能受到时钟在系统级的走线延时和 skew 以及数据路 径延时的双重限制,无法达到更高速的设计要求,所以大部分情况也仅仅应用 SDR 方式。

对系统同步接口做Input约束相对容易,只需要考虑上游器件的 Tcko 和数据在板级的延时即可。下图是一个SDR上升沿采样系统同步接口的Input约束示例。

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

设置和分析I/O约束一定要有个系统级思考的视角,如上右图所示,Launch Edge对应的是上游器件的时 钟,而 Capture Edge 则对应 FPGA 的输入时钟,正因为是系统同步时钟,所以可以将其视作完全同步而放在 一张图上分析,这样一来,就可以用一般时序分析方法来看待问题。

一条完整的时序路径,从源触发器的 C 端开始,经过 Tcko 和路径传输延时再到目的触发器的 D 端结束。放在系统同步的接口时序上,传输延时则变成板级传输延时(还要考虑 skew),所以上述 -max 后的数值是 Tcko 的最大值加上板级延时的最大值而来,而-min 后的数值则是由两个最小值相加而来。

源同步接口

为了改进系统同步接口中时钟频率受限的弊端,一种针对高速I/O的同步时序接口应运而生,在发送端将 数据和时钟同步传输,在接收端用时钟沿脉冲来对数据进行锁存,重新使数据与时钟同步,这种电路就是源同步接口电路(Source Synchronous Interface)。

源同步接口最大的优点就是大大提升了总线的速度,在理论上信号的传送可以不受传输延迟的影响,所以源同步接口也经常应用DDR方式,在相同时钟频率下提供双倍于SDR接口的数据带宽。

源同步接口的约束设置相对复杂,一则是因为有SDR、DDR、中心对齐(Center Aligned)和边沿对齐(Edge Aligned)等多种方式,二则可以根据客观已知条件,选用与系统同步接口类似的系统级视角的方式,或是用源同步视角的方式来设置约束。

如上图所示,对源同步接口进行Input约束可以根据不同的已知条件,选用不同的约束方式。一般而言,FPGA作为输入接口时,数据有效窗口是已知条件,所以方法2 更常见Vivado IDE的Language Templates 中关于源同步输入接口XDC模板也是基于这种方法。但不论以何种方式来设置Input约束,作用是一样,时序报告的结果也应该是一致的。

针对上图所示中心对齐源同步 SDR 接口时序,分别按照两种方式来约束,需要的已知条件和计算方式虽 然不同,但却可以得到完全一样的结果。

DDR接口的约束设置

DDR 源同步接口的约束稍许复杂,需要将上升沿和下降沿分别考虑和约束,以下以源同步接口为例,分别就输入接口数据为中心对齐或边沿对齐的方式来举例。

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

DDR 源同步中心对齐输入接口

已知条件

1、时钟信号src_sync_ddr_clk的频率: 100 MHz;

2、数据总线:

src_sync_ddr_din[3:0]

3、上升沿之前的数据skew(skew_bre) :0.6 ns;

4、上升沿之后的数据skew (skew_are) :0.4 ns;

5、下降沿之前的数据skew (skew_bfe) :0.3 ns;

6、下降沿之后的数据skew (skew_afe) :0.7 ns。

可以这样计算输入接口约束:因为已知条件是数据相对于时钟上升沿和下降沿的skew,所以可以分别独 立计算;上升沿的 -max是上升沿之后的数据skew (skew_are),对应的-min就应该是负的上升沿之前的数 据skew(skew_bre);下降沿的 -max是下降沿之后的数据 skew (skew_afe),对应的-min就应该是负的下 降沿之前的数据skew (skew_bfe )。

所以最终写入 XDC 的 Input 约束应该如下所示:

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

出现负值并不代表延时真的为负,而是跟数据相对于时钟沿的方向有关。请一定牢记set_input_delay中-max/-min的定义,即时钟采样沿到达之后最大与最小的数据有效窗口(set_output_delay中-max/-min的定 义与之正好相反,详见后续章节举例说明)。

在这个例子中,数据是边沿对齐,只要有jitter跟skew的存在,最差情况下,数据有效窗口在到达时钟采样沿之前就已经结束,所以会有负数出现在-min之后。因此,在实际应用中,FPGA用作输入的边沿对齐 DDR源同步接口的情况下,真正用来采样数据的时钟会经过一个MMCM/PLL做一定的相移,从而把边沿对齐Vivado使用误区与进阶 变成中心对齐。

另外,在经过MMCM/PLL 相移后的采样时钟跟同步接口输入的时钟之间需要做set_false_path的约束(如下述例子)而把那些伪路径从时序报告中剔除,这里不再详述。

虚拟时钟

在FPGA做系统同步输入接口的情况下,很多时候上游器件送入的数据并不是跟某个 FPGA中已经存在 的真实的时钟相关,而是来自于一个不同的时钟,这时就要用到虚拟时钟(Virtual Clock)。

举例来说,上游器件用一个100MHz的时钟送出数据到FPGA,实际上这个数据每两个时钟周期才变化一 次,所以可以用50MHz的时钟来采样。FPGA有个100MHz的输入时钟,经过MMCM产生一个50MHz的衍生时钟,并用其来采样上游器件送来的同步数据。当然,系统级的设计上,必须有一定的机制来保证上游器件中的发送时钟和FPGA 中的接收时钟的时钟沿对齐。

此时,我们可以借助虚拟时钟的帮助来完成相应的Input接口约束。

篇幅所限,对XDC中I/O约束的设计思路、分析方法以及如何具体设置Input接口约束的讨论就到这里,下一篇我们接着分析如何设置Output接口约束,看看Vivado中有什么方式可以帮助用户准确便捷地定义接口时序约束。

作者:Ally Zhou

整理:碎碎思

版权归原作者所有

---> END <---

NOW

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【每周一问】如何控制加载FPGA程序时,Xilinx FPGA的IO管脚输出高低电平

【每周一问】Vivado综合时突然OCC模式弹不出来了

一文读懂Tcl在Vivado中的应用

用Tcl定制Vivado设计实现流程

在Vivado中实现ECO功能

XDC约束技巧——时钟篇
XDC约束技巧之CDC篇

点击上方字体即可跳转阅读哟

XDC约束技巧之I/O篇(上)相关推荐

  1. Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上)

    <XDC约束技巧之时钟篇>中曾对I/O约束做过简要概括,相比较而言,XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭.加之FPGA的应用特性决定了其在接口上有多种构 ...

  2. vivado路径最大时钟约束_Vivado使用误区与进阶系列(五)XDC约束技巧之I/O篇(下)...

    XDC约束技巧之CDC篇 继<XDC 约束技巧之 I/O 篇(上) >详细描述了如何设置 Input 接口约束后,我们接着来聊聊怎样设置 Output 接口约束,并分析 UCF 与 XDC ...

  3. Vivado使用误区与进阶——XDC约束技巧之I/O篇 (下)

    <XDC约束技巧之时钟篇>中曾对I/O约束做过简要概括,相比较而言,XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭.加之FPGA的应用特性决定了其在接口上有多种构 ...

  4. ucf 转xdc_XDC约束技巧之I/O篇(下)

    XDC约束技巧之CDC篇继<XDC 约束技巧之 I/O 篇(上) >详细描述了如何设置 Input 接口约束后,我们接着来聊聊怎样设置 Output 接口约束,并分析 UCF 与 XDC ...

  5. XDC约束技巧——CDC篇

    上一篇<XDC约束技巧之时钟篇>介绍了XDC的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束.我们知道XDC与UCF的根本区别之一就是对跨时钟域路径(CDC)的 ...

  6. 【Vivado使用误区与进阶】XDC约束技巧之时钟篇

    [Vivado使用误区与进阶]XDC约束技巧之时钟篇 Xilinx 的新一代设计套件Vivado中引入了全新的约束文件XDC,在很多规则和技巧上都跟上一代产品ISE中支持的UCF大不相同,给使用者带来 ...

  7. XDC约束技巧——时钟篇

    本文摘自<Vivado使用误区与进阶>,作者为Xilinx工具与方法学应用专家Ally Zhou. Xilinx©的新一代设计套件Vivado®中引入了全新的约束文件XDC,在很多规则和技 ...

  8. XDC约束技巧之CDC篇

    XDC约束技巧之CDC篇 本文摘自<Vivado使用误区与进阶>,作者为Xilinx工具与方法学应用专家Ally Zhou. 上一篇<XDC 约束技巧之时钟篇>介绍了 XDC ...

  9. XDC约束技巧之时钟篇

    Xilinx©的新一代设计套件 Vivado 中引入了全新的约束文件 XDC,在很多规则和技巧上都跟上一代产品 ISE 中支持的 UCF 大不相同,给使用者带来许多额外挑战.Xilinx 工具专家告诉 ...

最新文章

  1. VMware Esxi5.1.0开启ssh服务的方法
  2. FZU 1061 矩阵连乘
  3. HTTP协议之http状态码详解
  4. Flask框架从入门到精通之参数配置(二)
  5. 会议交流 | 知识图谱前沿技术与热门应用
  6. JavaScript实现类与继承
  7. delphi7+firebird+dbexpress
  8. 基于SURF算法的图像拼接方法
  9. 安装丰桥(顺丰)电子面单自助打印SDK踩的坑
  10. 浅谈权限设计(从接口权限到数据权限)
  11. 幼儿园数学目标_幼儿园数学区目标
  12. python两种方法求ROC曲线下面积(AUC)
  13. C# 实现登录并跳转界面
  14. 民科微服务小程序怎么注册_民科微服务小程序app个人端认证下载-民科微服务小程序登录官方入口下载v2.4最新版_289手游网...
  15. kafka消费端Attempt to heartbeat failed since group is rebalancing
  16. 微信小程序云开发 操作数据库-简单数据的查询
  17. centos7磁盘清理方法
  18. APPCAN学习笔记001---app高速开发AppCan.cn平台概述
  19. elementUI表格无数据设置
  20. Centos75启动盘安装系统无法进入图形安装界面-提示dracut-pre-udev[348]:modprobe:ERROR: could not inset ‘edd‘

热门文章

  1. Nwafu-OJ-1410 Problem I C语言实习题二——4.判断是否能构成一个三角形
  2. vue中image 的:src 与 src
  3. 232电平和TTL电平
  4. 查找算法【平衡二叉树】 - 平衡二叉树的创建
  5. Java系统程序Bug解决方法论(一) - 教程简介
  6. 如何判断两个ip是否属于同一子网;如何确定子网掩码,让300台服务器处于同一网段
  7. 5613-2-冒泡排序
  8. 在springboot中加入Hystrix
  9. 物联网产业到2023年连接数将突破20亿
  10. 源码编译安装部署LAMP平台(使用Apache,MySQL与PHP搭建Discuz论坛实例)