Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...0 m1 r6 A8 ^7 k2 I

9 i3 ]3 H* L0 ]6 W4 g+ Q; h這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
3 ]( D3 o" p8 ~: X* U* p* T% w1 n4 p4 o8 b
那些信號也先估且如我假設一般/ \0 [4 b" e6 B7 U$ M5 p
wen是RX收到一筆完整的資料時所送出來的! C1 n2 o+ m. C
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
- Q* _) K& ~( M  E- r' Z! m3 F; ~prptr:process(nSysRst, nrd)  V) p4 e! q% H0 L+ X7 s
begin
5 J/ f% D$ K+ q    if nSysRst='0' then
* I( p1 f0 _4 \- ]+ y: I9 X  ]        rptr <= "00000";
+ c/ _0 n; b" _6 t  S# m    elsif nrd'event and nrd='1' then
7 y5 s5 p# C# n( Z- v2 R2 a        rptr <= rptr + '1';
6 `$ Y) z, j1 H- E    end if;
1 T6 I. {" y  T8 mend process;: _, c2 i5 t1 o) L. A
( u# z, q7 ^6 ^/ F
pwptr:process(nSysRst, wck, wen)6 `; ^; A4 n) |' [% h0 M- n& T
begin$ c5 a2 j8 h, s/ e; X
    if nSysRst='0' then/ c4 q7 T  t) ~( D1 I; {
        wptr <= "00000";
" X/ Z! `: n  A- w0 o7 ^2 C) d    elsif wck'event and wck='1' then: J$ g9 r' J$ |
        if wen='1' then: n8 Z* e( N( z" J) |5 l3 U
            wptr <= wptr + '1';* o) L/ g& g, e  O
        end if;; s1 f3 R' r* b! d
    end if;# R- N/ Z3 A: X
end process;
9 k% l/ r; m* _9 e2 _" u3 l+ r* k& E0 E3 r" n
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
/ V) \3 i% C' A6 `/ {) r你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key. S5 g, g9 J3 C# M8 z
5 W3 I3 @. Z, X7 U
Read buffer部分4 `, w8 _) G+ k6 D" V8 b7 _+ f9 \

4 F$ z( `" `- B! K; s8 ]! M3 \/ \--read_buffer" r0 I; ~% \5 y4 O. W. }, o$ i3 U/ h
with rptr(3 downto 0) select rdata <=1 W- n; u% I( o/ Z- R' u" U3 v
    fifo(0) when "0000",
: V5 y7 N2 _3 B: q& b    fifo(1) when "0001",
8 C2 o2 e& z4 z9 u9 F2 P    fifo(2) when "0010",2 v% Z9 b( J: d
    fifo(3) when "0011",
+ O, W1 b& l. w. w7 ^' P. c( E    fifo(4) when "0100",
3 u/ C5 k: u; ^% g    fifo(5) when "0101",* m3 R' W/ z+ l8 T
    fifo(6) when "0110",
+ I( r& f( p$ {) b" ~6 A+ @/ Y    fifo(7) when "0111",' y* V) G4 i% T: X- d
    fifo(8) when "1000",
) [# i$ _/ z+ ~! f7 t$ A7 j    fifo(9) when "1001",2 v7 i1 }/ \8 q# t0 Q+ e# v
    fifo(10) when "1010",& K) \7 |: ]$ H# V
    fifo(11)when "1011",. A- p; s* i( K% T/ q2 ]
    fifo(12) when "1100",! Z: _& ~% g& V: ^
    fifo(13) when "1101",# r+ y6 _: w; h0 s# o" q+ e
    fifo(14) when "1110",- P3 }& ]! Q: e5 x2 K. J
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
1 y+ ?! O9 L/ V% L+ F* x6 d# l5 E8 X0 O8 g3 K
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
1 s2 O! ]! `6 u& f% ^! E# q% @begin
. `- R0 Y5 ]! m! F3 E" u    if nSysRst='0' then
0 {8 ^% e- a& |" g  B8 A2 C9 t        for i in 0 to 15 loop# X6 U- F: r0 K% P, B5 h* _
            fifo(i) <= "00000000";
% k' a6 P) T4 R7 `- @/ t        end loop;/ O: _; A' ~6 |5 ?' \+ k$ ?# W( r
    elsif wck'event and wck='1' then
0 k& A. b# l6 {( I9 e        if wen='1' then* f9 T7 f5 Y/ p5 L0 S
            case wptr(3 downto 0) is1 I+ p; w; E2 T3 g2 s
                when "0000" => fifo(0) <=wdata;8 V! y- Q, S2 E* B4 a
                when "0001" => fifo(1) <=wdata;! A& a2 a4 E7 i
                when "0010" => fifo(2) <=wdata;
* H( F; u4 P/ k) I                when "0011" => fifo(3) <=wdata;
: y: t. w- _" |2 B/ v* x9 J) I0 Z                when "0100" => fifo(4) <=wdata;( |  q7 P1 \' [8 a* @% C: [" v
                when "0101" => fifo(5) <=wdata;
: n2 {( W; `7 u: f* \                when "0110" => fifo(6) <=wdata;
9 r# w7 ~: x2 A- e1 o8 Y4 G. d                when "0111" => fifo(7) <=wdata;
! W7 J8 B* {$ [                when "1000" => fifo(8) <=wdata;
8 \+ K/ s  w6 G1 Y' Y; l5 k                when "1001" => fifo(9) <=wdata;. p% H0 R5 U, [; {% o
                when "1010" => fifo(10) <=wdata;
: A. d2 G, Y$ X0 [2 F9 R                when "1011" => fifo(11) <=wdata;
3 k2 t6 I4 j) T                when "1100" => fifo(12) <=wdata;/ c! s7 G0 \- T* r, l4 W
                when "1101" => fifo(13) <=wdata;- k' w; I1 T; e; h! l
                when "1110" => fifo(14) <=wdata;
" |5 l1 }7 U( T( H9 Q                when others  => fifo(15) <=wdata;9 `! O9 K/ t. R) E' f9 r3 Y8 }, U  k: S
            end case;
( R) \9 X- B3 h) p% ]7 O        end if;- L4 w& x7 Y7 `2 Z- s: @! Z
    end if;2 m' K) g- p  m) y6 ?! i5 x
end process;
1 @( I. S, c( X( l9 }
5 J+ X- Q! J, }9 x3 U1 z[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
2 a  c! t$ [: y% L: i# N4 }我先做些假設  f' a0 Z6 J4 A9 m$ t
1) /RD動作時狀態不能改變
) }8 E; Z2 X/ s- i5 @8 T/ d2) wen動作時也不能改變狀態$ v. b7 G7 @5 I6 r8 i. e- A
如果只有這二個case的話以下這段code或許可行( A5 I2 f9 ^, L  o8 t3 C

0 H7 N1 M1 f  Z8 o  }& rstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
9 G; p. m( v/ R4 w' v0 i; ?* Y3 o  W  q. jbegin
" B; c/ X$ e8 }5 l" b% A2 D    if nSysRst='0' then8 u* W8 o: c6 R8 K3 u' z4 D
        full <= '0';' |& j: P, M+ \+ ?3 P+ P. {
        empty <= '0';
. N! S7 G) E5 M: l" U7 ^        flag1 <= '0';
' r% f( T. d/ C: D. Z' y        flag4 <= '0';
9 q% z9 S8 i: G: N9 ?0 U        flag8 <= '0';& k1 l5 [9 G  l; R0 S3 b2 o
        flag14 <= '0';3 @! Q) ~5 x  a8 @( b' H8 n( L' e
    elsif wck'event and wck='1' then+ L3 g6 f8 s8 ?- {+ c+ N/ [
        if wen='0' and nrd='1' then/ a1 I) I& i* `# d  Q+ K  ?
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;1 [& \. d; j/ H2 U3 ^
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
( G+ d$ L, L+ N' z            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;  q8 V' R& N$ R& T0 x5 M* |% j
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
+ `5 M3 \0 h+ K4 n! F6 Z            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
. D* v/ A1 u5 |! S' N' |            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;9 H# r2 [: s& k+ @
        end if;) P# {9 U( u, q. u$ ^1 w
    end if;
7 c& K3 u7 ~7 yend process;2 S1 A4 n& z! f" [

0 K1 R! l2 Y8 f" M! _+ U7 C# E( F[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
8 c7 C4 z! t9 ~$ s5 i% @! E. W
. U8 C: Z2 ]* y' Y( Z好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例7 ?2 x2 a4 W7 ^$ f
# q" B9 c9 Z( q9 ?
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論( E& ^- P; H4 T# \2 E

4 a  H: M9 v3 J5 ?3 u1.
% a- @1 `3 q# X9 t   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
9 _1 q3 L" Y. r* ^; T' @; W   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生7 c' w- s+ z9 c3 Y7 r- q( W
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
$ ]  W" |; o3 e2.* _  b7 C+ V# S* M
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高! V1 P1 r; R) H, z
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
. a$ D3 R6 k. a5 c   資料讀取週期RC最小280ns/ z/ n. F! J" }% E* h2 Z: k
3.
: E6 D& w  T3 Q   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
1 }. W+ ^% A$ u( ?   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
6 B2 @' C  R/ u+ Q( b& h   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間2 T/ n, E3 I4 F; w, @" P: X- J
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
# p+ J; P, V- X& _
2 S5 ]2 C8 U+ r" @2 j7 H" F! [" k1 B第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
+ r4 c# u4 {, H( l* |( @" n
' X' X6 D6 U, Z5 O6 [第三個問題還是clock rate的問題
! o" I/ ?- _8 ?2 _3 a+ q
" q: n' y. D$ l4 x8 F& e+ h9 V0 Y第一個問題留給別人回答好了...9 k/ r8 Q; P) [$ h  R# {8 O9 `; A
2~3問題的確是問題沒錯, 誰來接手一下呢?
  s: A4 N! a+ f9 x4 W9 k
8 N0 A' E0 S+ w3 L6 oaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!, ]$ K" ]* B4 L" [% e7 O
0 J: ]  o2 d" L' X1 A, b
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]# f& _% f+ H* r
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]4 W& ]2 h3 g* p! W' a4 ~5 s
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.' T8 K" A; f8 ~0 m9 N& k4 W
[4] Website of USC Asynchronous CAD/VSLI group. [link]
( p" D; p1 }/ i# c; A" x# X' K[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]% \- `7 X8 M$ w& Q# x' o
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
2 @7 ^6 }2 c5 X. u" u# h4 [$ }[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, ~/ Z. I5 e% J( }  Q; P我會好好的找來研究看看
9 p3 S- n$ m$ C, N0 I+ e9 A
+ |- Z! a" ^# L& W我本身目前不是從事電子相關行業,不過對於
, Z  A, ^9 c7 g3 _, t  \8 jFPGA/CPLD,HDL,數位邏輯設計及單晶片等6 p, _9 U( Q9 D) {' H
都很有興趣,之所以要寫16550 code主要是想
3 v  K7 s$ z9 [挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
1 U$ ^$ K- }0 i9 N& H9 O+ g, G: G  C( C( v/ i# k; ^
FIFO這部分我有上其他討論區問過,可是都沒人回覆) \% e- X( Y- K! G: n3 E
感謝版主願意跟我討論這個問題
! S& p' H. u& e2 I
; N' p. g, v" ~) d4 h* o再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多% {  B1 Y, R: ?
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見1 h  {, y& V, {- `: |$ d
不然的話就變成只有我們二個人在討論了...- ]& @+ m! H+ g2 }

* V8 y& M: |# I* I+ W2 V4 Q0 i' @過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好: n( ]! H% k/ f' p- b
最近想到一種架構,用來做FIFO不曉得可不可行# M# D4 Q& l3 h# W1 m6 C
如下圖所示
: s3 s; ]7 G* S+ C
* c7 b  n2 o# K% i* k先就full,empty討論,trigger level不管
& V7 h$ i; k& r' Q  C0 ]讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
  g3 n3 a4 o4 L9 K  @$ \6 x; P: {6 o) e& E  E. T* a
1.用額外bit(valid_bit)來指出register是否有資料寫入/ ~7 `0 [# t6 z
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1; ?% P$ I- L6 r' x" r# l/ b$ _
  當讀取FIFO,相對應的valid_bit會被清為08 ]; K, i1 i% l

8 }: P; A% l. S3 q1 ?2.wptr及rptr用bin count' i  y& J3 d+ U: D1 H
. q4 Y% {+ a0 F9 _' @0 m* Z
3.full將所有valid_bit取and,empty將所有valid_bit取nor4 N1 [* b) N1 o* P! C
- \. {8 C: W0 H4 F
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時- X! T0 K0 B8 G9 g5 {, z
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case- v( t+ H2 x% k! Z2 S! p* J
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) ^# B, N% B* S, D. j& v; A# p; x, O/ W5 I/ o& j; ?! c0 X
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作0 z; J9 ]$ z! @: ]- r* Z
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
  B7 ~' E; L! H; Q3 D2 b  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接" S0 g8 t) k3 L+ ]5 n. k" r: [- _
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
- `3 Z2 M. i, B$ K! l) {  個位置是空但被判定為已經滿了的狀況)4 Y5 e- y7 P% L( m' s! c0 }

& a2 j3 d8 O5 u, P以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意# |$ s' u9 \$ ~5 N) A

' r' `+ o" l# o! ]- e4 C  [; W如果不管coding style的話, 這個想法很好( y8 X7 J' C$ X" x
- d& v# J( m' H. R% w" p
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
7 r; x6 p; X0 a跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.! ?6 G& h9 @) C- f! c- d
anyway, 互相交流吧.
+ A$ {3 t& `% R# E1 E: k* q% H7 v7 {) M0 X# g  t0 T& R
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
$ S3 l6 y0 I- [9 f: S9 V3 o我想到這個方法除了電路會比較大外還有其他缺點7 ~! W7 W! a( \( c0 K, [: P. q, }
2 |. F! L/ t0 T& ?, v9 ~1 g/ j) ~
1.不適合做成容量較大的FIFO7 u; ^7 l& o; Q3 A- H, G6 n

% r# y# Y" D' j' J) k+ o2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響, `  _9 i6 A, E+ S& v- s
& U' o3 R, g; E0 `  U0 r
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣8 }4 U! a8 o0 ?- l6 o, m+ ?  ]* ]
   會有較長的延遲時間,所以速度被拖慢了
: L1 ]/ Q% }$ O+ A# f
' I$ S  J/ f) v/ T3 v. }謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO! I0 U: ?1 B: ~
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大) E, f4 G# Y$ s0 G& v1 ~
但是做ASIC時你會發現其實很小的
! I& f4 W9 \6 z9 T, G4 c# \$ {7 M8 V7 n5 M1 v) p! U4 W

4 Q) M: F, R; O8 `2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響3 t) _5 b9 s- c, ]" c, u! W  L9 x
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
2 f; J3 z: ^+ y: J2 p; Z( H- y
; m3 s- G$ A$ X  S. p: s3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了- |) |9 Q/ B2 x/ A  e
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
/ r# ^, c1 L- p# ]$ W3 }; h  c
! |3 ^" S$ p3 C3 D* @( f; ?7 V
1.' o- P# t+ Y6 r! s5 v. J
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
6 L9 O3 Z  X' U4 \) u$ e$ u, F7 W, [% Z: x7 j! _% b
   不了解這段話的意思,可以在進一步說明嗎3 o3 p' b5 f( u  H( T: c! A
$ }) L! ~6 t$ S( e* b. |
2.1 ?6 U3 m! t4 p3 V! ~/ t0 d
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
2 o4 b6 c+ C& f8 C  C( c0 f  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會. ?5 A5 N: m2 q3 S( E
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
: \' j% v7 p+ ]$ E  m  請問有辦法評估亞穩態維持的時間嗎. V" \1 Z) r* `& r0 V- y
  * X( ~6 I$ `' h0 d" H
謝謝" E  B* Z& E/ A3 e' S7 o
& H; {- m% M- y8 _6 Z" r
[ 本帖最後由 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& W5 T' J( K$ I$ D我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:& j( F/ Q( w, c8 V. e( M2 N
empty = true if valid[WPTR-1]=false$ c) V$ g) G4 F/ o
full = true if valid[WPTR]=true7 ], w, g& ^2 Q0 |; }) l: R2 Y2 x
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
6 r: `0 E% W: L: R. r3 x/ A
  x, O% P3 b- d# i3 C. r2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
* U/ R, e; d) @8 T) J, Y+ J關於 metastate
4 H% s6 ]: O, v8 E' O# k. O( h請問如果一個d-ff假設 clock頻率1 hz9 Q' L3 z: {% F" D& b
如果剛好發生metastate,metastate這個狀態; d2 y& W5 t1 e  @7 O
有沒有可能有機會維持1秒的時間長度呢
  j  v" y' Y7 b: z5 |! E, U' }. N8 U. F/ e* A1 @4 Y/ ^
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
- v& N* V) w! C7 ^! h
0 o! {+ }, N6 m8 imetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-23 05:36 AM , Processed in 0.131017 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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