这都是成了经典的教材了的....
首先,复位问题之所以采用同步释放,是因为复位生效后,就算发生亚稳态,也已经可以不关注了,因为后级寄存器都已经复位了,就算输入是亚稳态有什么关系? 所以你提到的“reg4发生亚稳态后,输出状态必定影响到reg1.2的状态”,站不住脚。
复位采用“异步复位,同步释放”,主要是解决复位释放时,正好撞在时钟沿附近所产生的问题。reg3,和reg4组成的“Synchronizer Registers”的作用你没有仔细分析。你仔细看好了:
复位释放时,就算这时正好在时钟沿附近,但是这时reg3也还没有完全退出复位状态,所以reg4的输入端就是“稳定”的低电平,因此reg4就会输出稳定的低电平,不会有亚稳态;
然后等到第二个时钟沿,这时reg3,、reg4都已经退出复位状态了,reg3的输出是稳定的高电平,但是这个周期reg4还是输出低,因为它的输入还是低电平,reg3输入的高电平还无法反应到reg4的输出端来。
等到第三个周期的时候,reg4才稳定的输出高电平。
并且这个从低到高的转换是每次复位释放后都确定的发生在时钟沿之后一点(寄存器Tco的延迟),这样这个信号布线到系统内部的各个寄存器的时候,就有将近一个时钟周期的布线延迟,从而可以保证系统内的每个寄存器的复位释放都是在同一个时钟沿处生效。
如果不是这种方式,复位从低到高于时钟的相位是随机的,那么在有些复位释放情况下,就会发生系统内一些寄存器在前一个时钟沿退出复位,另外一些寄存器在下一个时钟沿才退出复位的情况。也就是大家不同步。
|