|
您好
2 v3 c6 C& X- z, X; M7 y4 M3 J Z8 T, E最近想到一種架構,用來做FIFO不曉得可不可行
6 @. n+ h5 h( i: x5 a0 f% u" l如下圖所示
1 b7 G0 P+ f6 d. v' Z/ H& ^/ p. Y2 |- q5 }) w- Q& M, n2 u
先就full,empty討論,trigger level不管* h y6 r# d' ^& H1 c' i
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間& J* O5 N+ }- }9 P2 c
/ V1 z" a9 x3 d4 F
1.用額外bit(valid_bit)來指出register是否有資料寫入2 i' G4 ]9 R1 i! O9 o" y- J
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
% {: Z2 j4 O0 H" f9 i, ~- ^7 K0 S 當讀取FIFO,相對應的valid_bit會被清為0
9 n' q4 q* f; j" r, C6 P: {3 P( p* i% b" d2 B9 A
2.wptr及rptr用bin count
# L7 w9 k# k* F0 ?9 q
7 F! S% p% v) P0 f O! Y3.full將所有valid_bit取and,empty將所有valid_bit取nor
; T+ \4 i, f: k0 l2 f' W3 v3 y7 T
* p, \- M8 i+ R4 P$ [( S* u4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時- W2 T1 u$ k( _) Y$ V% y* i& G
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case3 ?/ [4 w0 B9 [# Q' t
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
8 c/ F* P( m+ C7 |' r' O- w1 C7 N0 a3 a. ~- z; I. B
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
1 @1 [9 M6 ^, V 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
8 o7 t1 x& s' l4 z 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接. X& f5 o7 E3 c% O" |% G* j o
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
+ u! E# Z) d' I& n- F) b 個位置是空但被判定為已經滿了的狀況)
/ E c2 w& }* Q @, Z6 O$ W( `" t* J
& N4 b7 r* Z( r3 j0 j/ U9 g以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|