|
您好. |5 ]1 q9 h; y- U/ J1 X* ^/ I) u% W* Y; L
最近想到一種架構,用來做FIFO不曉得可不可行
* o4 Q% E5 p* y; C9 B如下圖所示
' }* G& X9 g5 S& ~8 F5 H, K! I) B3 N2 q+ |" @
先就full,empty討論,trigger level不管, a8 Q/ }! F% _9 L
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 Z l' {! Y3 J: F* U2 ?- m9 r4 ~$ f% d& ^' X% L8 [" e& I( T
1.用額外bit(valid_bit)來指出register是否有資料寫入
( o& `: F6 A5 t0 p5 @, e 當寫資料到FIFO則相對應的valid_bit會一起被設定為1 x4 t, R$ ]0 s+ V
當讀取FIFO,相對應的valid_bit會被清為0
) y4 H; S" H4 u0 W- s- z8 X/ y, z3 m0 H6 e5 e) }
2.wptr及rptr用bin count
0 U/ Z% d# q& V/ [* n! O) e g7 l
; E0 V+ n( ^8 o5 A2 z2 ^3.full將所有valid_bit取and,empty將所有valid_bit取nor
! I1 U+ s7 n5 [5 ]- J) B# ?# _) Q- ~* w# F' ^" I
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
5 v1 Y/ }! n/ G0 V' E1 ~ worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
: D* S. [7 }/ i4 ]& D1 `' \ 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已8 d" f' H5 V% m' Q0 A6 z6 Q
. L. v/ l" b6 j( N1 @( [& R5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作% X% `$ K0 u A" @/ X
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
# b7 {) w; S2 A' o; U3 D( v+ y' s) q2 i 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
u2 r& |% Y# C& w; U2 O, ^7 _% e 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一8 s0 p ~% ^/ w; h' @! m
個位置是空但被判定為已經滿了的狀況)8 b9 P* U- j- F9 r W& o9 m
5 X2 j& U9 C6 q1 R以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|