Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了..., Z: L/ O2 W0 L. }; ?. \

( x2 E( @6 p, C5 Y/ l2 x5 }' P* e3 {這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
% ]$ {! N, Y' b. \  K" U1 [( `/ G
/ v8 h4 d/ g( _! M1 l/ e; }- W那些信號也先估且如我假設一般
( [3 M3 Q4 w0 ywen是RX收到一筆完整的資料時所送出來的3 |4 N- n. y" _$ R( u0 V
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
  G) p/ t. [) z# V/ Y- ]% Iprptr:process(nSysRst, nrd), a* Q; x& Z: k" q/ p
begin7 G% g2 B2 |# \) Q9 a+ w
    if nSysRst='0' then5 T2 V- A  j& A
        rptr <= "00000";/ N2 ^+ l; z# }8 V1 O# Y
    elsif nrd'event and nrd='1' then; R! C& v( R0 i8 I
        rptr <= rptr + '1';
. w2 [! i  t" D7 N0 s    end if;
! m$ E1 ?$ ~3 p5 o# c7 Jend process;
3 w) E' O; S; L/ L
( P  F$ ^( ]8 W8 o- K1 u+ z" f3 kpwptr:process(nSysRst, wck, wen)- C7 _: H$ j! j' }6 ]
begin4 [! k7 K% E! \
    if nSysRst='0' then
% s" J* c$ u/ F, \        wptr <= "00000";) @% y, m3 P) b; ?' S# c- g$ W; C4 Z
    elsif wck'event and wck='1' then$ ]: E1 x6 p$ S' I1 A2 U5 r
        if wen='1' then# u/ M: |/ I2 o, z$ K
            wptr <= wptr + '1';
+ \" U% O* k) P0 `* @        end if;% b$ y4 V. ~5 T/ q
    end if;
& ?' U# e, W/ x, eend process;
8 J7 l4 R( t- y9 h2 `3 c2 J% \$ L1 |9 B
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?$ G# |" v. J' y$ s
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
  p' X: r/ M* ~; c6 C8 \1 h" X) L3 U# M% T' f; \, e$ p1 {
Read buffer部分
0 h6 v, ?7 n% d; S4 c
+ [6 h7 m3 k  j- @--read_buffer# [8 n  d' s% ^  t
with rptr(3 downto 0) select rdata <=* R$ T4 |' W- [% I. G5 m# c) Y' J+ G
    fifo(0) when "0000",
. H$ z/ I* h/ r$ O5 _8 j) E6 A    fifo(1) when "0001",
% k4 j7 K; N4 r8 A/ \0 n) j7 a, h    fifo(2) when "0010",
' }) G. M3 b! ~% |    fifo(3) when "0011",
0 Q3 K9 Q7 Y& L6 U! c' j5 L    fifo(4) when "0100",9 G: j; X! d; e0 ?9 J
    fifo(5) when "0101",: J: ?" b7 v! A/ R# X6 z
    fifo(6) when "0110",' a2 Z7 k' l3 m& M3 W
    fifo(7) when "0111",
- a. k4 y, |, X0 |    fifo(8) when "1000",
& U' f' I" W  }    fifo(9) when "1001",
- ?1 R# A6 h8 O- G4 t! ?( ?$ J    fifo(10) when "1010",
, x# D7 U, p& L' g" Y+ @    fifo(11)when "1011",
' T" @* H0 b$ ^    fifo(12) when "1100",
+ p2 J( O$ q! x    fifo(13) when "1101",; |+ B' S; Q# a$ o% M1 L
    fifo(14) when "1110",
* n0 I$ K/ K; J) b& _) p. h    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分6 N" k2 S0 G+ {

' S' E7 `! G6 w: o. i. kwrite_buffer:process(nSysRst, wck, wen, wptr, wdata): E8 @' c, J9 W& `- d( A' N
begin( ~9 X- @" P0 E, M# j" x- c
    if nSysRst='0' then
3 Z# [7 ^+ J/ @4 j        for i in 0 to 15 loop6 b  E; C: t0 z0 m! Q1 J+ e
            fifo(i) <= "00000000";
; j0 h) w! ^: Q7 i3 D4 T4 }4 [9 Z        end loop;
( r, E0 J  f  G3 f( E7 c    elsif wck'event and wck='1' then! _4 E+ J5 {4 X* x. C5 y
        if wen='1' then% x0 o6 e; ~% Q, P- d% K) B
            case wptr(3 downto 0) is. k7 {/ m: T) K6 ]
                when "0000" => fifo(0) <=wdata;
1 a: R8 b, ]2 F5 u                when "0001" => fifo(1) <=wdata;
; r) L2 y( A  i# ]                when "0010" => fifo(2) <=wdata;$ s. W) g6 W( B  ?5 _
                when "0011" => fifo(3) <=wdata;  t; d, n& {* k$ }
                when "0100" => fifo(4) <=wdata;
0 v2 T7 Z1 e8 U2 T                when "0101" => fifo(5) <=wdata;
4 v+ B) F  z3 ^0 ?% d                when "0110" => fifo(6) <=wdata;) j4 ~, N* A0 |7 \) f. O8 K+ Y
                when "0111" => fifo(7) <=wdata;
# k8 H" G+ L$ i: D! U                when "1000" => fifo(8) <=wdata;; Z1 p) t- e$ q# V) n, {
                when "1001" => fifo(9) <=wdata;
$ D7 R* D* q) [7 |  v                when "1010" => fifo(10) <=wdata;- z5 x9 w0 j( w: A
                when "1011" => fifo(11) <=wdata;/ a" w/ ]& t% `# A, P# e5 k6 y
                when "1100" => fifo(12) <=wdata;
( w' Y: ^* U  b                when "1101" => fifo(13) <=wdata;+ X% {7 p7 h+ O, _- n) B1 I
                when "1110" => fifo(14) <=wdata;" d! ~, J- c! x* [4 s, i1 s
                when others  => fifo(15) <=wdata;- P7 Q5 ?' [: M6 B
            end case;
% E5 ?% _3 V7 J$ F+ J3 E        end if;
( z" I0 l" L) a9 F    end if;) V- m/ k' e2 I( |( R0 U
end process;/ k. }0 k1 N1 u8 _: T% e& B8 Q2 F$ G; r
1 U- G2 Z) ^. h
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分( M1 Q6 z, X0 Z; _8 |6 G
我先做些假設
. ~( P, ]: A# p6 u$ s1) /RD動作時狀態不能改變
3 S+ i) G* A8 g3 ?& l2) wen動作時也不能改變狀態  Y% @7 |& o- R1 [( D$ E4 D) |+ Q
如果只有這二個case的話以下這段code或許可行5 X: @8 |7 I$ Y" A  H: u

, Y7 y  |( N% O; [: Nstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
- I- I9 B# |# Z  k7 I# Wbegin7 l( Z# q$ Y* Y
    if nSysRst='0' then0 i& l$ P# ?4 B. ?! n
        full <= '0';
2 n! e( K( d! n6 t6 }        empty <= '0';
8 e  h8 h3 q' k: y0 X% c9 _        flag1 <= '0';
" K2 Q7 R/ S3 o        flag4 <= '0';' @" O3 b- _. S1 G* r: p3 _6 r
        flag8 <= '0';% w% p/ D6 O3 C- u$ h
        flag14 <= '0';
1 |" y2 r/ s. t" L0 ~5 w$ U    elsif wck'event and wck='1' then. ]# _, t. W0 a; {7 ~% o
        if wen='0' and nrd='1' then0 a4 J0 B, W9 U; u7 d! x
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
; d: ~" S1 B3 p5 M* l% x" r* v            if wptr=rptr then empty<='1';  else empty<='0'  end if;# E: i! Q6 `/ s) f) _* c7 U3 ?
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;/ N6 D$ x: ]  P! j9 X
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
9 n2 ]1 w" b$ c            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
. m' L4 b; I1 t: p5 C; L8 i            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;, I0 x& r! V1 `, F3 y4 Z
        end if;4 t* v1 k5 p: R
    end if;
; t' r* C: T- Wend process;
6 q: `* k1 q. s0 I
5 f' d, w5 T; z7 N" X; @( L+ L[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
5 ?3 s4 s) L  Z% V* n1 e" C3 S) b- \9 X
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例. |; _0 S1 h( h% J+ I0 J" b

4 X' C  P* Q/ y; w$ H( z% g將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
9 {1 T- l7 u6 P4 _$ k9 f
2 t: U! O/ ]7 h# \, Q/ z1.9 Q7 A: q( h2 M& j* M  _5 W
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"$ J) `1 U. @) y' ^' c/ N
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
: V: ?* x7 N1 i3 x: ]   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
9 e3 H4 e3 q/ M: n" b+ |& p2.! r% [* }6 r% j, g2 I, U
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
* t6 b- g. n' n0 j   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出6 E# G8 `1 ^' m" Z# k" H# a
   資料讀取週期RC最小280ns1 k; n( e* m% k5 Y
3.
. v: l/ k2 R( ]: @0 M   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期( ?( v1 ~- C: B5 }
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講, h. P) ?+ i1 |9 W
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
+ J2 W0 D# p' p$ V   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
# z  A. E% K6 u  Y( q, `, k; u- v9 A$ f/ ]$ e& Y" L9 x
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了/ Q2 ~6 i% D0 Y3 X' k8 K
6 c9 X* O; ~% i4 i( t
第三個問題還是clock rate的問題' d# T9 R; T* q1 W) m) I

8 l0 _# |. v7 l第一個問題留給別人回答好了...
7 _5 \" `- e1 c8 B, ^2~3問題的確是問題沒錯, 誰來接手一下呢?
9 I0 K6 w- O2 Z. e$ e
0 J2 H( O( O) f# V5 X2 b( jaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!4 {5 B8 F0 _: i/ V
, o" K+ M1 ^" R: S
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
2 X: n; m1 n$ z4 l9 w7 R+ Z[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
& o, u$ ~4 [7 c  D" }! c+ W- i[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.  g' z: u2 N' W! R
[4] Website of USC Asynchronous CAD/VSLI group. [link]
; ^) V) n7 a9 h9 ^3 o4 W; E[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]' z" f. \" a' \
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 9 E: o, I4 l: W5 J% `! f9 o8 f$ [
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
  O( C+ [# W3 w7 J) A7 c我會好好的找來研究看看
  M' j* \7 p9 @' j: n
4 f" s, k' P3 E/ W4 x0 Q8 O. x我本身目前不是從事電子相關行業,不過對於
+ U: R& s$ I& @9 p( d8 _FPGA/CPLD,HDL,數位邏輯設計及單晶片等
6 V6 ?  W0 d7 h+ y都很有興趣,之所以要寫16550 code主要是想0 `4 ^/ A3 ]! d' U8 L2 ~
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
# w( a/ C. e4 h5 v) Q& G2 ^& c6 q- h" ]/ R% c& g& x
FIFO這部分我有上其他討論區問過,可是都沒人回覆3 ~5 A3 C2 c1 ^/ c
感謝版主願意跟我討論這個問題/ `3 t, W2 R6 i& r1 ^; A

& X; C* N+ Q/ G- m再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多% C; ]3 I$ S+ M9 C  g4 k& ]
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
. z5 j" D, J7 ~" Y0 U/ B9 Y: G! y2 ~不然的話就變成只有我們二個人在討論了...: c( K; K: @6 D  P/ b" ?' D$ w
: x3 u- H) b# _% i
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好. u4 a6 L# @' |! S
最近想到一種架構,用來做FIFO不曉得可不可行
1 `1 `, o% K- a. ^5 M- S如下圖所示
0 [% [6 `) J: I2 f& c& c# V
( V0 T  x3 l8 D& ^3 I先就full,empty討論,trigger level不管9 V) L5 P: B. x( E5 W" c; V
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
# C) |4 ^# v6 ^! @2 W% O- K5 {/ D$ M2 U) {! h: B! e
1.用額外bit(valid_bit)來指出register是否有資料寫入: P& r1 X' U" z4 _
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
7 r/ F- z3 E" L! h1 n  當讀取FIFO,相對應的valid_bit會被清為0
6 L& v* u9 F, N8 C. ]1 \% L: I  ^0 ?" S# d( n
2.wptr及rptr用bin count
% b! n, r$ g3 }, z" J  ^! S  |3 I2 y' L+ q# p/ M4 t( Z5 s' j
3.full將所有valid_bit取and,empty將所有valid_bit取nor, x, X: ?, h8 G. j4 x1 ^

+ J0 W! K4 Q0 Z: u' e4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
& B& V6 Z! ]% ~+ _1 q  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
" T1 N; X) }& g4 h* l# I  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
6 P" C$ a- f  W+ _- ^- b6 V; F2 L8 I# L& ?: S4 u
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
* ]/ R) R: e8 q( h9 E4 r( N  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
! n) \% _+ y: I! X1 `, z  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
2 O( u- D8 t8 Y% _  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一( k9 C! d% j& y: c9 v$ e8 d
  個位置是空但被判定為已經滿了的狀況)" O0 X; r$ M) g& H0 y& O6 }* r! R
$ n. F) f: P0 S, y! w  B
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
  l6 [# n+ e* L- c4 O2 U% _( M( m: C, P7 k/ d' j5 {
如果不管coding style的話, 這個想法很好3 s8 s: H: F& v
; ?/ T4 n0 D5 l8 q+ g4 c
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
& g/ \( {& A# ?4 T/ x4 e跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
0 X. I9 _: k4 k8 ~/ l+ |anyway, 互相交流吧.
8 ^. W8 d# Q5 }
2 q8 z0 H) K2 }1 R: V2 P改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
% c4 G. p" e- V1 n* @* H# [2 Z# s我想到這個方法除了電路會比較大外還有其他缺點
6 r4 D9 ~- |+ p! t8 z% A3 x0 e
* n& O( Q0 [3 K3 t+ q1.不適合做成容量較大的FIFO  \" [$ V/ V! y9 j2 q" Y' O
% e* P) g3 `/ F. G
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
" M1 v) |0 q2 c( |9 ]9 q: B4 ]% e) E  D$ _4 G3 B: p* F
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
5 `. h: f% B2 y1 |2 D' r( O   會有較長的延遲時間,所以速度被拖慢了
+ v" W. ?: e( P1 J5 H& Y- V& T6 V) G6 B' s5 f
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
6 q& u# u: ]  {) M$ P& v我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大) k7 W7 @% n; l
但是做ASIC時你會發現其實很小的* W( S& b% ^; y8 Z9 ?
1 a) D3 `4 E) h3 @
6 ]; \& X  |4 w) @
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響. g' P4 c$ U9 X0 J& v( Y
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
; _7 F' j3 T3 a& [, R; v$ b
( `% G; M% N. f6 J9 [& P7 C: B, `3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了5 {: C# m2 U, ?* ^+ n! _) S9 {' J
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好( X, n  Q( o/ [. z4 B8 f: @

- N9 y7 \* _0 k6 n6 M. b1 Q6 ?
9 L6 `8 T' F( v2 _' f5 _1.
! [" A& H" l* Q" n; ^2 x   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"& ~1 D/ P# m3 P& M. k8 p, y! B; X1 g

* e8 _. [) r% n/ S+ Z3 @4 ^- }   不了解這段話的意思,可以在進一步說明嗎" E8 ?. D% ?$ C5 b& ^
- `% b4 v8 h; l. ]+ l' I0 L, H: |& T
2.
5 V. N: T9 v( k. y1 T5 J  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間/ I# Z! G- _5 u+ Q; y# Q$ U2 h
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
& l# m6 ~. y1 v# ~% L2 |  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了# e/ r& H& P' t9 J9 m
  請問有辦法評估亞穩態維持的時間嗎+ J$ N, j" S6 q% w
  2 }4 ~! \9 L- ^5 O
謝謝$ K  M% v9 Z5 G' b9 y* e! V
" V: x1 W; a) a$ G4 j0 e; i, `9 D
[ 本帖最後由 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 a1 S- X5 \/ }. _6 o7 t7 ^
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:  W6 C5 T4 b4 L& G
empty = true if valid[WPTR-1]=false
# Y9 u3 U" g# @full = true if valid[WPTR]=true
" r- ^" m: }6 z可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已5 Z2 V/ [* ^2 N: M: m& e
. q$ h2 V, m# V( y
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
6 H" |9 C% X) m( l6 _$ c6 A1 m關於 metastate. S2 D6 Z9 j' p( g, {: d+ U
請問如果一個d-ff假設 clock頻率1 hz
! l$ Z5 U" Y/ @9 ]5 P: t* ^如果剛好發生metastate,metastate這個狀態4 H! [0 H9 l  K4 c4 ?2 U7 C: z- ^
有沒有可能有機會維持1秒的時間長度呢9 j- f  q  Y* I0 V% q1 D1 m
9 W1 N$ d2 o. O* f6 b
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
$ v6 N2 r% \( ?( A
7 X: N4 F3 I8 q; `$ p. C$ s( y& Nmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-14 08:12 AM , Processed in 0.139018 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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