天天看點

一看就會的FIFO最小深度計算前言基礎題附加題1附加題2附加題3總結

目錄

前言

基礎題

附加題1

附加題2

附加題3

總結

前言

計算題一直是筆試中常見的一類題型,上文我們學會了建立時間和保持時間的計算方法,本文來學習一下FIFO的深度計算問題。

FIFO的深度問題是為了解決資料傳輸中的讀寫速率不比對的問題,如果一個FIFO的寫入速率比讀出速率快,那麼沒來得及及時讀出的資料就需要存儲在FIFO中等待被讀出。其實這就是一個比較簡單的數學問題,可以聯想到國小題目中給遊泳池一邊灌水一邊放水(?)。

基礎題

一般通常會見到題幹是這樣的:“一筆資料的個數N是120個,FIFO的寫入時鐘頻率fw為80MHz,FIFO的讀出時鐘頻率fr為50MHz,求FIFO的最小深度。”

其實這道題就是在問一個遊泳池需要多大才能一邊灌水一邊放水,水還不能溢出遊泳池。那麼我可以直接用資料總量120,除以寫入速率80MHz,可以得到一個灌水時間 T = 120 / 80MHz 。那麼在這麼長時間中,我們能放多少水呢?就是 n = T * 50MHz = 120 / 80MHz * 50MHz = 75 。是以我們至少需要一個 (120 - 75 = 45)這個大的一個遊泳池才能滿足要求,即就是我們所需要的FIFO最小深度為 45 。這裡可以提煉出公式:最小深度 d = N - N / fw * fr 。

有時出題的老師會再繞一個彎,加考一些基礎知識。例如:一筆資料是5kbit,FIFO的寬度是1byte,balabala... 在這裡用資料總量除以FIFO寬度就是資料個數了。即一筆資料的個數為 5kbit / 8bit = 640 個。

附加題1

因為異步FIFO需要處理異步界面,不能像放水一樣那麼迅捷,是以出題時可能會提到“當寫入 3 (任意數)個資料後才能開始讀出”,那麼我們的 FIFO 最小深度就必須加上這個緩沖量,即FIFO最小深度為 45 + 3 = 48 。

附加題2

“ 若每隔一個周期寫一次資料,每隔三個周期讀一次資料,請計算最小深度。”

每隔一個周期寫一次資料,意味着每兩個周期才寫一次資料,意味着我們的寫入速率從原先的80MHz降為了40MHz。以此類推,讀出速率從50MHz降成了12.5MHz 。這樣一來再套用公式 最小深度 d = N - N / fw * fr = 120 - 120 / 40 * 12.5 = 82.5 。即可得FIFO的最小深度為 83 。

從這道題可以看出,讀寫時鐘頻率和讀寫速率是兩回事,以此題為藍本的變種類型題還有很多,但是萬變邊不離其宗,關于FIFO最小深度的計算我們主要關注讀寫速率即可。

附加題3

“ 若在10個周期内,隻有8個周期寫入資料,請計算最小深度。 ”

我們上面的幾道題其實都有一個預設的先決條件,那就是每一筆資料之間間隔很遠。因為如果我們一直不停的放水,那麼隻要灌水速率大于放水速率,無論水池大小,最終都會溢出。

但是這道題我們就要打破這個先決條件(由于未知原因),我們現在認為每一筆資料都是緊挨着寫入了FIFO中,而且每筆資料在其時間段内寫入不規律,如下圖所示,紅線區域為有效資料。

一看就會的FIFO最小深度計算前言基礎題附加題1附加題2附加題3總結

在這種情況下,我們為了FIFO不會溢出資料,計算最小深度時,我們就必須要考慮到寫入資料時的最壞情況。

一看就會的FIFO最小深度計算前言基礎題附加題1附加題2附加題3總結

根據題幹可得,我們在10個周期内會寫入8個資料,最壞情況下20個周期會連續寫入16個資料,我們需要在寫入資料後,在這20個周期的時間内将寫入的資料全部讀出,才能夠保證FIFO不會溢出。

由寫入時鐘頻率80MHz,知一個周期12.5ns,是以留給讀出資料的時間就隻剩下(20 - 2)* 12.5ns = 225ns。

再看讀出時鐘頻率為50MHz,知讀出一個資料花費20ns,那16個資料全部讀完需要 16 * 20 = 320ns。是以本題無解。

是以我們隻能提高讀出速率,我們需要在225ns内讀出16個資料,易知每14ns我們就應該讀出一個資料,即讀出時鐘頻率為72MHz。

總結

前面幾道題都是隻考慮這一筆資料,并且資料寫入具有周期性,在資料全部寫入FIFO後,需要占據多餘的一些時間才能将FIFO中的資料全部讀出。而這種設計自然不能應用于會有多筆資料随機寫入FIFO中的情況,這種情況需要考慮更多的東西。但歸根結底,這種類型的題和給遊泳池邊灌水邊放水并無兩樣。

繼續閱讀