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

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

3天内不再提示

揭秘FPGA跨时钟域处理的三大方法

454398 来源:alpha007 作者:alpha007 2022-12-05 16:41 次阅读

时钟域处理是 FPGA 设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个 FPGA 初学者的必修课。如果是还在校生,跨时钟域处理也是面试中经常常被问到的一个问题。

这里主要介绍三种跨时钟域处理的方法,这三种方法可以说是 FPGA 界最常用也最实用的方法,这三种方法包含了单 bit 和多 bit 数据的跨时钟域处理,学会这三招之后,对于 FPGA 相关的跨时钟域数据处理便可以手到擒来。

这里介绍的三种方法跨时钟域处理方法如下:

打两拍;

异步双口 RAM

格雷码转换。

01

方法一:打两拍

大家很清楚,处理跨时钟域的数据有单 bit 和多 bit 之分,而打两拍的方式常见于处理单 bit 数据的跨时钟域问题。

打两拍的方式,其实说白了,就是定义两级寄存器,对输入的数据进行延拍。

应该很多人都会问,为什么是打两拍呢,打一拍、打三拍行不行呢?

先简单说下两级寄存器的原理:两级寄存是一级寄存的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性减少其发生概率。总的来讲,就是一级概率很大,三级改善不大。

data 是时钟域 1 的数据,需要传到时钟域 2(clk)进行处理,寄存器 1 和寄存器 2 使用的时钟都为 clk。假设在 clk 的上升沿正好采到 data 的跳变沿(从 0 变 1 的上升沿,实际上的数据跳变不可能是瞬时的,所以有短暂的跳变时间),那这时作为寄存器 1 的输入到底应该是 0 还是 1 呢?这是一个不确定的问题。所以 Q1 的值也不能确定,但至少可以保证,在 clk 的下一个上升沿,Q1 基本可以满足第二级寄存器的保持时间和建立时间要求,出现亚稳态的概率得到了很大的改善。

如果再加上第三级寄存器,由于第二级寄存器对于亚稳态的处理已经起到了很大的改善作用,第三级寄存器在很大程度上可以说只是对于第二级寄存器的延拍,所以意义是不大的。

02

方法二:异步双口 RAM

处理多 bit 数据的跨时钟域,一般采用异步双口 RAM。假设我们现在有一个信号采集平台,ADC 芯片提供源同步时钟 60MHz,ADC 芯片输出的数据在 60MHz 的时钟上升沿变化,而 FPGA 内部需要使用 100MHz 的时钟来处理 ADC 采集到的数据(多 bit)。在这种类似的场景中,我们便可以使用异步双口 RAM 来做跨时钟域处理。

先利用 ADC 芯片提供的 60MHz 时钟将 ADC 输出的数据写入异步双口 RAM,然后使用 100MHz 的时钟从 RAM 中读出。对于使用异步双口 RAM 来处理多 bit 数据的跨时钟域,相信大家还是可以理解的。当然,在能使用异步双口 RAM 来处理跨时钟域的场景中,也可以使用异步 FIFO 来达到同样的目的。

03

方法三:格雷码转换

我们依然继续使用介绍第二种方法中用到的 ADC 例子,将 ADC 采样的数据写入 RAM 时,需要产生 RAM 的写地址,但我们读出 RAM 中的数据时,肯定不是一上电就直接读取,而是要等 RAM 中有 ADC 的数据之后才去读 RAM。这就需要 100MHz 的时钟对 RAM 的写地址进行判断,当写地址大于某个值之后再去读取 RAM。

在这个场景中,其实很多人都是使用直接用 100MHz 的时钟与 RAM 的写地址进行打两拍的方式,但 RAM 的写地址属于多 bit,如果单纯只是打两拍,那不一定能确保写地址数据的每一个 bit 在 100MHz 的时钟域变化都是同步的,肯定有一个先后顺序。如果在低速的环境中不一定会出错,在高速的环境下就不一定能保证了。所以更为妥当的一种处理方法就是使用格雷码转换。

对于格雷码,相邻的两个数间只有一个 bit 是不一样的(格雷码,在本文中不作详细介绍),如果先将 RAM 的写地址转为格雷码,然后再将写地址的格雷码进行打两拍,之后再在 RAM 的读时钟域将格雷码恢复成 10 进制。这种处理就相当于对单 bit 数据的跨时钟域处理了。

对于格雷码与十进制互换的代码,仅提供给大家作参考:

代码使用的是函数的形式,方便调用,op 表示编码或者译码,WADDRWIDTH 和 RADDRWIDTH 表示位宽。

审核编辑黄昊宇

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

    关注

    1643

    文章

    21983

    浏览量

    614688
  • 时钟域
    +关注

    关注

    0

    文章

    53

    浏览量

    9738
收藏 人收藏

    评论

    相关推荐
    热点推荐

    比亚迪 · 超级e平台 · 技术方案的全面揭秘 | 第曲: 30000转驱动电机 · 12项核心技术揭秘

    比亚迪 · 超级e平台 · 技术方案的全面揭秘 | 第曲: 30000转驱动电机 · 12项核心技术揭秘
    的头像 发表于 06-08 07:20 683次阅读
    比亚迪 · 超级e平台 · 技术方案的全面<b class='flag-5'>揭秘</b> | 第<b class='flag-5'>三</b>曲: 30000转驱动电机 · 12项核心技术<b class='flag-5'>揭秘</b>

    异步时钟处理方法大全

    方法只用于慢到快时钟的1bit信号传递。在Xilinx器件中,可以使用(* ASYNC_REG = "TRUE" *)标记,将两个寄存器尽量靠近综合,降低 亚稳态因导线延迟太大而传播到第二个寄存器的可能性。
    的头像 发表于 05-14 15:33 433次阅读
    <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>大全

    算力筑基!揭秘DeepSeek爆火的“心跳密码”——时钟同步

    当《哪吒2》登顶全球动画票房第一,DeepSeek也正在全球科技圈铸就新神话!作为国内时钟同步领域领衔者,赛思将以DeepSeek为例,从专业角度揭秘AI背后的“心跳密码”——时钟同步。
    的头像 发表于 03-03 13:59 503次阅读
    算力筑基!<b class='flag-5'>揭秘</b>DeepSeek爆火的“心跳密码”——<b class='flag-5'>时钟</b>同步

    探索对抗训练的概率分布偏差:DPA双概率对齐的通用自适的目标检测方法

    检测) 目标检测作为计算机视觉领域的核心任务,在闭集场景中已经取得了显著的进展。然而,现有的方法通常假设类别集合是固定的,并依赖于大量的标注数据,这导致它们在处理数据时,特别是在源
    的头像 发表于 01-15 13:45 634次阅读
    探索对抗训练的概率分布偏差:DPA双概率对齐的通用<b class='flag-5'>域</b>自适的目标检测<b class='flag-5'>方法</b>

    FPGA频率测量的三种方法

    1、FPGA频率测量? 频率测量在电子设计和测量领域中经常用到,因此对频率测量方法的研究在实际工程应用中具有重要意义。 通常的频率测量方法种:直接测量法,间接测量法,等精度测量法。
    的头像 发表于 01-09 09:37 681次阅读
    <b class='flag-5'>FPGA</b>频率测量的<b class='flag-5'>三种方法</b>

    TSP研究:车内网联服务向融合、全场景融合、舱驾融合方向拓展

    的数据采集与供应,进而为车主提供更加多样化服务。其服务内容涵盖导航服务、社交服务、娱乐服务、远程保养服务、安全服务等。 来源:公开资料 随着融合、舱驾融合等趋势的演进,TSP供应商也在悄然进步,从纯车内网联服务应用向
    的头像 发表于 01-06 09:40 1267次阅读
    TSP研究:车内网联服务向<b class='flag-5'>跨</b><b class='flag-5'>域</b>融合、全场景融合、舱驾融合方向拓展

    请问ADC32xx的时钟FPGA直接输出吗?

    大家好,我的ADC32XX 采样率为125M,将转换后的数据发送给FPGA,请问ADC32xx的时钟FPGA直接输出吗?FPGA IO口是3.3V的,如果是这样的话是不是得电平转换
    发表于 01-02 08:30

    一文解析时钟传输

    采样到的信号质量!最常用的同步方法是双级触发器缓存法,俗称延迟打拍法。信号从一个时钟进入另一个时钟之前,将该信号用两级触发器连续缓存两次
    的头像 发表于 11-16 11:55 1181次阅读
    一文解析<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>传输

    FIFO的深度应该怎么计算

    FIFO是FPGA/IC设计中经常使用到的模块,它经常被用在两个模块之间进行数据的缓存,以避免数据在传输过程中丢失。同时FIFO也经常被用在时钟
    的头像 发表于 10-25 15:20 888次阅读
    FIFO的深度应该怎么计算

    一种简单高效配置FPGA方法

    本文描述了一种简单高效配置FPGA方法,该方法利用微处理器从串行外围接口(SPI)闪存配置FPGA设备。这种
    的头像 发表于 10-24 14:57 1453次阅读
    一种简单高效配置<b class='flag-5'>FPGA</b>的<b class='flag-5'>方法</b>

    FPGA Verilog HDL有什么奇技巧?

    模块的时序风险:在进行 design partition(设计划分)时,如果前后两个模块时钟不同,采用 register in(寄存器输入)可能会引入时钟
    发表于 09-12 19:10

    FPGA如何消除时钟抖动

    FPGA(现场可编程门阵列)设计中,消除时钟抖动是一个关键任务,因为时钟抖动会直接影响系统的时序性能、稳定性和可靠性。以下将详细阐述FPGA中消除
    的头像 发表于 08-19 17:58 2598次阅读

    LMH32404 TIA阻输入信号过大输出信号畸变怎么解决?

    电流值限制光电二极管电流进入TIA幅值,此方法没找到合适的器件; 2、在TIA阻输入端对地加入一个极管或MOS,此极管基极受控阻输出
    发表于 08-05 06:58

    极限失控的大模型使电力系统面临的攻击风险及应对措施

    分析大规模生成式预训练模型(以下简称为大模型)发生极限失控、使电力系统面临的攻击风险及相关的应对措施,以期引起业内对这一风险的重视、讨论与行动。基于大模型的现状、发展趋势以及它与人工智能反叛之间
    发表于 07-22 12:09 0次下载

    FPGA异步信号处理方法

    FPGA(现场可编程门阵列)在处理异步信号时,需要特别关注信号的同步化、稳定性以及潜在的亚稳态问题。由于异步信号可能来自不同的时钟或外部设备,其到达时间和频率可能不受
    的头像 发表于 07-17 11:10 1808次阅读