Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了..." ~" z9 v) J4 v, n- S) F

4 B! ?5 w% g9 A0 z2 h9 M這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
- q3 b8 T  f! z: `; y
) L* d: W4 E  m$ ~那些信號也先估且如我假設一般+ Y% i" O( D( F2 G; W
wen是RX收到一筆完整的資料時所送出來的' j+ K! N8 n( F) o; k2 p: W% k
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)1 _1 _% g) J/ l9 F' J9 z* j
prptr:process(nSysRst, nrd)+ w& H" a/ k2 @* \
begin
  ^/ H$ }; t/ B1 V# ?    if nSysRst='0' then  L5 ]! V+ B- V* K) C
        rptr <= "00000";
: U+ y/ N, q& y    elsif nrd'event and nrd='1' then
# |9 D+ s- H% M) j9 y        rptr <= rptr + '1';
- |  p, }, B; e5 \2 b    end if;
) o5 @6 u+ d2 }) fend process;8 s  R5 B/ X- b0 T

; s- M4 g. U7 Upwptr:process(nSysRst, wck, wen): H( H! Y5 T7 L
begin. y/ }4 v% T5 e; o
    if nSysRst='0' then8 o1 m+ H9 ?, G4 y2 w
        wptr <= "00000";
! r( p: a. q' M    elsif wck'event and wck='1' then
8 l0 D0 T0 U( k% h        if wen='1' then/ D" M. I: |% S" T1 U9 n5 d
            wptr <= wptr + '1';1 [" z  Z- x+ M5 o
        end if;
+ c4 z% c3 }( M$ H- f( [6 K    end if;& i  ^% p- ]4 w6 p( M4 |4 N# _( m
end process;; Q1 j  |5 @( _5 q

& e3 _$ D# e3 N假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?8 r0 G+ D7 q" w3 }4 j; w3 _  O2 h/ _
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
/ }; m. J& N/ I9 k. l2 x+ H5 m
. K5 c+ i! Q! ~( o0 x! ~3 `Read buffer部分  d% ~  V: U$ G8 S0 v/ n

" o1 L3 P( G7 M' D# v$ O--read_buffer1 W  U+ {' c. V
with rptr(3 downto 0) select rdata <=
! B0 x( a- y! A1 H% m; `/ p    fifo(0) when "0000",
* K1 S* X0 N* D; A# g8 H    fifo(1) when "0001",8 V6 t5 K$ v9 B4 C  [1 F0 S  K
    fifo(2) when "0010",2 d5 K  f9 t# D8 `% e4 \3 o8 u2 V0 R
    fifo(3) when "0011",
3 I" z8 N! z4 L% y    fifo(4) when "0100",
6 Y* w* @* V% o5 N4 n    fifo(5) when "0101",
5 O) O+ ~8 }# g0 v, Z, P" V    fifo(6) when "0110",- n: J2 W8 t! x+ q$ P: j: K; S+ I
    fifo(7) when "0111",
. a1 @* C2 I/ J/ o& t- J. Q  j    fifo(8) when "1000",
9 `3 ]  J' P( W! j) F0 b    fifo(9) when "1001",
2 y2 g  R+ v5 g- D) R' Y3 V& p    fifo(10) when "1010",) @5 }2 ]9 R3 x2 c$ a# @( G
    fifo(11)when "1011",* U' @$ F& w! G1 f2 [* w0 D% E
    fifo(12) when "1100",4 R# U5 e$ c) s- L. N% s& a; `5 [
    fifo(13) when "1101",
, A) K8 [& u5 W6 h# G9 O7 k    fifo(14) when "1110",
& T3 K3 `4 U+ {9 g4 I4 n  L    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
1 E* c& k% @5 V- w9 u5 j4 u" o" I+ w
+ |2 ], g, T5 {' ^& _7 ]write_buffer:process(nSysRst, wck, wen, wptr, wdata)6 s. X( ^4 |3 E' a
begin6 }" Q$ b& \' j  d- ~& q* @3 {* g
    if nSysRst='0' then
# }# e( E8 C6 z+ E        for i in 0 to 15 loop
! [3 Q- X! E; p0 y2 }            fifo(i) <= "00000000";
- p) ^& s9 x1 F$ Z' e" A( r- t4 u        end loop;4 D2 c3 u9 Y1 l3 w) Q
    elsif wck'event and wck='1' then
, a/ @$ S3 H1 Y1 X        if wen='1' then
3 Y1 A% ?8 Y. x% `( P" O; S            case wptr(3 downto 0) is
( z9 s% Z3 W) b3 S                when "0000" => fifo(0) <=wdata;
  Z5 ^- S: y, I                when "0001" => fifo(1) <=wdata;3 G+ R) l7 G$ D
                when "0010" => fifo(2) <=wdata;0 a4 Q- \$ s0 N" m' G2 x  U9 G1 n6 v
                when "0011" => fifo(3) <=wdata;
" _9 a+ h3 y+ e* R0 }                when "0100" => fifo(4) <=wdata;
0 u4 o1 a( Q5 ]9 a! z, I% l4 q                when "0101" => fifo(5) <=wdata;1 ?# T9 x: G/ z' q5 ~: s
                when "0110" => fifo(6) <=wdata;, `* _' Z! n" y. V; h" G
                when "0111" => fifo(7) <=wdata;1 [0 g, k- _. ]; ~
                when "1000" => fifo(8) <=wdata;+ P/ b0 a# h3 ~# u) w
                when "1001" => fifo(9) <=wdata;
$ M) a  A! v  Q9 Q* y8 [- K                when "1010" => fifo(10) <=wdata;! |2 Y! [% m. O$ P8 _$ Z
                when "1011" => fifo(11) <=wdata;* p" c5 l9 s  c: U' k4 X
                when "1100" => fifo(12) <=wdata;
. o3 C4 ~/ D( d% _. p' S$ r9 P5 D                when "1101" => fifo(13) <=wdata;
' F+ g7 q: K. `) E# p                when "1110" => fifo(14) <=wdata;$ {) i7 g# z% O
                when others  => fifo(15) <=wdata;
; p8 k  Z  v( F6 x2 v) p+ s: K            end case;
" v# H! p5 A( Z* S3 v: ?8 c        end if;
: r( _/ @; o* x3 j. k    end if;
3 h4 `7 B( N' i+ a' }& N* p6 \4 qend process;4 T; P5 }* [# T' W- e9 O  d

! z6 D2 t# w3 ^% N3 G[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
2 G. F: s6 A7 W  f1 v' J9 Z1 K3 b+ E. l: k我先做些假設$ W3 Z- o4 S, ]& m% e
1) /RD動作時狀態不能改變& k! _, i2 A. K
2) wen動作時也不能改變狀態
0 \' x6 V  D, [( Y! O. R+ p如果只有這二個case的話以下這段code或許可行& i# v3 w* }+ H" Z
  @9 q2 s( I# g# b& W& F/ b! l0 p( F
status:process(nSysRst, wck, wen, nrd, wptr, rptr). O' N& W2 o/ @9 k
begin
, f5 e/ J" l& v3 u  A; x    if nSysRst='0' then+ T* Z5 j) k. P8 M
        full <= '0';
5 M, W% ^; c, P- t2 T4 r* w        empty <= '0';% z% ?4 Z; k, [$ N: |
        flag1 <= '0';# N5 ^/ a* l  W  J) @0 e
        flag4 <= '0';% E' G) D9 C+ {7 B- L9 z
        flag8 <= '0';
& t/ I# J" O4 @$ n5 L% z        flag14 <= '0';
) |4 w' B1 Y. c7 _    elsif wck'event and wck='1' then
3 Q* G9 p' {7 u  i  B) [- t        if wen='0' and nrd='1' then" j( B" V* r9 {6 d$ j1 t& v2 ?
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;6 i# a& I* {8 a" O4 R3 U1 ?/ O
            if wptr=rptr then empty<='1';  else empty<='0'  end if;2 ^4 _& q& ?8 c
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
) c& y9 ~+ |! j8 W, {* S            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
( \3 U7 z- d0 W+ L, j& B5 V            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
: A) N. @' F5 M4 n            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;* k! r8 c; t1 A$ k
        end if;5 q8 W( D  M1 E9 P) k
    end if;
# d7 S- y6 t! ]/ jend process;: B7 Y& W- g- J- N" Z; F
  S) |- \% ]3 o3 P
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
8 X" D* a3 e  T" k' `
7 M! S: H; [4 _7 x好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
  R1 d0 s8 t* s9 G0 m: Z9 j' U3 c& b3 |  R0 z% C
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
% A( T& G" M- S  D: s
3 [( D& K2 C8 h1.; _* l  A) P' ^8 {7 y$ c' R
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態": t* w; h6 z* N# G  z% ?" p
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
9 `/ w0 R7 _. ]/ \5 u7 J5 N   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
4 D4 v, X$ U* |" N+ z9 N2.
! r  s2 X' F+ }) ?! X   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高6 A/ U4 C- m  p8 W
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出3 A+ ~$ M' w/ T, g9 j9 ]  E' `9 A
   資料讀取週期RC最小280ns# s8 u: I7 T& C6 t3 n% H) q( _( R- ?
3.
9 h, O! y7 T! K% w% J' e" X8 P. N   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期7 y5 z$ i" k" b& O: @+ e1 f- r' e
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講& t& P  _$ j9 y$ ]
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間/ @6 r1 |  h0 `2 E
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
2 b: g3 |7 R. c* z
# n" G3 x3 V: P. j8 l: d- E第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
0 h" @1 D0 o  A8 o% V* A& ]  [0 W$ x5 \0 q9 {, W
第三個問題還是clock rate的問題
9 k% O: d- W6 g: D4 c3 m# ?: {! q# K3 l/ G+ x1 l
第一個問題留給別人回答好了...
; q/ \! a. Y; C) O; X% w2~3問題的確是問題沒錯, 誰來接手一下呢?
% o$ ]  S7 P/ l) B) ?0 y3 k
5 ?% @) L5 N$ [6 Y& daddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
' J* `" P: F  p! y8 U: D* _! A# X+ f1 x$ i2 t
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]- T+ w* H; M+ v7 ^! w) V
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]; J7 t. G) g9 W
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
$ t. G' C" A. d* O5 ~[4] Website of USC Asynchronous CAD/VSLI group. [link]
6 A5 `2 `" q1 y  O$ S( [[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]% @) l) p/ J0 c/ B4 o% H
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
+ O7 u- s& H, C/ ~% P[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料2 X, d8 x% h) `1 z- t! n8 V/ f, Q
我會好好的找來研究看看7 w& E# ~5 Z3 m) f4 K: l6 r
8 e' R/ j: v' k1 v' Q9 w$ `
我本身目前不是從事電子相關行業,不過對於
' [  i- X$ {' ?- x6 ~FPGA/CPLD,HDL,數位邏輯設計及單晶片等" ]* c. `* B( n. d' x
都很有興趣,之所以要寫16550 code主要是想+ G  `- }% P$ W# k8 Q
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易- m" R* }& |& a# K; W

4 ~& K& j: y, |3 p/ L/ _- IFIFO這部分我有上其他討論區問過,可是都沒人回覆
, M; }5 k. T+ S" e/ b感謝版主願意跟我討論這個問題
% j" S0 i$ T" p2 ~, E% Z' k! V' t: k, i
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多3 e1 f  R( |9 I/ @
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見! h* f) J% f9 H  }0 a4 z9 v3 f
不然的話就變成只有我們二個人在討論了...
. T& F- v6 \4 L$ L3 P& ~) ^1 N6 x- @8 B
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
& c7 q3 d% I+ Q' B9 J7 @  V- ^最近想到一種架構,用來做FIFO不曉得可不可行
7 Y8 n+ V3 Y* k9 o' p8 i$ P+ F如下圖所示
7 \6 F  K  X0 ^' r: d: a
6 |& |' J: m5 L. h) J* S  L先就full,empty討論,trigger level不管8 t+ ~/ ?. k% A" c* J% s, l8 [3 Z
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
3 }8 N! e5 }7 d+ }6 G8 q+ \$ x; m( b) ]) m
1.用額外bit(valid_bit)來指出register是否有資料寫入, S6 w+ D) r! v) l) r- j
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
7 U& i/ t. F0 h; N1 W$ T" ^  當讀取FIFO,相對應的valid_bit會被清為0
* ^: U" H6 z2 R7 G0 u$ i
* k9 ?: n: c8 F, k4 M, ?8 G2.wptr及rptr用bin count
# {: W) L/ w1 z  `' p
9 n+ q( U! _- K0 l% i& f/ \3.full將所有valid_bit取and,empty將所有valid_bit取nor) ~/ c) X7 E' M) T
& D) V3 v9 A* l
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
! j" F, q( y8 e/ `# ~  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
, Y8 I3 u, o' n0 r  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已+ J' q% w2 y. ?

8 ^, v5 i& {9 {2 o8 u0 A5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作2 B" ?' h* C4 Y) E6 H# e
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' Q: g" \5 m/ k( N7 y$ }# O
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
$ y& P) E6 a; l' W9 X. n  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
2 e$ k. a$ i9 [7 ]/ B2 ]  個位置是空但被判定為已經滿了的狀況)
5 s' x9 r- I% }$ n7 i  S
! ]+ R& O0 u  e" ^以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
9 [5 V6 t( a) G. E' y/ K3 H
; m" C. @. r; W. c6 V$ _8 ^3 y如果不管coding style的話, 這個想法很好
3 V4 A) p# ]8 a. X9 R8 _: T+ j& m) u1 ]( H% A: {9 n; e2 P4 l
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
- g0 `% l; D. j" H  z( K; u' P跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
1 m' n3 l% H% [/ a! k3 Tanyway, 互相交流吧.+ |2 ~; X) F; X6 b( j1 I6 L
  u3 M$ a- G' S$ ]# H8 D% J# @
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
' E6 O1 G5 m$ F9 b' R我想到這個方法除了電路會比較大外還有其他缺點
4 e3 a# D: c% [7 B- i+ V" M' R+ K1 K) C: H2 ~  h' B8 E" w$ Y
1.不適合做成容量較大的FIFO- M  `1 @% d5 ~# Y" B
5 l+ M1 t+ m* |1 V
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
$ s& \* [! l8 Y+ p: t$ n% n( s( v9 o
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
3 u' X# j1 A* u* [2 X+ A- N' I   會有較長的延遲時間,所以速度被拖慢了1 s2 W6 O4 g# o4 s- K

7 J! ]  X" \, ]) V2 \" ~: Z0 [* W謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO( S  K4 }, h4 {+ j
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大2 I" D3 R/ c) h2 V; N. G4 q
但是做ASIC時你會發現其實很小的
( c) t, v, F9 j# d; r& E2 |# V4 l2 J" s
2 @* p$ A2 j1 t- \, ]
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響! t( E$ R1 h- F, \/ D. l: j( p; p
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
5 ?3 ~) ]  z7 g$ G8 H3 o) X
. p+ n3 @4 ]- E3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
  \4 R# K; U" t  z0 Y" G8 J相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好1 E/ i, v4 j8 \7 n6 b* ?$ L
; h  t8 p" t' }% I- r2 K' b" b: X  G

' x' Y5 A- X2 K# E( q# _3 E% J1.( x( K' z6 L% X7 y4 U
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
8 x9 t7 }7 `$ @& v3 {$ P* L* X) K. Q2 R6 _8 y: n# Y. ^' O
   不了解這段話的意思,可以在進一步說明嗎' H& K6 n3 @) w  K, f+ \- E3 j  W
% ?5 R3 `- w) n2 h/ r
2.
/ w# p' N" t2 {" Z- m- u8 s  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
* ^/ p- L+ P" Z& _  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
( ]! [) [! J8 E3 Y, ]. p# w  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
! Y# o5 F1 o5 M1 M  請問有辦法評估亞穩態維持的時間嗎" E  Y0 L5 a! h' M$ K
  7 h  _; v* I0 J( v; ~8 j
謝謝% U3 G/ {  ^7 J1 t9 P+ w

. t6 t. @$ ~% ]8 r, a/ G4 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
! ]# G. M( E! a! C1 r) W  p我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:( ^- J8 ?" v; g) _
empty = true if valid[WPTR-1]=false
9 r6 X5 u+ g" L  U5 T+ M/ qfull = true if valid[WPTR]=true
( v! g$ e9 I6 m" R可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已! K% S6 j! ], C' _
4 x4 |1 Q- y) i9 l& Y/ t  j
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好* V* n1 k5 ?! w5 j
關於 metastate+ A* Z3 p5 r1 i- I
請問如果一個d-ff假設 clock頻率1 hz
& b- f) y) h: z如果剛好發生metastate,metastate這個狀態
7 y' R& G+ W6 q4 ]- Q3 Y: q3 l' z有沒有可能有機會維持1秒的時間長度呢% v( N* l) s& D- X. d; ~: D! X

9 r- p- a4 k! T4 g謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
6 k  v- z; ^2 C5 \" N4 x/ g
4 ~1 H" f& F9 a% Tmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-31 04:56 AM , Processed in 0.126516 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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