|
您好, U+ a# p) e" j! c
最近想到一種架構,用來做FIFO不曉得可不可行
, I* V2 r- e- N如下圖所示
% J+ M w$ g% M) q1 l( r Y9 K* C! O; F
先就full,empty討論,trigger level不管
6 u- w! v6 ?! P( `$ A, ^ @讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 m. K% q) \% H& ~( Z* i
$ G; h0 i/ Z; W4 l7 a% Q
1.用額外bit(valid_bit)來指出register是否有資料寫入( C+ Y" m# `* \" o0 w' J+ Z
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
9 m( n$ R& h0 A& @5 q; s9 ] 當讀取FIFO,相對應的valid_bit會被清為0
* Y" t3 K( [& C5 p$ ^& p* z0 k2 G' U3 l: B( ~" Z2 @
2.wptr及rptr用bin count
' F$ F: o: A4 f) b, \7 W# ?4 S% X. a- m8 n
3.full將所有valid_bit取and,empty將所有valid_bit取nor8 E; E O6 k [/ b6 _' k/ T9 g
" p# W; S9 G' t2 J" G+ F4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
( t2 ]8 [$ h. V7 @, k worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
+ f! w1 z: J" G) ~2 V. C0 ` 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已% x v8 i @! N4 t+ C' j& m* \) {, D
) ]% k T1 T# w( u, S' q c
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
! D( L9 K; n: e* C 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk4 N. m# g# F4 I# t6 y$ a( }
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
( m- |1 K. Q& @ 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
* y4 z4 t* t: m, q4 d: s3 R 個位置是空但被判定為已經滿了的狀況)
# @5 ~2 A0 C2 b( u- P7 \; o7 k+ A
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|