廣東工業(yè)大學(xué)自動化學(xué)院 周 偉 杜玉曉 楊其宇 張育俊 曾 浩
FPGA跨時鐘域亞穩(wěn)態(tài)研究
廣東工業(yè)大學(xué)自動化學(xué)院 周 偉 杜玉曉 楊其宇 張育俊 曾 浩
在FPGA電路設(shè)計中,一個系統(tǒng)可能包含了很多跨時鐘域的時鐘信號,當(dāng)其目標(biāo)域時鐘與源域時鐘不同時,如何在這些不同域之間傳遞數(shù)據(jù)成為了一個重要問題。特別是在中心模塊與外圍電路芯片的通信設(shè)計中,容易導(dǎo)致亞穩(wěn)態(tài)的跨時鐘域就不可避免。針對FPGA設(shè)計中的亞穩(wěn)態(tài)問題,本文給出了一系列行之有效的解決方法,很好地抑制亞穩(wěn)態(tài),提高系統(tǒng)可靠性。
亞穩(wěn)態(tài);建立時間;保持時間;異步FIFO;握手協(xié)議
在FPGA同步時序電路設(shè)計中,即所有時鐘寄存器的時鐘共享一個時鐘,可以有效地消除亞穩(wěn)態(tài)。然而,許多實際應(yīng)用要求在同一個可編程邏輯器件內(nèi)采用多個時鐘,且核心模塊與外設(shè)的通信設(shè)計也涉及跨時鐘域的數(shù)據(jù)傳遞??鐣r鐘的異步時序電路含有的多個時鐘源,它們存在頻率和相位的差異,當(dāng)它們用作寄存器的輸入時鐘時,就可能違背建立時間和保持時間的要求,出現(xiàn)亞穩(wěn)態(tài)[1-5]。亞穩(wěn)態(tài)問題是跨時鐘域異步數(shù)據(jù)傳輸過程面臨的主要問題。
在FPGA設(shè)計中,每種觸發(fā)器都有時序要求。“建立時間”(Setup time)是指在時鐘沿到來之前,觸發(fā)器輸入信號必須保持穩(wěn)定的時間?!氨3謺r間”(Hold time)則是指在時鐘沿之后,信號必須保持穩(wěn)定的時間。這些指標(biāo)通常比較保守,以應(yīng)對不同的PVT(工藝、電壓、溫度)環(huán)境下時序各有差異的情況。如果一個設(shè)計滿足了這些時序要求,則觸發(fā)器出現(xiàn)錯誤的可能性可以忽略不計。
亞穩(wěn)態(tài)是當(dāng)信號在跨時鐘的異步電路中或是無關(guān)的時鐘域之間傳輸時導(dǎo)致數(shù)字系統(tǒng)失效的一種現(xiàn)象。為了使觸發(fā)器能夠正確捕獲并輸出數(shù)據(jù),F(xiàn)PGA的信號傳輸數(shù)據(jù)信號都會有一定的時序要求,為了確保可靠的操作,輸入寄存器的數(shù)據(jù)信號必須在時鐘沿的某段時間(寄存器的建立時間Tsu)之前保持穩(wěn)定,并且持續(xù)到時鐘沿之后的某段時間(寄存器的保持時間Th)之后才能改變。寄存器的輸入反映到輸出則需要經(jīng)過一定的延時(時鐘到輸出的時間Tco)。如果數(shù)據(jù)信號的變化違反了Tsu和Th的要求,那么寄存器的輸出就會處于亞穩(wěn)態(tài)[6]。此時,寄存器的輸出會在高電平1和低電平0之間盤旋一段時間,這也意味著寄存器的輸出達到一個穩(wěn)定的高或者低電平的狀態(tài)所需要的時間會大于Tco。
隨著跨時鐘域設(shè)計的愈發(fā)常見和復(fù)雜化,只要系統(tǒng)中存在跨時鐘域,亞穩(wěn)態(tài)就是無法避免的,因此設(shè)計的電路首先要減少亞穩(wěn)態(tài)導(dǎo)致錯誤的發(fā)生,其次要使系統(tǒng)對產(chǎn)生的錯誤不敏感。前者要靠同步來實現(xiàn),而后者根據(jù)不同的設(shè)計應(yīng)用有不同的處理辦法。
在FPGA設(shè)計中,數(shù)據(jù)信號在不同時鐘域間傳遞,最容易產(chǎn)生亞穩(wěn)態(tài),即觸發(fā)器無法在時序要求的規(guī)定時間段內(nèi)達到一個可確認的狀態(tài)。數(shù)據(jù)信號在傳輸過程中觸發(fā)器的建立時間或保持時間不滿足時序要求,即信號在穩(wěn)定前的狀態(tài),一般是由于時序余量不夠,使得電路的輸入電平無法上升或下降到所需邏輯電平1或0。
跨時鐘異步輸入信號可以在任何時間點翻轉(zhuǎn),它與下級同步采樣信號沒有必然聯(lián)系。此外,在數(shù)據(jù)翻轉(zhuǎn)前,設(shè)計者無法預(yù)知該被采樣信號的時鐘沿或翻轉(zhuǎn)順序,也就不能保證信號滿足建立時間。無法保證穩(wěn)定的采樣,給跨時鐘域的FPGA設(shè)計帶來難題。
跨時鐘域的轉(zhuǎn)換的核心就是要保證下級時鐘對上級時鐘數(shù)據(jù)的采樣的Tsu和Th時間。如果觸發(fā)器的Tsu時間或Th時間不能滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時觸發(fā)器輸出端Q在有效時鐘沿之后較長時間處于不確定狀態(tài),在這段時間內(nèi)Q端產(chǎn)生毛刺并不斷振蕩,最終固定在某一個值,這個值不一定等于原來數(shù)據(jù)輸入端口D的數(shù)值,這短時間稱為判決時間(Resolution time),經(jīng)過Resolution time之后Q端經(jīng)穩(wěn)定到0或1上,但究竟是0還是1,是隨機的。與輸入沒有必然的聯(lián)系。
如圖1所示,時鐘CLK_A在上升沿時采樣數(shù)據(jù)DATAIN,數(shù)據(jù)信號data是時鐘CLK_A同步產(chǎn)生的,輸入信號data對下一級的觸發(fā)器的時鐘CLK_B是跨時鐘的異步信號,由于data的變化與CLK_B時鐘域時鐘的采樣邊沿太接近,未滿足采樣建立時間,造成的亞穩(wěn)態(tài)周期。輸出DATAOUT傳遞到后面的組合邏輯會產(chǎn)生不定狀態(tài),若在進入下一級采樣前還沒有進入穩(wěn)定狀態(tài),就會導(dǎo)致系統(tǒng)混亂。
圖1
圖2
圖3 握手協(xié)議
圖4 異步FIFO
亞穩(wěn)態(tài)的危害主要是破壞系統(tǒng)的穩(wěn)定性。由于輸出在穩(wěn)定前可能有毛刺、振蕩、固定的某一電壓值,因此亞穩(wěn)態(tài)將導(dǎo)致邏輯誤判,嚴重的情況輸出0~1之間的電壓值還會使下一級產(chǎn)生亞穩(wěn)態(tài),即亞穩(wěn)態(tài)的傳播。邏輯誤判導(dǎo)致功能性錯誤,而亞穩(wěn)態(tài)傳播則擴大故障面。另外,在亞穩(wěn)態(tài)下,電源干擾、環(huán)境噪聲、工作溫度等細微的擾動都可能導(dǎo)致更惡劣的狀態(tài)不穩(wěn)定,這時系統(tǒng)的傳輸延遲增大,狀態(tài)輸出錯誤。
FPGA設(shè)計中,要減少亞穩(wěn)態(tài)導(dǎo)致的錯誤并使系統(tǒng)對產(chǎn)生的錯誤不敏感,就要正確定義和處理FPGA內(nèi)部與外部時鐘之間的接口。對于異步或無關(guān)時鐘域間傳輸?shù)男盘枺贔PGA本地時鐘域使用該信號前,必須對其進行同步。同步器的功能是采樣異步輸入信號,使產(chǎn)生的輸出信號滿足同步系統(tǒng)對建立時間和保持時間的要求,從而抑制亞穩(wěn)態(tài)對電路的影響。在許多應(yīng)用中,跨時鐘域傳送的不只是簡單的信號,數(shù)據(jù)總線、地址總線和控制總線都會同時跨域傳輸,這些復(fù)雜的情況,就需要應(yīng)用握手協(xié)議和異步FIFO的手段來處理這些情況。因此處理跨時鐘域常用的方法有兩級觸發(fā)器同步法、握手協(xié)議和異步FIFO法3種。
為了避免進入亞穩(wěn)態(tài),通常采用的方法是使用兩級寄存器,即一個信號要進入另外一個時鐘域之前用另一時鐘域的時候進行兩次寄存,在圖2中,左邊為異步的輸入端,經(jīng)過兩級觸發(fā)器采樣,在右邊的輸出與時鐘CLK_B同步,而且該輸出基本不存在亞穩(wěn)態(tài)。其原理是即使第一個觸發(fā)器的輸出端存在亞穩(wěn)態(tài),經(jīng)過一個CLK時鐘周期后,第二個觸發(fā)器D端的電平仍未穩(wěn)定的概率非常小,因此第二個觸發(fā)器Q端基本不會產(chǎn)生亞穩(wěn)態(tài)。理論上如果再添加一級寄存器,是同步采樣達3級。則末級輸出為亞穩(wěn)態(tài)的概率幾乎為0。因此使用兩級寄存器采樣可以有效地減少亞穩(wěn)態(tài)繼續(xù)傳播的概率。
使用圖2所示兩級寄存器采樣不僅能降低亞穩(wěn)態(tài)的概率。但是并不能保證第二級的輸出的穩(wěn)定電平就是正確的電平。前面說過經(jīng)過Resolution time之后寄存器輸出電平是一個不正確定的穩(wěn)態(tài)值。也就是說這種處理方法不能排除采樣錯誤的產(chǎn)生。這時就要求所設(shè)計的系統(tǒng)對采樣錯誤有一定的容忍度。有些應(yīng)用本身就對采樣錯誤不敏感,有些系統(tǒng)對錯誤采樣比較敏感,可以采用一些糾錯編碼手段完成錯誤的糾正。
握手協(xié)議是實現(xiàn)總線數(shù)據(jù)跨時鐘域通信的一種有效方法,它能在避免亞穩(wěn)態(tài)傳播的同時正確地捕獲總線數(shù)據(jù)。握手信號,雙方電路在聲明或中止各自的握手信號前都要等待對方的響應(yīng)。使用握手協(xié)議方式處理跨時鐘域數(shù)據(jù)傳輸,只需要對雙方的握手信號(req、ack)分別使用脈沖檢測方法進行同步。在具體實現(xiàn)中,首先,電路A聲明它的請求信號,即先把數(shù)據(jù)放入總線,隨后發(fā)送有效的請求req信號給電路B。然后,電路B檢測到有效的req信號后鎖存數(shù)據(jù)總線,聲明它的響應(yīng)信號,即回送一個有效的ack信號表示讀取完成應(yīng)答。當(dāng)電路A檢測到電路B回應(yīng)的響應(yīng)信號有效后,中止自己的請求信號,即撤銷當(dāng)前的req信號。最后,當(dāng)電路B檢測到電路A的信號req撤銷后也相應(yīng)撤銷ack信號,此時完成一次正常握手通信。此后,可以繼續(xù)開始下一次握手通信,如此循環(huán)。該方式能夠使接收到的數(shù)據(jù)穩(wěn)定可靠,有效的避免了亞穩(wěn)態(tài)的出現(xiàn),以上所述的通信流程如圖3所示。
信號跨越一個時鐘域要花兩個時鐘周期的時間,信號在跨越多個時鐘域前被電路寄存。全部的時間序列是:A時鐘域中最多五個周期加上B時鐘域最多六個周期。握手有效的避免了亞穩(wěn)態(tài)的出現(xiàn),因為通過檢測請求與響應(yīng)信號,每個電路都清楚地知道對方的狀態(tài)。但控制信號握手檢測會消耗通信雙方較多的時間,完成所有交互的整個過程要花費很多時鐘周期。
異步FIFO[7-8]是一種先進先出的電路,使用在需要產(chǎn)時數(shù)據(jù)接口的部分,用來存儲、緩沖在兩個跨時鐘異步時鐘之間的數(shù)據(jù)傳輸。使用一個異步FIFO在兩個時鐘域的交界處通信,通過它來實現(xiàn)數(shù)據(jù)流的傳輸。由發(fā)送時鐘域?qū)?shù)據(jù)寫入,接收時鐘域?qū)?shù)據(jù)取出,在數(shù)據(jù)傳輸?shù)耐瑫r實現(xiàn)了數(shù)據(jù)的緩存,因此是一種較理想的方法。
由圖4可以看出:整個系統(tǒng)分為兩個完全獨立的時鐘域——讀時鐘域和寫時間域;FIFO的存儲介質(zhì)為一塊雙端口RAM,可以同時進行讀寫操作。在寫時鐘域部分,由寫地址產(chǎn)生邏輯產(chǎn)生寫控制信號和寫地址;讀時鐘部分由讀地址產(chǎn)生邏輯產(chǎn)生讀控制信號和讀地址。在空/滿標(biāo)志產(chǎn)生部分,由讀寫地址相互比較產(chǎn)生空/滿標(biāo)志。
不同時鐘域間數(shù)據(jù)傳遞的問題及其解決方法不同時鐘域間數(shù)據(jù)傳遞的最重要問題就是亞穩(wěn)態(tài)問題。當(dāng)數(shù)據(jù)信號通過兩個時鐘域的交界處時,將會分別由這兩個時鐘來控制信號的值。此時如果兩時鐘信號的敏感沿非常接近并超過了允許的額度,則將出現(xiàn)數(shù)據(jù)信號的不穩(wěn)定,即電路陷入亞穩(wěn)態(tài),也稱為同步失敗,同樣會產(chǎn)生亞穩(wěn)態(tài)。但是通過設(shè)計改進可以將其發(fā)生的概率降低到一個可以接受的程度。
在FIFO設(shè)計中,F(xiàn)IFO指針邏輯使用了格雷碼,代替指針使用的二進制碼。格雷碼在每一次計數(shù)增減時只改變其中的一位。你可以在格雷碼總線上使用同步器,因為每一次總線改變時只有一根信號線有變化,于是就消除了格雷碼總線各位通過不同同步器時的競爭情況,降低了亞穩(wěn)態(tài)的產(chǎn)生,在異步FIFO設(shè)計中,通過提高空/滿標(biāo)志產(chǎn)生邏輯的可靠性,能夠很好地抑制亞穩(wěn)態(tài),進一步的降低了亞穩(wěn)態(tài)的產(chǎn)生。
在FPGA跨時鐘域設(shè)計中,亞穩(wěn)態(tài)與設(shè)計可靠性有著密切的聯(lián)系。本文探討分析了跨時鐘域亞穩(wěn)態(tài)的產(chǎn)生機制及FPGA設(shè)計中亞穩(wěn)態(tài)問題的解決方法,提出的這些方法行之有效。傳輸在不相關(guān)時鐘域的信號,都有可能在相對于捕獲寄存器時鐘沿的任何時間點變化。因此,設(shè)計者無法預(yù)測信號變化的順序或者說信號兩次變化間經(jīng)過了幾個鎖存時鐘周期。設(shè)計者必須考慮到電路的這些情況,在實際應(yīng)用中,設(shè)計者可根據(jù)具體的實際情況而使用異步FIFO傳輸信號或者使用握手信號進行控制。
一般情況下兩級寄存器同步適合步時鐘域之間單信號傳輸;當(dāng)幾個電路不能預(yù)知相互的響應(yīng)時間時,握手方法能讓數(shù)字電路間實現(xiàn)有效的通信;總線數(shù)據(jù)同步、高速數(shù)據(jù)傳輸、數(shù)據(jù)在跨越時鐘域時需要存儲容量大的緩沖時則可以采用異步FIFO。這些措施能夠有效解決FPGA設(shè)計中跨時鐘域的亞穩(wěn)態(tài)問題,能實現(xiàn)數(shù)據(jù)跨越時鐘域的安全傳遞。
[1]夏字聞.Verilog數(shù)字系統(tǒng)設(shè)計教程(2版)[M].北京:北京航空航天大學(xué)出版社,2008.
[2]魏堃.跨時鐘域信號同步技術(shù)研究[D].西安:西安電子科技大學(xué),2009.
[3]Michelle Lange.Automated CDC verification protects complex electronic hardware from metastability failures.Mentor Graphics Corporation.Aug.2008.
[4]孟憲元,譯.高級FPGA設(shè)計結(jié)構(gòu)、實現(xiàn)和優(yōu)化[M].北京:機械工業(yè)出版社,2009.
[5]徐翼,鄭建宏.異步時鐘域的亞穩(wěn)態(tài)問題和同步器[J].微計算機信息,2008,24(2):171-172.
[6]吳小蕻.跨時鐘域若干問題的研究-同步與亞穩(wěn)態(tài)[D].合肥:中國科學(xué)技術(shù)大學(xué),2008.
[7]楊青山,蔡敏.基于多時鐘域的異步FIFO設(shè)設(shè)計[J].中國集成電路,2007(9):36-39.
[8]于海,樊曉椏.基于FPGA異步FIFO的研究與實現(xiàn)[J].微電子學(xué)與計算,2007.