FPGA Asynchronous FIFO設計思路(2)

FPGA Asynchronous FIFO設計思路(2編碼

首先討論格雷碼的編碼方式:spa

 

 

    先看4bit的格雷碼,當MSB0時,正向計數,當MSB1時,即指針已經走過一遍了,最高位翻轉,此時的格雷碼是反向計數,這其中整套數據以最大值(深度)爲對稱中心,每個數均符合格雷碼的要求,即下一個狀態比上一個狀態只有1bit的變化。設計

3bit的格雷碼,在最高位反向後,即指針達到了FIFO最後一個地址,低位開始從新計數,此時存在一個問題是,在最高位跳轉的地方,有兩bite的數據發生變化,違背了格雷碼的規律。3d

 

 

    以上爲一種利用格雷碼來產生數據指針的模型,使用格雷碼來傳遞FIFO指針數據,那麼FIFO的深度必定是pow2,以上模型中,指針ptr先經過gray to binary comb logic 模塊,將格雷碼轉化成二進制數據,而後進行加一操做,獲得bnext,而後經過binary to gray comb logic bnext轉化爲gnext, 而後gnext經過寄存器輸出獲得新的數據指針ptr.再經過gnext的最高位和次高位,計算出addrmsb.指針

 

    以上是第二種數據指針生成模型,首先是,數據地址即指針去掉最高位後,參與加一運算,獲得新的數據地址,採用二進制的形式。blog

  而後加一獲得的新數據地址進行格雷碼轉換,獲得gnext的值,而後經過寄存器輸出,即此模型同時輸出數據指針(採用的格雷碼)和數據地址值(採用二進制)。it

 

 以上爲FIFO的一種總體設計模型。二進制

 

 實際操做中,空滿標誌位信號生成的問題im

 

 具體邏輯不用多說d3

 

    關於空信號的生成,最高位,以及數據地址徹底相等,便可以判斷爲空。

    關於滿信號的生成即複雜一些:

 

     若是採用之前的判斷依據,指針的最高位不一樣,剩下的數據地址徹底相同,若是採用的是格雷碼編碼方式,就會出現問題。

 

      滿信號的判斷依據中指出讀指針和寫指針的最高兩位同時不一樣,剩下的相同,便可以判斷FIFO滿。

 

相關文章
相關標籤/搜索