|
您好# N6 P. @8 S1 n2 E0 A
最近想到一種架構,用來做FIFO不曉得可不可行1 Y# L# ]: C& f$ m3 r; G3 D$ E" _
如下圖所示
2 p/ M4 n, G0 h
# D. ^* x# ]; @: P3 h! E, G" X先就full,empty討論,trigger level不管7 m6 ]$ }: i( y3 n5 {
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 m) a; Z7 `! S0 @$ ^9 }+ A$ i. V( F4 O( S8 n
1.用額外bit(valid_bit)來指出register是否有資料寫入
5 q$ }4 a& j' \ y6 S' J 當寫資料到FIFO則相對應的valid_bit會一起被設定為1
! z# p: B/ Z& |0 F: i2 A1 \9 _ 當讀取FIFO,相對應的valid_bit會被清為0* Q% c9 Y% T5 m1 L7 x, P3 M
1 o/ c5 I7 P! F' O# l1 p6 P& F, r' X
2.wptr及rptr用bin count
- f$ {3 ?( ~# u/ W7 m, i) _. t
0 D# u" H& l' P. o" J3.full將所有valid_bit取and,empty將所有valid_bit取nor
8 W) F, L4 W, |2 `& s$ t* u! R" ~. ]# ]9 @2 P1 T
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時3 w6 V2 C6 f B# ~
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case& ~& `8 U9 K3 h8 { Y. C
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
& M/ A7 `' X- o4 a7 E
) U; O$ z; _4 O% O, J* C. S5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
# j4 C' C/ v9 F- O5 d/ E 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
, r8 F0 m+ U Q 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
: o& r1 F' h/ b 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一* z0 P- D) M) ^/ M& B$ Y) ]
個位置是空但被判定為已經滿了的狀況)
% a1 l7 X2 c( |! k) T5 w1 N, m
- O# `; ]: `* d以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|