非同步 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傳輸的...