Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
( Q- q  D3 B! P/ C
( L  i; O! _8 D2 }$ k這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
' ~  y$ ^: @0 E5 i5 c) E1 k5 }$ m' f- j, e( `& V
那些信號也先估且如我假設一般( Z, v% P! _1 C
wen是RX收到一筆完整的資料時所送出來的
& p$ t3 `) ?3 g3 z8 {因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下). l9 i5 \  r) l! o; U7 V
prptr:process(nSysRst, nrd)
( e2 f, H! H* D: u! _" fbegin
# \$ I2 U" t! ]& Y) F$ F    if nSysRst='0' then3 j) ~6 h8 p: W) H) S" f# [
        rptr <= "00000";* @  K# j0 O5 l- z5 k) C' u
    elsif nrd'event and nrd='1' then  ]7 O  D0 B/ m* h
        rptr <= rptr + '1';# p$ w3 f% l: W, V& \
    end if;
7 q3 M. L) i# ]6 Fend process;& t8 {' U! h; A. X+ B
3 c" a1 G8 R! b1 k# C
pwptr:process(nSysRst, wck, wen)
7 _" r2 z! m& ^4 Z( L; Pbegin
5 q7 ~4 S. }% S) a/ p& V3 y    if nSysRst='0' then  r( Y6 T* a6 \" _% j
        wptr <= "00000";
: S5 L2 |: ~" c6 w- R9 O6 v5 w    elsif wck'event and wck='1' then
4 x* d0 ^/ \4 S* c/ o5 _3 C4 j        if wen='1' then
( `% w: O7 b2 ]! I            wptr <= wptr + '1';' m& X$ {5 W+ a" U  U$ N, i5 ?
        end if;1 j1 @# M2 W8 P. P
    end if;
0 D) x7 L7 V9 J0 S2 w7 iend process;
0 x2 D2 z, {1 I2 c% X$ I. x) p0 ?
: \7 U* n7 U% d. A. O假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?; U4 H; x  d" t7 T' ~& j' `+ z4 ^
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
' b; T" M# @4 i8 B: a9 \, C' t0 e8 L% }1 O1 j5 W% ^# c5 i
Read buffer部分
2 M5 ~1 Y( X) t2 b; Y* F2 t/ D6 L3 \1 S0 q
--read_buffer
' {& {$ p$ u6 x7 I( t$ ~with rptr(3 downto 0) select rdata <=
' A7 A+ l- R5 V8 Z    fifo(0) when "0000",
# _" w) ]! O4 v2 z5 M3 N9 L2 w- ]( W6 O    fifo(1) when "0001",( @' g* g5 C3 L5 k3 K: _
    fifo(2) when "0010",9 n! ]$ N7 I& S0 X  H0 C# S. _
    fifo(3) when "0011",
& j2 d! o; v7 h8 O* [& `    fifo(4) when "0100",: G" U0 ?9 I- m4 ]0 }& L
    fifo(5) when "0101",
! T5 F8 r' J" I; D    fifo(6) when "0110",
7 i9 l0 Q' n/ U5 `6 O( L' X2 f5 H5 n    fifo(7) when "0111",
- p* _- e8 A" V! Y8 h2 E  a, v    fifo(8) when "1000",
: T) i% ~8 |8 ^  h    fifo(9) when "1001",0 L0 h, j2 x' o% n
    fifo(10) when "1010"," M( ^- t# r0 T/ d
    fifo(11)when "1011",; H2 b6 s5 V* {  m
    fifo(12) when "1100",! T2 F* ~7 F- L9 S+ G
    fifo(13) when "1101",3 k( h3 y. q" u. Z0 T  }, }  X/ R
    fifo(14) when "1110",
0 A/ Y4 y) r9 ~  a8 o% K4 \3 ~    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
; h% L8 f! \' B7 @
! Z8 x' O" u( g" U* ?% N4 f$ C8 Awrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
3 i4 l$ r) l7 `/ {, E$ bbegin
+ }' ]7 D! Q8 k  M6 K/ m    if nSysRst='0' then
1 t8 D% l. J5 \: f" k        for i in 0 to 15 loop
: `7 H5 C1 L: D. n5 M/ D. o            fifo(i) <= "00000000";8 }0 G* u( f; M' x3 A5 i
        end loop;
) ~0 p* m$ R  x: V4 Z' `    elsif wck'event and wck='1' then
- {+ w* d8 T' t& o) ^5 }) D        if wen='1' then$ R! z* l, r& z4 @# \9 F
            case wptr(3 downto 0) is4 r5 |' o7 x# T; d
                when "0000" => fifo(0) <=wdata;0 k# s3 y- ?; s" n9 P3 f
                when "0001" => fifo(1) <=wdata;& F/ {; w# T, E- x
                when "0010" => fifo(2) <=wdata;* ~2 \. f! D: V2 k- m5 M5 W
                when "0011" => fifo(3) <=wdata;+ B! p4 Q& @& f; U
                when "0100" => fifo(4) <=wdata;' c! D) N7 e$ u8 ~. f8 D3 I
                when "0101" => fifo(5) <=wdata;
) ^1 r7 T; L4 ^1 S3 U                when "0110" => fifo(6) <=wdata;( ]  }7 x' S  R9 s$ b$ d
                when "0111" => fifo(7) <=wdata;
( K2 B5 b3 B+ }& X! {: l$ t                when "1000" => fifo(8) <=wdata;
7 D/ K0 l) b" F( Z6 D! x                when "1001" => fifo(9) <=wdata;) u+ k( i- E! }$ p
                when "1010" => fifo(10) <=wdata;- {& t# F+ A% q; A
                when "1011" => fifo(11) <=wdata;
! l- C& F# g6 E- Z. J5 g4 T                when "1100" => fifo(12) <=wdata;% B, ?( B+ o7 D" B+ a$ X1 k
                when "1101" => fifo(13) <=wdata;/ t9 R0 O( z2 ]0 `8 y6 Z" e' k- |
                when "1110" => fifo(14) <=wdata;2 c; T& h% [1 ^3 K0 A& X
                when others  => fifo(15) <=wdata;& R5 d* a9 f! X5 ^8 T! ]
            end case;
! t- R) N# R$ P4 o        end if;5 x) d/ g% n( F0 i  C' T7 c
    end if;
" l; c, _8 p5 `# y, i1 d; c7 `9 N" hend process;
$ l3 N8 F& b- T3 O: y: Y! J' Z" P/ O
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分8 w% t+ s' O4 q' I$ g
我先做些假設% u. ?! n. d% ]! ^) `
1) /RD動作時狀態不能改變
4 q* t) O% ]% g% U2 x. Z0 O4 z2) wen動作時也不能改變狀態
0 P" c) @2 d3 l% [$ E: ?如果只有這二個case的話以下這段code或許可行5 \/ F* k$ r. }( G8 F0 b

$ X. K' J) C$ hstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)2 L; t. F9 ^5 P6 _  ]" j
begin/ d7 d1 j7 W7 R  n& {- V# R
    if nSysRst='0' then5 i% z& k9 r. Q4 r( h2 [
        full <= '0';
5 ^# g5 K% O8 j4 S( t6 B        empty <= '0';
/ K) H, g& i) w        flag1 <= '0';$ ^+ ^( |+ X5 U$ z
        flag4 <= '0';# `! C4 H( a% b, ~% |* {9 j$ i9 y5 o
        flag8 <= '0';
$ {3 y. i9 V0 Q! o% q0 @        flag14 <= '0';
8 r! R  b: q& L! T5 g' w- Z    elsif wck'event and wck='1' then
' Y* A, l  o  g0 M1 T: O1 W        if wen='0' and nrd='1' then
" M8 D3 d9 h0 @: b2 A! M+ a8 |2 o# ?            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
5 E$ d) J/ p% y+ }            if wptr=rptr then empty<='1';  else empty<='0'  end if;
* V3 B" b6 m3 {2 R9 |            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;! Z$ R% R: T6 m4 a, Z
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;, p1 _) a" F( Y' g* |0 q) u; H# x
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;  ]% n7 Q5 [& z: \/ b6 n
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;- t3 j7 c$ k  B, i% s
        end if;
- g) M; [; p  E  Z$ C. w, {    end if;& Q  q4 j6 K& E2 S
end process;/ i$ |6 @' D$ k

0 K1 s3 f  g2 I, T[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高- w" Q- o# U$ J. W$ j6 e% K
7 N, e6 a# i* _( v8 W# [( j
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例# Q( j: ~( Z7 t) m4 z

/ R) g8 U! G7 L+ I) j- Z將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論8 _# s9 r3 A% a

' k7 a5 q$ a1 Z# I; {2 Q1.
, Z4 q5 D; j+ N   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
+ z) r8 u$ B8 _4 [. r8 _0 B. \4 G   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生* J8 ~4 x7 A) n4 n0 s
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一( p9 g/ E, B2 ^; |+ t  M4 _
2., t+ Z8 E; _1 t6 V9 a
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高' o( I6 [& w5 Q" P/ `6 G6 {$ H
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出. k( X- ^3 O' W* o5 d' }! [  o
   資料讀取週期RC最小280ns
: i. y% }7 ^. T$ d3.
2 e2 ?6 m0 l7 A; S5 ]$ S   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
* ?) o& m. G! H& R   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
2 ~! U$ ?' p  C* [. F- q   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間) g& m; ]7 a; B! w1 Q7 b
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了5 {0 k7 l1 y5 b' q4 W5 M2 ?

) G3 G/ m& R" |6 k  Y9 \- j第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了$ Y4 H: H5 ]. d2 g

2 r% w0 u7 I! b) a/ w" X+ L0 F第三個問題還是clock rate的問題
) u. s' k0 W1 P5 z# F
8 h! i4 B+ d% p4 h$ ^& v+ I3 o" s# s第一個問題留給別人回答好了...1 ]* o2 I7 X& y  V
2~3問題的確是問題沒錯, 誰來接手一下呢?  r% {# B+ e* M5 s
# I: p3 w# O) Z, B- n2 {+ N; Z
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
, v" o4 ^) O5 }- h0 K
+ t  z; g' k; K1 a1 y7 J[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]- p( M6 |$ A/ u  _3 d6 H% e$ Q
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
" F. o! J& x; ]% l& ][3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.% w" }, g, m+ r3 {/ g0 i1 F
[4] Website of USC Asynchronous CAD/VSLI group. [link]
% A( _+ N' \  F" p: U/ J, w[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]  [' A  E/ N- t2 z# {
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] - n8 m& J: ?  I' n. Q2 h/ ?2 A
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料! ]& {: S4 B4 `  |# F- o/ X
我會好好的找來研究看看% e) B# H% f+ U5 Y
- p: H$ m, X# q* I, |
我本身目前不是從事電子相關行業,不過對於6 ~1 U. w) j, X+ e
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
: Q- ], W, O: x7 ?都很有興趣,之所以要寫16550 code主要是想" P% o5 y8 w7 o  O
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易3 p) U8 [( @  @1 ~
% i. u2 b* J4 m! E% [  `
FIFO這部分我有上其他討論區問過,可是都沒人回覆
3 H0 ?" p0 g. D2 r感謝版主願意跟我討論這個問題" c; y3 g  n% U) g

- @0 q  c6 w. h) {- W再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
: y" Z6 q# c* \- X0 g3 Z不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
' R- {# U. R: r2 E) h不然的話就變成只有我們二個人在討論了...' p* K' M4 K; I6 ^$ W

  B- z3 u0 w2 e* Y. p4 j9 C$ ?過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好9 I. b, M- Q; O8 h$ M
最近想到一種架構,用來做FIFO不曉得可不可行/ B6 v3 E# l6 |0 f, }+ _) u
如下圖所示
" L8 n+ ]! y( }8 C( K7 m% v0 I5 n* J6 `, i; ^3 t
先就full,empty討論,trigger level不管- r9 w2 H6 t9 g% K0 }2 R" f2 B
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 W7 }9 ]/ r+ l$ [0 Q/ V
3 z; x4 Z  l. f: v/ w. ^' N2 C
1.用額外bit(valid_bit)來指出register是否有資料寫入  A3 F; E1 J$ O! W
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1" u2 g7 ~, p* h4 s3 A+ k7 s
  當讀取FIFO,相對應的valid_bit會被清為0( q/ n, E" @6 }+ X% |2 c4 e. S

) @$ [* t. @, l' D6 |2.wptr及rptr用bin count# V! M) V" i5 U  U

6 F: s5 I5 q. ~7 g3.full將所有valid_bit取and,empty將所有valid_bit取nor
; C/ P) @, G: g2 ?9 o( E) ]! k) C8 w: z8 [: @) K3 r
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
, F0 F- g8 J( H2 p# V& d' R  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case5 ~) i8 i3 F, \/ N8 p( a8 E$ ^
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已8 q1 k' B/ \5 v1 b5 E* t

% R( x' y( H7 w' N4 L  z5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
- O1 m5 F* V5 l3 H0 ]! M4 M  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk& E; m  x' ]* {4 R7 n$ d& B
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接$ S6 }4 ]; j$ ?7 G% B0 g) K: L
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一. Y1 E- j# w  ?* o7 n  l$ _
  個位置是空但被判定為已經滿了的狀況)
! N9 [) ]" K- d# c, ~
2 C  @; K; f* L2 T% L, m4 l0 \. C9 m: E以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
4 g5 Y1 j9 U. Z! E8 i, B. u7 `1 k, @2 g1 n' e5 U( I8 l
如果不管coding style的話, 這個想法很好
3 @4 U$ f5 q! @" l% [- _  b- Z# H
3 i% W! ^2 u: o6 O6 M3 O/ Z相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.5 U/ Y! Z1 ]/ ]( ^9 p0 N0 w
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.' F: N+ W; B* K) @0 ]1 e
anyway, 互相交流吧.
. s4 O6 s9 [/ i0 M# j& c* Y
# n% j% ?3 p  I* C* U: ?改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好7 p8 y: W; ~2 z8 M
我想到這個方法除了電路會比較大外還有其他缺點3 j  @: K1 C: i# f, B8 P; f) c
) f+ d. v5 `# S
1.不適合做成容量較大的FIFO
& O; i8 X; H5 D9 |
/ J" _$ b  s9 a/ B% U2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響4 E7 \. D$ R; y& b' d
) ~& ?; d! g* m5 n- f
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣2 l. k& C6 q) W4 N; X
   會有較長的延遲時間,所以速度被拖慢了
- i! w: ^3 R. v; r* u/ Y8 Y; N( T7 e  A% a, p( f
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
1 D( f' a7 D3 s& p我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
2 e) ^( B* _. Q6 Y9 n  d3 p# s但是做ASIC時你會發現其實很小的
% u; V' `/ _6 e$ p; Y; O" v& c) ^, B( P$ z5 ~* [6 Q% x# C1 t

7 o3 @" F3 O/ l) r2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
8 m. m' }' s* g8 \) S' O這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
6 {( Z! k  R1 C" q: ?$ i6 q4 m! v4 {' D/ t) d
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了1 \1 d1 l: R. V" n( }
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
) {& j+ ]- v5 L# O4 N6 \
9 w$ c  |6 z1 u: ~
& A6 D0 w5 {+ s4 n1.
3 ]  I' \$ C* H! c" }   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
: h8 r8 C1 V& u# n( `( g8 C: c$ j- \9 O% U' Z
   不了解這段話的意思,可以在進一步說明嗎
5 L& L3 q( J" V5 u( {1 t
$ ?# G; N* D4 o, w$ @2.! P3 a' t* F2 P. o
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間6 q% @6 s$ m- j! ?( ^; _
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
, C1 k* X2 m( J9 g6 V  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了" x5 O; F( i  h" N5 t4 i
  請問有辦法評估亞穩態維持的時間嗎2 g" x) u9 c3 ^
  
3 C! |- X4 r5 f% j% K' ^謝謝
; h# O2 L& P4 }8 q! O0 M
" @! m2 I7 X# G( J, r+ z5 d6 h[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. # [; P0 n8 b' L+ J
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
" _. ^5 ^1 g1 R0 Vempty = true if valid[WPTR-1]=false+ Q" g9 a( t) V3 g- s
full = true if valid[WPTR]=true
" @8 D# A7 F5 _. l" W可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已2 ~7 l) a  B( _+ j( r2 _7 h
# k% f7 k, P+ R# {7 m9 V1 s( ^
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好0 ^9 J; f0 b* X, o  v
關於 metastate! D# V$ c% M' l9 E
請問如果一個d-ff假設 clock頻率1 hz
$ j  x  r$ G- H4 r如果剛好發生metastate,metastate這個狀態
& P& B5 @( G+ `, m9 P有沒有可能有機會維持1秒的時間長度呢$ H) i- \, e; p; l! p- r0 N

* X& V5 w2 z- K( L& C3 n5 }4 ]謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有  q5 Z5 F  q; p5 o% r

3 @  q! v. x$ k7 y4 |8 @% K, D9 cmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 05:30 AM , Processed in 0.156020 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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