一般來說,復位信號有效后會保持比較長一段時間,確保 register 被復位完成。但是復位信號釋放時,因為其和時鐘是異步的關系,我們不知道它會在什么時刻被釋放。
首先看圖1,考慮復位信號在兩個時鐘沿之間被釋放的情況。Reset 信號從 Device Pin 到 Flip-Flop 的延遲最大不能超過“Max Time Available”,如果延遲超過了這個限制,那么復位信號的釋放會進入 Setup Time 要求的區間,導致 Flip-Flop 進入亞穩態。當時鐘頻率變高,時鐘周期變短,不難發現,要滿足這個要求是越來越難的。
圖1 - Reset timing diagram, deasserted between clock edges
前面我們提到過,因為是異步信號,我們無法確保信號的釋放在一個確定的區間。如圖2所示,對于 Flip-Flop 來說,異步信號的釋放可能在A區間,也可能在B或者C區間。假設現在我們的設計中包含三個 Flip-Flop,分別為FF1,FF2 和 FF3。FF1 的復位釋放落在A區間,所以 FF1 會在復位信號釋放后的第一個時鐘沿有效,FF3 的復位釋放落在C區間,那么 FF3 會在復位信號釋放后的第二個時鐘沿有效,而 FF2 的復位釋放落在B區間,所以 FF2 可能會進入亞穩態。
圖2 - Reset deasserted asynchronously to the clock
不同的 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因為異步釋放進入亞穩態,那么其輸出的復位信號也不確定從而導致復位失?。?/p>
答案是不會。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。
審核編輯:劉清
-
FPGA設計
+關注
關注
9文章
428瀏覽量
26604 -
狀態機
+關注
關注
2文章
492瀏覽量
27641 -
FDR
+關注
關注
0文章
11瀏覽量
8702 -
異步復位
+關注
關注
0文章
47瀏覽量
13338
原文標題:FPGA復位設計中異步復位為什么要同步釋放 ?
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論