Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
1 v* L! s7 `6 i
- I/ C% d$ [! i' t) p  H5 g8 F% u. Q這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多0 C1 _! P1 b9 H6 q3 `4 ~6 p7 k
% ]9 p; K# D/ y- G  a
那些信號也先估且如我假設一般
' Q: c5 C. B+ G2 ~$ v& Y$ P1 E( {wen是RX收到一筆完整的資料時所送出來的1 m* P% T( P* S0 @1 ^: }/ ]
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)' b0 m8 y8 u. ], H) Z
prptr:process(nSysRst, nrd)0 o7 x/ ~2 \$ E. y4 Q- G6 v
begin
- Y5 e7 }& I5 X( n; J) n: C/ q    if nSysRst='0' then
6 o5 B: B. O) {4 i; v# O        rptr <= "00000";4 Z. x& J- N% _3 K
    elsif nrd'event and nrd='1' then
8 h6 k  n2 p% _        rptr <= rptr + '1';
8 w  T) P) i$ K- R$ C* I$ J, W8 w    end if;
* m0 u3 |/ Y6 Z: p: o& Tend process;
' j  _/ t4 y+ Q/ F! N3 E+ u( h% Y6 N% J( t* n0 B5 a9 |
pwptr:process(nSysRst, wck, wen)2 T9 b, |  ]) q; c8 O
begin8 T! O, g- K7 S
    if nSysRst='0' then
3 P0 r+ t; m: G7 q5 w        wptr <= "00000";
. `0 x' t* E" y3 ~$ {6 W' G, N    elsif wck'event and wck='1' then! O- l; z* ]% O5 I* ^
        if wen='1' then$ S" F: i0 J& c, d% I3 L6 K; w
            wptr <= wptr + '1';
$ z! S6 N; z0 f( s        end if;+ \' u1 l1 Z( b2 ?8 l) U
    end if;, X) Q. U: Z  a# G/ D* x- ?+ l( }
end process;7 O' B2 f, ]+ k5 b" n' m- c+ R
" J9 V- \0 P7 s3 J: |
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
( [% _, B8 Z4 m- u4 M! B) ]% `& ]你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
0 C0 R4 k3 _2 f* ^* e3 \
- `% b; Y8 w/ S( B$ }Read buffer部分
: e5 _6 Z2 u8 I* R3 `, j
) `6 y2 ]; f; E, u--read_buffer
3 [9 V! s  T6 R+ p" jwith rptr(3 downto 0) select rdata <=
' }6 ~* C8 Z/ i* L: Q1 Q0 J    fifo(0) when "0000",
; {' j8 l+ O: X+ X+ \2 |9 g. I    fifo(1) when "0001",8 W4 r& u$ ^' f( n6 z7 @' f& T1 A
    fifo(2) when "0010",+ M! y8 U5 ^4 J0 ?7 U" I1 ^8 G
    fifo(3) when "0011",
7 a2 R& f! D3 b    fifo(4) when "0100",
  g7 y1 ?, m+ Q# \7 v    fifo(5) when "0101",/ m  Q# Y, g, Z1 F# C) k; y
    fifo(6) when "0110",0 K$ p( d/ m4 \8 O
    fifo(7) when "0111",
& ]9 E0 n' ]: @    fifo(8) when "1000",
3 b* ?8 d- o. l    fifo(9) when "1001",) L' u3 T+ q* [$ f
    fifo(10) when "1010",
1 s/ H0 k) n2 @6 O, ?" j( }; h    fifo(11)when "1011",
/ |& l" m7 j* F    fifo(12) when "1100",
8 r0 ^- b# n, x    fifo(13) when "1101",
7 q$ W. O  [/ s    fifo(14) when "1110",6 {& Z( J7 y; R( w* W! F
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
- |# W+ n) K5 b9 Y
' r7 e) H. J& ~0 X4 z# u5 ?1 Wwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
5 G2 r( ?2 H/ @4 v' F" @begin8 c" ^7 f1 x1 @1 b# @' b9 A
    if nSysRst='0' then" v, x! {, E1 f
        for i in 0 to 15 loop
5 }2 M9 S( j5 g- j6 w* s            fifo(i) <= "00000000";' d& a. _" K6 w% B
        end loop;( q: J, o3 X' T" A# ~* r8 i# O* n, X
    elsif wck'event and wck='1' then
1 `6 G3 Q' a# i( d. D        if wen='1' then
* k' k* y# S+ e& z# y            case wptr(3 downto 0) is
  r4 w! G' Y5 c# z                when "0000" => fifo(0) <=wdata;
$ i2 }, U# [1 c( S                when "0001" => fifo(1) <=wdata;
" J: P# w% l3 y' W5 n                when "0010" => fifo(2) <=wdata;8 S" [% {* ]: p. T" X6 m
                when "0011" => fifo(3) <=wdata;& G6 @! P/ L9 v2 V+ W2 l
                when "0100" => fifo(4) <=wdata;
$ `) i, N& \( _; c: }) L                when "0101" => fifo(5) <=wdata;
! }8 s5 J9 {* b# x                when "0110" => fifo(6) <=wdata;
- g$ R) C4 f& l                when "0111" => fifo(7) <=wdata;1 \1 V6 C. y. h2 ^  X
                when "1000" => fifo(8) <=wdata;. O8 ]7 ~& w1 a$ B3 N
                when "1001" => fifo(9) <=wdata;1 u6 m" m. {, J
                when "1010" => fifo(10) <=wdata;
/ U) ?0 [% R& q5 ~9 u, ^                when "1011" => fifo(11) <=wdata;
# {* b( s; P6 t# g' O                when "1100" => fifo(12) <=wdata;
; l! {2 {( o7 j$ t$ ~                when "1101" => fifo(13) <=wdata;
$ I2 g+ c+ p/ W  Y- k                when "1110" => fifo(14) <=wdata;+ L; J4 p& m' v  g9 G2 C. r
                when others  => fifo(15) <=wdata;2 g- w2 Z6 c4 i8 k+ h
            end case;
4 ^0 m% u( O+ R. p9 m' V        end if;  }  {3 G4 U. o; m2 @; i7 H
    end if;+ w# Z' i; @; W9 u1 ~
end process;& p' h0 q8 U9 L, F; r& b" x
# N% Q, L/ c! N3 p9 }5 j
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
1 N" ~( J7 s( K5 `& [; c: }我先做些假設
$ g3 [/ G! }$ W& b, o1) /RD動作時狀態不能改變* T% o8 Y5 \8 Z3 i! q# a: H5 K
2) wen動作時也不能改變狀態* P( S+ e& N  S! |5 B, j, c2 c
如果只有這二個case的話以下這段code或許可行
7 k1 g- l/ F8 |- B2 ~/ `
9 ^4 E1 f, }# L( Vstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
6 R+ |" u2 @" y) h; Abegin" g  O0 t3 m( P: o7 e
    if nSysRst='0' then6 f8 x) a. k( w4 b8 d
        full <= '0';( y: A. e4 x+ s5 ?* x% S( [8 D, @
        empty <= '0';- C! N' d& q# I
        flag1 <= '0';" ~) N3 @; v2 l5 ^. {. r
        flag4 <= '0';
* B! l5 {8 w  p$ F' R        flag8 <= '0';9 d1 l3 J' G6 \8 d$ U5 Y& q4 F+ G, u
        flag14 <= '0';
. d9 [5 Q1 v- m    elsif wck'event and wck='1' then
/ o# r' \5 @  H9 z6 z% C        if wen='0' and nrd='1' then
  |1 n) E* q7 u. c" w5 V8 Z. k- o1 C/ c2 `            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
: j& |- E3 V1 z+ H: K" I            if wptr=rptr then empty<='1';  else empty<='0'  end if;
/ q. V$ Q2 g% _7 s! E3 T            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;4 J' O8 v$ ~' R5 Y1 c
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;+ y/ l4 L2 A+ w- K, Y8 k" T
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;4 V  Q3 S/ K1 @. o- p/ |
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;$ P4 w) }+ @! N6 W* G. _
        end if;7 I& X# r( H8 R
    end if;
8 c8 _1 _$ T  ?. I7 K" J( o. ~end process;
3 i1 Q  `1 Y8 f. M4 ^3 }. L0 l: v# k
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高2 Q7 ^: F9 n4 J9 k( h
+ \3 \+ E1 I) ^
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
7 d) ~; E, p9 }6 u
; W1 I! N. E' m! s: P; Q. o將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
3 O. D% b, b9 n0 X) C2 k, x) k8 s" {+ I8 c3 c
1.
! z8 u; K9 |4 V- H- a; @. E0 n0 ?+ x0 D   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"- h8 T9 @9 m  D7 u
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
6 ~! N) D4 B% e4 u: L: x   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
2 X0 C: y, z' d+ |6 d' v2.
3 X: _- n: N; ]3 X( B   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
1 `4 j3 q4 S2 N. r$ I% }7 L   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
/ _: H. u4 a2 n; C& o   資料讀取週期RC最小280ns2 a3 v" e- G+ W
3.
$ m4 J, G6 C6 [0 n   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
3 S3 f0 b. @& v+ ]; e& k! y7 t  b6 I  H   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
, H6 m" `% y; s7 v; D  b   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間5 B6 W+ z$ ?( v
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了" o6 k, a( ~1 K- ?. g4 q6 {

2 X% f  X" l7 D/ W第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
3 l; [. O8 ^3 b, ?1 b0 j3 l# L4 f: ?/ x+ m
第三個問題還是clock rate的問題5 `  C2 Z5 U' P4 n3 F3 d$ u
% }9 k# q5 _# D" w0 y; f
第一個問題留給別人回答好了...# ~9 l. U1 e( V9 D- z
2~3問題的確是問題沒錯, 誰來接手一下呢?
1 y, x" ^# O2 C3 f, P' [
  P9 X5 J8 e% }, Y7 s$ o( c( Eaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!; y" X) o% ?7 O' X

* H9 _- W. J! [% Y" S  M# ?/ v[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
" Z5 X$ {- Q  f" ?1 _[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]; x& s/ l* h) N( o* d& p8 n
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.+ z) t, _% t9 l& x' U: s# \
[4] Website of USC Asynchronous CAD/VSLI group. [link]
3 }' w  e9 u) C$ V$ ~. [[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
4 ^% _' Q2 f! s7 B[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]   }8 `1 z% e* y& p9 C) b
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
5 E! N* s9 W7 d  }8 y* B我會好好的找來研究看看
: W7 d1 A0 ]) c  X8 s+ q2 H! @* H4 d+ r; I) J, c' k
我本身目前不是從事電子相關行業,不過對於, W+ o% v4 `! u; b8 {4 Y
FPGA/CPLD,HDL,數位邏輯設計及單晶片等0 i; N0 \# L$ D5 q1 A7 D
都很有興趣,之所以要寫16550 code主要是想  S" d, ]  b' k  e4 W' @
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
  A+ P' |4 |' Z+ [: V  K8 @0 s  ]$ x
FIFO這部分我有上其他討論區問過,可是都沒人回覆
8 t: ~" w( ?4 Z2 t2 B, G感謝版主願意跟我討論這個問題; }/ g* ^( H% I" h$ [; \! a- {

& ]4 p: A/ u; d+ U  g再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多9 I$ ~9 g+ m% y  c
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
3 r7 E- E0 N; Y1 \, Y/ P不然的話就變成只有我們二個人在討論了...2 S$ B+ ^1 t+ J& k" X2 H6 c' N8 b

3 }$ I# n- e1 Q& U4 y過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好0 u, C  I- {: I' c8 k
最近想到一種架構,用來做FIFO不曉得可不可行( `# {' k! Z5 q
如下圖所示
( u: l1 q# O2 o, T1 m
! P- }. Q9 L  M4 I! h6 s# l先就full,empty討論,trigger level不管
+ X# o, j9 K! O: n讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間5 D7 K" x' I. @3 H8 S) d
* H6 C  m: c5 l7 k4 ?, [! m& |
1.用額外bit(valid_bit)來指出register是否有資料寫入5 }3 K8 v1 S! J' z7 I- [
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
0 [% h; M# G" r9 B" P+ B  當讀取FIFO,相對應的valid_bit會被清為07 C! M0 `0 \; ~
: o+ _, o  @/ \: t% ~9 C# _) t1 o
2.wptr及rptr用bin count
/ x5 D+ N0 ^" D* z( w% S
! T6 S' r+ O6 y+ T1 O0 i3 y/ S2 {" P3.full將所有valid_bit取and,empty將所有valid_bit取nor# T' }, p2 B" F8 R6 c) g

- [9 R& ~5 h% c3 d3 T4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
  \4 s# @9 N4 I# G; u. h- M7 L8 J  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case# t) `+ f6 X: [" d7 w
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已* j9 o5 m9 E- m1 k) Y% Y0 }; i7 l
- H. C! C9 L, \1 ]+ S* t
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作; @. R) }! ?* S+ B, f
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk5 A1 o. g& {4 ~3 Y$ R1 x5 ?2 e* p
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接. {- \8 ^1 q5 Y. r) z+ x0 s
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
$ H9 N! `2 W2 Q5 K- o( K  個位置是空但被判定為已經滿了的狀況)
. x6 s) |0 G' K2 i
0 Z) j/ G# C: e& a6 H) @: v以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意3 G* F, h3 C6 F! T
& K6 Y1 e) j9 Y8 K9 S" C" Z
如果不管coding style的話, 這個想法很好
1 H" i, G# E) w) N7 k. t
8 V$ E4 F; n. V! X' {) W相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.1 O' b8 C. i0 ?6 [
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
* `/ O  J0 O* manyway, 互相交流吧.
7 |: E* p: x" ?. @6 A5 t/ Z& O2 d- \3 a" [1 V8 x) v# s& [
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好" B! k0 {- u& \+ q
我想到這個方法除了電路會比較大外還有其他缺點$ X1 Q! b( C9 F; T, W

9 c! n5 p/ Z/ u, p" T1.不適合做成容量較大的FIFO
1 o- V0 h& [! \' D
, o% A: ~9 [/ T- s+ S/ t2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
( a, h9 S1 R3 M# y" V
9 Y5 U9 M9 T. x/ C2 B$ f  h3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣3 i8 P6 h" G1 ]
   會有較長的延遲時間,所以速度被拖慢了
/ M5 r( |+ x. I; w
4 i& L3 n" ~$ g6 [. P3 B謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
' r" Z3 G  _4 y我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大" ~- x% r/ U( T
但是做ASIC時你會發現其實很小的( H9 o7 Y/ m) \
+ {# C) }& v7 x5 r- s
0 A- H/ [  h5 [& v7 i! W
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響, ]$ r* e. I0 T& L* t5 Q
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了1 c6 B. A. p; @' ~
' X4 p. c0 G. L7 U
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
5 n+ d; o) {. p" q2 j4 `- h相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好1 F/ S# N7 m, ~6 j

- ]6 J- J, q5 I* I' Z# {4 v2 s% e1 o/ j+ T) i
1.
; `/ Q7 X& y9 m* Q   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
8 F3 y2 G7 U" o5 l
( r7 L7 o4 i8 J   不了解這段話的意思,可以在進一步說明嗎
* X# e0 Z) ]5 S. C; k* u- }+ y3 S; n
2.4 Z1 p* C& q3 V8 ^  q% g7 Y
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
% r( y1 P) X8 }( R( E3 F4 h& H  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會) L, [; c( w4 P' \: P
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了" v- G0 ]5 T! Y* w% ?" p4 Q
  請問有辦法評估亞穩態維持的時間嗎  M7 _* W* m" ^6 n: i
  
2 u! I. ~$ g% R5 H8 l! g9 J- d' D謝謝
) G$ z/ ?- H; x
- k" I. @& T" X[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
" p/ Q. s4 o3 Y5 R; ?我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
9 P, j4 l  O: M0 h$ e6 J- Z/ u8 _empty = true if valid[WPTR-1]=false
, c9 u  O& J& f: h3 P. H- {6 Efull = true if valid[WPTR]=true
" a, @# @& U( W3 M3 Z3 M可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
7 }/ g# `' M7 O, K6 j: K
$ k: I9 P% T1 C' J0 B% u  ]) y2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
9 n/ f* P  Y# N6 K" D關於 metastate
* |! k) L2 b( ^+ j+ ~5 R請問如果一個d-ff假設 clock頻率1 hz2 I" m2 `, n: H# P
如果剛好發生metastate,metastate這個狀態$ b; ?+ w# G. V! ?  `7 p
有沒有可能有機會維持1秒的時間長度呢
2 C  J( A. y6 l# K  Y; i
7 S$ M2 O7 P- f; Q; J5 P謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有* ~/ e& q/ }4 p% d8 _9 e9 O
+ G' A$ U5 ?% e7 e; q
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-7 11:21 PM , Processed in 0.133016 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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