|
您好
- \- z3 g, ~( e- |最近想到一種架構,用來做FIFO不曉得可不可行& ]) c0 d2 v! i- v; u7 C T
如下圖所示9 f7 d6 G4 _) I& Q- a) @
8 o, ?& \/ A3 d5 U2 z$ n5 K
先就full,empty討論,trigger level不管9 J, Q" z. Y: a% G# s
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
( H) m" p7 i6 S7 h
. e6 N9 X: Q e( O$ Y1.用額外bit(valid_bit)來指出register是否有資料寫入
0 v! | K% x2 w5 k 當寫資料到FIFO則相對應的valid_bit會一起被設定為1
( q, p- K9 b9 Q 當讀取FIFO,相對應的valid_bit會被清為0' [& ?- h0 b- c' i& N& @' D- S
/ J2 R, n8 o! [3 h4 Q( H2.wptr及rptr用bin count
4 B* B& p6 ] ~% N8 T, E' S- l3 k
! b0 G1 W% c7 }3 P0 ~ \( u+ X3.full將所有valid_bit取and,empty將所有valid_bit取nor( X& E( `2 @' W7 z B B2 h- J3 Q# [
/ M3 ~: f- B5 i' e4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
1 G* K4 h3 w9 y, P7 E* A worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
* `# N7 I u- X, w. F. u& i 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
1 e5 ^( O0 z% K# C& E+ U5 O9 U2 a* T) g* ]6 ~% a
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作& o( U8 y/ V5 k) W
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
! T+ R9 L$ n' `" z4 ~# a5 e 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
$ N6 O! |+ \+ d$ s7 W" Y 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
" \% v: k+ e- G! ? 個位置是空但被判定為已經滿了的狀況)/ L5 u/ u4 W; R2 ?
7 C& l4 _7 T6 y( d* Q# Y以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|