|
您好% i/ c) w6 w; U6 \3 v
最近想到一種架構,用來做FIFO不曉得可不可行7 d0 i- e, \- m# h
如下圖所示
2 N5 O1 x6 V! X* Y) s
! o# ^4 W; a# Y; x先就full,empty討論,trigger level不管0 Q# m6 U" d" X+ i3 E
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間+ r1 ~8 |: R4 u5 v$ W/ L/ g5 d
" S! J* z- Z; v7 u! C+ y; Q5 K
1.用額外bit(valid_bit)來指出register是否有資料寫入
" R- {8 ]* L2 v, `( z- f9 a- A 當寫資料到FIFO則相對應的valid_bit會一起被設定為1
% ~) D4 e( }3 x8 x0 G 當讀取FIFO,相對應的valid_bit會被清為0
" o! F, k. m4 H5 i" @6 r
; Y" g6 Y7 y+ ?* [2 Y7 K2.wptr及rptr用bin count7 z3 R- t: ~$ r7 @9 \7 q
$ ~" n7 l* s6 t& r3 { C
3.full將所有valid_bit取and,empty將所有valid_bit取nor
( v7 y/ R( [0 \1 x, g' m* q, R3 {+ B2 z+ E5 }
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
) G* l0 G3 A. N# A worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case+ T5 [5 n' J4 E! M, p' c. n2 D5 i
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已0 F# t5 N! Q( q+ d' ^% X2 w/ ]
4 J" z( ~6 G d, w4 R5 q$ h5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
$ Q3 I" F' f( T3 C' Q- Y, x- t 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk" n3 X3 t3 ~# N& ?7 Z
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
, K$ w- N) |9 v, j) S 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一, }/ G! P; m6 J# z8 t
個位置是空但被判定為已經滿了的狀況)/ j3 [3 ~; p: S- f# X0 M4 x: T
' d! a. E# H; I! P; y以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|