非同步復位為什麼要同步釋放 ?
在 FPGA 復位的設計中,常常聽到一個詞,叫“非同步復位,同步釋放”。非同步復位相對的是同步復位,很好理解。那麼什麼是同步釋放?為什麼要用同步釋放?
本文主要包含以下三點內容:
- 非同步復位非同步釋放會有什麼問題?
- 同步釋放
- 非同步復位同步釋放的時序約束
非同步復位有什麼問題?
一般來說,復位訊號有效後會保持比較長一段時間,確保 register 被複位完成。但是復位訊號釋放時,因為其和時鐘是非同步的關係,我們不知道它會在什麼時刻被釋放。
首先看圖1,考慮復位訊號在兩個時鐘沿之間被釋放的情況。Reset 訊號從 Device Pin 到 Flip-Flop 的延遲最大不能超過“Max Time Available”,如果延遲超過了這個限制,那麼復位訊號的釋放會進入 Setup Time 要求的區間,導致 Flip-Flop 進入亞穩態。當時鍾頻率變高,時鐘週期變短,不難發現,要滿足這個要求是越來越難的。
前面我們提到過,因為是非同步訊號,我們無法確保訊號的釋放在一個確定的區間。如圖2所示,對於 Flip-Flop 來說,非同步訊號的釋放可能在A區間,也可能在B或者C區間。假設現在我們的設計中包含三個 Flip-Flop,分別為FF1,FF2 和 FF3。FF1 的復位釋放落在A區間,所以 FF1 會在復位訊號釋放後的第一個時鐘沿有效,FF3 的復位釋放落在C區間,那麼 FF3 會在復位訊號釋放後的第二個時鐘沿有效,而 FF2 的復位釋放落在B區間,所以 FF2 可能會進入亞穩態。
不同的 FF 因為復位訊號釋放的位置不同而在不同的時刻有效,這會對設計造成影響嗎?
假如我們的設計是如圖3所示的情況,是不會對設計的功能造成影響的。在復位釋放之後,任何有問題的資料會被Pipeline排出去,經過4個cycle之後,這個pipeline便會恢復到正常的工作狀態。
圖3 - Reset for a pipeline但如果我們的設計是如圖4所示。被複位的FF是狀態機的狀態,那麼復位釋放後很有可能狀態機會被複位到一個無效的狀態,影響正常的功能。
圖4 - Reset for a one-hot state machine同步釋放
從上一部分的內容我們發現,非同步訊號的非同步釋放會導致 FF 在不同的時刻有效,甚至進入亞穩態,從而影響設計的功能執行。如何避免這個問題呢?考慮同步釋放。顧名思義,同步釋放就是讓復位訊號的釋放過程與時鐘同步,從而確保所有 FF 在同一時刻有效。
如圖5所示,是非同步復位同步釋放的電路設計。FDP的個數決定復位訊號保持的長度,最少要有兩個。當復位訊號釋放後,FDP chain 會將接地的0逐級pipe到最後一個FDP輸出,因為該FDP的輸出是和Clock同步的,所以FDR的復位釋放便是和Clock 同步的。
圖5 - Async reset with sync dessertion最後一個FDP不是仍然是非同步復位非同步釋放麼,會不會這個FDP因為非同步釋放進入亞穩態,那麼其輸出的復位訊號也不確定從而導致復位失敗?
答案是不會。FDP會進入亞穩態的條件是什麼?一是非同步釋放非常貼近時鐘沿,二是 FDP 輸入D在時鐘沿附近發生跳變。根據這個電路設計,FDP的輸入D時不會在非同步釋放時發生跳變的,所以FDP不會進入亞穩態。
非同步復位同步釋放的時序約束
非同步復位同步釋放的電路我們已經設計好了,如何進行時序約束呢?
對於 FDR,我們可以不用考慮的。因為工具會分析 復位訊號的 Recovery Time 和 Removal Time 來確保時序收斂。如果發現 Recovey Time 或者 Removal Time 的違反,我們可能需要看一下 reset tree 或者 clock skew。一般都是 Recovey Time的違反,類似於 Setup Time,可能是由於 reset path的延遲太長導致。
對於 FDP,D端是同步電路,而CLR輸入端是非同步訊號,通過電路的設計我們已經避免的非同步訊號帶來的問題,所以為了避免 false timing violation,我們可以對 FDP 的 CLR 端設定 false path。
參考資料
- 《Get Smart About Reset: Think Local, Not Global》