|
您好
0 Y( k' k! R2 |. [5 Y- J0 _最近想到一種架構,用來做FIFO不曉得可不可行# w2 i% F# T( t- j1 j
如下圖所示
! J2 c* J j6 S" @ f! S3 Q( Z3 o& R
5 ~) M- t5 E# @8 L1 N" i. e先就full,empty討論,trigger level不管+ I/ M2 T: ^% S* g+ q
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間6 E% \" a5 U7 h5 t& n s# }2 C6 P/ x
+ @' y, _5 w2 P/ e' s' f2 d7 N6 d
1.用額外bit(valid_bit)來指出register是否有資料寫入' ^: t- ?8 h: [( E5 S
當寫資料到FIFO則相對應的valid_bit會一起被設定為1; d0 P# U: n k3 N0 K
當讀取FIFO,相對應的valid_bit會被清為0
" F: ]! V, ^9 Z4 y1 w( |
2 c( d% t9 S6 `3 t: i2 Q0 p8 I+ G2.wptr及rptr用bin count
/ E# O$ t4 I x* a: _2 Y" S0 v3 [1 m6 P/ u
3.full將所有valid_bit取and,empty將所有valid_bit取nor/ _: t5 u6 V' k" ^+ u/ ?) @* w
# x9 k( v: P7 d$ Q% S! j4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
" R) h( H% l9 Q. i3 M6 X$ ~5 n: Z worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
3 z& {" j+ |( [0 s! ^6 j 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已0 I1 k8 B8 p4 E/ j) q6 z
& w% c( C+ M- ?6 W/ A p4 T5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作. D: i* d( J1 y8 s
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
) r. J2 u: F- y! o6 j8 a 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
5 }9 W4 V7 \3 W) _" i& | 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一" Z; I; a- s1 G; W5 z5 g
個位置是空但被判定為已經滿了的狀況); e% `" P; H2 g) K k8 M2 m- [
r1 U$ \- U9 v! a/ ?9 G. F# j; {
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|