|
您好
6 m) A1 A; c. R" f0 _/ G最近想到一種架構,用來做FIFO不曉得可不可行
: @, C1 r/ H! n6 D; N& Q v如下圖所示
% T9 F3 c2 A2 m
$ H; Q$ g5 i8 S9 y6 K& k先就full,empty討論,trigger level不管
/ ^) C3 K) S) V讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 r/ f2 I7 C+ M* }8 ?' K G) M# t# O. I# N
1.用額外bit(valid_bit)來指出register是否有資料寫入
3 b5 D i1 C3 }1 t) t2 W( b 當寫資料到FIFO則相對應的valid_bit會一起被設定為1
' s y- d$ M7 P5 ? o0 P 當讀取FIFO,相對應的valid_bit會被清為0
5 y. i6 P9 E5 W+ a- T9 e! M2 p- H+ p' \% v" ~3 {1 N
2.wptr及rptr用bin count2 N6 ~; c D1 K% {2 p9 r5 Q
2 c/ |! D* w: c: ?. H" ~
3.full將所有valid_bit取and,empty將所有valid_bit取nor6 F- F- V+ K5 f$ v7 u7 ?; t
2 u6 s# P; u7 S" R; c
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時+ g/ f; r* x* P8 F, j, s6 x
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case4 Y' B! e% I6 D, [ E9 P
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已6 M3 h- y' f8 {
. d( n- E, c6 Q/ Z" F
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作4 E$ ^6 F: {; b1 [: q
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk( {$ B" p5 s3 n) S
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接; D, w' }1 z$ M' y& r+ s
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
# F/ [; D: s% C# w 個位置是空但被判定為已經滿了的狀況)
( s2 E ]9 Z$ C9 X2 l% d4 ^" w+ ~4 W* F% J, e& L
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|