|
您好
& c7 q3 d% I+ Q' B9 J7 @ V- ^最近想到一種架構,用來做FIFO不曉得可不可行
7 Y8 n+ V3 Y* k9 o' p8 i$ P+ F如下圖所示
7 \6 F K X0 ^' r: d: a
6 |& |' J: m5 L. h) J* S L先就full,empty討論,trigger level不管8 t+ ~/ ?. k% A" c* J% s, l8 [3 Z
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
3 }8 N! e5 }7 d+ }6 G8 q+ \$ x; m( b) ]) m
1.用額外bit(valid_bit)來指出register是否有資料寫入, S6 w+ D) r! v) l) r- j
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
7 U& i/ t. F0 h; N1 W$ T" ^ 當讀取FIFO,相對應的valid_bit會被清為0
* ^: U" H6 z2 R7 G0 u$ i
* k9 ?: n: c8 F, k4 M, ?8 G2.wptr及rptr用bin count
# {: W) L/ w1 z `' p
9 n+ q( U! _- K0 l% i& f/ \3.full將所有valid_bit取and,empty將所有valid_bit取nor) ~/ c) X7 E' M) T
& D) V3 v9 A* l
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
! j" F, q( y8 e/ `# ~ worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
, Y8 I3 u, o' n0 r 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已+ J' q% w2 y. ?
8 ^, v5 i& {9 {2 o8 u0 A5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作2 B" ?' h* C4 Y) E6 H# e
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' Q: g" \5 m/ k( N7 y$ }# O
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
$ y& P) E6 a; l' W9 X. n 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
2 e$ k. a$ i9 [7 ]/ B2 ] 個位置是空但被判定為已經滿了的狀況)
5 s' x9 r- I% }$ n7 i S
! ]+ R& O0 u e" ^以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|