0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

XDC约束技巧之I/O篇(下)

FPGA算法工程师 来源:FPGA算法工程师 2023-04-10 11:00 次阅读

继《XDC 约束技巧之 I/O 篇(上)》详细描述了如何设置 Input 接口 约束后,我们接着来聊聊怎样设置 Output 接口约束,并分析 UCF 与 XDC 在接口约束上的区别。

Output 接口类型和约束

FPGA 做 Output 的接口时序同样也可以分为系统同步与源同步。在设置 XDC 约束时,总体思路与 Input 类似,只是换成要考虑下游器件的时序模型。另外,在源同步接口中,定义接口约束之前,需要用 create_generated_clock 先定义送出的随路时钟

系统同步接口

与 Input 的系统同步接口一样,FPGA 做 Output 接口的系统同步设 计,芯片间只传递数据信号,时钟信号的同步完全依靠板级设计来对齐。 所以设置约束时候要考虑的仅仅是下游器件的 Tsu/Th 和数据在板级的延时。

92570654-d68c-11ed-bfe3-dac502259ad0.png

上图是一个 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 的 LanguageTemplates 中关于源同步输出接口的 XDC 约束模板包含了以上两种方式的设置方法。

方法一 Setup/Hold Based Method

Setup/Hold Based Method 的计算公式如下,可以看出其跟系统同步输出接口的设置方法完全一样。如果换成 DDR 方式,则可参考上一篇 I/O 约束方法中关于 Input 源同步 DDR 接口的约束,用两个可选项 -clock_fall 与 -add_delay 来添加针对时钟下降沿的约束值。

9290e07c-d68c-11ed-bfe3-dac502259ad0.png

如果板级延时的最小值(在源同步接口中,因为时钟与信号同步传递,所以板级延时常常可以视作为 0)小于接收端寄存器的 Th,这样计算出的结果就会在 -min 后出现负数值,很多时候会让人误以为设置错误。其实这里的负数并不表示负的延迟,而代表最小的延迟情况下,数据是在时钟采样沿之后才有效。同样的,-max 后的正数,表示最大的延迟情况下,数据是在时钟采样沿之前就有效了。

这便是接口约束中最容易混淆的地方,请一定牢记 set_output_delay 中 -max/-min 的定义,即时钟采样沿到达之前最大与最小的数据有效窗口。

如果我们在纸上画一下接收端的波形图,就会很容易理解:用于 setup 分析的 -max 之后跟着正数,表示 数据在时钟采样沿之前就到达,而用于 hold 分析的 -min 之后跟着负数,表示数据在时钟采样沿之后还保持了一段时间。只有这样才能满足接收端用于锁存接口数据的触发器的 Tsu 和 Th 要求。

92ad5e14-d68c-11ed-bfe3-dac502259ad0.png

方法二 Skew Based Method

为了把同步数据相对于时钟沿的 Skew 限定在一定范围内,我们可以基于 Skew 的大小来设置源同步输出接口的约束。此时可以不考虑下游采样器件的 Tsu 与 Th 值。

92e4e906-d68c-11ed-bfe3-dac502259ad0.png

我们可以通过波形图来再次验证 set_output_delay 中 -max/-min 的定义,即时钟采样沿到达之前最大与最小的数据有效窗口。

9305be88-d68c-11ed-bfe3-dac502259ad0.png

DDR 接口的约束设置

DDR 接口的约束稍许复杂,需要将上升沿和下降沿分别考虑和约束,以下以源同步接口为例,分别就 Setup/Hold Based 方法和 Skew Based 方法举例。

方法一 Setup/Hold Based Metho

9330ecde-d68c-11ed-bfe3-dac502259ad0.png

已知条件如下:

时钟信号 src_sync_ddr_clk 的频率: 100 MHz

随路送出的时钟 src_sync_ddr_clk_out 的频率: 100 MHz

数据总线: src_sync_ddr_dout[3:0]

接收端的上升沿建立时间要求 ( tsu_r ) : 0.7 ns

接收端的上升沿保持时间要求 (thd_r ) : 0.3 ns

接收端的下降沿建立时间要求 (tsu_f) : 0.6 ns

接收端的下降沿保持时间要求 (thd_f ) : 0.4 ns

板级走线延时:0 ns

可以这样计算输出接口约束:已知条件包含接收端上升沿和下降沿的建立与保持时间要求,所以可以分别独立计算。上升沿采样数据的 -max 是板级延时的最大值加上接收端的上升沿建立时间要求(tsu_r),对应的 -min 就应该是板级延时的最小值减去接收端的上升沿保持时间要求(thd_r);下降沿采样数据的 -max 是板级延时的最大值加上接收端的下降沿建立时间要求(tsu_f),对应的-min 就应该是板级延时的最小值减去接收端的下降沿保持时间要求(thd_f)。所以最终写入 XDC 的 Output 约束应该如下所示:

93418e5e-d68c-11ed-bfe3-dac502259ad0.png

方法二 Skew Based Method

93551fc8-d68c-11ed-bfe3-dac502259ad0.png

已知条件如下:

时钟信号 src_sync_ddr_clk 的频率: 100 MHz

随路送出的时钟 src_sync_ddr_clk_out 的频率: 100 MHz

数据总线: src_sync_ddr_dout[3:0]

上升沿之前的数据 skew ( bre_skew ) : 0.4 ns

上升沿之后的数据 skew ( are_skew ) : 0.6 ns

下降沿之前的数据 skew ( bfe_skew ) : 0.7 ns

下降沿之后的数据 skew ( afe_skew ) : 0.2 ns

可以这样计算输出接口约束:时钟的周期是 10ns,因为是 DDR 方式,所以数据实际的采样周期是时钟周期的一半;上升沿采样的数据的 -max 应该是采样周期减去这个数据的发送沿(下降沿)之后的数据 skew 即 afe_skew,而对应的-min 就应该是上升沿之前的数据 skew 值bre_skew ;同理,下降沿采样数据的 -max 应该是采样周期减去这个数据的发送沿(上升沿)之后的数据 skew 值 are_skew,而对应的-min 就应该是下 降沿之前的数据 skew 值 bfe_skew 。

所以最终写入 XDC 的 Output 约束应该如下所示:

93665f36-d68c-11ed-bfe3-dac502259ad0.png

对以上两种方法稍作总结,就会发现在设置 DDR 源同步输出接口时,送出的数据是中心对齐的情况下,用 Setup/Hold Based 方法来写约束比较容易,而如果是边沿对齐的情况,则推荐使用 SkewBased 方法来写约束。

在 Vivado 中设置接口约束

FPGA 的接口约束种类多变,远非一篇短文可以完全覆盖。在具体设计中,建议用户参照 Vivado IDE 的 Language Templates 。其中关于接口约束的例子有很多,而且也是按照本文所述的各种分类方法分别列出。

具体使用时,可以在列表中找到对应的接口类型,按照模板所示调整成自己设计中的数据,然后可以方便地计算出实际的约束值,并应用到 FPGA 工程中去。

93a8b1e2-d68c-11ed-bfe3-dac502259ad0.png

自 2014.1 版开始,Vivado 还提供一个 Constraints Wizard 可供用户使用。只需打开综合后的设计,然后启动 Wizard,工具便可以根据读到的网表和设计中已有的 XDC 时序约束(也可以任何约束都不加而开始用 Wizard)一步步指引用户如何添加 Timing 约束,包括时钟、I/O 以及时序例外约束等等。

Constraints Wizard 的调出方法和界面如下图所示。

941e9790-d68c-11ed-bfe3-dac502259ad0.png

UCF 与 XDC 的区别

《XDC 约束技巧》开篇描述 XDC 基础语法时候曾经提到过设置接口约束时 UCF 与 XDC 的区别,简单来讲,UCF 是原生的 FPGA 约束,所以分析问题的视角是 FPGA 本身,而 XDC 则是从系统设计的全局角度来分析和设置接口约束。

以最基础的 SDR 系统同步接口来举例。输入侧的设置,UCF 用的是 OFFSET = IN,而 XDC 则是 set_input_delay 。

943aad9a-d68c-11ed-bfe3-dac502259ad0.png

输出侧的设置,UCF 用的是 OFFSET =OUT,而 XDC 则是 set_output_delay 。

9455c63e-d68c-11ed-bfe3-dac502259ad0.png

如果需要从旧设计的 UCF 约束转到 XDC 约束,可以参考上述例子。以一个采样周期来看,UCF 中与 XDC 中设置的接口约束值加起来正好等于一个周期的值。

小结

这一系列《XDC 约束技巧》的文章至此暂时告一段落。其实读懂了这几篇涵盖了时钟、CDC 以及接口约束的短文,基本上已经足够应对绝大多数的 FPGA 设计约束问题。当然在这么短小的篇幅内,很多问题都无法更加深入地展开,所以也提醒读者,需要关注文中推荐的各类 Xilinx 官方文档,以及 Vivado 本身自带的帮助功能与模板。

希望各位能从本文中吸取经验,少走弯路,尽快地成为 Vivado 和 XDC 的资深用户,也希望本文能真正为您的设计添砖加瓦,达到事半功倍的效果。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8473

    浏览量

    150766
  • 信号
    +关注

    关注

    11

    文章

    2774

    浏览量

    76562
  • 时序
    +关注

    关注

    5

    文章

    385

    浏览量

    37257
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12711
  • xdc
    xdc
    +关注

    关注

    1

    文章

    24

    浏览量

    5914

原文标题:XDC约束技巧之I/O篇(下)

文章出处:【微信号:FPGA算法工程师,微信公众号:FPGA算法工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(十五、I/O 设备模型SPI设备)

    本文学习一I/O 设备模型SPI设备使用,I/O 设备模型
    的头像 发表于 07-04 15:46 3886次阅读
    RT-Thread记录(十五、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> 设备模型<b class='flag-5'>之</b>SPI设备)

    物理约束实践:I/O约束

    I/O约束I/O Constraints)包括I/O
    的头像 发表于 11-18 16:42 1029次阅读
    物理<b class='flag-5'>约束</b>实践:<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>约束</b>

    XDC约束如何设计

    IDDR和IOB FF仅由我设计中的同一IOB中的IBUF驱动。我的代码:IOBUF iobuf_iodata(.I(iodata_mux), .IO(iodata),// PAD .O
    发表于 11-13 14:28

    FPGA使用RGMII接口的88E1512搭建网络通信系统

    |EthernetFMC6.ALTERAAN477:DesigningRGMIIInterfaceswithFPGAsandHardCopyASICs7.米联客ESFP1512以太网SFP光电卡教程8.Vivado使用误区与进阶——XDC约束技巧
    发表于 07-07 08:30

    FPGA设计约束技巧XDC约束I/O (上)

    从UCF到XDC的转换过程中,最具挑战的可以说便是本文将要讨论的I/O约束了。 I/O
    发表于 11-17 18:54 1.3w次阅读
    FPGA设计<b class='flag-5'>约束</b>技巧<b class='flag-5'>之</b><b class='flag-5'>XDC</b><b class='flag-5'>约束</b><b class='flag-5'>之</b><b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>篇</b> (上)

    FPGA设计约束技巧XDC约束I/O

    讨论的I/O约束了。继《XDC约束技巧I/
    发表于 11-17 19:01 7291次阅读
    FPGA设计<b class='flag-5'>约束</b>技巧<b class='flag-5'>之</b><b class='flag-5'>XDC</b><b class='flag-5'>约束</b><b class='flag-5'>之</b><b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>篇</b>(<b class='flag-5'>下</b>)

    XDC的时钟约束及优势

    Xilinx©的新一代设计套件 Vivado 中引入了全新的约束文件 XDC,在很多规则和技巧上都跟上一代产品 ISE 中支持的 UCF 大不相同,给使用者带来许多额外挑战。Xilinx 工具专家
    发表于 11-18 03:59 3578次阅读

    XDC约束及物理约束的介绍

    观看视频,了解和学习有关XDC约束,包括时序,以及物理约束相关知识。
    的头像 发表于 01-07 07:10 6143次阅读
    <b class='flag-5'>XDC</b><b class='flag-5'>约束</b>及物理<b class='flag-5'>约束</b>的介绍

    如何将Altera的SDC约束转换为Xilinx XDC约束

    了解如何将Altera的SDC约束转换为Xilinx XDC约束,以及需要更改或修改哪些约束以使Altera的约束适用于Vivado设计软件
    的头像 发表于 11-27 07:17 5069次阅读

    XDC时钟约束的三种基本语法

    XDC 是 Xilinx Design Constraints 的简写,但其基础语法来源于业界统一的约束规范SDC。XDC 在本质上就是 Tcl 语言,但其仅支持基本的 Tcl 语法如变量、列表
    的头像 发表于 01-30 17:29 9560次阅读

    Vivado IDE全面了解XDC文件的约束顺序

    Vivado IDE约束管理器将任何已编辑的约束保存回XDC文件中的原始位置,但不会保存在Tcl脚本中。 任何新约束都保存在标记为目标的XDC
    的头像 发表于 11-13 10:53 4096次阅读
    Vivado IDE全面了解<b class='flag-5'>XDC</b>文件的<b class='flag-5'>约束</b>顺序

    Vivado中XDC文件的约束顺序

    很对人在使用Vivado时喜欢使用多个约束文件对整个工程进行约束,同时Vivado允许设计者使用一个或多个约束文件。虽然使用一个约束文件对于一个完整的编译流程来说看似更方便,但是在一些
    的头像 发表于 10-13 16:56 6842次阅读

    XDC约束技巧之时钟

    Xilinx的新一代设计套件Vivado中引入了全新的约束文件 XDC,在很多规则和技巧上都跟上一代产品 ISE 中支持的 UCF 大不相同,给使用者带来许多额外挑战。Xilinx 工具专家告诉你,其实用好 XDC 很容易,只需
    的头像 发表于 03-28 09:51 2408次阅读

    XDC约束技巧CDC

    上一XDC 约束技巧之时钟》介绍了 XDC 的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟
    的头像 发表于 04-03 11:41 1980次阅读

    XDC约束技巧I/O(上)

    XDC 约束技巧之时钟》中曾对 I/O 约束做过简要概括,相比较而言,
    的头像 发表于 04-06 09:53 1260次阅读