文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.183185
中文引用格式: 牛博,,趙宏亮. 一種高可靠性高速可編程異步FIFO的設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2019,,45(7):36-39,,43.
英文引用格式: Niu Bo,Zhao Hongliang. Design of high reliability and high speed programmable asynchronous FIFO[J]. Application of Electronic Technique,,2019,,45(7):36-39,43.
0 引言
在現(xiàn)代的大規(guī)模ASIC設(shè)計(jì)中,常常涉及多時(shí)鐘系統(tǒng)控制方式,,這樣就會(huì)產(chǎn)生不同時(shí)鐘域數(shù)據(jù)傳輸?shù)膯?wèn)題,。比較好的解決方案就是使用異步FIFO(First In First Out)來(lái)實(shí)現(xiàn)不同時(shí)鐘域數(shù)據(jù)傳輸?shù)木彌_[1-2]。這是因?yàn)?,異步FIFO只按指針的遞增順序?qū)懭霐?shù)據(jù),,并以同樣的順序讀出數(shù)據(jù),不需要外部讀寫地址線,,使用起來(lái)非常簡(jiǎn)單,,這樣既可以使相異時(shí)鐘域數(shù)據(jù)傳輸?shù)臅r(shí)序要求變得寬松,也提高了它們之間的傳輸效率,。因此,,異步FIFO在網(wǎng)絡(luò)通信和數(shù)字信息處理等領(lǐng)域都有著廣泛的應(yīng)用[3-6]。而高性能異步FIFO的研究也就成為了大規(guī)模集成電路設(shè)計(jì)領(lǐng)域的研究熱點(diǎn)之一,,并取得了很多研究成果[7-10],。
例如,文獻(xiàn)[7]中,,采取了比較同步指針的方法來(lái)降低亞穩(wěn)態(tài)出現(xiàn)的可能,,這樣做確實(shí)保證了比較時(shí)兩個(gè)指針都是同步的,但是在進(jìn)行大容量FIFO設(shè)計(jì)時(shí),,讀,、寫指針的位數(shù)很多,同步模塊會(huì)使用大量的寄存器,,這樣會(huì)大大增加設(shè)計(jì)成本,,降低工作效率,。而且該論文提到的設(shè)計(jì)方案在進(jìn)行空滿判斷時(shí),增加了一個(gè)地址位來(lái)標(biāo)識(shí)讀寫指針的相對(duì)位置,,這樣做不僅占用了過(guò)多的邏輯資源,,還降低了FIFO控制系統(tǒng)的可移植性。文獻(xiàn)[8]中提到了一種通過(guò)判斷格雷碼前兩位來(lái)劃分存儲(chǔ)區(qū)間,,進(jìn)而判斷空滿的方法,,但是由于這種判斷區(qū)間的劃分方式是通過(guò)硬件的形式實(shí)現(xiàn)的,可編程性不好,。本設(shè)計(jì)為了滿足一款國(guó)產(chǎn)FPGA的芯片設(shè)計(jì)需求,,在保證高可靠性的前提下,進(jìn)一步增強(qiáng)了異步FIFO的可編程性,,提出了一種基于格雷碼的,、可以對(duì)近空滿示警閾值進(jìn)行編程的異步FIFO,并且結(jié)合異步指針比較的方法提出了一種新的空滿判斷標(biāo)準(zhǔn),,進(jìn)而提高了電路的工作速度和效率,,最終設(shè)計(jì)出了一種具有高可靠性、高速及可編程性的高性能異步FIFO電路結(jié)構(gòu),。
1 所提出的異步FIFO系統(tǒng)結(jié)構(gòu)
所提出的異步FIFO設(shè)計(jì)思路是,,在傳統(tǒng)FIFO模塊的基礎(chǔ)上,,通過(guò)對(duì)電路結(jié)構(gòu)和狀態(tài)判斷依據(jù)的改進(jìn)和優(yōu)化,,實(shí)現(xiàn)可靠性、可編程性和速度上的突破,。傳統(tǒng)的FIFO主要具有讀,、寫和空滿判斷的功能,它不需要外部讀寫地址線,,這樣使用起來(lái)非常簡(jiǎn)單,,因此它只能順序?qū)懭霐?shù)據(jù),順序地讀出數(shù)據(jù),,不能像普通存儲(chǔ)器那樣可以由地址線決定讀取或?qū)懭肽硞€(gè)指定的地址,。本設(shè)計(jì)中增加了近空滿示警功能,使用者可以對(duì)FIFO進(jìn)行編程設(shè)置示警閾值,,并且增加了近空和近滿指示位來(lái)提示FIFO的狀態(tài),,增加了FIFO的可編程性。FIFO模塊的系統(tǒng)結(jié)構(gòu)圖如圖1所示,。
整個(gè)FIFO可以劃分成四種模塊:存儲(chǔ)模塊,、指針產(chǎn)生模塊、指針比較模塊和標(biāo)志位產(chǎn)生模塊,。r_clk為讀時(shí)鐘,;w_clk為寫時(shí)鐘,;data_in為寫入數(shù)據(jù);data_out為讀出數(shù)據(jù),;ale_num為近空示警閾值,;alf_num為近滿示警閾值;r_ptr為讀指針,;w_ptr為寫指針,;al_empty為近空標(biāo)志;al_full為近滿標(biāo)志,;empty為空標(biāo)志,;full為滿標(biāo)志;alr_ptr為近空指針,;alw_ptr為近滿指針,。
雙端口SRAM具有兩個(gè)完全獨(dú)立的讀、寫端口,,使用時(shí)可以選定一個(gè)端口寫入data_in,,另一個(gè)端口讀出data_out,這樣讀操作和寫操作互相獨(dú)立,,比較適合用來(lái)實(shí)現(xiàn)FIFO的功能,。在圖1中可以看出,一個(gè)FIFO可以分成讀時(shí)鐘域和寫時(shí)鐘域兩個(gè)完全相互獨(dú)立的時(shí)鐘域,。寫指針模塊根據(jù)w_clk產(chǎn)生w_ptr并且在w_ptr上疊加alf_num產(chǎn)生alw_ptr,,w_ptr一方面會(huì)控制存儲(chǔ)模塊將data_in寫入,寫入的數(shù)據(jù)將由r_ptr控制讀出,,另一方面w_ptr和alw_ptr進(jìn)入指針比較模塊與讀指針產(chǎn)生的r_ptr和alr_ptr進(jìn)行比較,,比較的結(jié)果進(jìn)入標(biāo)志位產(chǎn)生模塊進(jìn)行判斷,產(chǎn)生空,、滿,、近空和近滿標(biāo)志位,如果FIFO讀空,,則停止e_ptr,,如果寫滿,則停止w_ptr,。
在以上的系統(tǒng)設(shè)計(jì)中不難看出,,系統(tǒng)指針間互相比較過(guò)程中數(shù)據(jù)的可靠性和空滿判斷過(guò)程中系統(tǒng)的精確度制約著系統(tǒng)性能的提升。因此,,在第二節(jié)和第三節(jié)中,,將分別詳細(xì)闡述系統(tǒng)指針比較和空滿判斷的設(shè)計(jì)方案。
2 系統(tǒng)指針比較的設(shè)計(jì)方案
在數(shù)據(jù)的傳輸過(guò)程中,,接收寄存器收到變化的數(shù)據(jù)時(shí),,如果數(shù)據(jù)的改變發(fā)生在時(shí)鐘觸發(fā)沿,,那么會(huì)導(dǎo)致接受數(shù)據(jù)出現(xiàn)不穩(wěn)定的狀態(tài),這種狀態(tài)叫做亞穩(wěn)態(tài),。進(jìn)入亞穩(wěn)態(tài)時(shí),,既無(wú)法預(yù)測(cè)該單元的輸出電平,也無(wú)法預(yù)測(cè)何時(shí)輸出才能穩(wěn)定在某個(gè)正確的電平上,。在這個(gè)穩(wěn)定期間,,將會(huì)輸出一些中間級(jí)電平,或者可能處于振蕩狀態(tài),,并且這種無(wú)用的輸出電平可以沿信號(hào)通道級(jí)聯(lián)式傳播下去,。亞穩(wěn)態(tài)的發(fā)生會(huì)使得FIFO出現(xiàn)錯(cuò)誤,讀,、寫時(shí)鐘采樣的地址指針會(huì)與真實(shí)的值之間不同,,這就導(dǎo)致寫入或讀出的地址錯(cuò)誤。亞穩(wěn)態(tài)無(wú)法徹底消除,,只能想辦法將其發(fā)生的概率降到最低,。傳統(tǒng)的FIFO電路中為了解決亞穩(wěn)態(tài)問(wèn)題采取的方法是使用指針同步模塊,經(jīng)過(guò)同步的指針之間進(jìn)行比較就不存在亞穩(wěn)態(tài)的問(wèn)題了,。指針同步模塊一般采用圖2中所示的結(jié)構(gòu),。假設(shè)clk1與clk2為異步時(shí)鐘,當(dāng)data1的改變發(fā)生在B2的觸發(fā)沿處時(shí),,data2就有可能出現(xiàn)一個(gè)亞穩(wěn)態(tài),,但是,這時(shí)B3捕獲和發(fā)送的是上一個(gè)沒(méi)有出現(xiàn)亞穩(wěn)態(tài)時(shí)的數(shù)據(jù),,在下一個(gè)clk2時(shí)鐘觸發(fā)沿到來(lái)時(shí),,data2很可能已經(jīng)趨于穩(wěn)定,變?yōu)榇_定值0或者1,,這樣的話B3就是對(duì)一個(gè)確定值進(jìn)行捕獲。當(dāng)然,,data2也有可能無(wú)法在一個(gè)時(shí)鐘周期中穩(wěn)定,,但是data3出現(xiàn)亞穩(wěn)態(tài)的概率被極大地降低了。
使用比較同步指針的方法雖然可靠性高,,但是當(dāng)FIFO的數(shù)據(jù)深度很大時(shí),,指針一般都有很多位,這就需要對(duì)每一位都進(jìn)行同步,,極大地增加了寄存器的使用數(shù)量,,增加了設(shè)計(jì)成本。
針對(duì)這種情況可以考慮使用格雷碼指針,。格雷碼在相鄰的兩個(gè)碼元之間只由一位變換(二進(jìn)制碼在很多情況下是很多碼元在同時(shí)變化),。這就會(huì)避免指針變動(dòng)的時(shí)候發(fā)生亞穩(wěn)態(tài)現(xiàn)象,。在寫地址和讀地址傳輸前,為了提高數(shù)據(jù)的穩(wěn)定性,,采用格雷碼替換二進(jìn)制碼進(jìn)行計(jì)數(shù),。這樣的話就可以不使用指針同步模塊,采取比較異步指針的方法,,將兩個(gè)異步指針直接進(jìn)行比較,,然后把比較后得出的標(biāo)志位同步到想要的時(shí)鐘域即可。本設(shè)計(jì)中指針產(chǎn)生模塊的原理圖如圖3所示,。
二進(jìn)制指針產(chǎn)生模塊的基本原理就是一個(gè)二進(jìn)制加法計(jì)數(shù)器,,每有一個(gè)時(shí)鐘上升沿來(lái)臨,它都會(huì)在之前輸出數(shù)值的基礎(chǔ)上加一,,這樣可以產(chǎn)生一個(gè)逐步累加的二進(jìn)制指針,,這個(gè)二進(jìn)制指針進(jìn)入半加器與近空滿示警閾值相加產(chǎn)生一個(gè)用于近空滿比較二進(jìn)制指針,最后,,這兩種指針都會(huì)被格雷碼產(chǎn)生模塊轉(zhuǎn)化為格雷碼指針輸出,。設(shè)計(jì)中使用格雷碼是為了降低亞穩(wěn)態(tài)出現(xiàn)的概率,節(jié)省邏輯開銷,,降低設(shè)計(jì)成本,;對(duì)指針類型進(jìn)行擴(kuò)充,增加了近空滿示警閾值和近空滿指針,,是為了提升FIFO的可編程性,。
3 空滿判斷的設(shè)計(jì)方案
由于FIFO的功能需要一邊讀一邊寫,因此實(shí)際上FIFO的容量并不等于同SRAM存儲(chǔ)器陣列的實(shí)際容量,,而是取決于讀指針和寫指針的相對(duì)速度,。FIFO模塊正確使用的初始狀態(tài)一定是寫指針在讀指針之前,這樣可以保證讀出的內(nèi)容都是經(jīng)過(guò)寫入的數(shù)據(jù),,經(jīng)過(guò)一段時(shí)間的讀寫后,,如果由于讀指針追趕上了寫指針而致使讀寫指針相同,說(shuō)明存儲(chǔ)其中的數(shù)據(jù)被讀空,,再進(jìn)行下去會(huì)讀出錯(cuò)誤的數(shù)據(jù),;如果是寫指針追趕上了讀指針,則說(shuō)明存儲(chǔ)器被寫滿,,再進(jìn)行下去則會(huì)使未讀出的數(shù)據(jù)被重寫,。以上兩種情況是一定要避免的,所以如何判斷空滿狀態(tài),,關(guān)系到FIFO的精確度和可靠性,。
傳統(tǒng)的做法是增加一位地址位來(lái)表示讀寫指針的相對(duì)位置,由于這種方法增加了一位地址位,使FIFO地址位的數(shù)量與SRAM地址位數(shù)量不同,,降低了FIFO控制器的可移植性,,而且增加的這一位地址位實(shí)際上增加了不必要的邏輯開銷??紤]到設(shè)計(jì)中提到的FIFO增添了近空滿示警標(biāo)志位,,所以可以借助近示警標(biāo)志位來(lái)產(chǎn)生空滿標(biāo)志位。其狀態(tài)判斷原理如圖4所示,。
近空滿示警標(biāo)志位產(chǎn)生的原理是,,將讀寫指針加上一個(gè)二進(jìn)制數(shù)作為示警的閾值,這樣就有了四種不同的指針,,分別為讀,、寫指針和近空滿讀寫指針,使用這四種指針相互比較就能得出想要的結(jié)果,。在FIFO使用過(guò)程中,,如果近空滿讀指針等于寫指針,說(shuō)明讀指針的速度比寫指針?biāo)俣瓤?,近空滿示警信號(hào)指示FIFO近空,,這時(shí)只需要注意FIFO被讀空,一旦讀寫指針相等就可以判斷FIFO讀空,;如果近空滿寫指針等于讀指針,,則說(shuō)明寫指針的速度快,應(yīng)指示近滿,,F(xiàn)IFO只存在寫滿的風(fēng)險(xiǎn),,一旦讀寫指針相等即判斷FIFO寫滿。這種空滿判斷方法借助了示警標(biāo)志位,,不需要增加額外的指針位,,提高了邏輯利用率和FIFO控制器的可移植性,而且這樣做不需要對(duì)方向位進(jìn)行運(yùn)算,,提升了運(yùn)行速度,。
4 仿真驗(yàn)證
本設(shè)計(jì)基于UMC 28 nm標(biāo)準(zhǔn)CMOS工藝,采用全定制方法進(jìn)行電路設(shè)計(jì),。使用Hspice軟件進(jìn)行了電路仿真驗(yàn)證,。仿真結(jié)果表明,提出的異步FIFO在1 V的標(biāo)準(zhǔn)電壓下,,最高工作頻率為666.6 MHz,功耗為7.1 mW,。具體仿真結(jié)果如圖5所示,。
對(duì)近空、空標(biāo)志位進(jìn)行驗(yàn)證時(shí),使用的讀時(shí)鐘周期為1.5 ns(666.6 MHz),,寫時(shí)鐘周期為2.5 ns(400 MHz),,近空示警閾值設(shè)置為17,一共用到了9位二進(jìn)制地址,,按照格雷碼的規(guī)律變化,。仿真結(jié)果如圖5(a)所示。圖中r_ptr為讀指針信號(hào),,w_ptr為寫指針信號(hào),,均以3位十六進(jìn)制數(shù)的形式表示;empty為讀空信號(hào)(高有效),;al_empty為近空信號(hào)(低有效),。可以看出,,當(dāng)讀寫指針相等時(shí)讀空信號(hào)有效,,并且近空信號(hào)提前17個(gè)讀周期示警FIFO快要讀空。
對(duì)近滿,、滿標(biāo)志位進(jìn)行驗(yàn)證時(shí),,使用的讀時(shí)鐘周期為2.5 ns(400 MHz),寫時(shí)鐘周期為1.5 ns(666.6 MHz),,近空示警閾值設(shè)置為15,,一共用到了9位二進(jìn)制地址,按照格雷碼的規(guī)律變化,。仿真結(jié)果如圖5(b)所示,。圖中w_ptr為寫指針信號(hào),r_ptr為讀指針信號(hào),,均以3位十六進(jìn)制數(shù)的形式表示,;full為寫滿信號(hào)(高有效);al_full為近滿信號(hào)(低有效),??梢钥闯觯?dāng)讀寫指針相等時(shí)寫滿信號(hào)有效,,并且近滿信號(hào)提前15個(gè)寫周期示警FIFO快要讀空,。
5 結(jié)論
在傳統(tǒng)FIFO結(jié)構(gòu)的基礎(chǔ)上,通過(guò)對(duì)電路結(jié)構(gòu)和狀態(tài)判斷依據(jù)的改進(jìn)和優(yōu)化,,提出了一種高性能異步FIFO電路結(jié)構(gòu),。基于UMC 28 nm標(biāo)準(zhǔn)CMOS工藝進(jìn)行電路設(shè)計(jì),、仿真與驗(yàn)證,。仿真結(jié)果表明,,提出的異步FIFO結(jié)構(gòu)具有高可靠性、高速及可編程性等優(yōu)點(diǎn),,能夠滿足國(guó)產(chǎn)FPGA芯片研發(fā)的系統(tǒng)需求,。
參考文獻(xiàn)
[1] 金大超,冷建偉.異步時(shí)鐘域信號(hào)同步的實(shí)現(xiàn)[J].天津理工大學(xué)學(xué)報(bào),,2017,,33(3):40-44.
[2] 劉杰,賽景波.基于DDR2 SDRAM乒乓雙緩沖的高速數(shù)據(jù)收發(fā)系統(tǒng)設(shè)計(jì)[J].電子器件,,2015,,38(3):650-654.
[3] 莊洪毅.一種基于FX2與FPGA聯(lián)用實(shí)現(xiàn)USB2.0通訊協(xié)議的方法[J].電子測(cè)量技術(shù),2017,,40(4):78-81.
[4] 馮國(guó)富,,馬玉齊,陳明,,等.一種面向船聯(lián)網(wǎng)的“北斗”異步FIFO多通道模型[J].微電子學(xué)與計(jì)算機(jī),,2017,34(2):1-5.
[5] 吳修英,,黃嵩人.浮點(diǎn)型DSP中異步FIFO的研究與設(shè)計(jì)[J].電子世界,,2018,1(69):145-146.
[6] 倪露,,鄒學(xué)玉.LZW的異步FIFO輸入緩沖設(shè)計(jì)[J].電子測(cè)量技術(shù),,2015,38(4):19-23.
[7] 司嵐山,,吳海宏,,王勇,等.一種大容量異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué),,2013,,43(3):405-408.
[8] 李賽,蔣林.OTN中異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)[J].光通信研究,,2015,,191(5):55-58.
[9] 王齊雙,黃震春,,蒲海峰.基于FPGA的異步FIFO的設(shè)計(jì)方案及性能[J].彈箭與制導(dǎo)學(xué)報(bào),,2014,34(6):185-189.
[10] 肖靜嫻,,戴亞文.基于FPGA的異步FIFO緩存設(shè)計(jì)[J].電子測(cè)量技術(shù),,2009,32(11):92-94.
作者信息:
牛 博,,趙宏亮
(遼寧大學(xué) 物理學(xué)院,,遼寧 沈陽(yáng)110036)