異步復(fù)位
在前面的文章中有過對于寄存器行為的描述,而復(fù)位方面,在電路設(shè)計時建議使用帶異步復(fù)位/置位的寄存器。原因是只要復(fù)位信號有效,則無論時鐘是否到來,都會對寄存器進行復(fù)位,使電路處于一個穩(wěn)定的狀態(tài)。而復(fù)位信號釋放后,需要等時鐘到來,才會更新數(shù)據(jù)。
當(dāng)異步復(fù)位有效時,無論有沒有時鐘,寄存器都會處于復(fù)位狀態(tài),也會穩(wěn)定輸出,因此沒有過于擔(dān)心的問題。但如果復(fù)位信號釋放,而此時D端數(shù)據(jù)與Q端數(shù)據(jù)不一致,那么當(dāng)寄存器時鐘有效時,就會更新Q端數(shù)據(jù)。由此也會出現(xiàn)一個時序的要求,也就是recovery/remove timing的時序要求。
為了確保復(fù)位信號的使用沒有問題,一般采用以下電路來實現(xiàn)異步復(fù)位信號釋放時與時鐘的同步處理,以便讓EDA工具自動識別時序路徑,進行時序分析及時序優(yōu)化。
這樣操作,我們稱為異步復(fù)位同步釋放。可以最大限度保證時序的穩(wěn)定性。
以上RCU框圖中的電路,,用Verilog HDL描述如下所示:
同步復(fù)位
有些早期的電路,在設(shè)計時使用了同步復(fù)位,而沒有使用異步復(fù)位來進行模塊級復(fù)位管理。原因是早期的EDA工具對復(fù)位信號的處理還不是很好,需要像時鐘一樣做復(fù)位樹來進行時序平衡(當(dāng)時還沒有recovery/remove的時序概念),這是為了確保復(fù)位的穩(wěn)定性所作出的犧牲。
如上圖所示,同步復(fù)位Rst實際上就是DFF的一個輸入,所以在時序上直接可以被看做數(shù)據(jù)路徑來處理,這對于早起的EDA工具來說,是比較友好。
但是我們需要看到一個問題,那就是所有的寄存器在上電時,輸出都是不可知的結(jié)果。因此需要等待時鐘有效后,才能確保電路的穩(wěn)定復(fù)位完成,接著再釋放復(fù)位信號。在當(dāng)今復(fù)雜的SoC系統(tǒng)中,PLL或者片內(nèi)晶體振蕩器何時穩(wěn)定輸出,且輸出波形正常,是需要一定的管理電路。用不穩(wěn)定來管理不穩(wěn)定,是不可行的。
因此對于同步復(fù)位的早期遺留電路來說,在外圍做好復(fù)位管理,確保上電后,其輸出不會影響整個系統(tǒng),也是可以的。
沒有復(fù)位
有時候,過于在意面積的電路中,會使用沒有復(fù)位的寄存器來實現(xiàn)電路。如下圖所示。
這種情況比較極端,確實寄存器的面積是比較大的,如果減少復(fù)位電路,勢必有較大的面積收益(20%左右)。但這就需要在設(shè)計的時候考慮好每個寄存器復(fù)位值是多少。然后通過輸入,以及一定次數(shù)的時鐘傳遞,將電路穩(wěn)定復(fù)位。
比如說上面這幅圖,第四級寄存器,上電后是個未知輸出,需要4個時鐘周期,才能穩(wěn)定到初態(tài)。
這樣的電路如果比較大,則上電后復(fù)位的時間會比較久,少則幾十個時鐘周期,多則上百上千個時鐘周期。而且如果有部分寄存器需要特定初始值,還需要專門送進去(可以參考同步復(fù)位的操作)。
混用復(fù)位
以上三種電路復(fù)位的方式,可以混用,在節(jié)省面積、穩(wěn)定復(fù)位以及早期遺留電路集成上,會有一些幫助。但還是建議能用異步復(fù)位就用異步復(fù)位吧。
-
寄存器
+關(guān)注
關(guān)注
31文章
5295瀏覽量
119824 -
EDA工具
+關(guān)注
關(guān)注
4文章
264瀏覽量
31674 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59666 -
晶體振蕩器
+關(guān)注
關(guān)注
9文章
613瀏覽量
29014 -
SoC系統(tǒng)
+關(guān)注
關(guān)注
0文章
52瀏覽量
10655
發(fā)布評論請先 登錄
相關(guān)推薦
評論