|
您好
0 e% k+ k/ \; b# j$ x. N最近想到一種架構,用來做FIFO不曉得可不可行9 e d' s( h6 l6 }- s8 o
如下圖所示$ c2 `/ b4 A# b
$ D) Q8 ] y! [/ \) O5 {3 Y" w
先就full,empty討論,trigger level不管
' }; X l; C, `- ^, n* C讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間/ u$ P! w, E5 K3 v# W. E
* x) G1 y! |" }5 w H1.用額外bit(valid_bit)來指出register是否有資料寫入
; `6 j$ R3 C& q+ L1 S7 j$ Q4 r9 V 當寫資料到FIFO則相對應的valid_bit會一起被設定為16 z, J9 V: l' U& N
當讀取FIFO,相對應的valid_bit會被清為0
" Q' \2 J6 G/ Z" L0 G9 C9 \( [ [6 |% Y, j/ k4 W' {9 \
2.wptr及rptr用bin count
3 Q4 Y4 x* Q* [. i6 h/ G! J$ V
% R9 y: y; Q- N3.full將所有valid_bit取and,empty將所有valid_bit取nor
7 |7 a: Y0 V& P" r+ e9 Y/ D+ k, R% T- N1 e6 V+ h/ @
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
, h& N/ _- t3 c* `& D' } worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
' {# e, U. s& `' f) Y& s 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) @, B+ M# [. ^3 [5 C! q/ Q
# s, L( @8 p; a4 g5 u: F3 j1 C3 D9 E5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
2 f( c' j8 P! y; v4 r( X 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
) o1 a+ t% c" y7 @' [4 P 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
A3 X% o* }8 {, t4 v 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一- O/ d3 U$ X4 O! Z# b6 J& H
個位置是空但被判定為已經滿了的狀況)2 V% v; C" @7 H8 V1 Y# y6 \3 B9 A
$ \1 O( W" z2 k) A以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|