|
您好. u4 a6 L# @' |! S
最近想到一種架構,用來做FIFO不曉得可不可行
1 `1 `, o% K- a. ^5 M- S如下圖所示
0 [% [6 `) J: I2 f& c& c# V
( V0 T x3 l8 D& ^3 I先就full,empty討論,trigger level不管9 V) L5 P: B. x( E5 W" c; V
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
# C) |4 ^# v6 ^! @2 W% O- K5 {/ D$ M2 U) {! h: B! e
1.用額外bit(valid_bit)來指出register是否有資料寫入: P& r1 X' U" z4 _
當寫資料到FIFO則相對應的valid_bit會一起被設定為1
7 r/ F- z3 E" L! h1 n 當讀取FIFO,相對應的valid_bit會被清為0
6 L& v* u9 F, N8 C. ]1 \% L: I ^0 ?" S# d( n
2.wptr及rptr用bin count
% b! n, r$ g3 }, z" J ^! S |3 I2 y' L+ q# p/ M4 t( Z5 s' j
3.full將所有valid_bit取and,empty將所有valid_bit取nor, x, X: ?, h8 G. j4 x1 ^
+ J0 W! K4 Q0 Z: u' e4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
& B& V6 Z! ]% ~+ _1 q worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
" T1 N; X) }& g4 h* l# I 出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
6 P" C$ a- f W+ _- ^- b6 V; F2 L8 I# L& ?: S4 u
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
* ]/ R) R: e8 q( h9 E4 r( N 當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
! n) \% _+ y: I! X1 `, z 週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
2 O( u- D8 t8 Y% _ 將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一( k9 C! d% j& y: c9 v$ e8 d
個位置是空但被判定為已經滿了的狀況)" O0 X; r$ M) g& H0 y& O6 }* r! R
$ n. F) f: P0 S, y! w B
以上的推論不曉得是否正確 |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?申請會員
x
評分
-
查看全部評分
|