【教程】“最惡劣”的FIFO深度計算

以下爲原創文章,轉載請註明出處!
作者:小黑同學

本文設計思想採用明德揚至簡設計法。在使用FPGA設計系統時,常需要利用FIFO進行數據緩存保證數據不丟失,因此計算FIFO深度是至關重要的。FIFO的深度主要取決於“最惡劣”的情況,以下對於兩種最常見的場合進行分析。

一.已知讀寫兩側帶寬及最惡劣情況,求FIFO深度

如:
對於異步FIFO,寫時鐘100MHZ,讀時鐘80MHZ。讀寫位寬均爲16bit。已知每100個寫週期最多寫入960bit數據,讀側每時鐘讀取一個數據。問:FIFO深度至少爲多少?
分析:
典型的“背靠背”情況,此時最惡劣的情況是第一次100個寫週期內後60個週期連續寫入60個數據和第二次100個寫週期內前60個週期連續寫入60個數據。故上述最惡劣情況下的連續寫入120個數據後FIFO內緩存數據最多。計算此時寫入數據-該階段讀出數據即爲FIFO的最小深度。
計算:
t = 120Tw
   Nwr = 120
Nrd = t/Trd = 120
Twr/Trd = 120frd/fwr = 12080/100 = 96
x = Nwr - Nrd = 120 - 96 = 24.
  由於FIFO深度只能取2的整數次冪,因此最小深度爲2^5 = 32.

二.爲保證數據連續輸出,求讀取前FIFO內至少緩存數據量

如:
異步FIFO,寫入時鐘80MHZ,讀取時鐘100MHZ。數據位寬1byte。寫側連續寫入均爲8192B長度的數據包。問:爲保證輸出連續不間斷,存夠多少數據後才能開始發送?
分析:
此場景爲寫入一定數據後開始讀取FIFO,那麼最惡劣的時刻當然是剛開始讀取的時間點。想要保證輸出連續,則必須滿足:讀取8192B數據期間寫入的數據+已緩存數據 ≥8192B
計算:
t = 8192Trd
Nrd = 8192
Nwr = t/Twr = 8192
Trd/Twr = 8192fwr/frd = 819280/100 = 6553.6B
發送水線x滿足 Nwr +x = 8192 --> x = 8192 - Nwr = 1638.4B
  FIFO深度爲2^11 = 2048.

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