《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 一種節(jié)能型可升級(jí)異步FIFO的FPGA實(shí)現(xiàn)

一種節(jié)能型可升級(jí)異步FIFO的FPGA實(shí)現(xiàn)

2009-06-25
作者:陳 軍,,張遠(yuǎn)見,,楊 俊

  摘 要: 提出了一種節(jié)能并可升級(jí)的異步FIFO的FPGA實(shí)現(xiàn),。此系統(tǒng)結(jié)構(gòu)利用FPGA內(nèi)自身的資源控制時(shí)鐘的暫停與恢復(fù),,實(shí)現(xiàn)了高能效,、高工作頻率的數(shù)據(jù)傳輸,。該系統(tǒng)在Xilinx的VC4VSX55芯片中實(shí)現(xiàn),實(shí)際可工作于高達(dá)100/153.6 MHz的讀/寫時(shí)鐘域,。本文所提出的結(jié)構(gòu)不依賴于現(xiàn)有的IP核,,基于此結(jié)構(gòu)易建立可升級(jí)的IP核,。
  關(guān)鍵詞: FIFO,;FPGA;IP核

?

  現(xiàn)代數(shù)字系統(tǒng)中,,異步FIFO是一種被廣泛應(yīng)用于跨時(shí)鐘域進(jìn)行數(shù)據(jù)傳輸?shù)挠行Х绞?。異步FIFO主要應(yīng)用于兩種不同時(shí)鐘域的數(shù)據(jù)傳輸,這意味著數(shù)據(jù)的寫入在一個(gè)時(shí)鐘域,,而數(shù)據(jù)的讀出卻在另一個(gè)時(shí)鐘域,,兩個(gè)時(shí)鐘完全異步[1]。現(xiàn)代通信系統(tǒng)中,,特別是在移動(dòng)通信系統(tǒng)中,,人們對(duì)于節(jié)能型的產(chǎn)品提出了更高的要求。隨著技術(shù)的發(fā)展,,F(xiàn)PGA的技術(shù),、性能、穩(wěn)定性等指標(biāo)已經(jīng)得到很大提高,,同時(shí)FPGA廠商為不同的應(yīng)用開發(fā)提供了各種IP核,,大大減少了產(chǎn)品的開發(fā)周期,在各大FPGA廠商中,,Xilinx的IP核應(yīng)用比較廣泛,。但其IP核卻沒有關(guān)于異步FIFO節(jié)能方面的設(shè)計(jì)。在文獻(xiàn)[2]中對(duì)于FIFO的設(shè)計(jì)有節(jié)能方面的改進(jìn),,由于其主要應(yīng)用于ASIC設(shè)計(jì),,對(duì)于FPGA中的應(yīng)用并不完全適用,。
  本文提出了一種更加節(jié)能而且能應(yīng)用于高速應(yīng)用的FPGA設(shè)計(jì),同時(shí)本文提出一種改進(jìn)的格雷碼二進(jìn)制碼轉(zhuǎn)換結(jié)構(gòu),,在此基礎(chǔ)上利用Xilinx的FPGA芯片現(xiàn)有的數(shù)字時(shí)鐘管理模塊實(shí)現(xiàn)節(jié)能方面改進(jìn),。本文所提出的結(jié)構(gòu)不依賴于現(xiàn)有的IP核,而且可以容易地建立自己的IP核,。實(shí)際應(yīng)用中,,通過FPGA與DSP進(jìn)行數(shù)據(jù)傳輸可工作于高達(dá)100/153.6 MHz讀/寫時(shí)鐘域。
1 FIFO的主要結(jié)構(gòu)
1.1 主要的FIFO結(jié)構(gòu)
  在所有FIFO結(jié)構(gòu)中,,首先要提到的是單時(shí)鐘域的同步FIFO,,雖然同步FIFO在現(xiàn)在的實(shí)際應(yīng)用中很少被使用,但是其結(jié)構(gòu)將有助于理解兩個(gè)時(shí)鐘域的異步FIFO的實(shí)現(xiàn),。主要有線性結(jié)構(gòu)的FIFO和線性可調(diào)結(jié)構(gòu)的FIFO[2],。其結(jié)構(gòu)圖如圖1。

?

?

  線性可調(diào)FIFO只是在線性FIFO的基礎(chǔ)上增加了控制信號(hào)以便于容量擴(kuò)展,。從圖1中可以看出,,無論線性的FIFO還是線性可調(diào)結(jié)構(gòu)的FIFO,都是由一些移位寄存器所組成,,其主要優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單容易實(shí)現(xiàn),。從數(shù)據(jù)的輸入到輸出這一過程看,數(shù)據(jù)都要經(jīng)過每個(gè)寄存器,,當(dāng)FIFO容量變大時(shí),,這類結(jié)構(gòu)的缺點(diǎn)也很突出,如數(shù)據(jù)從輸入到輸出的延時(shí)時(shí)間長(zhǎng),,而且能耗比較大,。
  為了克服以上FIFO結(jié)構(gòu)的缺點(diǎn),人們提出了很多改善的結(jié)構(gòu),,其中有并行的FIFO,、樹型FIFO、折疊型的FIFO[2],、環(huán)型結(jié)構(gòu)的FIFO[1],。在這些結(jié)構(gòu)中,由于環(huán)型的FIFO結(jié)構(gòu)設(shè)計(jì)相對(duì)容易而被廣泛采用,。本文實(shí)現(xiàn)的是基于環(huán)型的FIFO結(jié)構(gòu),,并在此基礎(chǔ)上進(jìn)行了節(jié)能型的設(shè)計(jì)改進(jìn),使之應(yīng)用于現(xiàn)代FPGA中,。環(huán)型結(jié)構(gòu)的FIFO是一種雙時(shí)鐘域的FIFO結(jié)構(gòu),,數(shù)據(jù)在不同的時(shí)鐘域中傳輸時(shí)需要考慮數(shù)據(jù)傳輸?shù)挠行裕瑫r(shí)必需克服數(shù)據(jù)在不同的時(shí)鐘中傳輸時(shí)而產(chǎn)生的亞穩(wěn)態(tài),。
1.2 亞穩(wěn)態(tài)
  數(shù)據(jù)在傳輸?shù)倪^程中,,接收寄存器收到變化的數(shù)據(jù)時(shí),,數(shù)據(jù)的改變發(fā)生在時(shí)鐘觸發(fā)沿而導(dǎo)致接受數(shù)據(jù)出現(xiàn)不穩(wěn)定的狀態(tài)[3]稱為亞穩(wěn)態(tài),如圖2上部分所示,。因此在異步時(shí)鐘之間進(jìn)行數(shù)據(jù)傳輸常常會(huì)用到同步單元,。單字節(jié)同步單元比較簡(jiǎn)單,而其常用的同步單元的結(jié)構(gòu)如圖2下半部分所示,。在多位的跨時(shí)鐘域數(shù)據(jù)傳輸中,,情況比單比特的數(shù)據(jù)傳輸復(fù)雜得多,由于存在多位數(shù)據(jù)同時(shí)變化的情況,,為了提高數(shù)據(jù)傳輸?shù)姆€(wěn)定性,,采用將二進(jìn)制碼轉(zhuǎn)化為格雷碼[2]后傳輸。

2 主體結(jié)構(gòu)與具體實(shí)現(xiàn)
  本文所采用的結(jié)構(gòu)是基于環(huán)型FIFO結(jié)構(gòu)[1],,其整體結(jié)構(gòu)如圖3所示,。在圖3中,總線用粗實(shí)線表示,,其中總線上的數(shù)字(如m)表示總線位寬,;控制線用虛線表示,,輸入,、輸出的信號(hào)(如FIFO空/滿信號(hào))用細(xì)的實(shí)線表示,箭頭表示輸入/出方向,。從圖3中可以清楚地看出,,整個(gè)異步FIFO的結(jié)構(gòu)由讀/寫控制模塊、讀/寫同步模塊,、讀/寫時(shí)鐘控制模塊以及雙口的RAM七個(gè)模塊組成,。由于采用模塊化的設(shè)計(jì)結(jié)構(gòu),以上的結(jié)構(gòu)并不局限于具體的應(yīng)用,,可以很容易設(shè)計(jì)成實(shí)際應(yīng)用需求的IP核,,而且容易升級(jí),相對(duì)于傳統(tǒng)的設(shè)計(jì),,增加的時(shí)鐘控制模塊能有效提高能效,。

?


2.1 FIFO空/滿信號(hào)的產(chǎn)生
  在異步FIFO的設(shè)計(jì)中,空/滿信號(hào)的產(chǎn)生是其主要的難點(diǎn),。當(dāng)寫入數(shù)據(jù)時(shí),,寫信號(hào)指針追上讀信號(hào)指針的情況,意味著FIFO滿的狀態(tài),。同理在讀出數(shù)據(jù)時(shí),,讀地址指針追上寫地址指針的情況,意味著FIFO為空狀態(tài),。以上的分析可以得出,,不能簡(jiǎn)單通過讀地址指針等于寫地址指針來判定FIFO的空/滿狀態(tài),。有效的解決方法在文獻(xiàn)[1]、文獻(xiàn)[2]中都被采用,。若FIFO的深度為N,,則其讀/寫地址指針的寬度應(yīng)為log2(N)位,讀/寫地址指針都增加一位,,變?yōu)閘og2(N)+1位后,,測(cè)試讀地址指針與寫地址指針,當(dāng)兩者相等時(shí),,F(xiàn)IFO即為空狀態(tài),。而當(dāng)FIFO讀地址指針與寫地址指針的最高有效位不同而其他有效位完全相同時(shí),即為FIFO滿狀態(tài),,這種循環(huán)的地址指針即是環(huán)型FIFO的由來,。在本文的設(shè)計(jì)中,空/滿信號(hào)不僅用于指示FIFO的狀態(tài),,還用于讀/寫時(shí)鐘的控制,,從而達(dá)到節(jié)能的目地。
2.2 讀控制模塊
  讀數(shù)據(jù)控制模塊主要功能是:根據(jù)數(shù)據(jù)的輸出及讀請(qǐng)求信號(hào)產(chǎn)生用于讀數(shù)據(jù)的控制信號(hào),、讀地址指針,、FIFO空(empty)信號(hào)以及用于控制寫時(shí)鐘Wr_full信號(hào)(其具體功用在2.3中介紹)。當(dāng)外部有數(shù)據(jù)讀出請(qǐng)求(Rd_req有效)且FIFO不為空時(shí),,使能FIFO的讀有效,,F(xiàn)IFO輸出數(shù)據(jù),輸出數(shù)據(jù)完成后讀地址指針加1,。其中空信號(hào)的產(chǎn)生采用2.1中的方法,,其內(nèi)部實(shí)現(xiàn)的具體框圖如圖4所示。


  在圖4中,,讀控制邏輯單元主要用于產(chǎn)生讀使能信號(hào),,依據(jù)讀請(qǐng)求信號(hào)和FIFO的空(empty)信號(hào)產(chǎn)生讀使能。當(dāng)有讀請(qǐng)求并且FIFO不為空時(shí),,讀使能有效,,同時(shí)使地址指針加1。讀地址計(jì)數(shù)器即是一個(gè)二進(jìn)制的計(jì)數(shù)器,,產(chǎn)生輸入雙口RAM的讀地址指針,。由于讀地址指針要傳輸?shù)綄懣刂颇K,而兩模塊處于不同的時(shí)鐘域,,為了使數(shù)據(jù)有效傳輸?shù)綄憰r(shí)鐘域,,采用先將讀地址指針表示的二進(jìn)制數(shù)轉(zhuǎn)化為格雷碼(具體實(shí)現(xiàn)參見文獻(xiàn)[2])后再傳輸。
2.2.1 同步模塊的實(shí)現(xiàn)
  由于實(shí)際應(yīng)用于系統(tǒng)中時(shí)鐘頻率較高,為了達(dá)到穩(wěn)定,,選擇了流水線的同步器單元,。在圖2的基礎(chǔ)上增加寄存器的位寬。為了使系統(tǒng)的穩(wěn)定性增強(qiáng),,采用三級(jí)流水線的結(jié)構(gòu),,當(dāng)然,也可以根據(jù)自己實(shí)際的需要而增減流水線級(jí)數(shù),。
2.2.2 格雷碼二進(jìn)制碼轉(zhuǎn)化
  為了應(yīng)用環(huán)型指針區(qū)別FIFO的空/滿信號(hào),,需要將傳輸過來用格雷碼表示的寫地址指針轉(zhuǎn)化為二進(jìn)制碼,格雷碼到二進(jìn)制碼轉(zhuǎn)化的公式如式(1),。設(shè)格雷碼表示的數(shù)據(jù)與二進(jìn)制碼有n位,,格雷碼表示為:gn-1gn-2…g0,相應(yīng)二進(jìn)制碼表示為:bn-1bn-2…b0,。轉(zhuǎn)化公式為:
     
  式(1)中所示的加代表無進(jìn)位的加法,,實(shí)現(xiàn)中使用“異或門”即可。但是,,完全按照式(1)來實(shí)現(xiàn)存在缺點(diǎn),,從式(1)中可以看出,其為一個(gè)遞推式,,最先計(jì)算出最高有效位bn-1,,最后計(jì)算出b0,一次轉(zhuǎn)化完成需要經(jīng)過n-1個(gè)“異或門”的延時(shí),,當(dāng)位數(shù)據(jù)位增加時(shí),,這將成為系統(tǒng)的運(yùn)行瓶頸,。在高速系統(tǒng)中表現(xiàn)的特別突出,。提出一種改進(jìn)的轉(zhuǎn)化單元。將式(1)轉(zhuǎn)化為式(2),,如下所示:
  
  可以看出,,一次轉(zhuǎn)化只需要一個(gè)“異或門”的延時(shí)即可完成,但這種結(jié)構(gòu)不適合FPGA中實(shí)現(xiàn),。在基本的門電路中,,當(dāng)門電路的扇入數(shù)據(jù)達(dá)到或者超過5時(shí),延時(shí)將變得很大,,而且大的扇入門電路的實(shí)現(xiàn)變得不現(xiàn)實(shí)且相當(dāng)耗資源,。將“異或門”的扇入數(shù)據(jù)限制在4以內(nèi)(包括4個(gè))。從“異或門”的規(guī)律中可以得出,,任何變量與邏輯“0”異或,,是其本身,而與“1”異或,,是其相反變量,。將待轉(zhuǎn)化的數(shù)據(jù)分為四位一組,,第一組為(b3…b0),較高的位(如b7…b4)依此細(xì)分下去……最高的4位采用如式(2)中進(jìn)行轉(zhuǎn)化,,較低的4位如(bn-4…bn-7)采用如圖5的方式轉(zhuǎn)化……這種方式的轉(zhuǎn)化器相對(duì)于式(1)實(shí)現(xiàn)來說,,在不增加門電路資源消耗的基礎(chǔ)上,能明顯提高轉(zhuǎn)化速度,。

?


2.2.3 相等判決單元
  相等判決單元是一個(gè)二進(jìn)制數(shù)比較器,,當(dāng)且僅當(dāng)讀/寫地址指針完全相等時(shí),給出空信號(hào)有效,,否則空信號(hào)無效,。
2.2.4 Rd_full信號(hào)產(chǎn)生單元
  Rd_full信號(hào)產(chǎn)生單元的結(jié)構(gòu)與FIFO滿(full)產(chǎn)生單元的結(jié)構(gòu)相同,Rd_full信號(hào)是full信號(hào)在讀時(shí)鐘域中的一個(gè)復(fù)制信號(hào),,用于寫時(shí)鐘控制,。在時(shí)鐘控制單元將詳細(xì)介紹其功能。
2.3 寫控制模塊
  寫控制模塊的實(shí)現(xiàn)與讀模塊相似,,由與讀模塊相應(yīng)的單元組成,。只是FIFO滿(full)時(shí)的產(chǎn)生邏輯為當(dāng)讀地址指針與寫地址指針最高有效位不同,而其他位均完全相同時(shí),,滿信號(hào)有效,。另一不同點(diǎn)體現(xiàn)在Wr_empty信號(hào)的產(chǎn)生上,Wr_empty只是FIFO為空(empty)信號(hào)時(shí)在寫時(shí)鐘域中的一個(gè)復(fù)制信號(hào),,用于讀時(shí)鐘的控制,。
2.4 讀時(shí)鐘控制模塊
  從以上的介紹中可以看出,各個(gè)模塊的工作統(tǒng)一由時(shí)鐘來管理,,在高速的數(shù)字系統(tǒng)中,,高速也將帶來高的能耗。筆者從實(shí)際工作中觀察發(fā)現(xiàn),,F(xiàn)IFO的工作是需要調(diào)配的,,只有在DSP需要數(shù)據(jù)時(shí),才需要FIFO處于工作狀態(tài),,而在DSP兩次需求之間,,大量的時(shí)間中FIFO是處于空閑狀態(tài)(這樣的情形也符合大多數(shù)的實(shí)際應(yīng)用)??梢猿浞掷眠@段空閑,,讓FIFO既能在正常工作時(shí)高速而穩(wěn)定地工作,同時(shí)在空閑時(shí)能盡可能降低能耗,。時(shí)鐘控制模塊即能達(dá)到此目的,。在空閑時(shí),將FIFO的讀/寫時(shí)鐘停止,使空閑的模塊處于“休眠”狀態(tài),。但在正常工作時(shí),,時(shí)鐘能照常管理各個(gè)模塊。采用Virtex-4芯片內(nèi)部自帶的時(shí)鐘管理模塊(Digital Clock Manager-DCM)[4]來實(shí)現(xiàn),。Virtex-4芯片中的DCM提供強(qiáng)大的時(shí)鐘管理功能,,包括:時(shí)鐘去抖動(dòng)、頻率合成,、移相及動(dòng)態(tài)時(shí)鐘配置,。
  應(yīng)用中,主要利用其時(shí)鐘去抖動(dòng)和動(dòng)態(tài)時(shí)鐘配置兩項(xiàng)功能,。在讀時(shí)鐘控制模塊中,,當(dāng)檢測(cè)到FIFO為空且Wr_empty同時(shí)有效時(shí)(如同時(shí)為高電平),通過DCM即可暫停讀時(shí)鐘,。此時(shí)FIFO模塊中的所有讀組件將會(huì)停止運(yùn)行,。此時(shí)若寫入數(shù)據(jù),由于Wr_empty處在寫時(shí)鐘域中,,寫時(shí)鐘的控制下,,Wr_empty將不會(huì)有效(變?yōu)榈碗娖剑藭r(shí)通過DCM喚醒讀時(shí)鐘,,可以正常讀出數(shù)據(jù),,同理可以控制寫時(shí)鐘的暫停與恢復(fù)。按照以上的原理設(shè)計(jì),,用Xilinx ISE 10.1仿真后,,得到的仿真波形如圖6。clk_in為輸入時(shí)鐘,,clk_out為經(jīng)過控制的時(shí)鐘,,而clk0_out是不經(jīng)過控制的輸出時(shí)鐘。從圖中可以看出,,當(dāng)使能信號(hào)為有效(低電平)時(shí),,clk_out沒有時(shí)鐘輸出,,而當(dāng)使能信號(hào)無效時(shí),,clk_out時(shí)鐘正常恢復(fù),??梢酝ㄟ^將Wr_empty與empty經(jīng)過“與非”后接到讀時(shí)鐘clk_en端即可。

?


2.5 寫時(shí)鐘控制模塊
  寫時(shí)鐘控制模塊與讀時(shí)鐘控制模塊原理完全相同,,只是輸入控制控制信號(hào)為Rd_full與full信號(hào),。
2.6 雙口RAM
  雙口RAM的實(shí)現(xiàn)采用Xilinx的Virtex-4系列FPGA內(nèi)部現(xiàn)有的資源,通過利用Virtex-4系列芯片中豐富的Block RAM資源,利用原語例化即可生成適合于實(shí)際應(yīng)用需求的雙口RAM,,參見文獻(xiàn)[4],。
3 整體仿真結(jié)果
  本方案的實(shí)現(xiàn)在Xilinx的ISE10.1上綜合,仿真后得到如圖7所示整體仿真波形,。仿真中,,為了便于查看結(jié)果,將實(shí)際受到控制的讀/寫模塊的時(shí)鐘引出,,分別標(biāo)記為o_wr_clk,o_rd_clk,。由于截圖的限制,只能在圖中顯示FIFO滿的情況,??盏那闆r類似。

?


參考文獻(xiàn)
[1] CLIFFORD E.Cummings.Simulation and Synthesis Techniques for Asynchronous.Sunburst Design,,Inc 2002.
[2] RYNA W A,,YU Zhi Yi,MICHAEL J M,,et al.A scalable?dual-clock FIFO for data transfers beteween arbitray and?haltable clock domains.IEEE,,2007,15(10).
[3] MICHAEL D C.Advanced-Digital design with the verilog? HDL.publishing house of electronics industry,,2004.

[4] Xilinx.Virtex-4 User Guide(UG70 V2.0).www.xilinx.com.2007,,1.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。