Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
2 u) F. R3 v* V+ E. q- X# G: T1 n* c; }
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
7 P5 y4 L5 D, z* N7 e: {1 H' y& z. h" I6 B
那些信號也先估且如我假設一般
3 G/ R9 D, A' V- O+ n( v: N4 @wen是RX收到一筆完整的資料時所送出來的
) a9 Z/ e/ M; j/ j. }4 x) Q因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
" q5 r  O# t- ~. O8 r/ Eprptr:process(nSysRst, nrd)9 _- `1 y& @) _( a2 g$ h
begin
1 m( D7 M- L* q; w    if nSysRst='0' then
1 B' ?. v- b5 N! v- a% `$ x0 ~7 D9 z: c        rptr <= "00000";3 O: x8 g! w9 C$ H9 {" q
    elsif nrd'event and nrd='1' then
' V; f3 `+ m* u* V3 Y* a        rptr <= rptr + '1';  o9 j* I) N8 j' \7 A1 y. x
    end if;
: Y: R/ u1 a" Z* s$ Z5 u/ E. h- qend process;
- @  B' _) Y: l( B/ e3 R
$ a( n( Y, N5 `0 J2 cpwptr:process(nSysRst, wck, wen). L1 E  J5 k: I& i1 \
begin
8 K! Y+ {+ ~8 E. Q    if nSysRst='0' then
% L9 c! x& G6 r0 F        wptr <= "00000";2 k$ l) R, Y1 a# w
    elsif wck'event and wck='1' then
% j( M0 N1 O2 c8 b1 d        if wen='1' then( {) Z8 ]. b4 D- Z6 v9 V4 u
            wptr <= wptr + '1';' E. Q7 T% Y4 o. T3 u
        end if;+ [- h4 j- l/ q0 Q# R1 n. d
    end if;
8 _: |. K9 I/ j& J# mend process;- d' _; b5 C* n' u4 S0 b' `

5 T; B+ C: l$ U/ E9 D假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
6 K1 N, b0 {. [7 t3 _你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key1 }7 G/ ^& p9 C  r6 T4 J( n+ m8 {

* J( W2 l3 M. ]5 [Read buffer部分
: {* f2 q4 h5 @: Z  g( ?8 \. o8 w# q0 p% h
--read_buffer) ]* P' e1 x9 W8 O
with rptr(3 downto 0) select rdata <=9 p5 a' d/ u, ~5 ?
    fifo(0) when "0000",% @6 O% Y, o* _; k  U& s. z) X
    fifo(1) when "0001",8 n7 J0 L$ E3 [, }3 L% h# t
    fifo(2) when "0010",
( L' Y5 N6 O3 M    fifo(3) when "0011",
0 |' y  L: l5 n- Q" Y    fifo(4) when "0100",% y' f2 O4 }- X
    fifo(5) when "0101",
# k7 I+ G% ^) c    fifo(6) when "0110",
( C) ?7 s, E6 g- V9 }% W    fifo(7) when "0111",
; a& G1 [9 h, E: h7 A    fifo(8) when "1000",4 B1 T# E% M6 F/ J
    fifo(9) when "1001",( V$ w/ l0 l( p+ {# B
    fifo(10) when "1010",- @% L) x5 b' `2 ]
    fifo(11)when "1011",
7 f" x$ [/ u. f( Y0 L2 O4 T% ~    fifo(12) when "1100"," E' u/ h0 h$ ~0 T
    fifo(13) when "1101",
: O, c5 K( `2 g$ F0 z    fifo(14) when "1110",
# I- n- ~) w, Z# r: G    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
- s7 H' o' d  p+ ~
; g1 t& a6 F% o  U: Gwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)7 N2 a: b" u* q  u3 c
begin/ @. X9 j% ?! t" Z! A4 @: _
    if nSysRst='0' then: W3 Q) ~$ c1 A6 V4 h! o1 B
        for i in 0 to 15 loop* |; x* n7 X) b6 o5 I) j5 k
            fifo(i) <= "00000000";
7 l/ |1 L7 ]# h5 s8 i) _9 K. o, b        end loop;2 g* }- c, e. D7 F/ V) R, |- I
    elsif wck'event and wck='1' then
+ w1 {4 ]% d6 p. A! l% w) N        if wen='1' then5 V! s1 p3 Y" f) m
            case wptr(3 downto 0) is
3 v' ~# e% C# w" _7 P/ S                when "0000" => fifo(0) <=wdata;
6 u7 m/ F- G6 z( M) J                when "0001" => fifo(1) <=wdata;" ~! Q3 |1 e; s% b# j
                when "0010" => fifo(2) <=wdata;
3 @2 N. T2 I* q8 J2 T) m% T                when "0011" => fifo(3) <=wdata;
. t4 n0 B1 E  U& x2 w* f) p                when "0100" => fifo(4) <=wdata;( |5 U( \  ^- l
                when "0101" => fifo(5) <=wdata;- l- g( `6 A, K+ O
                when "0110" => fifo(6) <=wdata;& b1 V; v# d, E( F
                when "0111" => fifo(7) <=wdata;
8 R' z# U+ Y4 c                when "1000" => fifo(8) <=wdata;
/ v" ]& g- m' w) E( t  [' |/ i! Q                when "1001" => fifo(9) <=wdata;6 w* K! G4 w. V0 ]
                when "1010" => fifo(10) <=wdata;7 A+ r# `6 M8 _
                when "1011" => fifo(11) <=wdata;
( z2 S; M% A: }$ _7 ]" {* E                when "1100" => fifo(12) <=wdata;
+ y& j" i* ^0 ?) M7 Q; R, E                when "1101" => fifo(13) <=wdata;
2 Y+ C4 y; O: p4 F( S! b                when "1110" => fifo(14) <=wdata;
9 p3 ?+ R. l3 p, d' j( X( j                when others  => fifo(15) <=wdata;
9 J  t* R: S' K4 J* m            end case;/ l, t1 z1 [0 Z; ~2 M& T3 U
        end if;
, u+ `/ M/ y" H: ~    end if;8 f& Q$ ?8 Z7 b; S/ ^. |
end process;# Z2 L  M& Z' K) N% g
9 j  Q) v# p2 i
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分. q! r; v1 j6 d* j/ s1 w
我先做些假設; g6 w! D. S9 O; t* b) V1 A
1) /RD動作時狀態不能改變: I) e; {. X, ~7 ?7 L# p$ S
2) wen動作時也不能改變狀態
$ U" k1 |1 e: b1 i4 k如果只有這二個case的話以下這段code或許可行1 ^* R+ ^5 v: \# d! o

# b$ R! z0 B( I% l* h% p% w# bstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
2 q$ @! \: [3 j" V9 [1 gbegin5 Y2 ?, c/ G# I0 o1 d- M" e8 y
    if nSysRst='0' then6 X! C1 }) W6 @. G, K
        full <= '0';4 D# F$ a. f9 R
        empty <= '0';. n1 @7 Q6 o& A: z9 y7 {% ]
        flag1 <= '0';
( X5 f9 f7 [1 F- ~' f# u& ~6 e        flag4 <= '0';
& Z* W+ I7 |# S- n+ B        flag8 <= '0';
: ?* X9 w8 d! @- L" I        flag14 <= '0';
( d, n6 k5 S: B: A! r    elsif wck'event and wck='1' then2 o  _& O5 e' B1 P0 ]1 G+ Y' {# m
        if wen='0' and nrd='1' then
! W- H3 y8 E4 u1 P0 ?5 f4 ]            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;0 u7 H! _& H" s6 x$ K, @
            if wptr=rptr then empty<='1';  else empty<='0'  end if;$ B9 P2 @8 [; S
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
; y* u) g/ k' j" L  u            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
- \6 b' X& ?, o5 h- b2 t8 [            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
: k! h' z. y  x  \; X9 E  }            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;, g) V, S7 k4 R
        end if;5 X' X! E: t! c  e+ J
    end if;' k  }) A0 M  C4 `
end process;
8 I4 C: i1 I4 s; x& P: z( x" \* Y
6 {' K7 c$ h: E" y" a( D[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高& n7 ~# g5 s* ^9 C  t
: V* F& R( `) t
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例* O$ E) x9 z: u  o& t0 d9 `
' [( ^, M% P1 {. z' q
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論- T; h# @7 ]" w+ Z2 `5 E) N; f4 t7 c) P

  ^5 d8 J8 A5 t0 Q1.' e5 E+ e: h  K) ~
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"7 b# Y" g; Y( c1 a+ G* t
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生6 `6 {7 ?: q: c7 ^6 T
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
, m. T# n/ j$ G' v8 v& M  Q$ m# r2 j2.: Y+ P6 M1 Z% T1 b" ^) a  N# S- z
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高+ R$ k$ b8 z5 b1 H7 G% I
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出" N% m/ a$ \2 @' X- I% U0 Y3 I
   資料讀取週期RC最小280ns; }6 H+ h, z- g6 w
3.8 L) I, x7 b. ?$ M5 ?4 Q5 N
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
4 d! s7 I  i9 p   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
' ^& t/ h0 g  C   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
6 T' o9 b0 ?1 _   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
* N4 r6 B; d  N0 L% |. w3 e7 v+ Y7 e' f& A, c7 ]
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
$ {' ^/ Z* G  q# I" i; z. D3 C3 t. b+ D- h0 R
第三個問題還是clock rate的問題) ]6 G* B' G) T. q; U
' @( J4 F% v) Z
第一個問題留給別人回答好了.... {7 B, f; l# [3 E  K& r3 `
2~3問題的確是問題沒錯, 誰來接手一下呢?$ P9 {2 R8 {, P" {: \) k" F8 X; l; j

# L5 U1 j8 G* ]$ `. jaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
! w1 Z" K9 v7 I  A
1 e/ S% B" ~! X# n% X5 f/ ~- @. _( f[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
( L) }/ i& m! B, j% ~[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]: R# w- _: h$ M  l/ T! Y
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
& G% h4 z1 @6 |4 L3 B[4] Website of USC Asynchronous CAD/VSLI group. [link]0 J$ X0 v( L/ F" K" ~5 \  |- w
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]& o3 v  z+ W- _3 f! A' K
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 7 q" H: K. @/ x$ j0 o2 T/ n1 \5 Y
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料0 G  F, Z6 Z; \9 e, B" L
我會好好的找來研究看看  }" V/ a- D* e/ P' w8 A

! H+ d( p9 T6 y3 n  ]我本身目前不是從事電子相關行業,不過對於
# v, e# a, ^2 z7 j9 ]0 l/ ]: \FPGA/CPLD,HDL,數位邏輯設計及單晶片等; f9 d1 g3 d' Z2 e- G) K1 r: a/ p
都很有興趣,之所以要寫16550 code主要是想
) s5 L4 W( j! m4 W$ _" n  d挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
% @  r& {5 A% t; r
% A0 d# y6 ~) J6 P; N- B# pFIFO這部分我有上其他討論區問過,可是都沒人回覆1 w( Y  b9 Q- N/ H
感謝版主願意跟我討論這個問題
: ^4 {0 I* v; ]1 M" b
% M! \+ C' K* x+ \9 |* P再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多- G2 j# Z" P. Y; T: q
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
4 ^5 X4 N, D+ J! X- F不然的話就變成只有我們二個人在討論了...
& y; b4 y4 h8 j$ {  X& L
5 o  d2 o) N" ~& g0 f( @: n過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好+ \$ \% D) |/ Q" @' b
最近想到一種架構,用來做FIFO不曉得可不可行, |9 k0 A. u% G2 i5 }& F' n2 }+ T7 }
如下圖所示: X7 X" |  r7 m# d: W/ J5 r8 d7 n
& I' B: q7 p, C. X
先就full,empty討論,trigger level不管+ _3 G( G; J0 I, P
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
7 N* c, ]2 S1 d( p/ N) E5 U  `, u0 i6 ?
1.用額外bit(valid_bit)來指出register是否有資料寫入* p1 r! d; U7 A7 E  l& J
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
* K0 _. M: g6 H0 K0 g  當讀取FIFO,相對應的valid_bit會被清為03 o6 q& S$ h0 ]" S& L
9 @0 `$ C7 W3 R
2.wptr及rptr用bin count4 d( u0 m# t1 y3 A( b4 t6 x

( K' J8 n2 [9 g9 |! p3.full將所有valid_bit取and,empty將所有valid_bit取nor
, o7 Y  C, N) }) ?8 H% |& L) R0 z# |- I! x; b0 {2 E( |3 T* _# X+ P( m
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時( E0 u" L/ o5 n1 a0 `$ v
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case; ^- N* Z: t7 a- a5 M
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
# C% A9 I1 {' W- k
6 U8 v! `3 J. G- g  H, H5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
9 w3 A: v; E* y* U1 N2 x8 s5 q  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
2 m4 g8 n" x  @$ Q# t  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
  d: \5 m  Z  X  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一8 Q/ M7 u  n2 n8 o
  個位置是空但被判定為已經滿了的狀況)" t) ^! R: U0 u5 r& a7 |3 v

! T; @) I8 h( O! n: `) v0 Y以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
' A* Y6 f; U) _! O/ M  V* w6 m
+ L% G- o3 L% C: ^# f$ m- @6 y  Y如果不管coding style的話, 這個想法很好
: j! p7 S) h7 @* I1 f6 M1 q' x7 _2 i3 r) i( G) G- b1 m7 z
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
$ V* w# m- c4 O/ q- g5 N) ?9 I" O6 g4 }跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.5 `7 G: U- b0 a/ r: K% h
anyway, 互相交流吧.
! N: K% Q* ?; n% H) B. X3 I$ T: H7 W2 W
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
& ~% H8 I4 S- {( I' j: V我想到這個方法除了電路會比較大外還有其他缺點$ N1 m4 M( B7 w( ]- }

' b4 p6 e# }; r8 p2 s1.不適合做成容量較大的FIFO4 T0 B2 r0 f" F& l, s% L

. c% ]1 t6 W9 ]  k% H5 s2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
3 _2 B, _/ Q2 l( A0 ^; C7 k) O: ^+ c
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣( x) k5 k$ u  u( |% r- c$ M
   會有較長的延遲時間,所以速度被拖慢了, T& l+ m. ?2 _" `- M# r$ c

4 Y+ g  j. A! i" k' k' {9 ?" [謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO1 V: i& T) S. Z1 T- k" }
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
2 ]0 ]. X- h- V5 [. c. c但是做ASIC時你會發現其實很小的
1 O( d. S9 S0 b! V- C# z7 P! L5 J; |( w  W8 M5 v

  `2 L: o1 q( [" q9 s: n2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
) `7 f5 o: ~% R* s這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
; \# B4 i2 D1 }& U
4 S" Z9 t0 N9 A1 W! I3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了- U! T7 L& a5 @3 A4 Q" t/ g( k
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
  o+ ]3 H2 g  o$ V( u) Z! M
) @" F* q* o4 W  a8 M) R' \( b: x+ e
1.. O. u7 S2 a- ^0 J+ C8 J
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
1 _4 U8 y8 M5 R, U
3 P) o) h  i' j   不了解這段話的意思,可以在進一步說明嗎' Q3 {$ S3 U7 P5 {

5 @0 X+ o. ^3 t+ A2.
/ r/ W9 h3 E4 J2 B. t  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
( ?0 Y9 ~; R. j  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
8 P/ n% m3 S! c. Z% {# Q  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
% ^6 r) A" A( ?  請問有辦法評估亞穩態維持的時間嗎
2 g5 Z9 K. a  V7 B6 I  
# p9 m* ^, d. U  r# E5 _謝謝% ?, L% [4 S6 G5 ]# h5 ?3 H- i

# ^& I8 n" b4 E8 X/ @0 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
: Y/ J& v% i; |* X2 P我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:  _6 k8 @& o4 _, x
empty = true if valid[WPTR-1]=false1 [) [- L# h: _3 r1 u# ~4 [4 o4 h
full = true if valid[WPTR]=true+ g. f) g% w6 I5 d
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
% D( |" u1 f* P  r& {9 U2 {. N1 A7 J" Q! c  E6 r$ s0 K8 }
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
0 B  ]. P+ e: ]6 ]. J; t6 o關於 metastate. g, ~6 N: H& _, T# [' l0 m
請問如果一個d-ff假設 clock頻率1 hz# |: }4 q  b# d* O% `
如果剛好發生metastate,metastate這個狀態
7 N2 P' z2 m8 \有沒有可能有機會維持1秒的時間長度呢
4 }5 G6 I( f' X  L- ^, y# U! n
, C8 x8 ^2 M- p4 Q謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有5 d4 W& u6 w$ ?; I

) M% O" g& F5 K0 P- z9 Tmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-31 12:03 AM , Processed in 0.132517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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