Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...4 M- M( p' S5 M2 W* u3 _  L% d
# K5 ]4 W, t3 B4 H
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多; r7 D, l8 ?: K* `- w
* i& b9 O8 J5 c& w) M& u, v: A; Y
那些信號也先估且如我假設一般
$ m. ~- A9 D8 Fwen是RX收到一筆完整的資料時所送出來的
+ |$ x. l6 j' g# M! [9 K! I# S, v因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
7 v7 h$ Q' P4 c; w8 S% tprptr:process(nSysRst, nrd)
. C( ?2 I5 G1 fbegin5 K% S- e& \+ W
    if nSysRst='0' then
7 T' v% F: r$ c+ T  m  I        rptr <= "00000";  C& `% ^8 }) w
    elsif nrd'event and nrd='1' then
& ]. m; Q$ ?1 l1 T        rptr <= rptr + '1';
: U& B7 i% K! I; [" G6 a- z    end if;
7 Q0 K, g" T" i' W5 Uend process;
, [! M9 P4 E1 N2 x) C
3 E. b" b. E- |9 h% o4 ^& [pwptr:process(nSysRst, wck, wen)
. G* f$ ?1 ?' M# W) }5 Sbegin* h- z- g$ ]9 ~+ j* p  S, |
    if nSysRst='0' then7 S, w; D& \) M* x) Y5 D* b
        wptr <= "00000";. O; z* n# q8 T3 Q; c
    elsif wck'event and wck='1' then& @3 B8 J2 \; C7 x9 Q( V
        if wen='1' then
2 q7 k5 B# l5 t+ B3 i2 m! X            wptr <= wptr + '1';
' _3 G2 H+ m& Q+ @3 H3 z+ _2 f- I0 q        end if;2 @* X* N" c8 D: W4 t
    end if;
  A; b! ^/ j; Aend process;
& V" v  [5 Z7 {1 o- _: l
9 S5 f, ~' v0 K" @+ B假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
8 d* J2 K9 q) }, Q8 N& E4 f! }" k7 b你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key$ V" _3 f  v, m8 V2 [

" S( A9 T% a6 j3 l' d4 s6 m3 hRead buffer部分) |0 e, _  z, H9 C; }2 c3 T) f
7 i. ]6 A* e. X) o' z' `
--read_buffer
" c$ i1 J( p. D; Mwith rptr(3 downto 0) select rdata <=
! @! S  T4 A8 ], I    fifo(0) when "0000",
; G3 E* x9 y6 x: q4 n% u6 Z    fifo(1) when "0001",  K7 Y- }; ^: ?+ h
    fifo(2) when "0010",  Z6 ~7 Y8 ~8 [- ^/ C/ K9 n2 Q, `: ]. |# `
    fifo(3) when "0011",
  P( q  E0 R* ^" D" o    fifo(4) when "0100",
1 U/ N5 h" d% F) M    fifo(5) when "0101",
- {6 \2 @$ Q3 y' [& w) h9 ?& @    fifo(6) when "0110",
* V1 q" d, J3 o' U    fifo(7) when "0111",+ B5 \$ `; S' V- A
    fifo(8) when "1000",
' R" V, N" \" ^    fifo(9) when "1001",
) ^& m0 _5 }) E/ D2 q  v0 B2 h    fifo(10) when "1010",8 H- s) l* N. [" U0 I
    fifo(11)when "1011",- v$ O% m, D( z; P# z
    fifo(12) when "1100",) e2 M2 ]" h! u
    fifo(13) when "1101",
) z1 \% _) k7 t. y, ]! m$ h; D$ y6 W    fifo(14) when "1110",
. h8 t5 M2 N) p# R* O' I& G    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分3 |( f- ^/ o# K7 \9 ]% g
, q' \8 B- L& `9 @- K2 ~8 T  X
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
$ J4 }" T, n" F9 T" [2 xbegin$ e3 g+ H. r/ I, Z5 ?: U
    if nSysRst='0' then0 T0 ~5 X. T1 B0 P2 }; U  \# ~
        for i in 0 to 15 loop
$ V1 f- U* t' ~' u            fifo(i) <= "00000000";* }1 _9 _4 y3 S  ^/ ^9 j
        end loop;- B! w. m" `; r) f9 w4 `
    elsif wck'event and wck='1' then
' H$ s5 h  ]& P. T        if wen='1' then
6 m4 L5 g+ T9 l            case wptr(3 downto 0) is* ~5 t, g3 J" W( J2 Z" R
                when "0000" => fifo(0) <=wdata;
+ j( W0 `+ q) s. o7 G. ~                when "0001" => fifo(1) <=wdata;
5 D0 ~% q& Z' p$ ?/ s! g                when "0010" => fifo(2) <=wdata;& x6 O# h, [2 z, D" ]" r' W
                when "0011" => fifo(3) <=wdata;0 }$ D7 S: M  _+ E3 l, P2 c, W0 J/ k
                when "0100" => fifo(4) <=wdata;! z3 p# K. ^6 P1 F
                when "0101" => fifo(5) <=wdata;) q1 i% ]( F; @3 S) }
                when "0110" => fifo(6) <=wdata;3 S( h- z4 C) k  c2 Y
                when "0111" => fifo(7) <=wdata;7 I- h# O( M2 \; G9 b& B+ _, i
                when "1000" => fifo(8) <=wdata;/ \) g: R& H8 t& ?, ^
                when "1001" => fifo(9) <=wdata;! }6 S' v/ g, d9 \% K: j6 X
                when "1010" => fifo(10) <=wdata;7 k$ m" z2 j0 G* H0 }6 [8 P
                when "1011" => fifo(11) <=wdata;
- h5 E  S( m3 Y! d% s                when "1100" => fifo(12) <=wdata;6 Z6 k3 X2 l7 x/ Z" q/ |  `
                when "1101" => fifo(13) <=wdata;
3 T* x2 g  A, S( J                when "1110" => fifo(14) <=wdata;
0 N; C( \& v' Z1 Z' k6 z: h1 e                when others  => fifo(15) <=wdata;
& Q3 e4 ?( U# r' M- X            end case;% q  N& {. w  p) R
        end if;
7 q  ^: v$ h. `5 r  T    end if;
. L& o; e5 B$ I' U& j% Z! {end process;( i" G. S' r/ }! L$ x( F8 ]

* v- ~9 O4 G; j7 M0 I( _[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分( @  |8 k2 G- b+ p/ o) M
我先做些假設
& l: P! W& ^+ T4 ^  }/ d1) /RD動作時狀態不能改變
3 M) v% Z6 H- P2) wen動作時也不能改變狀態
/ Y$ F- F! C/ \) p4 s如果只有這二個case的話以下這段code或許可行
- n/ i) u4 H: f$ K2 ?8 x  p0 T2 s
9 a$ N# E! `$ _5 ]- H1 bstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
) T; N6 _/ y6 S# k0 b, Zbegin
  _- p; a3 t- v5 W+ O9 H    if nSysRst='0' then7 \8 z0 x' @; R% r7 e& Z2 J+ A, _
        full <= '0';
& a, f7 U$ v* ^        empty <= '0';
# }# Z. g/ G  b/ E. v% s' F- Q$ ^        flag1 <= '0';5 N8 ^; M% d1 y
        flag4 <= '0';
7 l% K* h. i; b) Q/ @) @# S, p        flag8 <= '0';" [( Q6 ?3 o2 n$ ]( ?
        flag14 <= '0';. S2 H! G5 B, F4 I2 V
    elsif wck'event and wck='1' then
2 v  E, `3 w3 z, N: V: X0 Q        if wen='0' and nrd='1' then# H* P9 e8 `, u5 P; }. C. w
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
" Y: M7 \" B- V4 Q            if wptr=rptr then empty<='1';  else empty<='0'  end if;
8 i  x4 P- a( U. _            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;# z( x3 E/ h2 Z# T9 z
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
5 [4 h- q4 Y( U7 [7 V* H1 ~% C            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;& s; J% `. r6 P$ y6 J
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;0 v. ^2 Y& O& o- b( a( f0 R+ O* F! h
        end if;
) a( P# _; t3 B- V+ l    end if;
, m( f6 p) T0 `end process;) O- R3 D7 r7 G9 E' n% T

0 Z! m' n$ m  W9 }* _+ V6 u$ c- u[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高4 O) ]5 T( ^. t

6 \0 n2 w4 X! d; |. z5 f好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
- I3 c5 }" D. x) X' [2 K8 x9 f4 Y" f# p  n4 Y" D! f$ y% l# q0 `
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
7 R$ S+ f2 B% a) L: e( }1 `- D6 j; |) l( W$ g, {( u0 P
1.' k: U2 _- Q2 Y# ~
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"# B# ?% k" G; f7 U* x
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
9 k0 b9 J) P6 w! }: m   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一" \0 {0 T% _. o( v1 u3 R
2.- \8 S+ c8 m' N0 A# K+ ?( T  {
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高6 @- |) N* e, M# ^3 v' E5 @
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出3 R  G8 ~9 |2 g( O" E
   資料讀取週期RC最小280ns
' m1 P$ A! y6 Z' G" r3.6 G/ A9 m: H, F+ _/ [- N+ B
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期8 V$ p% A2 v+ e6 @3 W
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講! x: K- J) r& i- P+ S: Z
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間' b5 x. U2 R! _, l3 p
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了& @8 R9 z+ g% _

* P& i$ C3 B, z! T& z第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了& O) l) x7 u+ u8 R
1 R8 E  I3 c3 Q2 e2 d5 V
第三個問題還是clock rate的問題2 B$ l+ L! W; T% X/ {% E# s
% z  w, F: ~) O5 {' j
第一個問題留給別人回答好了.... B% B( A4 o- E( J: A; z" [
2~3問題的確是問題沒錯, 誰來接手一下呢?) D9 g, w8 p/ Q' n# E% R

- P0 W# E5 n( o6 x2 a; E: `addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
4 @/ ^* K9 Q/ b! Z6 `
2 l0 g. N, Q! t* r5 P$ r$ K[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]5 ?% }' m4 i1 _- s1 C3 D
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]6 _) z9 ~  z/ r% j0 Q
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.  t* |' N9 I* c9 i' A8 F' s
[4] Website of USC Asynchronous CAD/VSLI group. [link]
! C! P4 q; ]4 K" B* x! s+ N( P5 c[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
8 N& K' B; \0 D2 F* G[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
8 B/ Z# N5 \0 s0 ~( 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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
$ j8 h5 w& p$ T( ?$ ]我會好好的找來研究看看+ ]0 r" T; E+ ~8 n" ~$ K$ w

/ o9 j1 p( c4 c) l0 E我本身目前不是從事電子相關行業,不過對於6 y4 z* z& Q+ |2 m% ]$ A
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
: l: S! |4 @4 y7 {' w  Z都很有興趣,之所以要寫16550 code主要是想- B! U& a& `0 o. s$ ^# q8 F8 f
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
6 M0 P0 e5 N& [" x& ^2 ~, Q
3 u6 b) L; _& E$ \& J, i" NFIFO這部分我有上其他討論區問過,可是都沒人回覆
6 T! d! W; l9 b3 g( s( O8 ~感謝版主願意跟我討論這個問題
8 d, U. p0 o; V. v
& M5 c; L; y! r. T- K! \再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多+ n5 J# W; r/ u  `
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見. B7 c2 L' H: y$ a# A' r
不然的話就變成只有我們二個人在討論了...- A! K5 s" k3 w4 f/ }9 {* w3 Q

) ^( X! I4 B+ ^) g過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
, G3 B) `0 |# D) u9 \, \最近想到一種架構,用來做FIFO不曉得可不可行8 b7 ]9 H1 ~" ?. a" r! j
如下圖所示; L# v6 W1 x8 V. Y- b

: Q# R, t! O5 \0 F先就full,empty討論,trigger level不管
. j5 M9 {* |- Z$ a1 X, V4 Z4 d讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
9 Z: X( u; m( d$ J+ g+ A7 r7 Q  ]- |% Q
1.用額外bit(valid_bit)來指出register是否有資料寫入* s* T3 K2 ^# T4 e& a! K8 T
  當寫資料到FIFO則相對應的valid_bit會一起被設定為13 O1 x+ d# ]: p  y: ?0 u% F
  當讀取FIFO,相對應的valid_bit會被清為0
* L/ b$ C: ]4 P1 W
7 z6 y( a  ^4 q9 `  G( H" f3 `2.wptr及rptr用bin count
0 W9 t& |: c1 w/ k& x: h# W; s6 I2 {  f& c4 f- b7 ]
3.full將所有valid_bit取and,empty將所有valid_bit取nor
: f1 }- o8 d& A
' \. u, V" g. ~) y. I6 D4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
: W  d. B" G& v, n3 h: u' \  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case8 E' M' O$ a8 K) C; t
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) ^* ~9 e; Z' y% _& N/ P
. L% y8 O% d6 |# b! _& B/ h8 B5 i5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作5 ^2 h' o$ ?7 |( V
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk5 G0 n1 `: Y2 Z  Q% C1 ~
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接6 ^' q. B/ k" V
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一! K3 I% u! o2 e+ {9 P
  個位置是空但被判定為已經滿了的狀況)
' v" e0 d  \& q. N! u" j
. d" g% C+ H# w) B( Y$ c. a以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
, I& c; M) p4 G! l2 K
8 H6 ?0 C0 f! K+ q1 l& |' s( K如果不管coding style的話, 這個想法很好5 ?) R( ?) S+ L5 @
# q4 f5 `; Y0 ^% b- X# I
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.3 e- F, M/ }9 @0 y3 i9 i" v1 S
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
" ~9 e5 p- |5 p) a* aanyway, 互相交流吧.% T2 v! n8 p' e8 D3 }1 y
+ G7 C* O$ a: Z/ F% e% g! k# m. V
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好  i$ \5 E$ [8 l: G. J- G  ]
我想到這個方法除了電路會比較大外還有其他缺點
7 ^! i  _8 j3 o, P/ V" Y5 B9 N+ I: }" H: K  G- W" s/ G3 z! R6 v
1.不適合做成容量較大的FIFO: H1 @) M" J2 E
: U/ Q0 |: a& k5 s- [0 u
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響; ]3 n% R& @) ^" a/ R4 q/ K5 I
1 d" H8 b' E, g8 I5 x' j# \$ z
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣5 b& y" v- J& O$ {. m+ j" `- C9 O
   會有較長的延遲時間,所以速度被拖慢了
$ M5 K1 p4 T5 M; N# S
4 B) `) p: s, c謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO; ~# }0 {# {% B: e0 s0 u6 o. V
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大( a9 O8 l; q. ]6 w& _  W4 N: Q/ T7 Q
但是做ASIC時你會發現其實很小的# t' i" v) K0 S

/ V2 A  I7 n! ^# L5 U* m7 \! t/ j" c. f( l/ W: w6 e
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響) K3 k6 b. b% m( P! s
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
- C* B% p  Q6 y& d8 A8 R8 q* i
5 _3 @+ e# J7 Q8 o4 {1 m4 S; l3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
( |4 k% }5 ]" U8 h# r5 P相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好7 j2 x* S! H1 B2 o: b% }
- y' b/ v' A5 p- S

* ]# T, u) u. y! S  R* d1.
" g- Z- \0 r+ h% ~8 f' X   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"6 Z% T; r0 s0 e- U1 j, h9 y

  ^. b1 C1 Q5 G. D   不了解這段話的意思,可以在進一步說明嗎( ^; H/ n" W1 V/ c0 k  f
3 V1 b0 R2 Y3 C6 e* C4 s! b
2.
$ t$ Q3 p7 c, g& w" b# z2 j  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
0 {; `* D6 N+ g# `3 b  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
7 O) I( w. }# d, g  a  Q6 C1 P  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了' `& p& w" g2 ^& M. M! Z
  請問有辦法評估亞穩態維持的時間嗎
' w# Z( @2 {% J. E  0 v( J) e- R  ]8 {6 L) i
謝謝
0 @* H8 t  d- g* U8 u' K% F' @5 X
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
. o" ^) B+ N( ^( j+ }- ^" K我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:, R& o/ w- y5 J6 m! {7 P  p4 {
empty = true if valid[WPTR-1]=false6 c1 g4 W" G- Z0 Z' R
full = true if valid[WPTR]=true/ k* Z+ }. V2 J) S( ?
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
5 i  V( k5 t8 Z% K" I( V0 R5 `+ @) c
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好9 r; P  V6 |* I2 w0 `
關於 metastate9 ]- B; U* f$ P  a1 g5 G
請問如果一個d-ff假設 clock頻率1 hz
  ^( E* x6 @& c) o. t" Z# T如果剛好發生metastate,metastate這個狀態
; v" y% _0 p; g; v( D  f( z有沒有可能有機會維持1秒的時間長度呢9 ^: a5 Z. ~* H) H) |3 e( F
* j; c$ t# F9 T; h+ C) |: x$ L' P
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
4 K; I0 |% I) w
3 h- R: V, \$ W2 t. X. ymetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 03:49 AM , Processed in 0.141018 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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