Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
樓主: addn
打印 上一主題 下一主題

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
  ^! G$ D# C4 i: S9 N: J
+ T: m( o/ `) v" q# m2 m這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多8 |% o+ y' b& @$ J8 K; G
! H( F: b& H; h2 F- d
那些信號也先估且如我假設一般7 q7 n2 Q9 o/ z- r' }1 Q# v
wen是RX收到一筆完整的資料時所送出來的
" l. X4 d. ^8 p- z: V  d. l, \因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)8 B" B* U- C5 m: P
prptr:process(nSysRst, nrd)/ C7 [$ i0 w' ]0 b, u
begin9 D9 u/ _4 b* n6 v  @
    if nSysRst='0' then! P$ D- }0 b) |) E+ M
        rptr <= "00000";( C4 a2 O# z: n# z$ c. e9 i* x; J
    elsif nrd'event and nrd='1' then# R) c( s+ N0 T+ n3 p- h
        rptr <= rptr + '1';% O0 B, w9 v8 b
    end if;
: G& O# T& s* X7 Jend process;
; v# [- G3 d( |! p' m0 k; U: U
( m- M* q2 S0 i7 m0 S8 H; N/ m2 _, upwptr:process(nSysRst, wck, wen)% P1 b0 L  Z1 I
begin
! ?( G- w; n6 i    if nSysRst='0' then
. `" u: \) n6 H; J: m1 R2 ~% u* h        wptr <= "00000";
" C: w7 C. h, @7 D    elsif wck'event and wck='1' then6 D% i$ m1 C1 s
        if wen='1' then
- }/ C" A( k5 h* j% S3 u- |2 k8 x            wptr <= wptr + '1';
- @$ F; K% M3 V. F5 x        end if;4 I' K  v3 g9 u
    end if;
# ^7 n) d6 r2 x/ c" J; N4 A$ Yend process;
+ ^1 A, H, ~; ^' ^2 [. w
) q" S0 Y* g3 X( W# G, Z假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
3 }3 Y# q( w; r你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
/ ~# @# P: V) z6 v+ O- }
! {! X# P5 N+ ~Read buffer部分3 g4 R+ D, i0 e3 h

. y' p" K8 H/ d5 P7 w/ z--read_buffer- ?9 y5 Y* |4 W" ^0 k- C" [$ o
with rptr(3 downto 0) select rdata <=( U: R0 `! l* M8 g" b+ ?, {
    fifo(0) when "0000",
/ ?) }4 c2 B7 c    fifo(1) when "0001",
2 @+ |% C( a1 U% @; ~# a3 }    fifo(2) when "0010",
7 u9 k# U- d* n. z+ U* I    fifo(3) when "0011",
6 D7 p# U+ y/ V1 o    fifo(4) when "0100",: \: }# W7 W/ @# {0 ?, ^6 o
    fifo(5) when "0101",
8 h2 [! q1 Z  t8 L5 p# S4 L+ }& l    fifo(6) when "0110",8 k& {5 ?: H8 g4 v" O
    fifo(7) when "0111",
9 B& a3 B8 @' ?0 B7 V    fifo(8) when "1000",
' k! ^7 C+ ?& ~4 s    fifo(9) when "1001",
  N$ E3 z* F. Q, q# k1 R    fifo(10) when "1010",
0 i# l& j' g! J8 S1 o    fifo(11)when "1011",
% V- E4 S5 E* r# o    fifo(12) when "1100",3 y8 a! d3 B  h5 i4 ~
    fifo(13) when "1101",
3 G5 p9 s  x- X# d% S    fifo(14) when "1110",6 h9 m* T$ [+ @! D/ Y. F- b4 p( y* K& A
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
2 q8 s3 I# Y: w' H% x) T6 F+ K
4 N  h3 X6 }' R+ N+ pwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)4 ?) N5 o1 T7 k/ N3 h
begin
8 h0 q; T5 Z3 `    if nSysRst='0' then
, g3 a7 O) ?! g- l! N9 p4 N1 h$ B        for i in 0 to 15 loop
$ o- M0 ^+ s! X5 ~9 @$ S# }            fifo(i) <= "00000000";
! O# m" ~+ V' R# T        end loop;3 ?; O# Z- ]6 M/ E1 \; C4 e7 [
    elsif wck'event and wck='1' then
% O5 b9 r/ ?: }; q        if wen='1' then
" U0 q# S; E7 y% A            case wptr(3 downto 0) is
- i! {* N( e0 R% j  ^* ]$ l                when "0000" => fifo(0) <=wdata;
5 E" T/ m$ T1 F& r5 n; V1 M                when "0001" => fifo(1) <=wdata;/ H7 {! m* |/ I, o
                when "0010" => fifo(2) <=wdata;& p- O. o: e2 t& Q' h( r3 z* L
                when "0011" => fifo(3) <=wdata;
5 V+ o1 }+ W8 Z  _' o3 i                when "0100" => fifo(4) <=wdata;& V  w" f2 i1 x/ U9 ~  g
                when "0101" => fifo(5) <=wdata;
& x1 u  X" @8 Q! G                when "0110" => fifo(6) <=wdata;
0 x  S; N% x1 h0 Q+ n2 M$ n                when "0111" => fifo(7) <=wdata;1 f2 g" G! E( j. l
                when "1000" => fifo(8) <=wdata;
& K  ^3 {) Q, K- E# A                when "1001" => fifo(9) <=wdata;
, [$ v* P/ Z( T+ X# t" C                when "1010" => fifo(10) <=wdata;/ }9 o! d# g0 p9 C+ O7 z
                when "1011" => fifo(11) <=wdata;
# I- t% w$ H& O4 K/ I) c9 ]                when "1100" => fifo(12) <=wdata;
5 u) P$ E9 B- ~& {4 [                when "1101" => fifo(13) <=wdata;
% n( ?/ q: O! p4 B                when "1110" => fifo(14) <=wdata;1 q6 O/ }+ C) V4 c0 w
                when others  => fifo(15) <=wdata;/ Z& x! Q' |( ~  W. g
            end case;
/ O! }) o) F0 W" P2 N8 H        end if;
2 R+ h& p' p2 i) ~" d# s% b    end if;
! R8 I7 `6 n/ e; [1 A2 Qend process;1 r$ k1 E5 \: D0 f- H; e
5 d/ j0 Z! m* T! Z8 y9 u
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
/ v( L2 f0 o+ m/ z我先做些假設/ _; T6 j5 Q7 u* T1 m: n; y* e) S* q; K
1) /RD動作時狀態不能改變
3 h/ H8 ^# s$ D& r* A! M2) wen動作時也不能改變狀態, H$ I6 \* G# C: D2 m
如果只有這二個case的話以下這段code或許可行5 ]8 @" ]' L' \" @9 L1 R& d6 O

% n! l! S2 P! V$ P( K6 Lstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)- d9 @% q6 _; r# Y# q- g7 w
begin$ {* W8 L5 z/ E# b7 U
    if nSysRst='0' then
& r7 Q: s- [5 `' f( k6 n& l; v        full <= '0';
3 v* o5 W4 ?7 N9 o" n        empty <= '0';
5 m! O4 Z5 L9 z2 O: ?. f6 {        flag1 <= '0';
* G1 T( Y# A( K7 i) k1 Y        flag4 <= '0';3 G: L7 I- p, F) d' g1 v  }! j
        flag8 <= '0';
. f- o; f8 L2 z4 z9 l        flag14 <= '0';: L! ^+ d( q% z
    elsif wck'event and wck='1' then) U! l6 U. W& x# T1 N" o1 f' e
        if wen='0' and nrd='1' then
7 d3 f8 n" o4 H$ F, d6 }            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;) o3 v5 f7 ]8 `5 v/ N0 ?+ V6 c3 v
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
% ~; ^+ b$ q6 [# N            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;. S. R2 E, \/ ?: k4 H! f
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
5 d( ?; @  f. w5 \: S3 L8 g3 \, U            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
' s* F5 x* T' C6 |) j* b$ c( C            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;( @; Z- g+ c) ]+ J7 h: p, y# C$ K
        end if;
) S8 [& c: E. n- S    end if;8 |- i3 x! c, G' T) }, Y* z
end process;( P( O. n/ g3 W; c5 Z: w
- T; s& P6 ^3 o; s' A, J
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
8 k7 t0 O  Y+ e; Z* y1 {. `2 Y4 ?5 B: d; s
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
/ ~' l) x8 b1 M$ B
( c4 R. S0 U6 [6 j7 J& l將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論8 A% l' A3 e1 b$ A. Y: [

0 M( R2 P8 R; q! g8 D( X- x1.' D: K/ B$ L3 w9 t: b9 }2 v8 s. Z) u
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
$ p" ~* T& ]$ y6 E+ m   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生+ O' U$ ~  e% ~1 o: x/ x1 ]
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一: y' R, @4 E+ ~$ h! U" a/ }/ Y
2.% X) M! U$ C: M6 O2 m1 V+ r! [
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
; A1 |/ I! c, f& q( Y) r. B. l   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
8 b; b& v" Q- ?9 q   資料讀取週期RC最小280ns
* V  d% }* c- ?+ I  ^, w/ u1 s  V3 M; n3.$ z# F( ]6 X: P) M4 R7 [% h
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
: A! l6 ~( t2 l% c2 V   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
. U* o  |  T; ~( o& s7 B, [   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間5 X: c* t! u9 R! {  \9 V# z
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
5 B% E& ]/ m0 }3 l# Z% ?/ D- {2 @8 c
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了( K* q7 k8 l# r+ i. @
. {: P" a) L, O1 H
第三個問題還是clock rate的問題
! {0 p5 n. a: ^! T' G6 A9 @6 ~* i6 }% E& p' c% W* n1 l& g
第一個問題留給別人回答好了...
  a; T  k! T8 P/ `& H9 L8 O# T2~3問題的確是問題沒錯, 誰來接手一下呢?! w( \+ @, J, q% R" z/ L; p
7 B9 w" ^7 e" m  ]. r+ B, k
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!+ ]6 S( j) Z7 p. H, F
1 T8 k2 u& v) W: \+ Z
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
0 y/ [8 V& R+ ]* l! i; g7 ], S: m* u[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]; j! Q( c; j& Q# P3 k5 p, Y
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005., O: W; z# Q8 R8 Q
[4] Website of USC Asynchronous CAD/VSLI group. [link]
6 Q6 Z* o/ b! D3 I[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
; \3 `$ s. ~& K( h[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 7 n1 Z9 ~+ D4 N* \7 E4 r' X2 H1 q- O
[7] I. E. Sutherland, “Micropipelines,” Communications of the ACM, Vol. 32, Issue 6., pp 720-738, June 1989.
31#
 樓主| 發表於 2007-3-12 21:33:33 | 只看該作者
版主 大大謝謝你再提供這些參考的資料8 N1 _; n- {8 O
我會好好的找來研究看看
3 A" [- g3 ]( a( Y+ `- v- d& ]( O% {8 {2 ^+ }6 Y
我本身目前不是從事電子相關行業,不過對於
+ Z. b9 Q0 u) V/ \8 D' ~FPGA/CPLD,HDL,數位邏輯設計及單晶片等! d4 k  v' s% |& O4 @. a, |
都很有興趣,之所以要寫16550 code主要是想% W+ f1 s7 @' d0 L7 j( h
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
, ^" S+ M+ `/ \7 M0 F% _" q. D% A' |  K+ K! V
FIFO這部分我有上其他討論區問過,可是都沒人回覆+ `6 l5 {) Y" ^% y
感謝版主願意跟我討論這個問題4 J2 v8 J. O+ u0 f0 P1 R9 r

0 a- w3 L  ^5 h% a2 ~+ _+ u再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多( h2 y, m  u6 X* y7 z9 L9 i$ _
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
5 z5 j! `4 X7 ?2 t7 M不然的話就變成只有我們二個人在討論了...
2 ^* }" T" J2 b6 L. C0 w7 h, }! {2 c7 D7 }1 N) G7 W; C: }
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
, g5 H8 e- O; f  q$ U& n7 Q最近想到一種架構,用來做FIFO不曉得可不可行) k6 z) s- ~% `# s, T, j6 z$ Z$ Z
如下圖所示2 R) _: x# ]* v
/ [. Q2 E5 ?% L( O2 C0 a/ I2 D3 h
先就full,empty討論,trigger level不管
# Q0 F7 ^) I. b# v+ D讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
# c* |3 O1 l( p( ]' Y2 H# X' ]/ {8 O1 e
1.用額外bit(valid_bit)來指出register是否有資料寫入+ P, q  |+ e" z! X( ?
  當寫資料到FIFO則相對應的valid_bit會一起被設定為12 M/ b  F9 |, k% h4 B  J& u
  當讀取FIFO,相對應的valid_bit會被清為0: x/ f. H  S* `% o& ?
0 U2 x* `$ ^5 P0 l, t
2.wptr及rptr用bin count
% y  H" ]9 v+ b2 S
& K% \- _, A+ J+ C. w3.full將所有valid_bit取and,empty將所有valid_bit取nor
, H3 @' K: s' ?3 S) J' }
* O( U+ p+ i  _' i8 j4 v4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
* L$ `$ d5 E  Q9 y+ l! z+ \  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
* Q: g+ t3 i& }2 j  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已7 K, Y% t6 P  D- @$ V, y9 k! n) ~3 O
8 P2 F4 k1 h) t" M: e
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
; `4 p5 D9 W$ @. {5 Q6 S  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
6 C5 V  K0 R, n: x3 F" o) h7 L/ C  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接8 O7 ]/ C0 s/ J0 ^( ]! o7 f, G
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一& y+ u4 K. {. P7 Y
  個位置是空但被判定為已經滿了的狀況)
# i0 C! }2 u; Z/ u" ^  {3 }8 N+ X4 o: s3 {* j
以上的推論不曉得是否正確

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x

評分

參與人數 1Chipcoin +5 收起 理由
tommywgt + 5 好主意

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
  c3 S: W8 P2 |8 U6 P: G3 X: y
; T4 j7 {6 N/ \8 n0 E! `1 c+ s如果不管coding style的話, 這個想法很好
  ]+ Y1 l, |  ?4 ~) j6 Q! B5 e7 W, Y3 E  [7 E$ m0 I1 _
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.; T9 f( o3 l) @$ Y, U
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.$ I7 P' h$ S/ u, G! T
anyway, 互相交流吧.
/ G  p* n* w; y1 p- E8 E% a3 l0 Y0 v( s& e. @8 j" p0 n, C
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
9 t$ d; A* W1 k6 k. J3 R5 p我想到這個方法除了電路會比較大外還有其他缺點
( w" \$ P" U% b* }8 c" Q: W& D# _$ a+ z
1.不適合做成容量較大的FIFO# l% `+ a( i. Q9 m

' Z- D5 M( u1 k3 y$ u) [/ w/ X+ k2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響6 c+ J/ n% q4 Y; t0 ?

8 b5 |' t- c8 {. x  i) }3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
) W; k5 k+ l. N   會有較長的延遲時間,所以速度被拖慢了
! J+ ], w/ H$ Y# H. }. e; i+ F" T" \' x! U9 |* K3 P
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO% w# X4 L6 f& v/ S2 H
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大+ |2 e2 `' Q2 r' U, S3 y
但是做ASIC時你會發現其實很小的
4 }5 L' G5 y% w: \5 V$ C6 n
: H6 k3 U3 s) O2 q3 r0 ^
/ |7 M) x, Y; E2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響6 i: Z" M5 j/ I# g
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了; t& n( M, s* h3 h
( S5 t$ N8 O7 k# _, u; Z
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了/ x' `) ^9 B5 n: z: c# ?& R& j, `
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
8 b% R$ E1 t# I7 x2 R
# f# K9 z, F( X. E7 v1 o* `( z2 p0 {% r8 r4 H6 f- {" k- C/ G4 p
1.
) v, `, t/ E: B7 i- E* V- p. Y   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
( d( c" V+ h) \) A- O$ @9 n" B% D- H/ I
   不了解這段話的意思,可以在進一步說明嗎
0 O/ j; e) }1 j4 Y3 N$ X1 v1 j  ]# I5 l) y+ N  S) @: a- a
2.
9 [) q  U: {# |/ Q* l: \+ z  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
$ ?* ^6 ?, V0 ^1 D  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會0 c0 ^& k% s  R6 Z
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
4 D* x. Q  O& k0 A  請問有辦法評估亞穩態維持的時間嗎% W& Q: N+ p! `2 M0 U- d, h
  
! E% l: \6 m/ _! f6 p謝謝
! M  \3 d. f3 k8 g9 ^7 f6 ~+ S
/ }) @; H) X" c& A# S[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
38#
發表於 2007-3-18 12:55:01 | 只看該作者
1. 這是一個很直觀的想法, 全部判斷所有的bit所需要的and / or gate數目跟用multiplexer後只判斷2個bit 所需要的and /or gate數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. , T) r" J+ |. r3 n. z
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
- O6 X' V" e* `empty = true if valid[WPTR-1]=false
) P- L1 ]* d6 ~* N  Z" gfull = true if valid[WPTR]=true5 @% U! ?5 ?9 i& i; i3 h1 R7 r3 t
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已2 C+ d0 S" Y* H4 p6 ~5 T
  V3 [6 X+ d$ j' @) N9 m
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好+ F7 }! v4 }+ g' G! ], N
關於 metastate
7 G( ?4 {0 _" a( |請問如果一個d-ff假設 clock頻率1 hz
+ e# S0 c" e9 O" b  K- I如果剛好發生metastate,metastate這個狀態  B( B: ^6 n. r" o
有沒有可能有機會維持1秒的時間長度呢
& j. k5 X7 w6 D7 z6 r
0 G" R7 b) T/ l# H謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
2 u2 @# h4 H  j4 j! X+ {2 m. R+ l* f; j8 @0 J2 V3 w
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-14 10:59 PM , Processed in 0.126016 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表