异步复位信号一般会持续相对较长的时间,保证寄存器能复位完成。但是由于复位信号是异步的,我们不知道它会在什么时刻被释放。如果异步复位信号撤销时,不满足recovery time和removal time时,可能会造成亚稳态。
recovery time 恢复时间:异步复位撤销时,与下一时钟有效沿的最小时间间隔。
removal time 去除时间:异步复位撤销时,与上一时钟有效沿的最小时间间隔。
异步复位,同步释放一般都会使用上图的方法。但是其实用来同步的两级寄存器也是异步释放,为什么还是可以进行异步复位信号的同步呢?个人觉得原因是这样的:
很显然,并不是复位信号撤销时才可能出现亚稳态,复位信号一开始出现时,同样可能会存在亚稳态,只不过异步复位信号持续时间长,即使第一个周期出现了亚稳态,下一个时钟周期也不会再出现亚稳态了。如果复位信号只持续刚刚一个时钟周期,那么复位信号开始和撤销时都可能会出现亚稳态。
那么就只需要讨论异步复位信号撤销时的情况,我们可以知道,亚稳态出现的本质原因时新老数据的冲突导致的,因此,当异步复位信号撤销时,用来同步的第二个寄存器输入的数据仍然是0,因此第二个寄存器是不会出现亚稳态的。第一个寄存器虽然可能出现亚稳态,但是其出现了亚稳态,这个亚稳态还需要通过第二个寄存器,这时第二个寄存器就起到了打拍的作用。也就是说,第二级的亚稳态只可能是上一级寄存器传播过来的,但是这个亚稳态经过第二级寄存器后,其大概率已经稳定下来了,就算稳定下来不为1,也就相当与复位信号多持续了一个周期而已。因此我们可以看出,使用异步复位,同步释放时。异步复位撤销后,是需要额外等待一个时钟周期的,否则会激励可能会被复位信号覆盖掉。