FIFO使用技巧

FIFO使用技巧
標籤: fpga it 分類: FPGA
FIFO是在FPGA設計中使用的非常頻繁,也是影響FPGA設計代碼穩定性以及效率等得關鍵因素。我總結一下我在使用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資源的一半。
另外,當需要使用到位寬大於18bits,且深度小於等於512的FIFO時,建議使用XILINX COREGenerator來產生,它可以將一個36bits位寬512深度的FIFO在一個18×1024的BLOCK RAM中實現。如果我們自己用BLOCK RAM來實現一個FIFO,那隻能例化一個36×1024的BLOCK RAM基元,造成浪費。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章