Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
+ \# G( W, b; E" i- u8 d# m+ j$ V% q9 x) G6 Z, x, y
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
0 `( ^- }' V& V# h( v: o  [2 t
1 @) }% k- S; u/ _( p# B: N那些信號也先估且如我假設一般
' o) ~4 V. f4 }: t2 }4 i- G1 n6 Dwen是RX收到一筆完整的資料時所送出來的+ s7 \+ F: G4 v( W$ x# s9 [) m
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)) X" o, ?. X# c/ w" G$ l* j
prptr:process(nSysRst, nrd)
2 a% K2 a2 K. xbegin; z; A* u  d. t% w+ m; F& W
    if nSysRst='0' then: l6 b- S& N4 Z3 G9 D8 \7 ]
        rptr <= "00000";8 R3 ^+ j6 E( M
    elsif nrd'event and nrd='1' then
4 g" Q! C5 C4 d6 G5 m( O        rptr <= rptr + '1';
- O+ P& k# a6 J- O$ L6 R' O: e  p; ]    end if;/ J; ~8 g2 f# ^) W+ v' |
end process;
! a* J, l6 c/ s; A! z) L
- s$ r0 Q/ N/ gpwptr:process(nSysRst, wck, wen)7 _4 K+ C9 y4 ~) f9 f
begin8 V7 {+ q) ^8 `. f6 z6 r6 p# u9 ?
    if nSysRst='0' then
# F- M8 `1 @1 ?" `( u: R        wptr <= "00000";3 t/ U7 l+ r6 G1 q& i
    elsif wck'event and wck='1' then
+ K5 _  C) I/ ^3 T        if wen='1' then
* ]$ B9 e$ L  b) l7 U9 \            wptr <= wptr + '1';0 ~/ `7 w; ?6 a: I
        end if;
' Z: t  w: A" P+ }, V9 O5 |* u    end if;" G: c5 b7 j/ ~( t2 s. \& ]
end process;6 B/ w" k5 L- }9 B$ n3 Q% q4 ~

& p% d' _8 h. E假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?, S9 g/ O4 O7 u! {/ N# I
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
% G% [6 z# y& P# X% d% H9 u8 `' o" t) b+ M6 a& C. u/ e
Read buffer部分) U" c( Y4 c( p  l! e* I
5 U$ Z9 B% I/ X% O
--read_buffer/ s+ e7 h( I7 d( S% p9 P9 X/ ?% H
with rptr(3 downto 0) select rdata <=- N1 j/ Q$ {) i
    fifo(0) when "0000",  W0 j7 j: e! ~0 A# l
    fifo(1) when "0001",# s5 R0 e! m0 x9 `
    fifo(2) when "0010",  Q6 J% Q5 G7 _
    fifo(3) when "0011",/ l" A& ?  r( n+ b$ P" H
    fifo(4) when "0100",
& r+ A# u& a! a# ~3 B+ d    fifo(5) when "0101",
' P2 _/ e( Z4 Q: S; o* Z    fifo(6) when "0110",9 ]9 \( o) H* U7 ~$ {& n% ~2 f2 y0 c/ b( I
    fifo(7) when "0111",
1 I* N6 \2 d. C6 W3 e+ _% Z    fifo(8) when "1000",! `: O, m6 T2 O
    fifo(9) when "1001",
% N$ }: P  {" R  _( N2 O6 I    fifo(10) when "1010",1 Q. m1 S* V  o* @
    fifo(11)when "1011",
5 p) I$ ], Y7 E8 A9 R4 O: {9 n    fifo(12) when "1100",
8 ?/ R; }2 r# U5 ^  g    fifo(13) when "1101",
! @* I) X" |* n) i3 }    fifo(14) when "1110",
5 U  h5 E& R# F$ A/ V    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分2 [* S- a7 e7 m5 A

# m- D. S4 Y! A) Owrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
' _; x$ ?2 F" t  C6 j; _begin) F6 m9 @( V- @& d
    if nSysRst='0' then& b2 h$ e( _8 I$ a- t
        for i in 0 to 15 loop
" q+ t3 b) R( f, x: N            fifo(i) <= "00000000";; _1 j8 C  X9 I( V% z7 @1 S- }2 w
        end loop;
( X/ j; V$ c4 }0 {0 L1 K: c% a! Z    elsif wck'event and wck='1' then
( p( k2 {+ k7 M  F- d        if wen='1' then) w7 b" _  M% I" |+ T4 J5 e+ ?7 p
            case wptr(3 downto 0) is0 |3 q. |  e$ C+ z
                when "0000" => fifo(0) <=wdata;
: Q2 x' C% v9 J8 \8 C. M& B' H* T                when "0001" => fifo(1) <=wdata;
, J$ S* }' ~2 f/ X                when "0010" => fifo(2) <=wdata;
4 G6 `' }3 [- K" U                when "0011" => fifo(3) <=wdata;9 s7 U) \5 x2 Q7 I6 f3 ]* ?9 [
                when "0100" => fifo(4) <=wdata;
. _0 f1 W6 S( z                when "0101" => fifo(5) <=wdata;
2 I- W2 Y* t& e6 p+ N* D                when "0110" => fifo(6) <=wdata;
7 c% B$ v3 D3 N$ |1 Z+ v$ Y% i                when "0111" => fifo(7) <=wdata;5 m4 w. `, r$ I: [' m) G
                when "1000" => fifo(8) <=wdata;
$ s6 N& G" B1 Y5 _  Q% U; G                when "1001" => fifo(9) <=wdata;
. `! {& a' z4 u& \" r                when "1010" => fifo(10) <=wdata;
. J/ k. y4 b+ a+ O$ {                when "1011" => fifo(11) <=wdata;2 V. X) d) b4 @4 @" }) q
                when "1100" => fifo(12) <=wdata;7 \6 _! z: Z, ~2 e- _
                when "1101" => fifo(13) <=wdata;. h6 z/ o# p. j2 m5 S. p0 w  j& N) s
                when "1110" => fifo(14) <=wdata;
& h" j" O) x3 b9 _; j+ D5 B                when others  => fifo(15) <=wdata;
" O% Q7 E' D3 R0 b2 M- l6 _            end case;/ x& b1 a4 v4 N4 r
        end if;2 ^! W& m; ~! a4 T7 z& V$ \
    end if;
. R) |$ R, S; h- V  oend process;
: u* `- j. ]8 W5 }9 W! P  f
& l0 M  h, e7 l[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
! [- i+ c& n# L! i我先做些假設8 M3 I% a% v) W) k3 L1 `
1) /RD動作時狀態不能改變
: n7 U% b3 [% G+ q' i1 w2) wen動作時也不能改變狀態
% o$ Q/ A! [" D7 g# I如果只有這二個case的話以下這段code或許可行
2 f7 J, b3 e  y4 ~, Z- d  ~; u& S5 {) O6 i) t8 Z. l
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
9 _) j; |" K9 d/ P; cbegin/ g$ ?+ y* K  c& j- U
    if nSysRst='0' then& D  G1 X2 s+ s) ]: _
        full <= '0';
, U2 i5 u, z% H0 ~& T3 X  U1 ^' T        empty <= '0';  g0 O8 R0 z1 R' g4 y: B
        flag1 <= '0';
! I7 ]8 T/ z9 ~' @/ `% s        flag4 <= '0';3 W% W6 C' F4 |# G" B
        flag8 <= '0';
. f; M$ e2 R6 C4 m6 F7 ?, @; q        flag14 <= '0';/ s3 ^3 k7 Z3 e6 E, {
    elsif wck'event and wck='1' then2 G; X8 d) b- T6 m
        if wen='0' and nrd='1' then. o+ |% y6 o9 n) E5 B( d
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
. k8 J( P! M" Q/ g2 Q7 I            if wptr=rptr then empty<='1';  else empty<='0'  end if;
- q9 d7 i7 U$ C* ^& U2 U& @- V" E6 [            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
4 h% l: O. f$ ~  \! o; h2 D- c. C5 }            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
% S3 g4 S/ e& [) ~            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;1 }3 Z8 F0 p7 M5 l
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
/ C6 g8 r$ K$ K2 p0 A  c" V6 _! J& o! \        end if;
6 R. [5 x- F  ?$ d! _/ D    end if;- z. Q: K/ q- q$ |  f0 @
end process;* ^+ o- v* p1 a$ F" Y* P

/ d, q$ C0 z2 r$ O) W4 D[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高- a9 H3 O6 ^2 u& M6 Z6 |
- |4 E  h, q: t6 @" E1 H2 {: d4 v
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例! L+ j; O( i- N# _- \7 Z

! p# m+ p* e! W% D/ Z將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
9 K+ o- V" j& S( c5 h. N
% T4 j! P7 a/ F' o4 U9 B% a9 [1.
% Z6 k" O% k( \2 S2 a! w( Z% u   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
4 _) ]$ w( g% m: S( c   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
. u% D/ r/ S! k  o8 @   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一2 d0 H, K' g. d' C: m. R, d
2.
: C& U3 x+ c' a6 Y- ^, o% x   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高3 z3 _! g. G7 D, m* ~
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
+ O) @. a; \3 l$ \( P   資料讀取週期RC最小280ns- s1 @( _; P  x1 h4 W$ I
3.
. X0 M4 G1 O' V& ^2 L7 e   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
, A! U% m! O! w   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
9 c, @3 ^2 C% [7 K1 X   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間; k! J3 o* y8 Z  J% E- ~
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了- Z* B  f- Q$ t; S
8 C; i( W. ]' Q' V2 E' K% X8 t
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
  F0 a6 X% d8 h4 R  K
6 H, y4 w6 [6 u, J! L, |  E第三個問題還是clock rate的問題
4 `$ C/ A$ l) b7 ~( s( q$ a0 r' M; d6 g2 H+ |" {
第一個問題留給別人回答好了...+ c! @) n% p" J
2~3問題的確是問題沒錯, 誰來接手一下呢?
; a1 H* X; L  O
4 g# i1 T$ K, k& \- R2 daddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
7 W/ \+ u% x: U% |9 N- o1 h* q8 X0 X! g7 x
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
$ `- O- U) W) P$ H[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]9 W5 q7 \" B2 W7 k
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.! T: [, g; l3 A( T
[4] Website of USC Asynchronous CAD/VSLI group. [link]. v" p# f1 |# i1 S
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
  s9 Z' }+ h! ?; N) ?5 ][6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] , f: c+ b+ s, X
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
! R# X* @) J5 E2 v9 w" [3 R& P9 T我會好好的找來研究看看
1 D$ o3 H9 B0 y, a9 e, [  V0 s2 v1 p, J) g& p) O
我本身目前不是從事電子相關行業,不過對於
, W3 q) b" d4 h3 s$ I' }8 K5 GFPGA/CPLD,HDL,數位邏輯設計及單晶片等
: F, U9 m' J3 }3 \' b2 W! r都很有興趣,之所以要寫16550 code主要是想
0 v  e0 q8 t0 C挑戰看看自己能不能寫的出來,不過似乎沒那麼容易, P. d, \# j$ w8 M+ r0 {
0 z4 Z( S' G" Z& \. o$ H/ w& x# `0 ~
FIFO這部分我有上其他討論區問過,可是都沒人回覆
( ^- u6 X6 G* v0 N7 `感謝版主願意跟我討論這個問題
3 w- z: \4 W* o$ f7 e9 @! c7 W# V3 z. c0 U
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
; t* v/ k* [- _$ U) R) P  ~不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見% W) I! f/ G- ^/ c: ^, y8 s. M
不然的話就變成只有我們二個人在討論了..." l$ q+ h5 s$ @' @. Q' _4 V  d

  y, c* }* w. K# p  G0 T# ?過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
7 l1 a2 T, O+ N0 f最近想到一種架構,用來做FIFO不曉得可不可行' u. ]9 r. M6 M$ S0 y
如下圖所示
* ?% G% L% m. D( c- d  ~% [2 N& J- E# a1 O2 ~
先就full,empty討論,trigger level不管
0 P# d( d( U" U讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
; _% z% [0 I) X$ Q
, V" Z: M& u  Q+ t% ?8 `1.用額外bit(valid_bit)來指出register是否有資料寫入
) r& @: `1 ]7 [5 z& s  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
* q8 q  d: L( Z: [$ z# c" [  當讀取FIFO,相對應的valid_bit會被清為0: i( Q5 T; Q. D, k) y9 t
. F' J7 m# t* n7 D# r0 P
2.wptr及rptr用bin count+ h2 x' c+ C4 b( k' N  \! z

5 @' E0 p, T8 |; W3.full將所有valid_bit取and,empty將所有valid_bit取nor
+ ~5 \  C( F8 o( {
3 Q/ g: U! E, q, Y; h" x4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時! x/ b3 W7 p% m3 N& X2 ?% ^
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
1 ?4 e: E6 N0 t& v8 r5 W  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
  m: s6 L* A: B! T2 m: i, h6 p( v1 P# S
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作2 n) F& P- s3 h
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk; d- A! N' {& I2 ?6 F! d
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
# @% y9 E3 w/ b( Z2 d1 E/ t  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一* `# B) e' G3 F
  個位置是空但被判定為已經滿了的狀況)$ ~5 ]1 [% P4 L- g4 a' }& u1 O

5 r8 z  S2 v7 I2 [5 ?( b/ o! z以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
- [9 e/ [9 @- z! O4 U3 N; N  i4 w0 S, X
如果不管coding style的話, 這個想法很好: e( f# |+ {* u& t' \
' _+ }3 L" ?$ M: j. e/ q, p! R" ]+ }5 y
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
7 A# u5 v% m- @* P跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
' Q, G% Y& k4 D# Banyway, 互相交流吧.7 e; N- V+ Q5 n+ U$ Y8 ?. n
* @  i) g6 O: X9 h: h
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好2 E* W8 F' w% a" B. g
我想到這個方法除了電路會比較大外還有其他缺點
# [: o' [- t: _; I6 q
2 ?  J/ v# ]& ~, [" P1.不適合做成容量較大的FIFO, q% g2 [. f- ?6 c: p/ p

' y  y- O% s, C* i9 b3 M2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響" P- w5 W( \% L3 H. v3 r

. M& {/ Q. v3 c. m9 L& m4 q$ W3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣4 _- \7 P- o6 ~+ e5 v8 m' I
   會有較長的延遲時間,所以速度被拖慢了6 D$ B- |  }' x2 u( S% g
8 q0 h- m. s$ {0 N
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
! k' g$ p! N1 @2 j) V0 p4 M' N我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
: E8 c6 ~- Q1 P. ^8 |+ E( D3 s但是做ASIC時你會發現其實很小的, k, U% k  G7 s. ~
( ~  [) V+ D5 f1 l* C; W8 o8 u4 |

1 N0 _! K- Z" }# F3 A; |2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
/ g( ~' z9 H! Y# S/ l這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
/ K# ?! }# R5 X- u2 u+ y/ p& m. r2 F  T6 u5 V: N( g' H& }
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
4 L0 r+ k* O" O5 }7 ^相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好( F$ Y5 x0 \- w+ Q9 B  u( h

, s8 h+ ?" T4 s$ ]- Q, j+ r
* ^1 W0 j' P" n- ?5 e0 m7 V% g1.
* m  Q1 E3 p' W9 g   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"6 x& R/ o9 {, L' `  T$ n! l

8 x7 i  a3 I8 a. a; M+ ?4 _1 k   不了解這段話的意思,可以在進一步說明嗎
/ H$ V" ]# y, U8 [8 f+ F4 P& [0 F$ I/ q" ]
2.
! k3 G. c7 a4 R- D0 o% P1 ]  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
! [8 p% ]! S" ^& y  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會5 g8 j- m8 b* v2 }7 c( f8 p
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
5 U3 _5 ?1 g4 J* ]  請問有辦法評估亞穩態維持的時間嗎
& R5 r8 ^# u+ L) V1 K- r8 A  
/ b7 X2 \8 m3 T# V謝謝
+ l6 M1 n% q* g+ d$ v4 d& ^* y! V0 o# g2 I7 f+ P) G
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
% B, A, N6 J- r/ A我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
" D& z. B1 t  j; Hempty = true if valid[WPTR-1]=false- t3 X  s0 K6 [
full = true if valid[WPTR]=true
. \5 s! R: V$ j; c) x7 \3 n可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已0 t' y, |( r1 t' D( G5 a' k" q5 f
8 I( [+ W- ~! h% n
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好* R) X! R- D* _2 c4 j$ T
關於 metastate9 `3 ?# R+ _- r, M
請問如果一個d-ff假設 clock頻率1 hz$ I5 E. T, c$ P* h# U
如果剛好發生metastate,metastate這個狀態" Z5 [- A$ t" j: Y  D. ]
有沒有可能有機會維持1秒的時間長度呢
4 K* t% Z/ V# [! I, C5 m4 j( V/ F) g9 @0 L4 a
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
( ?9 u8 n3 l" D8 P; m2 T& O  s9 R( w4 _; b0 ~/ P
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-19 11:37 PM , Processed in 0.126516 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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