Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
; `( B/ L) d2 @6 @9 M* C  g4 G1 r3 U, X- @: \  ^
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多. K+ C7 G. K- t9 @. }$ L/ |
1 i6 V& O. r/ C8 R9 S" a
那些信號也先估且如我假設一般3 v' ^! K. N3 ~# s' m( J; Z7 h
wen是RX收到一筆完整的資料時所送出來的
$ C5 z6 r; x9 w+ d( r3 i3 _& }1 j' E因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)/ ~7 I& J/ P' ]( P* I+ ]! B) i  X
prptr:process(nSysRst, nrd)( Y4 }# [4 ?$ S4 {6 t, u% k" x
begin7 u7 }2 l. D# w1 [
    if nSysRst='0' then* X/ V; H# T% D2 N2 S9 T1 Y  K
        rptr <= "00000";
: w& x/ i) V# K9 y    elsif nrd'event and nrd='1' then
3 A  w" V% Z7 o6 i$ z        rptr <= rptr + '1';
4 U% L% R, g8 P. n. E) M! t    end if;
4 a: J1 B! o/ z, S" vend process;
1 a$ Q5 b; `  Y4 d3 M
; D4 X6 U: u+ X0 a* T. q4 Ipwptr:process(nSysRst, wck, wen)' }+ |" C6 S; ~% E. O
begin& \& f1 W) M5 F7 J  s3 ?' T7 ]
    if nSysRst='0' then' F# H. p* K( Q) e9 _
        wptr <= "00000";5 Z$ P+ u* a- r! X0 ^% N3 j/ J& W
    elsif wck'event and wck='1' then7 y0 B/ r, l. F6 l. p# a" O
        if wen='1' then3 I7 M4 l4 M1 d3 _8 q
            wptr <= wptr + '1';. b- y2 n/ W8 V
        end if;
1 I- Q; V% g2 {; g    end if;6 M7 [% R, s, l7 m% x' b
end process;
+ e3 h( ^* T/ ], J$ i" E& {7 k* ~
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?5 S6 _( N  g9 J& P$ U% V
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key9 S8 V5 ?) l. }% M/ \5 U

7 @8 @" E- @9 |$ Y' N4 e/ ?, iRead buffer部分% |7 c% I  e1 c& a, H
/ N5 O5 `  k6 e, K% Z
--read_buffer( H! ]1 I9 g/ u0 s9 u1 d
with rptr(3 downto 0) select rdata <=
7 K4 `5 F& `8 o) x    fifo(0) when "0000",
) v: l6 j3 }6 _2 {8 ^    fifo(1) when "0001",
8 y) r/ x( W2 F7 ~$ R% D8 ^* v6 ~    fifo(2) when "0010",
7 ?" |' f* ]* u$ n- K2 j2 G    fifo(3) when "0011",
$ ~& H5 m4 \) ^  j8 v: a    fifo(4) when "0100",
8 i5 D* U  i; {& w' |- x; \; d    fifo(5) when "0101",
! b7 \. R; o" u9 J/ m- ]    fifo(6) when "0110",
! _: n$ A# F9 M7 ]    fifo(7) when "0111",
8 r* `8 S3 C3 H    fifo(8) when "1000",
4 s/ L" M% j8 D# s5 `7 K! P! K. Y, @    fifo(9) when "1001",
) ~9 |9 C. a1 J5 b5 e    fifo(10) when "1010",
/ r: g8 D7 [$ z  ], K% c    fifo(11)when "1011",
( e/ U5 X4 D& h* R    fifo(12) when "1100",# G- R5 I5 N5 L% Y* i5 }
    fifo(13) when "1101"," O# B' |( l7 j, a# U
    fifo(14) when "1110",
; V; i$ g0 y9 ^. L. |# k    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分3 p3 J. ]6 y4 t# z; w" e( q

  I1 K& F6 F8 ywrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
% z* L. v9 K2 Lbegin
, M, m8 Q6 ?+ b. u% c$ `    if nSysRst='0' then
4 r. q" p% `8 M. L& p4 n        for i in 0 to 15 loop; j6 y( S& ?" [$ T# I
            fifo(i) <= "00000000";& g" V- b8 E! G8 W. g; A
        end loop;/ b! n, E) r2 f  W( Q% `2 e$ v
    elsif wck'event and wck='1' then
: r" c& s  M& A/ p        if wen='1' then
1 R. p% H/ x4 G; d6 `2 r            case wptr(3 downto 0) is  o) N0 f! j0 M% @
                when "0000" => fifo(0) <=wdata;' J& O2 c; ?* g) o- J/ _- T
                when "0001" => fifo(1) <=wdata;0 R* Z, v9 B1 h+ o, {" H
                when "0010" => fifo(2) <=wdata;- f  l; a# ^( o1 o& c- K# d1 }+ H6 h
                when "0011" => fifo(3) <=wdata;
. c1 d* o$ A1 L; ^                when "0100" => fifo(4) <=wdata;3 j5 c/ z( }; d, g4 U
                when "0101" => fifo(5) <=wdata;
/ N* Y& R% M6 C/ ?& S( n7 M/ t: ^  e                when "0110" => fifo(6) <=wdata;
* @$ v! X& q- ~0 R- Z; v$ v# g% C                when "0111" => fifo(7) <=wdata;
# K) p+ y( }+ z) O1 E# t                when "1000" => fifo(8) <=wdata;( ~, @& R6 f7 {; I! O2 ]
                when "1001" => fifo(9) <=wdata;" Z# z" Z' p" J  ^' {- `: M
                when "1010" => fifo(10) <=wdata;
) ]/ J7 s2 n( M, Z2 r                when "1011" => fifo(11) <=wdata;% H, h) R- f' {! @" K0 r4 k/ u
                when "1100" => fifo(12) <=wdata;4 W+ ^# y3 `5 b" J3 j" w# F
                when "1101" => fifo(13) <=wdata;
0 P4 L, Q' x' s/ i5 S                when "1110" => fifo(14) <=wdata;
. D  y/ m  m8 z1 ?- W                when others  => fifo(15) <=wdata;
- O1 M, W9 X3 U4 L0 T' _4 e            end case;' T' A+ ]- o! h. i2 C
        end if;
4 p6 `: _- X7 ]) p1 M( f7 v    end if;
$ k& J" U" b+ X! N% C% D# l9 }end process;! ?( A9 ]+ n4 g3 I& `& h+ M- r

- N! c  ]: s. I6 h( |[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
0 B" j6 z# _% j+ `5 M( a  X0 U2 c# b我先做些假設
2 N) y, o! Z6 i& r8 h1) /RD動作時狀態不能改變) y& y" q" K0 g3 \* h. o5 C* }
2) wen動作時也不能改變狀態: {& U- p& y. R% f; w2 d
如果只有這二個case的話以下這段code或許可行* I0 F; a0 ]9 z. t" o" E
- v# ^0 t; g% v6 O8 p: p( O+ g" \
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
% Q2 `1 z3 h' V) D& u  k; N7 [begin9 F) G& c+ L( K+ `$ l- U+ l
    if nSysRst='0' then: b; L1 s/ x. _+ p, u
        full <= '0';
/ W4 o0 |, l* U5 r( z3 e        empty <= '0';
3 J3 e6 C8 I6 C8 Q1 ^        flag1 <= '0';+ G6 |7 f" c* j5 q: a
        flag4 <= '0';
$ V, b: D  t9 ^: I        flag8 <= '0';
6 s; Y7 C8 O! i2 Q0 \# W        flag14 <= '0';. n$ Q, \7 M2 z' G3 g6 |
    elsif wck'event and wck='1' then; c5 p( j& B( l% f8 b% _6 ?6 s3 h
        if wen='0' and nrd='1' then! z1 x# Q2 Q, O
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
* X: m9 L2 }. Z+ J/ ?0 F            if wptr=rptr then empty<='1';  else empty<='0'  end if;
) T5 a% l3 |" o" S& Q- \            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
1 T, h% X, x& h4 N3 c            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;6 S! ~) Q$ L+ L! G  g
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
% h; t# I8 v1 D. P5 \/ m7 B            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
6 }; A( f1 y4 ~8 \( P5 @+ |        end if;$ z3 _- k* W3 g$ |$ L9 @
    end if;/ ?, _4 _; L) R' Z2 t* z- _' t: i
end process;
/ V, S& U! L2 I2 i" ]3 M$ m1 I2 Y. U+ S  S
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
+ Z; X8 x6 W1 K' u5 ]7 z1 z/ N( C2 r& A$ Z/ \8 k
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例6 p' I5 X) C/ w6 l6 H
9 n4 G# h$ E" Y: x6 Y. F
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
7 H" j0 L5 `2 [, g, U2 p0 A+ S6 P  Q( }& c- v
1.1 w& P; z, l4 J6 ]# }& w
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"# M6 L( E& A- C7 v
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
8 j/ J# t0 D" K  @; F/ H   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一  G& t, {. m! i/ ?+ ]5 k7 O
2.- r* Q7 G/ L6 l
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
) p) A  ~9 C' ?   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
% N! ~: }3 D- a   資料讀取週期RC最小280ns
4 A  j* a1 H0 o9 [3.8 [" F9 K3 ^: X0 ~. u
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
5 x7 N' [1 A; C6 F* F  a   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
1 p' j3 ]/ u" u) y   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
2 H5 N) W! N+ G   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
9 e+ L- t! p- B' D% U. m/ v3 u
, d4 r2 \& P: @: Q+ l$ t第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了1 Z* _( j$ T6 z

: _6 n2 C/ J3 d/ j, v第三個問題還是clock rate的問題
4 x& X  S8 S6 ~. \; `8 s2 y' I) I  h0 ^& E" C
第一個問題留給別人回答好了...
# J% i- \( M! |/ b! N7 S2~3問題的確是問題沒錯, 誰來接手一下呢?4 E# O+ L: G) n
6 z8 D; Y1 W; w( y' U% L
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
7 x. ]3 g+ N1 @/ \. H$ p
5 M( D; w7 h* h( r9 v& s5 I7 O[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
: }' m  H% N! y5 P' D. J[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
2 a% I- }7 X0 R1 \8 o9 P[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.6 d- h1 e- n* y- s
[4] Website of USC Asynchronous CAD/VSLI group. [link]3 t7 ?2 D. V, O9 j& H
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
) g1 R# @  Z' Y: X  ~  f[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] $ n2 m; d3 s$ I) r1 K6 a5 _
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
) Q; }( u* ~' B我會好好的找來研究看看! v# Y6 J: H0 T% x4 p

# r6 w/ n0 l+ A/ O$ n; P我本身目前不是從事電子相關行業,不過對於5 k$ E* J$ i+ d
FPGA/CPLD,HDL,數位邏輯設計及單晶片等7 t. k  O5 ^1 L' _# S, i
都很有興趣,之所以要寫16550 code主要是想
6 w6 q; f0 L( I' {& ~( z/ X2 P挑戰看看自己能不能寫的出來,不過似乎沒那麼容易( ]4 \3 A0 b& }3 M) @- y% q. e4 V! F
  Y/ @/ C6 I4 T$ K  O
FIFO這部分我有上其他討論區問過,可是都沒人回覆
  N& f/ G! F4 S; e5 K感謝版主願意跟我討論這個問題  q, v7 g+ o" M+ C9 _5 `* g
: b3 B2 K5 P2 c& K/ M
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
4 l4 C/ d  w1 P2 ^  u不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
& }1 G6 E5 O0 U) X不然的話就變成只有我們二個人在討論了...
3 N3 X1 U2 L3 [8 O- U
2 D! {- N& k: F% p) K1 e過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好3 b4 C/ S+ H+ f6 R( e! T$ i/ D
最近想到一種架構,用來做FIFO不曉得可不可行
1 {( J" `( |1 ]3 A5 U' T如下圖所示8 ?- z7 W6 M# j0 J6 i

! q" h' ?8 }  u8 L& d先就full,empty討論,trigger level不管/ J& s4 S0 \, s
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間4 e0 O1 \! t* o3 p; U$ O- N9 ?
5 s/ x4 R$ L6 g4 P% {1 m
1.用額外bit(valid_bit)來指出register是否有資料寫入
5 L: r4 W6 v$ @- x5 |  當寫資料到FIFO則相對應的valid_bit會一起被設定為1, _' p/ K- N/ ]5 e
  當讀取FIFO,相對應的valid_bit會被清為0& X8 d4 `9 g9 ^2 f9 {

! p6 y9 R, O  {7 M$ H0 r* K! |2.wptr及rptr用bin count+ k4 H# Y- W/ H/ w6 N. N! T: S
4 Y0 y5 I# l( C) J% K* Q0 `
3.full將所有valid_bit取and,empty將所有valid_bit取nor
( H1 i' V" N  \0 H9 F9 h/ t5 Z, b; Y7 @
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
7 h/ |1 N6 Z3 }) e2 u% B& ^$ ~$ k  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case5 t6 j( x  G) q
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已+ f* [6 m0 {6 Q6 E# W- C
4 k' i5 f8 n9 M- d7 |; }' w5 o/ ^
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作: S  S' ?9 y! A2 o- B
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk4 _$ a; J3 f% x: N$ F  w0 [  m
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
0 c9 g( E" ^" z. c  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
7 u; Y( M- c' D: e% O, o6 W: n2 |  個位置是空但被判定為已經滿了的狀況)6 D/ B0 G. S9 c) A1 r
  E! U" M# v5 M0 x
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
. k8 f7 a3 X# `, j
" w. y$ ^( h' t- @3 x- a# ?+ V如果不管coding style的話, 這個想法很好
, x5 A0 m) r* S& q% C5 ?4 v7 k0 o' U7 a
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.0 _" S" ~2 g9 V" H& a, e% K5 I
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
2 k$ B1 j# }0 F1 W$ Canyway, 互相交流吧.0 P  I/ m2 P! j' V

9 i1 G& ~$ G! v- I9 J改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好; o+ z3 N6 I7 ^7 |( Q
我想到這個方法除了電路會比較大外還有其他缺點
) H+ N+ ~' e3 E; s3 I, b4 d4 s2 `7 [! R) [. B
1.不適合做成容量較大的FIFO
! a% w5 k8 l" H# d
" O1 M* Q3 @, d! |+ n6 Q/ I0 w$ R8 \2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響5 ?$ {/ j3 d6 G; l) I: M( p) x5 _0 j  H
% j  E6 x: S: a. K$ i
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
/ t1 h/ Q1 b& t   會有較長的延遲時間,所以速度被拖慢了
# w' A+ _7 `6 `# O4 H7 [  S# W) ?; s+ H7 e6 V6 X! C0 |4 T
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO- p( C9 l8 g! F+ ^6 @
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大) f2 Q+ {; C  B
但是做ASIC時你會發現其實很小的
/ C0 i1 a% m) x) p) W( C7 D. D; T# V; Z2 N! s8 D

) X$ D$ w2 c/ T( U- H$ o3 W+ e2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
' s9 C$ G' C, A4 G8 `* c, R這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了! i+ ^  J8 \- K% `
) G) Q2 O& H7 h
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了, s; m% W1 o2 w' L6 d! i5 t0 c/ G% X
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
4 C( \7 D! ]: `. t+ E! }5 o  ]- }( n+ L" v# U, W7 X# J  k

5 h* |! d- T4 ?, d- x1., h* k7 ?! {6 Q' `( ~
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
) }8 u0 D  W+ c+ m" R1 m; V+ a6 t4 ?7 S- Z
   不了解這段話的意思,可以在進一步說明嗎
( l2 X' h) {. C! M8 r# m0 z: S3 B0 b' ^; k
2.
1 k2 {- k$ T; S' T: u  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間# }8 n& L+ E3 r# }# I* ~
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會: p9 @* `7 S. B! A% w4 a
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
" E  ?  N- C$ v9 V" M& h% d  請問有辦法評估亞穩態維持的時間嗎& z* [; _! C" p2 w+ ?* @
  
5 h) m6 ]+ j! k謝謝
0 Y. ~1 x: x# d/ E
9 L' s& W- l% H, J+ N; O[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. % Z- t) P9 ^* V$ F' c
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:$ ^3 j5 h0 S: q' W3 F7 C
empty = true if valid[WPTR-1]=false+ i+ @( H/ F2 m
full = true if valid[WPTR]=true8 |! V  y7 h. r0 h/ u
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已) h$ W. D6 k- y3 ]+ |. W

8 D" E5 Q; @7 f: E2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
9 S& f( Z: b3 C! H( Z關於 metastate& g, ]6 F, c* i% e
請問如果一個d-ff假設 clock頻率1 hz
% |1 @( d# z  {: P# p1 }如果剛好發生metastate,metastate這個狀態
1 \; c) ~4 S, I7 J* x$ M- y. y有沒有可能有機會維持1秒的時間長度呢
# {) U7 e/ `0 R+ [, s: n
  v. N( E6 M9 r- p/ ^9 n/ s謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有$ u" G5 w7 e+ e; V7 p! ^/ o5 o

2 N9 L; ]! C+ z! S+ Zmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-31 11:14 AM , Processed in 0.147018 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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