Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
# ?7 h+ B$ X8 A& E$ h
( Y+ |/ ?2 |& l這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多, ^; W1 k$ ?6 F0 c# \7 t6 ?
/ r( S5 R! c( ~: Q% ~( i2 E+ F
那些信號也先估且如我假設一般
, h" z9 N: |5 S( f% ]2 ]wen是RX收到一筆完整的資料時所送出來的1 J& N. W2 L) T" l6 z/ d! o
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
; r2 A6 ~2 p2 ^( \1 tprptr:process(nSysRst, nrd)
6 m4 o; W+ q* p) Tbegin
$ j/ Z1 E5 \$ F& Q+ b6 A5 X    if nSysRst='0' then
' e  |& C5 {9 c, k4 |: x1 {+ _1 E; i        rptr <= "00000";
9 ~4 H7 J- w1 V1 K1 I" [3 m( D3 u- s1 B    elsif nrd'event and nrd='1' then# S( F" t$ c- }
        rptr <= rptr + '1';' {  l  t7 J- N1 R1 {
    end if;
3 |; U. J) w, y$ K1 O+ c$ Bend process;
7 }9 X7 z8 ?# Q! k
& k' Y2 H. b/ J* Wpwptr:process(nSysRst, wck, wen)
6 H0 {5 t  x: X! B$ j3 dbegin/ A; p- _% _4 A/ m; p( ^; L# |
    if nSysRst='0' then, _/ e1 P* B$ c. c/ Z: h
        wptr <= "00000";
4 q9 Z7 I6 \7 w, [3 b& T" Z. h    elsif wck'event and wck='1' then. o% F% P) ]. P
        if wen='1' then; U* x/ Z, K5 H% y$ n/ P. \; y
            wptr <= wptr + '1';9 `" P2 v( @/ U# l
        end if;
; |, ~9 V% W; G3 {, m; c    end if;' I8 O* n( G+ K, s( }
end process;7 f* n# k; r/ Y+ }5 f, o
1 S5 Y4 T8 ^- i5 O4 d2 z6 A
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?1 r+ R, q3 j# f2 n
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key- H! l, q4 O3 \7 {
1 q) P& w1 a4 X) {3 m( Q; S
Read buffer部分
" v- a0 U4 c( p+ H* a1 n5 @: Y* q+ \4 w3 z5 ~5 C3 {& w
--read_buffer
# }! x/ D( d- |# }# h4 dwith rptr(3 downto 0) select rdata <=
9 K) A1 o# Z8 p6 ]. Y) ]# v    fifo(0) when "0000",
# v2 \1 V9 |4 i) ~    fifo(1) when "0001",, M: D0 u* K9 }/ ^( d9 ?% j1 Q
    fifo(2) when "0010",5 H, h4 w. d( d: N: H
    fifo(3) when "0011",0 X$ a5 N* J% @" l) {, K% [, ]
    fifo(4) when "0100",$ O% a9 U" L; ^. P" u
    fifo(5) when "0101",
( U" I" w0 Z8 j9 @; c7 C! O    fifo(6) when "0110",6 J0 t  c' p6 P* R
    fifo(7) when "0111",
: [8 X4 I2 I% E! \- G    fifo(8) when "1000",3 p, G, k  ?  n% U  G- D
    fifo(9) when "1001",/ `* ^, Z! z# q2 H' `2 |
    fifo(10) when "1010",* B% G' I6 W7 c; B! s2 {
    fifo(11)when "1011",
. l, s+ K; @1 d( f0 i, j    fifo(12) when "1100",: ?( g. V* |0 }3 z0 A1 u
    fifo(13) when "1101",9 [. p9 A2 u: v& T6 i1 Y
    fifo(14) when "1110",5 z" O  S- _. V& o) [8 C, J
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分' u# w) C8 Y) {2 C  Q
! B0 ^- ~3 \# \0 M4 M8 K
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
5 [$ {  X% ?5 K4 \6 tbegin6 R+ g1 Z- U0 p( g( \) F
    if nSysRst='0' then
( E8 h. `/ r9 I. g/ G9 Q4 y        for i in 0 to 15 loop; g! A& x6 d5 A& K, s
            fifo(i) <= "00000000";  C1 k. K% r1 v) i* d- X2 ~4 h* K% F
        end loop;9 g! p8 ]+ K1 }/ q
    elsif wck'event and wck='1' then4 T. }3 M% i4 O& G. h) o5 _
        if wen='1' then
9 ]$ ^+ k8 w" C& O9 g, D- K            case wptr(3 downto 0) is) V5 P9 M- U+ i2 ?
                when "0000" => fifo(0) <=wdata;
$ f- R& Z' Z( Y  o: W% y7 @                when "0001" => fifo(1) <=wdata;7 w1 u1 R" B9 s4 r5 D
                when "0010" => fifo(2) <=wdata;) f0 l+ O: h# ~( I9 u8 A2 C& m
                when "0011" => fifo(3) <=wdata;
. K* u! I$ C1 S# a# [' G                when "0100" => fifo(4) <=wdata;& [+ W' ^3 _1 x/ x
                when "0101" => fifo(5) <=wdata;6 {; z2 L3 p  z/ S% \5 T
                when "0110" => fifo(6) <=wdata;6 n$ m( {6 Y# A% t- T' r0 m; D1 @
                when "0111" => fifo(7) <=wdata;% x3 m5 N: c7 Y$ t
                when "1000" => fifo(8) <=wdata;; D9 Z4 `! D: _! F# ?0 w
                when "1001" => fifo(9) <=wdata;% H- J$ {9 z% ?! V6 v- L
                when "1010" => fifo(10) <=wdata;
. q: T: l) ]% t% g                when "1011" => fifo(11) <=wdata;
  \0 N- H- j5 ]) f2 x* l                when "1100" => fifo(12) <=wdata;
5 w. t% J6 D# l1 X. n/ l; x                when "1101" => fifo(13) <=wdata;
3 r9 K# t$ f( Y9 ?                when "1110" => fifo(14) <=wdata;
, E7 L, f, u" N* K+ ]                when others  => fifo(15) <=wdata;3 g! }' k+ T/ `
            end case;
# @' s' \+ z) n        end if;
) g7 }: M* r, j' S0 ~- S7 t% N1 R    end if;; _; b' P" B8 n- W( j6 U
end process;
( g& O, N1 Y4 v; n8 U
" i2 v- E9 Z; Q# V3 ]! |[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分& M0 @( d, H, g9 @
我先做些假設$ G" c/ p6 B! ^/ g; y
1) /RD動作時狀態不能改變
( k% z8 x7 v, T2) wen動作時也不能改變狀態+ e) E4 G* _' l" X% w& f
如果只有這二個case的話以下這段code或許可行
- _0 u" z1 G) P" |2 J2 E& m
/ T6 N2 @& G2 r8 u" ]status:process(nSysRst, wck, wen, nrd, wptr, rptr)0 u" G% u; ]1 K  M! t( O
begin
$ X+ x1 v5 X( I; a# A    if nSysRst='0' then& g9 ~0 n2 M0 Z5 y3 O3 G
        full <= '0';  r' T) g1 _& N4 B- R' l
        empty <= '0';& ^$ t- m/ z) J0 I" c
        flag1 <= '0';
0 P8 D  X3 Q. K4 [+ o        flag4 <= '0';
& q' A; o: ~7 J  y4 `' R        flag8 <= '0';
8 K8 @+ m% U8 l2 `7 L9 b9 k) ?: j        flag14 <= '0';: l! o% |! H" s5 o# q
    elsif wck'event and wck='1' then
* q" L% E/ `' x        if wen='0' and nrd='1' then" X' v( n3 b8 |2 w2 X
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
# `' _/ \! A# x2 X            if wptr=rptr then empty<='1';  else empty<='0'  end if;
% B% u/ P% M, e4 B  e3 {/ S            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;- y: _: N! X& L
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;8 R* n2 e* J  g2 T
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
* \# R+ J' P( F+ @  U            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
) R- \+ t5 p0 T1 d8 r        end if;
: G3 W# P6 b( \6 o; S# A    end if;4 }3 b4 w+ B( D3 W: b
end process;7 c3 s0 M; m5 ~) M, n' }! [

  Q) V2 {$ A4 T[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
# D6 i  W+ ~+ \3 T  {  g& A( t9 w8 x% Y6 y0 k! K. q: E  j
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
4 _3 B8 F2 A8 C8 Y2 [
- r% N$ _1 M6 f( c1 r: u: j8 V將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論' g4 {3 [6 U% ?; U7 i

) I& X! @% A7 w6 E5 W1.4 X/ |/ i* @# @7 B" N& m1 ?; }
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"# B  p% \- s2 v2 k' f, |
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
' S& C: k& G# I( D8 R" F" U: K   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一- G5 h  Z2 m- `- |' w- ?
2.
# I0 A* a& T3 Y4 \  \   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高+ l: \8 }: Y2 B# X! N/ ^
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
+ L7 f( K0 v1 g. c   資料讀取週期RC最小280ns
: i( I2 {- u6 [; M/ _& |6 l0 G3.9 N: F" h6 O% _# z, ~% K7 v6 r$ B5 b
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期) f6 L! s& m' I9 D+ }; b
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講: z+ R0 g. }# K' B; z
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間% w4 T! q, g/ X% Q6 D
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了; @6 W( o: u( N! I" e+ F
3 L5 u# H9 k/ @& L
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
0 F" Q9 N6 o) d. t
" N( c% e" n5 F- t9 p; j7 p第三個問題還是clock rate的問題  X7 r6 o- ~1 D4 }* {4 r

: J2 Q4 s; h/ p! r# B2 b) {第一個問題留給別人回答好了...
: k4 m2 O, J; ^' Q% Y& w2~3問題的確是問題沒錯, 誰來接手一下呢?
; @% I& P  P7 }6 f
$ v$ t) d$ K' N5 g% j1 l$ z7 naddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
; D7 }& E1 T* u
+ ~) m2 m6 S* N7 E0 u! Z[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]# }$ k8 p# l/ {# O; C: o+ h( N6 `0 [
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]% b& T9 g2 m7 o. |# u0 q
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
  y' B# c8 u7 N: k" [& \& E  s2 L[4] Website of USC Asynchronous CAD/VSLI group. [link]
2 Q8 _+ h/ z' f( X0 X. x[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
, `9 o1 _# k% N) k/ E9 c5 P[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 6 u0 J0 J+ P  C! g4 k
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料! {& l; s8 ^* w, a; Q2 ~% l$ F  H
我會好好的找來研究看看) {, s2 Y4 x; o/ Q4 Z
5 T) f1 v( T+ f, k9 `; O( x5 T
我本身目前不是從事電子相關行業,不過對於
0 u& R9 ?& s8 a- fFPGA/CPLD,HDL,數位邏輯設計及單晶片等7 @$ I. d$ C7 r
都很有興趣,之所以要寫16550 code主要是想
% t- j4 h9 }5 B$ r: ?挑戰看看自己能不能寫的出來,不過似乎沒那麼容易- D6 l. f/ W4 C) m& c( g- E5 Y

( D* f6 C7 s: ]7 g( y& T! e5 KFIFO這部分我有上其他討論區問過,可是都沒人回覆
2 x2 q! |# P; N! i感謝版主願意跟我討論這個問題, Y0 F& H! L3 A- u2 Q
3 [7 k* B5 b* J- a' }5 K) G
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多% s  j' B0 I+ M/ F6 T
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
* ]7 a& U" a) W5 T7 B2 R不然的話就變成只有我們二個人在討論了...
7 |; m- Z5 z& M; `/ b" q
9 B  v9 ^/ _! [3 w0 h過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
: K8 e: g: s* u. V6 i- n最近想到一種架構,用來做FIFO不曉得可不可行
' p: F) _/ M  @  ^3 @如下圖所示7 u+ d1 l: u. m& l# u% `
& @2 {1 y; u0 q$ v$ z4 n  ~0 M
先就full,empty討論,trigger level不管! u& v* U. u9 L; g& S: ]
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
# H) h& c( ?/ `- F2 G9 o( x3 n& }, C4 F. i5 G
1.用額外bit(valid_bit)來指出register是否有資料寫入
% l# f/ @3 G6 e1 T: K3 E% A8 u  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
) O, ]  k# I) j& ?9 f- ~  當讀取FIFO,相對應的valid_bit會被清為0
/ w) A* W) N4 Z$ h8 F
9 p7 B$ p0 [  p- s2 X# v. z2.wptr及rptr用bin count
+ @6 j% Q% _! @: w4 f) p/ P
& y6 P8 Q( o2 r/ L3.full將所有valid_bit取and,empty將所有valid_bit取nor* R2 i, U9 i. ]1 V7 z5 E1 V+ F

- i& f, W, s: e4 `% O6 U$ G# Y; z8 n4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時) d+ U* ?* H6 P* O0 u
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
: `! V( X; [0 S6 Y  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
/ s8 P) c( M. @2 A) X: V0 n0 y. X/ o
9 r8 s5 I, Z" ~) a1 r  W$ {5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作$ C$ K% [' u0 ?) O! w
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
# o1 Y  u/ x  k9 q! t% A& G  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
. o5 f9 p) h& f+ }+ N" ^( Q, j; B  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
) c) O5 [5 b- J, p2 s: {! ^  個位置是空但被判定為已經滿了的狀況)0 j9 \7 a5 }) y2 v# p$ f

* Z8 x3 }/ o8 T0 V1 g4 G以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意% A* b0 |# z1 U+ ?
  S  b+ P2 c$ y" g2 ^" z8 a
如果不管coding style的話, 這個想法很好+ Y  z5 Q% h- Y4 w& V9 {

- W1 k. ?9 C: Y% s& f相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.) n0 v" u8 l/ L4 G- g6 Z. N$ ^
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.8 F3 v5 Z0 l4 T$ z: J
anyway, 互相交流吧.
  v# d5 ^- `2 @9 W9 j  w/ {$ x: Z5 d% e# [- B$ h4 \
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
2 l  @* }& m" O. v( T/ |3 x2 J我想到這個方法除了電路會比較大外還有其他缺點
* y* q( ~* N% c  a4 c, f3 S/ U* c5 ^; U$ W  U, \
1.不適合做成容量較大的FIFO* W% I  P3 L! J+ k8 O" s2 P
: w  P% }2 v' l9 @# N* H0 p$ a
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響2 W( H* Z) V3 T) r) D- \* n
, W# j. T5 E2 M3 ]
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣, c9 Z% T  @& V- g" w
   會有較長的延遲時間,所以速度被拖慢了5 b% ^9 c' W' B. R+ c" J4 M7 |" o

" L4 }6 e% }  b9 Q謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO+ Y/ X; `/ ]5 @) U) o- k+ s
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大0 l4 ]% s' e! `" B
但是做ASIC時你會發現其實很小的
: s0 {: \! d) c6 Y- s6 v" L8 J
3 {8 _- h# \) o3 K
, @9 Z# _  J0 x1 K: L2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
) X7 k1 ?2 }& |4 E: {  C. ]! C2 H這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
( Z$ J$ k# W, g0 A3 d1 c. d3 u' P, ~: j# V: n) |" b% M
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
; [( C' n, `( S: C7 z0 D9 b相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
5 d2 w( J2 g3 d/ e1 [- P
& A" e" H7 O6 A. k) A/ U3 b$ k$ v& @- m/ p: e, C% ]
1.
' P8 l8 j3 f  L   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"! y3 L0 b6 q% r9 y5 U6 P
+ h5 |( S; N2 E2 C" O3 D! ]! _
   不了解這段話的意思,可以在進一步說明嗎; h$ E: P* F- s
: W( @" u5 b2 S' d3 Q5 U
2.
' k0 ]+ \0 C, W) e  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
# h# T) _7 h( n* Q( {$ d8 Z  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會/ G) m; \: T" x: O
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了7 Z$ G7 J) ]( ]' h( W* U
  請問有辦法評估亞穩態維持的時間嗎% c# T7 \  r* C% S" Q, q* g
  
" C: [* i/ h0 i# Q+ J0 r) @$ R# a謝謝
; J( r9 ?% Q% \2 B" F$ \$ h, F5 u5 k  E7 ^
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. 4 \, [& O, w5 C( o- E" i* a
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:! R& ?! Q( S. L/ I* u! x
empty = true if valid[WPTR-1]=false) Z; `1 B0 K. }6 y
full = true if valid[WPTR]=true
- N2 T$ n1 I) }, `! P: h可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
8 g1 ^7 I0 t7 l. f4 x
  _/ z% U# \: k: j/ W& ^2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
" @4 O8 M1 b3 c! U關於 metastate2 v. z# J7 U& d1 @+ o
請問如果一個d-ff假設 clock頻率1 hz) _) s) k& t  u7 k. [' V, ?. L, o
如果剛好發生metastate,metastate這個狀態
; Y+ f1 C$ a; @6 P2 D有沒有可能有機會維持1秒的時間長度呢
8 |, |6 E* r# Q% h' x5 `- Z5 ]& }* j' _' U0 `  j" Y' S
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
+ A6 C4 j' U) Y! l: A! ^
. `: w9 u( p: X7 O8 n& t7 M/ Y, Dmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-2 02:08 AM , Processed in 0.161521 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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