0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

XDC约束技巧之I/O篇(上)

FPGA算法工程师 来源:FPGA算法工程师 2023-04-06 09:53 次阅读

本篇是Xilinx发布的《Vivado使用误区与进阶》系列的第四章,欢迎阅读。

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

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约束

e8b50452-d40b-11ed-bfe3-dac502259ad0.png

上图所示 set_input_delay 的基本语法中,是想要设定 input 约束的端口名,可以是一个或数个 port;-clock 之后的指明了对时序进行分析所用的时钟,可以是一个 FPGA 中真实存 在的时钟也可以是预先定义好的虚拟时钟;-max 之后的描述了用于setup分析的包含有板级走线和外部器件的延时;-min 之后的描述了用于 hold 分析的包含有板级走线和外部器件的延时。

上述这些选项是定义 Input 约束时必须写明的,还有少数几个可选项, 如 -add_delay 和 -clock_fall 用于 DDR 接口的约束。

Output约束

e90b788c-d40b-11ed-bfe3-dac502259ad0.png

上图所示 set_output_delay 的基本语法中,是想要设定 output 约束的端口名,可以是一个或 数个 port;-clock 之后的指明了对时序进行分析所用的时钟,可以是一个 FPGA 中真实存在的时钟也可以是预先定义好的虚拟时钟;-max 之后的描述了用于 setup 分析的包含有板级走线和外部器件的延时;-min 之后的描述了用于 hold 分析的包含有板级走线和外部器件的延时。

上述这些选项是定义 Output 约束时必须写明的,还有少数几个可选项如 -add_delay 和 -clock_fall 用于 DDR 接口的约束。

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 分析中,工具如下图这样识别发送和接收时钟沿。

e9578f7e-d40b-11ed-bfe3-dac502259ad0.png

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

e9a10ab4-d40b-11ed-bfe3-dac502259ad0.png

Hold时序分析

e9da6b06-d40b-11ed-bfe3-dac502259ad0.png

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

Input接口类型和约束

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

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

系统同步接口

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

ea0a2ae4-d40b-11ed-bfe3-dac502259ad0.png

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

ea5ea718-d40b-11ed-bfe3-dac502259ad0.png

设置和分析 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)等多种方式,二则可以根据客观已知条件,选用与系统同步接口类似的系统级视角的方式,或是用源同步视角的方式来设置约束。

ea9e5bc4-d40b-11ed-bfe3-dac502259ad0.png

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

eae07d92-d40b-11ed-bfe3-dac502259ad0.png

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

eb465d6a-d40b-11ed-bfe3-dac502259ad0.png

eb83fec2-d40b-11ed-bfe3-dac502259ad0.png

DDR接口的约束设置

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

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

ebb86bda-d40b-11ed-bfe3-dac502259ad0.png

已知条件如下:

时钟信号 src_sync_ddr_clk 的频率: 100 MHz

数据总线: src_sync_ddr_din[3:0]

上升沿之前的数据有效窗口 ( dv_bre ) : 0.4 ns

上升沿之后的数据有效窗口 ( dv_are ) : 0.6 ns

下降沿之前的数据有效窗口 ( dv_bfe ) : 0.7 ns

下降沿之后的数据有效窗口 ( dv_afe ) : 0.2 ns

可以这样计算输入接口约束:DDR 方式下数据实际的采样周期是时钟周期的一半;上升沿采样的数据(Rise Data)的 -max 应该是采样周期减去这个数据的发送沿(下降沿)之前的数据有效窗口值 dv_bfe,而 对应的-min 就应该是上升沿之后的数据有效窗口值 dv_are ;同理,下降沿采样的数据(Fall Data)的 -max 应该是采样周期减去这个数据的发送沿(上升沿)之前的数据有效窗口值 dv_bre,而对应的-min 就应该是下降沿之后的数据有效窗口值 dv_afe 。

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

ebdb7792-d40b-11ed-bfe3-dac502259ad0.png

DDR 源同步边沿对齐输入接口

ec17f884-d40b-11ed-bfe3-dac502259ad0.png

已知条件:

时钟信号 src_sync_ddr_clk 的频率: 100 MHz

数据总线: src_sync_ddr_din[3:0]

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

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

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

下降沿之后的数据 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 约束应该如下所示:

ec426510-d40b-11ed-bfe3-dac502259ad0.png

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

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

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

ec72a5e0-d40b-11ed-bfe3-dac502259ad0.png

虚拟时钟

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

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

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

eca7c392-d40b-11ed-bfe3-dac502259ad0.png

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593193
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119373
  • 时序
    +关注

    关注

    5

    文章

    357

    浏览量

    36956
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12637
  • xdc
    xdc
    +关注

    关注

    1

    文章

    23

    浏览量

    5870

原文标题:XDC约束技巧之I/O篇(上)

文章出处:【微信号:FPGA算法工程师,微信公众号:FPGA算法工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于XDC约束文件,你需要知道的几点

    作者: 圆宵 FPGA那点事儿 在ISE时代,使用的是UCF约束文件。从Vivado开始,XDC成了唯一支持的约束标准。XDC除了遵循工业界的通行标准SDC(Synopsys Desi
    发表于 02-08 02:10 4676次阅读

    Vivado中的静态时序分析工具Timing Report的使用与规范

    XDC约束技巧》系列中讨论了XDC约束的设置方法、约束思路和一些容易混淆的地方。我们提到过约束
    发表于 11-17 18:03 3.4w次阅读
    Vivado中的静态时序分析工具Timing Report的使用与规范

    FPGA设计约束技巧之XDC约束之I/O篇 (上)

    从UCF到XDC的转换过程中,最具挑战的可以说便是本文将要讨论的I/O约束了。 I/O 约束的语法 XDC 中可以用于 I/O 约束的命令包
    发表于 11-17 18:54 1.2w次阅读
    FPGA设计<b class='flag-5'>约束</b>技巧之<b class='flag-5'>XDC</b><b class='flag-5'>约束</b>之I/O篇 (上)

    FPGA设计约束技巧之XDC约束之I/O篇(下)

    XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭。加之FPGA的应用特性决定了其在接口上有多种构建和实现方式,所以从UCF到XDC的转换过程中,最具挑战的可以说
    发表于 11-17 19:01 6757次阅读
    FPGA设计<b class='flag-5'>约束</b>技巧之<b class='flag-5'>XDC</b><b class='flag-5'>约束</b>之I/O篇(下)

    FPGA约束的详细介绍

    设计能否满足时序。主要涉及到xilinx vivado xdc约束语法,给出对应的ISE ucf 语法。另外quatus的语法和xdc几乎兼容,原理都一样。
    发表于 06-25 09:14 6432次阅读

    用于定时关闭的UltraFast Vivado设计方法

    本培训中概述的方法将使您能够实现时序收敛的“签核”质量XDC约束。 无论复杂程度如何,这种方法还可以使您更快地实现时序收敛......
    的头像 发表于 11-29 06:53 3172次阅读
    用于定时关闭的UltraFast Vivado设计方法

    XDC约束及物理约束的介绍

    观看视频,了解和学习有关XDC约束,包括时序,以及物理约束相关知识。
    的头像 发表于 01-07 07:10 5618次阅读
    <b class='flag-5'>XDC</b><b class='flag-5'>约束</b>及物理<b class='flag-5'>约束</b>的介绍

    如何将Altera的SDC约束转换为Xilinx XDC约束

    了解如何将Altera的SDC约束转换为Xilinx XDC约束,以及需要更改或修改哪些约束以使Altera的约束适用于Vivado设计软件
    的头像 发表于 11-27 07:17 4664次阅读

    Vivado 中时效的处理

    UltraFAST设计方法培训将帮助您时序收敛阶段实现“Sign-off” 质量XDC约束。另外,还帮助您显著提高时序收敛实现效率,无论该设计有多么复杂。
    的头像 发表于 08-01 11:07 2042次阅读

    FPGA知识之xdc约束优先级

    xdc约束优先级 在xdc文件中,按约束的先后顺序依次被执行,因此,针对同一个时钟的不同约束,只有最后一条
    的头像 发表于 11-16 17:37 1611次阅读

    Vivado设计约束功能概述

    XDC约束可以用一个或多个XDC文件,也可以用Tcl脚本实现;XDC文件或Tcl脚本都要加入到工程的某个约束集(set)中;虽然一个
    的头像 发表于 06-30 11:27 2979次阅读

    XDC约束技巧之时钟篇

    Xilinx的新一代设计套件Vivado中引入了全新的约束文件 XDC,在很多规则和技巧上都跟上一代产品 ISE 中支持的 UCF 大不相同,给使用者带来许多额外挑战。Xilinx 工具专家告诉你,其实用好 XDC 很容易,只需
    的头像 发表于 03-28 09:51 1858次阅读

    XDC约束技巧之CDC篇

    上一篇《XDC 约束技巧之时钟篇》介绍了 XDC 的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束。我们知道 XDC
    的头像 发表于 04-03 11:41 1275次阅读

    XDC约束技巧之I/O篇(下)

    继《XDC 约束技巧之 I/O 篇(上)》详细描述了如何设置 Input 接口 约束后,我们接着来聊聊怎样设置 Output 接口约束,并分析 UCF 与
    的头像 发表于 04-10 11:00 665次阅读

    Vivado使用进阶:读懂用好Timing Report

    XDC 约束技巧》系列中讨论了XDC 约束的设置方法、约束思路和一些容易混淆的地方。我们提到过约束
    的头像 发表于 05-04 11:20 2737次阅读
    Vivado使用进阶:读懂用好Timing Report