17網(wǎng)店貨源網(wǎng)seo綜合查詢系統(tǒng)
文章目錄
- 前言
- 一、FIFO的最小深度
- 寫速度快于讀速度
- 寫速度等于或慢于讀速度
- 二、 舉例說明
- 1. FIFO寫時(shí)鐘為100MHz,讀時(shí)鐘為80Mhz
- 情況一:一共需要傳輸2000個(gè)數(shù)據(jù),求FIFO的最小深度
- 情況二:100個(gè)時(shí)鐘寫入80個(gè)數(shù)據(jù),1個(gè)時(shí)鐘讀1個(gè)數(shù)據(jù),求FIFO的最小深度
- 情況三:100個(gè)時(shí)鐘寫入80個(gè)數(shù)據(jù),3個(gè)時(shí)鐘讀1個(gè)數(shù)據(jù),求FIFO的最小深度
- 三、什么情況下不太需要考慮FIFO的最小深度
FIFO的設(shè)計(jì)可參考
FIFO的Verilog設(shè)計(jì)(一)——同步FIFO
FPGA的Verilog設(shè)計(jì)(二)——異步FIFO
參考文獻(xiàn)
[1]FIFO最小深度計(jì)算
前言
??在實(shí)際使用FIFO時(shí),需要考慮FIFO的深度如何設(shè)置,如果深度設(shè)置不當(dāng),可能會(huì)出現(xiàn)資源浪費(fèi)或者數(shù)據(jù)丟失等情況。下面將簡(jiǎn)要介紹FIFO的最小深度如何計(jì)算。
一、FIFO的最小深度
??由前兩篇文章對(duì)FIFO的介紹,FIFO常用于數(shù)據(jù)緩存、數(shù)據(jù)匹配和多bit跨時(shí)鐘域處理。
??因此在讀寫速度不匹配的時(shí)候可以使用FIFO,進(jìn)行數(shù)據(jù)緩存。當(dāng)讀速度慢于寫速度時(shí),FIFO可作為一個(gè)緩存單元。此時(shí)總會(huì)有部分?jǐn)?shù)據(jù)緩存在FIFO中,但是如果讀寫速度相差過大,就會(huì)導(dǎo)致數(shù)據(jù)溢出。所以在寫速度最大、讀速度最小時(shí),正好不導(dǎo)致FIFO出現(xiàn)數(shù)據(jù)溢出的最小深度。當(dāng)讀速度快于寫速度時(shí),FIFO更多的是起著變換時(shí)鐘域的作用。
寫速度快于讀速度
??FIFO寫速度快于讀速度模型的應(yīng)用場(chǎng)景為,無論是數(shù)據(jù)需不需要跨時(shí)鐘域,只要FIFO寫速度快于讀速度,FIFO寫入一個(gè)數(shù)據(jù)需要 t 1 t_1 t1?秒,讀出一個(gè)數(shù)據(jù)需要 t 2 t_2 t2?秒( t 1 < t 2 t_1<t_2 t1?<t2?),一共需要傳輸 n n n個(gè)數(shù)據(jù)。
??FIFO寫入n個(gè)數(shù)據(jù)的時(shí)間為 n t 1 nt_1 nt1?,FIFO在 n t 1 nt_1 nt1?時(shí)間內(nèi)讀出數(shù)據(jù)個(gè)數(shù)為 n t 1 t 2 \frac{nt_1}{t_2} t2?nt1??,此時(shí)FIFO中剩余數(shù)據(jù)個(gè)數(shù) ? n ? n t 1 t 2 ? \lceil n-\frac{nt_1}{t_2} \rceil ?n?t2?nt1???。
寫速度等于或慢于讀速度
??FIFO寫速度等于或慢于讀速度模型的應(yīng)用場(chǎng)景為,在多bit數(shù)據(jù)需要變換時(shí)鐘域情況下,FIFO的最小深度設(shè)置為1即可。因此FIFO只是起著變換時(shí)鐘域的作用。
二、 舉例說明
1. FIFO寫時(shí)鐘為100MHz,讀時(shí)鐘為80Mhz
情況一:一共需要傳輸2000個(gè)數(shù)據(jù),求FIFO的最小深度
??FIFO寫入一個(gè)數(shù)據(jù)需要 t 1 = 1 100 M t_1=\frac{1}{100M} t1?=100M1?s,讀出一個(gè)數(shù)據(jù)需要 t 2 = 1 80 M t_2=\frac{1}{80M} t2?=80M1?s
??FIFO寫入2000個(gè)數(shù)據(jù)需要的時(shí)間 n t 1 = 2000 100 M nt_1=\frac{2000}{100M} nt1?=100M2000?s
??FIFO在 n t 1 nt_1 nt1?時(shí)間內(nèi)讀出數(shù)據(jù)個(gè)數(shù)為 n u m r d = n t 1 t 2 = 2000 ? 80 M 100 M = 1600 num_{rd} = \frac{nt_1}{t_2} = \frac{2000*80M}{100M} = 1600 numrd?=t2?nt1??=100M2000?80M?=1600
??此時(shí)FIFO剩余數(shù)據(jù)個(gè)數(shù)為 n u m = 2000 ? n u m r d = 2000 ? 1600 = 400 num = 2000 - num_{rd} = 2000-1600 = 400 num=2000?numrd?=2000?1600=400
??可得FIFO最小深度為400。
情況二:100個(gè)時(shí)鐘寫入80個(gè)數(shù)據(jù),1個(gè)時(shí)鐘讀1個(gè)數(shù)據(jù),求FIFO的最小深度
??FIFO寫入一個(gè)數(shù)據(jù)需要 t 1 = 1 100 M t_1=\frac{1}{100M} t1?=100M1?s,讀出一個(gè)數(shù)據(jù)需要 t 2 = 1 80 M t_2=\frac{1}{80M} t2?=80M1?s
??100個(gè)時(shí)鐘寫入80個(gè)數(shù)據(jù),可以理解為80個(gè)有效寫時(shí)鐘和20個(gè)無效寫時(shí)鐘。
??此為突發(fā)讀寫情況,需要考慮什么時(shí)候突發(fā)寫的數(shù)據(jù)最多。當(dāng)前后兩個(gè)100時(shí)鐘的突發(fā)寫是連續(xù)時(shí),突發(fā)寫的數(shù)量最多,如下圖所示
??FIFO寫入160個(gè)數(shù)據(jù)需要的時(shí)間 n t 1 = 160 100 M nt_1=\frac{160}{100M} nt1?=100M160?s
??FIFO在 n t 1 nt_1 nt1?時(shí)間內(nèi)讀出數(shù)據(jù)個(gè)數(shù)為 n u m _ r d = n t 1 t 2 = 160 ? 80 M 100 M = 128 num\_rd = \frac{nt_1}{t_2} = \frac{160*80M}{100M} = 128 num_rd=t2?nt1??=100M160?80M?=128
??此時(shí)FIFO剩余數(shù)據(jù)個(gè)數(shù)為 n u m = 160 ? n u m _ r d = 160 ? 128 = 32 num = 160 - num\_rd = 160-128 = 32 num=160?num_rd=160?128=32
??可得FIFO最小深度為32。
??note:訣竅在于找出最大連續(xù)寫入的數(shù)據(jù)量。
情況三:100個(gè)時(shí)鐘寫入80個(gè)數(shù)據(jù),3個(gè)時(shí)鐘讀1個(gè)數(shù)據(jù),求FIFO的最小深度
??FIFO寫入一個(gè)數(shù)據(jù)需要 t 1 = 1 100 M t_1=\frac{1}{100M} t1?=100M1?s,讀出一個(gè)數(shù)據(jù)需要 t 2 = 3 ? 1 80 M t_2=3*\frac{1}{80M} t2?=3?80M1?s
??同上情況,FIFO最大連續(xù)寫入的數(shù)據(jù)量,寫入160個(gè)數(shù)據(jù)需要的時(shí)間 n t 1 = 160 100 M nt_1=\frac{160}{100M} nt1?=100M160?
??FIFO在 n t 1 nt_1 nt1?時(shí)間內(nèi)讀出數(shù)據(jù)個(gè)數(shù)為 n u m _ r d = n t 1 t 2 = 160 ? 80 M 3 ? 100 M = 42.67 num\_rd = \frac{nt_1}{t_2} = \frac{160*80M}{3*100M} = 42.67 num_rd=t2?nt1??=3?100M160?80M?=42.67
??此時(shí)FIFO剩余數(shù)據(jù)個(gè)數(shù)為 n u m = 160 ? n u m _ r d = 160 ? 42.67 = 117.33 num = 160 - num\_rd = 160-42.67 = 117.33 num=160?num_rd=160?42.67=117.33
??可得FIFO最小深度為 ? 117.33 ? = 118 \lceil117.33\rceil=118 ?117.33?=118,可以設(shè)置成2的冪次方128。
三、什么情況下不太需要考慮FIFO的最小深度
??何時(shí)不用過分考慮FIFO的最小深度?在數(shù)據(jù)發(fā)送端如果能夠接受FIFO的空滿信號(hào)反饋時(shí)可以設(shè)置個(gè)大概的深度即可。利用FIFO的空滿信號(hào)(或者almost_full/almost_empty)的反饋來控制FIFO的讀寫使能能夠有效解決數(shù)據(jù)的溢出。