|
您好9 I. b, M- Q; O8 h$ M
最近想到一種架構,用來做FIFO不曉得可不可行/ B6 v3 E# l6 |0 f, }+ _) u
如下圖所示
" L8 n+ ]! y( }8 C( K7 m% v0 I5 n* J6 `, i; ^3 t
先就full,empty討論,trigger level不管- r9 w2 H6 t9 g% K0 }2 R" f2 B
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 W7 }9 ]/ r+ l$ [0 Q/ V
3 z; x4 Z l. f: v/ w. ^' N2 C
1.用額外bit(valid_bit)來指出register是否有資料寫入 A3 F; E1 J$ O! W
當寫資料到FIFO則相對應的valid_bit會一起被設定為1" u2 g7 ~, p* h4 s3 A+ k7 s
當讀取FIFO,相對應的valid_bit會被清為0( q/ n, E" @6 }+ X% |2 c4 e. S
) @$ [* t. @, l' D6 |2.wptr及rptr用bin count# V! M) V" i5 U U
6 F: s5 I5 q. ~7 g3.full將所有valid_bit取and,empty將所有valid_bit取nor
; C/ P) @, G: g2 ?9 o( E) ]! k) C8 w: z8 [: @) K3 r
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
, F0 F- g8 J( H2 p# V& d' R worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case5 ~) i8 i3 F, \/ N8 p( a8 E$ ^
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已8 q1 k' B/ \5 v1 b5 E* t
% R( x' y( H7 w' N4 L z5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
- O1 m5 F* V5 l3 H0 ]! M4 M 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk& E; m x' ]* {4 R7 n$ d& B
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接$ S6 }4 ]; j$ ?7 G% B0 g) K: L
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一. Y1 E- j# w ?* o7 n l$ _
個位置是空但被判定為已經滿了的狀況)
! N9 [) ]" K- d# c, ~
2 C @; K; f* L2 T% L, m4 l0 \. C9 m: E以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|