FIFO


FIFO(first in first out),具備讀寫端口各一個,外部無需控制地址。

FIFO與普通RAM的區別在於FIFO外部忽略對讀寫地址的管理,而只需要關注空滿狀態。

異步FIFO設計框圖

參數:時鍾、數據位寬、深度、讀寫指針、空滿判斷、RAM空間大小

實質:控制信號+RAM

設計要點

  • 讀、寫時鍾域的地址管理
  • 寫地址到讀時鍾域的同步
  • 讀地址到寫時鍾域的同步
  • 讀時鍾域的空和將空信號控制
  • 寫時鍾域的滿和將滿信號控制

判滿判空

以深度為1024的FIFO為例,假設一直沒有讀操作,讀指針停在地址0處。當寫完1024個數據后,寫指針又回到了地址0處,此時讀寫地址相等。而隨寫隨讀,讀寫地址也相等。所以無法通過讀寫地址進行判滿判空。

因此可以對地址增加1個高bit,來指示是否發生了回卷。此時若讀寫地址相等,則為空。若最高bit不同,但其余位相同,那么則為滿。

判滿時,需要將讀地址同步到寫時鍾域進行判斷。判空時,需要將寫地址同步到讀時鍾域進行判斷。

為什么采用格雷碼同步地址

因為FIFO的地址是逐1增加的,因此可以把逐1增加的地址編碼為相鄰數只有1位不同的格雷碼。在實現跨時鍾域信號采集時,如果數據每次只改變一位,那么就可以使用單比特跨時鍾域處理方式直接采樣。

二進制碼和格雷碼轉換

B2G

二進制碼右移一位,高位補0,與原二進制碼按位相異或。

assign gray = (bin >> 1)^ bin

G2B

Gn = Bn;
Gi-1=Bi ^ Bi-1; ( i=1,2,n-1; )

assign bin[N-1] = gray[N-1] ;

generate
genvar  i;
    for(i=0;i<N-1;i=i+1) begin:b2g
        assign  binary[i]     =       grey[i]^binary[i+1];
    end
endgenerate

FIFIO深度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM