|
您好
5 [1 A: G, x: y最近想到一種架構,用來做FIFO不曉得可不可行
P$ V7 u& z, ~; g+ B+ n如下圖所示
, s$ l( Q! W$ M' i: H
6 _1 q. r8 @; k1 n: s先就full,empty討論,trigger level不管3 g: y3 l1 C: q" f
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
7 e: K* P$ j" i3 U5 \; ?4 O( v3 |/ ^2 ^3 k" n1 u
1.用額外bit(valid_bit)來指出register是否有資料寫入
2 A) W% t* F1 Y. ^4 o9 a- C( V+ M. u 當寫資料到FIFO則相對應的valid_bit會一起被設定為1) e* H, s) c- x- {* B V1 M
當讀取FIFO,相對應的valid_bit會被清為0
' P3 _" v o4 p) @* }
! [# Y8 s5 J0 P) \2.wptr及rptr用bin count
. K9 {1 D N5 h) v+ j$ v$ s! g! u
/ ^& T A) q' j3.full將所有valid_bit取and,empty將所有valid_bit取nor
8 m9 B" \% j" u. [1 h% z/ D6 b$ @2 D. Z* f1 n
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時$ f u9 q4 O* ^% M5 ^" D) v
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case0 k) g# P8 F- L3 c8 r8 j& o7 F0 R
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已$ `* {! C) H- M6 ~
" l, z& R) ~/ U N0 @5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作1 ?% {4 x0 {( e; k6 N, n9 Q
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
/ P, W/ I. {) M; B! T0 q 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
0 E, N3 X4 Q/ d+ I1 u B! E; ` 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
0 [ }3 V; S2 [ 個位置是空但被判定為已經滿了的狀況)$ y/ m# d7 @0 f. l a! h6 |
) i' Z6 i; r5 w, v* p/ s
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|