《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > EDA與制造 > 設(shè)計應(yīng)用 > 一種基于ASIC的高速異步FIFO設(shè)計
一種基于ASIC的高速異步FIFO設(shè)計
來源:微型機與應(yīng)用2011年第22期
丁彬勇, 白雪飛, 黃 魯
(中國科學(xué)技術(shù)大學(xué) 電子科學(xué)與技術(shù)系 集成電路實驗室, 安徽 合肥 230027)
摘要: 分析了異步FIFO的結(jié)構(gòu)和關(guān)鍵技術(shù),,在與利用格雷碼作為異步FIFO指針編碼對比的基礎(chǔ)上,,提出了一種采用移位碼編碼方式的FIFO,不僅減小了亞穩(wěn)態(tài)出現(xiàn)的概率,,也簡化了電路結(jié)構(gòu),,降低了電路面積和功耗,在此基礎(chǔ)上也縮短了電路的關(guān)鍵路徑,,工作頻率明顯提升,。根據(jù)仿真和綜合結(jié)果顯示,本文設(shè)計的FIFO工作性能穩(wěn)定可靠,。
Abstract:
Key words :

摘  要: 分析了異步FIFO的結(jié)構(gòu)和關(guān)鍵技術(shù),,在與利用格雷碼作為異步FIFO指針編碼對比的基礎(chǔ)上,提出了一種采用移位碼編碼方式的FIFO,,不僅減小了亞穩(wěn)態(tài)出現(xiàn)的概率,,也簡化了電路結(jié)構(gòu),降低了電路面積和功耗,,在此基礎(chǔ)上也縮短了電路的關(guān)鍵路徑,,工作頻率明顯提升。根據(jù)仿真和綜合結(jié)果顯示,,本文設(shè)計的FIFO工作性能穩(wěn)定可靠,。
關(guān)鍵詞: 專用集成電路(ASIC);異步FIFO,;移位碼,;亞穩(wěn)態(tài)

    在現(xiàn)代集成電路設(shè)計中,隨著集成度的不斷提升,常常會遇到數(shù)據(jù)緩存與不同時鐘域之間數(shù)據(jù)傳遞的問題,,在不同系統(tǒng)間如不能設(shè)計出有效的接口單元,,將會產(chǎn)生數(shù)據(jù)傳輸過程中的復(fù)寫、丟失和無效數(shù)據(jù)的讀入等錯誤,,同時亞穩(wěn)態(tài)現(xiàn)象也會出現(xiàn)在不同時鐘域之間的數(shù)據(jù)傳遞過程中,。此時,,如何實現(xiàn)數(shù)據(jù)高速有效的傳輸并克服跨時鐘域間數(shù)據(jù)傳遞時的亞穩(wěn)態(tài)成為一個關(guān)鍵點問題。由于異步FIFO(First In First Out)能夠有效解決不同傳輸速度和不同時鐘域之間數(shù)據(jù)傳遞的問題,,異步FIFO在實際電路中得到廣泛的運用,。本文介紹一種基于ASIC的高速異步FIFO的設(shè)計和實現(xiàn)方案。
1 異步FIFO的基本功能和結(jié)構(gòu)
    異步FIFO指在不同時鐘域之間,,由一個時鐘域?qū)懭?,待寫入?shù)據(jù)穩(wěn)定之后,由另一個時鐘域讀出,。圖1為異步FIFO的基本結(jié)構(gòu)框圖,,F(xiàn)IFO的存儲單元采用雙端口RAM的解決方式,同步模塊SYNC完成異步讀寫時鐘域之間指針信號的同步過程,,將同步前后的指針?biāo)偷絯rfull,、rdempty模塊,產(chǎn)生wrfull,、rdempty信號,,從而構(gòu)成一個完整的FIFO。
    表1所示為圖1中各信號的具體意義,。

2 異步信號同步的關(guān)鍵問題
 在不同時鐘域之間傳遞的信號,,由于兩個時鐘之間沒有清楚的相位和頻率關(guān)系,很容易出現(xiàn)亞穩(wěn)態(tài)現(xiàn)象,。亞穩(wěn)態(tài)是指觸發(fā)器無法在某個規(guī)定的時間段內(nèi)達到一個可以確認的狀態(tài),。當(dāng)一個觸發(fā)器進入亞穩(wěn)態(tài)時,觸發(fā)器會輸出一些中間電平,,或者可能處于振蕩狀態(tài),。在數(shù)字電路中,如果將亞穩(wěn)態(tài)信號直接應(yīng)用于后續(xù)的組合邏輯,,將會產(chǎn)生難以預(yù)測的結(jié)果,。圖2所示為異步時鐘的亞穩(wěn)態(tài)現(xiàn)象,圖中CLK_A和CLK_B為異步時鐘,。
    亞穩(wěn)態(tài)是不可避免的,,但可以采用合適的方法將其降低到一個合適的低概率水平。 

    首先可以從讀寫地址指針的編碼入手,。若采用傳統(tǒng)的二進制計數(shù),,地址指針的每次增加,則有可能出現(xiàn)從全1到全0的所有位的同時跳變,,這種情況使得出現(xiàn)亞穩(wěn)態(tài)的概率大大增加。本文將采用一種特殊的編碼方式,,使得地址指針的每次增加只會出現(xiàn)一位改變,,從而減小亞穩(wěn)態(tài)發(fā)生的概率,。
    其次可以采用兩級鎖存的辦法。如圖3所示,,在一個信號進入另一個時鐘域前,,將該信號用兩級觸發(fā)器進行鎖存,即使第一級觸發(fā)器的輸出出現(xiàn)亞穩(wěn)態(tài),,經(jīng)過一個時鐘周期之后,,進入第二級觸發(fā)器的信號已經(jīng)穩(wěn)定到一個確定的電平,從而兩級鎖存的輸出可以有效減小亞穩(wěn)態(tài)發(fā)生的概率,。

3 異步FIFO的具體結(jié)構(gòu)
3.1 讀寫指針

 


    傳統(tǒng)的FIFO指針編碼采用格雷碼編碼的方式,。用格雷碼表示的地址指針,每次指針的增加,,地址指針只會有一位發(fā)生變化,,降低了指針信號跳變的次數(shù),從而有效減小了亞穩(wěn)態(tài)出現(xiàn)的概率[1],。
    與格雷碼編碼不同,,本文設(shè)計的FIFO,其指針編碼采用的是一種稱為移位碼的編碼方式,,移位碼的計數(shù)規(guī)則是每左移一位,,將最高位取反后移入最低位[2]。表2分別列出了二進制碼,、格雷碼與移位碼的對比情況,。
    由表2可知,移位碼每個相鄰的碼字之間只有一位不同,,該特性與格雷碼相似,,可以有效減小亞穩(wěn)態(tài)出現(xiàn)的概率;并且移位碼計數(shù)一個周期等同于二進制碼計數(shù)兩個周期,,這在之后產(chǎn)生空滿標(biāo)志的過程中將會有很好的應(yīng)用,。

    當(dāng)FIFO的深度為n時,二進制碼和格雷碼的碼字長度是log2(n),,而移位碼的碼字長度為n,,這也是移位碼的一個缺點,碼字長,,造成電路中需要更多的寄存器,,使得電路面積增大,不過由于計數(shù)和產(chǎn)生空滿標(biāo)志位電路的結(jié)構(gòu)更簡單,,使得面積又得以有效減小,。移位碼計數(shù)電路非常簡單, 采用移位碼編碼的寫指針計數(shù)電路如圖4所示,,其中wr_ptr為時鐘同步后的指針輸出,,wr_ptr_nxt為下一時鐘指針預(yù)輸出,,讀指針與之相似。

3.2 存儲單元
    FIFO的存儲器可以采用定制的雙端口RAM或DFF搭建而成,。由于本文設(shè)計的32×8的FIFO存儲容量不大,,所以都是采用DFF搭建而成。
    觀察表2的移位碼可以看出,,若將當(dāng)前移位碼與下一位移位碼異或,,即可快速得到用于存儲單元的尋址信號,以下為寫地址描述,,讀地址與之相似,。
    assign wr_addr =wr_ptr^wr_ptr_nxt;
3.3 空滿標(biāo)志位
    空滿標(biāo)志位的產(chǎn)生,首先要對讀寫指針進行同步,同步方法即采用前文所述的三級DFF進行不同時鐘域之間的同步。采用格雷碼編碼方式時,,在同步之前需將二進制地址指針轉(zhuǎn)化為格雷碼進行同步,,同步之后再轉(zhuǎn)化為二進制碼來產(chǎn)生空滿標(biāo)志[3],這就使得電路結(jié)構(gòu)復(fù)雜化,,無形中就增加了電路面積,。而在采用移位碼編碼方式下,由于移位碼的每次改變只有一位發(fā)生變化,,因此直接采用兩級DFF對其地址指針進行同步,,同步之后將同一時鐘域內(nèi)的讀寫指針進行比較就可以產(chǎn)生空滿標(biāo)志位了。
    仔細觀察表2可以看出一種產(chǎn)生空滿標(biāo)志位的巧妙方法:當(dāng)寫指針等于同步到寫時鐘域內(nèi)的讀指針按位取反時,,表示寫指針在多遍歷一邊FIFO的基礎(chǔ)上追上了讀指針,,即FIFO已滿。又由于滿標(biāo)志的產(chǎn)生是因為寫時鐘域內(nèi)的寫指針的增加,,失效是由于讀時鐘域內(nèi)讀指針的增加,,所以要把滿標(biāo)志信號同步到寫時鐘域[4],產(chǎn)生wrfull信號,,Verilog實現(xiàn)如下:
    assign wrfull_temp=(wr_ptr_nxt== ~r2w_ptr_sync);
    always @ (posedge wrclk or negedge wr_rst) if(~wr_rst) 
    wrfull <=0;      
    else wrfull  <= wrfull_temp;
     空標(biāo)志位的產(chǎn)生與滿標(biāo)志有一點不同,,當(dāng)讀指針與寫指針相同時,表示讀指針追上了寫指針,,且二者遍歷FIFO的次數(shù)相同,,即FIFO已空,同樣也需要將空標(biāo)志信號同步到讀時鐘域內(nèi),其Verilog的描述在此不再贅述,。
4 設(shè)計實現(xiàn)結(jié)果
      圖5所示為移位碼方式實現(xiàn)32×8的FIFO的仿真圖,,該圖截取了FIFO從只寫狀態(tài)到寫滿的波形圖,從圖5中可以看出,,當(dāng)寫指針等于同步到寫時鐘域內(nèi)的讀指針r2w_ptr_sync按位取反時,寫滿標(biāo)志位wrfull跳變?yōu)楦?且wrfull的輸出與寫時鐘wrclk同步,。圖6所示為FIFO從只讀狀態(tài)到讀空的波形圖。由波形分析可知,,該FIFO很好地實現(xiàn)了FIFO先進先出及產(chǎn)生空滿標(biāo)志的功能,。

    將本文設(shè)計的32×8的FIFO在SMIC 0.18 μm CMOS工藝下進行綜合,,將綜合結(jié)果列于表3。作為對比,,利用格雷碼編碼設(shè)計了一個同樣大小的FIFO,也將其綜合的結(jié)果列于表3,。綜合時鐘是500 MHz(周期為2 ns),。由表3可以看出采用移位碼方式設(shè)計的FIFO在500 MHz的時鐘約束下,時序仍可以收斂,,關(guān)鍵路徑中最差的保持時間余量(slack)仍為正,,而采用格雷碼方式設(shè)計的FIFO的slack已經(jīng)為負,同時移位碼方式設(shè)計的FIFO面積也比格雷碼方式小,,動態(tài)功耗也有一定程度的降低,。


    本文設(shè)計了一種采用移位碼編碼的FIFO,采用這種編碼方式,,同時解決了亞穩(wěn)態(tài)和產(chǎn)生空滿標(biāo)志位的問題,,電路結(jié)構(gòu)更為簡單,縮短了電路中的關(guān)鍵路徑,,使得電路時序更加優(yōu)化,,工作頻率明顯提升,電路面積和功耗也有一定的降低,。該種FIFO已用于基于BPSK(移相鍵控)調(diào)制的超寬帶基帶芯片中,能穩(wěn)定工作在500 MHz的時鐘頻率下,。
參考文獻
[1]  汪東,馬劍武,,陳書明.基于Gray碼的異步FIFO接口技術(shù)及其應(yīng)用[J].計算機工程與科學(xué),,2005,27(1):58-60.
[2] 周敏.高速異步FIFO的設(shè)計和實現(xiàn)[J].計算機工程與科學(xué),,2009,,31(2):85-87.
[3] CUMMINGS C E,ALFKE P. Synthesis and synthesis techniques for asynchronous FIFO design with asynchronous pointer comparisons[Z].SNUG,,2002.
[4] CUMMINGS C E. Synthesis and scripting techniques for designing multi-asynchronous clock design[Z].SNUG,,2001.
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。