|
您好
" U& g3 ~+ Y* ^* k最近想到一種架構,用來做FIFO不曉得可不可行' X: e6 u: n/ G- @0 t8 x: u
如下圖所示 r( o8 {; z6 j1 J3 F& P4 w7 s( s
. k4 U5 x _$ z" b( t. L& t
先就full,empty討論,trigger level不管1 x# X Z7 Q0 `4 a
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間$ N$ ^: c" c- c( r3 l8 `
. b: b! v3 |$ k' v w, q5 m. q1.用額外bit(valid_bit)來指出register是否有資料寫入1 H' v, {1 {$ E
當寫資料到FIFO則相對應的valid_bit會一起被設定為1: l" D; i$ t" d; i H
當讀取FIFO,相對應的valid_bit會被清為0
& T/ u1 P2 s: }: p. ~
& M% \% k: ?6 O: g2.wptr及rptr用bin count
* I: c* c9 `' Y# f0 ~0 @* X2 C
* m% |0 P/ @ |" B- S3.full將所有valid_bit取and,empty將所有valid_bit取nor$ q! m$ i7 P0 P9 V7 Q; K
P, l- U% {1 P0 D9 D4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
! X$ L9 `) n9 ^/ H: U worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case+ \( j }( \2 M$ |; g5 e% U
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
( U" R* w; o2 [; O. Y
, P, W! ]8 r# c, r& |5 E5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
S, R D( p/ m6 V C5 o \4 f 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
7 h- \+ t) j' L+ O2 N: V1 P7 X+ S2 p) J 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接' F7 ]" t: [0 T
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
+ A- y' A' e6 K) L) L8 R 個位置是空但被判定為已經滿了的狀況)
, N* G# Q( [ F* y6 ]. Y6 P
( V# l& [# G. q6 ?/ p以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|