|
您好
! K9 M7 W) W' A" O% Y最近想到一種架構,用來做FIFO不曉得可不可行
+ p, r- q8 x( o* E3 I如下圖所示
! F3 s1 }- v7 ^! L- s4 i: q; W1 j2 I! O* ?3 T- o6 ]
先就full,empty討論,trigger level不管- c0 G' f6 a7 d$ X$ w# H* I
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間8 g' }% @: |( j% Y" m6 m
y( U+ d4 U- r0 d, E, Z- b2 d. n
1.用額外bit(valid_bit)來指出register是否有資料寫入
; T, G9 m" G/ Z 當寫資料到FIFO則相對應的valid_bit會一起被設定為1
2 _) X# T7 @' e) a% U9 f 當讀取FIFO,相對應的valid_bit會被清為0 O9 B9 i/ t1 Y/ Y4 `, |7 a
8 J. D- s! a4 k: h# H% a6 ]4 Z2.wptr及rptr用bin count8 _; z7 o6 L0 Q
; e. P9 M! n+ [7 `. t
3.full將所有valid_bit取and,empty將所有valid_bit取nor
3 u n' V4 M3 ~ U6 D- O* l" ?+ A6 J. d3 c) }
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
4 ]1 R Y& j- {- T worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
. `" {; m8 ~ V" n 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
0 e% z+ N" d9 [ S, z+ \- i4 U
' o# H7 ~- \3 U+ ]5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
, |; H5 b5 k* {' p; P. s3 N7 L- f: k 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk9 `4 c9 Y7 a' k+ {0 L* U
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接' p' H+ {/ \) m
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一- U$ C1 ?2 D ?
個位置是空但被判定為已經滿了的狀況)' ~" E! O* V& ~/ O+ _
2 E; z) C* }' Z# w; Y, s8 R
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|