Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
) j1 M/ G- w5 J+ T/ w8 b
) I6 [* V+ b7 s' D3 E這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多$ W. o$ F8 B% o" z' _( V

3 M1 _7 n" c# E/ v( c. F% H- s那些信號也先估且如我假設一般
+ O" R7 C( u6 O3 g) `( ]0 }wen是RX收到一筆完整的資料時所送出來的( W  e6 p4 @& N) l/ v
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)% [, X9 p. i- ?/ K# }8 ~
prptr:process(nSysRst, nrd)* G0 Q! X6 D9 y6 N4 ~# |5 ]
begin/ m6 c$ l8 r. V, q
    if nSysRst='0' then) A3 B. X9 k+ [7 t7 ^! L3 z
        rptr <= "00000";. N5 p$ _* d/ h% s
    elsif nrd'event and nrd='1' then
  y9 b' ]4 ]* H$ Q) n        rptr <= rptr + '1';8 z: [/ Y$ f1 @# V
    end if;% C1 P$ S! V6 R. f
end process;
3 P" w: l  ?: `1 m% C9 r* M/ a  \( b
; s9 W( c: o7 u" {8 ~+ Ipwptr:process(nSysRst, wck, wen)
& \$ ?0 f. G, C2 N3 w/ K/ m9 ?begin7 b6 m9 b6 N0 [0 k0 h& n- D
    if nSysRst='0' then: s  i+ o; e. a& g4 q
        wptr <= "00000";
+ s5 n1 h. O# `! K    elsif wck'event and wck='1' then2 |! l  c& S# _2 X
        if wen='1' then7 M) q$ z. t0 Y$ W' e! q$ {9 u
            wptr <= wptr + '1';
' e( ?* n9 u3 W' R        end if;- V6 U+ U8 r8 p$ X
    end if;( \" F7 R4 m' n9 z
end process;
4 V) z" `9 Y3 c1 D
# y, P" v4 p% I3 X5 z6 B假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
. ~8 b& E7 d; O9 ^  O你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key6 J( u" I# k3 J: {/ O  l

5 x9 G* j# S, A' }% SRead buffer部分
. v: _: W+ g) h: @+ J, V" `* f7 X- s
--read_buffer- V9 g& ]# ~" K4 k5 [& M* O1 j
with rptr(3 downto 0) select rdata <=
# w2 n* w. [3 n+ Z2 t    fifo(0) when "0000",
4 f$ R$ v! C2 b7 [6 p    fifo(1) when "0001",5 R$ r" U5 P- L5 ^* q# O
    fifo(2) when "0010",+ w& ]* Z/ v* B
    fifo(3) when "0011",
& `4 q- ?$ T  m0 {* x8 g+ V7 U    fifo(4) when "0100",2 ?! a+ c* `7 y4 i# j9 H
    fifo(5) when "0101",  k' B" J! t" E
    fifo(6) when "0110",# x' j6 g: L2 F' t! L
    fifo(7) when "0111",
' L' U* t% z& s9 G1 ^    fifo(8) when "1000",( k  K7 x: U3 |# i; {& c
    fifo(9) when "1001",
% f  Q" }; e( K* E    fifo(10) when "1010",
& ~0 g; Q  O/ i* F! u! p; E" B    fifo(11)when "1011",% s7 F0 p) g8 G/ O0 r, a' R* ?
    fifo(12) when "1100",2 s# U: [) J( R: g
    fifo(13) when "1101",
9 I. p# Z2 }* ]/ j( p) S    fifo(14) when "1110",8 K7 ~+ n* |' i  j) e
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分# y" @' V& O3 x) a* I$ ]
5 q7 L. Y% ?. Q4 V' Q' T+ N' _
write_buffer:process(nSysRst, wck, wen, wptr, wdata). Z& B! o3 Q# h# s) ]. r
begin
% a6 E' s# l* G) U6 ], e    if nSysRst='0' then
, i- i- X# H/ |$ ~        for i in 0 to 15 loop
8 A" Q/ h6 a+ _. h$ C            fifo(i) <= "00000000";# z1 y0 w/ ~, t; s* u% {+ j/ P
        end loop;
1 M/ W1 ~) A  y3 ~4 q- I0 _% W    elsif wck'event and wck='1' then
4 q1 u3 L" \! o/ H. a        if wen='1' then
5 U. W& H- r, }) o. a' a            case wptr(3 downto 0) is: w- I, ~6 p* m8 g8 d# i* e
                when "0000" => fifo(0) <=wdata;' P% E" |2 S% j% \
                when "0001" => fifo(1) <=wdata;% m1 _* Z2 j; |( D1 b4 h
                when "0010" => fifo(2) <=wdata;0 q3 j+ M/ S: b
                when "0011" => fifo(3) <=wdata;
- U" L0 E4 n8 c                when "0100" => fifo(4) <=wdata;# h( ]5 y9 X  j0 N2 Q
                when "0101" => fifo(5) <=wdata;
% p, V9 j) n8 j" A/ p. J: o                when "0110" => fifo(6) <=wdata;* h" ^0 D: ^' t* _0 l
                when "0111" => fifo(7) <=wdata;1 m. _; M& U6 V, j4 P
                when "1000" => fifo(8) <=wdata;
" _' o5 D! M( w+ J                when "1001" => fifo(9) <=wdata;* l9 g& c+ d+ Y/ J+ S. d4 y0 u
                when "1010" => fifo(10) <=wdata;
) ~1 o! E" ?# b) Z6 Q                when "1011" => fifo(11) <=wdata;
5 _. u1 ?" S5 p% F- K  C) m1 t                when "1100" => fifo(12) <=wdata;
7 o! q; F  O1 j  l- |2 }% x                when "1101" => fifo(13) <=wdata;
. y0 H# [6 v2 \" i! G                when "1110" => fifo(14) <=wdata;
9 `2 s  W( V+ e; d7 ~9 m                when others  => fifo(15) <=wdata;
  `  _# L  L1 \: s; ?4 A6 S            end case;
, P. e  ~  E4 f4 O; O# g        end if;+ }7 Z) }  F; m% m  P
    end if;/ v% @6 P" C* M! T. @! O* N$ H
end process;
, K$ y4 m. @7 y( o
0 J) z4 ]! i, [6 e8 g. s[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
5 V6 S" G* m2 ^  [我先做些假設9 U5 _0 e- W) G3 o) Q1 y4 t
1) /RD動作時狀態不能改變
$ w* }) q# B+ U; N* k2) wen動作時也不能改變狀態2 w  E5 O1 f$ n+ J# s
如果只有這二個case的話以下這段code或許可行
) G; o2 A  \& l( I6 S7 q9 @+ o9 U1 l. A4 w0 m' y# f) |
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
6 A; S+ l2 G7 h5 Pbegin
7 q/ X: z/ @' X6 H# I+ \: e( E! h/ z    if nSysRst='0' then
0 }9 x6 \  P& ]" l; N4 I: B& v* s        full <= '0';% U4 ~6 c! {, _1 U  `* m+ ?
        empty <= '0';4 B$ Y% G0 G6 _: ]1 q
        flag1 <= '0';$ {7 P" ?6 d6 o( Y3 `: d5 h
        flag4 <= '0';. G& G/ Y3 P1 l. e/ R; z% X
        flag8 <= '0';
9 n. U$ R* P* U. G  {        flag14 <= '0';
& p: u+ w8 ^8 `/ h9 \4 W+ F  p0 ^8 H    elsif wck'event and wck='1' then
; M5 f- }  `6 s% f, x        if wen='0' and nrd='1' then
2 T3 b1 x" h& ~2 t( \' h            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
& x& I  Q9 q# b4 K1 `. `5 V5 Y+ v            if wptr=rptr then empty<='1';  else empty<='0'  end if;
  L) q7 f  c* N0 A            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;1 ?7 |: l* `6 v/ _  }
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
$ A* g5 v: S+ x8 z. t            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
7 k: Y5 k" L' s8 t6 s; U) W* {! E            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
% r$ o& c. B) f" h' ]% m( K+ h        end if;
- U6 j4 w2 q; i# w1 @1 R    end if;: w1 r. f2 C! Z
end process;
8 y8 }  \6 c4 p7 g# U3 v7 V( P5 d" R  Z2 V- _  p
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
* k8 K) l" B  |+ G) B- F* ~' h1 ]8 d8 x3 h7 H
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
! }7 }( ?4 ?( P1 }& R: p) T3 _- p8 d; |* ^: Y
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
5 g& v- k% ?9 D* S5 Y- u# Q7 q) F$ Z6 D" V6 s1 s% @
1.: o4 G* G1 ]! N% F
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
+ E: G1 m+ W, O7 r3 P6 |& |   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
# \. ]( t' M% |9 y   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一  A/ j7 z4 R7 V- R# c
2.
* \5 e/ y2 M& X1 A   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高  p$ E: X0 ~5 W! @. O, \
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
6 E3 \7 I$ Z5 @: s1 j* G  }   資料讀取週期RC最小280ns
# Q/ B: v, F( b( O5 _, J0 [3.
/ {5 j0 {- ~( ?$ F) D   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期5 b* e! x) t3 b7 A0 ?
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講; X! Z& X0 n5 U, y7 O2 ]% z
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
. ~' l5 X( u0 ?4 w   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
& n6 a, w3 O. h$ v" A6 P5 q4 l& I, d5 {1 R5 e& E5 Y0 t
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
- I( L4 Q2 a3 q8 s( t% J' m4 `3 h: q7 \% P0 j
第三個問題還是clock rate的問題
4 e( N7 |+ Q+ f) X" H# Y3 k8 m5 m0 t& u% A4 I
第一個問題留給別人回答好了...
5 R4 O! r/ M* l2~3問題的確是問題沒錯, 誰來接手一下呢?
* ^0 A, N- {$ E/ C, w/ `7 L1 c4 H; x  Z# b
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!+ ~9 I& b8 d. ?8 ~' k) X
( B  g0 S& n* g, R5 L  J; _# _$ O1 }
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]3 a% f7 j* u2 A6 F9 }3 |
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]  b  R( m) w0 s$ F6 W' i( I
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005./ e) d. [8 q" ]- W, V- b
[4] Website of USC Asynchronous CAD/VSLI group. [link]$ d+ H0 P6 U% F$ }2 X! [
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
/ K& M. U3 E' w& ]4 g[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] & g9 u  S8 s3 k2 z8 e
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料7 s; s7 y; v5 q& Q2 ]
我會好好的找來研究看看
7 d7 t" b: p& |0 S3 k% F+ K, ^# `8 l( p& Z' l. r. X
我本身目前不是從事電子相關行業,不過對於
( m& c1 R* z  t1 H. U& QFPGA/CPLD,HDL,數位邏輯設計及單晶片等
7 C* U6 l: @' v. u都很有興趣,之所以要寫16550 code主要是想
$ e, L3 q) Y. K6 n挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
7 U! l0 `. i% D  g; o3 p% O; v: ?) m
4 n3 y' O# o2 c& |* ^2 QFIFO這部分我有上其他討論區問過,可是都沒人回覆! i+ V: S* n  N+ Z8 R( M% r
感謝版主願意跟我討論這個問題8 c! g: [1 c1 t' h" p
* @/ S/ D' n6 r  A! o
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
: r. T/ ]* {. U不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
4 b* N1 F2 ~3 A4 ~# ^- A+ y7 v2 c不然的話就變成只有我們二個人在討論了...  I1 d5 z3 |+ x8 H, U
  d( o3 ]! R: [7 E
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
+ \* \* {# P5 P7 n9 Z# `最近想到一種架構,用來做FIFO不曉得可不可行+ K& N/ R7 d& s2 g! }5 Y& ^3 x
如下圖所示
1 ]; A' ?8 s0 Y
6 V# e& _1 `1 H+ T# m8 G% v) }先就full,empty討論,trigger level不管5 R  \# z" ]+ ~4 h3 B, P. D
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間- A$ a7 s2 R4 m
! g  I# J# L3 R
1.用額外bit(valid_bit)來指出register是否有資料寫入
: R8 C# I9 |( z2 ^; {# C7 w5 m  當寫資料到FIFO則相對應的valid_bit會一起被設定為10 x) S. O. F0 i( K9 D; V' n
  當讀取FIFO,相對應的valid_bit會被清為0
6 y. d5 N" Q) [& J% \( v- k6 T  P# l
+ y4 B1 {2 Y0 J. J; \: ]. m- o2.wptr及rptr用bin count
9 r7 q* @- G; `/ e7 M3 T: S
* x) q; [: g  Q) G' M7 [3.full將所有valid_bit取and,empty將所有valid_bit取nor
" A9 O8 }. h) z8 a$ [5 O
0 d0 o2 Q5 S& `# }/ |9 {$ v4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
& C  F& H6 O& q* w  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case% @4 V- G  e' e. U' x, E
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
. A4 U% ^1 C# L1 d+ _, \8 Y$ J
+ U3 g& S6 t: \, x5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作& T1 ~4 f6 [, Y+ B
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk/ Y2 n5 A( L4 W6 F8 R9 u; I
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
* ^! w$ U4 I2 M  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一$ `& d, j% f/ \% W$ O
  個位置是空但被判定為已經滿了的狀況)1 Q/ a3 b$ L& R! M' A# ^/ T

2 ?( \7 }5 @4 \1 D; k; n以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意6 _+ _- C0 X0 k8 C; R, L
! F0 \7 W* I8 E+ m: C# f
如果不管coding style的話, 這個想法很好& N- t, Q" `  N

5 j& V$ `4 Q2 T  p% h5 B/ B6 V相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule./ C2 r1 T1 C7 R
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
2 b! ?' o0 U; tanyway, 互相交流吧.
; l3 J6 C8 H" @
# T4 _: W% u, T# r; ]1 e: [/ z改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好( x( N& Q, O* _# a. E& ^
我想到這個方法除了電路會比較大外還有其他缺點
( U' b. A4 m2 p& H2 `) _0 d" d1 o: R8 n
1.不適合做成容量較大的FIFO+ ?1 }. V4 K5 d& y. J% V
7 D* I. x; x7 S0 X/ m! u2 g
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
" O" o$ X3 _5 l2 F: x2 U% p) z8 ^+ O" s7 Q6 r
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
6 Q( N+ S; F* t; X   會有較長的延遲時間,所以速度被拖慢了
; x  J" P8 w* Y9 [" Y; W3 u9 o, H6 {) N. h/ {: z2 n5 b6 F
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO& H8 `" U! j; g8 t! E
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
& G: H6 Q4 b8 a' ~! b) k' U+ ]: e但是做ASIC時你會發現其實很小的
! x) ]: ~4 {# B+ J. E& o0 N; n4 r- L; x

; b( f( T- T, s. D" b; j2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
. U6 o' V& y' ]8 U9 ]* q這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了$ x( L0 n3 B( B" R) ~! W
, }0 v4 M6 m! K( {6 y, B
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
+ N2 q, W# l" N* [9 M相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好0 \* r& Z+ n/ M1 l

2 H# B" u( T% A
/ ~, j6 k. i. n& T9 e7 x) s4 @1.
" u! c8 J; i* ]# m, I# c8 Y: _; f   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
3 a6 ?" K( \7 g
' v# V) ~4 [5 F8 k/ l   不了解這段話的意思,可以在進一步說明嗎" ]% l& n) M- _
1 g% [) t$ Y' [
2.
6 p' {0 ?8 @+ a9 Q0 h. q+ {2 t  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間( F/ ]/ h; M: \9 [5 m9 U+ e
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會& r1 @2 ^9 N( @9 P& ^
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
, A3 N/ H  O) R( b- l) |% N  \4 q; \6 H  請問有辦法評估亞穩態維持的時間嗎* t& e  z. p3 P; r% e# B: _
  
7 n- z9 l6 c) }8 Z& n' K' B& Q謝謝
- W% H% V" S( J# w# [* l7 x0 H1 ~# n4 C2 N7 {
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. ' w. v. `# ~& [5 G/ _/ H
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:* E( V0 l. D; L; T  W. |
empty = true if valid[WPTR-1]=false
9 ^2 D, _& g6 k; L0 P8 ^2 O3 gfull = true if valid[WPTR]=true% n7 q( N# O1 B8 i9 T
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已+ [; X$ t) P5 g0 s+ w* G7 z
4 I$ a( Z7 p( n/ J) ?
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好# X- p/ X( _' V
關於 metastate) L2 u( J  }/ j6 z+ I: A8 Z6 Z
請問如果一個d-ff假設 clock頻率1 hz! L' X0 v- h( n9 N9 V( q# E
如果剛好發生metastate,metastate這個狀態
7 `; i2 p: D: l有沒有可能有機會維持1秒的時間長度呢
$ P( M) x$ c8 G9 {, Y7 k
+ f; @5 T% l5 K, V謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有4 l6 J) v# Y! _
7 o. L. Z. N( s+ A: L
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 10:59 AM , Processed in 0.152520 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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