關於FIFO的深度計算

2021-09-25 01:43:31 字數 2140 閱讀 8913

例如(對於同步fifo,每100個cycle可以寫入80個資料,每10個cycle可以讀出8個資料,fifo的深度至少為? )

參考**: 首先

要確實fifo的應用場景

並且最終要保證在最極端的情況下,仍不是發生溢位以及空資料的情況。如果資料是連續的資料流,那在頻率不同的非同步fifo中,當寫入頻率大於讀出頻率時,fifo必定是溢位的。因此這個時候需要確定資料的傳輸的突發性的,也就是一段一段的傳輸而不是連續的。

網上的:巨集觀地,從整個時間域上看,「寫資料=讀資料」,這個條件必須要滿足,如果這個大條件不滿足的話,用fifo是沒有效果的。但是在傳送方"突發"傳送資料的時間t內,是很有可能寫資料》讀資料的,因此fifo的深度要能夠保證,在這段時間t內,如果接收方未能將傳送方傳送的資料接收完畢的話,剩下的資料都是可以儲存在fifo內部而且不會溢位的,那麼在傳送方停止傳送資料的"空閒時隙"內,接收方可以從容地接收剩下來的資料

總結上述的話:就是說在突發傳輸期間內,輸入的資料減去輸出的資料的剩下的資料還不會使fifo溢位,那就fifo的深度夠用。同理不會空的情況也就是如此。)然後

例題:乙個8bit寬的afifo,輸入時鐘為100mhz,輸出時鐘為95mhz,設乙個package為4kbit,且兩個package之間的傳送間距足夠大。問afifo的深度。

這裡理解是:乙個突發週期內為4kbit,根據上面的位寬,也就是500個資料。

計算突發傳送資料的時間為t=500/100mhz(這裡每乙個資料的傳送時間是頻率的倒數)。資料傳送量為500.然後計算在t時間內,從fifo中傳輸出去的資料。即為tx95mhz=500x95/100=475個資料。那也就是說fifo的深度至少大於500-475=25也就是說,fifo的深度至少為25以上,又因為fifo的深度設定為2n,也就是2的倍數。因此fifo的深度至少設定為32 depth然後

解答上述的題目:

可以認為寫操作是突發寫的。然後要考慮突發的情況,一般情況下,資料傳輸是:空閒—burst突發—空閒—burst突發—空閒—burst突發。但是我們在計算中,需要考慮最極端的情況,即空閒—burst突發—burst突發—空閒—burst突發—空閒。

以最極端的情況空閒—burst突發—burst突發—空閒來計算。

此時考慮背靠背(20個clk不發資料+80clk發資料+80clk發資料+20個clk不發資料的200個clk)

也就是說 首先

是乙個突發寫的資料個數為80/100 x w_clk(這個是實際寫頻率)

同理由於是同步fifo乙個突發讀資料為8/10 x w_clk (這個為實際的讀頻率,這是原讀頻率等於原寫頻率,才能這麼計算。)

為什麼這裡是實際的頻率?

8/10是指乙個週期內會有0.8個資料傳輸,再乘以頻率等於也就是說在10個週期內不是實際的每個週期內都讀取資料,而是有兩個週期未讀取資料,這樣導致實際的週期增加,也就是實際的頻率降低。計算出實際的等效頻率為8/10 x w_clk

在背靠背時傳送的資料位160,這段時間為160/ w_clk(這是的頻率是原有的頻率而不是上面計算後的頻率。).

那麼這段時間內讀出的資料為160/ w_clk x 8/10 x w_clk

也就是得到最終的fifo深度為

160-160/ w_clk x 8/10 x w_clk=160-128=32

此時設定最少fifo深度為32即不會發生溢位的情況,但是會有滿的情況。這是按最極端的情況來計算的。然後

如果令wclk=200mhz,改為100個wclk裡寫入40個,rclk=100mhz,10個rclk裡讀出8個。那麼fifo深度為48

計算如下fifo_depth =80-80x(80%)x(100/200)=80-32=48

總結:

寫時鐘頻率 w_clk,

讀時鐘頻率 r_clk,

寫時鐘週期裡,每b個時鐘週期會有a個資料寫入fifo

讀時鐘週期裡,每y個時鐘週期會有x個資料讀出fifo

則,fifo的最小深度是?

計算公式如下:

fifo_depth = burst_length - burst_length * x/y * r_clk/w_clk

其中burst_length為實際的突發寫長度,其最大為上述兩個a。如果按正常的突發寫乙個a長度也是按上述的公式計算。

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肯...

FIFO深度計算公式

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