【Chips】跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?

FPGA面试题(4)(跨时钟域处理) 打拍的作用:第一拍是异步信号转同步信号,第二拍及以后是防止亚稳态传递。理论来说,打两拍也不是完全消除亚稳态,只是降低了亚稳态出现的概率。触发器进入亚稳态的时间计算可以用参数MBTF计算,其公式如下其中MBTF的值越大,亚稳态出现的概率越小。而打拍可以增大MBTF的值。简而言之就是:打一拍仍然有很大概率出现亚稳态,打两拍出现亚稳态概率不大,打三拍相较于打两拍亚稳态出现的概率更低,但是除非超高频没必要。 阅读详情
AI摘要

本文解析了跨时钟域中亚稳态的处理方法,解释了为何采用“打两拍”而非“打一拍”。通过实例分析,探讨了不同情况下亚稳态的影响及对策。

Title: 跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?

  • 前言

    个人颜色习惯:

    黑色加粗:突出显示;

    红色:重要;

    洋红色:产生的疑问 question;

    蓝色:个人思考 或 针对问题的Solution

1 个人疑惑

在学习 “跨时钟域的亚稳态的应对措施” 时,常会看到有三种解决方案:

  1. 单bit信号,用:打两拍
  2. 多bit信号,用:异步FIFO
  3. 多bit信号,用:格雷码
  4. 多bit信号,用:握手

记是记住了,但我有好几个疑惑一直没理解,网上冲浪却搜不到答案、还是非常困惑…
以下是我的疑惑:

  1. 为什么用“打两拍”来应对跨时钟域的亚稳态,“打一拍” 不行吗?

  2. 为什么说,用“打两拍”只是降低了亚稳态的概率,但也有可能导致亚稳态的传递呢?

    若后接了个FF,随着posedge clk的出现,触发器不应该直接就采到0或1了吗,为啥亚稳态还有一定概率传递呢?

  3. 假设是DFF(D触发器),其亚稳态稳定后的值,会恢复为正确的预期输出值吗? 还是就算稳定了也是无效输出?

  4. 即使 “打两拍”能阻止“亚稳态的传递”,但亚稳态导致后续FF sample到的值依然不一定是符合预期的值,那 “错误的值” 难道不依然会向后传递,从而造成错误的后果吗?

  5. 多bit的跨时钟域情况用 异步FIFO处理,好理解;格雷码有啥用嘞?
    格雷码可以让相邻二进制数变化只改变1位,但在多bit的data传输过程中,data value不都是随机变化么,格雷码有啥用嘞?

主要是前面关于打两拍的疑惑,网上冲浪找不到解答的帖子。
网上只有两个核心的回答,但对我这样的数电小白,完全是没有回答到我个人解惑的点子上,但解惑后再看,会有新的收获:

  1. 打两拍的目的:第一拍是异步信号转同步,第二拍是防止亚稳态的传递。

    我听了还是很迷。( ̄▽ ̄)"

  2. 打一拍和打两拍和打三拍的区别:用触发器进入亚稳态的平均故障时间间隔MTBF进行计算,证明打拍数增加,产生亚稳态的可能性递减:打一拍直接用,很可能出现亚稳态输出;打两拍再直接用,出现亚稳态的概率是109年出现一次(具体计算参数见reference);打三拍再直接俄用,出现的概率更低,但是除非超高频率不然没必要。

    可见reference:跨时钟域同步,为什么两级寄存器结构能够降低亚稳态? —— 知乎 龚黎明

那我个人疑惑呢,最后在外网 stack exchange 上解答了——这个老哥居然和我的疑问一毛一样! 实在是欣慰,久旱逢甘霖…( ̄▽ ̄)"

Stack Exchange上的回答:How does 2-ff synchronizer ensure proper synchonization?
(不知为什么用firefox不显示问题图片,用chrome才显示图片…)

于是,我打算用自己的话,记录一下它的问题与回答,也回答我个人的疑惑~

2 概念补充

什么是亚稳态 metastable state?

首先要阐述一下亚稳态的概念。
元器件在现实运行时,触发器输出的逻辑0/1需要时间跳变,而不是瞬发的。因此,若未满足此cell的建立时间、保持时间,其输出值则为中间态,那在logic上可能算成0也可能算成1很难讲(波形显示上可能是毛刺、振荡、固定值等),这就是亚稳态。

一般波形图像上,1是高电平,0是低电平;但微观的亚稳态波形如下:

在这里插入图片描述
如图所示:亚稳态的输出波形会卡在中间,过一段时间后,可能稳定成1,也可能稳定成0,但都和原预期值没啥关系了,是无效的!

单bit信号,应用“打两拍”的电路结构图

在这里插入图片描述

这张图,给出了两个点:

  1. “打两拍”后可以直接接组合逻辑电路。

    我之前以为后面必接时序电路,相当于后面的电路也是触发器,于是产生了:“把打两拍改成打一拍,算上后面的时序电路,不也是相当于打两拍吗” 这样的愚蠢困惑…( ̄▽ ̄)"

  2. 下方的波形给了“打两拍能大概率防止亚稳态传递”的图示:

    由于异步data变的太突然,第一拍sample后出现亚稳态,第三拍sample后把亚稳态堵住了,得到正常电平(但值不一定和原预期相同)。

3 解惑环节

综上,可以解答我之前的3个疑惑了:

  1. 为什么用“打两拍”来应对跨时钟域的亚稳态,“打一拍” 不行吗?

    如打两拍的电路结构图所示:打一拍的话,若第一拍sample到亚稳态,则后续组合逻辑电路的输入直接就是亚稳态波形,肯定会把亚稳态传递下去,就完犊子了。

  2. 为什么说,用“打两拍”只是降低了亚稳态的概率,但也有可能导致亚稳态的传递呢?

    如前面的两张亚稳态的波形所示,亚稳态如果在1T内稳定成高电平或低电平了(概率80%),那第2拍就sample到正常的0或1;若亚稳态1T最后还是中间态,那第2拍还是可能出现亚稳态的,但概率低。

    亚稳态稳定需要多久,具体时间由工艺决定。

  3. 假设是DFF(D触发器),其亚稳态稳定后的值,会恢复为正确的预期输出值吗? 还是就算稳定了也是无效输出?

    如前面的亚稳态微观波形所说:即使亚稳态稳定了,值也无效。

剩下俩疑惑,大头讲。见下文。

打两拍的sample到错误数据怎么办

  • sample亚稳态,结果可能多样

    sample亚稳态,得到的结果可能取决于亚稳态最后稳定于什么状态,如下图表示出各种sample的可能:

在这里插入图片描述

如图所示,adat是实际的异步data、bq1_dat是两级触发器中的第一个寄存器sample的数据、bq2_dat是第二个寄存器sanple到的数据,bclk是同步时钟。
则:

a)中,异步data持续2T;FF1 sample到亚稳态时,FF2在下一cycle 对亚稳态的sample是0;但最终sample到了正确的data值。

b)中,异步data持续2T;FF1 sample到亚稳态时,FF2在下一cycle 对亚稳态的sample是1;但最终sample到了正确的data值。

c)中,异步data马上结束,等价于只持续1T(相当于没sample到就错过了);FF1 sample到亚稳态时,FF2在下一cycle 对亚稳态的sample是1;运气好,最终sample到了正确的data值。

d)中,异步data马上结束,等价于只持续1T;FF1 sample到亚稳态时,FF2在下一cycle 对亚稳态的sample是0;相当于最终错过了data值,没sample到…

那咋办,岂不是说明“打两拍”的方法不行???

  • 答案:

    因为 “打两拍” 的目的,是为了在单bit传输时,尽可能的防止亚稳态的传递,至于这个sample的正确性,本来就不是重点。这种“sample的正确性如何保证”得根据信号的具体类型、目的、应用场景,来进行具体的讨论。

    1. Trigger Signals:一个脉冲信号,用来开机、启动什么的。它没什么数据信息量,早一个clk、晚一个clk都ok,反正能起作用就行。那上面这个问题就无所谓了。唯一要保证的是,原始异步脉冲信号至少保持2T!(保证打两拍后,能sample到有效信号)
    2. Control Buses:因为有多bit数据需要进行同步,关系比较复杂。那就不能用 “打两拍” 的方法,得用 “握手机制“。
    3. Data Buses:这种情况,非常在乎上面提到的正确性问题。所以就 更不应该用 ”打两拍“方法,得用 异步FIFO的好吧… 在异步FIFO中的指针使用格雷码,可以降低指针在跳变时出现的亚稳态风险、冒险现象。也就说,格雷码和异步FIFO是结合使用的… ( ̄▽ ̄)"
  • 总结:

    1. 当你在乎跨时钟域 “用打两拍解决亚稳态,导致后续sample可能未sample到正确结果” 的case,那就不该用 “打两拍” 的方案,可以考虑异步FIFO和握手机制!而格雷码,和异步FIFO是联合使用的。
    2. “打两拍”的方法,若应用于“从快速时钟域同步到慢速时钟域”,数据得多保持几T,不然会漏采数据。
为什么打两拍可以消除亚稳态的影响? 为什么打两拍可以消除亚稳态的影响? 首先,我们需要了解什么是亚稳态,看下图 简单来说,就是当时钟信号上升沿到来的时候正好采样的数据也在发生变化,但是对于采样的时钟信号,如果想要采样得到一个稳定值,在clk的上升沿的前一段时间有一个建立时间TSU和在clk的上升沿的后一段时间有一个保持时间Th,如果在这两个时间段内采样的信号D发生跳变的话,输出的信号Q就会出现0,1之间跳变的不稳定、不确定状态,从而对采样结果产生干扰,这就是亚稳态。 在建立时间TSU期间,若D不能保持稳定状态,则寄存器则无法 阅读详情

相关推荐

FPGA——浅谈跨时钟域

本篇文章仅用于个人学习,如有雷同,我抄他的。

three_yanlili的博客 1万+

跨时钟域分析——单比特信号同步

处理跨时钟域的数据有单bit和多bit之分,而打两拍的方式常见于处理单bit数据的跨时钟域问题。打两拍本质就是定义两级寄存器对数据进行延拍。流程如下图所示:两级寄存器的原理:两级寄存是一级寄存的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性减少其发生概率。总的来讲,就是一级概率很大,三级改善不大。信号同步的要求: 为了使同步工作能正常进行,从某个时钟域传来的信号应先通过原时钟域上的一个...

笨蛋大乌龟的博客 8434

【Chips】从亚稳态到稳定传输:深入剖析打两拍同步器的设计哲学与工程权衡

本文深入剖析了打两拍同步器在跨时钟域信号处理中的设计哲学与工程权衡。从亚稳态现象的本质出发,探讨了双级同步器的可靠性优势与延迟、面积等成本考量,并分析了其在数据正确性上的局限性。进一步介绍了异步FIFO与格雷码配合的进阶方案,为工程师提供了一套完整的跨时钟域处理checklist。

weixin_28366053的博客 391

IC学习笔记6——单比特信号的跨时钟域处理方法之“打两拍”

标题

qq_32100199的博客 1万+

【Chips】从“打两拍”到“异步FIFO”:跨时钟域同步方案的选择逻辑与实战边界

本文深入探讨了跨时钟域同步方案的选择逻辑与实战边界,从基础的'打两拍'到复杂的异步FIFO设计。通过分析亚稳态问题及其解决方案,详细介绍了格雷码在异步FIFO中的妙用,并提供了工程选型指南与常见误区,帮助工程师在实际项目中实现可靠的跨时钟域数据传输。

weixin_28688385的博客 361

异步复位,同步释放为什么可以消除亚稳态传播

第一个周期:第一级触发器若发生亚稳态,大概率在一个周期内会解除。延迟两个周期(到第三个周期)一定可以同步释放掉复位信号(最少延迟一个周期也可以)。本文的灵感来自于:很好的说明了为什么跨时钟域中常常打两拍处理亚稳态。第二级触发器采样第一级触发器在上一周期最终稳定下来的值。从时序上简单分析下消除亚稳态的原因。第二级触发器不会有亚稳态,输出为。第二个周期:第一级触发器采样到。第三个周期:第一级触发器采样到。

lalala0635的博客 499

跨时钟域处理方法(一)——打拍

打拍处理单bit数据跨时钟域同步

LittleBee 3500

FPGA设计中跨时钟域问题的处理

FPGA设计中跨时钟域问题的处理

wczzmmp2的博客 5510

跨时钟域处理汇总

【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)-优快云博客【Chips】跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?_跨时钟域为什么打两拍-优快云博客(34 封私信) 跨时钟域处理(一):单bit信号跨时钟域处理 - 知乎

weixin_54963659的博客 158

数字IC/FPGA面试常考问题------亚稳态中,为什么打两拍可以消除亚稳态的影响

数字IC/FPGA面试常考问题------亚稳态中,为什么打两拍可以消除亚稳态的影响

weixin_42279450的博客 8188

【信息科学与工程学】计算机科学与自动化——第一百八十九篇 计算机硬件 系列一 微处理器01

在金融行业CDN流推送场景中,结合WebRTC over SD-RTN与SD-WAN Branch方案,需兼顾​​要求。

weixin_49199313的博客 1056

RTL一次流片成功:Verilog可综合代码10大黄金法则

摘要:本文基于寒武纪7nm AI芯片开发实践,揭示了非可综合RTL代码导致的流片失败风险。通过分析思元290芯片开发中的真实案例,提出10条经过验证的黄金法则,包括Latch防御、状态机优化和资源效率提升三大支柱。这些法则已嵌入寒武纪研发流程,使流片成功率提升至92%,时序收敛周期缩短42%。文章强调在先进工艺节点下,RTL代码质量直接影响芯片物理实现,需构建从代码到GDSII的可靠性闭环。

云雾J视界的博客 1467

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03

需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。

weixin_49199313的博客 276

FPGA 设计时序篇 —— 跨时钟域问题及解决方法

一、什么是跨时钟域问题 为什么要跨时钟域?就是因为一个时钟域要采集另一个时钟域传输的数据。 举个例子:FPGA外部信号 A 在时钟 CLK1 的节奏下反复旋转跳跃,FPGA需要采集外部信号A,但FPGA采集用的时钟CLK2很可能与CLK1的频率、相位都不同,这种情况下肯定会遇到采样到不稳定态的问题。 二、解决跨时钟域问题的原理 思路很简单,躲过不稳定态即可。 三、解决跨时钟域的方法 1.两级采样法 2.握手法 3.异步FIFO 4.异步RAM法 5.格雷码法 ...

Verilog例化说明 3676

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

transformer原理

qq_38253797的博客 2万+

从图像处理到AI:手把手教你用Halcon DL Tool完成第一个缺陷检测项目

本文详细介绍了如何使用Halcon深度学习工具(DL Tool)完成金属表面缺陷检测项目。从环境准备、数据采集标注到模型训练与部署,手把手指导工程师快速构建AI质检系统,显著提升工业缺陷检测效率。特别针对金属反光等难点问题提供实用解决方案。

weixin_42531886的博客 289

单bit信号的跨时钟域采集verilog

跨时钟域的单bit信号采集

ICer_CoolDong的博客 1674

LangChain实战:Plan and Execute代理在智能预算规划中的应用

本文详细介绍了如何利用LangChain框架中的Plan and Execute代理实现智能预算规划。通过拆解复杂财务问题、调用多工具链协作,该代理能自动完成从个人月度预算到家庭年度综合预算的智能规划,并具备消费习惯学习和多目标优化等进阶功能,帮助用户实现精准财务管理和决策优化。

weixin_42530732的博客 382

解决亚稳态的方案

解决亚稳态

Pual_Georg的博客 561

安卓直链APK安装拦截全解析:从Play Protect到厂商管控的应对指南

在移动应用分发领域,APK(Android Package)安装是开发者与用户交互的关键环节。其核心原理涉及安卓系统的安全沙箱机制与权限管理体系,旨在保护用户设备免受恶意软件侵害。这一机制的技术价值在于平衡了应用生态的开放性与安全性,但也在应用推广、企业内部分发等场景中带来了挑战。尤其在通过官网、广告等直链渠道分发APK时,常会遇到安装转化率骤降的问题。这背后主要受到Google Play Protect云端扫描、安卓系统安装权限模型演进(如Android 8.0+的安装源授权)以及设备制造商附加安全层(如

weixin_33894640的博客 467

STM32F407 FSMC并口读取AD7606

先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟共地导致的.是一个宏,实际上是指向的一个内存地址, 这个内存地址是FSMC指定的地址. 使用FSMC接口, 可免于控制引脚, 直接读取某个地址即可, FSMC会自动产生操作时序. 具体请见FSMC相关知识.

走错路的程序员 5496
上一篇: 【Chips】如何用DPI调用C++程序,并成功仿真
下一篇: 【Linux/脚本/芯片学习】Perl学习
仰天倀笑
博客等级 码龄10年 313粉丝 124原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值