FIFO是在FPGA設計中使用的非常頻繁,也是影響FPGA設計代碼穩定性以及效率等得關鍵因素。在數據連續讀取時,為了能不間斷的讀出數據而又不導致FIFO為空后還錯誤的讀出數據??梢詫IFO的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基元,造成浪費。
責任編輯:haq
-
FPGA
+關注
關注
1630文章
21798瀏覽量
606040 -
Xilinx
+關注
關注
71文章
2171瀏覽量
122148 -
fifo
+關注
關注
3文章
389瀏覽量
43863
原文標題:FIFO使用技巧
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
FPGA 在人工智能中的應用
AFE4960如何正確的從FIFO中讀取樣本呢?
FPGA在物聯網中的應用前景
Efinity FIFO IP仿真問題 -v1
![Efinity <b class='flag-5'>FIFO</b> IP仿真問題 -v1](https://file1.elecfans.com/web2/M00/0A/C7/wKgaomcVzXSAJAskAAAY6WDHRZE641.png)
FPGA在人工智能中的應用有哪些?
如何使用FX3同步從屬fifo模式通過FPGA傳輸傳感器數據?
如何獲取FIFO中接收的字節數?
同步FIFO和異步FIFO區別介紹
![同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區別介紹](https://file1.elecfans.com/web2/M00/EB/91/wKgZomZetI6ACXETAAAiwkYcoTM829.png)
評論