TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FIFO深度计算分析 ) t- M8 \2 `% f- m
' O) ?, _- ?2 @3 d写时钟周期w_clk,
) i+ a/ _# B- h+ L: P5 x% Y1 E) e读时钟周期r_clk,; ]8 t# p2 N* J( @) d! j' |
写时钟周期里,每B个时钟周期会有A个数据写入FIFO7 a7 |0 U& ?# y6 A3 `
读时钟周期里,每Y个时钟周期会有X个数据读出FIFO5 H q; m+ s) s+ D9 w
则,FIFO的最小深度是?
\$ R, R# U0 w7 S' }; k( T
6 A( [" r$ H# n$ f# _* y; E7 l首先,这道题不一定有解
, n, f; T; O$ A. {! @) J- }有解的必要条件是在一定时间内(足够长),写入的数据数量一定要等于读出的数据数量2 J. P7 T, e; _% O" y
因此有:A/B * w_clk = X/Y * r_clk
1 s( c3 x* j5 \- E5 I4 R3 o* ~5 ^; t7 @& T4 M2 s5 S" ?! O( k+ g
其次,算出写数据的最大burst_length。考虑最坏情况
- T! ?5 K1 Z! t& [比如,如果条件给出,每100个写时钟,写入80个数据,那么在背靠背的情况下,burst_length = 2*80=160
9 T+ R3 k, G2 |7 F) F; B, \% O. l; y1 Q1 \( d
最后,fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
f# r H5 _2 X, V% M
% f) l8 l x5 W- ` F$ sBTW:通常,为了安全起见,都会多留一些depth的余度2 C+ e& \2 t! P% y. S1 O$ @ ?- L
个人觉得,公式应该是这样:- e3 L* ?- c2 m, b" z
A/(B * w_clk) = X/(Y * r_clk)2 Y, t ?2 }% U4 Z6 H* T
# o/ W. D6 z7 n, ?, a! |$ U6 d
fifo_depth = burst_length - burst_length * X/Y * w_clk /r_clk
6 K2 z0 o# k% L8 C& Z" `
( W; }/ ? ^; b- f( k1 L+ J8 G% n! e
举例说明:
# H3 v/ t4 E5 l5 \' [6 ]如果100个写时钟周期可以写入80个数据,10个读时钟可以读出8个数据0 Y- {9 K! c3 M3 x, g+ a% \& y8 c
其中w_ck=5ns,r_ck=10ns& j+ }6 D' `# a
. m7 q' ?: f: Q* F* S% G9 s如果按照之前的公式,得出的深度为:fifo_depth = burst_length - burst_length * X/Y * r_ck/w_clk=160-160*8/10*2=-94,显然是不对的4 @! O$ D8 {6 ^" Z( K2 _. O$ o6 D
5 u/ ~5 F: [! E/ h- k5 w实际上,考虑背靠背(20个clk不发数据+80clk发数据+80clk发数据+20个clk不发数据的200个clk)
' n. C$ V' N3 r
( k: K& N8 A% X$ `* L" ^这样在中间160个写时钟周期连续写的情况下,只能读出160*5/(10*10)*8=64个数据,所以FIFO的深度应该为160-64=96! \/ N# X9 @1 i" ]% L! a0 ~4 I
也就是fifo_depth = burst_length - burst_length * X/Y * w_clk /r_clk=160-160*8/10*5/10=96* B4 S6 B* e' X8 T
6 e& J5 V6 b k* u) r# Q: e! d% U5 [% b# Z: b" \! T+ ~- Q9 F
|
|