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
    +关注

    关注

    1633

    文章

    21816

    浏览量

    607092
  • 时钟域
    +关注

    关注

    0

    文章

    52

    浏览量

    9591
收藏 人收藏

    相关推荐

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

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

    FPGA频率测量的三种方法

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

    一种简单高效配置FPGA方法

    本文描述了一种简单高效配置FPGA方法,该方法利用微处理器从串行外围接口(SPI)闪存配置FPGA设备。这种
    的头像 发表于 10-24 14:57 899次阅读
    一种简单高效配置<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 1764次阅读

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

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

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

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

    FPGA异步信号处理方法

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

    电路板检查故障的六大方法有哪些

    在这篇文章中,我们将详细介绍检查电路板故障的六大方法。这些方法将帮助大家更有效地诊断和修复电路板问题。以下是电路板检查故障的六大方法: 视觉检查 测量电压和电流 电阻测试 电容测试 信号追踪
    的头像 发表于 05-29 14:54 7530次阅读

    基于FPGA的实时边缘检测系统设计,Sobel图像边缘检测,FPGA图像处理

    的 EP4CE6F17C8 型号的 FPGA ,系统整体框图如图1所示,主要包括 FPGA 并行运算平台、摄像头采集模块、存储模块和显示模块,设计时采用自顶向下的设计模式,使用全局复位和时钟
    发表于 05-24 07:45

    单芯片运行六个操作系统,芯驰科技交卷融合

    关于智能汽车的整车架构如何发展,行业内已经达成了步走的共识。过去汽车行业采用的是分布式的计算架构,目前正迈入更加集成化的融合阶段,而对于未来的设想则是实现中央计算。
    的头像 发表于 05-09 15:17 624次阅读

    FPGA时钟电路结构原理

    FPGA 中包含一些全局时钟资源。以AMD公司近年的主流FPGA为例,这些时钟资源由CMT(时钟管理器)产生,包括DCM、PLL和MMCM等
    发表于 04-25 12:58 2084次阅读
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>时钟</b>电路结构原理

    介绍一个IC设计错误案例:可读debug寄存器错误时钟

    本文将介绍一个时钟错误的案例如图所示,phy_status作为一个多bit的phy_clk时钟的信号,需要输入csr模块作为一个可读状态寄存器
    的头像 发表于 03-11 15:56 623次阅读
    介绍一个IC设计错误案例:可读debug寄存器错误<b class='flag-5'>跨</b><b class='flag-5'>时钟</b>