FIFO 最小深度計(jì)算
例子 - 1:f_wr 》 f_rd,連續(xù)讀寫
寫時(shí)鐘80MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫入120個(gè)數(shù)據(jù)。
連續(xù)寫入和連續(xù)讀取,無空閑時(shí)間,寫入后立即開始讀取 ,讀寫寬度相同。
Sol:
寫速率 》 讀速率,F(xiàn)IFO遲早會(huì)被寫滿,但它要求至少寫入120個(gè)數(shù)據(jù)后FIFO不滿。
寫入120個(gè)數(shù)據(jù)耗時(shí) 120 * 12.5 ns = 1500 ns。
寫入開始后FIFO內(nèi)數(shù)據(jù)以 30M/Date 速率增加。
數(shù)據(jù)增加持續(xù)了 1500 ns ,F(xiàn)IFO最小深度:0.0000015 * 30000000 = 45
例子-1 總結(jié)公式:
例子 - 2 :f_wr 》 f_rd & 寫速率 》 讀速率,非連續(xù)讀寫
寫時(shí)鐘80MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫入120個(gè)數(shù)據(jù)。
寫入后立即開始讀取 ,讀寫寬度相同。
2個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)寫入(寫速率:80M * 1/2 = 40M)。
4個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)讀出(讀速率:50M * 1/4 = 12.5M)。
Sol:
FIFO遲早會(huì)被寫滿 ,但它要求至少寫入120個(gè)數(shù)據(jù)后FIFO不滿。
寫一個(gè)數(shù)據(jù)耗時(shí):2/80MHz = 25ns
需要至少寫入120數(shù)據(jù),耗時(shí):25 * 120 = 3000ns
例子2只是讀寫速率和例子1不同,可以直接用的公式(1) :
FIFO_DEPTH 》 (寫速率-讀速率)* Burst_Len/寫速率 = (40M-12.5M)*120/40M = 83
例子 - 3:f_wr 《 f_rd ,連續(xù)讀寫
寫時(shí)鐘30MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫入120個(gè)數(shù)據(jù)。
連續(xù)寫入和連續(xù)讀取,無空閑時(shí)間,寫入后立即開始讀取 ,讀寫寬度相同。
Sol:
FIFO_DEPTH 》 1 即可。讀速率比寫速率快,數(shù)據(jù)不會(huì)滯留。
例子 -4:f_wr 《 f_rd & 寫速率 》 讀速率,非連續(xù)讀寫
寫時(shí)鐘30MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫入120個(gè)數(shù)據(jù)。
2個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)寫入(寫速率:30M * 1/2 = 15M)。
4個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)讀出(讀速率:50M * 1/4 = 12.5M)。
Sol:
雖然寫時(shí)鐘小于讀時(shí)鐘頻率,但是,宏觀上寫速率大于讀速率。可以直接用的公式(1) :
FIFO_DEPTH 》 (寫速率-讀速率)* Burst_Len/寫速率 = (15M-12.5M)*120/15M = 20
例子 1-4總結(jié)
當(dāng)滿足以下所有條件時(shí),就可使用公式(1):
寫速率 》 讀速率時(shí)。
讀寫有效數(shù)據(jù)占比 《= 0.5,且 有效數(shù)據(jù)均勻分布在所有時(shí)間上。或者說,無論微觀時(shí)間、還是宏觀時(shí)間上,讀寫速率近似于 時(shí)鐘頻率 * 有效數(shù)據(jù)占比時(shí)。
當(dāng)每100個(gè)時(shí)鐘寫80個(gè)數(shù)據(jù)時(shí),微觀時(shí)間上的寫速率與數(shù)據(jù)排列有關(guān),不能將宏觀寫速率帶入式子(1)
例子 - 5
讀寫時(shí)鐘頻率相同。
100個(gè)時(shí)鐘有80個(gè)數(shù)據(jù)寫入。
10個(gè)時(shí)鐘有8個(gè)數(shù)據(jù)讀出。
Burst_Len = 160,也就是要求至少安全寫入160個(gè)數(shù)據(jù) 。
Sol:
宏觀上,讀寫速率相同;當(dāng)FIFO足夠深時(shí),F(xiàn)IFO不會(huì)溢出。
微觀上,寫速率有多種情況:
為了求出安全的最小FIFO深度,我們需要考慮最差的情況。
最差的情況下,寫入和讀出速度應(yīng)該相差最大。寫入要最快,讀出要最慢。FIFO內(nèi)的數(shù)據(jù)增加最快。
從上表中可得出:最大寫入速率是case 4(back to back write,中間沒有空閑,速率為時(shí)鐘頻率 f,寫入了160個(gè) )。
讀出要最慢,在寫160個(gè)數(shù)據(jù)期間,讀相比于寫端可以認(rèn)為是速率均勻的,速率為 f*8/10,讀出了160 * 8 /10 = 128個(gè)。
因此 FIFO_DEPTH 》 160 - 128 = 32。用公式(1)也可以得到這個(gè)結(jié)果,寫速率帶入f而不是f*8/10。
總結(jié):求解步驟
考慮最差的情況下,寫入和讀出速度應(yīng)該相差最大。寫入要最快,讀出要最慢。FIFO內(nèi)的數(shù)據(jù)增加最快。
只考慮宏觀上寫入速率 》= 讀出速率的情況。
確定寫入Burst_Len大小。Burst_Len指的是一段連續(xù)寫入?yún)^(qū)間,由于沒有空隙這段時(shí)間寫入速率最大最多。一定要對(duì)具體的數(shù)據(jù)分布情況具體分析,Burst_Len一定是最長(zhǎng)的一段連續(xù)寫入?yún)^(qū)間。
在微觀上,確定最大寫入速率。Burst_Len足夠長(zhǎng)時(shí),寫入速率 = 寫時(shí)鐘頻率(back to back write)。而在例子 - 2中,Burst_Len很短,沒有back to back write,寫入速率 = 寫時(shí)鐘頻率 * 寫有效占比。
在微觀上,確定最小讀出速率。一般認(rèn)為讀出速率是均勻的,讀出速率 = 讀時(shí)鐘頻率 * 讀有效占比。
帶入公式(1)計(jì)算。
Burst_Len足夠長(zhǎng)時(shí),將上面讀出寫入速率帶入公式(1),可得到網(wǎng)上討論最多的FIFO深度求解公式:
不建議直接用公式(2)無腦計(jì)算,上式只有Burst_Len足夠長(zhǎng),發(fā)生back to back write時(shí)才適用。建議根據(jù)1~6步驟,判斷微觀寫速率是否均勻,帶入式子(1)計(jì)算。
編輯:jq
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6898瀏覽量
88836 -
fifo
+關(guān)注
關(guān)注
3文章
387瀏覽量
43555 -
計(jì)算
+關(guān)注
關(guān)注
2文章
445瀏覽量
38737
原文標(biāo)題:FIFO 最小深度計(jì)算
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論