翻譯 計算FIFO的深度

2022-02-12 18:38:15 字數 1037 閱讀 7750

原文:

面試中最常被問到的問題之一,就是如何計算fifo的深度。常識告訴我們,當讀速率慢於寫速率時,fifo便可被用作系統中的緩衝元件或佇列。因此fifo的大小基本上暗示了所需快取資料的容量,該容量取決於讀寫資料的速率。據統計,系統的資料速率取決於系統的負載能力。因此為了保證fifo的大小,我們需要考慮fifo傳輸的最壞情況下。

在最壞的情況下,與最求讀寫速率最大化不同的是。對於讀操作來說,應該考慮最大資料速率;那麼對於寫操作來說,應該考慮最小資料速率。

在這個問題中,讀操作的資料速率是由空閒週期的資料決定的。而寫操作的最大資料速率則不應該考慮空閒週期。

在寫操作中,我們需要知道資料速率,亦即資料個數 * 時鐘速率。寫的這一邊為源端,而讀的這一邊則變為宿端。讀操作的資料速率則取決於寫的那一邊的資料速率和它本身的讀取速率,即frd/idle_cycle_rd。

為了了解寫操作的資料速率,我們需要知道在突發傳輸中的資料個數,我們架設為b。

跟上前面的問題,那麼fifo的大小=快取的大小=b-b*frd/(fwr*idle_cycle_rd)。

這裡我們沒有討論非同步讀寫的同步延遲。越大的同步延遲,需要越大的fifo大小,以快取更多的寫資料。

假設我們需要設計符合下列要求的fifo,我們想要計算最小的fifo深度。

非同步fifo

寫時鐘30mhz f1

讀時鐘40mhz f2

突發寫資料大小 b

案例1:讀端有1個空閒時鐘週期 i

案例2:讀端有10個空閒時鐘週期 i

fifo深度計算=b-b*f2/(f1*i)

如果我們變換讀週期,亦即在兩個讀週期之間有1個空閒週期,那麼fifo深度=b-b*f2/(f1*2)

在我們當前的問題中,fifo深度=b-b*40/(30*2)=b(1-2/3)=b/3

這意味著,如果突發傳輸的資料容量為10,那麼fifo深度為=10/3=3.3=4(近似)

如果b=30,那麼fifo深度=20/3=6.6=7

如果在兩個讀週期中有10個空閒週期,那麼fifo深度=b-b*f2/(f1*10)=b(1-4/30)=b*26/30

關於FIFO的深度計算

例如 對於同步fifo,每100個cycle可以寫入80個資料,每10個cycle可以讀出8個資料,fifo的深度至少為?參考 首先 要確實fifo的應用場景 並且最終要保證在最極端的情況下,仍不是發生溢位以及空資料的情況。如果資料是連續的資料流,那在頻率不同的非同步fifo中,當寫入頻率大於讀出頻...

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用作兩個不同時鐘域的模組之間的資料緩衝,確保不會丟失資料。通常因為讀速率慢於寫速率,慢的模組來不及讀取的資料要被快取下來,所以說,fifo的工作模式應該是,資料突發 burst 寫入的形式。也就是隔一段時間突發的寫一組資料。如果連續寫入的話,因為讀速率慢於寫速率,fifo肯...