Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
; b: E% }4 G* p) d6 q' ]) k+ Z, u/ N$ b9 N( J, a2 x# p
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多. x0 {  _9 [; ^+ \
* h) e3 T& }/ _
那些信號也先估且如我假設一般
- I% g" U& r1 b# ^wen是RX收到一筆完整的資料時所送出來的
. D# o7 h' i! i  B因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
2 V6 v9 F8 y' s. k" k* d) qprptr:process(nSysRst, nrd)
1 O2 n+ s; v) u' x. C* Zbegin
, t# n: O7 I% R' I    if nSysRst='0' then
7 p! S  i4 S  }& y' E; z" N; n2 {        rptr <= "00000";
* {# c; q# H/ U" D) o$ R! {    elsif nrd'event and nrd='1' then
+ P, m! D* ?& l2 q        rptr <= rptr + '1';. L% x, x, f# u, D* c0 s7 O
    end if;4 k. Y0 r+ m# A$ P9 B; @3 z7 o
end process;
( q% u) S3 x$ {) A6 z* j. _4 _: L5 z. X# X  c3 t  P- L6 T
pwptr:process(nSysRst, wck, wen)( t9 C, _/ w4 m/ n: B
begin
9 w' C8 M. \! r5 ^    if nSysRst='0' then3 k) z6 `4 n. V$ Y& ~7 u* E" z$ t
        wptr <= "00000";
3 a! B9 |& S. ]( e) _$ N6 b    elsif wck'event and wck='1' then6 ^4 E0 B/ \4 n; ^* {
        if wen='1' then
' \7 p( u$ h3 C+ v0 _            wptr <= wptr + '1';
. f3 Z% p# f2 r  @2 M        end if;
6 y) X  D; J0 D, [- ~% k1 Y4 A$ e9 ~4 y    end if;
0 t* c/ y) k( B7 p, s  iend process;
- S# F9 ?1 H' }  S1 r9 v* d2 _0 W4 W1 I- p
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?# x% X. P6 q: z" P+ l; h' ]
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key" _+ o# M% s" Q+ J; F) k- x
. |: Y  R9 P8 |1 j$ [. C6 e- E
Read buffer部分
6 `/ N/ t% V  B" _& P# D' P) P# w, j9 O1 O+ J9 D* Y
--read_buffer
; r% n9 s! n' E2 Owith rptr(3 downto 0) select rdata <=9 q4 F9 {4 u5 M
    fifo(0) when "0000",
, \" H  g: Q# B- s) G- Y    fifo(1) when "0001",
" P( e# ~2 b& t8 U+ r/ u0 g    fifo(2) when "0010",6 r' y6 O9 a( |" D  V8 J* w% \5 A% y
    fifo(3) when "0011",
  x/ W2 t# _/ P5 d    fifo(4) when "0100",& d( `" X1 [# }
    fifo(5) when "0101",
3 r. e; Z& k" k6 Z% |    fifo(6) when "0110",' Y! d( m/ r* }0 R6 Q/ V* `% a1 g
    fifo(7) when "0111",
2 E/ j! M4 G( u" Y    fifo(8) when "1000",
. z) x$ \# G8 i$ ~, h7 d2 I    fifo(9) when "1001"," z0 s1 }% C7 {& Z3 V5 r0 o2 G
    fifo(10) when "1010"," _5 v$ r$ K: i/ I) {! U9 ]
    fifo(11)when "1011",
! W! l% d+ [! Q( n    fifo(12) when "1100",9 E( W2 H! I" z' V
    fifo(13) when "1101",
) v$ I4 t' Y7 k    fifo(14) when "1110",
/ T. K8 r' V8 e    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分) w% _+ Z, v, i: m
$ A7 R" \$ f9 f5 B$ E
write_buffer:process(nSysRst, wck, wen, wptr, wdata)( ^5 C) ]5 _( S* ~$ ?1 r6 {7 [
begin, }, ]5 i6 a. R5 A8 U" u6 x
    if nSysRst='0' then* Y" C6 Y9 x: d0 P
        for i in 0 to 15 loop
. C& s/ c+ L% O, Q; I7 @- U            fifo(i) <= "00000000";
, e  m9 d% A6 [$ K        end loop;
+ m/ I" h3 O7 B4 _$ A" ^( G: f    elsif wck'event and wck='1' then
4 d) i: r$ U9 t# N7 R% J& Z( t        if wen='1' then' d/ P, h1 K8 R& p& W! B
            case wptr(3 downto 0) is7 ?' D) s0 {" H- v0 H9 c' c
                when "0000" => fifo(0) <=wdata;
0 L: r, a" j; Y6 q- x                when "0001" => fifo(1) <=wdata;
- F$ p3 k' a4 ^6 w* B9 \; ^' g                when "0010" => fifo(2) <=wdata;
8 {8 O6 G' {/ W7 \& U! i                when "0011" => fifo(3) <=wdata;
7 I+ r& I$ \/ e7 }" ^                when "0100" => fifo(4) <=wdata;4 y& p5 O, Q" R) v& X
                when "0101" => fifo(5) <=wdata;7 e, g$ w& r: e3 i/ s% h
                when "0110" => fifo(6) <=wdata;/ V! J% P- H3 c! `) ]" h. Y, X* s
                when "0111" => fifo(7) <=wdata;
9 a# _. y1 d+ a) y  u- [                when "1000" => fifo(8) <=wdata;( I/ j: y- g5 @1 K
                when "1001" => fifo(9) <=wdata;. ~" X# w+ q. j
                when "1010" => fifo(10) <=wdata;0 _, ~! ^  z7 T8 O0 q! v1 |
                when "1011" => fifo(11) <=wdata;( D7 z6 L, P; V0 |
                when "1100" => fifo(12) <=wdata;) ~8 F: g& I' H; w
                when "1101" => fifo(13) <=wdata;
$ ?. o# ]- K! a$ L9 }3 T' b0 V                when "1110" => fifo(14) <=wdata;
2 H7 S) G& T/ h  j$ V$ X                when others  => fifo(15) <=wdata;
3 r! r$ N( d8 t1 b' W2 P: E            end case;$ T" r$ X' i( a( @) x
        end if;
3 _0 s0 C# b7 u5 u% S* `    end if;
* ]' C$ X0 J3 h* lend process;4 |) d6 W- f, S6 A

9 v3 `/ n9 x" i[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
+ }( l4 G! v  j; S- G我先做些假設# s+ w" ~/ w, v. l
1) /RD動作時狀態不能改變" w  [" L( V( m
2) wen動作時也不能改變狀態
' D* h. P9 {" w' g" ]4 \如果只有這二個case的話以下這段code或許可行
9 d+ i+ F: \  E9 @1 a; p
4 r! l. A! O1 dstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
' x1 n' V/ P9 J) u; Jbegin0 ?- b! B& X" K8 x3 F
    if nSysRst='0' then2 E8 r2 F% I3 K% S0 H) I# B7 ]
        full <= '0';
/ h$ m- v6 B) R$ A        empty <= '0';
; }. G! _; n) L, k        flag1 <= '0';% k9 {. w# B4 _$ L6 P
        flag4 <= '0';) c$ `, V" Q, Z% ?) t7 u
        flag8 <= '0';
- ^* j. w5 k# x  `. Q6 X        flag14 <= '0';
) l$ T9 v' u0 R1 L! Q. _    elsif wck'event and wck='1' then
2 }8 }% {$ L* ^) [! Q: Z2 l2 {8 ?% X/ x        if wen='0' and nrd='1' then1 Z& {( t% [  }1 I
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
5 M& a6 J. M4 u5 n            if wptr=rptr then empty<='1';  else empty<='0'  end if;$ H5 E5 J" G* R3 U3 {+ h" @9 }
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;+ h6 x" G5 \$ I2 M
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;6 M# F# q9 V) }, n
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;! H/ q7 z$ l9 z9 Q( {
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
& L- u; B# u1 p* T+ D        end if;
6 |) w9 |4 B# I+ }0 E% l    end if;
$ L  p, ]2 h* Q, z# Mend process;6 ~8 r+ J* x; M9 N' u$ f. D/ V
8 q5 [, M& {$ }, I5 r8 A9 ^, x
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
( [8 z- d& N) C$ E& O! X* X' P: {
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例8 B/ [+ T, o; x& K. P

$ @9 f3 _$ F4 w* D9 y將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
  T; x: [, U4 {* V" c, Z% K- d
: P7 D3 U, A" R; F' G( ^: H1.* r, `8 _, z/ F
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
7 K3 w+ U: y2 E   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生  |! g. j0 |/ z4 y- ^/ h
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
) W+ b( G% }: u5 ?1 P9 X; A. E2.4 ]  K9 K# j9 {5 \6 B# W
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高1 T, X! `7 K+ @5 G7 j1 s( [
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
  }& r" G7 e1 w1 a   資料讀取週期RC最小280ns% V2 w3 \/ C& m5 |1 T
3.' s7 O0 b: W' t2 A7 y
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期2 `# e; S" a' A/ o! F) d9 S/ w
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講! A) |% o9 k( Z$ w
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間7 d* m/ T' R( y8 r! _9 r8 F5 O" t
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
2 Y% b& \2 j4 w- y7 c, _+ r7 }1 S) x$ [! P$ H% k
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了8 q$ h/ j5 e% j" c1 B

  @. D7 Z+ K  W第三個問題還是clock rate的問題
' B' f3 X, _8 C/ i/ I$ S
& ]* [0 w/ c4 j6 `第一個問題留給別人回答好了...
& X% c/ a6 B4 t  |2~3問題的確是問題沒錯, 誰來接手一下呢?
, b% }& M& `0 c
2 |/ X- m  r) m8 o* N- J+ c2 Kaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
7 x* ~! x% x9 l  L6 L* F) y7 G) o
& [4 ^0 u" s% B, e( m2 y. |0 M[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]$ G& |, k+ N, U2 k0 w+ w; y: X9 i
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]/ X# p9 }1 `) @- N# G  _
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
9 a4 |# F) ]0 X/ N7 R: T, F[4] Website of USC Asynchronous CAD/VSLI group. [link]% ^& S8 G2 x0 H9 Y' @: w5 _
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
6 H2 |6 w. U# |8 X$ D[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 0 y0 O9 A5 f1 T! M. C+ r7 S
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料$ @6 l  C3 z* o1 @: {% _
我會好好的找來研究看看
! \# d2 A) n$ P. r& L4 ]
( P3 N6 M4 N8 I% n& g我本身目前不是從事電子相關行業,不過對於
( |% ?3 s# y, }8 z6 D# a" wFPGA/CPLD,HDL,數位邏輯設計及單晶片等* k  j* i. n  c$ ~# ?5 N( d0 N, K
都很有興趣,之所以要寫16550 code主要是想5 t0 l/ o1 |" h9 |1 v2 M
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易6 P  e7 y9 Q% D# ~/ G; p" D8 n

' ^8 C) g9 F6 U8 v' _FIFO這部分我有上其他討論區問過,可是都沒人回覆
! ^" ~8 @2 C9 s1 ]" X感謝版主願意跟我討論這個問題
( k+ c, \: I5 i/ a, ?# @- F. q3 k% W* I  l# d
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多( ~$ U0 L7 D( Y& m) j0 f4 t: |+ j1 l
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
) R/ z$ h7 M6 U" Q3 o5 W不然的話就變成只有我們二個人在討論了...- a. B) _8 K5 N) a! k1 F6 Z/ ?
" w$ l  f& G+ n
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
' D6 W9 l8 L$ X" v3 P1 P/ T最近想到一種架構,用來做FIFO不曉得可不可行4 k% E7 [% u9 E, r  C& i
如下圖所示
; u8 Q: f( Y' q/ q7 ]# o7 S" w; y$ {0 h8 j- |1 `2 _8 {3 P1 M$ a  c
先就full,empty討論,trigger level不管1 M7 A$ E. F4 o/ g
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 d4 q. M% {1 U2 F8 S7 k. M
* m8 H  K7 W$ l+ f) Y  |1.用額外bit(valid_bit)來指出register是否有資料寫入) N( B2 o3 X  u9 M/ g/ @
  當寫資料到FIFO則相對應的valid_bit會一起被設定為16 K0 m: E8 M$ i4 G3 u
  當讀取FIFO,相對應的valid_bit會被清為0% V6 ^. e/ d2 M4 y
6 ~5 q- V9 ]+ I- r) ]  ?
2.wptr及rptr用bin count
/ u& Q6 w# ~/ r- k6 m6 H: Z2 c2 e/ P+ S9 @2 Z( z
3.full將所有valid_bit取and,empty將所有valid_bit取nor
8 g* T7 a2 I- Q8 |$ R$ `
# T' M! m; j% {3 L% h- A5 \4 D4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
- o5 C# |* ~/ @9 W  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case$ L, n  l$ h2 S* B4 i: B( C/ {
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
4 {! j  Q" o3 ~
. H. J% e$ m1 [$ g9 Z8 K0 u5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
, @% x, B; _7 z# w4 q; G" |  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
9 P7 R# f8 z( A  P' Z3 O9 @* V; d! ^  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接) ]9 E  L3 w: I# M% e! T
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一- A, f8 }7 X7 }
  個位置是空但被判定為已經滿了的狀況)# E& y5 M( @  D- U: E6 m

" m1 d$ Q9 o( {& B# C以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
% k0 D4 M+ q) O+ o8 K' Z- K7 D2 j# i! H
如果不管coding style的話, 這個想法很好/ @  [* Q0 a5 Y  a. G& b
8 H( y: @" i" ]
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
8 A0 A+ M: `) c+ \; K' V2 k跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
5 s  E' q  f7 Q4 ^9 y+ o6 banyway, 互相交流吧.5 X2 f# I% e8 b

- z: }/ b. l6 W+ u' A5 Y3 [改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
& Y6 ]% n: N* t' V" D; W1 S* }. J我想到這個方法除了電路會比較大外還有其他缺點; p4 F  s% b' {7 D

" ?- V/ m0 c5 T0 X& e' u/ o! ~1.不適合做成容量較大的FIFO
9 A* R2 B' n1 w9 y, b7 m( t
$ u3 {5 L/ d# i( L- ^2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
8 ~$ e& ~4 ~* z  Q( O) v7 K9 S! R$ t& M+ I2 \
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣  E7 q: v$ D# f' Q
   會有較長的延遲時間,所以速度被拖慢了8 E) \  o9 o( F& ~6 [% o9 _+ m

3 d6 z( W) Z5 _+ o% D  E/ {" z謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO3 v4 c% W5 e2 _: }  ]
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大& D, d  {* h; _. @
但是做ASIC時你會發現其實很小的
( j7 v( @' \# P+ H
) F4 P4 I1 N2 n2 l3 Y$ h. y/ X4 i! ?8 f9 N* z! U/ b; l! h
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響" Q1 c1 o, X; N* c9 y8 e" @
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
: s3 F) F& ~' x# D2 d# t$ V% k& ?) O9 F3 V; U9 u
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
( {* h- q5 v8 h6 j0 q: R相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
9 Z, G; D0 K# p- b6 l# p5 _1 B; X: z; ~5 m6 L
6 @  f% p8 Y3 W3 F( y1 S# |+ k/ e
1.
* H% b- X* O3 Z$ @. b   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"+ _! E- D5 k+ V0 I2 B- L8 U/ ^( S

2 p5 r# O" U! O8 t   不了解這段話的意思,可以在進一步說明嗎
$ ~, V5 C. j$ A
* _3 f. B! Z# Q. k5 z2.
# V1 M/ [6 G/ c$ ^  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
- D' |- c" `: ]. y: N4 N8 K5 }* g) m  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
, ]# z3 ~7 n6 O  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
- \4 D9 y, E- F3 `) t  請問有辦法評估亞穩態維持的時間嗎/ [8 `; A; X3 P
  ) }$ y2 @9 ~) S+ g- D9 T& t
謝謝, q8 A3 j; {( V0 X7 B7 a, \
" i! }8 H. _8 p! S! R
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
/ X1 x! l; N5 ^& z  f: v% H& s我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
3 g' h- L8 ~- v( C: W. Jempty = true if valid[WPTR-1]=false
  c7 @7 N1 }1 s" ffull = true if valid[WPTR]=true3 H' U4 Z: @/ z% ]6 z. j+ y8 u3 L9 }/ I
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已: P$ ^6 H- [7 N) ?0 l# q4 r

2 }9 i7 l* c1 X2 t4 I2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
1 I3 q# O, Z; s) S關於 metastate
& {# r. N# g( J  {1 J+ {4 @& v: J請問如果一個d-ff假設 clock頻率1 hz
1 L9 E' T+ e% N如果剛好發生metastate,metastate這個狀態2 ]) |  \' S6 S6 @/ n0 t3 \
有沒有可能有機會維持1秒的時間長度呢- t* V8 X4 N% S2 F# Y( v
- A; F2 K2 d! t- N0 l1 o
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
- ?/ k+ X9 J/ O- T
1 d8 r' O, ]; O# j+ ^+ H6 zmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-14 04:16 PM , Processed in 0.140517 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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