老生常谈的异步复位、同步撤离电路如下,reset_gen模块由两级寄存器级联而成,第一级寄存器D端接1,第二级寄存器的输出连接全局复位。当然随工艺演进,也有三级寄存器级联的同步撤离电路,原理相同,都是通过打拍子降低亚稳态概率。
通常大学教程上只讲解了不带复位/置位的寄存器电路分析,本文讲讲带复位/置位的寄存器分析,然后讲讲为什么时钟沿对齐复位撤销沿会有问题。
如下图,我们先理解下带复位/置位的寄存器结构图:
1)在时钟端口CP为0时,TG1导通,【Q’主】实时跟随输入D端变化而变化,TG3截止、TG4导通,输出数据Q被锁存保持。
2)在时钟端口CP为1时,TG1截止,TG2导通,【Q’主】在时钟上升沿时被锁存。TG3导通,TG4截止,因此输出数据Q依然被锁存保持。
总的来看,在CP的上升沿时刻输入数据D被前一级锁存器锁存,Q输出D的值,在CP的下降沿时刻,后一级锁存器锁住输出Q值保持不变,而前一级锁存器反馈回路断开,【Q’主】实时跟随输入D端变化而变化。
那么重点来了,复位/置位控制端口呢?上图复位/置位高有效。当RD拉高复位时,CP不管是低是高,RD与【Q’主】或非得到0,0再与SD或非得到1(此时假设SD无效,无效值为0),1再经过反相器输出为0,从而达到了复位效果。那么RD撤销时,CP上升沿到了,两者对齐的情况下,或非门G3的值是多少呢?这个时候CP上升沿锁存新的值,那么可能是0->1,而RD撤销也就是从1变成0,什么问题呢?没错,竞争冒险,会造成毛刺输出。关于竞争冒险,如下图的简单电路,由于门电路的延时,A非相对于A信号会滞后一丢丢(时间由工艺决定),这就会导致输出产生一个干扰脉冲。有两个概念必须知道,一个是Removal time,一个是Recovery time。
Recovery timingRecovery time是指在时钟有效沿到来之前,复位信号保持高电平的最短时间(假设低电平复位有效),也就是说复位要撤离需要赶在时钟上升沿到来之前,满足这个Recovery time,这样才能确保在时钟有效沿时采样到数据。Removal timing check
Removal time是指在时钟有效沿来临之后,异步复位信号需要继续保持有效的最短时间。满足这个最短时间才能确保对寄存器进行正常的复位。
从Removal 和Recovery time的定义知道,只要DFF的复位信号不在时钟有效沿附近变化(复位信号远离时钟有效沿),就可以保证电路的正常复位和撤销。在实际的设计中,比如有的模块是先复位再给模块供应时钟,即保证了复位信号与时钟在时间上是错开的,这种流程可以保证不会出现recovery和removal的问题,因为复位置起撤销时都没有时钟。当然,这样限制也大可不必,采用“异步复位、同步撤离”电路即可。
复位撤销后,同步撤离寄存器的第一级寄存器第一个周期可能是亚稳态输出,原因不再赘述,但是第二个周期一定是1。当第一级第一周期输出亚稳态,第二级寄存器能帮助恢复稳态,其第二周期输出要么0,系统继续复位,要么输出1,系统停止复位,其第三周期及以后输出1。对于复位置起,随时都是可以的,因为所有元器件都会最终回到初始值,那么有没有出现亚稳态、谁先谁后其实都没有关系。但是对于撤销不行啊,一旦复位撤销了各个元器件就会开始工作了,如果复位撤销点到达各个元器件的时间有差别,或者正好打在了时钟的亚稳态窗(即在Tsetup+Thold内跳变了)上了,就会造成有的器件当前周期开始工作,而有的器件在下一周期开始工作,那整个系统就紊乱了,因此复位的撤销一定要是同步的。转载:全栈芯片工程师
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:深度剖析“异步复位、同步撤离”-说明异步复位与同步复位有何区别和联系的原理 https://www.yhzz.com.cn/a/11199.html