|
您好2 l/ R) H3 E) I/ N
最近想到一種架構,用來做FIFO不曉得可不可行
- {' T+ U }) m! K7 B如下圖所示, D" ]( L% W9 T
9 \6 Q' o3 `* J' g# q3 U, ~4 {先就full,empty討論,trigger level不管0 J$ k3 d. J3 e/ P7 o% c+ y6 q& R
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
3 M7 {, R' a! R8 x [4 w8 k$ l3 i$ H6 a# f7 }$ P+ S
1.用額外bit(valid_bit)來指出register是否有資料寫入& ^5 E3 C8 M, ?0 V- m. D) G8 p* O
當寫資料到FIFO則相對應的valid_bit會一起被設定為16 m6 g- k7 h/ |, E: ~. @6 G
當讀取FIFO,相對應的valid_bit會被清為0
. U) M& @0 E$ f& ?3 I N( T
3 \9 c( n/ c! L2 N& E1 t; B) s2.wptr及rptr用bin count
9 X) }% s& @- `' ^* i4 B
( x: |! }- e' i1 t% y6 J3.full將所有valid_bit取and,empty將所有valid_bit取nor/ u' V& E' o# u# R" R& w# M
5 q$ a v8 j9 H( u# I4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
! r; F& v* ^; h9 G' k" @ worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
- ^' _& u4 o3 } 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已, ^1 O* z3 Q1 q$ A
, w; ]* r9 c. p; p: d% V5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
/ k4 Q: `' b+ `% s2 M3 d5 f 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
7 J; d4 b5 G- D: P1 V 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
) ?. e1 l' D" O7 L9 g9 U 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一! ?: _$ I* H9 o9 @" O
個位置是空但被判定為已經滿了的狀況)
4 O( @2 A0 b# Z) u
( j: s# k1 |: K, h. ?以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|