FIFO的使用總結


 

使用FIFO積累

    

FIFO是在FPGA設計中使用的非常頻繁,也是影響FPGA設計代碼穩定性以及效率等得關鍵因素。我總結一下我在使用FIFO過程中的一些心得,與大家分享。
         我本人是做有線通信的,所做的設計中大量的使用到FIFO,用於報文的緩存。我經常使用一個FIFO存報文內容,另一個FIFO存報文的長度,兩者配合使用。
         在數據連續讀取時,為了能不間斷的讀出數據而又不導致FIFO為空后還錯誤的讀出數據。可以將FIFO的Empty和Almost_empty以及讀使能配合起來使用,來保證能夠連續讀,並准確的判斷FIFO空滿狀態,提前決定是否能啟動讀使能。具體的實施辦法是:當Empty為1,立即停止讀;當Empty為0,Almost_empty為0時,可以放心讀;當Empty為0,但是Almost_empty為1時,如果上一拍讀使能Read也為1,那么不能讀;當Empty為0,但是Almost_empty為1時,如果上一拍讀使能Read為0,可以讀最后一拍。
        在FIFO使用時,使用到Almost_full信號以及讀寫counter來控制FIFO的讀滿預警,如果數據不是在空滿判斷的下一拍寫入FIFO,則設計FIFO的滿預警時要小心。如果你不確定判斷滿預警之后要延遲多少拍才能真正寫入FIFO,那么盡量讓FIFO有足夠滿預警裕量。例如,在wr_data_count為128才是真的滿了,你可以設成wr_data_count為120的時候就給出滿預警,可以保證設計的可靠和安全。當然,如果你能准確的算出判斷滿預警與真正寫入FIFO的延遲,可以用精確的滿預警閾值。
      當需要使用到數據位寬轉換時,如將128位的數據轉換成64位的數據,最好不要用XILINX自己生成的位寬轉換FIFO。可以例化兩個64位的FIFO,自己控制128轉64。這樣可以大大的節省資源,是XILINX CORE生成的FIFO資源的一半。

 

(1)FIFO作為跨時鍾域使用;

       多bit位寬,盡量使用FIFO進行跨時鍾域;如果僅僅是打兩拍解決的話,會引起vivado布線困難;造成臨近邏輯不穩定;

      避免過約束引起的時序問題;

(2)FIFO作為數據位寬轉換使用;

       一般在同一時域下不必用FIFO作為位寬的轉換;若跨時鍾域可以采用xilinx IP進行生成對應的轉換,如果在資源非常緊張的情況下,需要考慮其他的方法,減少FIFO的使用;

      FIFO作為轉換位寬時,高位優先出(將寬bit轉窄bit);先進置於高位(窄bit轉寬bit);

(3)FIFO優化時序

        優先使用內部的RAM塊實現FIFO;若為了布線可以使用分布式資源布線;RAM資源實現FIFO和調整輸入輸出位寬,分布式Lut資源輸出位寬與輸入位寬一致;

(4)FIFO的控制

        通過圖2、圖3可以看到,FIFO可以使用full/empty/almost_full/almost_empty進行控制;讀寫計數值可以作為的狀態機的控制值;

(5)FIFO的時序問題

      FIFO根據不同的配置,讀寫時序一般低於450Mhz,當速率過高需要考慮布線問題;

 (6)FIFO的資源使用

    FIFO的summary中可以看出當前配置下,FIFO需要使用到的BRAM資源、LUT資源等;對於BRAM來說,有BRAM18K和BRAM36K,但實際上一個BRAM36K還是由兩個BRAM18K合並實現;

(7)端口的時鍾域

     參看FIFO官方手冊體現了讀寫端口的時鍾域分布。

    

                 

                                                                                                圖1: FIFO實現類型

 

                        

                                                                                         圖2:可配置的full/empty

 

                         

                                                                             圖3:讀寫計數

 

 

              

                                                                    圖4:FIFO詳細summary

 


免責聲明!

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



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