异步复位信号释放与亚稳态的详细解释
1. 异步复位信号为何在释放时可能引发亚稳态?
异步复位信号的生效(Assert)是立即触发的(无需时钟),但其释放(De-assert)如果直接撤销(未同步),可能与时钟边沿(如上升沿)的时序关系不满足寄存器的建立时间(Setup Time)和保持时间(Hold Time)要求,导致亚稳态。
关键点分析:
-
异步复位的“释放时刻”与时钟的关系
-
异步复位的释放是一个异步事件(与时钟无关),但释放后的逻辑需要依赖时钟来恢复工作。
-
如果复位信号的释放时刻(从低到高的跳变)恰好接近时钟边沿,则寄存器可能无法正确捕捉到复位信号的跳变。
-
-
寄存器的时序要求
-
每个寄存器对输入信号的跳变时间有严格限制:
-
Setup Time(建立时间):信号必须在时钟边沿到来前保持稳定。
-
Hold Time(保持时间):信号必须在时钟边沿到来后继续稳定。
-
-
如果复位信号的释放跳变违反了这些时间窗口,寄存器可能无法确定输入是“高”还是“低”。
-
-
亚稳态的本质
-
当输入信号在时钟边沿的时序窗口内变化时,寄存器的输出可能进入一个介于高电平和低电平之间的不确定状态(亚稳态),并需要额外时间才能稳定到确定值
-
2. 为什么异步信号释放时寄存器无法确定状态?
尽管异步复位信号本身与时钟无关,但寄存器的操作(如复位释放后的逻辑恢复)依赖时钟。以下两种场景可能导致问题:
场景1:复位释放与时钟边沿重叠
-
假设异步复位信号
reset_n
在时钟上升沿附近被释放(从低到高跳变),此时寄存器需要根据reset_n
的值(高电平)更新输出。 -
但由于
reset_n
的跳变发生在时钟边沿的亚稳态窗口内,寄存器无法确定输入是“高”还是“低”,导致输出振荡或延迟稳定。
场景2:复位释放的传播延迟不一致
-
复位信号可能分布到多个寄存器,但因布线延迟不同,某些寄存器的复位释放可能早于时钟边沿,而另一些则稍晚。
-
这种不一致性会导致部分寄存器退出复位状态,而其他寄存器仍处于复位中,引发系统状态混乱。