上接:
在****FPGA | 深入理解复位****一篇中对复位的实现方式进行了理解,但对于异步复位同步释放依旧存在一些疑问。
-
什么情况下使用异步复位同步释放?
由于异步复位节省资源,所以在同步系统中,使用异步复位,做同步释放处理是一个很好的选择。 -
如果没有前面两级触发器会出现什么情况?
首先,我们知道D触发器会因为输入端建立、保持时间的时序违例导致触发器输出Q端口产生亚稳态。对于异步复位而言同样有类似的情况,由于解复位阶段(复位撤离)是异步的,如果不满足复位恢复时间或者复位解除时间,触发器的输出同样可能变成亚稳态。复位阶段虽然同样是异步的,但我的理解是由于复位的优先级高,电路进入复位状态,但解复位失败又会导致复位状态丢失。 -
复位信号存在亚稳态会怎么样?
亚稳态出现的问题或者麻烦是在信号变化的时候,不能保证第一拍采样的值是确定的。
对于系统而言,系统希望知道在某一时刻的后的输入信号是已知状态的稳定值。
最好是系统一起复位释放,但是时钟域不同,不可能保证系统一起复位释放。一般来说,系统复位释放的顺序,是需要保证的。否则系统就是不安全的。 -
如果使用一级触发器会怎么样?
一级触发器的输出出现亚稳态的可能性是比较大的。当第一级触发器异步输入后,允许输出出现的亚稳态时间可以长达一个周期,在这个周期内亚稳态特性减弱。在第二个时钟沿到来时,第二级触发器采样。此时第二级的输出是稳定且已被同步的。只是用一级触发器可能会出现保持时间不够而出现亚稳态的情况。 -
两级触发器是如何降低亚稳态概率的?
异步复位的两种时序违例其实就是复位信号传过去的0和D端口传过去的D在争抢到达Q的资格,而在这里后级寄存器的D在复位撤销后的第一个时钟上升沿时希望传输的是0,和复位信号希望输的0一致,而且输出Q也已经是0了,所以此时的后级寄存器中的电路节点没有需要进行电平反转的地方,没有动态功耗。从更底层的角度来说就是所有的mos管的开关状态都不会发生变化,没有哪一个节点的电容需要进行充放电,也就没有机会出现亚稳态。
所以只有前级寄存器这种复位想要传0而D想要传1的才会出现亚稳态。当然两级触发器也只是大大降低亚稳态出现的概率不能完全消除。
-
第一级触发器的数据端口是1’b1,而不是rst_async_n?
复位是高扇出信号,使用1’b1可以减小复位信号的扇出数,1’b1意思是直接接电源,节省资源,这样可以使电路性能更好。
参考: