非同步 FIFO 最小深度計算方法及原理分析(轉補)

2021-07-26 13:33:50 字數 3000 閱讀 2637

非同步 fifo 最小深度計算方法及原理分析**補)

計算 fifo 深度是設計 fifo 中常遇到的問題。常識告訴我們,當讀速率慢於寫速率時(瞬時速率),fifo 便可被用作系統中的緩衝元件或佇列。fifo 的大小取決於讀寫資料的速率,系統的資料速率取決於系統的負載能力,因此為了保證系統效能,我們需要考慮 fifo 傳輸的最壞情況。所謂最壞的情況就是使得寫速率最大,讀速率最小的時候考慮突發傳輸。目錄

fifo 用於緩衝塊資料流,一般用在寫快讀慢突發傳輸的情況,遵循的規則如下:fi

fo深度

(寫入速

率−讀出

速率)=

fifo

被填滿時

間》資料

包傳送時

間=寫入

最大突發

資料量寫

入速率

即是確保對fifo寫資料時不存在 overflow 。

例1:

a/d 取樣率50mhz,dsp 讀 a/d 的速率40mhz,要不丟失地將10萬個取樣資料送入 dsp,在 a/d 在和 dsp 之間至少設定多大容量的fifo才行?

100,

000/50m

hz=1

/500s=

2ms

(50mh

z−40m

hz)∗

1/500=20k

,即是 fifo 深度。

這裡假設讀寫 fifo 是可以同時進行的,

寫時鐘頻率 w_clk,

讀時鐘頻率 r_clk,

寫時鐘週期裡,每 b 個時鐘週期會有 a 個資料寫入 fifo,

讀時鐘週期裡,每 y 個時鐘週期會有 x 個資料讀出 fifo,

則 fifo 的最小深度的計算公式如下: fi

fo_d

epth

=bur

st_l

engt

h−bu

rst_

leng

th∗(

x/y)

∗(r_

clk/

w_cl

k)此公式可從上面原理推導而來。

例2:

如果100個寫時鐘週期可以寫入80個資料,10個讀時鐘可以讀出8個資料。令w_clk=r_clk ,考慮背靠背 (20個clk不發資料+80clk發資料+80clk發資料+20個clk不發資料的200個clk) ,代入公式可計算 fifo 的深度,

fifo_depth = 160-160*80% = 160 - 128 = 32

如果令w_clk=200mhz,改為100個w_clk裡寫入40個,r_clk=100mhz,10個r_clk裡讀出8個,那麼 fifo 深度為48。計算如下,

fifo_depth = 80 - 80 * 80% * (100/200) = 80 - 32 = 48

注: 將fi

fo_d

epth

=bur

st_l

engt

h−bu

rst_

leng

th∗(

x/y)

∗(r_

clk/

w_cl

k)作個變形,

得到 fif

o_de

pth=

burs

t_le

ngth

−[bu

rst_

leng

th∗(

1/w_

clk)

]/[y

∗(1/

r_cl

k)/x

] 其中 [bu

rst_

leng

th∗(

1/w_

clk)

] 表示這個burst的持續時間, [y

∗(1/

r_cl

k)/x

] 表示讀出每個資料所需的時間(即:讀的實際速度)。

兩者相除自然就是這段時間讀出的資料量。顯然burst_length表示這段時間寫入的資料量,兩者的差為 fifo 中殘留的資料,這個也就是理論上的 fifo 的最小深度。

實際應用中往往是以半空半滿訊號來指示 fifo 的空滿狀態的,所以實際設計 fifo 的時候會至少留下乙個資料空間的深度裕量。

假如讀寫 fifo 不是同時進行的,fifo 深度就是寫資料最大突發個數。

例3:

如兩個非同步時鐘域資料介面,假如讀寫是同時進行的,一般設定 fifo 的深度就要對應兩個時鐘以及對應寫最大的突發資料。假設寫時鐘頻率是40mhz,讀時鐘為25mhz,在寫端最大突發寫資料個數為100個資料。對應深度計算:100(1-25/40)=37.5,對應深度設定至少為38。

假如讀寫不是同時的,這就需要設定深度為寫資料最大突發個數,如上例中,對應最大突發個數為100個,則深度設定為100。

例4:

乙個8bit寬的非同步 fifo,輸入時鐘為100mhz,輸出時鐘為95mhz,設乙個 frame 為4kbit,且兩個 frame 之間的傳送間距足夠大。求fifo的最小深度?

burst_length = 4k/8 = 4*1024/8 = 4096/8 = 512。

因為x和y的值沒有給出,所以預設為1。

fifo_depth = 512 - 512*(95/100) = 25.6 ,所以fifo_depth最小取值是26 。

為了保證輸入資料(負載)全部通過,輸出吞吐量要大於輸入吞吐量;但也不要太大,以免設計過剩。

所以有, (r

_clk

∗x/y

)=(w

_clk

∗a/b

) 等式左邊是系統設計吞吐量,右邊是負載流量。

例5:

兩個非同步時鐘域資料介面,寫時鐘頻率是19mhz,讀時鐘為20mhz,讀寫是同時進行的,輸入資料不間斷。求fifo的最小深度?

顯然有,

( r_clk * x/y ) > ( w_clk * a/b )

故理論上fifo的最小深度是1。

[1]

FIFO最小深度計算方法

在實際工作中使用fifo,如何計算fifo的深度是乙個關鍵問題。本文以例項的形似,展示了在資料轉換時,fifo深度的計算方法。例1,已知某a d轉換的取樣率為50mhz,而fpga工作在40mhz時鐘下,現在要處理10萬個資料,需要的緩衝fifo深度是多少?答 1 採集10萬個資料的總時間為 tto...

非同步FIFO最小深度計算方法及原理分析

計算fifo深度是設計fifo中常遇到的問題。常識告訴我們,當讀速率慢於寫速率時,fifo便可被用作系統中的緩衝元件或佇列。因此fifo的大小基本上暗示了所需快取資料的容量,該容量取決於讀寫資料的速率。據統計,系統的資料速率取決於系統的負載能力。因此為了保證fifo的大小,我們需要考慮fifo傳輸的...

非同步FIFO最小深度計算方法及原理分析

計算fifo深度是設計fifo中常遇到的問題。常識告訴我們,當讀速率慢於寫速率時,fifo便可被用作系統中的緩衝元件或佇列。因此fifo的大小基本上暗示了所需快取資料的容量,該容量取決於讀寫資料的速率。據統計,系統的資料速率取決於系統的負載能力。因此為了保證fifo的大小,我們需要考慮fifo傳輸的...