FIFO最小深度計算

2021-10-25 07:04:02 字數 1884 閱讀 5639

我們通常需要非同步fifo用作兩個不同時鐘域的模組之間的資料緩衝,確保不會丟失資料。通常因為讀速率慢於寫速率,慢的模組來不及讀取的資料要被快取下來,所以說,fifo的工作模式應該是,資料突發(burst)寫入的形式。也就是隔一段時間突發的寫一組資料。如果連續寫入的話,因為讀速率慢於寫速率,fifo肯定會寫滿,fifo的深度就需要無窮大,才能確保資料不丟失。(這裡注意區分讀速率≠讀時鐘頻率,寫速率≠寫時鐘頻率)

下面會通過討論一種case下a模組傳輸資料到b模組所需fifo深度的計算,進而延伸至通用計算公式

寫速率fa = 80mhz

讀速率fb = 50mhz

突發長度burst length = 120

兩個連續寫入之間的空閒週期為 = 1

兩個連續讀取之間的空閒週期為 = 3

solution:

兩個連續寫入之間的空閒週期為1的意思是,每寫入乙個資料,要等待乙個週期,再寫入下乙個資料。這也可以理解為每2個週期,寫入1個資料

兩個連續讀取之間的空閒週期為3的意思是,每讀取乙個資料,要等待三個週期,再讀取下乙個資料。這也可以理解為每4個週期,讀取1個資料

寫乙個資料需要的時間 = 2 * (1 / 80mhz) = 25ns

寫乙個突發需要的時間 = 120 * 25ns = 3000ns

讀乙個資料需要的時間 = 4 * (1 / 50mhz) = 80ns

每3000ns,120個資料被寫入fifo,但讀乙個資料需要80ns的時間。可以計算出,3000ns內讀出可以多少個資料,3000 / 80 = 37.5。剩下的沒有讀出,就存在fifo中,則需要120 - 37.5 = 82.5 約等於 83。所以這種情況下,需要的fifo最小深度為83

寫時鐘頻率w_clk, 讀時鐘頻率 r_clk, 寫時鐘週期裡,每b個時鐘週期會有a個資料寫入fifo ,讀時鐘週期裡,每y個時鐘週期會有x個資料讀出fifo ,那麼,fifo的最小深度是?

首先認為寫操作是burst(突發)進行的,但是寫操作的效率並不是100%,而是a/b,因此實際的寫速率為fwr = (a/b)*w_clk。同理,實際的讀速率為frd = (x/y) * r_clk。

通常沒有約束突發長度場景,正常情況下應該是這樣的:

空閒——burst——空閒——burst——空閒——burst

但是在計算時要考慮極端的情況,即「背靠背」的情況。

空閒——burst——burst——空閒——burst——burst——空閒

這就是」背靠背「的極端情況【burst_length = (a+a) / w_clk】。

按照case1的邏輯

寫乙個資料需要的時間 twr= 1 / fwr

寫乙個突發需要的時間 tbt= burst_length * (1 / fwr)

讀乙個資料需要的時間 trd= 1 / frd

每個tbt時間內,burst_length個資料被寫入fifo,但讀乙個資料需要trd的時間。可以計算出,tbt內讀出可以多少個資料,tbt / trd。剩下的沒有讀出,就存在fifo中,則需要burst_length - tbt / trd,展開得出下面的公式:

fifo_depth = burst_length*(1-frd/fwr)=burst_length*[1-(x/y) * r_clk/(a/b)w_clk]

考慮背靠背情況下:

fifo_depth = burst_length[1-(x/y) * r_clk/w_clk]

再做一下變化

fifo_depth = burst_length*(1-frd/fwr)= burst_length/fwr*(fwr-frd),即

fifo深度 = (寫入資料量 / 寫入速率)*(寫入速率 - 讀出速率)

第一次網上記錄學習筆記,難免可能有誤,歡迎指出,相互學習,謝謝!

FIFO最小深度計算方法

在實際工作中使用fifo,如何計算fifo的深度是乙個關鍵問題。本文以例項的形似,展示了在資料轉換時,fifo深度的計算方法。例1,已知某a d轉換的取樣率為50mhz,而fpga工作在40mhz時鐘下,現在要處理10萬個資料,需要的緩衝fifo深度是多少?答 1 採集10萬個資料的總時間為 tto...

FIFO深度計算問題

fifo深度計算公式 fifo depth burst length burst length x y r clk w clk burst length 突發資料個數 x,y 讀時鐘週期裡,每y個時鐘週期會有x個資料讀出fifo r clk 讀時鐘 w clk 寫時鐘 1,同步fifo 對於同步fi...

FIFO深度計算公式

原文 其實很慚愧,在這之前用fifo都是直接用ip,因為應用場景很簡單,因此fifo深度的選擇也比較隨意,並沒想很多。今天在網上看到乙個非同步fifo深度計算的題目,發現對於這塊並不熟悉,因此注意了下,下面寫寫自己的一些理解吧。提前說明下,因為我實際中並沒有碰到需要去計算fifo深度的場景,因此可能...