大數(shù)據(jù)服務(wù)上云的思考">大數(shù)據(jù)服務(wù)上云的思考
936
2025-04-01
IC/FPGA邏輯設(shè)計筆試題中最常見的體型莫過于FIFO最小深度的計算了,以前看到過計算FIFO最小深度,需要代入公式,直到看到這篇文檔,才覺得使用邏輯分析的方法來看更能讓人理解的更為深刻。
計算FIFO深度最小深度的總的思路大概是:
算出寫時鐘周期,讀時鐘周期;
從描述中提取出突發(fā)寫數(shù)據(jù)個數(shù)(Burst Length),一次寫這么多數(shù)據(jù)需要多久?同時,這么長時間,讀了多少數(shù)據(jù)?
之后,Burst length 減去 讀出的數(shù)據(jù),就是FIFO的最小深度。
理解這些東西且看下文,下文是從上述文檔中拿出來的例子,本人邊做邊寫,讓自己加深印象,同時更方便大伙那就更好了。
注意:突發(fā)的意思是數(shù)據(jù)在那個時候集中過來。。。(大概可以這么理解)
目錄
概述:
第一種情況:
第二種情況:
第三種情況:
第四種情況:
第五種情況:
第六種情況:
第7種情況:
最后一種情況:
寫在最后:
概述:
當一些數(shù)據(jù)必須從一個模塊傳輸?shù)搅硪粋€模塊以避免數(shù)據(jù)丟失時,我們需要在不同時鐘域工作的兩個模塊之間使用異步FIFO。 只有當您讀取速度慢并且寫入速度很快以緩沖較慢模塊未讀取的數(shù)據(jù)時,才需要FIFO。
FIFO的深度(大小)應該是這樣的,F(xiàn)IFO可以存儲較慢模塊不能讀取的所有數(shù)據(jù)。 FIFO僅在數(shù)據(jù)突發(fā)時才有效; 你不能有連續(xù)的數(shù)據(jù)輸入和輸出。 如果存在連續(xù)的數(shù)據(jù)流,那么所需FIFO的大小應該是無限的。 您需要知道突發(fā)速率,突發(fā)大小,頻率等,以確定FIFO的適當大小。
第一種情況:
寫時鐘快于讀時鐘,寫和讀的過程中沒有空閑周期,也即在突發(fā)(burst)過程中,讀和寫都在各自的時鐘域內(nèi)連續(xù)進行。
例:
分析過程:
寫時鐘周期T_A = 1000/80 ns = 12.5ns;同理讀時鐘周期為20ns;
突發(fā)寫長度為120個數(shù)據(jù),寫120個數(shù)據(jù)耗時120*12.5 = 1500ns;
1500ns時間內(nèi)讀出數(shù)據(jù)1500/20ns = 75個;
故最小FIFO深度為120 - 75 = 45;
第二種情況:
寫時鐘頻率大于讀時鐘頻率,但在讀寫的過程中存在空閑周期。
例如:
分析:
寫時鐘周期T_A = 12.5ns,讀時鐘周期為T_B = 20ns;
兩個寫時鐘寫一個數(shù)據(jù),也就是寫一個數(shù)據(jù)需要時間2*T_A = 25ns,那么由于突發(fā)寫數(shù)據(jù)個數(shù)為120個,寫這么多數(shù)據(jù)需要時間120*25ns = 3000ns;
4個讀時鐘周期讀一個數(shù)據(jù),因此讀一個數(shù)據(jù)需要時間80ns,3000ns讀了3000/80 = 37.5個數(shù)據(jù)(0.5不算一個數(shù)據(jù),沒讀完整),約等于37個數(shù)據(jù)。
所以,F(xiàn)IFO的最小深度為120 - 37 = 83;
第三種情況:
寫時鐘慢于讀時鐘,且讀寫過程中沒有空閑周期;
例如:
分析:
這種情況下永遠也不會發(fā)生數(shù)據(jù)丟失的情況;
fifo的深度為1即可。
第四種情況:
寫時鐘頻率小于讀時鐘頻率,但讀寫過程中存在空閑周期;
例如:
分析:
寫時鐘周期1000/30 ns = 100/3 ns;
讀時鐘周期 20ns;
寫一個數(shù)據(jù)需要2個時鐘,也就是200/3 ns;
讀一個數(shù)據(jù)需要4個時鐘,也就是80 ns;
寫120個數(shù)據(jù)需要時間8000ns,這段時間內(nèi)讀出數(shù)據(jù)8000/80 = 100個;
因此,F(xiàn)IFO的最小深度為120 - 100 = 20;
第五種情況:
讀寫時鐘速率相同,且無空閑時鐘。
例如:
分析:
如果讀寫時鐘之間沒有相位差,則不需要FIFO就可以進行讀寫呀;
如果二者存在相位差,只需要FIFO的深度為1即可。
第六種情況:
讀寫時鐘頻率一致,但在讀寫過程中存在空閑周期。
例如:
分析:兩個時鐘寫一個數(shù)據(jù),需要時間40ns;
4個時鐘讀一個數(shù)據(jù),需要80ns;
由于突發(fā)長度為120,需要120*40 = 4800ns寫完;這段時間讀出數(shù)據(jù)個數(shù):4800/80 = 60;
所以,F(xiàn)IFO最小深度為120 - 60 = 60;
第7種情況:
特定條件下,最壞情況分析FIFO最小深度;
例如:
分析:
首先,從條件可知,寫頻率等于讀頻率;
其次,讀寫可以在如下限制下的任意時刻發(fā)生:
“writing of 80 data items will be completed in 100 cycles” and ”reading of 8 data items will be completed in 10 cycles”.
可能的情況有:
為了獲得更安全的FIFO深度,我們需要考慮最壞的情況,以防數(shù)據(jù)丟失;
對于最壞的情況,寫入和讀取之間的數(shù)據(jù)速率之間的差異應該是最大的。 因此,對于寫操作,應考慮最大數(shù)據(jù)速率,對于讀操作,應考慮最小數(shù)據(jù)速率。
從上表可以看出,最快的寫數(shù)據(jù)速率應該為第4種情況,寫操作在最小的時間內(nèi)完成;
由于突然寫長度為160,所以160個時鐘寫160個數(shù)據(jù);
由于讀速度為10個時鐘讀8個數(shù)據(jù),因此一個數(shù)據(jù)需要10/8個時鐘;
所以160個時鐘讀了160*8/10 = 128個數(shù)據(jù);
所以FIFO的最小深度為160-128=32.
最后一種情況:
條件轉(zhuǎn)彎抹角的給出,需要自己提取關(guān)鍵信息;(一般考試都是這種,提出出來關(guān)鍵信息后,在按照上面的方法來分析即可)
例如:
假如clkA = 25MHz,則CLKB = 100MHz;
TA= 40ns, TB = 10ns;
en_B = 100*40 = 4000ns;占空比為1/4;
我們認為B為寫時鐘,寫使能時間為4000/4 = 1000ns,則突發(fā)寫長度為1000/10 = 100個數(shù)據(jù);
在1000ns內(nèi)讀出數(shù)據(jù)為1000/40 = 25個數(shù)據(jù),所以FIFO最小深度為100 - 25 = 75
寫在最后:
不知不覺間,從剛開始建立IC/FPGA筆試面試交流群到現(xiàn)在,陸續(xù)已經(jīng)加入100多人,很多是從CSDN來的,也有一些各位邀請的。
從和各位的討論中,覺得受益匪淺,這不僅僅是技術(shù)上的收益,同時還開闊了眼界,增長了見識,可謂是英雄豪杰云集于此,真是榮幸。
如果我是王勃,定為此寫一篇類似的滕王閣序。。。(哈哈)
最后,還是繼續(xù)歡迎路過的同行俊杰能夠加入進來,我們并不孤單。加我微信,拉你進群(ljs521615)
FPGA
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。