一文带你深入理解电路中的亚稳态现象与跨时钟域信号处理

前言

亚稳态是一种现象,可以导致数字设备(包括FPGA)出现系统故障。当一个信号在不相关或异步时钟域的电路之间传输时,亚稳态现象较容易出现。本文描述了亚稳性,解释了为什么会出现这种现象,并讨论了它是如何导致设计失败的。由亚稳态引起的平均无故障时间(MTBF)的计算表明设计者是否应该减少此类失败机会的步骤。

亚稳态

数字设备(如FPGA)中的所有寄存器都定义了信号时序要求,允许每个寄存器在其输入端正确捕获数据并产生输出信号。为确保可靠运行,寄存器的输入必须在时钟边沿之前的最短时间(寄存器的建立时间 t S U t_{SU} tSU)内保持稳定,并且在时钟边沿之后的最短时间(寄存器保持时间 t H t_{H} tH)内保持稳定。寄存器的输出在指定的输出延迟( t C O t_{CO} tCO)后可用).

如果数据信号转换违反了寄存器的 t S U t_{SU} tSU要求,寄存器的输出可能进入亚稳态。在亚稳态中,寄存器输出在高电平和低电平之间徘徊一些时间,这意味着到定义的高或低电平的输出延迟将超过指定的 t C O t_{CO} tCO

在同步系统中,输入信号必须始终满足寄存器时序要求,因此不会出现亚稳态。亚稳态问题通常发生在信号在不相关或异步时钟域的电路之间传输时。在这种情况下,设计者不能保证信号满足 t S U t_{SU} tSU t H t_{H} tH的要求,因为信号可以在相对于目的时钟域的任何时间到达。然而,并不是每个违反寄存器的 t S U t_{SU} tSU t H t_{H} tH的信号转换都会导致亚稳态输出。寄存器进入亚稳态的可能性和返回稳定状态所需的时间取决于用于制造器件的工艺技术和操作条件。在大多数情况下,寄存器可以快速返回到稳定的状态。

寄存器在时钟边沿对数据信号进行采样的过程可以比喻为一个球从空中落在山上,如图1所示。山的侧面表示稳定状态信号转换后的新旧数据值(如果球落在这两部分证明进入了稳定状态),山的顶部表示亚稳态。如果球落在山顶上,它可能会无限期地在那里保持平衡,但实际上它会稍微落在山顶的一侧,然后滚下山。球从山顶落得越远,它到达底部稳定状态的速度就越快。
在这里插入图片描述
如果数据信号在时钟边沿和最小 t H t_{H} tH之后转换(在同步电路中通常是这种情况),它类似于球落在山的“旧数据值”一侧,并且输出信号保持在该时钟转换的原始值。当寄存器的数据输入在时钟边沿和最小 t S U t_{SU} tSU之前转换,并且保持在最小 t H t_{H} tH之后时,它类似于球落在山的“新数据值”一侧,并且输出足够快地达到稳定的新状态,以满足定义的 t C O t_{CO} tCO时间。然而,当寄存器的数据输入违反了 t S U t_{SU} tSU t H t_{H} tH时,它就类似于球掉在山上。如果球落在山顶附近,球需要很长时间才能到达底部,这会增加从时钟转换到稳定输出的延迟,超过定义的 t C O t_{CO} tCO

在这里插入图片描述

什么时候亚稳态会导致系统出错?

如果数据输出信号在下一个寄存器捕获数据之前解析为有效状态,则亚稳态信号不会对系统操作产生负面影响。但如果亚稳态信号在到达下一个设计寄存器之前没有解析到有效的低或高状态,则可能导致系统失败。继续球和山的类比,当球到达山底所需的时间(稳定的逻辑值0或1)超过分配的时间(即寄存器的 t C O t_{CO} tCO加上寄存器路径中的任何时间延迟)时,就会发生故障。当亚稳信号没有在分配的时间内解析时,如果目标逻辑观察到不一致的逻辑状态,即不同的目标寄存器捕获亚稳信号的不同值,则可能导致逻辑故障。

同步寄存器

处理跨时钟域问题时,必须先将该信号同步到新的时钟域,然后才能使用。新时钟域中的第一个寄存器用作同步寄存器。为了尽量减少由于异步信号传输中的亚稳态而导致的故障,电路设计人员通常使用目标时钟域中的同步寄存器序列(同步寄存器链或同步器)将信号重新同步到新的时钟域。这些寄存器允许潜在的亚稳态信号在设计的其余部分使用之前有额外的时间解析为已知值。同步器寄存器到寄存器路径中可用的时间延迟是亚稳态信号稳定的可用时间,称为可用亚稳态稳定时间。

同步寄存器链或同步器定义为满足以下要求的寄存器序列:

  • 链中的寄存器都由相同或相位相关的时钟进行计时
  • 链中的第一个寄存器由不相关的时钟域驱动,或者异步驱动
  • 除链中的最后一个寄存器外,每个寄存器仅扇出一个寄存器

同步寄存器链的长度是同步时钟域中满足上述要求的寄存器数。图3显示了一个长度为2的同步链示例,假设输出信号为多个寄存器目的地提供数据。
在这里插入图片描述
任何异步输入信号或在不相关的时钟域之间传输的信号,都可以在相对于捕获寄存器的时钟边缘的任何点处转换。因此,在数据转换之前,设计者无法预测信号转换的顺序或目标时钟边缘的数量。例如,如果异步信号总线在时钟域之间传输并同步,则数据信号可以在不同的时钟边缘上转换。因此,总线数据的接收值可能不正确。更具体地说,在异步FIFO的设计中,如果读写指针采用二进制进行传输,那么二进制读指针在增减时,经常发生多为突变,比如六位地址111111会在下一个 时刻变成000000,在实际电路中,这个变化过程要持续很长一段时间,会由111111经历6 个状态转移到00000,比如111111->101111->10111->100110->100100->000100->000000。由于写时钟与读时钟不同步,异步的写时钟很可能会在状态不稳定的中间某个状态采样,这样就会得到错误的读指针,进而做出错误的状态判断,导致系统异常(亚稳态问题)。而且由于多位同时突变,凭借概率论常识可知发生错误的可能性很大。因此异步FIFO采用格雷码来对读写指针进行表示。

设计人员必须用双时钟(异步)FIFO(DCFIFO)逻辑或握手逻辑等电路来适应这种行为。FIFO逻辑使用同步器在两个时钟域之间传输控制信号,然后用双端口存储器写入和读取数据。Altera为此操作提供了一个DCFIFO megafunction,其中包括对控制信号的不同级别的延迟和亚稳态保护。否则,如果异步信号作为两个时钟域之间握手逻辑的一部分,则控制信号指示何时可以在时钟域之间传输数据。在这种情况下,使用同步寄存器来确保亚稳态不会干扰控制信号的接收,并且在使用数据之前,数据有足够的稳定时间来解决任何亚稳态条件。在一个设计合理的系统中,只要每个信号在使用前分解到一个稳定的值,设计就可以正常工作。

一般情况下采用两个寄存器大两拍即可,至于为什么采用两个而不是一个。这里填个坑。

跨时钟域电路信号处理

除了亚稳态,跨时钟域还会带来一些问题,例如:

  • data hold 问题,从快时钟域到慢时钟域
  • re-convergence 问题
  • 大量数据的传输,握手方式(FIFO)
  • 异步复位,同步释放
  • clock switch
Data hold 问题

在这里插入图片描述
clk_B 时钟太慢了,导致数据采不到。解决方法就是通过对 A 时钟域的输出进行拓展。如下图所示:
在这里插入图片描述

re-convergence 问题

在这里插入图片描述
如上图所示,由clkA到clkB,目的时钟域采样到的是10(X2,Y2),然而实际上应该采样到的是11(X3,Y3)。这是由于X2,Y2可能是经过一些组合逻辑得到的信号,Y2会有一定的延时,而这样的延时正好被目的时钟域捕获到。为了应对这种问题,一般采用格雷码打一拍,每次只翻转一位。
在这里插入图片描述

握手机制
  • 在跨时钟域传输多 bit (data bus)数据时,如果给所有的 bit 都打两拍那么会导致寄存器消耗过多,所以可以只用给 2 bit 的交互信号打两拍即可,用交互信号来控制目标时钟域的数据采样。
  • 通过异步 FIFO 进行数据传输。
    在这里插入图片描述
异步复位,同步释放

目的是使得复位信号的高电平和时钟的高电平同步(释放),从而避免出现建立保持时间的违例。注意,在复位的时候还是异步复位的,任意时刻拉低都是可以的。

由于异步复位信号理论上可以在任意时间拉高,从而控制了电路的输出,如果拉高的那一刻距离时钟高电平之前很近,那么寄存器的建立时间难以满足,如果离clk高电平之后很近,那么保持时间难以满足。然而,同步释放之后,会留给寄存器足够长的采样时间。

注意点:

  • 静态时序分析只能用于同步电路
  • 时钟树综合(CTS)不能修复跨时钟域问题
CPU动态切换时钟

如果直接采用MUX进行切换会产生毛刺,采用三个同步寄存器打三拍。
在这里插入图片描述

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangbowj123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值