VIVADO使用误区与进阶之4:XDC约束技巧之I/O篇(上)

16 篇文章 7 订阅

1.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 时序,而且在时序分析时也不会报出这些未约束的路径。

1.1 Input约束

在这里插入图片描述

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

1.2 Output约束

在这里插入图片描述

2. Setup/Hold时序分析

约束是为了设计服务,而设置好的约束必须在时序报告中加以验证。所以,怎样理解时序分析中的检查规则就成了重中之重,这一点对 I/O 约束来说尤为重要。理解时序分析工具如何选取路径分析的发送端( Launch)和接收端( Capture)时钟沿( Clock Edges),在 Setup 和 Hold 分析时又有怎样的具体区别,以及这些数字在时序报告中如何体现等等是设置正确 I/O 约束的基础。

2.1 Setup时序分析

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

在这里插入图片描述
在这里插入图片描述

2.2 Hold时序分析

在这里插入图片描述

2.3 Input 接口类型和约束

数据接口的同步一直是 FPGA 设计中的常见问题,也是一个重点和难点,很多设计不稳定都是因为数据接口的同步有问题。FPGA 的数据接口同步根据系统级设计方式来讲可以分为系统同步和源同步两种。

2.3.1 系统同步接口

上游器件仅仅传递数据信号到 FPGA 中,时钟信号则完全依靠系统板级来同步。时钟信号在系统级上同源,板级走线的延时也要对齐。正因为这样的设计,决定了数据传递的性能受到时钟在系统级的走线延时和 skew 以及数据路径延时的双重限制,无法达到更高速的设计要求,所以大部分情况也仅仅应用SDR 方式。
在这里插入图片描述
在这里插入图片描述

  • 设置和分析 I/O 约束一定要有个系统级思考的视角,如上右图所示,Launch Edge 对应的是上游器件的时钟,而 Capture Edge 则对应 FPGA的输入时钟,正因为是系统同步时钟,所以可以将其视作完全同步而放在一张图上分析,这样一来,就可以用一般时序分析方法来看待问题。
  • 一条完整的时序路径,从源触发器的 C 端开始,经过 Tcko 和路径传输延时再到目的触发器的 D 端结束。放在系统同步的接口时序上,传输延时则变成板级传输延时(还要考虑 skew),所以上述 -max 后的数值是Tcko 的最大值加上板级延时的最大值而来,而-min 后的数值则是由两个最小值相加而来。

2.3.2 源同步接口

  • 为了改进系统同步接口中时钟频率受限的弊端,一种针对高速 I/O 的同步时序接口应运而生,在发送端将数据和时钟同步传输,在接收端用时钟沿脉冲来对数据进行锁存,重新使数据与时钟同步,这种电路就是源同步接口电路( Source Synchronous Interface)
  • 优点:大大提升了总线的速度,在理论上信号的传送可以不受传输延迟的影响,所以源同步接口也经常应用 DDR 方式,在相同时钟频率下提供双倍于 SDR 接口的数据带宽。
  • 源同步接口的约束设置相对复杂,一则是因为有 SDR、 DDR、中心对齐( Center Aligned)和边沿对齐( Edge Aligned)等多种方式,二则可以根据客观已知条件,选用与系统同步接口类似的系统级视角的方式,或是用源同步视角的方式来设置约束。
    在这里插入图片描述
  • 可以根据不同的已知条件,选用不同的约束方式。一般而言,FPGA 作为输入接口时,数据有效窗口是已知条件,所以方法 2 更常见。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3.3 DDR接口的约束设置

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

  • DDR源同步中心对齐输入接口
    在这里插入图片描述
    可以这样计算输入接口约束: DDR 方式下数据实际的采样周期是时钟周期的一半;上升沿采样的数据( Rise Data)的 -max 应该是采样周期减去这个数据的发送沿(下降沿)之前的数据有效窗口值 dv_bfe,而对应的-min 就应该是上升沿之后的数据有效窗口值 dv_are ;同理,下降沿采样的数据( Fall Data)的 -max应该是采样周期减去这个数据的发送沿(上升沿)之前的数据有效窗口值 dv_bre,而对应的-min 就应该是下降沿之后的数据有效窗口值 dv_afe。
    所以最终写入 XDC 的 Input 约束应该如下所示:
    在这里插入图片描述
  • DDR源同步边沿对齐输入接口
    在这里插入图片描述
    在这里插入图片描述
    已知条件是数据相对于时钟上升沿和下降沿的 skew,所以可以分别独立计算;上升沿的 -max 是上升沿之后的数据 skew (skew_are ),对应的-min 就应该是负的上升沿之前的数据 skew (skew_bre );下降沿的 -max 是下降沿之后的数据 skew (skew_afe ),对应的-min 就应该是负的下降沿之前的数据 skew (skew_bfe )。
    在这里插入图片描述
  • 出现负值并不代表延时真的为负,而是跟数据相对于时钟沿的方向有关。请一定牢记 set_input_delay 中-max/-min 的定义,即时钟采样沿到达之后最大与最小的数据有效窗口。
  • 数据是边沿对齐,只要有 jitter 跟 skew 的存在,最差情况下,数据有效窗口在到达时钟采样沿之前就已经结束,所以会有负数出现在-min 之后。因此,在实际应用中, FPGA 用作输入的边沿对齐DDR 源同步接口的情况下,真正用来采样数据的时钟会经过一个 MMCM/PLL 做一定的相移,从而把边沿对齐变成中心对齐。
  • 另外,在经过 MMCM/PLL 相移后的采样时钟跟同步接口输入的时钟之间需要做 set_false_path 的约束(如下述例子)而把那些伪路径从时序报告中剔除。
    在这里插入图片描述

2.4 虚拟时钟

  • 在 FPGA 做系统同步输入接口的情况下,很多时候上游器件送入的数据并不是跟某个 FPGA 中已经存在的真实的时钟相关,而是来自于一个不同的时钟,这时就要用到虚拟时钟( Virtual Clock)
  • 举例来说,上游器件用一个 100MHz 的时钟送出数据到 FPGA,实际上这个数据每两个时钟周期才变化一次,所以可以用 50MHz 的时钟来采样。FPGA 有个 100MHz 的输入时钟,经过 MMCM 产生一个 50MHz 的衍生时钟,并用其来采样上游器件送来的同步数据。当然,系统级的设计上,必须有一定的机制来保证上游器件中的发送时钟和 FPGA 中的接收时钟的时钟沿对齐。
  • 此时,我们可以借助虚拟时钟的帮助来完成相应的 Input 接口约束。
    在这里插入图片描述
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值