您當前的位置:首頁 > 遊戲

FIFO深度設定的探究

作者:由 Kevin Zhang 發表于 遊戲時間:2018-07-26

FIFO深度的問題一直困擾著我,下面來具體解決這個問題,因為FIFO有同步和非同步FIFO之分,但是在分析這個問題時,我們要將其列為數學模型,簡化整個思考的過程。

問題1:對於同步對於同步fifo,每100個cycle可以寫入80個數據,每10個cycle可以讀出8個數據,fifo的深度至少為?

思路:

剛拿到這個題目,我是蒙的,以前用FIFO都是為了跨時鐘域,而且用的AXI_STREAM都是有叫停機制的,因此FIFO深度沒有仔細考證過,之前有個需要深度計算的FIFO,還是金師兄高速我用2倍的資料包長。經過一些查詢資料後:

解題思路:

假設:寫時鐘頻率 w_clk, 讀時鐘頻率 r_clk, 寫時鐘週期裡,每B個時鐘週期會有A個數據寫入FIFO 讀時鐘週期裡,每Y個時鐘週期會有X個數據讀出FIFO 則,FIFO的最小深度計算公式如下:

fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk

因此本題的解答:

最大一次資料寫入量,背靠背傳輸(20個clk不發資料+80個clk發資料+80個clk發資料+20個clk不發資料),因是同步時鐘wclk=rclk,帶入公式計算:

FIFO_DEPTH = 160 - 160 *

(8/10) = 32

因此本題的答案為32個。

拓展

假設本題wclk=200mhz,改為100個wclk裡寫入40個,rclk=100mhz,10個rclk裡讀出8個。那麼fifo深度為48 計算如下fifo_depth =80-80X(80%)X(100/200)=80-32=48。

這讓我聯想到另外一個之前的專案問題:

示意圖:圖中的200M僅僅是例子。

FIFO深度設定的探究

假設前級的資料無法叫停,問FIFO的最小深度為多少?

分析:此問題就是找 FIFO進來最大資料量,而FIFO出資料最小的時候。

解答:FIFO進來資料是很多的,但是FIFO出資料考慮背靠背最少的出資料的情況在後級800M時鐘內,出資料最少的狀態(200M出資料+200不出資料+200不出資料+200M出資料)。

因此最大的情況是後級400M不出資料,對應前級的時間是200M

FIFODEPTH = 200M - 400M * 0 = 200M 。

標簽: FIFO  CLK  資料  時鐘