Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
3 p$ T3 |3 W  N0 t  x; ?% r& Y, M& i' M# v) B$ y$ F
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
$ p. s0 e  y5 i0 R  e  F& i- c, n/ P* L3 t  U+ m
那些信號也先估且如我假設一般
+ I6 z6 B5 g* ~/ e6 Z5 g4 ~4 ~6 cwen是RX收到一筆完整的資料時所送出來的1 @' t; O0 k1 V; ?5 e& H
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
: K# ^1 n; E( A# h- H% [0 eprptr:process(nSysRst, nrd)
# j) r0 V1 n: E* R5 @begin. T; r# P1 q% u5 P( ^" U$ u
    if nSysRst='0' then* ~9 e, j4 e4 [5 x  C9 Q6 B
        rptr <= "00000";: U' y* K8 J3 n3 n( N/ C6 g0 V3 m% h
    elsif nrd'event and nrd='1' then& h5 u+ Z3 v% u# C" u. C6 P: D
        rptr <= rptr + '1';- T( N' P; B. ]- m* \
    end if;
8 z, V$ j3 X5 R9 E5 Tend process;% A2 @/ R2 O' N3 d; H
; X& m( B! f* }5 f
pwptr:process(nSysRst, wck, wen)
% p  [# P! F  R7 F( {$ {) tbegin" a6 v+ V/ B6 a6 B1 x0 c
    if nSysRst='0' then
( b6 ?+ f% y- {& H4 P5 f3 u  b        wptr <= "00000";) n* {2 K. S* k, f/ j, D
    elsif wck'event and wck='1' then
! A5 _; W- V3 A        if wen='1' then$ U' a: N% j/ q! C# i
            wptr <= wptr + '1';2 Z* z  }; Z% f- v! ^, L7 L  ]
        end if;& _5 z8 n4 v5 q% z
    end if;9 y& [5 ~4 J1 `! s1 a3 u1 H4 O
end process;  E  ^- ]. q! N! v

! e2 d. {0 k) ~2 `/ F3 S4 D假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
& K: c8 D: H7 h9 A  m! ^你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key7 w0 x# O. q7 [0 V0 T8 C  \$ u6 v% k
% X; F  t) \' Y; D
Read buffer部分- h6 G, R3 d/ @. a

; @3 Q* [0 M0 E  c# R--read_buffer& B9 g. Y4 ?% D7 X
with rptr(3 downto 0) select rdata <=
5 k' j7 \/ }% N    fifo(0) when "0000",
' y$ |2 Y9 j7 s3 U) I    fifo(1) when "0001",/ d1 X% d6 Q7 w  H' x. ^
    fifo(2) when "0010",2 M! q" @# ?7 a3 K% W6 ~
    fifo(3) when "0011",
) E8 _" u, b9 x6 z8 q( m    fifo(4) when "0100",
6 n/ P9 d: k- B0 X/ `    fifo(5) when "0101",* N: |9 ^; s) a+ I: w
    fifo(6) when "0110",
5 k/ d* g0 g* j* ^* |    fifo(7) when "0111",
+ }. E$ E0 e8 q' p1 B9 Z    fifo(8) when "1000",5 M  @# @) i, m2 {
    fifo(9) when "1001",
: y  c) G+ C' E; O1 T6 I    fifo(10) when "1010",
5 v7 E/ ]8 f$ W2 W    fifo(11)when "1011",' t: T$ a% S# T* t4 T$ b: r- C3 X
    fifo(12) when "1100",8 U. ^1 a: ?  g* M- ^: c9 x
    fifo(13) when "1101",, I/ N! e3 O$ R4 i5 E
    fifo(14) when "1110",% q" i& V2 {- a0 M; d
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
8 F/ ?; s2 T2 G" h2 `4 {2 h
% x& H6 L: x: h# Cwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
* ]0 C$ ~8 y2 O, _: gbegin
. B- a4 t6 K: Y0 O    if nSysRst='0' then
! T0 ]" W+ K& `/ P3 z        for i in 0 to 15 loop  U! `: I" f6 _( M4 t. ]$ l
            fifo(i) <= "00000000";( Q4 B7 m, c; d' u# D8 y
        end loop;  M: {6 J. I0 a0 A
    elsif wck'event and wck='1' then) u$ |6 |! b% w
        if wen='1' then
- C( o! f3 l0 Z; t. f' M* U0 O5 B5 R            case wptr(3 downto 0) is
" P9 j! s: Y) u0 t                when "0000" => fifo(0) <=wdata;4 D' D- x0 ]9 b0 ~4 s
                when "0001" => fifo(1) <=wdata;. T6 c& z/ {. i
                when "0010" => fifo(2) <=wdata;
4 a. |/ q! ~3 a8 h( t4 X- M2 Q1 f                when "0011" => fifo(3) <=wdata;! I( Z- h- X- @/ E( Y4 B
                when "0100" => fifo(4) <=wdata;. m( l/ V+ P% D! u1 y% I
                when "0101" => fifo(5) <=wdata;
. ?) Q0 H# u% l; C                when "0110" => fifo(6) <=wdata;
" x# t* r# e9 g6 X" e                when "0111" => fifo(7) <=wdata;
+ I& P& \! ]. I. S. P& Q                when "1000" => fifo(8) <=wdata;
6 M/ }+ P& Q5 L5 k* R# d, }                when "1001" => fifo(9) <=wdata;( k$ W3 u7 x) x9 _; x0 n3 T
                when "1010" => fifo(10) <=wdata;9 b, O& V( Y" b0 _/ d0 u4 q
                when "1011" => fifo(11) <=wdata;
. w, l; O' O8 f0 W                when "1100" => fifo(12) <=wdata;0 \& K& J7 Q/ F/ W: a9 V# k
                when "1101" => fifo(13) <=wdata;
9 |3 e1 t- \2 Q" ]$ l! Q3 G; o                when "1110" => fifo(14) <=wdata;
2 {# i1 \2 L' H: t8 G                when others  => fifo(15) <=wdata;
1 M% F& b- V! y6 }) L, B            end case;4 K3 ?2 N7 J+ D5 ^8 Q+ @
        end if;# |9 z, B" y# b& p
    end if;4 r5 D4 X! |# T) g9 i
end process;" R% N! s9 Y3 U' b  h$ ~2 D

1 E# F4 X& X% U5 z) }[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
% e6 C' N4 ]4 z. R0 L9 t" a3 j我先做些假設
* {+ N& F6 r6 M1) /RD動作時狀態不能改變8 Q; Y( U6 G5 r$ K+ \
2) wen動作時也不能改變狀態2 n5 R' J' T5 O$ V% p1 Q6 i
如果只有這二個case的話以下這段code或許可行  ^! y1 c$ b  F4 v$ C4 e& D
) F& R1 j3 w! |% W- j  n3 X
status:process(nSysRst, wck, wen, nrd, wptr, rptr)( h: L5 ?1 ^! H. ~
begin
( x- }4 A8 l' ^    if nSysRst='0' then4 p. V, p4 Y& v& l. Z' n4 @4 r6 M* R
        full <= '0';$ G4 U6 k) I: a! _+ _" l# r/ ?
        empty <= '0';
4 e9 j: v4 g: A2 x        flag1 <= '0';3 X, i- m: ~4 Z2 W
        flag4 <= '0';
; }3 S8 F) @) F3 s- ^$ P3 c0 u        flag8 <= '0';6 V$ B1 f! B* Z3 x& Z$ p6 ^/ ?$ Z
        flag14 <= '0';9 s* s+ I% w% m4 |6 Y) u+ U
    elsif wck'event and wck='1' then
$ E9 @% A2 s1 n4 T' f# E        if wen='0' and nrd='1' then
/ |$ c$ m; ]" u+ M            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;! f1 X1 W6 j1 |/ r0 K6 ]! V2 e
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
5 }" [6 r& @0 O            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
9 C  J. F7 C  P7 _1 x; `' ^( w            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;+ I. K( `$ r2 v  Y% u! W8 P) D# ]
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;  o2 u& H/ m  N3 l+ h, U1 @/ R! E
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
/ V! @$ N$ ^! s; O        end if;
9 m+ \; P" Y1 U5 h8 x    end if;
- w* _9 S0 h; G) i3 h. Lend process;+ V! ?3 S7 a6 N4 y
! @; L3 ?7 Q1 n0 @$ L0 z3 _
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
2 T2 }) [9 n* J1 H/ E5 h7 g" Q! d5 c$ `, f( X4 ]. ~- [
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例3 E4 d- x2 V3 P7 E

2 F1 q' z4 f5 A2 h9 k" N* |將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論  F. g* o! v" |6 ^

$ [2 I: K# B+ `$ \1.
, l2 M9 {; ]% M# o, j   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"8 E# f5 `5 T) K5 j8 U3 x
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
& |& R* \; v& B0 f/ O+ M   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一: m4 J  x5 V9 L0 [0 C2 U5 V
2.- i  i2 ]' v8 h# g0 T# k
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
+ e: G: Z; E9 y; I9 z: K   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出1 p- X; P$ H' W9 S  c9 ]
   資料讀取週期RC最小280ns
6 q% r; j& V) `- R5 ?; O% [  y1 s3.
. z& o" }1 x& ^( q! r( i4 R5 |   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期4 f. b/ o% E6 C+ I# l
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講0 g' _' \9 s$ u% Y+ A0 ^/ x
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間2 ~  K9 |* H4 g2 C8 e; ~' D
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
' z9 b7 Z+ L, h* b* l5 `1 T; S) \! V$ q4 B
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
% O& E: X7 a2 a+ c/ ~3 D; Z9 L' D6 i5 _# `4 X4 A
第三個問題還是clock rate的問題5 ^3 X3 U2 Q# s$ q
5 }' V* g# `, Z& K
第一個問題留給別人回答好了...
% ?/ b  }. S- v: f2~3問題的確是問題沒錯, 誰來接手一下呢?. |0 O6 T5 E# ~2 r1 r$ x7 _1 }
7 e4 e7 t  a! S* ^: \
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!; D+ A& P) }; o$ b# ?9 X

% n# z( @4 o5 i3 g[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]! P" \7 U/ L8 ?; ^: R4 E: |4 V: L( K
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
4 a4 s; s/ |* r5 G[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.9 Q8 V9 L4 _3 }' C
[4] Website of USC Asynchronous CAD/VSLI group. [link]
3 ^$ Z2 V+ a* D* @& R. G; [3 y. |[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]4 Z. E# t; M/ J# L' h) m3 H
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 5 U2 f' Z) ]7 @
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料) J- ~0 B3 G5 b0 k$ s( h2 B9 B" |
我會好好的找來研究看看
# a0 p( p: n9 E3 i! ?+ m" ^% X. e
: H/ ]% b8 E- _- N; R我本身目前不是從事電子相關行業,不過對於& {7 y4 T9 H4 z' ~
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
1 i. W7 @: @) c& O2 s都很有興趣,之所以要寫16550 code主要是想3 _( B  z& c% ], g' l! N' c4 b
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
% d# q7 D, K" f5 m
. H& p, `8 m  _. G- R+ m" iFIFO這部分我有上其他討論區問過,可是都沒人回覆
8 p; i# k1 I$ V  u6 u; J, W感謝版主願意跟我討論這個問題$ ?7 B+ e9 N3 U: j6 ~

1 l1 p& I. ?( K; }再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多  R6 {1 |- l2 q6 O+ w4 G% ~6 n! H
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
* W5 @0 q: k2 X0 c2 z不然的話就變成只有我們二個人在討論了...
9 N+ U0 f* k/ `9 \0 d" Y, u5 a& ~& R) n! ^. n
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
! K9 M7 W) W' A" O% Y最近想到一種架構,用來做FIFO不曉得可不可行
+ p, r- q8 x( o* E3 I如下圖所示
! F3 s1 }- v7 ^! L- s4 i: q; W1 j2 I! O* ?3 T- o6 ]
先就full,empty討論,trigger level不管- c0 G' f6 a7 d$ X$ w# H* I
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間8 g' }% @: |( j% Y" m6 m
  y( U+ d4 U- r0 d, E, Z- b2 d. n
1.用額外bit(valid_bit)來指出register是否有資料寫入
; T, G9 m" G/ Z  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
2 _) X# T7 @' e) a% U9 f  當讀取FIFO,相對應的valid_bit會被清為0  O9 B9 i/ t1 Y/ Y4 `, |7 a

8 J. D- s! a4 k: h# H% a6 ]4 Z2.wptr及rptr用bin count8 _; z7 o6 L0 Q
; e. P9 M! n+ [7 `. t
3.full將所有valid_bit取and,empty將所有valid_bit取nor
3 u  n' V4 M3 ~  U6 D- O* l" ?+ A6 J. d3 c) }
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
4 ]1 R  Y& j- {- T  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
. `" {; m8 ~  V" n  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
0 e% z+ N" d9 [  S, z+ \- i4 U
' o# H7 ~- \3 U+ ]5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
, |; H5 b5 k* {' p; P. s3 N7 L- f: k  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk9 `4 c9 Y7 a' k+ {0 L* U
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接' p' H+ {/ \) m
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一- U$ C1 ?2 D  ?
  個位置是空但被判定為已經滿了的狀況)' ~" E! O* V& ~/ O+ _
2 E; z) C* }' Z# w; Y, s8 R
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
4 R) r3 N/ S, _8 S3 w- k6 G1 U
% i/ c' L5 e- U: }5 z! T如果不管coding style的話, 這個想法很好
# ~1 S* N5 Z& Y- B5 {( C
3 A) M# {& d" @, o" G) K相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.7 w2 x, L. d# M' @% m! }! w
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.# f, f, O* ?  V. W! a
anyway, 互相交流吧.
& D5 v  m9 F/ Q7 E. |# z
) }1 v# s" N7 [- ?% B. J7 ~改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好5 [0 q: j: v5 p8 E# L' b
我想到這個方法除了電路會比較大外還有其他缺點
/ |0 Y, ~" p$ o; ~
& D) W. C1 ^3 T" d' y1.不適合做成容量較大的FIFO
1 ^# E! Q# a8 O2 _' v/ i5 v0 F5 k$ H$ V
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響+ \$ {+ i" ~+ H. P

: D1 u& s9 h: t- d7 p5 {3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣% y$ P8 R% \0 s' z
   會有較長的延遲時間,所以速度被拖慢了
5 u5 y/ A0 O) N3 q3 I8 {% {3 c1 n
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
. m" B; f+ b  N6 b$ Y我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
8 l3 J3 l( j% v- Y1 U* k5 Z但是做ASIC時你會發現其實很小的# d2 q; V2 V8 o; W4 a5 }

. \) `8 j( p9 ~: A7 {/ L; e' T5 H' S0 A
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響4 i4 q; c0 l6 H6 W* B' Z1 ]
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
2 A! {6 c7 O& d; V* I8 p) G4 _. i4 i& J1 s! M
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
9 V! d0 G, L9 `; `9 Z! l相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
# |, t; ]& H. r& \* R: R% j# N" y- S

) `# b+ ~- Q8 g+ D8 c1.
- _' Y9 q0 I$ h7 F   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"" ^; v' V% I4 J! Y8 U0 [
- {0 V8 I' ]( d0 L# W& x
   不了解這段話的意思,可以在進一步說明嗎. B. t9 D% ?% o! L
" _; j, j- q. W( r
2./ G. j1 S( I2 B. [/ {/ o( D, \/ h" ^
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間- B: O, N8 v# L6 R/ Z7 L
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
# e: J% Q% D" G, [1 o, J- }  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了) L9 e/ k" J( C3 f
  請問有辦法評估亞穩態維持的時間嗎+ s6 J; I! @% j' A
  5 T$ {* c" p: ]. w8 g- \
謝謝
+ A7 \* {" p2 q/ a1 ~# [
3 V7 C% B9 u  y  a[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. , H8 ~& U5 C- `9 \
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
. k: ~# B0 [" O& Z: Kempty = true if valid[WPTR-1]=false) c: q) u; W- t! Q& ?8 H
full = true if valid[WPTR]=true
* a2 V( Z6 ?' r7 B: z+ e3 J可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
0 ~: Y2 Z1 T5 _2 F. P  _
" }7 z9 y5 H' Q) I2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好( Q" O# e+ [: I" ~7 V- K
關於 metastate6 g4 H& b( F/ G( m4 A. l
請問如果一個d-ff假設 clock頻率1 hz
! f  m. i# G: ~7 w! ?& \如果剛好發生metastate,metastate這個狀態
! h0 U, ]# ~1 j. g5 L有沒有可能有機會維持1秒的時間長度呢
8 R# ]2 u' Q  F7 N! W# e
8 k" ?, Q2 f- p- i3 y謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
( s( {3 X# M9 l- w+ l
6 f! k& b& k3 `0 n0 ametastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 08:54 PM , Processed in 0.147519 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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