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

这篇具有很好参考价值的文章主要介绍了【Chips】跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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是低电平;但微观的亚稳态波形如下:

跨时钟域为什么打两拍,数字IC与芯片,fpga开发,亚稳态,数字IC设计,数字集成电路,跨时钟域处理
如图所示:亚稳态的输出波形会卡在中间,过一段时间后,可能稳定成1,也可能稳定成0,但都和原预期值没啥关系了,是无效的!

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

跨时钟域为什么打两拍,数字IC与芯片,fpga开发,亚稳态,数字IC设计,数字集成电路,跨时钟域处理

这张图,给出了两个点:

  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的可能:

跨时钟域为什么打两拍,数字IC与芯片,fpga开发,亚稳态,数字IC设计,数字集成电路,跨时钟域处理

如图所示,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是结合使用的… ( ̄▽ ̄)"
  • 总结:文章来源地址https://www.toymoban.com/news/detail-816978.html

    1. 当你在乎跨时钟域 “用打两拍解决亚稳态,导致后续sample可能未sample到正确结果” 的case,那就不该用 “打两拍” 的方案,可以考虑异步FIFO和握手机制!而格雷码,和异步FIFO是联合使用的。
    2. “打两拍”的方法,若应用于“从快速时钟域同步到慢速时钟域”,数据得多保持几T,不然会漏采数据。

到了这里,关于【Chips】跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 理解FPGA中的亚稳态

            大家应该经常能听说到亚稳态这个词,亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态,过了这段时间触发器的输出随机选择输出0/1,这是我们在设计时需要避免的。本文主要讲述了FPGA中的亚稳态问题,可以帮助大家更好地理解亚稳态。本文来源

    2024年02月09日
    浏览(36)
  • 数字设计小思 - D触发器与死缠烂打的亚稳态

    本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中,D触发器是最常用的器件,也可以说是时序逻辑的核心,本文根据个人的思考历程结合相关书籍内容和网上文章,聊一聊D触发器与亚稳态的那些事。 由传输门和两个反相器

    2024年02月03日
    浏览(24)
  • FPGA中亚稳态、异步信号处理、建立和保持时间违例及题目合集

    亚稳态:输入信号的变化发生在时钟有效沿的建立时间和保持时间之间,导致其不满足触发器建立保持时间的时序要求,使得输出有一段时间的不确定状态,这就是亚稳态。

    2023年04月09日
    浏览(24)
  • 为什么CPU需要时钟

    为什么CPU需要时钟这样一个概念? 什么是时钟脉冲,CPU为什么需要时钟,时钟信号是怎么产生的? 上面这个图的方波就是一个脉冲,类比于人类的脉搏跳动。一个脉冲称之为CPU的一个 时钟信号 ,或者 时钟脉冲 。一个脉冲周期就叫CPU时钟周期,一个时钟周期内时钟信号震荡一

    2023年04月11日
    浏览(38)
  • 基于反序位域的大端协议处理方法

    本文主要描述如何在C/C++软件中以一种简便的方法处理通信协议中的大小端转换方法;由于资源限制,目前在仅在windows平台的部分编译器与cpu中进行验证。 数据在内存中存储的基础单元是字节(Byte),最小的存储单元是位(bit);在常用的ARM架构中,按照字节处理数据时,

    2024年02月19日
    浏览(19)
  • Angular material Chips Autocomplete

    Chips Autocomplete 官网的例子我没法正常使用,无法实现搜索 我的select是个通用组件,现在贴代码: component.ts   页面.html  

    2024年02月04日
    浏览(32)
  • 【CDC跨时钟域信号处理】单bit_快时钟域到慢时钟域

    快时钟域到慢时钟域分两种情况: 1、允许采样丢失:直接采用同步器即可。 2、不允许采样丢失:原理是保证快时钟域的信号宽度满足一定的条件,使得慢时钟域有足够的时间采样到。 对于情况2有两种方法解决:①信号展宽+边沿检测②握手,且①比②要优先被选择。因为握

    2024年02月07日
    浏览(26)
  • 跨时钟域处理(三)---握手

    在跨时钟域(一)中,我们介绍了 打两拍 的方法,尽管这个方法可以有效处理单bit跨时钟域信号的亚稳态问题,但是当发送方的时钟比接收方的时钟快时,有可能出现信号有效时间过段,接收方采样不到的情况。 握手 就是解决这一问题的有效方法,同时, 握手 还可以解决多

    2024年02月12日
    浏览(27)
  • 跨时钟域处理方法(一)——打拍

            处理跨时钟域的数据可以分为单bit数据和多bit数据,而打拍的方法主要常见于处理单bit数据的跨时钟域问题。         打拍的本质是通过添加寄存器,对输入的数据进行延拍。其主要目标是消除亚稳态的影响。常见的是打2拍,也就是添加2级寄存器。         现

    2024年02月16日
    浏览(31)
  • FPGA面试题(4)(跨时钟域处理)

    慢-快 快-慢 单bit 在快时钟域同步打拍,将信号同步到快时钟域 展宽后同步打拍 多bit 异步FIFO 异步FIFO+握手信号 适用于单bit跨时钟域处理 所谓的打两拍就是定义两级寄存器实现延时 那为什么是打两拍,不是打一拍,打三拍? 打拍的作用:第一拍是异步信号转同步信号,第二

    2024年04月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包