|
您好: n( ]! H% k/ f' p- b
最近想到一種架構,用來做FIFO不曉得可不可行# M# D4 Q& l3 h# W1 m6 C
如下圖所示
: s3 s; ]7 G* S+ C
* c7 b n2 o# K% i* k先就full,empty討論,trigger level不管
& V7 h$ i; k& r' Q C0 ]讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
g3 n3 a4 o4 L9 K @$ \6 x; P: {6 o) e& E E. T* a
1.用額外bit(valid_bit)來指出register是否有資料寫入/ ~7 `0 [# t6 z
當寫資料到FIFO則相對應的valid_bit會一起被設定為1; ?% P$ I- L6 r' x" r# l/ b$ _
當讀取FIFO,相對應的valid_bit會被清為08 ]; K, i1 i% l
8 }: P; A% l. S3 q1 ?2.wptr及rptr用bin count' i y& J3 d+ U: D1 H
. q4 Y% {+ a0 F9 _' @0 m* Z
3.full將所有valid_bit取and,empty將所有valid_bit取nor4 N1 [* b) N1 o* P! C
- \. {8 C: W0 H4 F
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時- X! T0 K0 B8 G9 g5 {, z
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case- v( t+ H2 x% k! Z2 S! p* J
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) ^# B, N% B* S, D. j& v; A# p; x, O/ W5 I/ o& j; ?! c0 X
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作0 z; J9 ]$ z! @: ]- r* Z
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
B7 ~' E; L! H; Q3 D2 b 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接" S0 g8 t) k3 L+ ]5 n. k" r: [- _
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
- `3 Z2 M. i, B$ K! l) { 個位置是空但被判定為已經滿了的狀況)4 Y5 e- y7 P% L( m' s! c0 }
& a2 j3 d8 O5 u, P以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|