XDC约束技巧之I/O篇 (下)
时间:04-09
来源:互联网
点击:
作者:Ally Zhou,Xilinx上海Office
《XDC约束技巧之时钟篇》中曾对I/O约束做过简要概括,相比较而言,XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭。加之FPGA的应用特性决定了其在接口上有多种构建和实现方式,所以从UCF到XDC的转换过程中,最具挑战的可以说便是本文将要讨论的I/O约束了。
继《XDC约束技巧之I/O篇(上)》 详细描述了如何设置Input接口约束后,我们接着来聊聊怎样设置Output接口约束,并分析UCF与XDC在接口约束上的区别。
Input接口类型和约束
FPGA做Output的接口时序同样也可以分为系统同步与源同步。在设置XDC约束时,总体思路与Input类似,只是换成要考虑下游器件的时序模型。另外,在源同步接口中,定义接口约束之前,需要用create_generated_clock先定义送出的随路时钟。
系统同步接口
与Input的系统同步接口一样,FPGA做Output接口的系统同步设计,芯片间只传递数据信号,时钟信号的同步完全依靠板级设计来对齐。所以设置约束时候要考虑的仅仅是下游器件的Tsu/Th和数据在板级的延时。
上图是一个SDR上升沿采样系统同步接口的Output约束示例。其中,-max后的数值是板级延时的最大值与下游器件的Tsu相加而得出,-min后的数值则是板级延时的最小值减去下游器件的Th而来。
源同步接口
与源同步接口的Input约束设置类似,FPGA做源同步接口的Output也有两种方法可以设置约束。
方法一我们称作Setup/Hold Based Method,与上述系统同步接口的设置思路基本一致,仅需要了解下游器件用来锁存数据的触发器的Tsu与Th值与系统板级的延时便可以设置。方法二称作Skew Based Method,此时需要了解FPGA送出的数据相对于时钟沿的关系,根据Skew的大小和时钟频率来计算如何设置 Output约束。
具体约束时可以根据不同的已知条件,选用不同的约束方式。一般而言,FPGA作为输出接口时,数据相对时钟的Skew关系是已知条件(或者说,把同步数据相对于时钟沿的Skew限定在一定范围内是设计源同步接口的目标),所以方法二更常见。
Vivado IDE的Language Templates中关于源同步输出接口的XDC约束模板包含了以上两种方式的设置方法。
方法一Setup/Hold Based Method
Setup/Hold Method的计算公式如下,可以看出其跟系统同步输出接口的设置方法完全一样。如果换成DDR方式,则可参考上一篇I/O约束方法中关于Input源同步DDR接口的约束,用 两个可选项-clock_fall与 -add_delay来添加针对时钟下降沿的约束值。
如果板级延时的最小值(在源同步接口中,因为时钟与信号同步传递,所以板级延时常常可以视作为0)小于接收端寄存器的Th,这样计算出的结果就会在 -min 后出现负数值,很多时候会让人误以为设置错误。其实这里的负数并不表示负的延迟,而代表最小的延迟情况下,数据是在时钟采样沿之后才有效。同样的,-max后的正数,表示最大的延迟情况下,数据是在时钟采样沿之前就有效了。
这便是接口约束中最容易混淆的地方,请一定牢记set_output_delay中 -max/-min的定义,即时钟采样沿到达之前最大与最小的数据有效窗口。
如果我们在纸上画一下接收端的波形图,就会很容易理解:用于setup分析的 -max之后跟着正数,表示数据在时钟采样沿之前就到达,而用于hold分析的 -min之后跟着负数,表示数据在时钟采样沿之后还保持了一段时间。只有这样才能满足接收端用于锁存接口数据的触发器的Tsu和Th要求。
方法二 Skew Based Method
为了把同步数据相对于时钟沿的Skew限定在一定范围内,我们可以基于Skew的大小来设置源同步输出接口的约束。此时可以不考虑下游采样器件的Tsu与Th值。
我们可以通过波形图来再次验证 set_output_delay中 -max/-min的定义,即时钟采样沿到达之前最大与最小的数据有效窗口。
DDR接口的约束设置
DDR接口的约束稍许复杂,需要将上升沿和下降沿分别考虑和约束,以下以源同步接口为例,分别就Setup/Hold Based 方法和Skew Based方法举例。
方法一Setup/Hold Based Method
已知条件如下:
时钟信号 src_sync_ddr_clk的频率: 100 MHz
随路送出的时钟src_sync_ddr_clk_out的频率: 100 MHz
数据总线: src_sync_ddr_dout[3:0]
接收端的上升沿建立时间要求 ( tsu_r ) :7 ns
接收端的上升沿保持时间要求 (thd_r ) :3 ns
接收端的下降沿建立时间要求 (tsu_f) :6 ns
接收端的下降沿保持时间要求 (thd_f ) :4 ns
板级走线延时:0 ns
可以这样计算输出接口约束:已知条件包含接收端上升沿和下降沿的建立与保持时间要求,所以可以分别独立计算。上升沿采样数据的 -max 是板级延时的最大值加上接收端的上升沿建立时间要求(tsu_r),对应的-min 就应该是板级延时的最小值减去接收端的上升沿保持时间要求(thd_r);下降沿采样数据的 -max 是板级延时的最大值加上接收端的下降沿建立时间要求(tsu_f),对应的-min 就应该是板级延时的最小值减去接收端的下降沿保持时间要求(thd_f)。
所以最终写入XDC的Output约束应该如下所示:
《XDC约束技巧之时钟篇》中曾对I/O约束做过简要概括,相比较而言,XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭。加之FPGA的应用特性决定了其在接口上有多种构建和实现方式,所以从UCF到XDC的转换过程中,最具挑战的可以说便是本文将要讨论的I/O约束了。
继《XDC约束技巧之I/O篇(上)》 详细描述了如何设置Input接口约束后,我们接着来聊聊怎样设置Output接口约束,并分析UCF与XDC在接口约束上的区别。
Input接口类型和约束
FPGA做Output的接口时序同样也可以分为系统同步与源同步。在设置XDC约束时,总体思路与Input类似,只是换成要考虑下游器件的时序模型。另外,在源同步接口中,定义接口约束之前,需要用create_generated_clock先定义送出的随路时钟。
系统同步接口
与Input的系统同步接口一样,FPGA做Output接口的系统同步设计,芯片间只传递数据信号,时钟信号的同步完全依靠板级设计来对齐。所以设置约束时候要考虑的仅仅是下游器件的Tsu/Th和数据在板级的延时。
上图是一个SDR上升沿采样系统同步接口的Output约束示例。其中,-max后的数值是板级延时的最大值与下游器件的Tsu相加而得出,-min后的数值则是板级延时的最小值减去下游器件的Th而来。
源同步接口
与源同步接口的Input约束设置类似,FPGA做源同步接口的Output也有两种方法可以设置约束。
方法一我们称作Setup/Hold Based Method,与上述系统同步接口的设置思路基本一致,仅需要了解下游器件用来锁存数据的触发器的Tsu与Th值与系统板级的延时便可以设置。方法二称作Skew Based Method,此时需要了解FPGA送出的数据相对于时钟沿的关系,根据Skew的大小和时钟频率来计算如何设置 Output约束。
具体约束时可以根据不同的已知条件,选用不同的约束方式。一般而言,FPGA作为输出接口时,数据相对时钟的Skew关系是已知条件(或者说,把同步数据相对于时钟沿的Skew限定在一定范围内是设计源同步接口的目标),所以方法二更常见。
Vivado IDE的Language Templates中关于源同步输出接口的XDC约束模板包含了以上两种方式的设置方法。
方法一Setup/Hold Based Method
Setup/Hold Method的计算公式如下,可以看出其跟系统同步输出接口的设置方法完全一样。如果换成DDR方式,则可参考上一篇I/O约束方法中关于Input源同步DDR接口的约束,用 两个可选项-clock_fall与 -add_delay来添加针对时钟下降沿的约束值。
如果板级延时的最小值(在源同步接口中,因为时钟与信号同步传递,所以板级延时常常可以视作为0)小于接收端寄存器的Th,这样计算出的结果就会在 -min 后出现负数值,很多时候会让人误以为设置错误。其实这里的负数并不表示负的延迟,而代表最小的延迟情况下,数据是在时钟采样沿之后才有效。同样的,-max后的正数,表示最大的延迟情况下,数据是在时钟采样沿之前就有效了。
这便是接口约束中最容易混淆的地方,请一定牢记set_output_delay中 -max/-min的定义,即时钟采样沿到达之前最大与最小的数据有效窗口。
如果我们在纸上画一下接收端的波形图,就会很容易理解:用于setup分析的 -max之后跟着正数,表示数据在时钟采样沿之前就到达,而用于hold分析的 -min之后跟着负数,表示数据在时钟采样沿之后还保持了一段时间。只有这样才能满足接收端用于锁存接口数据的触发器的Tsu和Th要求。
方法二 Skew Based Method
为了把同步数据相对于时钟沿的Skew限定在一定范围内,我们可以基于Skew的大小来设置源同步输出接口的约束。此时可以不考虑下游采样器件的Tsu与Th值。
我们可以通过波形图来再次验证 set_output_delay中 -max/-min的定义,即时钟采样沿到达之前最大与最小的数据有效窗口。
DDR接口的约束设置
DDR接口的约束稍许复杂,需要将上升沿和下降沿分别考虑和约束,以下以源同步接口为例,分别就Setup/Hold Based 方法和Skew Based方法举例。
方法一Setup/Hold Based Method
已知条件如下:
时钟信号 src_sync_ddr_clk的频率: 100 MHz
随路送出的时钟src_sync_ddr_clk_out的频率: 100 MHz
数据总线: src_sync_ddr_dout[3:0]
接收端的上升沿建立时间要求 ( tsu_r ) :7 ns
接收端的上升沿保持时间要求 (thd_r ) :3 ns
接收端的下降沿建立时间要求 (tsu_f) :6 ns
接收端的下降沿保持时间要求 (thd_f ) :4 ns
板级走线延时:0 ns
可以这样计算输出接口约束:已知条件包含接收端上升沿和下降沿的建立与保持时间要求,所以可以分别独立计算。上升沿采样数据的 -max 是板级延时的最大值加上接收端的上升沿建立时间要求(tsu_r),对应的-min 就应该是板级延时的最小值减去接收端的上升沿保持时间要求(thd_r);下降沿采样数据的 -max 是板级延时的最大值加上接收端的下降沿建立时间要求(tsu_f),对应的-min 就应该是板级延时的最小值减去接收端的下降沿保持时间要求(thd_f)。
所以最终写入XDC的Output约束应该如下所示:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 基于PLB总线的H.264整数变换量化软核的设计(03-20)
- 迄今为止最牛的ASIC验证平台(05-22)
- 验证FPGA设计:模拟,仿真,还是碰运气?(08-04)