摘 要: 分析了異步FIFO的結構和關鍵技術,在與利用格雷碼作為異步FIFO指針編碼對比的基礎上,提出了一種采用移位碼編碼方式的FIFO,不僅減小了亞穩(wěn)態(tài)出現的概率,也簡化了電路結構,降低了電路面積和功耗,在此基礎上也縮短了電路的關鍵路徑,工作頻率明顯提升。根據仿真和綜合結果顯示,本文設計的FIFO工作性能穩(wěn)定可靠。
關鍵詞: 專用集成電路(ASIC);異步FIFO;移位碼;亞穩(wěn)態(tài)
在現代集成電路設計中,隨著集成度的不斷提升,常常會遇到數據緩存與不同時鐘域之間數據傳遞的問題,在不同系統間如不能設計出有效的接口單元,將會產生數據傳輸過程中的復寫、丟失和無效數據的讀入等錯誤,同時亞穩(wěn)態(tài)現象也會出現在不同時鐘域之間的數據傳遞過程中。此時,如何實現數據高速有效的傳輸并克服跨時鐘域間數據傳遞時的亞穩(wěn)態(tài)成為一個關鍵點問題。由于異步FIFO(First In First Out)能夠有效解決不同傳輸速度和不同時鐘域之間數據傳遞的問題,異步FIFO在實際電路中得到廣泛的運用。本文介紹一種基于ASIC的高速異步FIFO的設計和實現方案。
1 異步FIFO的基本功能和結構
異步FIFO指在不同時鐘域之間,由一個時鐘域寫入,待寫入數據穩(wěn)定之后,由另一個時鐘域讀出。圖1為異步FIFO的基本結構框圖,FIFO的存儲單元采用雙端口RAM的解決方式,同步模塊SYNC完成異步讀寫時鐘域之間指針信號的同步過程,將同步前后的指針送到wrfull、rdempty模塊,產生wrfull、rdempty信號,從而構成一個完整的FIFO。
表1所示為圖1中各信號的具體意義。
2 異步信號同步的關鍵問題
在不同時鐘域之間傳遞的信號,由于兩個時鐘之間沒有清楚的相位和頻率關系,很容易出現亞穩(wěn)態(tài)現象。亞穩(wěn)態(tài)是指觸發(fā)器無法在某個規(guī)定的時間段內達到一個可以確認的狀態(tài)。當一個觸發(fā)器進入亞穩(wěn)態(tài)時,觸發(fā)器會輸出一些中間電平,或者可能處于振蕩狀態(tài)。在數字電路中,如果將亞穩(wěn)態(tài)信號直接應用于后續(xù)的組合邏輯,將會產生難以預測的結果。圖2所示為異步時鐘的亞穩(wěn)態(tài)現象,圖中CLK_A和CLK_B為異步時鐘。
亞穩(wěn)態(tài)是不可避免的,但可以采用合適的方法將其降低到一個合適的低概率水平。
首先可以從讀寫地址指針的編碼入手。若采用傳統的二進制計數,地址指針的每次增加,則有可能出現從全1到全0的所有位的同時跳變,這種情況使得出現亞穩(wěn)態(tài)的概率大大增加。本文將采用一種特殊的編碼方式,使得地址指針的每次增加只會出現一位改變,從而減小亞穩(wěn)態(tài)發(fā)生的概率。
其次可以采用兩級鎖存的辦法。如圖3所示,在一個信號進入另一個時鐘域前,將該信號用兩級觸發(fā)器進行鎖存,即使第一級觸發(fā)器的輸出出現亞穩(wěn)態(tài),經過一個時鐘周期之后,進入第二級觸發(fā)器的信號已經穩(wěn)定到一個確定的電平,從而兩級鎖存的輸出可以有效減小亞穩(wěn)態(tài)發(fā)生的概率。
3 異步FIFO的具體結構
3.1 讀寫指針