|
您好
9 `" ] l. A3 A' X" Y& G! @最近想到一種架構,用來做FIFO不曉得可不可行: t3 A/ U! x$ a1 o
如下圖所示
8 U; d. w+ \/ q# {; O
! H7 v2 k1 G P5 G c! R$ ]先就full,empty討論,trigger level不管! f: C+ o' ^4 A5 }( {: p
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
4 ?2 _# l2 B/ ]" T9 R* b; p( X" m! r* n
1.用額外bit(valid_bit)來指出register是否有資料寫入9 e6 v! U4 \; P/ j# V" v
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
. ]; D5 M2 E1 T4 ]5 o 當讀取FIFO,相對應的valid_bit會被清為0
: V& k/ v& t% E/ {% [* q& @$ W1 [0 c3 v' ~6 p
2.wptr及rptr用bin count7 x- j8 L p* H3 Z$ `* Y
* i) Z" V0 z0 r5 s
3.full將所有valid_bit取and,empty將所有valid_bit取nor7 Z) D3 c3 W9 Y
5 p; v4 @( v) k' m) o. r, m4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時! v+ a0 ]2 i0 }6 ]8 G
worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
( e+ F; J3 D# Y6 x' Q1 Y 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) s. t# D$ R5 U% L& ], s+ a! k H4 N4 s! e: |6 N: M+ j7 w
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作# L6 y5 P9 p( u" K8 @! W+ F) H* g6 V9 w
當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk1 S X. o& d3 T
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接6 g6 u6 F: n5 I6 e
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
7 o* L# k }* Q( u 個位置是空但被判定為已經滿了的狀況)* {+ t o/ K O' x& g
# H4 k3 r" L1 D T* q* B, w
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|