唐輝艷,李紹勝
(1.北京郵電大學(xué) 信息與通信工程學(xué)院,北京 100876;2.中國軟件與技術(shù)服務(wù)有限公司,北京 100080)
隨著電子自動化設(shè)計(EDA)技術(shù)的發(fā)展,現(xiàn)場可編程門陣列(FPGA)已經(jīng)在許多方面得到廣泛應(yīng)用,比如將FPGA應(yīng)用于通信領(lǐng)域,實現(xiàn)數(shù)字調(diào)制解調(diào)、編碼解碼,F(xiàn)PGA還在實現(xiàn)通信系統(tǒng)中的各種接口中起著重要作用,如PCI總線、SPI總線等。而在FPGA的接口設(shè)計中,同步?jīng)Q定了系統(tǒng)的穩(wěn)定性與接收數(shù)據(jù)的準(zhǔn)確性。但是實際的工程中,純粹單時鐘同步系統(tǒng)設(shè)計的情況很少,特別是設(shè)計模塊與外圍芯片的通信中,跨時鐘域的情況經(jīng)常不可避免。如果在跨時鐘域中采樣就會產(chǎn)生亞穩(wěn)態(tài)、采樣丟失和采樣數(shù)據(jù)錯誤等一系列問題,從而使系統(tǒng)無法正常運行。本文就此分析了在FPGA設(shè)計中跨時鐘域?qū)е碌膩喎€(wěn)態(tài)現(xiàn)象以及2種同步方法,尤其是基于異步FIFO的同步方法。
在FPGA的設(shè)計中,當(dāng)用不同域的時鐘去采樣數(shù)據(jù)時,如果采樣的數(shù)據(jù)不滿足setup時間和hold時間, 這樣就可能產(chǎn)生亞穩(wěn)態(tài),此時觸發(fā)器輸出端Q在有效時鐘沿之后比較長的一段時間內(nèi)處于不確定的狀態(tài)。在這段時間內(nèi)Q端產(chǎn)生毛刺并不斷震蕩,最終固定在某一電壓值。此電壓值不一定等于原來數(shù)據(jù)輸入端D的數(shù)值,這段時間稱為決斷時間,經(jīng)過決斷時間之后,Q端將穩(wěn)定到0或1上,但空間是0還是1,這是隨機的。
亞穩(wěn)態(tài)的危害主要體現(xiàn)在破壞系統(tǒng)的穩(wěn)定性。由于輸出在穩(wěn)定下來之前可能是毛刺、震蕩、固定的某一電壓值,因此亞穩(wěn)態(tài)將導(dǎo)致邏輯誤差,嚴(yán)重情況下輸出0~1之間的中間電壓值還會使下一個寄存器產(chǎn)生亞穩(wěn)態(tài),即導(dǎo)致亞穩(wěn)態(tài)狀態(tài)下,任何諸如環(huán)境噪聲、電源干擾等細(xì)微擾動都將導(dǎo)致更惡劣的狀態(tài)不穩(wěn)定。這時這個系統(tǒng)的傳輸延遲增大,狀態(tài)輸出錯誤,在某些情況下甚至?xí)辜拇嫫髟?個有效判斷之間長時間振蕩。
只要系統(tǒng)中有異步元件,亞穩(wěn)態(tài)就無法避免,因此,設(shè)計的電路要減少亞穩(wěn)態(tài)導(dǎo)致的錯誤,要使系統(tǒng)對產(chǎn)生的錯誤不敏感。
在異步設(shè)計中,完全避免亞穩(wěn)態(tài)是不可能的。所以,設(shè)計思路應(yīng)該是:盡可能降低亞穩(wěn)態(tài)出現(xiàn)的概率,也就是盡可能地采取同步方法。
為了避免進入亞穩(wěn)態(tài),通常采用的方法是使用2級寄存器,即一個信號要進入另外一個時鐘域之前用另一時鐘域的時候進行2次鎖存,如圖1。式,讀寫時鐘采用2個不同的時鐘,寫時鐘是外部進來的隨路時鐘,而讀時鐘采用本地鎖相環(huán)鎖出來的時鐘。系統(tǒng)框圖如圖2。
圖1 雙鎖存器法
圖2 異步FIFO結(jié)構(gòu)框圖
其中,c lk_a是與data在同一時鐘域的同步時鐘,而c lk_b是另一時鐘域的時鐘,經(jīng)c lk_a鎖存后的數(shù)據(jù)再經(jīng)c l k_b的正負(fù)沿鎖2次以后,數(shù)據(jù)data_out基本就穩(wěn)定了,理論上,采用這種方法可以有效地減少亞穩(wěn)態(tài)繼續(xù)傳播的概率,但是并不能保證第2級輸出的穩(wěn)態(tài)電平就是正確電平。前面說過經(jīng)過決斷時間之后,寄存器輸出的電平是一個不確定的穩(wěn)態(tài)值。也就是說這種處理方法并不能排除采樣錯誤的產(chǎn)生。當(dāng)設(shè)計的系統(tǒng)對采樣錯誤不敏感時,如一幀圖像編碼、一段語音編碼等。而對于一些對錯誤采樣比較敏感的系統(tǒng),則不能采用這種方法來解決跨時鐘域的數(shù)據(jù)采樣問題。
使用異步FIFO來存放數(shù)據(jù),可以達到數(shù)據(jù)同步的目的。把數(shù)據(jù)存放在FIFO的方法是:將上個時鐘域提供的數(shù)據(jù)隨路時鐘作為寫信號,將數(shù)據(jù)寫入FIFO,然后使用本級的采樣時鐘(一般是數(shù)據(jù)處理的主時鐘)將數(shù)據(jù)讀出即可。這種做法的關(guān)鍵是數(shù)據(jù)寫入FIFO要可靠,如果要使用FIFO,就要求有一個與數(shù)據(jù)相對延遲關(guān)系固定的隨路指示信號,這個信號可以是數(shù)據(jù)的有效指示,也可以是上級模塊將數(shù)據(jù)打出來的時鐘。對于慢速數(shù)據(jù),也可以采用異步RAM或者FIFO,但是不推薦這種做法。下面主要介紹基于異步FIFO和RAM解決跨時鐘域異步問題的方法。
本文所設(shè)計的異步FIFO采用循環(huán)隊列的方
圖2中,異步FIFO的端口定義是:wrdata是往FIFO里面寫的數(shù)據(jù),這個可以視具體情況為2n bi t,wrc lk是寫時鐘,wr ful l信號是FIFO寫滿標(biāo)志,rdc lk是讀時鐘,rdempty是讀空標(biāo)志,rdata是從FIFO里面讀出來的數(shù)據(jù)。從圖中可以看出,整個模塊分成2個完全獨立的時鐘域:讀時鐘域和寫時鐘域,讀/寫操作完全由2個不相關(guān)的時鐘來控制。在寫時鐘域,寫使能信號是由寫時鐘來控制的,當(dāng)外部數(shù)據(jù)有效的時候有效,寫使能為高,直至該幀數(shù)據(jù)結(jié)束,本設(shè)計中,寫滿和讀空標(biāo)志非常重要,對于讀/寫使能的設(shè)計也起著決定性作用,寫使能信號一定要在寫滿標(biāo)志有效前就結(jié)束,將有效數(shù)據(jù)都寫入FIFO,而讀使能一定要在讀空標(biāo)志有效前將FIFO里面的數(shù)據(jù)讀空,如果不這樣,將會出現(xiàn)數(shù)據(jù)寫覆蓋和讀錯的現(xiàn)象。
本設(shè)計中,異步FIFO是調(diào)用IP核,空滿標(biāo)志是異步FIFO自己產(chǎn)生的,可用來控制FIFO的讀/寫使能信號,寫使能信號在有效數(shù)據(jù)到來之后有效,持續(xù)到所有有效數(shù)據(jù)都寫入FIFO并且寫滿標(biāo)志未有效,這樣就可以將所有的有效數(shù)據(jù)都寫入FIFO中;為了防止數(shù)據(jù)還沒有寫完全就被讀空的狀態(tài),特別是讀時鐘太快的時候,讀使能是在當(dāng)有效數(shù)據(jù)全被寫入FIFO之后啟動的,并且在讀空之前一直有效,用這種方法就將讀寫時鐘域完全隔離,寫入FIFO的數(shù)據(jù)速率是可調(diào)的,當(dāng)然用這種結(jié)構(gòu)的數(shù)據(jù)長度是有限的,若數(shù)據(jù)長度很大時,則要根據(jù)讀寫時鐘的頻率來選擇FIFO的深度,具體如下:若讀時鐘的頻率大于或者等于寫時鐘的頻率,就不用擔(dān)心溢出問題,F(xiàn)IFO的長度可以任意選擇,否則,若讀時鐘頻率小于寫時鐘頻率,只能將FIFO或者RAM的深度增加,使得數(shù)據(jù)在寫滿之前已經(jīng)將數(shù)據(jù)讀完,此時FIFO的深度和讀使能信號的配合很重要。
本結(jié)構(gòu)采用Ver i log HDL硬件描述語言進行電路設(shè)計,調(diào)用異步FIFO核,在Cyc lone II系列的EP2C8Q208C8 FPGA上得以實現(xiàn),在Model sim軟件中進行功能仿真,并且將該結(jié)構(gòu)用于筆者研究的一個項目中,在Quar tus II軟件的在線邏輯分析儀(Signal Tap Logic Analyzer)上調(diào)試抓到的信號如圖3。
從圖3中可以看出,經(jīng)過FIFO之后出來的數(shù)據(jù)和時鐘完全同步,且在此設(shè)計中讀寫時鐘是同頻率的,所以FIFO的寫入數(shù)據(jù)速率和讀出數(shù)據(jù)速率也是一致的,不過,由于時鐘域的同步是需要時間的,這里設(shè)置了128個wrc lk用來緩存寫入數(shù)據(jù),故從FIFO中讀出來的數(shù)據(jù)相對于寫入的數(shù)據(jù)有一定的延時,這里的延時是128個wrc lk,不同的設(shè)計中可以設(shè)置成不同的延時。本設(shè)計中寫時鐘和讀時鐘都是120 M,結(jié)果證明這種設(shè)計是正確的。
本文討論了在FPGA中跨時鐘域引起的亞穩(wěn)態(tài)現(xiàn)象及其解決方法,重點介紹異步FIFO緩存方法,并且在FPGA中用Ver i log HDL語言實現(xiàn),經(jīng)驗證該方法能穩(wěn)定有效地解決跨時鐘域的亞穩(wěn)態(tài)問題。能安全實現(xiàn)數(shù)據(jù)跨越時鐘域的傳遞,并能起到數(shù)據(jù)緩存的作用,因此是一種較好的方法。
[1] Mutter sbach J.,Villiger T., Kaeslin H, et al.Globally asynchronous locally synchronous architectures to simplify the design of on-chip systems[A] IEEE ASIC/SOC Conference 1999[C],15 -18 Sept.1999: 317-321.
[2] William J. Dally. John W. Plultin. Digital Systems Engineering[C].Cambridge University Press,1998, Page(s): 468.
[3]A. Chakraborty, M.R. Greenstreet interface[C]. Asic/Soc Conference, 2002, 15th Annual.
[4]朱永峰,陸生禮,茆邦琴. SoC設(shè)計中的多時鐘域處理[J].電子工程師,2003(11):60-61.
[5] 杜 旭,左 劍,夏曉菲,ASIC系統(tǒng)中跨時鐘域配置模塊的設(shè)計與實現(xiàn)[J]. 微電子學(xué)與計算機,2004,21(6):173-177.
[6] 宋紅東,胡 晨,楊 軍. 一種用于高可靠性同步器電路的D觸發(fā)器設(shè)計[J].電子器件,2003,26(1):99-103.