一般來說,復(fù)位信號有效后會保持比較長一段時(shí)間,確保 register 被復(fù)位完成。但是復(fù)位信號釋放時(shí),因?yàn)槠浜?a href="http://www.www27dydycom.cn/tags/時(shí)鐘/" target="_blank">時(shí)鐘是異步的關(guān)系,我們不知道它會在什么時(shí)刻被釋放。
首先看圖1,考慮復(fù)位信號在兩個(gè)時(shí)鐘沿之間被釋放的情況。Reset 信號從 Device Pin 到 Flip-Flop 的延遲最大不能超過“Max Time Available”,如果延遲超過了這個(gè)限制,那么復(fù)位信號的釋放會進(jìn)入 Setup Time 要求的區(qū)間,導(dǎo)致 Flip-Flop 進(jìn)入亞穩(wěn)態(tài)。當(dāng)時(shí)鐘頻率變高,時(shí)鐘周期變短,不難發(fā)現(xiàn),要滿足這個(gè)要求是越來越難的。
圖1 - Reset timing diagram, deasserted between clock edges
前面我們提到過,因?yàn)槭钱惒叫盘?,我們無法確保信號的釋放在一個(gè)確定的區(qū)間。如圖2所示,對于 Flip-Flop 來說,異步信號的釋放可能在A區(qū)間,也可能在B或者C區(qū)間。假設(shè)現(xiàn)在我們的設(shè)計(jì)中包含三個(gè) Flip-Flop,分別為FF1,F(xiàn)F2 和 FF3。FF1 的復(fù)位釋放落在A區(qū)間,所以 FF1 會在復(fù)位信號釋放后的第一個(gè)時(shí)鐘沿有效,F(xiàn)F3 的復(fù)位釋放落在C區(qū)間,那么 FF3 會在復(fù)位信號釋放后的第二個(gè)時(shí)鐘沿有效,而 FF2 的復(fù)位釋放落在B區(qū)間,所以 FF2 可能會進(jìn)入亞穩(wěn)態(tài)。
圖2 - Reset deasserted asynchronously to the clock
不同的 FF 因?yàn)閺?fù)位信號釋放的位置不同而在不同的時(shí)刻有效,這會對設(shè)計(jì)造成影響嗎?
假如我們的設(shè)計(jì)是如圖3所示的情況,是不會對設(shè)計(jì)的功能造成影響的。在復(fù)位釋放之后,任何有問題的數(shù)據(jù)會被Pipeline排出去,經(jīng)過4個(gè)cycle之后,這個(gè)pipeline便會恢復(fù)到正常的工作狀態(tài)。
圖3 - Reset for a pipeline
但如果我們的設(shè)計(jì)是如圖4所示。被復(fù)位的FF是狀態(tài)機(jī)的狀態(tài),那么復(fù)位釋放后很有可能狀態(tài)機(jī)會被復(fù)位到一個(gè)無效的狀態(tài),影響正常的功能。
圖4 - Reset for a one-hot state machine
什么是同步釋放 ?
從上一部分的內(nèi)容我們發(fā)現(xiàn),異步信號的異步釋放會導(dǎo)致 FF 在不同的時(shí)刻有效,甚至進(jìn)入亞穩(wěn)態(tài),從而影響設(shè)計(jì)的功能運(yùn)行。如何避免這個(gè)問題呢?考慮同步釋放。顧名思義,同步釋放就是讓復(fù)位信號的釋放過程與時(shí)鐘同步,從而確保所有 FF 在同一時(shí)刻有效。
如圖5所示,是異步復(fù)位同步釋放的電路設(shè)計(jì)。FDP的個(gè)數(shù)決定復(fù)位信號保持的長度,最少要有兩個(gè)。當(dāng)復(fù)位信號釋放后,F(xiàn)DP chain 會將接地的0逐級pipe到最后一個(gè)FDP輸出,因?yàn)樵揊DP的輸出是和Clock同步的,所以FDR的復(fù)位釋放便是和Clock 同步的。
圖5 - Async reset with sync dessertion
最后一個(gè)FDP不是仍然是異步復(fù)位異步釋放么,會不會這個(gè)FDP因?yàn)楫惒结尫胚M(jìn)入亞穩(wěn)態(tài),那么其輸出的復(fù)位信號也不確定從而導(dǎo)致復(fù)位失?。?/p>
答案是不會。FDP會進(jìn)入亞穩(wěn)態(tài)的條件是什么?一是異步釋放非常貼近時(shí)鐘沿,二是 FDP 輸入D在時(shí)鐘沿附近發(fā)生跳變。根據(jù)這個(gè)電路設(shè)計(jì),F(xiàn)DP的輸入D時(shí)不會在異步釋放時(shí)發(fā)生跳變的,所以FDP不會進(jìn)入亞穩(wěn)態(tài)。
異步復(fù)位同步釋放的時(shí)序約束
異步復(fù)位同步釋放的電路我們已經(jīng)設(shè)計(jì)好了,如何進(jìn)行時(shí)序約束呢?
對于 FDR,我們可以不用考慮的。因?yàn)楣ぞ邥治鰪?fù)位信號的 Recovery Time 和 Removal Time 來確保時(shí)序收斂。如果發(fā)現(xiàn) Recovey Time 或者 Removal Time 的違反,我們可能需要看一下 reset tree 或者 clock skew。一般都是 Recovey Time的違反,類似于 Setup Time,可能是由于 reset path的延遲太長導(dǎo)致。
對于 FDP,D端是同步電路,而CLR輸入端是異步信號,通過電路的設(shè)計(jì)我們已經(jīng)避免的異步信號帶來的問題,所以為了避免 false timing violation,我們可以對 FDP 的 CLR 端設(shè)置 false path。
審核編輯:劉清
-
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
27347 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
493瀏覽量
28237 -
FDR
+關(guān)注
關(guān)注
0文章
11瀏覽量
8803 -
異步復(fù)位
+關(guān)注
關(guān)注
0文章
47瀏覽量
13515
原文標(biāo)題:FPGA復(fù)位設(shè)計(jì)中異步復(fù)位為什么要同步釋放 ?
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Xilinx FPGA異步復(fù)位同步釋放—同步后的復(fù)位該當(dāng)作同步復(fù)位還是異步復(fù)位?

異步復(fù)位同步釋放有多個(gè)時(shí)鐘域時(shí)如何處理 異步復(fù)位同步釋放的策略

同步復(fù)位sync和異步復(fù)位async
verilog 異步復(fù)位同步釋放
同步復(fù)位和異步復(fù)位有什么聯(lián)系與區(qū)別,優(yōu)缺點(diǎn)!

關(guān)于異步復(fù)位同步釋放理解與分析

同步復(fù)位與異步復(fù)位的區(qū)別
FPGA學(xué)習(xí)-異步復(fù)位,同步釋放

評論