《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 異步FIFO控制器的設計
異步FIFO控制器的設計
來源:微型機與應用2012年第4期
鄔春學,華 樂
(上海理工大學 光電信息與計算機工程學院,上海200093)
摘要: 異步FIFO是一種先進先出電路,可以有效解決異步時鐘之間的數據傳遞。通過分析異步FIFO設計中的難點,以降低電路中亞穩態出現的概率為主要目的,提出了一種格雷碼計數器的技術,通過仿真驗證,有效地實現了異步FIFO控制器的設計。該設計將大大提高工作頻率和資源利用率。
Abstract:
Key words :

摘   要: 異步FIFO是一種先進先出電路,可以有效解決異步時鐘之間的數據傳遞。通過分析異步FIFO設計中的難點,以降低電路中亞穩態出現的概率為主要目的,提出了一種格雷碼計數器的技術,通過仿真驗證,有效地實現了異步FIFO控制器的設計。該設計將大大提高工作頻率和資源利用率。
關鍵詞: 異步FIFO;亞穩態;格雷碼計數器

    隨著現代芯片設計規模的不斷擴大,集成電路越來越復雜,一個系統中往往包含多個時鐘,如何設計異步時鐘之間的接口電路是多時鐘領域的關鍵問題。異步FIFO(First In First Out)是一種先進先出電路,用來存儲、緩沖在兩個異步時鐘之間的數據傳輸,使用異步FIFO可以在兩個不同的時鐘系統之間快速準確地傳輸實時數據,是用來解決異步時鐘接口電路的一個有效方案。并且異步FIFO高速、可靠性好,在網絡接口、圖像處理等方面都得到了廣泛的應用。
1異步FIFO控制器的設計
1.1 異步FIFO時鐘域結構設計

  FIFO主要由FIFO控制器和RAM兩個部分組成。FIFO控制器最重要的功能就是產生RAM的讀寫地址以及相應的使能信號;產生FIFO的狀態標志,包括空(Empty)、滿(Full)、溢出(Underflow,Overflow)以及其他根據設計需要產生的狀態標志。異步FIFO由兩個時鐘域構成:push clock domain(記為clk_push domain)和pop clock domain(記為clk_pop domain)。
 所以異步FIFO可以劃分為下列時鐘域結構,如圖1所示。

1.2 簡單計數器實現讀寫地址輸出結構設計
 由時鐘域結構可知,作為FIFO控制器,最基本的就是要根據外部的輸入信號push和pop,產生對RAM訪問的讀寫地址。FIFO控制器內首先要實現對RAM的讀寫地址輸出,所以FIFO控制器內有一組基于clk_push domain的邏輯產生寫地址:push_addr,和一組基于clk_pop domain的邏輯產生讀地址:pop_addr。然后對地址信息采用二進制編碼,每一次push操作,使push_addr增加1,即指向下一個push操作的RAM空間;每一次pop操作,使pop_addr增加1,即指向下一個pop操作的RAM空間。按照這種思路,異步FIFO控制器可進一步細化為如圖2所示結構。

 

 

1.3 異步FIFO控制器設計中的關鍵問題
    所謂異步是指讀、寫時鐘是完全獨立并且不一致的,或者不同頻率,或者同頻但不同相。讀地址和空標志是由讀時鐘產生的,而寫地址和滿標志則由寫時鐘產生,當要產生FIFO的空、滿標志時,必須進行讀寫地址的比較,地址線一般有多位,如果直接采樣地址比較,就會存在問題。寫地址的每一位在寫時鐘作用下,跳變會不一致,即產生毛刺,要過一段時間才能穩定。在未穩定期內,剛好讀時鐘進行采樣寫地址,這時就會出現誤判斷和邏輯錯誤從而導致了亞穩態的出現。一個好的FIFO設計的基本要求是:寫滿而不溢出,讀空又不多讀。
    因而,異步FIFO設計主要存在兩個關鍵問題:
 (1)如何產生空、滿等相應的控制信號;
 (2)為了盡量降低電路中亞穩態出現的概率,如何同步從一個時鐘域傳送來的多位數據信號。
1.3.1 異步FIFO控制器空滿標志產生
 地址輸出設計好后,接下來解決第一個關鍵問題,即異步FIFO的空滿狀態標志。
 當pop_addr追趕push_addr,并且趕上,即pop_addr = push_addr時,FIFO為空,即置empty;當push_addr追趕pop_addr,并且趕上,即push_addr = pop_addr時,FIFO為滿,即置full。
 可以發現,不論是empty還是full,pop_addr均與push_addr相等,因而暫時無法區分到底是empty還是full。所以需要增加額外的邏輯加以區分。
 由于異步信號在使用前需要使用兩級觸發器同步才能在另一個時鐘域被使用,因而在clk_pop domain,需要兩級觸發器來同步push_cnt;在clk_push domain,也需要兩級觸發器來同步pop_cnt。
 在這里可以增加almost_full和almost_empty標志判斷empty和full:在計數器的復位值都必須為0,并且為二進制編碼遞增的前提下,當FIFO內數據少于某一預設值(低水線,low_waterlevel)時,置位almost_empty;當FIFO內數據多于某一預設值(高水線,high_waterlevel)時,置位almost_full。這時就很清楚,當almost_empty有效,并且pop_addr = push_addr時,FIFO為empty;當almost_full有效,并且pop_addr = push_addr時,FIFO為full。
    此時,異步FIFO控制器可進一步細化為如圖3所示結構。

1.3.2 亞穩態問題的存在及解決
 在數字電路中,觸發器需要滿足setup/hold的時間要求。當一個信號被寄存器鎖存時,如果信號與時鐘之間不能滿足這個要求,Q端的值是不確定的,并且在一個未知的時刻會固定到高電平或低電平,這個過程稱為亞穩態。
 亞穩態必然會發生在異步FIFO中, 因為在異步FIFO中,電路的外部輸入和內部時鐘沒有任何時間關系,因此存在setup/hold沖突是必然的,同時,在電路內部的兩個沒有關系的時鐘域之間的信號傳遞也會出現setup/hold沖突。
 雖然亞穩態是不可避免的,但是通過對寫地址/讀地址用格雷碼可以將其降低到一個能夠接受的范圍之內[1]。同步多個異步輸入信號出現亞穩態的概率遠遠大于同步一個異步信號的概率,所以對多個觸發器的輸出所組成的寫地址/讀地址需要采用格雷碼。由于格雷碼每次只有一個數據位變化,因而采用格雷碼可以有效地減少亞穩態的產生。
     按照這種思路,異步FIFO控制器可以設計為計數器采用Gray Code編碼,然后被另一個時鐘域同步,同時計數器必須按照0、1、2、3遞增的順序計數。于是先將Gray Code轉換為二進制,然后對二進制做加1運算,將計算結果再轉換回Gray Code,然后被觸發器鎖存。所以,異步FIFO控制器的設計又可進一步細化為如圖4所示結構。

    現在一個異步FIFO控制器已經基本設計完成。在圖上還剩overflow、underflow、we三個信號。在full時,對FIFO push就會產生overflow;在empty時,對FIFO pop就會產生underflow。特別值得注意的是,這時的push或pop都不應該使計數器繼續翻轉,full后對FIFO的push操作FIFO控制器也不能輸出有效的對RAM的寫使能信號we。這三個信號以及其他一些狀態標志的具體實現可以根據實際應用進行設計。
2 用Modelsim仿真
    在Modelsim SE上利用Verilog HDL對提出的方法進行了仿真,仿真波形如圖5所示。

    從仿真時序圖知:
    (1)復位后,讀信號和寫信號均不使能(均置1),由于存儲單元沒有數據,產生讀空標志。
    (2)將寫信號使能(置0),寫入的數據與設計輸入的數據一致;將讀信號使能,讀出來的數據順序和數值與寫入的數據一致。
  (3)將寫信號置1,在一定的時鐘下由預期設定的讀地址加1與寫地址相等時,有讀空標志產生;接著將寫信號使能,將讀信號置1,在一定的時鐘周期下由預期設定的寫地址加1與讀地址相等時,有寫滿標志產生。
  (4)將讀寫時鐘使能,數據的讀寫是正確的,由于寫時鐘比讀時鐘快,經過一定的時鐘周期后,有寫滿標志產生;接下來,由于寫滿不能再寫,故讀時鐘在讀使能信號下讀出數據時,寫滿信號變為0,接著寫滿信號1和0交替出現。
    (5)系統復位后,一個8位rd_cnt計數器清0,在讀使能和沒有產生讀空標志的條件下,在讀時鐘上升沿的到來,rd_cnt計數器加1,跟隨著rd_addr讀地址的變化,查看得知產生的讀地址變化符合預期設計;同樣,系統復位后,一個8 bit wr_cnt計數器清0,在寫使能和沒有產生寫滿標志的條件下,當寫時鐘上升沿的到來時,wr_cnt計數器加1,跟隨著wr_addr寫地址的變化,查看得知產生的寫地址變化符合預期設計。
    根據上述仿真波形分析,可以看出所設計的FIFO控制器,能滿足需要完成的功能。
參考文獻
[1] KANOOPOULOS,HALLENBECK J J. A First-In,Firstout memory for signal processing applications[J]. IEE Transactions on circuits and system,1986,CAS-33(05):556-558.
[2] 吳自信,張嗣忠.異步FIFO結構及FPGA設計[J]. 單片機及嵌入式系統應用,2003(8):24-26.
[3] CLIFFORD E. Simulation and synthesis techniques for asynchronous FIF0 design [J]. SNUG San Joes,2001(05).
[4] 羅昊. 一種異步FIFO的設計方法[J]. 電子技術應用,2004,30(8):70-71,74.
[5] 魏芳,劉志軍,馬克杰. 基于Verilog HDL的異步FIFO設計與實現[J]. 電子技術應用,2006,32(7):97-99.
[6] 楊青山,蔡敏. 基于多時鐘域的異步FIFO設計[J]. 中國集成電路, 2007(9):36-39.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 中文字幕久久久久久精 | 五月天爱爱网 | 99久久免费中文字幕精品 | 高清国产精品久久久久 | 91久久婷婷国产综合精品青草 | 人人草视频在线观看 | 五月激情在线 | aⅴ一区二区三区无卡无码 aⅴ一区二区三区 | 精品美女在线 | 国产精品视频一区二区三区w | 99re综合 | 精品小视频在线 | 成 人 黄 色 视频 免费观看 | 欧美精品性生活 | 国产精品久久永久免费 | 国产成人综合网在线播放 | www.四虎在线观看 | 国产精品不卡无毒在线观看 | 欧美成人一区二区三区在线视频 | 六月色播| 高清一级毛片免免费看 | 污污成人一区二区三区四区 | 成人亚洲性情网站www在线观看 | 国产片在线看 | 欧美日韩国产另类在线观看 | 欧美综合自拍亚洲综合网 | 精品久久久久久亚洲 | 欧洲性开放老妇人 | 奇米精品一区二区三区四区 | 奇米四色网 | a级毛片毛片免费观看永久 a级理论片 | 99精品观看| 久久成人亚洲 | 久久97精品久久久久久久看片 | www.奇米影视 | 九九精品国产99精品 | h小视频在线观看网 | 蜜臀91精品国产高清在线观看 | 91av综合| 精品成人毛片一区二区视 | 男人的午夜天堂 |