新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一種節(jié)能型可升級異步FIFO的FPGA實現(xiàn)

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

作者: 時間:2014-11-25 來源:網(wǎng)絡(luò) 收藏

  2.1 空/滿信號的產(chǎn)生

本文引用地址:http://butianyuan.cn/article/265945.htm

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

  2.2 讀控制模塊

  讀數(shù)據(jù)控制模塊主要功能是:根據(jù)數(shù)據(jù)的輸出及讀請求信號產(chǎn)生用于讀數(shù)據(jù)的控制信號、讀地址指針、FIFO空(empty)信號以及用于控制寫時鐘Wr_full信號(其具體功用在2.3中介紹)。當(dāng)外部有數(shù)據(jù)讀出請求(Rd_req有效)且FIFO不為空時,使能FIFO的讀有效,F(xiàn)IFO輸出數(shù)據(jù),輸出數(shù)據(jù)完成后讀地址指針加1。其中空信號的產(chǎn)生采用2.1中的方法,其內(nèi)部實現(xiàn)的具體框圖如圖4所示。

  

 

  在圖4中,讀控制邏輯單元主要用于產(chǎn)生讀使能信號,依據(jù)讀請求信號和FIFO的空(empty)信號產(chǎn)生讀使能。當(dāng)有讀請求并且FIFO不為空時,讀使能有效,同時使地址指針加1。讀地址計數(shù)器即是一個二進(jìn)制的計數(shù)器,產(chǎn)生輸入雙口RAM的讀地址指針。由于讀地址指針要傳輸?shù)綄懣刂颇K,而兩模塊處于不同的時鐘域,為了使數(shù)據(jù)有效傳輸?shù)綄憰r鐘域,采用先將讀地址指針表示的二進(jìn)制數(shù)轉(zhuǎn)化為格雷碼(具體實現(xiàn)參見文獻(xiàn)[2])后再傳輸。

  2.2.1 同步模塊的實現(xiàn)

  由于實際應(yīng)用于系統(tǒng)中時鐘頻率較高,為了達(dá)到穩(wěn)定,選擇了流水線的同步器單元。在圖2的基礎(chǔ)上增加寄存器的位寬。為了使系統(tǒng)的穩(wěn)定性增強(qiáng),采用三級流水線的結(jié)構(gòu),當(dāng)然,也可以根據(jù)自己實際的需要而增減流水線級數(shù)。

  2.2.2 格雷碼二進(jìn)制碼轉(zhuǎn)化

  為了應(yīng)用環(huán)型指針區(qū)別FIFO的空/滿信號,需要將傳輸過來用格雷碼表示的寫地址指針轉(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)位的加法,實現(xiàn)中使用“異或門”即可。但是,完全按照式(1)來實現(xiàn)存在缺點(diǎn),從式(1)中可以看出,其為一個遞推式,最先計算出最高有效位bn-1,最后計算出b0,一次轉(zhuǎn)化完成需要經(jīng)過n-1個“異或門”的延時,當(dāng)位數(shù)據(jù)位增加時,這將成為系統(tǒng)的運(yùn)行瓶頸。在高速系統(tǒng)中表現(xiàn)的特別突出。提出一種改進(jìn)的轉(zhuǎn)化單元。將式(1)轉(zhuǎn)化為式(2),如下所示:

  

 

  可以看出,一次轉(zhuǎn)化只需要一個“異或門”的延時即可完成,但這種結(jié)構(gòu)不適合中實現(xiàn)。在基本的門電路中,當(dāng)門電路的扇入數(shù)據(jù)達(dá)到或者超過5時,延時將變得很大,而且大的扇入門電路的實現(xiàn)變得不現(xiàn)實且相當(dāng)耗資源。將“異或門”的扇入數(shù)據(jù)限制在4以內(nèi)(包括4個)。從“異或門”的規(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)化器相對于式(1)實現(xiàn)來說,在不增加門電路資源消耗的基礎(chǔ)上,能明顯提高轉(zhuǎn)化速度。|

  

 

  2.2.3 相等判決單元

  相等判決單元是一個二進(jìn)制數(shù)比較器,當(dāng)且僅當(dāng)讀/寫地址指針完全相等時,給出空信號有效,否則空信號無效。

  2.2.4 Rd_full信號產(chǎn)生單元

  Rd_full信號產(chǎn)生單元的結(jié)構(gòu)與FIFO滿(full)產(chǎn)生單元的結(jié)構(gòu)相同,Rd_full信號是full信號在讀時鐘域中的一個復(fù)制信號,用于寫時鐘控制。在時鐘控制單元將詳細(xì)介紹其功能。

  2.3 寫控制模塊

  寫控制模塊的實現(xiàn)與讀模塊相似,由與讀模塊相應(yīng)的單元組成。只是FIFO滿(full)時的產(chǎn)生邏輯為當(dāng)讀地址指針與寫地址指針最高有效位不同,而其他位均完全相同時,滿信號有效。另一不同點(diǎn)體現(xiàn)在Wr_empty信號的產(chǎn)生上,Wr_empty只是FIFO為空(empty)信號時在寫時鐘域中的一個復(fù)制信號,用于讀時鐘的控制。

  2.4 讀時鐘控制模塊

  從以上的介紹中可以看出,各個模塊的工作統(tǒng)一由時鐘來管理,在高速的數(shù)字系統(tǒng)中,高速也將帶來高的能耗。筆者從實際工作中觀察發(fā)現(xiàn),F(xiàn)IFO的工作是需要調(diào)配的,只有在DSP需要數(shù)據(jù)時,才需要FIFO處于工作狀態(tài),而在DSP兩次需求之間,大量的時間中FIFO是處于空閑狀態(tài)(這樣的情形也符合大多數(shù)的實際應(yīng)用)。可以充分利用這段空閑,讓FIFO既能在正常工作時高速而穩(wěn)定地工作,同時在空閑時能盡可能降低能耗。時鐘控制模塊即能達(dá)到此目的。在空閑時,將FIFO的讀/寫時鐘停止,使空閑的模塊處于“休眠”狀態(tài)。但在正常工作時,時鐘能照常管理各個模塊。采用Virtex-4芯片內(nèi)部自帶的時鐘管理模塊(Digital Clock Manager-DCM)[4]來實現(xiàn)。Virtex-4芯片中的DCM提供強(qiáng)大的時鐘管理功能,包括:時鐘去抖動、頻率合成、移相及動態(tài)時鐘配置。

  應(yīng)用中,主要利用其時鐘去抖動和動態(tài)時鐘配置兩項功能。在讀時鐘控制模塊中,當(dāng)檢測到FIFO為空且Wr_empty同時有效時(如同時為高電平),通過DCM即可暫停讀時鐘。此時FIFO模塊中的所有讀組件將會停止運(yùn)行。此時若寫入數(shù)據(jù),由于Wr_empty處在寫時鐘域中,寫時鐘的控制下,Wr_empty將不會有效(變?yōu)榈碗娖?,此時通過DCM喚醒讀時鐘,可以正常讀出數(shù)據(jù),同理可以控制寫時鐘的暫停與恢復(fù)。按照以上的原理設(shè)計,用Xilinx ISE 10.1仿真后,得到的仿真波形如圖6。clk_in為輸入時鐘,clk_out為經(jīng)過控制的時鐘,而clk0_out是不經(jīng)過控制的輸出時鐘。從圖中可以看出,當(dāng)使能信號為有效(低電平)時,clk_out沒有時鐘輸出,而當(dāng)使能信號無效時,clk_out時鐘正常恢復(fù)。可以通過將Wr_empty與empty經(jīng)過“與非”后接到讀時鐘clk_en端即可。

  

 

  2.5 寫時鐘控制模塊

  寫時鐘控制模塊與讀時鐘控制模塊原理完全相同,只是輸入控制控制信號為Rd_full與full信號。

  2.6 雙口RAM

  雙口RAM的實現(xiàn)采用Xilinx的Virtex-4系列內(nèi)部現(xiàn)有的資源,通過利用Virtex-4系列芯片中豐富的Block RAM資源,利用原語例化即可生成適合于實際應(yīng)用需求的雙口RAM,參見文獻(xiàn)[4]。

  3 整體仿真結(jié)果

  本方案的實現(xiàn)在Xilinx的ISE10.1上綜合,仿真后得到如圖7所示整體仿真波形。仿真中,為了便于查看結(jié)果,將實際受到控制的讀/寫模塊的時鐘引出,分別標(biāo)記為o_wr_clk,o_rd_clk。由于截圖的限制,只能在圖中顯示FIFO滿的情況??盏那闆r類似。

  

fpga相關(guān)文章:fpga是什么



上一頁 1 2 下一頁

關(guān)鍵詞: FIFO FPGA

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉