本文設計思想采用明德揚至簡設計法。在使用FPGA設計系統時,常需要利用FIFO進行數據緩存保證數據不丟失,因此計算FIFO深度是至關重要的。FIFO的深度主要取決於“最惡劣”的情況,以下對於兩種最常見的場合進行分析。
1.已知讀寫兩側帶寬及最惡劣情況,求FIFO深度
如:對於異步FIFO,寫時鍾100MHZ,讀時鍾80MHZ。讀寫位寬均為16bit。已知每100個寫周期最多寫入960bit數據,讀側每時鍾讀取一個數據。問:FIFO深度至少為多少?
分析:典型的“背靠背”情況,此時最惡劣的情況是第一次100個寫周期內后60個周期連續寫入60個數據和第二次100個寫周期內前60個周期連續寫入60個數據。故上述最惡劣情況下的連續寫入120個數據后FIFO內緩存數據最多。計算此時寫入數據-該階段讀出數據即為FIFO的最小深度。
計算:t = 120*Tw
Nwr = 120
Nrd = t/Trd = 120*Twr/Trd = 120*frd/fwr = 120*80/100 = 96
x = Nwr - Nrd = 120 - 96 = 24.
由於FIFO深度只能取2的整數次冪,因此最小深度為2^5 = 32.
2.為保證數據連續輸出,求讀取前FIFO內至少緩存數據量
如:異步FIFO,寫入時鍾80MHZ,讀取時鍾100MHZ。數據位寬1byte。寫側連續寫入均為8192B長度的數據包。問:為保證輸出的數據包是連續不間斷,存夠多少數據后才能開始發送?
分析:此場景為寫入一定數據后開始讀取FIFO,那么最惡劣的時刻當然是剛開始讀取的時間點。想要保證輸出連續,則必須滿足:讀取8192B數據期間寫入的數據+已緩存數據 ≥8192B
計算:t = 8192*Trd
Nrd = 8192
Nwr = t/Twr = 8192*Trd/Twr = 8192*fwr/frd = 8192*80/100 = 6553.6B
發送水線x滿足 Nwr +x = 8192 --> x = 8192 - Nwr = 1638.4B
FIFO深度為2^11 = 2048.