|
您好
, g5 H8 e- O; f q$ U& n7 Q最近想到一種架構,用來做FIFO不曉得可不可行) k6 z) s- ~% `# s, T, j6 z$ Z$ Z
如下圖所示2 R) _: x# ]* v
/ [. Q2 E5 ?% L( O2 C0 a/ I2 D3 h
先就full,empty討論,trigger level不管
# Q0 F7 ^) I. b# v+ D讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
# c* |3 O1 l( p( ]' Y2 H# X' ]/ {8 O1 e
1.用額外bit(valid_bit)來指出register是否有資料寫入+ P, q |+ e" z! X( ?
當寫資料到FIFO則相對應的valid_bit會一起被設定為12 M/ b F9 |, k% h4 B J& u
當讀取FIFO,相對應的valid_bit會被清為0: x/ f. H S* `% o& ?
0 U2 x* `$ ^5 P0 l, t
2.wptr及rptr用bin count
% y H" ]9 v+ b2 S
& K% \- _, A+ J+ C. w3.full將所有valid_bit取and,empty將所有valid_bit取nor
, H3 @' K: s' ?3 S) J' }
* O( U+ p+ i _' i8 j4 v4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
* L$ `$ d5 E Q9 y+ l! z+ \ worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
* Q: g+ t3 i& }2 j 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已7 K, Y% t6 P D- @$ V, y9 k! n) ~3 O
8 P2 F4 k1 h) t" M: e
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
; `4 p5 D9 W$ @. {5 Q6 S 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
6 C5 V K0 R, n: x3 F" o) h7 L/ C 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接8 O7 ]/ C0 s/ J0 ^( ]! o7 f, G
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一& y+ u4 K. {. P7 Y
個位置是空但被判定為已經滿了的狀況)
# i0 C! }2 u; Z/ u" ^ {3 }8 N+ X4 o: s3 {* j
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|