|
您好6 D" }, _3 n% ^+ J0 T
最近想到一種架構,用來做FIFO不曉得可不可行
5 [1 |5 R0 L' s( h如下圖所示6 |8 ]/ u" G8 Q7 {" M# K( w
) ?; y. D9 f$ r/ [: P先就full,empty討論,trigger level不管
- a( M- V7 }+ T% c讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間2 u0 {! R0 d) y! k* c
2 g( v* `. N1 D' Z% P1.用額外bit(valid_bit)來指出register是否有資料寫入 \% |. B6 q3 L' C8 ^# h
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
' D4 b9 S$ p& S8 Q 當讀取FIFO,相對應的valid_bit會被清為0
" }0 H3 r9 I3 W* X, p
7 D/ y: W/ J7 S0 I2 u2.wptr及rptr用bin count. `2 N4 T; p" ~" x, `, O2 d
+ u3 N% I" F) K! L q
3.full將所有valid_bit取and,empty將所有valid_bit取nor# J3 I+ \5 T4 R% X! L( [7 X* I3 m
0 i% D* z' e& r1 n: Q
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
* h! l1 C/ X4 L& v worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
* Z3 v+ z7 H! J9 \! x" z4 H: G 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已% {$ a% @8 g- r# [5 K5 r
' A8 u3 y: _& z. e/ n9 R$ v$ I/ S$ R
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
7 \5 { h; [% ^- N1 k; z 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk% l0 N3 W2 k, K2 t& C2 [ g
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
, w' E: D3 ]- a& u; b' i. D 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一2 ?' c% j6 b6 M/ f" o% }5 ?
個位置是空但被判定為已經滿了的狀況)
& k6 ]: i& _) J, T. m+ V) p; C% R$ y! y5 G
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|