|
您好0 u, C I- {: I' c8 k
最近想到一種架構,用來做FIFO不曉得可不可行( `# {' k! Z5 q
如下圖所示
( u: l1 q# O2 o, T1 m
! P- }. Q9 L M4 I! h6 s# l先就full,empty討論,trigger level不管
+ X# o, j9 K! O: n讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間5 D7 K" x' I. @3 H8 S) d
* H6 C m: c5 l7 k4 ?, [! m& |
1.用額外bit(valid_bit)來指出register是否有資料寫入5 }3 K8 v1 S! J' z7 I- [
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
0 [% h; M# G" r9 B" P+ B 當讀取FIFO,相對應的valid_bit會被清為07 C! M0 `0 \; ~
: o+ _, o @/ \: t% ~9 C# _) t1 o
2.wptr及rptr用bin count
/ x5 D+ N0 ^" D* z( w% S
! T6 S' r+ O6 y+ T1 O0 i3 y/ S2 {" P3.full將所有valid_bit取and,empty將所有valid_bit取nor# T' }, p2 B" F8 R6 c) g
- [9 R& ~5 h% c3 d3 T4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
\4 s# @9 N4 I# G; u. h- M7 L8 J worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case# t) `+ f6 X: [" d7 w
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已* j9 o5 m9 E- m1 k) Y% Y0 }; i7 l
- H. C! C9 L, \1 ]+ S* t
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作; @. R) }! ?* S+ B, f
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk5 A1 o. g& {4 ~3 Y$ R1 x5 ?2 e* p
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接. {- \8 ^1 q5 Y. r) z+ x0 s
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
$ H9 N! `2 W2 Q5 K- o( K 個位置是空但被判定為已經滿了的狀況)
. x6 s) |0 G' K2 i
0 Z) j/ G# C: e& a6 H) @: v以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|