FIFO是在FPGA設(shè)計中使用的非常頻繁,也是影響FPGA設(shè)計代碼穩(wěn)定性以及效率等得關(guān)鍵因素。在數(shù)據(jù)連續(xù)讀取時,為了能不間斷的讀出數(shù)據(jù)而又不導(dǎo)致FIFO為空后還錯誤的讀出數(shù)據(jù)。可以將FIFO的Empty和Almost_empty以及讀使能配合起來使用,來保證能夠連續(xù)讀,并準(zhǔn)確的判斷FIFO空滿狀態(tài),提前決定是否能啟動讀使能。
具體的實施辦法是:當(dāng)Empty為1,立即停止讀;當(dāng)Empty為0,Almost_empty為0時,可以放心讀;當(dāng)Empty為0,但是Almost_empty為1時,如果上一拍讀使能Read也為1,那么不能讀;當(dāng)Empty為0,但是Almost_empty為1時,如果上一拍讀使能Read為0,可以讀最后一拍。
在FIFO使用時,使用到Almost_full信號以及讀寫counter來控制FIFO的讀滿預(yù)警,如果數(shù)據(jù)不是在空滿判斷的下一拍寫入FIFO,則設(shè)計FIFO的滿預(yù)警時要小心。如果你不確定判斷滿預(yù)警之后要延遲多少拍才能真正寫入FIFO,那么盡量讓FIFO有足夠滿預(yù)警裕量。
例如,在wr_data_count為128才是真的滿了,你可以設(shè)成wr_data_count為120的時候就給出滿預(yù)警,可以保證設(shè)計的可靠和安全。當(dāng)然,如果你能準(zhǔn)確的算出判斷滿預(yù)警與真正寫入FIFO的延遲,可以用精確的滿預(yù)警閾值。
當(dāng)需要使用到數(shù)據(jù)位寬轉(zhuǎn)換時,如將128位的數(shù)據(jù)轉(zhuǎn)換成64位的數(shù)據(jù),最好不要用XILINX自己生成的位寬轉(zhuǎn)換FIFO。可以例化兩個64位的FIFO,自己控制128轉(zhuǎn)64。這樣可以大大的節(jié)省資源,是XILINX CORE生成的FIFO資源的一半。
另外,當(dāng)需要使用到位寬大于18bits,且深度小于等于512的FIFO時,建議使用XILINX COREGenerator來產(chǎn)生,它可以將一個36bits位寬512深度的FIFO在一個18×1024的BLOCK RAM中實現(xiàn)。如果我們自己用BLOCK RAM來實現(xiàn)一個FIFO,那只能例化一個36×1024的BLOCK RAM基元,造成浪費。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1626文章
21665瀏覽量
601818 -
Xilinx
+關(guān)注
關(guān)注
71文章
2163瀏覽量
121005 -
fifo
+關(guān)注
關(guān)注
3文章
387瀏覽量
43548
原文標(biāo)題:FIFO使用技巧
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論