同步復(fù)位和異步復(fù)位
異步復(fù)位
異步復(fù)位是指無論時鐘沿是否到來,只要復(fù)位信號有效,就對系統(tǒng)進(jìn)行復(fù)位。
RTL代碼如下:
always@(posedgeclkornegedgerst_n) if(!rst_n)b<=?1'b0; ?????????else?b?<=?a;
綜合后如下:
我們可以看到FPGA的寄存器都有一個異步的清零端(CLR),在異步復(fù)位的設(shè)計中這個端口一般就是接低電平有效的復(fù)位信號rst_n。即使說你的設(shè)計中是高電平復(fù)位,那么實際綜合后會把你的復(fù)位信號反向后接這個CLR端。公眾號:OpenFPGA
同步復(fù)位
同步復(fù)位是指只有在時鐘上升沿到來時才會對復(fù)位信號進(jìn)行采樣,也就是只有在時鐘上升沿時,復(fù)位信號才有效。
其RTL代碼如下:
always@(posedgeclk) if(!rst_n)b<=?1'b0; ?????????else?b?<=?a;
綜合后如下:
和異步復(fù)位相比,同步復(fù)位沒有用上寄存器的CLR端口,綜合出來的實際電路只是把復(fù)位信號rst_n作為了輸入邏輯的使能信號。那么,這樣的同步復(fù)位勢必會額外增加FPGA內(nèi)部的資源消耗。
那么同步復(fù)位和異步復(fù)位到底孰優(yōu)孰劣呢?
只能說,各有優(yōu)缺點。同步復(fù)位的好在于它只在時鐘信號clk的上升沿觸發(fā)進(jìn)行系統(tǒng)是否復(fù)位的判斷,這降低了亞穩(wěn)態(tài)出現(xiàn)的概率;它的不好上面也說了,在于它需要消耗更多的器件資源,這是我們不希望看到的。FPGA的寄存器有支持異步復(fù)位專用的端口,采用異步復(fù)位的端口無需額外增加器件資源的消耗,但是異步復(fù)位也存在著隱患,特權(quán)同學(xué)曾說過從沒有意識到也沒有見識過。異步時鐘域的亞穩(wěn)態(tài)問題同樣的存在與異步復(fù)位信號和系統(tǒng)時鐘信號之間。公眾號:OpenFPGA
上面的分析似乎都讓人意識到同步復(fù)位和異步復(fù)位都不可靠,那么如何將兩者結(jié)合,取長補短呢?
異步復(fù)位、同步釋放
所謂異步復(fù)位,同步釋放就是在復(fù)位信號到來的時候不受時鐘信號的同步,而是在復(fù)位信號釋放的時候受到時鐘信號的同步。
如下圖,單獨看方框左的復(fù)位策略,是一個異步復(fù)位電路,即復(fù)位信號有效時不管時鐘信號是否處于有效沿,輸出都會被復(fù)位,但是如果復(fù)位信號在時鐘信號的上升沿撤銷時,這時候的輸出就是亞穩(wěn)態(tài)。
首先看一下怎么實現(xiàn)異步復(fù)位:當(dāng)rst_async_n有效時,第二個D觸發(fā)器的輸出rst_sync_n就是低電平,方框左中的異步復(fù)位端口有效,輸出被復(fù)位。
然后是同步釋放:假設(shè)rst_async_n在clk的上升沿時撤除,那么第一級觸發(fā)器處于亞穩(wěn)態(tài),但是由于兩級觸發(fā)器的緩沖作用,第二級觸發(fā)器的輸入為clk到來前第一級觸發(fā)器的輸出,即為低電平。因此,此時第二級觸發(fā)器的輸出一定是穩(wěn)定的低電平,方框左中觸發(fā)器仍然處于復(fù)位狀態(tài)。在下一個clk到來時,第一級觸發(fā)器的輸出已經(jīng)是穩(wěn)定的高電平了,故rst_sync_n已經(jīng)是穩(wěn)定的高電平,此時復(fù)位釋放。也就是同步釋放。公眾號:OpenFPGA
通過上面分析可知:異步復(fù)位、同步釋放其最顯著特征是既保留了異步復(fù)位的功能,又避免了異步復(fù)位釋放時所面臨的recovery或者removal違例問題。
那異步復(fù)位同步釋放是如何避免recovery和removal違例問題的呢?如下代碼所示,是異步復(fù)位同步釋放的RTL code。
always@(posedgeclk,negedgerst_async_n) if(!rst_async_n)begin rst_s1<=?1'b0;?? rst_s2?<=?1'b0;?? end?? else?begin?? rst_s1?<=?1'b1;?? rst_s2?<=?rst_s1;?? end?? ? assign?rst_sync_n?=?rst_s2;??? endmodule?
從上述代碼可以看出,rst_async_n=0時,rst_sync_n會被立即復(fù)位為0,輸出到后續(xù)電路用于異步復(fù)位;rst_async_n=1時,假設(shè)此時恰好在時鐘沿附近,會造成recovery或者removal的違例,但經(jīng)過DFF1和DFF2的兩級同步,rst_sync_n釋放沿與時鐘沿同步,送入到后續(xù)電路不會再有recovery和removal違例出現(xiàn)。
問題1
如果沒有前面兩級觸發(fā)器的處理。異步信號直接驅(qū)動系統(tǒng)的觸發(fā)器。會出現(xiàn)什么情況?
回答:很多人只知道觸發(fā)器D端口來源是異步的話,會因為建立保持時間的時序違反而在觸發(fā)器Q端口產(chǎn)生亞穩(wěn)態(tài)。但是不清楚,異步復(fù)位信號為什么會導(dǎo)致亞穩(wěn)態(tài)的產(chǎn)生。
首先,回顧理論教材里介紹的建立保持時間違反分析,教材一般都是拿沒有復(fù)位端口的D觸發(fā)器舉例。
然后,畫出帶有異步復(fù)位端口的D觸發(fā)器,下圖帶異步復(fù)位Rd,并帶有異步置位端口Sd。公眾號:OpenFPGA
由此得知,異步復(fù)位信號或者異步置位信號,跟數(shù)據(jù)端口D信號,沒有什么區(qū)別,都會存在建立保持時間的違反,從而時序沖突,引發(fā)輸出亞穩(wěn)態(tài)。
問題2
復(fù)位信號存在亞穩(wěn)態(tài),有危險嗎?
回答:
亞穩(wěn)態(tài),出現(xiàn)的問題或者麻煩,是在信號變化的時候,不能保證第一拍采樣的值是固定的。
如果信號穩(wěn)定,不會出現(xiàn)亞穩(wěn)態(tài)的。就是采樣后的跳變,時刻不確定,也許早,也許晚。
系統(tǒng)不希望這樣的未知狀態(tài)發(fā)生,系統(tǒng)希望知道在某一個時刻,后續(xù)邏輯需要的輸入信號,是穩(wěn)定值。公眾號:OpenFPGA
二級觸發(fā)器同步后,第二季觸發(fā)器的輸出基本上是穩(wěn)定值。后續(xù)邏輯根據(jù)穩(wěn)定值,會有穩(wěn)定的行為。這就是追求的系統(tǒng)穩(wěn)定性。
最好是系統(tǒng)一起復(fù)位釋放,但是時鐘域不同,不可能保證系統(tǒng)一起復(fù)位釋放。一般來說,系統(tǒng)復(fù)位釋放的順序,是需要保證的。否則系統(tǒng)就是不安全的。公眾號:OpenFPGA
舉個例子,系統(tǒng)啟動時,內(nèi)核讀取啟動指令,要powerdown某外設(shè);但是powerdown的邏輯要求外設(shè)和內(nèi)核沒有通信請求正在發(fā)生。此時,外設(shè)比內(nèi)核先釋放復(fù)位的情況(復(fù)位釋放的時刻,外設(shè)有可能已經(jīng)開始與內(nèi)核發(fā)生請求),與內(nèi)核比外設(shè)先釋放復(fù)位的情況(復(fù)位釋放的時刻,外設(shè)肯定與內(nèi)核沒有發(fā)生請求),是不一樣的,powerdown也許不能處理成功。
這也是異步復(fù)位信號需要同步釋放的原因,目的都是為了避免亞穩(wěn)態(tài)的產(chǎn)生。
問題3
如果只做一級觸發(fā)器同步,如何?
回答:不可以。第一級觸發(fā)器的輸出,永遠(yuǎn)存在亞穩(wěn)態(tài)的可能。亞穩(wěn)態(tài),導(dǎo)致系統(tǒng)不會復(fù)位初始化到已知狀態(tài)。
當(dāng)?shù)谝患売|發(fā)器采樣異步輸入之后,允許輸出出現(xiàn)的亞穩(wěn)態(tài)可以長達(dá)一個周期,在這個周期內(nèi),亞穩(wěn)態(tài)特性減弱。在第二個時鐘沿到來時,第二級同步器采樣,之后才把該信號傳遞到內(nèi)部邏輯中去。第二級輸出是穩(wěn)定且已被同步了的。如果在第二級采樣時保持時間不夠,第一級的輸出仍然處于很強的亞穩(wěn)態(tài),將會導(dǎo)致第二級同步器也進(jìn)入亞穩(wěn)態(tài),但這種故障出現(xiàn)的概率比較小。公眾號:OpenFPGA
一般情況下,兩級同步器總體的故障概率是一級同步器故障概率的平方。在大部分的同步化設(shè)計中,兩級同步器足以消除所有可能的亞穩(wěn)態(tài)了。
問題4
兩級觸發(fā)器同步,就能消除亞穩(wěn)態(tài)嗎?
回答:不能。大大降低概率,如果幾十年出現(xiàn)一次,也無所謂了。畢竟芯片不會用幾十年,早就老化嚴(yán)重淘汰了。
問題5
第一級觸發(fā)器的數(shù)據(jù)端口為什么是1’b1?回答:
如果第一級觸發(fā)器的數(shù)據(jù)端口,使用rst_async_n。綜合后的第一級觸發(fā)器電路圖如下
如果第一級觸發(fā)器的數(shù)據(jù)端口,使用1’b1。綜合后的第一級觸發(fā)器電路圖如下:
考慮到電路實現(xiàn)的資源,還是第2種方案最節(jié)省,為最佳設(shè)計。
https://blog.csdn.net/cainiaoyizhiyang/article/details/98479356https://blog.csdn.net/wordwarwordwar/article/details/79889725
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1629文章
21738瀏覽量
603459 -
異步復(fù)位
+關(guān)注
關(guān)注
0文章
47瀏覽量
13315
原文標(biāo)題:FPGA中異步復(fù)位,同步釋放的理解
文章出處:【微信號:gh_339470469b7d,微信公眾號:FPGA與數(shù)據(jù)通信】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論