單純的同步復位需要依賴於時鍾,因此在進行復位時需要將門控時鍾打開,這樣功耗會較高,同時復位路徑上會引入組合邏輯的cell,對於數據路徑的話,它會多logic cell,這樣會進一步的擠壓timing_path的setup窗口。
單純的異步復位,因為復位和時鍾沿都決定寄存器Q端輸出的狀態,所以會有亞穩態問題,在進行復位時,有亞穩態倒還好,因為最終都是要復位掉的,所有寄存器最終都會固定在一個狀態,但是在撤離的時候產生亞穩態的話就會比較麻煩,最后可能會導致有些寄存器解復位掉了,有些寄存器仍處於復位狀態,這樣解復位后的初始狀態就不如期望的那樣,引起功能錯誤。
因此就有一個異步復位同步撤離的電路方案,該方案中復位信號都還是接在了寄存器的復位端,只是在撤離的時候會是在時鍾邊沿產生的復位信號。主要關注撤離時的狀態

對於異步復位的這幾級寄存器,它復位端接的復位信號肯定是異步,因此在復位撤離的那個時刻,若違反recovery time或removal time,那么第一級寄存器由於復位和不復位的狀態不一致,因此可能會出現亞穩態,但是第二級寄存器復位和不復位狀態下,Q端都會輸出0,所以不會產生亞穩態,如果有第三級寄存器的話,第三級寄存器也不會有亞穩態。這就和異步信號輸到D端一樣,第一級會產生亞穩態,后面的幾級寄存器會降低這個亞穩態概率,保證最后一級寄存器輸出端仍是亞穩態的概率很低,這就是為什么需要至少兩拍的原因。
當解復位信號由第二級寄存器傳出來到系統中的寄存器時,這時就可以通過DC工具來檢查recovery time 和removal time保證每一個解復位都不會產生亞穩態。
異步復位同步釋放案例
如何選擇同步復位和異步復位
一個想法:在使用同步復位時,如果我先開時鍾再復位,然后關掉時鍾,在解復位時再開時鍾再解復位,這樣就可以減少系統在復位期間的功耗了,不過還是不好解決復位電路上有組合邏輯cell的問題
在使用異步復位時,先解復位再開時鍾,這樣不就可以避免亞穩態了嗎?不一定非要用異步復位同步撤離。
