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

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

3天内不再提示

XDC约束技巧之CDC篇

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

上一篇《XDC 约束技巧之时钟篇》介绍了 XDC 的优势以及基本语法,详细说明了如何根据时钟结构和设计要求来创建合适的时钟约束。我们知道 XDC 与 UCF 的根本区别之一就是对跨时钟域路径(CDC)的缺省认识不同,那么碰到 FPGA 设计中常见的 CDC 路径,到底应该怎么约束,在设计上又要注意些什么才能保证时序报告的准确性?

CDC的的定义与分类

CDC 是 Clock DomainCrossing 的简称,CDC 时序路径指的是起点和终点由不同时钟驱动的路径。在电路设计中对这些跨时钟域路径往往需要进行特别的处理来避免亚稳态的产生,例如使用简单同步器、握手电路或是 FIFO 来隔离。

安全的CDC路径

所谓安全的 CDC 路径是指那些源时钟和目标时钟拥有相同的来源,在 FPGA 内部共享部分时钟网络的时序路径。这里的安全指的是时钟之间的关系对 Vivado来说是全透明可分析的。

dd85dd44-d08d-11ed-bfe3-dac502259ad0.png

不安全的CDC路径

不安全的 CDC 路径则表示源时钟和目标时钟不同,且由不同的端口进入 FPGA,在芯片内部不共享时钟网络。这种情况下,Vivado 的报告也只 是基于端口处创建的主时钟在约束文件中所描述的相位和频率关系来分析, 并不能代表时钟之间真实的关系。

ddc8ff2a-d08d-11ed-bfe3-dac502259ad0.png

在 Vivado 中分析 CDC

在 ISE 中想要快速定位那些需要关注的 CDC 路径并不容易,特别是要找到不安全的 CDC 时,因为 ISE 缺省认为所有来源不同的时钟都不相关且不做分析,要报告出这类路径,需要使用 ISE Timing Analyzer (TRCE) ,并加上 “-u” (表示 unconstrained)这个选项。

在 Vivado 中则容易许多,我们可以使用report_clock_interaction 命令(GUI 支持)来鉴别和报告设计中 所有的时钟关系。执行命令后会生成一个矩阵图,其中对角线上的路径表示源时钟与目标时钟相同的时钟内部路径,其余都是 CDC 路径。

Vivado 还会根据网表和已读入的约束分析出 CDC 路径的约束情况,并分颜色表示。例如绿色代表有时序约束,红色代表不安全的 CDC 路径但是没有约束时序例外,橙色表示有部分路径已约束为 false path 的不安 全 CDC 路径。

ddf510e2-d08d-11ed-bfe3-dac502259ad0.png

矩阵下方是时钟关系表格,可以就各种条件进行筛选和排序,方便定位 CDC 路径。建议的做法是:首先,对“Common Primary Clock”排序(显示为 Yes 或 No),这么做可以快速鉴别出那些安全和不安全的 CDC 路径,接着观察对应的“Inter-Clock Constraints”栏内的内容,判断已读入的XDC 中是否对这类路径进行了合理的约束。

de1c99f0-d08d-11ed-bfe3-dac502259ad0.png

第二步,可以对“Path Req (WNS)”由小到大进行排序,找到那些数值特别小(例如小于 100ps)或是显示 为“Unexpanded”的 CDC 路径,结合是否共享“CommonPrimary Clock”来鉴别此类路径,作出合理的约束。

过小的 Path Req (WNS)一般都表示此类跨时钟域路径缺少异步时钟关系或其它时序例外的约束,如果两 个时钟连“Common Primary Clock”也不共享,则 100%可以确认为异步时钟,应该加上相应的时钟关系约束。

显示为“Unexpanded”的时钟关系,表示 Vivado 在一定长度(缺省为 1000)的周期内都没有为两个时钟的频率和相位找到固定的关系,则无法推导出相应的 Path Req 约束值。此类 CDC 需要特别留意,也要加上异 步时钟关系约束。

这个矩阵还支持交互式的时序分析,选中任意一个方框,右键显示下拉菜单:选择 Report Timing,会报 告出这一格代表的时钟域(本时钟域或是跨时钟域)内最差的时序路径;选择Set Clock Groups 则可以设置时钟关系约束并添加到 XDC 文件中。

CDC 的设计与约束

CDC 路径在 FPGA 设计中普遍存在,在设置 相应的约束前,必须了解设计中采取了怎样的方法来处理跨时钟域路径。

简单同步器

对于单根跨时钟域路径,一般采用简单同步器(Simple Synchronizer),就是由至少两级 CE 端 和 Reset/Clear 端接死的寄存器序列来处理。

de765e86-d08d-11ed-bfe3-dac502259ad0.png

这种情况下,为了更长的平均无故障时间 MTBF(Mean Time Between Failures),需要配合一个 ASYNC_REG的约束,把用作简单同步器的多个寄存器放入同一个 SLICE,以降低走线延时的不一致和不确定性。

set_property ASYNC_REG TRUE [get_cells [list sync0_reg sync1_reg]]

在 XDC 中,对于此类设计的 CDC 路径,可以采用 set_clock_groups 来约束。

dea2c372-d08d-11ed-bfe3-dac502259ad0.png

用 FIFO 隔离 CDC

在总线跨时钟域的设计中,通常会使用异步 FIFO 来隔离。根据 FIFO 的实现方式不同,需要加入不同的 XDC 约束。

Build-in 硬核 FIFO

这种 FIFO 实际上就是用 FPGA 内部的 BRAM 来搭建,所有控制逻辑都在 BRAM 内部,是推荐的 FIFO 实现方式。其所需的 XDC 也相对简单,只要像上述简单同步器的时钟关系约束一样用 set_clock_groups 将读写时钟约束为异步即可。

带有格雷码控制的 FIFO

为了在亚稳态下做读写指针抽样也能正确判断空满状态,设计中也常用一种带有格雷码控制的 FIFO 来实现异步时钟域的隔离。计数器和读写指针等需要用 BRAM 外部的逻辑搭建,这样的结构就不能简单约束 set_clock_groups,还要考虑这些外部逻辑如何约束。

如下图所示 FIFO,在存储器外部有一些用 FPGA 逻辑搭建的写指针和读指针控制,分属不同的时钟域,存在跨时钟域的时序路径。

此时如果仅将读写时钟用 set_clock_groups 约束为异步时钟,相当于设置从 A 到 B 和从 B 到 A 的路径全部为 false path。根据《XDC 约束技巧之时钟篇》所列,false path 的优先级最高,很显然这么做会导致所有 跨读写时钟域的路径全部不做时序分析,读写指针和相关控制逻辑也就失去了存在的意义。

def40aac-d08d-11ed-bfe3-dac502259ad0.png

所以建议的做法是不设 set_clock_groups 约束,转而采用 set_max_delay 来约束这些跨时钟域路径。以写入侧举例,一个基本的原则就是约束从 cell1 到 cell2 的路径之间的延时等于或略小于 cell2 的驱动时钟一个周期的值。读出侧的约束同理。

set_max_delay $delay –from [get_cells cell1] –to [get_cells cell2] –datapath_only

如果用户使用 Vivado 的 IP Catalog 来产生此类FIFO,这样的 XDC 会随 IP 的源代码一起输出(如下所示),使用者仅需注意确保这个 FIFO 的读写时钟域没有被用户自己的 XDC 约束为 false path 或是异步 clock groups 。

df2f620a-d08d-11ed-bfe3-dac502259ad0.png

自 2013.4 开始,Vivado 中还提供一个称作 methodology_checks 的 DRC 检查,其中包含有对此类异步FIFO 的 max delay 约束与时钟域 clock groups 约束的冲突检查。

CDC 约束方案的对比

CDC 路径在 FPGA 设计中普遍存在,不少公司和研发人员都有自己偏爱的约束方式,这些方式通常有各自适用的环境,当然也各有利弊。

全部忽略的约束

最大化全部忽略 CDC 路径的约束,即采用 set_clock_groups 或是 set_false_path 对时钟关系进行约束, 从而对跨时钟域的路径全部忽略。

示例:set_clock_groups -asynchronous -group clkA -group clkB

优势:简单、快速、执行效率高。

劣势:会掩盖时序报告中所有的跨时钟域路径,容易误伤,不利于时序分析。

使用 datapath_only 约束

datapath_only 是从 ISE 时代的 UCF 中继承过来的约束,在 XDC 中必须作为一个选项跟 set_max_delay 配合使用,可以约束在时钟之间,也可以对具体路径进行约束。

示例:set_max_delay 10 -datapath_only -from clkA -to clkB

优势:简便、执行效率较高。

劣势:1) 需要特别留意是否设置了过于严格的约束,因为使用者经常会使用较快的时钟周期来约束跨时钟域路径 。2) 注意约束优先级的关系,是否跟设计中其它的约束有冲突。3) set_max_delay 而没 有配套设置 set_min_delay 的情况下,同一路径只做 setup 分析而不做 hold 分析。

逐条进行时序例外约束

对设计中的 CDC 路径分组或逐条分析,采用不同的时序例外约束,如 set_false_path,set_max_delay 和 set_multicycle_path 等来约束。

示例:set_false_path -from [get_cells a/b/c/*_meta*] -to [get_cellsa/b/c/*_sync*]

优势:灵活、针对性好、便于时序分析和调试。

劣势:1) 逐条约束会占用大量时间来调试和分析,效率低下。2) 时序例外的优先级比较复杂,多种时序例外约束共存的情况下,很容易产生意想不到的冲突,进一步增加调试时间,降低效率。3) 这么做极容易产生臃肿的 XDC 约束文件,而且时序例外的执行更耗内存,直接导致工具运行时间变长。

小结

CDC 路径的分析和约束不仅在FPGA 设计中至关重要,也是数字电路设计领域一个非常重要的命题。IP 提供商、EDA 公司都有不少关于 CDC 的技术文档。Vivado 相比于 Xilinx 上一代产品 ISE,已经在 CDC 的鉴别和分析方面有了很大改进,XDC 相比于 UCF,在 CDC 路径的约束上也更为高效,覆盖率更高。

希望本篇短文可以帮助 Vivado 的用户快速掌握对 FPGA 设计中 CDC 路径的鉴别、分析和约束方法,提高设计效率。

审核编辑:汤梓红

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

    关注

    1602

    文章

    21320

    浏览量

    593194
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12637
  • UCF
    UCF
    +关注

    关注

    0

    文章

    9

    浏览量

    9576
  • xdc
    xdc
    +关注

    关注

    1

    文章

    23

    浏览量

    5870

原文标题:XDC 约束技巧之CDC篇

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

收藏 人收藏

    评论

    相关推荐

    关于XDC约束文件,你需要知道的几点

    作者: 圆宵 FPGA那点事儿 在ISE时代,使用的是UCF约束文件。从Vivado开始,XDC成了唯一支持的约束标准。XDC除了遵循工业界的通行标准SDC(Synopsys Desi
    发表于 02-08 02:10 4676次阅读

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

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

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

    XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭。加之FPGA的应用特性决定了其在接口上有多种构建和实现方式,所以从UCF到XDC的转换过程中,最具挑战的可以说
    发表于 11-17 19:01 6757次阅读
    FPGA设计<b class='flag-5'>约束</b>技巧之<b class='flag-5'>XDC</b><b class='flag-5'>约束</b>之I/O篇(下)

    XDC的时钟约束及优势

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

    XDC路径的鉴别、分析和约束方法

    我们知道XDC与UCF的根本区别之一就是对跨时钟域路径(CDC)的缺省认识不同,那么碰到FPGA设计中常见的CDC路径,到底应该怎么约束,在设计上又要注意些什么才能保证时序报告的准确性
    发表于 11-18 04:04 5875次阅读
    <b class='flag-5'>XDC</b>路径的鉴别、分析和<b class='flag-5'>约束</b>方法

    XDC约束及物理约束的介绍

    观看视频,了解和学习有关XDC约束,包括时序,以及物理约束相关知识。
    的头像 发表于 01-07 07:10 5618次阅读
    <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 4664次阅读

    CDC设计和约束技巧

    建议的做法是:首先,对“Common Primary Clock”排序(显示为Yes 或No),这么做可以快速鉴别出那些安全和不安全的CDC路径,接着观察对应的“Inter-Clock Constraints”栏内的内容,判断已读入的XDC中是否对这类路径进行了合理的
    的头像 发表于 07-24 17:19 5049次阅读
    <b class='flag-5'>CDC</b>设计和<b class='flag-5'>约束</b>技巧

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

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

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

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

    FPGA知识之xdc约束优先级

    xdc约束优先级 在xdc文件中,按约束的先后顺序依次被执行,因此,针对同一个时钟的不同约束,只有最后一条
    的头像 发表于 11-16 17:37 1612次阅读

    Vivado中XDC文件的约束顺序

    使得问题更加复杂,比如一个设计使用了不同的IP核或者由不同团队开发的模块。不管设计者在设计中,使用了一个还是多个XDC文件,Xilinx推荐设计者使用下面的顺序来组织约束XDC文件的约束
    的头像 发表于 10-13 16:56 6366次阅读

    XDC约束技巧之时钟篇

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

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

    XDC 约束技巧之时钟篇》中曾对 I/O 约束做过简要概括,相比较而言,XDC 中的 I/O 约束虽然形式简单,但整体思路和
    的头像 发表于 04-06 09:53 781次阅读

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

    继《XDC 约束技巧之 I/O 篇(上)》详细描述了如何设置 Input 接口 约束后,我们接着来聊聊怎样设置 Output 接口约束,并分析 UCF 与
    的头像 发表于 04-10 11:00 665次阅读