认识FPGA触发器的亚稳态
邊沿型觸發(fā)器的輸出有兩個(gè)穩(wěn)定狀態(tài): 高電平或者低電平。為保證可靠操作, 必須要滿足觸發(fā)器的時(shí)序要求,也就是我們熟知的建立時(shí)間和保持時(shí)間。如果輸入信號(hào)違反了觸發(fā)器的時(shí)序要求, 那么觸發(fā)器的輸出信號(hào)就有可能會(huì)出現(xiàn)非法狀態(tài)—亞穩(wěn)態(tài)。亞穩(wěn)態(tài)是一種不穩(wěn)定狀態(tài),在一定時(shí)間后, 最終返回到兩個(gè)穩(wěn)定狀態(tài)之一。亞穩(wěn)態(tài)輸出的信號(hào)是什么樣子的? 對(duì)于系統(tǒng)有什么危害? 如果降低亞穩(wěn)態(tài)帶來的危害? 這是下面要探討的問題。
[文中有幾張圖片對(duì)于了解本文很關(guān)鍵,如果不能顯示,請(qǐng)參考博客相冊(cè)中topic2.png]
亞穩(wěn)態(tài)的特點(diǎn):
1. 增加觸發(fā)器進(jìn)入穩(wěn)定狀態(tài)的時(shí)間。
亞穩(wěn)態(tài)的壞處之一是會(huì)導(dǎo)致觸發(fā)器的TCO時(shí)間比正常情況要大。多出來的時(shí)間tR (resolution time) 就是亞穩(wěn)態(tài)持續(xù)的時(shí)間,參考圖1。如果觸發(fā)器的時(shí)序要求tSU(建立時(shí)間)和tH(保持時(shí)間)被滿足,那么觸發(fā)器的延時(shí)TCO=tCO_norm; 否則如果違反了觸發(fā)器的時(shí)序要求,那么觸發(fā)器在經(jīng)過tCO_norm時(shí)間后,進(jìn)入亞穩(wěn)態(tài),亞穩(wěn)態(tài)持續(xù)的時(shí)間叫做resolution time,標(biāo)識(shí)為tR。tR過后,亞穩(wěn)態(tài)返回到兩個(gè)穩(wěn)定狀態(tài)之一。
認(rèn)識(shí)FPGA觸發(fā)器的亞穩(wěn)態(tài)
圖 1
數(shù)據(jù)的跳變距離觸發(fā)器的采樣時(shí)刻越近,tR就越大。這種關(guān)系參見圖2.
認(rèn)識(shí)FPGA觸發(fā)器的亞穩(wěn)態(tài)
器件制造商給出的tSU和tH指標(biāo)都是有余量的。輕微的違反tSU或者tH并不會(huì)發(fā)生亞穩(wěn)態(tài),只是導(dǎo)致觸發(fā)器的tCO超出器件的規(guī)范(spec)。只有當(dāng)數(shù)據(jù)的跳變出現(xiàn)在亞穩(wěn)態(tài)捕捉窗口W (見圖2中的W,fs級(jí)別的時(shí)間窗口),才會(huì)發(fā)生亞穩(wěn)態(tài)。總的來說,數(shù)據(jù)的跳變?cè)娇拷黈窗口,觸發(fā)器進(jìn)入穩(wěn)定態(tài)的時(shí)間就越長(zhǎng)。
在同步設(shè)計(jì)中,源觸發(fā)器(Source FlipFlop)的輸出必須在一個(gè)時(shí)鐘周期內(nèi)穩(wěn)定下來,才能夠被目的觸發(fā)器(Destination FlipFlop)準(zhǔn)確采樣。如果tR過大,可能讓目的寄存器采樣到亞穩(wěn)態(tài),會(huì)導(dǎo)致亞穩(wěn)態(tài)的傳播。
2. 輸出毛刺、振蕩、或中間電平
經(jīng)過一段時(shí)間之后,亞穩(wěn)態(tài)返回到穩(wěn)定狀態(tài)。有可能返回到高電平,也有可能返回到低電平, 這和輸入的數(shù)據(jù)無關(guān)。且在亞穩(wěn)態(tài)的過程中,觸發(fā)器的輸出可能在震蕩,也可能徘徊在一個(gè)固定的中間電平上。我們來看一個(gè)真實(shí)案例。見圖3.
認(rèn)識(shí)FPGA觸發(fā)器的亞穩(wěn)態(tài)
在這個(gè)案例中,我們測(cè)試一個(gè)FPGA邏輯單元中的亞穩(wěn)態(tài)現(xiàn)象。在測(cè)試中,我們讓sel信號(hào)固定在0,那么邏輯關(guān)系為 F1 <= local_2m輸入,F0 <= local_2m輸入,local_2m和cdr_2m都是2MHz的方波信號(hào),被一個(gè)50MHz的異步時(shí)鐘作同步化處理。Verilog代碼為:
always @(posedge clk_50m)
if(sel==1)begin
clk2m_oa <= cdr_2m ;
clk2m_ob <= cdr_2m ;
end
else begin
clk2m_oa <= local_2m ;
clk2m_ob <= local_2m ;
end
測(cè)試中我們發(fā)現(xiàn)觸發(fā)器的輸出clk2m_ob上偶爾有毛刺出現(xiàn),但是觸發(fā)器的輸入F1和F0上并沒有毛刺。而且這個(gè)毛刺和下一個(gè)clk2m_ob跳變沿的間隔剛好是50MHz的一個(gè)周期20nS。 參考圖4,紅色為F1,黃色為clk2m_ob。
我們來分析下這個(gè)毛刺。由于2MHz輸入信號(hào)local_2m和50MHz時(shí)鐘clk_50m是異步的,因此毫無疑問會(huì)有亞穩(wěn)態(tài)的出現(xiàn)。當(dāng)亞穩(wěn)態(tài)出現(xiàn)的時(shí)候,觸發(fā)器的輸出一開始隨機(jī)震蕩到高電平,但很快亞穩(wěn)態(tài)結(jié)束,并返回到”錯(cuò)誤的”低電平狀態(tài)。于是就表現(xiàn)為毛刺。如果想從門電路角度解釋為什么會(huì)出現(xiàn)毛刺,可以參考文獻(xiàn)[5].
在測(cè)試中,每大約一小時(shí),clk2m_ob就會(huì)出現(xiàn)一次這樣的毛刺。可以看出亞穩(wěn)態(tài)的捕捉窗口是非常小的。這個(gè)實(shí)驗(yàn)中大約發(fā)生了 60 minutes * 60 seconds/20nS = 180*10^9次采樣。因此捕捉窗口的大致范圍為20nS * (2/25) / (180*10^9) ~= 9 *10^(-12) s = 9 fs. 這么高的精度,沒有任何儀器可以精確模擬,這也是為什么亞穩(wěn)態(tài)現(xiàn)象只能用統(tǒng)計(jì)的方法去研究的原因。
另一方面,同樣的電路功能,clk2m_oa卻從來沒有出現(xiàn)過這樣的毛刺。這說明亞穩(wěn)態(tài)掉表現(xiàn)形式不是固定的。猜測(cè)clk2m_oa的亞穩(wěn)態(tài)表現(xiàn)為中間電平的形式,并最終返回到”正確”的狀態(tài)。由于tR時(shí)間非常短,并且亞穩(wěn)態(tài)和信號(hào)的邊沿混和在一起,無法和正常情況進(jìn)行區(qū)分。根據(jù)XAPP094的解釋,亞穩(wěn)態(tài)的表現(xiàn)是和器件的PVT(制作工藝Process,電壓Voltage,溫度Temperature)相關(guān)的,并且和具體電路的增益,噪聲相關(guān)。如果是這樣,clk2m_oa和clk2m_ob的各自觸發(fā)器的或增益或噪聲是有差異的,所以表現(xiàn)不一致。
3. 亞穩(wěn)態(tài)返回到哪一個(gè)穩(wěn)定態(tài)是不可預(yù)測(cè)的,而且和輸入數(shù)據(jù)無關(guān)。
亞穩(wěn)態(tài)返回到哪一個(gè)穩(wěn)定態(tài)是不可預(yù)測(cè)的,和輸入數(shù)據(jù)無關(guān)。因此假設(shè)亞穩(wěn)態(tài)較快的返回,目的寄存器(destination FF)能夠采樣到穩(wěn)態(tài)電平,也可能采樣到錯(cuò)誤的電平,導(dǎo)致系統(tǒng)功能錯(cuò)誤。
亞穩(wěn)態(tài)的危害
目前主流的FPGA都是基于同步設(shè)計(jì)思想。一個(gè)良好的子模塊設(shè)計(jì)都是同步于同一個(gè)時(shí)鐘的子系統(tǒng)。當(dāng)不同時(shí)鐘域的多個(gè)模塊進(jìn)行通信時(shí),就可能會(huì)發(fā)生亞穩(wěn)態(tài)。
另外,同一個(gè)時(shí)鐘域內(nèi),如果時(shí)序不滿足,比如由于組合邏輯和走線的延時(shí)過大,導(dǎo)致源寄存器的跳變到達(dá)目的寄存器的時(shí)刻剛好位于時(shí)鐘的跳變沿,也會(huì)發(fā)生亞穩(wěn)態(tài)。當(dāng)然,在同步模塊中,對(duì)于一個(gè)時(shí)序收斂良好的設(shè)計(jì),不會(huì)存在亞穩(wěn)態(tài)的情況。
1. 理論上講,如果亞穩(wěn)態(tài)不能夠在一個(gè)時(shí)鐘周期內(nèi)返回到穩(wěn)定態(tài),那么目的寄存器也會(huì)發(fā)生亞穩(wěn)態(tài)。這就是亞穩(wěn)態(tài)的傳播。
2. 亞穩(wěn)態(tài)的毛刺直接輸出,有可能導(dǎo)致系統(tǒng)錯(cuò)誤。比如毛刺信號(hào)送給CPU做中斷,可能導(dǎo)致CPU產(chǎn)生錯(cuò)誤的中斷響應(yīng)。
3. 采樣到錯(cuò)誤的電平,導(dǎo)致功能錯(cuò)誤。這是邏輯設(shè)計(jì)人員最容易遇到的問題。最典型的例子是,假設(shè)有一個(gè)4bits one-hot編碼的狀態(tài)機(jī)。正常的功能只有四個(gè)狀態(tài)0,2,4,8。但是這個(gè)狀態(tài)機(jī)的有多個(gè)異步輸入信號(hào),那么就會(huì)發(fā)生亞穩(wěn)態(tài)。我們知道,亞穩(wěn)態(tài)返回到1或者0是隨機(jī)的,這樣就會(huì)出現(xiàn)狀態(tài)機(jī)的輸入有非法的組合,導(dǎo)致狀態(tài)機(jī)進(jìn)入到非法狀態(tài){1,3,5,6,7,9,10….}。如果狀態(tài)機(jī)沒有安全編碼保護(hù),狀態(tài)機(jī)就會(huì)掛死在非法狀態(tài)。
4. 破壞Block RAM的內(nèi)容。在讀取RAM時(shí),如果生成讀地址的時(shí)鐘和RAM的讀時(shí)鐘是異步的,那么讀取也會(huì)破壞RAM的內(nèi)容。基本上是因?yàn)樽xRAM會(huì)伴隨一個(gè)自動(dòng)的回寫動(dòng)作,這是大多數(shù)CMOS FPGA的特性。回寫的時(shí)候,由于在地址上發(fā)生了亞穩(wěn)態(tài),導(dǎo)致某一個(gè)地址的內(nèi)容回寫到了另外的地址上,從而破壞了RAM的內(nèi)容。
亞穩(wěn)態(tài)的處理
理論上講,異步信號(hào)輸入到一個(gè)同步系統(tǒng),亞穩(wěn)態(tài)是不可避免的。現(xiàn)實(shí)問題是如何降低亞穩(wěn)態(tài)帶來的危害,如何降低亞穩(wěn)態(tài)發(fā)生的概率。
亞穩(wěn)態(tài)最終會(huì)返回到穩(wěn)定態(tài),因此只要等足夠的時(shí)間,就可以免受亞穩(wěn)態(tài)的危害。亞穩(wěn)態(tài)返回的時(shí)間tR(resolution time)是個(gè)很復(fù)雜的問題,取決于系統(tǒng)的MTBF要求和器件本身。總的來是很短的。對(duì)于90nm或者更小的工藝,在可以接受的MTBF如10年內(nèi),tR大約在1nS左右;MTBF如1000年內(nèi),tR大約在2nS左右,具體可以咨詢響應(yīng)的FPGA制造商。
1. 降低亞穩(wěn)態(tài)發(fā)生的概率。
經(jīng)典的處理方法是多拍同步。參見圖5的Correct Method.
異步信號(hào)經(jīng)過第一個(gè)寄存器,如果發(fā)生了亞穩(wěn)態(tài),2nS(假設(shè)MTBF=1000Y)左右返回到穩(wěn)定態(tài),如果時(shí)鐘周期大于2ns(時(shí)鐘頻率小于500MHz), 那么顯然第二個(gè)寄存器就沒有亞穩(wěn)態(tài)發(fā)生了。此時(shí)亞穩(wěn)態(tài)的唯一影響就是不能在最準(zhǔn)確的時(shí)刻識(shí)別到異步信號(hào),有可能早一拍,或者晚一拍識(shí)別。
多說一點(diǎn),為了處理亞穩(wěn)態(tài),識(shí)別異步信號(hào)需要的時(shí)間就較長(zhǎng)(2拍或者更多),這就是目前流行的同步設(shè)計(jì)的代價(jià)。異步設(shè)計(jì)較好的解決了這個(gè)問題,異步設(shè)計(jì)靠硬件握手機(jī)制來反饋什么時(shí)候識(shí)別成功。有興趣的朋友可以了解一下一個(gè)新興的FPGA公司Achronix。
作為對(duì)比,我們看看圖5中的wrong method. 第一拍觸發(fā)器在接收異步信號(hào)后,產(chǎn)生了亞穩(wěn)態(tài)。由于經(jīng)過了組合邏輯和走線的延時(shí),亞穩(wěn)態(tài)傳播到目的寄存器的時(shí)間增大很多。這種情況下,只有在很低速的時(shí)鐘頻率時(shí),第二拍觸發(fā)器才可以避免亞穩(wěn)態(tài)。因此是不正確的處理方法。
一個(gè)良好的設(shè)計(jì)必須有好的容錯(cuò)能力,讓設(shè)計(jì)對(duì)亞穩(wěn)態(tài)不敏感。如果亞穩(wěn)態(tài)出現(xiàn),至少要有能力恢復(fù)。
小結(jié)
亞穩(wěn)態(tài)是一個(gè)邏輯設(shè)計(jì)者必須知道的知識(shí)點(diǎn)。搞清楚亞穩(wěn)態(tài)的響應(yīng),并采取措施防范是一個(gè)良好的邏輯設(shè)計(jì)的基本要求,必須在編碼過程中加倍小心。而不是在亞穩(wěn)態(tài)對(duì)設(shè)計(jì)產(chǎn)生了危害之后,再花費(fèi)大量資源去找出根因。做正確的事情遠(yuǎn)比把事情做正確要重要的多。希望本文對(duì)你的工作有所幫助。
References:
[1]Altera, AN042 , Metastability in Altera Devices
[2]Xilinx, XAPP094:Metastable Recovery in Virtex-II Pro FPGAs
[3]Lattice, Tn1055:Metastability in Lattice Devices
[4]wikipedia.org, Metastability in electronics
[5]TI, Metastable Response in 5-V Logic Circuits
總結(jié)
以上是生活随笔為你收集整理的认识FPGA触发器的亚稳态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜鸟做设计必看!有关如何做设计的整体思路
- 下一篇: 奇异递归模板模式(Curiously R