首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Vivado使用误区与进阶】XDC约束技巧—— I/O篇-2

Vivado使用误区与进阶】XDC约束技巧—— I/O篇-2

源同步接口
为了改进系统同步接口中时钟频率受限的弊端,一种针对高速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 ) :4 ns
  • 上升沿之后的数据有效窗口 ( dv_are ) : 6 ns
  • 下降沿之前的数据有效窗口 ( dv_bfe ) :7 ns
  • 下降沿之后的数据有效窗口 ( dv_afe ) : 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 ) :6 ns
  • 上升沿之后的数据skew (skew_are ) :4 ns
  • 下降沿之前的数据skew (skew_bfe ) :3 ns
  • 下降沿之后的数据skew (skew_afe ) :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接口约束。
返回列表