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所覆盖,否则可能发生时序收敛,但系统不能正常工作的情形。

审核编辑:汤梓红

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

    关注

    6565

    文章

    2318

    浏览量

    195484
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43074
  • 信号
    +关注

    关注

    11

    文章

    2640

    浏览量

    75392
  • 时钟域
    +关注

    关注

    0

    文章

    49

    浏览量

    9455
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65106

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

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

收藏 人收藏

    评论

    相关推荐

    FPGA设计中有多个时钟时如何处理?

    FPGA设计中有多个时钟时如何处理?时钟的基本设计方法是:(1)对于单个信号,使用双D触发器在不同
    发表于 02-24 15:47

    quartus仿真双口RAM 实现时钟通信

    双口RAM如何实现时钟通信啊?怎么在quartus ii仿真???
    发表于 05-02 21:51

    时钟时钟约束介绍

    解释了什么时候要用到FALSE PATH: 1.从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。 2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟
    发表于 07-03 11:59

    时钟为什么要双寄存器同步

    寄存器就等于增加逻辑资源,增加money。如果设计中的时钟信号并非像前面的例子那样快速或实时变化,或者采样时钟频率远高于采样数据,并且我
    发表于 08-20 11:32

    如何处理好FPGA设计中时钟问题?

    地址的格雷码进行打两拍,之后再在 RAM 的读时钟将格雷码恢复成 10 进制。这种处理就相当于对单 bit 数据时钟
    发表于 09-22 10:24

    探寻FPGA中三种时钟处理方法

    地址的格雷码进行打两拍,之后再在 RAM 的读时钟将格雷码恢复成 10 进制。这种处理就相当于对单 bit 数据时钟
    发表于 10-20 09:27

    三种时钟处理的方法

      时钟处理是FPGA设计中经常遇到的问题,而如何处理好时钟间的
    发表于 01-08 16:55

    三种FPGA界最常用的时钟处理法式

    。对于使用异步双口RAM来处理多bit数据时钟,相信大家还是可以理解的。当然,在能使用异步双口RAM来处理
    发表于 02-21 07:00

    FPGA初学者的必修课:FPGA时钟处理3大方法

    。对于使用异步双口RAM来处理多bit数据时钟,相信大家还是可以理解的。当然,在能使用异步双口RAM来处理
    发表于 03-04 09:22

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

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

    如何处理好时钟间的数据

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

    两级DFF同步器时钟处理简析

    异步bus交互(一)— 两级DFF同步器时钟处理 & 亚稳态处理1.问题产生现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟
    发表于 02-17 06:34

    FPGA时钟处理简介

    (10)FPGA时钟处理1.1 目录1)目录2)FPGA简介3)Verilog HDL简介4)FPGA时钟
    发表于 02-23 07:47

    讨论时钟时可能出现的三个主要问题及其解决方案

    域中添加同步器来避免亚稳态问题。同步器允许振荡在足够的时间稳定下来,并确保在目标时钟获得稳定的输出。一个常用的同步器是一个级联触发器,如下图所示。该结构主要用于设计中的控制信号和单比特数据信号。
    发表于 06-23 15:34

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

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