Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了.../ o- V3 p. J( Q% Z
& d" ^9 ]; P! Y3 U& M) H- ]2 z
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多; t+ F+ c1 Z) A
+ I6 d3 w8 @* `+ Y
那些信號也先估且如我假設一般
% N6 S% M* J. p, zwen是RX收到一筆完整的資料時所送出來的: I% X) S$ `. A/ G+ M
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
5 o" d8 R/ z- {, j/ N1 @8 Wprptr:process(nSysRst, nrd)
1 y/ @; w( E' @! d1 ]2 d, Mbegin" K7 h) ?( h. J; ~; Y1 p+ P9 @
    if nSysRst='0' then7 ?$ b  W3 W, I! i8 o* ~& w; f
        rptr <= "00000";
* J, L/ J5 h, \. B) w% Q( _    elsif nrd'event and nrd='1' then0 }' g7 Q; y( V
        rptr <= rptr + '1';$ X  f2 W# X, e0 e
    end if;+ F1 e0 @' [2 J! i" v
end process;
# o( l# }2 h1 b, n) y' H, }: _/ o9 @: ^# i1 ]
pwptr:process(nSysRst, wck, wen)
6 D/ x4 m  w  P8 X8 q( v- lbegin
  n) C% ^' i2 \/ u: y6 Z+ `    if nSysRst='0' then
4 J: {* N$ m/ p        wptr <= "00000";& u) Q5 {) L0 q1 o0 J7 t
    elsif wck'event and wck='1' then2 g9 a$ u7 p( V& G" M3 c
        if wen='1' then- }9 t, }% V1 x+ ], h
            wptr <= wptr + '1';6 _* y; ]) s8 j4 f: b1 g1 p
        end if;. ]1 j0 r4 ^7 P, ^* o1 Y$ W: t
    end if;
( ~1 N! P7 g: w8 _6 G( n* j! \end process;! G3 N: W. c6 E
) j/ P: ]: w' o2 F+ x$ j" u
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?/ Q7 h" ^( V2 M* W/ o
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key+ d( k6 C/ d$ [/ z) h

5 M; F. N! C* d3 eRead buffer部分) G+ L8 P2 [" W
- ?! m3 V% R! R9 G" `/ P
--read_buffer
1 r6 I) |2 L( xwith rptr(3 downto 0) select rdata <=) G$ f, P$ ]7 J' A) \. W, r5 c9 H
    fifo(0) when "0000",+ `+ Y! T$ q. n; K) L5 {
    fifo(1) when "0001",9 c) v* l- W3 T  o* C) m) m; G* p9 K
    fifo(2) when "0010",
" R. E4 D. }0 @; l# R    fifo(3) when "0011",
1 a5 v; p1 r; Y* [    fifo(4) when "0100"," n4 i% S! M" H2 U
    fifo(5) when "0101",
$ R; a' c7 J( G# t# \  ~& j    fifo(6) when "0110",% k! N1 l6 h6 y
    fifo(7) when "0111",# P0 p5 V$ P. C8 ~% S$ H/ R6 P
    fifo(8) when "1000",% d  o9 P7 e) E' l- z" O3 \/ y: c
    fifo(9) when "1001",
- [5 t9 K8 }% `8 l% k    fifo(10) when "1010",' K2 C3 p8 D. z" |% `/ D7 w& r
    fifo(11)when "1011",
5 L* ^! F$ |8 q$ y9 @4 B    fifo(12) when "1100",4 W5 F# l( P+ M) a% e. ]' r
    fifo(13) when "1101",; X. Y# f+ |( e- v6 |% ^# |/ z
    fifo(14) when "1110",
0 O2 \! ?' Z% J: W  x1 ^% K    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
9 U- O0 r' F: c: S. y/ L
( E% O% n! P# H5 gwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)! U) D0 _8 x/ l: L& c8 @1 d; c; {
begin. B2 L9 i, _( v
    if nSysRst='0' then
! }' N# L  z/ Y. T        for i in 0 to 15 loop
  h' v2 n& ^, S  }            fifo(i) <= "00000000";
+ u' o& o: |% v2 i/ T, O* \        end loop;. \# B# a0 ?$ C- B; O9 |) |# d8 Y6 y
    elsif wck'event and wck='1' then0 C( i8 c  ?  {( p
        if wen='1' then
; ~8 e, n, g# O& R            case wptr(3 downto 0) is
; f' |+ {* z, K. o4 v                when "0000" => fifo(0) <=wdata;1 v  `. s5 y3 ?2 F2 U2 o* e' V! S+ j7 C
                when "0001" => fifo(1) <=wdata;  y* L4 I* I# r
                when "0010" => fifo(2) <=wdata;" Z0 x4 p9 Z: G4 h1 b
                when "0011" => fifo(3) <=wdata;9 i  O! q0 ]. g; }% e
                when "0100" => fifo(4) <=wdata;  b8 I$ l4 V$ `! d
                when "0101" => fifo(5) <=wdata;! O+ A7 c; K5 f, b' S* S
                when "0110" => fifo(6) <=wdata;% f, j4 b. U2 O$ ?
                when "0111" => fifo(7) <=wdata;+ [* A6 {5 I  W0 n. d9 c. C7 \
                when "1000" => fifo(8) <=wdata;
# Q1 D; S" n& }% r6 c7 Y+ J                when "1001" => fifo(9) <=wdata;
7 q- i9 K+ F3 ]% q& R                when "1010" => fifo(10) <=wdata;; t8 {  T" W% O
                when "1011" => fifo(11) <=wdata;8 e/ f  z' i* E9 q( P
                when "1100" => fifo(12) <=wdata;
9 O. l- G0 f( h/ A3 ]) n                when "1101" => fifo(13) <=wdata;- u, J- K  ?$ ^. f% ?
                when "1110" => fifo(14) <=wdata;! v- D8 a& e" y" x# E
                when others  => fifo(15) <=wdata;
8 |9 h5 m" A5 N& {            end case;+ Y4 X( p) u0 J3 J: v7 D1 D* }. G( T
        end if;4 }% ^. p. q2 j7 q- \
    end if;, e% f! Q% L0 i/ T" f4 S& P
end process;. f, Q) R9 M3 M. [5 {- L* `2 Z0 i

! p: A: X" Y( V+ L2 W  R[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分6 q; |! H9 Y! M: c$ J. Z
我先做些假設
3 D( v) p3 D  h$ E3 z, [4 ^1) /RD動作時狀態不能改變! R: r; n. [1 U! ^( q$ p* Z& C
2) wen動作時也不能改變狀態& F0 i; x4 K" g! U9 J& _4 j+ {
如果只有這二個case的話以下這段code或許可行
: \' P" k- N6 _8 }# g% ~) l" i  U
) c6 v) }7 @  Q! n* [( x- @( c4 g& gstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)  X  e; D5 q& z
begin
( i* e- n* h/ J4 q2 U* }* n7 L    if nSysRst='0' then
4 Q7 ?0 R9 b1 f        full <= '0';6 s$ r7 H7 J+ z: c4 o5 p# ]
        empty <= '0';
& [4 `5 h8 w! B        flag1 <= '0';% Q3 M8 M# e0 Z; W2 ~4 X" V9 N5 j
        flag4 <= '0';1 H0 J* w" b1 J! R
        flag8 <= '0';
" s+ U  d- ?7 b1 \" I2 ]/ Q        flag14 <= '0';
/ w1 ]( L" A+ A6 }3 ^! n    elsif wck'event and wck='1' then
- g" l  x9 }3 }- O: b& y! T        if wen='0' and nrd='1' then
4 [1 O( B+ G% E  P& m            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;' h: }! X  I  z( w  y, J
            if wptr=rptr then empty<='1';  else empty<='0'  end if;% a/ a# L1 C: G5 ?
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;) S7 u" a; T! ~7 ^" `" W$ {; Z6 g
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;) T* |0 U; M; K$ r+ @! C+ @
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;$ v2 J2 n; h7 n5 S$ C/ B
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
: u3 G9 q) W' j8 y        end if;
" _/ ~! {( a% N5 c    end if;
2 r+ Y" [0 w+ a* t9 F" R2 k  a: Qend process;
6 ^* M4 p" o8 u: M! |' E" `; f" b2 J) V& S9 p0 P. Y
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
/ b' S+ p0 p& f! F! w
* {% c- K; i% j! S  |8 |. J+ N好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
8 b' D# x1 o3 \+ m+ {, \
, N4 [8 `# L0 f4 o9 j6 G, w! a+ E將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論2 T) g' z; C2 i
! f+ t! ~- g0 F
1./ f# }5 X- w; g$ D
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"' e: p2 _5 ~. T6 H/ b% F- ]/ W
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生$ n# D# \- U% k5 T% v
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一3 J5 b: o& v3 m# K, u9 A4 M6 v/ o
2.
. s. y) F( e2 W; \9 u" K! m+ F   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高* e  y& P2 c' F
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
3 h8 P6 M7 G7 t   資料讀取週期RC最小280ns" h* C( C& V! v- S
3.; D3 |3 _! G% w2 ]
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
2 @$ n& K; _4 N$ C   小小於wck週期的case,會有問題,以trigger level造成的INTR來講; t+ t% D8 }0 F; o: v/ {% U
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間7 H/ h9 }* \; X5 `! i, u
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了+ A7 M! z4 A) d

: m" ^# Y" y5 `) {) W4 B6 {第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了+ q2 e0 h3 D& o" W& |& U1 ?+ t
' q1 a' i7 }1 v5 a
第三個問題還是clock rate的問題2 D, j$ X+ \  U- N$ z' @

7 ]3 X$ B1 X. T2 `1 M* u: K; g% \第一個問題留給別人回答好了...% K! X* ], V: Q
2~3問題的確是問題沒錯, 誰來接手一下呢?
" h) U# N; ~+ {+ _9 W3 ?8 `7 Z9 v% `! _
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
6 v7 |, j9 `: ?/ m. c# G% H+ @2 J' M4 S: g; x/ o
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]& S$ o& e. ~0 Z, f/ S
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
, `: p" Y, N$ i: F0 I, V$ \[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
, h5 X5 e" _2 ~% l' X! B[4] Website of USC Asynchronous CAD/VSLI group. [link]+ o3 ?9 i, x1 |/ H: E
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]9 T$ B6 }' m% p# v
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 7 Z& d2 R; e/ h6 J
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料' Z8 Q" K  E5 z5 u: S# D- G& G1 D# s
我會好好的找來研究看看  z! U" I) _9 Q, G: h

/ S4 l9 _5 r8 F8 V9 x我本身目前不是從事電子相關行業,不過對於0 S  m3 |+ G. V9 ]0 d: ?, h
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
3 i) g8 }8 m: O* b, @  n' J都很有興趣,之所以要寫16550 code主要是想& I5 z5 f3 {) s2 H( q( X
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
" ~. U9 y2 r4 \5 b' \, [1 {. ]# b; W! R( A; h. _
FIFO這部分我有上其他討論區問過,可是都沒人回覆( [9 |1 R% R! f, R- Q
感謝版主願意跟我討論這個問題! G* {. N* A% L2 h* K* U# Q' @7 W
6 z# k$ [& e$ c) ~' j
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
5 t6 B: z" j2 N不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
. v8 ~/ q1 r9 Y$ b# J8 q5 i不然的話就變成只有我們二個人在討論了...
; v: j) J! K; c" L
0 C. ^5 `) f& h/ [過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
# h4 X" v  Q3 M最近想到一種架構,用來做FIFO不曉得可不可行- u7 r+ [5 p7 Q+ O" n$ o* Q  p
如下圖所示0 S2 ~* X/ M2 j3 n4 G, K
5 g3 D% Y/ D9 _6 T& Y) r
先就full,empty討論,trigger level不管
$ C% x; i. A1 p9 s1 B/ `" V讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間0 g( _" K' x; q2 e

* T, K& w1 J) D7 H& V6 L1.用額外bit(valid_bit)來指出register是否有資料寫入  S* G, C9 p* M7 n
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
( ~1 x) z2 B$ G( o- M$ s. X  當讀取FIFO,相對應的valid_bit會被清為0
* `8 |/ O2 U8 U6 G1 C7 s8 |! Z& U- j8 o+ e; V# {: {2 @0 l2 P
2.wptr及rptr用bin count
, E0 D! j# p0 y. Q
* O/ l6 T3 I/ X% e- X3.full將所有valid_bit取and,empty將所有valid_bit取nor6 r; Z5 c& m& v% ?/ U- E
$ S, G* H' A- U( y6 b9 C
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時" w1 d. I9 m* \# f" e
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case' D6 x" l; w7 M- W% S8 ^
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已+ O  i7 W) `% L! u+ P3 H4 Y6 y

6 t. Y/ S7 k* E, U5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
# }) Q2 T- x' g$ }0 ?5 j- ]: u4 @  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
2 w2 j4 Q. B" {1 S8 u  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
; O+ R4 f! q5 u5 M& B0 d  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一( [% @3 ?  v* s; h2 X  T  |
  個位置是空但被判定為已經滿了的狀況)' F, h8 J- i7 {6 E! y# P) l' c5 F

! _/ `6 b0 v5 ~. k& O( j1 S- o以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
0 v2 f' X$ G8 q& W# ]$ p7 B
5 g0 J" D$ z3 l如果不管coding style的話, 這個想法很好
, v$ u0 m' S2 t6 y
) X% s: _! N8 Q! C相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.  J5 S8 m+ h! i
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.! [6 U7 V# {: l
anyway, 互相交流吧.; k7 S: B9 i  z3 O( M8 z
2 V: C1 \- \3 w. k# C4 t
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好+ S- Y; {7 M3 v8 v( k
我想到這個方法除了電路會比較大外還有其他缺點' n! V2 ^6 b( u/ o9 l6 d

: r1 e+ e6 j7 Y% [- V$ @1 `5 T( [1.不適合做成容量較大的FIFO
! ~0 Z2 a) ?' I1 [+ u+ O1 b0 H' r6 `. r4 N5 C4 m/ H
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
) R) c1 R0 r7 N3 I, S. V; w4 r. n
) j' ?% v( a  K, P' D; G0 W' J' S3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣. `3 r) ]+ _8 @
   會有較長的延遲時間,所以速度被拖慢了  q* G" z0 s8 p) T0 L( J

2 V9 A. C$ Y, j6 [5 A" d謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
) J4 L% j1 l  ^1 j) D我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大% t' Y9 G7 ~$ m0 W. b
但是做ASIC時你會發現其實很小的4 J$ U8 _& N, R) I1 }

; p* K8 j1 T& C4 o
: m* l* ~9 y6 H) P5 _5 w- C2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
% U8 R; M3 i5 d; B4 K這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了2 b5 D- {' M- A, f2 a7 W- K2 D

) r& {0 i7 v6 ^# s4 M' U# `3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了! T( |* ?) p; M/ f1 I
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
) r8 {' E9 T! r/ R% a& [
+ D: R  R+ g  _$ V: O+ L3 X! j; O6 ~6 _% b$ f% T/ @" Q
1.! Q) Y$ ~8 u/ t( z3 c- T  b5 v
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"# U2 n1 E# z. S0 C9 Y- v' c
7 x* V) ?; B6 R$ v* l6 u
   不了解這段話的意思,可以在進一步說明嗎
; }- ^  Y- E0 g  D. H; n! S2 K- ?
4 d' |" @1 X% U; s! m9 B2.( j% T; p7 N: }7 l/ c
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
, m9 B5 a' P5 s- L  u5 G& v  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
5 ]# }/ \, y3 P; L. m- O0 W& ]+ K  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
7 |6 A4 i, w. v" F9 i  請問有辦法評估亞穩態維持的時間嗎
2 Q5 ~( w5 c' ]4 u  
/ o& N1 U7 M4 X/ a" E9 ?% ]9 |謝謝% s+ B  @( \5 }' c/ G0 [

' R8 b2 g2 H3 t3 J" z, M5 S[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. 3 a% E: ^3 E; P! U4 L
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:% W9 _+ a+ V* Z. J4 `* N
empty = true if valid[WPTR-1]=false
$ R; P" L0 N# T# u6 u# \full = true if valid[WPTR]=true( E, S2 B2 Z7 o1 B. Y- f* a' t
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已, F. D! j6 e1 u: J9 q- b9 c
! G' l" O( }% ~/ P3 u7 c
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好! M( x: c& c% o- P- q, c$ N
關於 metastate: w9 w5 {. a3 Q1 i3 J- e
請問如果一個d-ff假設 clock頻率1 hz
7 |- L( z! L! B如果剛好發生metastate,metastate這個狀態
! {! m" x+ i: z6 n8 J9 A7 s' E有沒有可能有機會維持1秒的時間長度呢
! e0 g, Y, t3 |: T* E) g. K& ~6 a
; l( k( i2 {, X" Q0 l0 P謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
" ?6 o& s' u8 H, o
: L. _; h. W5 H' A  `: i8 emetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-4 11:21 AM , Processed in 0.124007 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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