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

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

3天内不再提示

跨时钟域电路设计:多位宽数据通过FIFO跨时钟域

FPGA技术驿站 来源:FPGA技术驿站 2023-05-11 14:01 次阅读

FIFO是实现多位宽数据的异步跨时钟域操作的常用方法,相比于握手方式,FIFO一方面允许发送端在每个时钟周期都发送数据,另一方面还可以对数据进行缓存。需要注意的是对FIFO控制信号的管理,以避免发生“写满”后继续写或“读空”后继续读的状况。这些控制信号包括写时钟域下的写使能信号(wr_en,输入)和写满标记信号(full,输出),读时钟域下的读使能信号(rd_en,输入)和读空标记信号(empty,输出),如下图所示。图中黑色标记信号为必选信号如输入/输出数据信号2(din/dout),蓝色标记信号为可选信号如快满/快空信号(almost_full/almost_empty)。

deebaa8e-efbd-11ed-90ce-dac502259ad0.png

无论是通过XPM方式(XPM_FIFO)还是IP方式(FIFO Generator),都需要注意,因为这里针对的是异步跨时钟域情形,所以XPM应选择xpm_fifo_async,使用IP时应选择Independent Clocks,如下图所示。

df148ecc-efbd-11ed-90ce-dac502259ad0.png

从约束层面看,无论是XPM_FIFO还是IP方式,都会有自带的约束,如下图所示。这些自带约束包括set_max_delay,set_bus_skew和set_false_path,如图中蓝色方框内容所示。尤其要注意的是set_max_delay约束,由于其优先级较set_clock_groups和set_false_path低,故要避免该约束被其所覆盖,导致约束失效。

df2b0ee0-efbd-11ed-90ce-dac502259ad0.png

具体来说,如果wr_clk和rd_clk两个时钟域下除了通过FIFO隔离的路径外,还有其他跨时钟域路径,对于这些跨时钟域路径,倘若直接采用set_clock_groups进行约束,如下图所示,那么就会导致FIFO自带的set_max_delay被覆盖掉。这可通过命令report_exceptions查看,如下图所示,注意图中红色方框标记。

df47c724-efbd-11ed-90ce-dac502259ad0.png

df65bf18-efbd-11ed-90ce-dac502259ad0.png

在这种情形下,显然不能再用set_clock_groups进行约束。那么该如何对这些跨时钟域路径约束呢?我们分情况讨论。如果对这些跨时钟域路径操作使用的是XPM_CDC,那么Vivado会直接使用其自带约束,这些自带约束的作用域仅限于XPM_CDC,所以不会覆盖FIFO自带约束。如果对这些跨时钟域路径操作使用的是用户模块,那么在约束时,若确认为伪路径,应使用set_false_path,同时-from和-to的对象应使用get_cells或get_pins获取,而不能使用get_clocks获取。如果cell较多,而且也无法用通配符完全匹配到,那么可以使用如下方式:即仍使用set_max_delay外加选项-datapath_only,-from和-to的对象仍通过get_clocks获取,而延迟值可以填一个很大的值,如这里的50(代表50ns),这样就等效于set_false_path。report_exceptions的结果也显示FIFO自带约束没有被覆盖,如下图所示。

df7ec062-efbd-11ed-90ce-dac502259ad0.png

dfa1ded0-efbd-11ed-90ce-dac502259ad0.png

综上所述,使用异步FIFO完成多位宽数据的跨时钟域操作时,要注意FIFO自带有set_max_delay约束,确保该约束不会被set_false_path或set_clock_groups所覆盖,否则可能发生时序收敛,但系统不能正常工作的情形。

审核编辑:汤梓红

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

    关注

    6673

    文章

    2451

    浏览量

    204166
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43649
  • 信号
    +关注

    关注

    11

    文章

    2789

    浏览量

    76730
  • 时钟域
    +关注

    关注

    0

    文章

    52

    浏览量

    9535
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66472

原文标题:跨时钟域电路设计(7):多位宽数据通过FIFO跨时钟域

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    多位数据通过握手方式时钟

    对于多位数据,我们可以采用握手方式实现时钟操作。该方式可直接使用xpm_cdc_hands
    的头像 发表于 05-06 09:22 1145次阅读
    <b class='flag-5'>多位</b><b class='flag-5'>宽</b><b class='flag-5'>数据通过</b>握手方式<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>

    时钟的解决方案

    在很久之前便陆续谈过亚稳态,FIFO,复位的设计。本次亦安做一个简单的总结,从宏观上给大家展示时钟的解决方案。
    的头像 发表于 01-08 09:42 903次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>的解决方案

    如何处理好FPGA设计中时钟间的数据

    时钟处理是FPGA设计中经常遇到的问题,而如何处理好时钟间的
    发表于 07-29 06:19

    如何处理好时钟间的数据

    时钟处理是什么意思?如何处理好时钟间的数据
    发表于 11-01 07:44

    看看Stream信号里是如何做时钟握手的

    popArea里stream.m2sPipe,这个版本效率相较于前者,略低一些:StreamFifoCC这个就没有什么好说的了,通过fifo来实现stream信号的时钟
    发表于 07-07 17:25

    如何解决异步FIFO时钟亚稳态问题?

    时钟的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟
    的头像 发表于 09-05 14:29 6056次阅读

    关于FPGA中时钟的问题分析

    时钟问题(CDC,Clock Domain Crossing )是多时钟设计中的常见现象。在FPGA领域,互动的异步时钟
    发表于 08-19 14:52 3346次阅读

    关于时钟的详细解答

    每一个做数字逻辑的都绕不开时钟处理,谈一谈SpinalHDL里用于时钟处理的一些手段方法
    的头像 发表于 04-27 10:52 4268次阅读
    关于<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>的详细解答

    单位信号如何时钟

    单位(Single bit)信号即该信号的位为1,通常控制信号居多。对于此类信号,如需时钟可直接使用xpm_cdc_single
    的头像 发表于 04-13 09:11 1314次阅读

    时钟电路设计总结

    时钟操作包括同步时钟操作和异步
    的头像 发表于 05-18 09:18 735次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路设计</b>总结

    FPGA时钟处理方法(一)

    时钟是FPGA设计中最容易出错的设计模块,而且一旦时钟出现问题,定位排查会非常困难,因为
    的头像 发表于 05-25 15:06 1986次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理方法(一)

    FPGA时钟处理方法(二)

    上一篇文章已经讲过了单bit时钟的处理方法,这次解说一下多bit的时钟方法。
    的头像 发表于 05-25 15:07 1021次阅读
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>处理方法(二)

    时钟电路设计—单比特信号传输

    时钟(CDC)的应从对亚稳定性和同步性的基本了解开始。
    的头像 发表于 06-27 14:25 1054次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路设计</b>—单比特信号传输

    时钟电路设计:单位信号如何时钟

    单位(Single bit)信号即该信号的位为1,通常控制信号居多。对于此类信号,如需时钟可直接使用xpm_cdc_single,如
    的头像 发表于 08-16 09:53 1333次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>电路设计</b>:单位<b class='flag-5'>宽</b>信号如何<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>

    fpga时钟通信时,慢时钟如何读取快时钟发送过来的数据

    时,由于时钟频率不同,所以可能会产生元件的不稳定情况,导致传输数据的错误。此时我们需要采取一些特殊的措施,来保证时钟传输的正确性。 FP
    的头像 发表于 10-18 15:23 1066次阅读