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