1、為什么需要計(jì)算FIFO的最小深度
因?yàn)楣P試??肌?/p>
開玩笑的。首先我們來(lái)想下FIFO有哪些作用?我大概總結(jié)下FIFO的幾個(gè)重要作用:
解決不同時(shí)鐘域傳輸?shù)膯?wèn)題
用來(lái)緩存一定量的數(shù)據(jù)
解決位寬不匹配的問(wèn)題
FIFO最常被用來(lái)解決寫、讀不匹配的問(wèn)題(時(shí)鐘、位寬),總結(jié)下來(lái),其實(shí)FIFO最大的作用就是緩沖。既然是緩沖,那么就要知道這個(gè)緩存的空間到底需要多大。接下來(lái)的討論,都建立在滿足一次FIFO突發(fā)傳輸?shù)幕A(chǔ)上。連續(xù)無(wú)止境的突發(fā)不考慮。比如寫時(shí)鐘100M,讀時(shí)鐘50M,無(wú)限制的讀寫,那么FIFO的深度只能是無(wú)窮大了,因?yàn)閷懕茸x快,F(xiàn)IFO一定永遠(yuǎn)都不夠用。所以在實(shí)際運(yùn)用中,不會(huì)存在無(wú)限制的對(duì)FIFO進(jìn)行讀寫。如果這樣的話,F(xiàn)IFO就變成了一個(gè)“存儲(chǔ)器件”,而不是一個(gè)“緩存器件”,對(duì)于FIFO的這種用法無(wú)疑是毫無(wú)意義的。
2、實(shí)例
2.1、寫時(shí)鐘快、讀時(shí)鐘慢
2.1.1、無(wú)間斷的寫、讀操作
條件:
寫入時(shí)鐘頻率 fA = 80MHz;讀取時(shí)鐘頻率 fB = 50MHz. 一次寫入的突發(fā)長(zhǎng)度120
讀寫操作不間斷
解法:
寫入一個(gè)數(shù)據(jù)需要的時(shí)間:1/80MHz = 12.5ns;讀取一個(gè)數(shù)據(jù)需要的時(shí)間:1/50MHz = 20ns
寫入120個(gè)數(shù)據(jù),需要的時(shí)間:120 * 12.5ns = 1500ns
在寫入全部數(shù)據(jù)所需的時(shí)間(1500ns)內(nèi),可以讀取出的數(shù)據(jù)數(shù):1500ns / 20ns = 75
所以一次突發(fā),一共需要寫入120數(shù)據(jù),在這段時(shí)間內(nèi)可以被讀出75數(shù)據(jù),剩下的數(shù)據(jù)就是需要使用FIFO來(lái)緩存,所以FIFO的最小深度為120 - 75 = 45
2.1.2、間斷的寫、讀操作
條件:
寫入時(shí)鐘頻率 fA = 80MHz;讀取時(shí)鐘頻率 fB = 50MHz. 一次寫入的突發(fā)長(zhǎng)度120。
每?jī)纱螌懭氩僮鏖g隔1個(gè)寫時(shí)鐘周期,每?jī)纱巫x取操作間隔3個(gè)讀時(shí)鐘周期。
解法:
每?jī)纱螌懭氩僮鏖g隔1個(gè)寫時(shí)鐘周期,等于每?jī)蓚€(gè)寫時(shí)鐘周期才寫入1個(gè)數(shù)據(jù),即等價(jià)的寫入時(shí)鐘頻率 fA'=40MHz,寫入一個(gè)數(shù)據(jù)需要的時(shí)間:1/40MHz = 25ns
每?jī)纱巫x取操作間隔3個(gè)讀時(shí)鐘周期,等于每4個(gè)寫時(shí)鐘周期才讀取1個(gè)數(shù)據(jù),即等價(jià)的讀取時(shí)鐘頻率 fB'=12.5MHz,讀取一個(gè)數(shù)據(jù)需要的時(shí)間:1/12.5MHz = 80ns
寫入120個(gè)數(shù)據(jù),需要的時(shí)間:120 * 25ns = 3000ns
在寫入全部數(shù)據(jù)所需的時(shí)間(3000ns)內(nèi),可以讀取出的數(shù)據(jù)數(shù):3000ns / 80ns = 37.5 ≈ 37(要向下取整,不然有1個(gè)數(shù)據(jù)會(huì)丟)
所以一次突發(fā),一共需要寫入120數(shù)據(jù),在這段時(shí)間內(nèi)可以被讀出37數(shù)據(jù),剩下的數(shù)據(jù)就是需要使用FIFO來(lái)緩存,所以FIFO的最小深度為120 - 37 = 83
2.2、寫時(shí)鐘慢、讀時(shí)鐘快
2.2.1、無(wú)間斷的寫、讀操作
條件:
寫入時(shí)鐘頻率 fA = 30MHz;讀取時(shí)鐘頻率 fB = 50MHz. 一次寫入的突發(fā)長(zhǎng)度120
寫、讀操作無(wú)間斷
解法:
因?yàn)樽x操作的頻率快于寫操作的頻率,所以數(shù)據(jù)一旦被寫入FIFO后很快就會(huì)被讀走,所以FIFO的最小深度為1即可
2.2.2、間斷的寫、讀操作
條件:
寫入時(shí)鐘頻率 fA = 30MHz;讀取時(shí)鐘頻率 fB = 50MHz. 一次寫入的突發(fā)長(zhǎng)度120。
每?jī)纱螌懭氩僮鏖g隔1個(gè)寫時(shí)鐘周期,每?jī)纱巫x取操作間隔3個(gè)讀時(shí)鐘周期。
解法:
每?jī)纱螌懭氩僮鏖g隔1個(gè)寫時(shí)鐘周期,等于每?jī)蓚€(gè)寫時(shí)鐘周期才寫入1個(gè)數(shù)據(jù),即等價(jià)的寫入時(shí)鐘頻率 fA'=15MHz,寫入一個(gè)數(shù)據(jù)需要的時(shí)間:1/15MHz = 66.667ns
每?jī)纱巫x取操作間隔3個(gè)讀時(shí)鐘周期,等于每4個(gè)寫時(shí)鐘周期才讀取1個(gè)數(shù)據(jù),即等價(jià)的讀取時(shí)鐘頻率 fB'=12.5MHz,讀取一個(gè)數(shù)據(jù)需要的時(shí)間:1/12.5MHz = 80ns
寫入120個(gè)數(shù)據(jù),需要的時(shí)間:120 * 66.667ns = 8000ns
在寫入全部數(shù)據(jù)所需的時(shí)間(8000ns)內(nèi),可以讀取出的數(shù)據(jù)數(shù):8000ns / 80ns = 100
所以一次突發(fā),一共需要寫入120數(shù)據(jù),在這段時(shí)間內(nèi)可以被讀出100數(shù)據(jù),剩下的數(shù)據(jù)就是需要使用FIFO來(lái)緩存,所以FIFO的最小深度為120 - 100 = 20
2.3、寫時(shí)鐘、讀時(shí)鐘一樣快
2.3.1、無(wú)間斷的寫、讀操作
條件:
寫入時(shí)鐘頻率 fA = 讀取時(shí)鐘頻率 fB = 30MHz。一次寫入的突發(fā)長(zhǎng)度120。
寫、讀操作無(wú)間斷
解法:
1、假設(shè)讀、寫時(shí)鐘無(wú)位差、則兩個(gè)時(shí)鐘同頻、同相,是同步信號(hào),故可以直接對(duì)接操作,無(wú)需FIFO
2、若讀、寫時(shí)鐘存在相位差,則被寫入的數(shù)據(jù)在一個(gè)時(shí)鐘周期內(nèi)會(huì)被讀走,所以FIFO的最小深度為1即可
2.3.2、間斷的寫、讀操作
條件:
寫入時(shí)鐘頻率 fA = 讀取時(shí)鐘頻率 fB = 50MHz。一次寫入的突發(fā)長(zhǎng)度120。
每?jī)纱螌懭氩僮鏖g隔1個(gè)時(shí)鐘周期,每?jī)纱巫x取操作間隔3個(gè)時(shí)鐘周期。
解法:
每?jī)纱螌懭氩僮鏖g隔1個(gè)寫時(shí)鐘周期,等于每?jī)蓚€(gè)寫時(shí)鐘周期才寫入1個(gè)數(shù)據(jù),即等價(jià)的寫入時(shí)鐘頻率 fA'=25MHz,寫入一個(gè)數(shù)據(jù)需要的時(shí)間:1/25MHz = 40ns
每?jī)纱巫x取操作間隔3個(gè)讀時(shí)鐘周期,等于每4個(gè)寫時(shí)鐘周期才讀取1個(gè)數(shù)據(jù),即等價(jià)的讀取時(shí)鐘頻率 fB'=12.5MHz,讀取一個(gè)數(shù)據(jù)需要的時(shí)間:1/12.5MHz = 80ns
寫入120個(gè)數(shù)據(jù),需要的時(shí)間:120 * 40ns = 4800ns
在寫入全部數(shù)據(jù)所需的時(shí)間(4800ns)內(nèi),可以讀取出的數(shù)據(jù)數(shù):4800ns / 80ns = 60
所以一次突發(fā),一共需要寫入120數(shù)據(jù),在這段時(shí)間內(nèi)可以被讀出60數(shù)據(jù),剩下的數(shù)據(jù)就是需要使用FIFO來(lái)緩存,所以FIFO的最小深度為120 - 60 = 60
2.4、特定時(shí)間內(nèi)時(shí)間寫、讀速率固定
條件:
每100個(gè)時(shí)鐘寫入80個(gè)數(shù)據(jù),剩余20個(gè)隨機(jī)值(無(wú)效)
每10個(gè)時(shí)鐘讀出8個(gè)數(shù)據(jù)
一次寫入的突發(fā)長(zhǎng)度160
解法:
因?yàn)槊?00個(gè)時(shí)鐘內(nèi),僅寫入80個(gè)數(shù)據(jù),而這80個(gè)數(shù)據(jù)可能任意分布,所以160個(gè)數(shù)據(jù)的寫入可能有以下幾種情況:
可以看到,第4種情況是最極端的:一次性需要寫入160數(shù)據(jù),時(shí)間為160個(gè)時(shí)鐘
160個(gè)時(shí)鐘內(nèi),讀出的數(shù)據(jù)是160*8/10 = 128
所以一共需要寫入160數(shù)據(jù),在這段時(shí)間內(nèi)可以被讀出128數(shù)據(jù),剩下的數(shù)據(jù)就是需要使用FIFO來(lái)緩存,所以FIFO的最小深度為160 - 128 = 32
3、總結(jié)
FIFO是用來(lái)緩存的,不是用來(lái)存數(shù)據(jù)的,當(dāng)寫快讀慢時(shí),無(wú)止境的對(duì)FIFO操作是沒(méi)有意義的(不管FIFO多大,一定都會(huì)被寫滿)
FIFO深度的計(jì)算建立在滿足一次突發(fā)傳輸?shù)幕A(chǔ)上
當(dāng)讀快寫滿或者讀寫一樣快時(shí),F(xiàn)IFO的深度最多只需要1
當(dāng)寫快讀慢時(shí),在一次突發(fā)傳輸時(shí),因?yàn)樽x慢,所以肯定無(wú)法全部讀走。全部寫入的數(shù)據(jù)量 - 已經(jīng)被讀走的數(shù)據(jù)量 = 需要緩存到FIFO的數(shù)據(jù)量,即異步FIFO的最小深度
審核編輯:湯梓紅
-
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4495瀏覽量
87024 -
fifo
+關(guān)注
關(guān)注
3文章
400瀏覽量
44574 -
計(jì)算
+關(guān)注
關(guān)注
2文章
453瀏覽量
39191
發(fā)布評(píng)論請(qǐng)先 登錄
智多晶FIFO_Generator IP介紹

AXI接口FIFO簡(jiǎn)介

解鎖TSMaster fifo函數(shù):報(bào)文讀取的高效方法

FIFO IP核的使用教程

請(qǐng)問(wèn)DAC5682z內(nèi)部FIFO深度為多少,8SAMPLE具體怎么理解?
DAC3482在按字寬度輸入模式下,為啥SYNC信號(hào)每16*n個(gè)FIFO采樣重復(fù)一次?
FIFO Generator的Xilinx官方手冊(cè)

FIFO的深度應(yīng)該怎么計(jì)算

FPGA加速深度學(xué)習(xí)模型的案例
Efinity FIFO IP仿真問(wèn)題 -v1

基于Python的深度學(xué)習(xí)人臉識(shí)別方法
簡(jiǎn)單認(rèn)識(shí)深度神經(jīng)網(wǎng)絡(luò)
如何在CYUSB2014-BZXC中以8位模式配置Slave FIFO?
深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)領(lǐng)域的應(yīng)用
同步FIFO和異步FIFO區(qū)別介紹

評(píng)論