|
您好4 V8 L- y/ t2 x- {
最近想到一種架構,用來做FIFO不曉得可不可行! _' i3 m& s- U; n5 B
如下圖所示/ b' o2 V2 t- o# p! _' z$ f) x
9 `+ E. g+ c" \7 \
先就full,empty討論,trigger level不管( H3 k1 f4 N0 P* U, f& P$ N
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
" _4 V& c& P. `" |, p8 _2 S9 q2 i
- Q S% C4 }2 n/ j1.用額外bit(valid_bit)來指出register是否有資料寫入
* s% Z# G, z' A1 h# D# k# Z0 E 當寫資料到FIFO則相對應的valid_bit會一起被設定為10 k% e% S5 V/ m( s' y( m
當讀取FIFO,相對應的valid_bit會被清為0$ s0 m- G0 I4 k5 t# g
; z6 ]! E) H2 q7 o; Q( F
2.wptr及rptr用bin count- ?0 S* i( B0 z4 n, \3 _0 I! h& Z: R4 u
4 U$ S& x4 y9 V3 O* W1 G e" `
3.full將所有valid_bit取and,empty將所有valid_bit取nor
9 D0 n; `0 |6 k# v3 a, y
U4 ]! l) }# E$ s Y' r$ k4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時4 Z& Z, F" _; P0 }& t4 p# S
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
/ ?$ r) X. c4 H3 ` 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已9 L. N. b+ E3 G
/ ]. P* m* p) Q! f6 Q" D6 t
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
# G% {" F% p% ~. Y1 P8 F$ I6 z0 d2 N 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk u/ ?/ D- ~( I9 u; z0 t/ \3 V5 g
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接; ~4 U! P% }; U
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
! W' O2 J( [, ?, Y* ?; B 個位置是空但被判定為已經滿了的狀況)
0 w$ X. E- P4 g: g% V& T
5 r. V7 J6 ?( ^以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|