|
您好
! L# ^# A, h6 b! P; W2 |5 R最近想到一種架構,用來做FIFO不曉得可不可行
# b6 g9 e& S4 F. V* k$ p如下圖所示0 T- F7 o* t, }& k% s
, I. ]3 y: o! A b* V- Q0 w先就full,empty討論,trigger level不管
i; x. f- P* R) j& F7 K# i讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 l! f! E( g, P, M
# k [* N( `& {( l O1.用額外bit(valid_bit)來指出register是否有資料寫入" u- L' [% \$ @, l& u; ^6 }
當寫資料到FIFO則相對應的valid_bit會一起被設定為17 ^) F5 F; D& \! F$ L( b6 w& x* j
當讀取FIFO,相對應的valid_bit會被清為0
2 t" b, N4 q& } {1 s+ I" k! R, L5 V; N# Y, j. t; ?; F3 r; T
2.wptr及rptr用bin count# t, L% A% Q$ F8 \- l
4 k3 ?3 Z. Q) t3.full將所有valid_bit取and,empty將所有valid_bit取nor, W8 x. L$ e* n7 b6 B" }( N
- Y f4 e0 b" \. { L4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時8 a9 L- P" a9 n- c; D
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
6 M1 l4 k5 j$ ]) U$ d7 o2 ]& i0 D 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已, d; n8 o# V# q# U2 ? Y1 ~. B c# w
; `3 a% q, {; S# ~1 W) \5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作- i. J }$ O7 S$ Y3 O% Q W
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' y# N! o! \/ K8 ]6 L
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接/ ~' s9 k/ q) \
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
" k3 j1 d7 L+ B$ J( Y9 R% K7 j 個位置是空但被判定為已經滿了的狀況)) N% k' W: l+ n' b4 d
9 C; f$ P, X- o# ?
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|