本文首發(fā)于公眾號 FPGA開源工坊
FIFO是FPGA/IC設(shè)計中經(jīng)常使用到的模塊,它經(jīng)常被用在兩個模塊之間進(jìn)行數(shù)據(jù)的緩存,以避免數(shù)據(jù)在傳輸過程中丟失。同時FIFO也經(jīng)常被用在跨時鐘域處理中。
FIFO深度的計算是FPGA和IC筆面試中經(jīng)常被問到的一個問題,在這篇文章里面我們就來討論一下FIFO的深度應(yīng)該怎么計算。
FIFO的深度如果設(shè)置的小了就會有丟數(shù)的風(fēng)險,設(shè)置的大了會有資源的浪費(fèi)。
在討論如何計算FIFO的深度之前,應(yīng)該先明白一個概念,那就是突發(fā)傳輸 ,也就是burst。
突發(fā)傳輸
為什么要明確突發(fā)傳輸?shù)母拍钅兀课覀兗僭O(shè)有以下幾種開發(fā)場景。
場景一:讀比寫快
假如說一個FIFO在不間斷的向里面寫入數(shù)據(jù)和讀出數(shù)據(jù),并且向FIFO里面寫數(shù)據(jù)的速度比從FIFO里面讀數(shù)據(jù)的速度要慢,那么是不是這個FIFO永遠(yuǎn)都不會被寫滿了。
場景二:寫比讀快
假如說一個FIFO在不間斷的向里面寫入數(shù)據(jù)和讀出數(shù)據(jù),并且寫入的速度比讀出的速度快,那么是不是意味著這個FIFO的深度無論設(shè)置多少都終將會被寫滿。
所以不間斷在對FIFO不間斷的進(jìn)行讀寫的情形中討論FIFO深度是沒有意義的。
而我們要討論的FIFO深度其實(shí)是在突發(fā)傳輸中才是有意義的。
突發(fā)傳輸:就是說一個又一個的數(shù)據(jù)包,每一個數(shù)據(jù)包之間是有間隙的。
每一個數(shù)據(jù)包的長度叫做burst length 突發(fā)長度
FIFO的最小深度就與突發(fā)長度,讀寫速率有關(guān)系。
計算出來FIFO的深度關(guān)鍵就在于計算出來在讀寫突發(fā)的這段時間內(nèi),有多少數(shù)據(jù)沒有被讀走,這個數(shù)據(jù)的多少就是FIFO的最小深度。
計算公式
FIFO的深度可以用下面的公式計算出來
可以看到在上述公式里面的關(guān)鍵就是確定burst length。
下面就通過幾個例子來說明burst length的計算。
例子
例一
某大廠的筆試題:
設(shè)計同步FIFO,每100個cycle可以寫入80個數(shù)據(jù),每10個cycle可以讀出8個數(shù)據(jù),F(xiàn)IFO的深度至少為:
A: 16
B: 32
C: 64
D: 72
首先從題目中知道同步FIFO,所以rd_clk和wr_clk是一樣的。
第二每10個cycle中可以讀出8個數(shù)據(jù),那么rd_rate就是8/10也就是0.8
現(xiàn)在關(guān)鍵就是burst length的計算了。
每100個cycle可以寫入80個數(shù)據(jù),那么是不是意味著這80個數(shù)據(jù)可以在100個cycle的周期的任意時間寫進(jìn)FIFO里面。那么什么時候是連續(xù)寫入數(shù)據(jù)最多的極端情況呢,這個極端情況就是burst length最大的時候。
這個極端情況就是在連續(xù)的200個cycle中,是不是可以寫入160個數(shù)據(jù),那么這160個數(shù)據(jù)背靠背的連續(xù)寫入就是極端情況了。
如下圖所示:
在連續(xù)兩百個周期內(nèi),前20個周期空閑,中間160個時鐘向FIFO寫入數(shù)據(jù),最后20個時鐘再次空閑。
所以burst length就是160
所以FIFO的最小深度為
例二
有一個FIFO設(shè)計,輸入時鐘100MHz,輸出時鐘80MHz,輸入數(shù)據(jù)模式是固定的,其中1000個時鐘中有800個時鐘傳輸連續(xù)數(shù)據(jù),另外200個空閑,請問為了避免FIFO下溢/上溢,最小深度是多少
A: 320
B: 80
C: 160
D: 200
根據(jù)題意wr_clk是100, rd_clk是800。
因?yàn)檩斎霐?shù)據(jù)的模式是固定的,所以不用考慮背靠背的情況,所以burst length是800
題目中沒有說明在輸出的時候讀使能是否會拉低,所以我們認(rèn)為FIFO一直在輸出,也就是rd_rate是1
所以FIFO的深度為:
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602977 -
IC設(shè)計
+關(guān)注
關(guān)注
38文章
1295瀏覽量
103918 -
fifo
+關(guān)注
關(guān)注
3文章
387瀏覽量
43647 -
時鐘域
+關(guān)注
關(guān)注
0文章
52瀏覽量
9535
原文標(biāo)題:FPGA|IC筆面試--FIFO深度計算
文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論