微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上)

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

时间:03-24 来源:互联网 点击:
源同步接口

为了改进系统同步接口中时钟频率受限的弊端,一种针对高速 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 源同步中心对齐输入接口




已知条件如下:
时钟信号 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 约束应该如下所示:



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




已知条件如下:
时钟信号 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 约束应该如下所示:



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

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

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



虚拟时钟


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

举例来说,上游器件用一个 100MHz 的时钟送出数据到 FPGA,实际上这个数据每两个时钟周期才变化一次,所以可以用 50MHz 的时钟来采样。FPGA 有个 100MHz 的输入时钟,经过 MMCM 产生一个 50MHz 的衍生时钟,并用其来采样上游器件送来的同步数据。

当然,系统级的设计上,必须有一定的机制来保证上游器件中的发送时钟和 FPGA 中的接收时钟的时钟沿对齐。

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



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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top