亚稳态和同步器

1. 亚稳态

1.1 什么是亚稳态

亚稳态是指在设计的正常运行过程中,信号在一定时间内不能达到稳定的0或者1的现象。在多时钟设计中,亚稳态是不可避免的,我们可以减少亚稳态发生和传播,消除亚稳态的有害影响。

1.2 为什么会产生亚稳态

数字化电路都是只有0和1,理想情况下,如果输入电压高于Vth那么就是1,如果低于Vth就是0,Vth叫做判断阈值。但是实际情况没有一个点来作为分界线,理想情况的电路做不出来。实际上是高于VH才算1, 低于VL才算0, VH>VL,也就是说高阈值VH和低阈值VL之间是有一段距离的。

数字信号跳变,0->1 或者 1->0,对应的是电压的变化,这个变化需要时间的。如果输入信号刚好在寄存器不能判断的区间(VL~VH),那么,输出就不能判断是0还是1,也就是亚稳态。

1.3 亚稳态的危害

由于亚稳态的输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。 逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。

电平信号的逻辑误判一般只会对电路造成几个时钟的延时,后面还会稳定在需要的电平,不会造成逻辑错误。

亚稳态信号的稳定时间通常比一个时钟周期要短得多,一般情况下不会超过一个或者两个周期, 这取决于触发器的性能。如果亚稳态超过一个或者两个周期,那么就会被下一个触发器采样到,这样就会造成亚稳态的传播。

1.5 减少亚稳态的方法

亚稳态是不可避免的,这是器件的固有属性,并没有理想器件。但是我们可以减少亚稳态的发生和传播,避免亚稳态带来的消极影响。

减少亚稳态的方法有以下几种:

  1. 使用同步器:也就是我们常用的2级或者多级FF打拍的方法;
  2. 降低频率:如果能满足功能要求,那么降低频率能够减少亚稳态的产生;
  3. 避免变化过快或者过于频繁的信号进行跨时钟采样;
  4. 采用更快的触发器:更快的触发器,也可以减少亚稳态的产生。

从上面几条可以看到,在RTL设计中比较常用的是使用同步器。

2. 同步器

2.1 两级触发同步器

最简单和最常用的同步器就是两级FF同步器,第一级FF输出发生亚稳态,亚稳态维持了一个周期,并在下一个时钟上升沿稳定,被识别为高,这样第二级的FF就能正确的采样

1. 如果亚稳态维持的时间不止一个周期,在下一个时钟上升沿没有稳定,那么第二级的FF就也会进入亚稳态。那么这种情况的概率很低

2. 第一级的亚稳态在下一个时钟上升沿稳定,但是被识别为0,那么第二级的FF输出bq2_dat就是0,说明信号跨时钟采样失败。但是这种情况不会造成亚稳态的传播,也就是不会影响后面的设计。针对这种情况,我们一般会改变设计,不会让快时钟域的单cycle脉冲,跨时钟到慢的时钟内采样。

3、对于重要信号和超高速信号,为了保证稳定性,可以采用三级触发同步器

2.3 同步器的输入:源时钟寄存

采用同步器还有另外一个要求:通常,需要跨时钟的信号,需要在源时钟域先经过一级FF进行寄存输出。也就是说,跨时钟信号必须是寄存器的输出,中间不能有组合逻辑。还是刚才的电路,如果输入不是寄存器的输出,而是组合逻辑的输出那么情况会是怎样的呢?

组合逻辑的输出数据变化太快,增加亚稳发生的概率。如果adat是FF的输出,那么根据FF的特性,输出在一个时钟周期内是不会改变的,数据的变化频率不会超过时钟频率,这样就能降低跨时钟信号变化的频率,减小亚稳态发生的概率。所以,在使用同步器同步信号时,要求输入信号必须是源时钟域的寄存输出

3 握手协议

如果输出数据的变化频率超过时钟频率,简单说就是输入数据的不到一个脉冲宽度,这是有可能采不到数据,

 这里有一篇很好的文章跨时钟域信号处理——握手协议(handshake)icon-default.png?t=M276https://zhuanlan.zhihu.com/p/53799967

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值