亚稳态的原理
如上图所示,当时钟上升沿来的时候,数据恰好改变,这个时候输出的结果就无法确定是0/1,寄存器会经过一段时间的抖动然后输出一个结果(无法确定是正确还是错误)
亚稳态检测边沿的解决办法
通过三个寄存器,数据的抖动会消失,从而得到稳定的数据输出(数据同样不确定是否正确)
亚稳态检测边沿的原理:
当寄存器抖动之后输出为0时,如下图所示,通过两个寄存器,就可以消除抖动,并且,在几个时间周期之后一定能检测到边沿
下图为数据抖动之后输出为1的情况:
上面只用到了两个寄存器,如果时钟频率特别快,当下一个时钟沿到来的时候,寄存器0的Q0还在抖动,那么这个抖动就会传到第二个寄存器(通过两个寄存器,抖动基本为0),所以为了确保最后抖动被消除,一般用三个寄存器。
VHDL 代码: