基于FPGA的跨時(shí)鐘域信號處理——亞穩態(tài)
在特權的上篇博文《基于FPGA的跨時(shí)鐘域信號處理——專(zhuān)用握手信號》中提出了使用專(zhuān)門(mén)的握手信號達到異步時(shí)鐘域數據的可靠傳輸。列舉了一個(gè)簡(jiǎn)單的由請求信號req、數據信號data、應答信號ack組成的簡(jiǎn)單握手機制。riple兄更是提出了req和ack這兩個(gè)直接的跨時(shí)鐘域信號在被另一個(gè)時(shí)鐘域的寄存器同步時(shí)的亞穩態(tài)問(wèn)題。這個(gè)問(wèn)題估計是整個(gè)異步通信中最值得探討和關(guān)注的。
本文引用地址:http://dyxdggzs.com/article/269806.htm很幸運,特權同學(xué)找到了很官方的說(shuō)法——《Application Note42:Metastability in Altera Devices》,一口氣讀完全文,有一個(gè)單詞送給這篇文章很合適——“nice”。特權同學(xué)過(guò)去的所有疑惑都在文章中找到了答案,盡管altera在文章的最后只是竭盡全力的在吹捧自己的好。
如果你E文還不錯(該不會(huì )比我這個(gè)4次都沒(méi)過(guò)掉4級考試的家伙差吧,~_~),那么去享受原文吧?;蛘吣憧梢钥紤]看看特權同學(xué)的翻譯水平,哈哈……
什么是亞穩態(tài)?
所有數字器件(例如FPGA)的信號傳輸都會(huì )有一定的時(shí)序要求,從而保證每個(gè)寄存器將捕獲的輸入信號正確輸出。為了確??煽康牟僮?,輸入寄存器的信號必須在時(shí)鐘沿的某段時(shí)間(寄存器的建立時(shí)間Tsu)之前保持穩定,并且持續到時(shí)鐘沿之后的某段時(shí)間(寄存器的保持時(shí)間Th)之后才能改變。而該寄存器的輸入反映到輸出則需要經(jīng)過(guò)一定的延時(shí)(時(shí)鐘到輸出的時(shí)間Tco)。如果數據信號的變化違反了Tsu后者Th的要求,那么寄存器的輸出就會(huì )處于亞穩態(tài)。此時(shí),寄存器的輸出會(huì )在高電平1和低電平0之間盤(pán)旋一段時(shí)間,這也意味著(zhù)寄存器的輸出達到一個(gè)穩定的高或者低電平的狀態(tài)所需要的時(shí)間會(huì )大于Tco。
在同步系統中,輸入信號總是能夠達到寄存器的時(shí)序要求,所以亞穩態(tài)不會(huì )發(fā)生。亞穩態(tài)問(wèn)題通常發(fā)生在一些跨時(shí)鐘域信號的傳輸上。由于數據信號可能在任何時(shí)間到達異步時(shí)鐘域的目的寄存器,所以設計者無(wú)法保證滿(mǎn)足Tsu和Th的要求。然而,并非所有違反寄存器的Tsu或Th要求的信號會(huì )導致輸出亞穩態(tài)。某個(gè)寄存器進(jìn)入了亞穩態(tài)后重新回到穩定狀態(tài)的時(shí)間取決于器件的制造工藝及工作環(huán)境。在大多數情況下,寄存器將會(huì )快速的返回穩定狀態(tài)。
寄存器在時(shí)鐘沿采樣數據信號好比一個(gè)球從小山的一側拋到另一側。如圖1所示,小山的兩側代表數據的穩定狀態(tài)——舊的數據值或者新的數據值;山頂代表亞穩態(tài)。如果球被拋到山頂上,它可能會(huì )停在山頂上,但實(shí)際上它只要稍微有些動(dòng)靜就會(huì )滾落到山底。在一定時(shí)間內,球滾的越遠,它達到穩定狀態(tài)的時(shí)間也就越短。
如果數據信號的變化發(fā)生在時(shí)鐘沿的某段時(shí)間之后(Th),就好像球跌落到了小山的“old data value”一側,輸出信號仍然保持時(shí)鐘變化前的值不變。如果數據信號的變化發(fā)生在時(shí)鐘沿的某段時(shí)間(Tsu)之前,并且持續到時(shí)鐘沿之后的某段時(shí)間(Th)都不再變化,那就好像球跌落到了小山的“new data value”一側,輸出數據達到穩定狀態(tài)的時(shí)間為T(mén)co。然而,當一個(gè)寄存器的輸入數據違反了Tsu或者Th,就像球被拋到了山頂。如果球在山頂停留的越久,那么它到達山底的時(shí)間也就越長(cháng),這就相應的延長(cháng)了從時(shí)鐘變化到輸出數據達到穩定狀態(tài)的時(shí)間(Tco)。

圖1
圖2很好的闡釋了亞穩態(tài)信號。在時(shí)鐘變化的同時(shí),寄存器的輸入數據信號也處于從低電平到高電平的變化狀態(tài),這就違反了寄存器的Tsu要求。圖中的輸出信號從低電平變化到亞穩態(tài),即盤(pán)旋于高低電平之間的一個(gè)狀態(tài)。信號輸出A最終達到輸入信號的新?tīng)顟B(tài)值1,信號輸出B卻返回了輸入信號的舊狀態(tài)值0。在這兩種情況下,信號輸出變化穩定在固定的1或者0狀態(tài)的時(shí)間遠超過(guò)了寄存器的固有Tco。

圖2
如果輸出信號在下一個(gè)寄存器捕獲數據前(下一個(gè)時(shí)鐘鎖存沿的Tsu時(shí)間前)處于一個(gè)穩定的有效狀態(tài),那么亞穩態(tài)信號不會(huì )對該系統照成影響。但是如果亞穩態(tài)信號在下一個(gè)寄存器捕獲數據時(shí)仍然盤(pán)旋于高或者低電平之間,那將會(huì )對系統的后續電路產(chǎn)生影響。繼續討論球和小山的比喻,當球到達山底的時(shí)間(處于穩定的邏輯值0或1)超過(guò)了扣除寄存器Tco以外的余量時(shí)間,那么問(wèn)題就隨著(zhù)而來(lái)。
同步寄存器
當信號變化處于一個(gè)不相關(guān)的電路或者以不時(shí)鐘域,它在被使用前就需要先被同步到新的時(shí)鐘域中。新的時(shí)鐘域中的第一個(gè)寄存器將扮演同步寄存器的角色。
為了盡可能減少異步信號傳輸中由于亞穩態(tài)引發(fā)的問(wèn)題,設計者通常在目的時(shí)鐘域中使用一串連續的寄存器(同步寄存器鏈或者同步裝置)將信號同步到新的時(shí)鐘域中。這些寄存器有額外的時(shí)間用于信號在被使用前從亞穩態(tài)達到穩定值。同步寄存器到寄存器路徑的時(shí)序余量,也就是亞穩態(tài)信號達到穩定的最大時(shí)間,也被認為是亞穩態(tài)持續時(shí)間。
同步寄存器鏈,或者同步裝置,被定義為一串達到以下要求的連續寄存器:
■ 鏈中的寄存器都由相同的時(shí)鐘或者相位相關(guān)的時(shí)鐘觸發(fā);
■ 鏈中的第一個(gè)寄存器由不相關(guān)時(shí)鐘域或者是異步的時(shí)鐘來(lái)觸發(fā);
■ 每個(gè)寄存器的扇出值都為1,鏈中的最后一個(gè)寄存器可以例外。
同步寄存器鏈的長(cháng)度就是達到以上要求的同步時(shí)鐘域的寄存器數量,圖3是一個(gè)兩級的同步寄存器鏈,

圖3
傳輸在不相關(guān)時(shí)鐘域的信號,都有可能在相對于捕獲寄存器時(shí)鐘沿的任何時(shí)間點(diǎn)變化。因此,設計者無(wú)法預測信號變化的順序或者說(shuō)信號兩次變化間經(jīng)過(guò)了幾個(gè)鎖存時(shí)鐘周期。例如,一條異步總線(xiàn)的各個(gè)數據信號可能在不同的時(shí)鐘沿變化,結果接收到的數據值可能是錯誤的。
設計者必須考慮到電路的這些情況,而使用雙時(shí)鐘FIFO(DCFIFO)傳輸信號或者使用握手信號進(jìn)行控制。FIFO使用同步裝置處理來(lái)自不同時(shí)鐘域的控制信號,數據的讀寫(xiě)使用兩套獨立的總線(xiàn)。此外,如果異步信號作為兩個(gè)時(shí)鐘域的握手邏輯,這些控制信號就需要用于指示何時(shí)數據信號可以被接收時(shí)鐘域鎖存。如此一來(lái),就可以利用同步寄存器確保亞穩態(tài)不會(huì )影響控制信號的傳輸,從而保證數據在使用前有充足的時(shí)間等待亞穩態(tài)達到穩定。
文章其實(shí)還沒(méi)有結束,只不過(guò)altera在后面很官方的提出了所謂的MTBF(mean time between failures)的概念,即所謂的平均無(wú)故障時(shí)間的概念。列了個(gè)公式,分析了各個(gè)參數,當然也不忘提他們的器件參數對于這個(gè)MTBF做了多大的貢獻。然后也提出了它們是如何進(jìn)行該公式參數的推導。
我們還是回到主題,在明確了這些基本的概念和基本的方法后,就要學(xué)以致用。在上篇博文沒(méi)有解決的一個(gè)關(guān)鍵問(wèn)題在于如何最有效的進(jìn)行握手信號req、ack的采樣。這個(gè)問(wèn)題我們可以先以altera提出的MTBF推導公式的各個(gè)參數入手分析。

在這個(gè)公式中,Tmet就是指寄存器從時(shí)鐘上升沿觸發(fā)后的時(shí)序余量時(shí)間,Fclk是接收時(shí)鐘域的時(shí)鐘頻率,Fdata是數據的變化頻率,而C1、C2則是與器件有關(guān)的參數,對于用戶(hù)是一個(gè)固定值。由此看來(lái),設計者只能通過(guò)改變Tmet、Fclk、Fdata來(lái)提高M(jìn)TBF值。MTBF值越大,說(shuō)明出現亞穩態(tài)的幾率越小。要增大MTBF值,可以延長(cháng)Tmet、也可以降低Fclk和Fdata這兩個(gè)頻率。
首先我們看看如何延長(cháng)Tmet時(shí)間。
Tmet時(shí)間 = 采樣時(shí)鐘周期時(shí)間 – 輸出信號正常的Tco時(shí)間 - 數據到達下一級寄存器的輸入端口的其它延時(shí)時(shí)間Tdata - 下一級寄存器Tsu時(shí)間。

圖4
從嚴格意義上來(lái)說(shuō),Tmet時(shí)間還應該加上時(shí)鐘網(wǎng)絡(luò )延時(shí)時(shí)間(Tclk2-Tclk1)??傊?,這個(gè)Tmet時(shí)間是指正常沒(méi)有亞穩態(tài)情況下,寄存器輸出信號從源寄存器到目的寄存器的建立時(shí)間余量。由于決定Tmet取值的參數中Tco和Tsu都是由FPGA器件本身的工藝以及工作環(huán)境決定的,設置時(shí)鐘網(wǎng)絡(luò )延時(shí)參數也很大程度上由器件決定,所以,如果在時(shí)鐘頻率Fclk和數據變化率Fdata固定的情況下,要增大Tmet值,那么設計者要做的只能是減小Tdata值。而這個(gè)Tdata是指兩個(gè)寄存器間的邏輯延時(shí)以及走線(xiàn)延時(shí)之和,要最大程度的減小它,估計也只能是不在連個(gè)寄存器間添加任何邏輯而已,正如我們的實(shí)例中也只有簡(jiǎn)單的input=output。
再看Fclk,它是接收域的采樣時(shí)鐘,就是異步信號需要被同步到的那個(gè)時(shí)鐘域,它的頻率是越小越好。當然了,事物都其兩面性,這個(gè)頻率小到影響系統正常工作可就不行了。設計者需要從各個(gè)方面考慮來(lái)決定這個(gè)頻率,不會(huì )僅僅為了降低亞穩態(tài)發(fā)生的概率而無(wú)限制的降低系統的時(shí)鐘頻率。如此分析,發(fā)現這個(gè)Fclk基本也是一個(gè)比較固定的值,不是可以隨便說(shuō)降就降的。降低Fclk其實(shí)也就是在增大Tmet時(shí)間,因為它是Tmet公式計算中的被減數,哈哈,好像是一環(huán)扣一環(huán)。另外,在不降低采樣頻率Fclk的情況下,通過(guò)使用使能信號的方式得到一個(gè)二分頻時(shí)鐘去采樣信號也可以達到降頻的目的,只不過(guò)這樣會(huì )多耗費幾個(gè)時(shí)鐘周期用于同步,但是有時(shí)也能夠明顯改善性能。
特權同學(xué)的二分頻采樣思路如圖5所示,前兩級采樣電路都做了2分頻,然后第三級使用原來(lái)時(shí)鐘進(jìn)行采樣。它的好處在于給第一級和第二級同步寄存器更多的Tmet時(shí)間,將亞穩態(tài)抑制在第二級寄存器輸入之前,從而保證第三級寄存器的可靠采樣。雖然它在一、二級寄存器的輸入端增加了一些邏輯,可能會(huì )增大Tdata,但是相比于這個(gè)采樣時(shí)鐘的一半將額,它的變化是可以忽略不計的。

圖5
另一種辦法是在不降低每級寄存器的采樣頻率的情況下采用更多的同步寄存器,盡量去使用后級的寄存器,這也是一個(gè)笨辦法。Altera的筆記里打了一個(gè)比喻,如果一個(gè)設計你使用了9級的同步寄存器,那么MTBF是100年,而當你使用了10級的同步寄存器,那么MTBF是1000年。這個(gè)辦法其實(shí)有點(diǎn)類(lèi)似冗余,這是所有人都知道的可以提高可靠性的原始辦法。這種思路的弊端和前面提到的方法一樣,需要付出多個(gè)時(shí)鐘周期為代價(jià)。
最后看這個(gè)Fdata,這個(gè)是發(fā)送時(shí)鐘域的數據變化率,似乎也是由系統決定的,設計者也無(wú)法做太多改變。
其實(shí)對于一般的應用,如果系統的時(shí)鐘頻率不太高,器件的特性還算可以(只是一些泛泛的說(shuō)法,具體問(wèn)題要具體分析),特權同學(xué)覺(jué)得上篇博文提出的握手信號同步方法就足以應付亞穩態(tài)問(wèn)題。如果到高頻范疇來(lái)討論亞穩態(tài),那將會(huì )是一項更有挑戰性的任務(wù),只可惜特權同學(xué)目前接觸的最高頻也只不過(guò)100MHz而已。特權同學(xué)自覺(jué)才疏學(xué)淺,班門(mén)弄斧了。
無(wú)獨有偶,特權同學(xué)這篇博文即將收官之際,無(wú)意中看到船長(cháng)的博客中《理解FPGAs中的亞穩態(tài)》一文也涉及到了altera的這篇筆記,也做了一下翻譯,似乎比特權同學(xué)翻譯的好。不過(guò)在此做個(gè)聲明,特權同學(xué)的博文一貫堅持原創(chuàng ),即便參考其它資料,也大都有所提及,并且有自己的評論和思考,這應該是每位電子工程師應該有的嚴謹和認真的態(tài)度。
模擬信號相關(guān)文章:什么是模擬信號
fpga相關(guān)文章:fpga是什么
評論