|
您好
& [2 H! y. e) U2 W9 q2 M9 c! ^最近想到一種架構,用來做FIFO不曉得可不可行
7 }% a- z, q" o1 M如下圖所示0 y" i' [' {0 o
. K4 M* Z8 ^9 V, J F: ~( N; ^3 D先就full,empty討論,trigger level不管% c& _ Z1 t. Z) ?, F# [
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
' t2 _9 b. T3 g. ?
) Z' b r2 K# [; U3 y1.用額外bit(valid_bit)來指出register是否有資料寫入
( P& k L+ v0 K/ [2 e6 U4 n 當寫資料到FIFO則相對應的valid_bit會一起被設定為1) \- K- [6 ^3 z2 ?
當讀取FIFO,相對應的valid_bit會被清為0" B( @, x' e2 k4 N2 k% P+ O
1 M2 d( A% X) S* u5 @1 N) k2.wptr及rptr用bin count
7 ~8 @7 K9 c; n' M1 y7 s
: h' a2 I+ Q/ {+ H. p9 B3.full將所有valid_bit取and,empty將所有valid_bit取nor1 z, S1 B5 P ^) o
2 |9 }) ?+ }; @0 W- |% _, T. ? c( f4 L
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時' e5 j0 W2 \# Z4 S+ x
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
, z) V6 q4 R$ x 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
+ N9 J& n' F2 h; {7 T
' ?- G2 ^# r6 k5 a/ z/ r. C5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
! r. z' p, f2 T) V. T! R# @/ j 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
- |& Z: n( Y. J3 L; Q, y; ~) N- B 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接3 d! _' t0 Q' t" t( B4 F T
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
& W3 b+ y- H% H 個位置是空但被判定為已經滿了的狀況)
0 ]2 A1 e0 q2 W( o! r* M
8 j9 V9 c# C, ]1 _/ g/ a, s以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|