前言:
最近加的群里面有些萌新在進(jìn)行討論FIFO的深度的時(shí)候,覺(jué)得 FIFO的深度計(jì)算比較難以理解 。所以特出漫談FIFO系列,會(huì)涉及到FIFO的深度計(jì)算、同步/異步FIFO的設(shè)計(jì)等。
引言:
考慮如下的場(chǎng)景,是我們小學(xué)或者初中的時(shí)候?qū)W過(guò)的一個(gè)問(wèn)題:
場(chǎng)景一:
如上圖所示,假設(shè)入水口的 進(jìn)水量 2m3/h ,出水口的 出水量1m3/h ,假設(shè)水池容量10m3,開始的時(shí)候水池沒(méi)有水,水池多久會(huì)滿?
答:水池容量 / (進(jìn)水量 - 出水量) = 10 /(2 - 1) = 10 h
上面我們可以得出,對(duì)于進(jìn)水量比出水量多的情況下,無(wú)論水池容量大小是多少, 水池在一些時(shí)間之后會(huì)溢出 。
所以這也反映了,我們?cè)?a href="http://www.qldv.cn/v/tag/1055/" target="_blank">IC設(shè)計(jì)中,對(duì)于 FIFO這個(gè)蓄水池 ,輸入數(shù)據(jù)的個(gè)數(shù)一直大于輸出數(shù)據(jù)的個(gè)數(shù), FIFO總會(huì)溢出產(chǎn)生問(wèn)題 。
場(chǎng)景二:
如上圖所示,假設(shè)入水口的 進(jìn)水量 2m3/h ,出水口的 出水量1m3/h ,但是本場(chǎng)景和場(chǎng)景二不同的地方是:入水口的進(jìn)水時(shí)間是一天24h中的任意8小時(shí)進(jìn)水。出水口是半天12h中的任意2小時(shí)出水。
問(wèn)水池會(huì)溢出嗎?可以設(shè)計(jì)水池的深度讓水池不要溢出嗎?
(1)對(duì)于一天的進(jìn)水量來(lái)說(shuō),2 *8 = 16m3 ,對(duì)于一天的出水量來(lái)說(shuō),2 *2 = 4m3 , 進(jìn)水量 - 出水量 = 12 m3,所以水池會(huì)溢出。
(2)因?yàn)?輸入數(shù)據(jù)的個(gè)數(shù)一直大于輸出數(shù)據(jù)的個(gè)數(shù) (在當(dāng)前的時(shí)間)。所以無(wú)論設(shè)計(jì)多深的深度,水池都會(huì)溢出。
場(chǎng)景三 :
如上圖所示,假設(shè)入水口的時(shí)鐘是按照 分鐘來(lái)進(jìn)行間隔 ,對(duì)于入水口,每10分鐘流入8m3的水,對(duì)于出水口來(lái)說(shuō),每1.2分鐘流出1m3的水。
問(wèn)水池會(huì)溢出嗎?可以設(shè)計(jì)水池的深度讓水池不要溢出嗎?
(1)對(duì)于入水口來(lái)說(shuō),10分鐘8立方米 所以12分鐘9.6m3,對(duì)于出水口12分鐘10m3。所以通過(guò) 設(shè)定水池的深度可以讓水池不會(huì)溢出 。因?yàn)?strong>總體而言流出的水流是大于流入的水流。
概念1:back to back
對(duì)于入水口來(lái)說(shuō)有一種情況是需要注意的。這種情況如下圖:
在一次 完整的20分鐘之內(nèi) ,前面兩分鐘沒(méi)有進(jìn)水,最后的兩分鐘沒(méi)有進(jìn)水,進(jìn)水的時(shí)間集中在20分鐘內(nèi)的 連續(xù)16分鐘內(nèi) ,所以這段時(shí)間對(duì)于水池來(lái)說(shuō)壓力最大,因?yàn)樗卦O(shè)計(jì)的深度如果不考慮這個(gè)可能就會(huì)溢出,(這也就是所謂的流(水)量密集)
(2)考慮到概念1再回答場(chǎng)景三的第二個(gè)問(wèn)題:水池的深度應(yīng)該設(shè)計(jì)為:
**[1] **16m3 / 16 min = 進(jìn)水量的效率
[2] 1m3 / 1.2min = 出水量的效率
**[3] ** 水池的深度 = (進(jìn)水量效率 - 出水量效率) * **16 min ** = (16 /6 )m3
在計(jì)算水池深度我們可以得出 結(jié)論 :
所謂水池的深度在計(jì)算的時(shí)候,就是進(jìn)水量在背靠背這段時(shí)間內(nèi),進(jìn)水的所有量,減去背靠背這段時(shí)間內(nèi)出水口的出水量,在這背靠背的時(shí)間內(nèi),入水的量減去出水的量,就是內(nèi)部的水池應(yīng)該承受的水量。
正文:
FIFO計(jì)算問(wèn)題:
(1)假設(shè)FIFO的寫時(shí)鐘為100MHZ,讀時(shí)鐘為80Mhz,在FIFO輸入側(cè),每100個(gè)寫時(shí)鐘,寫入80個(gè)數(shù)據(jù),在讀數(shù)據(jù)側(cè),每個(gè)時(shí)鐘讀出一個(gè)數(shù)據(jù),問(wèn)FIFO設(shè)置為多少FIFO不會(huì)溢出??
[1] 在輸入數(shù)據(jù)背靠背的情況下,進(jìn)入( input**)FIFO的數(shù)據(jù)量:**
進(jìn)入FIFO的數(shù)據(jù)量:160個(gè) 消耗的時(shí)間:160 個(gè) 寫時(shí)鐘
[2] 在輸入數(shù)據(jù)背靠背的時(shí)間內(nèi),輸出( output )端口輸出的數(shù)據(jù)量 :
(1)因?yàn)檩斎胼敵龆丝诘臅r(shí)鐘頻率不同,所以先把輸入數(shù)據(jù)背靠背的時(shí)間換算到輸出數(shù)據(jù)端口的時(shí)鐘個(gè)數(shù):(160 *(1/100MHZ) * / * (1/80MHZ)=128讀時(shí)鐘周期
(2)則輸出端口在背靠背輸入的時(shí)間**內(nèi)輸出的數(shù)據(jù):128 *1 = 128個(gè)讀數(shù)據(jù)
[3] 則FIFO的深度為:
160 (輸入) - 128 (這段時(shí)間內(nèi)的輸出) = 32 (內(nèi)部水池FIFO應(yīng)該存的)
(2)假設(shè)FIFO的寫時(shí)鐘為wclk,讀時(shí)鐘為rclk,在FIFO輸入側(cè),每B個(gè)寫時(shí)鐘,寫入A個(gè)數(shù)據(jù),在讀數(shù)據(jù)側(cè),每Y個(gè)時(shí)鐘讀出X個(gè)數(shù)據(jù),問(wèn)FIFO設(shè)置為多少FIFO不會(huì)溢出??
[1] 在輸入數(shù)據(jù)背靠背的情況下,進(jìn)入( input**)FIFO的數(shù)據(jù)量:**
進(jìn)入FIFO的數(shù)據(jù)量:2A , 消耗的時(shí)間:2A * (1 / wclk)
**[2] 在輸入數(shù)據(jù)背靠背的時(shí)間內(nèi),輸出( output )端口輸出的數(shù)據(jù)量:
** (1)因?yàn)檩斎胼敵龆丝诘臅r(shí)鐘頻率不同,所以先把輸入數(shù)據(jù)背靠背的時(shí)間換算到輸出數(shù)據(jù)端口的時(shí)鐘個(gè)數(shù):**
讀時(shí)鐘周期個(gè)數(shù) :(2A * (1 / wclk))* / (1 / rclk)
(2)則輸出端口在背靠背輸入的時(shí)間內(nèi)輸出的數(shù)據(jù):
讀的數(shù)據(jù)個(gè)數(shù): (2A* (1 / wclk) / (1 / rclk) ** * (X / Y)
[3] 則FIFO的深度為:
輸入數(shù)據(jù)背靠背時(shí)間內(nèi)的輸入數(shù)據(jù) 減去輸入數(shù)據(jù)背靠背時(shí)間內(nèi)的輸出數(shù)據(jù)
2A - [(2A * (1 / wclk)) ** / (1 / rclk)] ** * (X / Y)
-
IC設(shè)計(jì)
+關(guān)注
關(guān)注
38文章
1302瀏覽量
104280 -
fifo
+關(guān)注
關(guān)注
3文章
389瀏覽量
43852 -
時(shí)鐘源
+關(guān)注
關(guān)注
0文章
93瀏覽量
16035
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論