|
您好
! C, k$ h d3 D' u最近想到一種架構,用來做FIFO不曉得可不可行( W: f6 {5 Z" q
如下圖所示& V/ [' o1 ?: v+ s. d) d9 h
; D' k- t6 v1 x
先就full,empty討論,trigger level不管' c8 d0 T' J& e$ h6 @( y1 n/ i
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間6 @' W4 ^! j5 ]( E8 _2 o
0 [; [% h7 q& m9 k b
1.用額外bit(valid_bit)來指出register是否有資料寫入
5 C* D% s6 r9 [ 當寫資料到FIFO則相對應的valid_bit會一起被設定為1( K$ u. w( V: o$ V9 ?% X8 u
當讀取FIFO,相對應的valid_bit會被清為01 @3 ?7 w7 s4 B# z
) {1 \" u# b: b4 p. U7 R
2.wptr及rptr用bin count
y& V$ S( o8 O" @) _' J% v; e4 S6 Z3 V; s/ w" w' A
3.full將所有valid_bit取and,empty將所有valid_bit取nor
3 W* A O0 I; O
2 K6 R" w' _5 y4 h1 U% c4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
4 H L' U. {+ x E worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case8 |7 _/ c+ g9 H4 {5 ^# A
出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已9 J1 }1 u! q v* r: n5 c
' e, b1 {' l4 T4 N& z4 k. W! S
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
. v+ B" }9 i% S8 V5 r1 ^: L7 ?8 | 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk5 l8 D; n+ H) G6 A0 w O
週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接+ S) ]4 C0 Z3 G* c; Q. ~% I
將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一3 s0 K, n7 C% g5 Z4 }
個位置是空但被判定為已經滿了的狀況)
% Q1 x+ J6 V& Z9 M
# i4 P, \5 ^# I! k0 O# D$ E# r以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|