|
您好+ \$ \% D) |/ Q" @' b
最近想到一種架構,用來做FIFO不曉得可不可行, |9 k0 A. u% G2 i5 }& F' n2 }+ T7 }
如下圖所示: X7 X" | r7 m# d: W/ J5 r8 d7 n
& I' B: q7 p, C. X
先就full,empty討論,trigger level不管+ _3 G( G; J0 I, P
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
7 N* c, ]2 S1 d( p/ N) E5 U `, u0 i6 ?
1.用額外bit(valid_bit)來指出register是否有資料寫入* p1 r! d; U7 A7 E l& J
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
* K0 _. M: g6 H0 K0 g 當讀取FIFO,相對應的valid_bit會被清為03 o6 q& S$ h0 ]" S& L
9 @0 `$ C7 W3 R
2.wptr及rptr用bin count4 d( u0 m# t1 y3 A( b4 t6 x
( K' J8 n2 [9 g9 |! p3.full將所有valid_bit取and,empty將所有valid_bit取nor
, o7 Y C, N) }) ?8 H% |& L) R0 z# |- I! x; b0 {2 E( |3 T* _# X+ P( m
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時( E0 u" L/ o5 n1 a0 `$ v
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case; ^- N* Z: t7 a- a5 M
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
# C% A9 I1 {' W- k
6 U8 v! `3 J. G- g H, H5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
9 w3 A: v; E* y* U1 N2 x8 s5 q 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
2 m4 g8 n" x @$ Q# t 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
d: \5 m Z X 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一8 Q/ M7 u n2 n8 o
個位置是空但被判定為已經滿了的狀況)" t) ^! R: U0 u5 r& a7 |3 v
! T; @) I8 h( O! n: `) v0 Y以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|