|
您好/ l: f& W0 e! w: V; e u: s
最近想到一種架構,用來做FIFO不曉得可不可行2 Q2 y$ n' ?3 k
如下圖所示% r* f0 F p: v
/ `# Z4 H7 f. \* X9 s9 G! o8 a. T
先就full,empty討論,trigger level不管+ R& w' O% w7 j q' v5 o
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
+ ?. T4 q: {' r% ^. r" q% S$ h r1 y g$ J) m' y1 ]4 ]# v( z, j
1.用額外bit(valid_bit)來指出register是否有資料寫入
$ j @. C1 j3 h, ?! D6 o 當寫資料到FIFO則相對應的valid_bit會一起被設定為1! [1 P! g; o8 w4 ^3 P
當讀取FIFO,相對應的valid_bit會被清為0' t1 E1 Y( F, d% J p {
- r# } ? t( S5 B
2.wptr及rptr用bin count: I! p9 J, O' P5 a: h& Z
" n9 T. u/ g) U5 G; I4 x' S2 _3.full將所有valid_bit取and,empty將所有valid_bit取nor& ?7 T4 Q- X) _5 d1 A, Z
' q; b; E# a& M4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時0 n9 M# C# P8 Z6 @+ s) v
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
8 u) e3 \5 g# h* D! y7 @1 I8 B 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
4 q! r3 ?& Y9 g- b- t4 Y% R! {5 C7 l: D8 f0 |" M
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
9 X: R7 y2 J K7 Q 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
0 @$ a6 }9 f- e$ B* t 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接 P0 S- z: n: ~- ?$ M- z5 m
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一% ]. K5 S1 M# q- ^! c
個位置是空但被判定為已經滿了的狀況); u d& Y& y% f D* U/ N3 _
# L) [5 m M/ V! _3 Q0 N# |% ~: [以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|