1、為什么需要計算FIFO的最小深度
因為筆試常考。
開玩笑的。首先我們來想下FIFO有哪些作用?我大概總結下FIFO的幾個重要作用:
解決不同時鐘域傳輸的問題
用來緩存一定量的數據
解決位寬不匹配的問題
FIFO最常被用來解決寫、讀不匹配的問題(時鐘、位寬),總結下來,其實FIFO最大的作用就是緩沖。既然是緩沖,那么就要知道這個緩存的空間到底需要多大。接下來的討論,都建立在滿足一次FIFO突發傳輸的基礎上。連續無止境的突發不考慮。比如寫時鐘100M,讀時鐘50M,無限制的讀寫,那么FIFO的深度只能是無窮大了,因為寫比讀快,FIFO一定永遠都不夠用。所以在實際運用中,不會存在無限制的對FIFO進行讀寫。如果這樣的話,FIFO就變成了一個“存儲器件”,而不是一個“緩存器件”,對于FIFO的這種用法無疑是毫無意義的。
2、實例
2.1、寫時鐘快、讀時鐘慢
2.1.1、無間斷的寫、讀操作
條件:
寫入時鐘頻率 fA = 80MHz;讀取時鐘頻率 fB = 50MHz. 一次寫入的突發長度120
讀寫操作不間斷
解法:
寫入一個數據需要的時間:1/80MHz = 12.5ns;讀取一個數據需要的時間:1/50MHz = 20ns
寫入120個數據,需要的時間:120 * 12.5ns = 1500ns
在寫入全部數據所需的時間(1500ns)內,可以讀取出的數據數:1500ns / 20ns = 75
所以一次突發,一共需要寫入120數據,在這段時間內可以被讀出75數據,剩下的數據就是需要使用FIFO來緩存,所以FIFO的最小深度為120 - 75 = 45
2.1.2、間斷的寫、讀操作
條件:
寫入時鐘頻率 fA = 80MHz;讀取時鐘頻率 fB = 50MHz. 一次寫入的突發長度120。
每兩次寫入操作間隔1個寫時鐘周期,每兩次讀取操作間隔3個讀時鐘周期。
解法:
每兩次寫入操作間隔1個寫時鐘周期,等于每兩個寫時鐘周期才寫入1個數據,即等價的寫入時鐘頻率 fA'=40MHz,寫入一個數據需要的時間:1/40MHz = 25ns
每兩次讀取操作間隔3個讀時鐘周期,等于每4個寫時鐘周期才讀取1個數據,即等價的讀取時鐘頻率 fB'=12.5MHz,讀取一個數據需要的時間:1/12.5MHz = 80ns
寫入120個數據,需要的時間:120 * 25ns = 3000ns
在寫入全部數據所需的時間(3000ns)內,可以讀取出的數據數:3000ns / 80ns = 37.5 ≈ 37(要向下取整,不然有1個數據會丟)
所以一次突發,一共需要寫入120數據,在這段時間內可以被讀出37數據,剩下的數據就是需要使用FIFO來緩存,所以FIFO的最小深度為120 - 37 = 83
2.2、寫時鐘慢、讀時鐘快
2.2.1、無間斷的寫、讀操作
條件:
寫入時鐘頻率 fA = 30MHz;讀取時鐘頻率 fB = 50MHz. 一次寫入的突發長度120
寫、讀操作無間斷
解法:
因為讀操作的頻率快于寫操作的頻率,所以數據一旦被寫入FIFO后很快就會被讀走,所以FIFO的最小深度為1即可
2.2.2、間斷的寫、讀操作
條件:
寫入時鐘頻率 fA = 30MHz;讀取時鐘頻率 fB = 50MHz. 一次寫入的突發長度120。
每兩次寫入操作間隔1個寫時鐘周期,每兩次讀取操作間隔3個讀時鐘周期。
解法:
每兩次寫入操作間隔1個寫時鐘周期,等于每兩個寫時鐘周期才寫入1個數據,即等價的寫入時鐘頻率 fA'=15MHz,寫入一個數據需要的時間:1/15MHz = 66.667ns
每兩次讀取操作間隔3個讀時鐘周期,等于每4個寫時鐘周期才讀取1個數據,即等價的讀取時鐘頻率 fB'=12.5MHz,讀取一個數據需要的時間:1/12.5MHz = 80ns
寫入120個數據,需要的時間:120 * 66.667ns = 8000ns
在寫入全部數據所需的時間(8000ns)內,可以讀取出的數據數:8000ns / 80ns = 100
所以一次突發,一共需要寫入120數據,在這段時間內可以被讀出100數據,剩下的數據就是需要使用FIFO來緩存,所以FIFO的最小深度為120 - 100 = 20
2.3、寫時鐘、讀時鐘一樣快
2.3.1、無間斷的寫、讀操作
條件:
寫入時鐘頻率 fA = 讀取時鐘頻率 fB = 30MHz。一次寫入的突發長度120。
寫、讀操作無間斷
解法:
1、假設讀、寫時鐘無位差、則兩個時鐘同頻、同相,是同步信號,故可以直接對接操作,無需FIFO
2、若讀、寫時鐘存在相位差,則被寫入的數據在一個時鐘周期內會被讀走,所以FIFO的最小深度為1即可
2.3.2、間斷的寫、讀操作
條件:
寫入時鐘頻率 fA = 讀取時鐘頻率 fB = 50MHz。一次寫入的突發長度120。
每兩次寫入操作間隔1個時鐘周期,每兩次讀取操作間隔3個時鐘周期。
解法:
每兩次寫入操作間隔1個寫時鐘周期,等于每兩個寫時鐘周期才寫入1個數據,即等價的寫入時鐘頻率 fA'=25MHz,寫入一個數據需要的時間:1/25MHz = 40ns
每兩次讀取操作間隔3個讀時鐘周期,等于每4個寫時鐘周期才讀取1個數據,即等價的讀取時鐘頻率 fB'=12.5MHz,讀取一個數據需要的時間:1/12.5MHz = 80ns
寫入120個數據,需要的時間:120 * 40ns = 4800ns
在寫入全部數據所需的時間(4800ns)內,可以讀取出的數據數:4800ns / 80ns = 60
所以一次突發,一共需要寫入120數據,在這段時間內可以被讀出60數據,剩下的數據就是需要使用FIFO來緩存,所以FIFO的最小深度為120 - 60 = 60
2.4、特定時間內時間寫、讀速率固定
條件:
每100個時鐘寫入80個數據,剩余20個隨機值(無效)
每10個時鐘讀出8個數據
一次寫入的突發長度160
解法:
因為每100個時鐘內,僅寫入80個數據,而這80個數據可能任意分布,所以160個數據的寫入可能有以下幾種情況:
可以看到,第4種情況是最極端的:一次性需要寫入160數據,時間為160個時鐘
160個時鐘內,讀出的數據是160*8/10 = 128
所以一共需要寫入160數據,在這段時間內可以被讀出128數據,剩下的數據就是需要使用FIFO來緩存,所以FIFO的最小深度為160 - 128 = 32
3、總結
FIFO是用來緩存的,不是用來存數據的,當寫快讀慢時,無止境的對FIFO操作是沒有意義的(不管FIFO多大,一定都會被寫滿)
FIFO深度的計算建立在滿足一次突發傳輸的基礎上
當讀快寫滿或者讀寫一樣快時,FIFO的深度最多只需要1
當寫快讀慢時,在一次突發傳輸時,因為讀慢,所以肯定無法全部讀走。全部寫入的數據量 - 已經被讀走的數據量 = 需要緩存到FIFO的數據量,即異步FIFO的最小深度
審核編輯:湯梓紅
-
存儲
+關注
關注
13文章
4266瀏覽量
85686 -
fifo
+關注
關注
3文章
387瀏覽量
43561 -
計算
+關注
關注
2文章
446瀏覽量
38740
發布評論請先 登錄
相關推薦
評論