Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
; }' M- }. ]6 }! C: r( f; r5 A
% [' c( W" G1 v2 J- ~1 ]這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
) X3 M/ ^( F- j- A, U3 n; R6 ?0 I: W; U; p
那些信號也先估且如我假設一般
. P, ^$ r# h4 C  _# |wen是RX收到一筆完整的資料時所送出來的6 C5 ?+ I5 A: e0 m, t$ `3 x
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)8 i- c7 }+ M# F0 K, W( {. g% u
prptr:process(nSysRst, nrd)
! j- y5 a, p4 T/ R& Ubegin
! Y0 s. R/ i* m& d8 b    if nSysRst='0' then, q! }; x# L8 x. d1 ?
        rptr <= "00000";
4 J& ^) |9 n+ X" Q7 z# k. U9 }    elsif nrd'event and nrd='1' then  k9 I' ?  O8 L7 U% m  \  S- j% J
        rptr <= rptr + '1';0 Y" b7 M' Z! J) C
    end if;
, S  z& @# {& i% w5 H: Jend process;
* }9 {1 I  I; W2 ?- l
0 F$ P$ u1 u: h! I2 Kpwptr:process(nSysRst, wck, wen)
% x% i. j4 d: W. S9 x* h$ lbegin
  c3 \4 a0 h6 j5 \3 q    if nSysRst='0' then; q' ?: x  [- V8 J' R, S
        wptr <= "00000";: k0 s! c! q& B8 r* O. t+ j7 G
    elsif wck'event and wck='1' then
5 [8 j6 Z* m4 r& H/ b  x        if wen='1' then
2 B! m' ]3 m* l9 Q+ D$ D            wptr <= wptr + '1';8 ~- e/ }' T- m  K) ]( V+ y* t
        end if;$ Z( x( g# R" ^& B
    end if;
5 N+ z  a5 ?* Send process;
7 v7 ?- F2 V8 k- o0 W1 n
6 M& \. O" P$ T$ F假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
8 V7 s2 P" X2 M# _1 l你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key" {- P: G4 r4 b0 a( o+ g6 g6 O- Y

, ?4 f. k$ Z+ e. }Read buffer部分
: u; P* l1 U0 m1 t% ]3 h. W- `
+ ?; {* r( F; M+ `! c9 m! t3 M8 M--read_buffer! j. r, j! F! f) j& H- l
with rptr(3 downto 0) select rdata <=- v' f  U; T, @3 {3 ?
    fifo(0) when "0000",
; x% H9 O4 J' W! U    fifo(1) when "0001",, o) i& S4 e* A: a, ]) }/ n9 e
    fifo(2) when "0010",
# T2 p8 N' j: d" _7 i( L9 @    fifo(3) when "0011",9 I5 G; b/ }( U3 {. B. w' u" \
    fifo(4) when "0100",. E4 h% ]/ }' E2 w  [/ G
    fifo(5) when "0101",
! G/ T8 ^; J4 z- o9 Z    fifo(6) when "0110",+ W; J/ r' ], I: l& g8 r. R
    fifo(7) when "0111",
( k5 x% R5 e/ N    fifo(8) when "1000",1 U/ D6 T7 q" j1 _
    fifo(9) when "1001",
+ a) a5 M/ s' j9 \    fifo(10) when "1010",
# w; \# J$ w1 C) C' q" \    fifo(11)when "1011",
, n& s/ k0 C* ?0 |    fifo(12) when "1100",, L& L9 w3 \0 r5 J/ z/ ~
    fifo(13) when "1101",
8 t) k9 q3 U: }" \& e- o' E: u    fifo(14) when "1110",
9 ^4 c" P1 S5 A! s/ D    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分/ O+ N; G7 b6 v3 L# R9 ^, c

6 O- K5 l- @; r3 A! ^write_buffer:process(nSysRst, wck, wen, wptr, wdata)
9 h8 K# w( ?6 ~7 r- f1 Pbegin
/ U4 @3 g- {" T- o    if nSysRst='0' then& e" {( i' ^4 Z8 s- F, t
        for i in 0 to 15 loop
" k- [) y0 g- @" v            fifo(i) <= "00000000";. d3 k$ E/ c9 G2 }% |$ P7 R% X
        end loop;: _) M. j2 N2 \8 c1 _. I
    elsif wck'event and wck='1' then4 K9 D# y3 _6 Q) K: S
        if wen='1' then
5 a) @& ~" h- \( _            case wptr(3 downto 0) is7 [& B. Z- Y( s+ I) H# Z
                when "0000" => fifo(0) <=wdata;/ m: Z$ F+ B+ |% a5 o: f
                when "0001" => fifo(1) <=wdata;
4 _& L2 R- k6 j# @( Z0 y% M                when "0010" => fifo(2) <=wdata;. p+ }# e7 S$ h- M: ^, `
                when "0011" => fifo(3) <=wdata;
! U, O" c  Y8 ]& v6 W  G6 j* T( m                when "0100" => fifo(4) <=wdata;7 Z9 ^( k/ }% D  p1 d" @, q3 ]
                when "0101" => fifo(5) <=wdata;
6 H0 ]3 c. Y  ?* j' N                when "0110" => fifo(6) <=wdata;; {. l' x7 m( i7 J
                when "0111" => fifo(7) <=wdata;
6 ?& j) E6 j1 i/ B                when "1000" => fifo(8) <=wdata;
6 V5 p! u5 `; b                when "1001" => fifo(9) <=wdata;( o5 q6 I1 ~% B, |/ B
                when "1010" => fifo(10) <=wdata;
+ z) V: @5 K3 e' Y( a# x( U4 `1 D& R9 ?                when "1011" => fifo(11) <=wdata;
  k! b9 A( \7 B6 w                when "1100" => fifo(12) <=wdata;
  w. O, G9 m2 H' O9 {3 R1 ~: ?                when "1101" => fifo(13) <=wdata;
+ g; g' a8 ^" q/ x                when "1110" => fifo(14) <=wdata;- l/ @- B  `, K' T3 k
                when others  => fifo(15) <=wdata;9 S4 ~( _5 |  a- \( B
            end case;1 x6 s8 J( T3 ?* }, Q: _# }
        end if;
1 {5 ~3 v% T7 P3 h$ k8 r    end if;
7 P( E- h7 e6 L  zend process;8 D; M( S! c4 Y/ S- \: D

7 }9 ^' \, J8 D, D5 M8 q  }[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分& J; {! D+ e3 U  v4 v
我先做些假設+ k; b+ N2 r& Z$ H' ?- z$ \
1) /RD動作時狀態不能改變
$ s, S" U. \- y! K  s3 m* I2) wen動作時也不能改變狀態& `$ @$ h+ e* E2 l( Q! L
如果只有這二個case的話以下這段code或許可行
, M6 o+ |  q3 K. a% m: v: c) X( y2 l. P: S! w  m$ [4 Q2 o
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
0 k8 i+ t2 K. k4 ?# nbegin
3 V$ ?! C! d, G* P    if nSysRst='0' then0 |2 |4 S/ S: F# y% a
        full <= '0';
$ d9 W6 e9 _; s9 m        empty <= '0';
# \4 y+ I' a! W        flag1 <= '0';2 L1 Q, Y) @/ A' Y9 V6 m8 \
        flag4 <= '0';  X! m. g& ~- ^4 G& X  G8 k) \
        flag8 <= '0';
- E- J) [1 f, O        flag14 <= '0';
# ~& j; b: I; |! F% j  u    elsif wck'event and wck='1' then
0 E) g- A; X3 X7 [! K+ y        if wen='0' and nrd='1' then; I  q( R& O" \5 d
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;+ j$ ~% `, d7 b/ K  K
            if wptr=rptr then empty<='1';  else empty<='0'  end if;6 T0 H& K$ w* ]- @3 n4 G! h
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
1 A9 J- b; B' J- _7 m; Q4 ]! t            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
' b8 m" y7 L% v' |0 g. M% [            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
' ~& G) ?' V% P/ C' o            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;' p2 H7 D" K& l, V7 @  x* M& X/ {. w
        end if;2 `/ d3 t5 ]$ K/ o
    end if;
7 T- U  M, D3 Q# m3 @end process;
0 N: W  d' l6 \. `
' a1 |# J' b9 |9 q* r; C3 x& ]3 `[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
1 Y  ]) n9 ~7 p
) @2 c9 q8 F" l7 M; S好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
) }9 H8 T9 g* o$ Y; `8 N% Z" M1 h% d# C6 U( |( L4 m+ h
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
3 j7 Y  H6 S- e) u0 W- v7 Y' w7 x4 S. c3 E, T
1.% |  x: u% P3 X& y* h
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
3 V2 F) M, @) o1 z# l( c; e+ O3 ^5 I   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
. M9 J5 }& I% m1 k7 }   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
% U; x7 z" ~7 P, y/ {( {2.; {+ t* O/ z* m: T% ~% ?+ Y
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
- ~3 C6 H! |9 G' @  \* Z+ N" h2 [. ~   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
& K( n# s2 I+ J9 I/ Y. l! P( F5 D/ q   資料讀取週期RC最小280ns
3 S$ ]8 S# j+ p3 G# E, S) l, }3.) ?: S8 _* ^2 Z3 T' f
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
4 T2 ]& c* f7 e* E  v7 w   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
' N' U4 r$ }; Y" D) j7 y   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
5 f5 P) }& Y4 [" F   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了0 C3 g$ r6 b% y7 |6 E2 l. P
: A. x1 j  `8 s7 H3 A
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
9 u: `- B# Y- n$ \. l( w1 n0 \" J5 g( C
第三個問題還是clock rate的問題* I* a' e. ?/ W- g# @

- O% }9 b/ U. ]; p' ^第一個問題留給別人回答好了...2 E) m$ m6 ?+ |' @6 X/ `( H
2~3問題的確是問題沒錯, 誰來接手一下呢?# V9 A, `* C: t2 }4 q. c- w6 S  j

0 f+ V' o6 z0 @6 Maddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!  Z; v, b5 `! _, p- I/ @
' e9 q. l  W. e# e3 J
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
- @+ p/ @1 M7 r7 y- L# Y[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]' |# k0 d$ ~1 N% {3 A" \/ V1 T: k. `- ~
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.3 n" c" o0 R. ~+ u  _' r: X+ ~
[4] Website of USC Asynchronous CAD/VSLI group. [link]5 P* w* C* [$ p( h& c, f3 @
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]! _* V( s3 f6 Y+ w' _5 k
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] % K' i+ l0 H+ F$ p; C8 C
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
# i% X/ Y" K1 B5 `: y- b, a5 N我會好好的找來研究看看
% f9 m) |; g& ^2 d+ ^* R# @% ?- ?5 F: H
我本身目前不是從事電子相關行業,不過對於; J# b0 v- f) u
FPGA/CPLD,HDL,數位邏輯設計及單晶片等0 t* _% d& {/ x9 A/ h8 C5 ~0 t8 u
都很有興趣,之所以要寫16550 code主要是想
2 |; |5 p% {* R+ j2 V' G7 N3 i挑戰看看自己能不能寫的出來,不過似乎沒那麼容易9 `& {' K5 t& f1 {
0 N( ^& p5 M/ G# w- F$ j
FIFO這部分我有上其他討論區問過,可是都沒人回覆9 d$ B1 ^# j) C" z, z
感謝版主願意跟我討論這個問題4 N& b! B3 a+ N  l$ V3 a
( i- y; s: T7 J0 j' b, [4 P1 g
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多( [9 y- N6 A& U8 J. T; @
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見& ~1 h1 D7 W' D+ s& ~) J7 D
不然的話就變成只有我們二個人在討論了...
7 l$ G3 @; I- z# x0 I2 j3 @5 u4 E3 U
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好- Y' j9 i" _" `+ q
最近想到一種架構,用來做FIFO不曉得可不可行
5 ~7 ?8 l! g# E$ ~如下圖所示
% P2 a4 J- X" ]3 r2 }+ L% L0 P5 g9 y3 Z
先就full,empty討論,trigger level不管9 Y, a" A( Q" d
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 |- f5 E6 H! V2 F3 ~; U* J
& d" J8 {7 h+ a# c( x$ d; f6 \/ F
1.用額外bit(valid_bit)來指出register是否有資料寫入9 T: [7 Q! E3 n  G
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1, \, `2 e$ `1 S& X( B
  當讀取FIFO,相對應的valid_bit會被清為01 R+ K! R" |* Q5 p5 ~

3 D& ]! a( y1 m. W! f5 J) j# B2.wptr及rptr用bin count
( N* ?4 ]/ c. ]3 Z" R9 C1 |/ a1 Z1 ^" j" j. R* r; K
3.full將所有valid_bit取and,empty將所有valid_bit取nor. K& t" d9 s6 [4 f5 v5 F
6 K, X1 N- U5 Z$ Z* n6 r
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
$ s; L8 ^2 u: x+ r& I. p: v: W  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case4 e3 d. ~+ z% n5 |: ~
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
0 a( K% n3 A6 G# v( `( O6 i" ^( A$ M: O/ C2 q9 ^9 E
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
1 A; u: D( H4 W7 V- V9 t  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
& G, p5 h- b* n  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接9 ~' P0 x7 G3 Z3 k+ E" E1 H
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一& X$ A) L: S7 E$ x
  個位置是空但被判定為已經滿了的狀況)' j' z, f+ l: e" Y) d

, l: N9 s+ C$ a以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
' O7 b) O7 j1 k6 m) z3 E4 S: K, m9 F: t' [
如果不管coding style的話, 這個想法很好
& B3 \5 q! q( _1 `# {1 ?5 J  Y2 G
$ s  ^7 c" w, p( k5 w1 B相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.! j3 \2 H" g- B5 }7 f8 F3 S, [
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.- y  @4 A: C1 H  r* l
anyway, 互相交流吧.
) q" y: c1 t$ F: s1 e6 k& n( `& f) e) m
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
; J( U) V& N$ d; N4 G  [我想到這個方法除了電路會比較大外還有其他缺點
* p% F5 ]/ y3 O* R1 t" E) J4 J; m  y2 V; z/ ?5 _( K0 a% Q$ l
1.不適合做成容量較大的FIFO) j: ]$ l0 r3 x
# _' v9 B8 Z, q; b! \5 a* k
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響- |6 b" y3 ]/ ?. `+ Z" t/ x3 I: _
7 U" K( w, G; u% P% i
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
4 b+ r5 j  U1 i3 m/ I8 \# j   會有較長的延遲時間,所以速度被拖慢了% f4 R; A4 r1 s  K
+ G8 p( g+ s! h2 {% F
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO, Q' X6 X! T4 s& H, {
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大% w6 w5 P% J7 e7 l: s- k
但是做ASIC時你會發現其實很小的+ g& D; O! z' M( Q

" j( Q( E% d- V$ S! T- ]
% Q! }+ w3 e1 I, h/ d6 M2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
3 y' R% s4 v3 T. x0 y% Q這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
3 y& L4 z& W1 ~' a
5 u: X, ~2 R8 J3 f. E1 f+ c1 [% ?3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
' J) q6 j7 I+ M) Q* L5 R相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好: T8 ]7 P' M5 }4 Q; e. G* J' V4 E

! P5 I+ U: T, A5 ^) p: M# P2 C0 U( C. T5 j2 T
1.
/ c3 r, U$ X) n: G3 n   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"$ {+ n5 _- E& Q/ R( z
& B2 B# U4 n) r
   不了解這段話的意思,可以在進一步說明嗎9 N  C- _; u/ f0 k% G
6 u" y1 ]' }3 W' @8 [+ o
2.
( @4 H) ]  f5 b& Q% p4 f- W) o  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
  C% {* d. g/ a' i2 H7 \7 M  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
" V, n6 a+ f. Z6 W( R& e8 R  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
$ B8 R  @' P2 N  請問有辦法評估亞穩態維持的時間嗎
0 o$ ~% d) G+ g  % ]- p' E4 J/ `
謝謝7 x3 S* U7 R5 R6 t7 v
/ p% l* X# e2 k7 ?! e6 L
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
6 W7 j( B1 ?: D" i! h我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:$ ?( e  y8 D! r7 S) F) _) K
empty = true if valid[WPTR-1]=false
! Q* O9 r* R% H' x( p, T" k4 Cfull = true if valid[WPTR]=true
' J0 {7 p  Y4 h# {6 S可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
2 O+ k' M$ R8 x$ E9 y' e
+ B7 V- {' c+ }5 f0 u* k2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
/ e, C5 z+ S) v2 j5 [關於 metastate- n* F3 n0 @% y2 ?; B1 h. Z
請問如果一個d-ff假設 clock頻率1 hz3 q4 P" E9 n' F/ d" f
如果剛好發生metastate,metastate這個狀態- ?. y5 x" S/ B- N; T
有沒有可能有機會維持1秒的時間長度呢
5 o/ y' R8 G. h, H
& E9 T$ N0 l# f9 t4 {- B& H謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
8 `" G, c! N# y8 g: h  X/ [! J) p* g- Q3 |! o0 s
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-8 11:17 PM , Processed in 0.123007 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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