XDC约束技巧之I/O篇 (下)
时间:04-09
来源:互联网
点击:
方法二 Skew Based Method
已知条件如下:
时钟信号 src_sync_ddr_clk的频率: 100 MHz
随路送出的时钟src_sync_ddr_clk_out的频率: 100 MHz
数据总线: src_sync_ddr_dout[3:0]
上升沿之前的数据skew ( bre_skew ) :4 ns
上升沿之后的数据skew ( are_skew ) :6 ns
下降沿之前的数据skew ( bfe_skew ) :7 ns
下降沿之后的数据skew ( afe_skew ) :2 ns
可以这样计算输出接口约束:时钟的周期是10ns,因为是DDR方式,所以数据实际的采样周期是时钟周期的一半;上升沿采样的数据的 -max 应该是采样周期减去这个数据的发送沿(下降沿)之后的数据skew即afe_skew,而对应的-min 就应该是上升沿之前的数据skew值bre_skew ;同理,下降沿采样数据的 -max 应该是采样周期减去这个数据的发送沿(上升沿)之后的数据skew值are_skew,而对应的-min 就应该是下降沿之前的数据skew值bfe_skew 。
所以最终写入XDC的Output约束应该如下所示:
对以上两种方法稍作总结,就会发现在设置DDR源同步输出接口时,送出的数据是中心对齐的情况下,用Setup/Hold Based 方法来写约束比较容易,而如果是边沿对齐的情况,则推荐使用Skew Based方法来写约束。
在Vivado中设置接口约束
FPGA的接口约束种类多变,远非一篇短文可以完全覆盖。在具体设计中,建议用户参照Vivado IDE的Language Templates 。其中关于接口约束的例子有很多,而且也是按照本文所述的各种分类方法分别列出。
具体使用时,可以在列表中找到对应的接口类型,按照模板所示调整成自己设计中的数据,然后可以方便地计算出实际的约束值,并应用到FPGA工程中去。
自2014.1版开始,Vivado还提供一个Constraints Wizard可供用户使用。只需打开综合后的设计,然后启动Wizard,工具便可以根据读到的网表和设计中已有的XDC时序约束(也可以任何约束都不加而开始用Wizard)一步步指引用户如何添加Timing约束,包括时钟、I/O 以及时序例外约束等等。
Constraints Wizard的调出方法和界面如下图所示。
UCF与XDC的区别
《XDC约束技巧》开篇描述XDC基础语法时候曾经提到过设置接口约束时UCF与XDC的区别,简单来讲,UCF是原生的FPGA约束,所以分析问题的视角是FPGA本身,而XDC则是从系统设计的全局角度来分析和设置接口约束。
以最基础的SDR系统同步接口来举例。输入侧的设置,UCF用的是OFFSET = IN,而XDC则是set_input_delay 。
输出侧的设置,UCF用的是OFFSET =OUT,而XDC则是set_output_delay 。
如果需要从旧设计的UCF约束转到XDC约束,可以参考上述例子。以一个采样周期来看,UCF中与XDC中设置的接口约束值加起来正好等于一个周期的值。
小结
这一系列《XDC约束技巧》的文章至此暂时告一段落。其实读懂这几篇涵盖了时钟、CDC以及接口约束的短文,基本上已经足够应对绝大多数的FPGA设计约束问题。当然在这么短的篇幅内,很多问题都无法更加深入地展开,所以也提醒读者,需要关注文中推荐的各类Xilinx 官方文档,以及Vivado本身自带的帮助功能与模板。
希望各位能从本文中吸取经验,少走弯路,尽快地成为Vivado和XDC的资深用户,也希望本文能真正为您的设计添砖加瓦,达到事半功倍的效果。
已知条件如下:
时钟信号 src_sync_ddr_clk的频率: 100 MHz
随路送出的时钟src_sync_ddr_clk_out的频率: 100 MHz
数据总线: src_sync_ddr_dout[3:0]
上升沿之前的数据skew ( bre_skew ) :4 ns
上升沿之后的数据skew ( are_skew ) :6 ns
下降沿之前的数据skew ( bfe_skew ) :7 ns
下降沿之后的数据skew ( afe_skew ) :2 ns
可以这样计算输出接口约束:时钟的周期是10ns,因为是DDR方式,所以数据实际的采样周期是时钟周期的一半;上升沿采样的数据的 -max 应该是采样周期减去这个数据的发送沿(下降沿)之后的数据skew即afe_skew,而对应的-min 就应该是上升沿之前的数据skew值bre_skew ;同理,下降沿采样数据的 -max 应该是采样周期减去这个数据的发送沿(上升沿)之后的数据skew值are_skew,而对应的-min 就应该是下降沿之前的数据skew值bfe_skew 。
所以最终写入XDC的Output约束应该如下所示:
对以上两种方法稍作总结,就会发现在设置DDR源同步输出接口时,送出的数据是中心对齐的情况下,用Setup/Hold Based 方法来写约束比较容易,而如果是边沿对齐的情况,则推荐使用Skew Based方法来写约束。
在Vivado中设置接口约束
FPGA的接口约束种类多变,远非一篇短文可以完全覆盖。在具体设计中,建议用户参照Vivado IDE的Language Templates 。其中关于接口约束的例子有很多,而且也是按照本文所述的各种分类方法分别列出。
具体使用时,可以在列表中找到对应的接口类型,按照模板所示调整成自己设计中的数据,然后可以方便地计算出实际的约束值,并应用到FPGA工程中去。
自2014.1版开始,Vivado还提供一个Constraints Wizard可供用户使用。只需打开综合后的设计,然后启动Wizard,工具便可以根据读到的网表和设计中已有的XDC时序约束(也可以任何约束都不加而开始用Wizard)一步步指引用户如何添加Timing约束,包括时钟、I/O 以及时序例外约束等等。
Constraints Wizard的调出方法和界面如下图所示。
UCF与XDC的区别
《XDC约束技巧》开篇描述XDC基础语法时候曾经提到过设置接口约束时UCF与XDC的区别,简单来讲,UCF是原生的FPGA约束,所以分析问题的视角是FPGA本身,而XDC则是从系统设计的全局角度来分析和设置接口约束。
以最基础的SDR系统同步接口来举例。输入侧的设置,UCF用的是OFFSET = IN,而XDC则是set_input_delay 。
输出侧的设置,UCF用的是OFFSET =OUT,而XDC则是set_output_delay 。
如果需要从旧设计的UCF约束转到XDC约束,可以参考上述例子。以一个采样周期来看,UCF中与XDC中设置的接口约束值加起来正好等于一个周期的值。
小结
这一系列《XDC约束技巧》的文章至此暂时告一段落。其实读懂这几篇涵盖了时钟、CDC以及接口约束的短文,基本上已经足够应对绝大多数的FPGA设计约束问题。当然在这么短的篇幅内,很多问题都无法更加深入地展开,所以也提醒读者,需要关注文中推荐的各类Xilinx 官方文档,以及Vivado本身自带的帮助功能与模板。
希望各位能从本文中吸取经验,少走弯路,尽快地成为Vivado和XDC的资深用户,也希望本文能真正为您的设计添砖加瓦,达到事半功倍的效果。
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 基于PLB总线的H.264整数变换量化软核的设计(03-20)
- 迄今为止最牛的ASIC验证平台(05-22)
- 验证FPGA设计:模拟,仿真,还是碰运气?(08-04)