转自|https://blog.csdn.net/Hide_in_Code/article/details/126600563

整理|比特波特

个人疑惑

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

单bit信号,用:打两拍

多bit信号,用:异步FIFO

多bit信号,用:格雷码

多bit信号,用:握手

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

以下是我的疑惑:

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

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

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

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

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

多bit的跨时钟域情况用 异步FIFO处理,好理解;格雷码有啥用嘞?

格雷码可以让相邻二进制数变化只改变1位,但在多bit的data传输过程中,data value不都是随机变化么,格雷码有啥用嘞?

主要是前面关于打两拍的疑惑,网上冲浪找不到解答的帖子。

网上只有两个核心的回答,但对我这样的数电小白,完全是没有回答到我个人解惑的点子上,但解惑后再看,会有新的收获:

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

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

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

可见reference:跨时钟域同步,为什么两级寄存器结构能够降低亚稳态?—— 知乎 龚黎明(https://www.zhihu.com/question/43571892)

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

Stack Exchange上的回答:How does 2-ff synchronizer ensure proper synchonization?

(不知为什么用firefox不显示问题图片,用chrome才显示图片…)

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

概念补充

什么是亚稳态 metastable state?

首先要阐述一下亚稳态的概念。

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

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

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

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

这张图,给出了两个点:

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

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

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

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

解惑环节

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

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

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

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

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

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

假设是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的正确性如何保证”得根据信号的具体类型、目的、应用场景,来进行具体的讨论。

Trigger Signals:一个脉冲信号,用来开机、启动什么的。它没什么数据信息量,早一个clk、晚一个clk都ok,反正能起作用就行。那上面这个问题就无所谓了。唯一要保证的是,原始异步脉冲信号至少保持2T!(保证打两拍后,能sample到有效信号)

Control Buses:因为有多bit数据需要进行同步,关系比较复杂。那就不能用 “打两拍” 的方法,得用 “握手机制“。

Data Buses:这种情况,非常在乎上面提到的正确性问题。所以就 更不应该用 ”打两拍“方法,得用 异步FIFO的好吧… 在异步FIFO中的指针使用格雷码,可以降低指针在跳变时出现的亚稳态风险、冒险现象。也就说,格雷码和异步FIFO是结合使用的… ( ̄▽ ̄)"

总结

当你在乎跨时钟域 “用打两拍解决亚稳态,导致后续sample可能未sample到正确结果” 的case,那就不该用 “打两拍” 的方案,可以考虑异步FIFO和握手机制!而格雷码,和异步FIFO是联合使用的。

“打两拍”的方法,若应用于“从快速时钟域同步到慢速时钟域”,数据得多保持几T,不然会漏采数据。

跨时钟域的亚稳态处理、为什么要打两拍不是打一拍、为什么打两拍能有效?...相关推荐

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

    Title: 跨时钟域的亚稳态处理.为什么要打两拍不是打一拍.为什么打两拍能有效? 前言 个人颜色习惯: 黑色加粗:突出显示: 红色:重要: 洋红色:产生的疑问 question: 蓝色:个人思考 或 ...

  2. FPGA知识点汇总(verilog、数字电路、时序分析、跨时钟域、亚稳态)

    FPGA十分擅长同时做简单且重复的工作(并行计算)人工智能就有许多重复性.需要并行计算的工作如模式识别.图像处理,在通信领域,FPGA的低延时.可编程.低功耗的特点 开发流程:RTL设计,仿真验证,逻 ...

  3. 【读书笔记】Verilog的亚稳态现象和跨时钟域处理方法

    书※目:FPGA深度解析_第七章_樊继明著     高级FPGA设计结构.实现和优化_第六章_孟宪元译 文章目录 一.亚稳态 (1)跨时钟域的亚稳态现象 (2)亚稳态的多径传输 二.跨时钟域处理 2. ...

  4. 跨时钟域信号处理(二)——异步fifo的Verilog实现(附同步fifo的实现)

    需要回答几个问题: 1.什么是异步FIFO,异步FIFO有什么功能? 跨时钟域的数据交换,防止亚稳态. 2.在产生写满与读空信号时需要进行跨时钟域如何做的,且如何能正确指示空满状态? 寄存器打两拍+格 ...

  5. 跨时钟域为什么要双寄存器同步

    随着设计规模的不断攀升,各种接口外设琳琅满目,时钟"满天飞"就不可避免(注意这里的"满天飞"不是滥用,意指时钟频率多.时钟扇出多).而一个设计中,不同时钟频率之 ...

  6. FPGA CDC跨时钟域设计学习(一)亚稳态

    FPGA CDC跨时钟域设计学习(一) 亚稳态 MTBF - mean time before failure 同步器 理论 设计原则 学习资源主要来源于CummingsSNUG2008Boston_ ...

  7. 亚稳态与信号跨时钟域介绍

    亚稳态,是由于寄存器的输入信号没有满足建立时间和保持时间,导致寄存器的输出处于一种不确定的状态. 处理跨时钟域的数据有单bit和多bit之分,而打两拍的方式常见于处理单bit数据的跨时钟域问题. 简单 ...

  8. 亚稳态及信号跨时钟域处理

    文章目录 一.亚稳态简介 二.亚稳态窗口 三.平均无故障时间(MTBF) 四.亚稳态产生场景 五.解决亚稳态的技术 5.1 单比特信号跨时钟域 5.1.1 多级同步器 5.1.2 另一种多级同步器 5 ...

  9. FPGA跨时钟域信号处理之亚稳态问题

    FPGA跨时钟域信号处理之亚稳态问题学习笔记 跨时钟域会导致"亚稳态"的问题,信号的上升沿和下降沿并不是瞬间被拉高或拉低的,而是有一个倾斜变化的过程,如图中的tx信号的上升沿和下降 ...

最新文章

  1. jmeter对需要登录的接口进行性能测测试
  2. 想做网络推广浅析网站优化中标题该如何设置?
  3. AB1601中使用定时器来进行延时的弊端
  4. sympy特点及简单使用
  5. Linux增加Qt模块,Qtcreator:linux系统下安装qtserialport模块
  6. css 实现居中的五种方式
  7. ider中的html元素背景操作,idea怎么设置背景颜色
  8. win10计算机的用户名和密码在哪里查,Win10查看别人在自己电脑上输入过的账号密码...
  9. 2021CSP-J题解整合
  10. 计算机二级考试报名如何上传照片?
  11. 4.1.8 OS之文件保护(口令保护、加密保护、访问控制)
  12. HH SaaS电商系统的虚拟资金账户(钱包余额)设计
  13. lmi克罗内克积 matlab_LMI中有关于克罗内克积的决策变量,如何定义?
  14. a或b search vim_vim入门,进阶与折腾
  15. MySQL在服务里找不到(未卸载)
  16. CSS组件_0 燕尾
  17. css实现文字的水平垂直居中
  18. 输出问候语(PTA厦大慕课)
  19. switch中使用continue和break
  20. N圆最密堆积、最小外接正方形的matlab求解(二维、三维等圆Packing 问题)

热门文章

  1. 公开在线视频流(rtsp、stmp)
  2. 数据分析师常用的十种数据分析思路
  3. RestTemplate post提交方式的一些总结
  4. ISIS——LSP讲解
  5. mysql断电同步不起作用_记一次mysql主从同步因断电产生的不能同步问题 1236 and 1032...
  6. 皮尔森相关性系数的计算python代码(三)
  7. 分数换算小数补0法_一年级数学0基础的全过来,最全知识点及基本方法,包你数学不补课都90+...
  8. 【推荐】Java自学网站HOW2J.CN 手把手带你做实践项目
  9. 一次qps测试实践(续)
  10. 计算机专业有什么劣势,计算机专业的优劣势