1. 程式人生 > >FIFO閾值如何設定?將滿閾值與FIFO深度的關係?

FIFO閾值如何設定?將滿閾值與FIFO深度的關係?

FIFO閾值如何設定

1、       什麼是FIFO

FIFO(first in firstout)是一種用暫存器reg或者RAM實現的儲存結構,常用於儲存資料通道中的資料流,採用先入先出的資料,當下遊模組無法及時處理上流模組輸出的資料時,此時需要用FIFO暫存資料,防止資料丟失。

2、       什麼是FIFO閾值

FIFO閾值包含將滿閾值afull_cnt和將空閾值aempty_cnt,當FIFO內包含的資料data_cnt大於等於afull_cnt時,將滿訊號有效(afull為1),afull傳輸給上游模組A,通知上游模組停止傳送資料,防止FIFO傳送溢位,NOTE:將滿閾值afull_cnt的作用是防止FIFO傳送溢位導致資料丟失。將空閾值的作用時防止FIFO空的,即FIFO中沒有有效資料了還會產生讀資料操作。

 

3、       FIFO將滿閾值如何設定

請看下圖,資料data和有效訊號vld從模組A產生,經過N拍延時,輸入到FIFO,FIFO產生將滿訊號afull,經過M拍延時反饋到模組A,假設模組A接收到afull=1時,立即停止傳送資料。假設FIFO深度為depth_fifo,每拍為一個時鐘週期。

1為了保證FIFO不發生溢位,請問將滿閾值afull_cnt至少應該設定成多少?

2為了充分發揮FIFO的效能,FIFO深度depth應該為多少?

 

FIFO將滿閾值如何設定:

1)當FIFO中的資料為afull_cnt時,產生afull=1,

2)Afull=1經過M拍到達模組A,此時FIFO中應該有(afull_cnt+M)個數據。

3)Afull=1到達模組A時,模組A立即停止傳送資料,此時電路中還存在N拍資料將陸續送到FIFO中,所以最後FIFO中應該為(afull_cnt+M+N)個數據,

4)為了保證資料不會溢位,所以應該滿足公式depth_fifo>= afull_cnt+M+N,因此,將滿閾值應該至少為depth_fif-(M+N)

FIFO深度depth應該為多少:

若depth_fifo過小,afull有效之後,fifo中儲存的資料將很快被下游資料讀取,而新的資料又無法及時到達FIFO,因此會造成流水氣泡,影響電路效能。

假設M=5 ,N=10,假設depth_fifo=20,則afull_cnt=5, 所以在T時刻,fifo中存了5個數據後afull=1會有效,在之後的15個週期內會陸續存入15個數據。假設下游模組B每個週期讀取FIFO中的一個數據,因為當FIFO內的資料data_cnt小於5時,afull才會無效(為0),因此在T+15和T+30的時刻內,下游電路B只能讀5個數據,因此會造成資料斷流,影響電路效能。

 

為保證電路效能,在T+15到T+30這個時間段內應該有15個數據可讀,因此afull_cnt應該不小於15(M+N)。所以FIFO深度應該不小於2*(M+N)