FIFO 最小深度計(jì)算
例子 - 1:f_wr 》 f_rd,連續(xù)讀寫(xiě)
寫(xiě)時(shí)鐘80MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫(xiě)入120個(gè)數(shù)據(jù)。
連續(xù)寫(xiě)入和連續(xù)讀取,無(wú)空閑時(shí)間,寫(xiě)入后立即開(kāi)始讀取 ,讀寫(xiě)寬度相同。
Sol:
寫(xiě)速率 》 讀速率,F(xiàn)IFO遲早會(huì)被寫(xiě)滿(mǎn),但它要求至少寫(xiě)入120個(gè)數(shù)據(jù)后FIFO不滿(mǎn)。
寫(xiě)入120個(gè)數(shù)據(jù)耗時(shí) 120 * 12.5 ns = 1500 ns。
寫(xiě)入開(kāi)始后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 & 寫(xiě)速率 》 讀速率,非連續(xù)讀寫(xiě)
寫(xiě)時(shí)鐘80MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫(xiě)入120個(gè)數(shù)據(jù)。
寫(xiě)入后立即開(kāi)始讀取 ,讀寫(xiě)寬度相同。
2個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)寫(xiě)入(寫(xiě)速率:80M * 1/2 = 40M)。
4個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)讀出(讀速率:50M * 1/4 = 12.5M)。
Sol:
FIFO遲早會(huì)被寫(xiě)滿(mǎn) ,但它要求至少寫(xiě)入120個(gè)數(shù)據(jù)后FIFO不滿(mǎn)。
寫(xiě)一個(gè)數(shù)據(jù)耗時(shí):2/80MHz = 25ns
需要至少寫(xiě)入120數(shù)據(jù),耗時(shí):25 * 120 = 3000ns
例子2只是讀寫(xiě)速率和例子1不同,可以直接用的公式(1) :
FIFO_DEPTH 》 (寫(xiě)速率-讀速率)* Burst_Len/寫(xiě)速率 = (40M-12.5M)*120/40M = 83
例子 - 3:f_wr 《 f_rd ,連續(xù)讀寫(xiě)
寫(xiě)時(shí)鐘30MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫(xiě)入120個(gè)數(shù)據(jù)。
連續(xù)寫(xiě)入和連續(xù)讀取,無(wú)空閑時(shí)間,寫(xiě)入后立即開(kāi)始讀取 ,讀寫(xiě)寬度相同。
Sol:
FIFO_DEPTH 》 1 即可。讀速率比寫(xiě)速率快,數(shù)據(jù)不會(huì)滯留。
例子 -4:f_wr 《 f_rd & 寫(xiě)速率 》 讀速率,非連續(xù)讀寫(xiě)
寫(xiě)時(shí)鐘30MHz。
讀時(shí)鐘50MHz。
Burst_Len = 120,也就是要求至少安全寫(xiě)入120個(gè)數(shù)據(jù)。
2個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)寫(xiě)入(寫(xiě)速率:30M * 1/2 = 15M)。
4個(gè)時(shí)鐘中有1個(gè)數(shù)據(jù)讀出(讀速率:50M * 1/4 = 12.5M)。
Sol:
雖然寫(xiě)時(shí)鐘小于讀時(shí)鐘頻率,但是,宏觀(guān)上寫(xiě)速率大于讀速率??梢灾苯佑玫墓剑?) :
FIFO_DEPTH 》 (寫(xiě)速率-讀速率)* Burst_Len/寫(xiě)速率 = (15M-12.5M)*120/15M = 20
例子 1-4總結(jié)
當(dāng)滿(mǎn)足以下所有條件時(shí),就可使用公式(1):
寫(xiě)速率 》 讀速率時(shí)。
讀寫(xiě)有效數(shù)據(jù)占比 《= 0.5,且 有效數(shù)據(jù)均勻分布在所有時(shí)間上?;蛘哒f(shuō),無(wú)論微觀(guān)時(shí)間、還是宏觀(guān)時(shí)間上,讀寫(xiě)速率近似于 時(shí)鐘頻率 * 有效數(shù)據(jù)占比時(shí)。
當(dāng)每100個(gè)時(shí)鐘寫(xiě)80個(gè)數(shù)據(jù)時(shí),微觀(guān)時(shí)間上的寫(xiě)速率與數(shù)據(jù)排列有關(guān),不能將宏觀(guān)寫(xiě)速率帶入式子(1)
例子 - 5
讀寫(xiě)時(shí)鐘頻率相同。
100個(gè)時(shí)鐘有80個(gè)數(shù)據(jù)寫(xiě)入。
10個(gè)時(shí)鐘有8個(gè)數(shù)據(jù)讀出。
Burst_Len = 160,也就是要求至少安全寫(xiě)入160個(gè)數(shù)據(jù) 。
Sol:
宏觀(guān)上,讀寫(xiě)速率相同;當(dāng)FIFO足夠深時(shí),F(xiàn)IFO不會(huì)溢出。
微觀(guān)上,寫(xiě)速率有多種情況:
為了求出安全的最小FIFO深度,我們需要考慮最差的情況。
最差的情況下,寫(xiě)入和讀出速度應(yīng)該相差最大。寫(xiě)入要最快,讀出要最慢。FIFO內(nèi)的數(shù)據(jù)增加最快。
從上表中可得出:最大寫(xiě)入速率是case 4(back to back write,中間沒(méi)有空閑,速率為時(shí)鐘頻率 f,寫(xiě)入了160個(gè) )。
讀出要最慢,在寫(xiě)160個(gè)數(shù)據(jù)期間,讀相比于寫(xiě)端可以認(rèn)為是速率均勻的,速率為 f*8/10,讀出了160 * 8 /10 = 128個(gè)。
因此 FIFO_DEPTH 》 160 - 128 = 32。用公式(1)也可以得到這個(gè)結(jié)果,寫(xiě)速率帶入f而不是f*8/10。
總結(jié):求解步驟
考慮最差的情況下,寫(xiě)入和讀出速度應(yīng)該相差最大。寫(xiě)入要最快,讀出要最慢。FIFO內(nèi)的數(shù)據(jù)增加最快。
只考慮宏觀(guān)上寫(xiě)入速率 》= 讀出速率的情況。
確定寫(xiě)入Burst_Len大小。Burst_Len指的是一段連續(xù)寫(xiě)入?yún)^(qū)間,由于沒(méi)有空隙這段時(shí)間寫(xiě)入速率最大最多。一定要對(duì)具體的數(shù)據(jù)分布情況具體分析,Burst_Len一定是最長(zhǎng)的一段連續(xù)寫(xiě)入?yún)^(qū)間。
在微觀(guān)上,確定最大寫(xiě)入速率。Burst_Len足夠長(zhǎng)時(shí),寫(xiě)入速率 = 寫(xiě)時(shí)鐘頻率(back to back write)。而在例子 - 2中,Burst_Len很短,沒(méi)有back to back write,寫(xiě)入速率 = 寫(xiě)時(shí)鐘頻率 * 寫(xiě)有效占比。
在微觀(guān)上,確定最小讀出速率。一般認(rèn)為讀出速率是均勻的,讀出速率 = 讀時(shí)鐘頻率 * 讀有效占比。
帶入公式(1)計(jì)算。
Burst_Len足夠長(zhǎng)時(shí),將上面讀出寫(xiě)入速率帶入公式(1),可得到網(wǎng)上討論最多的FIFO深度求解公式:
不建議直接用公式(2)無(wú)腦計(jì)算,上式只有Burst_Len足夠長(zhǎng),發(fā)生back to back write時(shí)才適用。建議根據(jù)1~6步驟,判斷微觀(guān)寫(xiě)速率是否均勻,帶入式子(1)計(jì)算。
編輯:jq
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6767瀏覽量
88640 -
fifo
+關(guān)注
關(guān)注
3文章
386瀏覽量
43468 -
計(jì)算
+關(guān)注
關(guān)注
2文章
440瀏覽量
38675
原文標(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)論