|
您好
$ F- X3 G/ x, m+ f9 [) ]最近想到一種架構,用來做FIFO不曉得可不可行
/ M7 l, P7 l w2 L: j( I如下圖所示
! B' F5 f# x4 w: N! `2 M0 [
0 o0 s% a) g1 j0 l; u% L先就full,empty討論,trigger level不管
5 ?* ^: N% w( `# r. G讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間! |- N& c- H- }3 S4 A
0 S! R& s& p/ M4 ?1.用額外bit(valid_bit)來指出register是否有資料寫入
1 C- d' l9 s$ X3 ~ 當寫資料到FIFO則相對應的valid_bit會一起被設定為14 w# A1 S! t' K( Q! N- ?& l
當讀取FIFO,相對應的valid_bit會被清為0
! n7 k: \% c/ \4 j( }! f* d2 X. N! V2 J3 I8 C7 n# h
2.wptr及rptr用bin count7 K: S: Z% z2 E
9 X- u+ x; x' J' X6 j3.full將所有valid_bit取and,empty將所有valid_bit取nor* s T5 K! [5 s1 i! v! B5 Y
9 m7 C$ s* u N" A+ r4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時: o# `+ U0 e. J4 P
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
" }$ m0 F$ `, i$ Z 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
& V4 B$ I, e! C4 H+ g9 f& Y) f! @# m7 R9 H+ c6 t: ~0 E& ?
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
7 h. X* g* ^, r! u: {' d 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
3 f2 e: j: F9 a; U9 l 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接. S, H, E+ [1 w5 q6 n! n
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
- X6 G% @' X$ }) |$ v# Z% G 個位置是空但被判定為已經滿了的狀況)
. I! [% j, [, [* x2 G' M! K/ o
' b: w6 \) O& b以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|