Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
. z* N" K8 v: g5 o8 l! {; P
, J! _+ l- ]# o  t這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多( j* J0 s* G0 F  a& u; K
2 J' g5 A1 d6 w" o; D
那些信號也先估且如我假設一般$ w0 y/ w$ v- W! m+ {2 g
wen是RX收到一筆完整的資料時所送出來的6 Z6 D# |' R; U2 M" ?% s6 t: q
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下); I9 R- {( @% v. `; p7 p
prptr:process(nSysRst, nrd)7 |3 ^5 S0 E, [" O9 T
begin
% j4 t* o$ g3 s2 F9 y    if nSysRst='0' then1 N9 f$ M& v5 B3 l8 E- O- u
        rptr <= "00000";
( l  g# F3 N4 J/ s! ?    elsif nrd'event and nrd='1' then
: ]: I) {( w; P9 Z$ y" a        rptr <= rptr + '1';, U; x- W) w/ S! ^3 U( m9 X) w0 t
    end if;$ ]! C/ ^: {: i0 e) I. {7 F5 [  Y
end process;2 f9 T1 c. v( t4 N' M8 O" y) p
) F1 e( |* b6 Q+ u9 }9 `8 ?
pwptr:process(nSysRst, wck, wen)
# p8 t, |/ Q6 W% |. Zbegin' ~$ B8 `- u& s  }5 d+ y
    if nSysRst='0' then
1 O9 d5 \+ O9 E# y3 _( \        wptr <= "00000";; q# z. N  O: q
    elsif wck'event and wck='1' then
8 u0 m# |# ]' P+ C: x        if wen='1' then4 H5 I4 R5 s* K3 W3 ^0 x
            wptr <= wptr + '1';
/ E0 h2 j. b; B        end if;
9 S$ w3 Y0 j: h! {    end if;5 J7 |' @  e- v/ q6 a& |! X/ ]
end process;/ ?; j$ Y8 E% ~, i
) E. v& ^0 M, K! W- O5 x! h+ G1 {
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
& c3 f* j; l+ E9 ~( A/ o1 e你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
+ G( B/ }0 v" K& O- r7 d
# o" {( b5 t, j# k4 h$ NRead buffer部分
8 z$ I: H! h, Y* E. Q( A1 B, ^6 O& y6 u% x- W
--read_buffer2 d* k9 o4 K9 i9 p- Q
with rptr(3 downto 0) select rdata <=
" O6 H7 E" }* `    fifo(0) when "0000",
4 M: _/ T/ r4 F8 P  K0 Q    fifo(1) when "0001",
# F  W& w* n$ ]1 c. _3 z    fifo(2) when "0010",
4 g6 F  u* }. }    fifo(3) when "0011",4 R( j0 X+ t; M. B3 X# p
    fifo(4) when "0100",6 A7 @8 W, d& c4 p* W4 `
    fifo(5) when "0101",9 ^8 e% h; Y' N, }4 ^; l. ~9 B
    fifo(6) when "0110",8 V5 v' O4 B! P. P% g
    fifo(7) when "0111",
9 u0 e- y* J( Z) X) E! D, `. B    fifo(8) when "1000",4 r7 Q5 g' R! |6 U5 K
    fifo(9) when "1001",; ]4 Z- ]  W; k/ z  ?: M
    fifo(10) when "1010",
8 L- C) d& J9 n) c+ l" I    fifo(11)when "1011",9 w8 [0 K% d8 U. U8 ?1 X* P
    fifo(12) when "1100"," E$ X0 O7 }) o; x1 E9 q
    fifo(13) when "1101",
; B8 Q5 `, ^: r5 r/ R3 \% S    fifo(14) when "1110",
- a' s* `% n; \3 l5 ?' H    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分( M3 S% y2 ?" @& W8 R
9 {+ q' q6 I, y; L' |5 Z: }. z
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
) x! V' U1 ^4 J+ }% _+ |- g( {* fbegin
; `+ y3 G! N* D6 t/ Z    if nSysRst='0' then
& P+ U4 n7 p9 v6 d4 w        for i in 0 to 15 loop
+ ?0 Y  m! l0 }% j! X            fifo(i) <= "00000000";; O% `. M7 t, H$ D
        end loop;
! W8 H0 l" Q* B% {    elsif wck'event and wck='1' then
& f- a: @9 j" E, r# w. l8 c        if wen='1' then+ L6 _% m4 k6 \8 [
            case wptr(3 downto 0) is
7 T4 }. y' I0 ^/ v' z                when "0000" => fifo(0) <=wdata;" o# V8 k. K0 `: w0 ^1 Y$ I
                when "0001" => fifo(1) <=wdata;
0 G) k* G! f5 Z. z9 f$ j2 Z' ?3 e% p                when "0010" => fifo(2) <=wdata;8 I9 [  h7 N5 P( z
                when "0011" => fifo(3) <=wdata;
* k$ o" K# O2 b1 D                when "0100" => fifo(4) <=wdata;
0 n. S  E! N' T                when "0101" => fifo(5) <=wdata;, O6 n/ ?1 t( }' Y: a* o- t
                when "0110" => fifo(6) <=wdata;, b9 h/ I5 ]" v: d& B0 P3 m4 F9 U
                when "0111" => fifo(7) <=wdata;/ p) k+ x; _, K2 e
                when "1000" => fifo(8) <=wdata;
5 t# D3 f& ], L/ ^9 F  R# m5 A                when "1001" => fifo(9) <=wdata;
/ Y, q6 R# S  ~  z  k% U                when "1010" => fifo(10) <=wdata;# X4 y1 i5 q' G- c/ T: G3 ?9 F
                when "1011" => fifo(11) <=wdata;
0 l9 w' @( D0 D, f" n( }: l                when "1100" => fifo(12) <=wdata;
! w0 F+ H' U$ k- {+ O                when "1101" => fifo(13) <=wdata;8 C0 B9 t0 d3 n: g' B  {
                when "1110" => fifo(14) <=wdata;
- c( \7 X. y* b" c% ]3 y                when others  => fifo(15) <=wdata;
+ H* G" Q. j" I$ E# i            end case;
1 L3 a3 X& p, ], ]        end if;- x2 k6 H+ Z& T1 A/ u
    end if;! E+ l8 t0 w- e, A
end process;5 W+ u0 z  L$ e7 ?

  o2 f7 [( K( o0 y- R( k[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分* G& P# v, G* J- T+ ^+ N% U
我先做些假設
3 m! G' G% v4 R. s* K: K1) /RD動作時狀態不能改變! g, D! R2 s; i7 U4 k: P" m3 d
2) wen動作時也不能改變狀態
$ c) ?5 C4 M/ [: ]) Q. k+ `如果只有這二個case的話以下這段code或許可行
" A$ e5 c; k3 r. I2 S0 V! Q/ y
; X& s! m: G! g3 c7 H- @status:process(nSysRst, wck, wen, nrd, wptr, rptr). Z3 J$ ]  l' q) S
begin2 H! H# E  y9 }9 C# {
    if nSysRst='0' then
( V0 y& _3 G/ v0 ]! D  ]9 B        full <= '0';
8 ]# f! s. t. J* k  f        empty <= '0';
7 }7 P# D, c- d1 L9 g        flag1 <= '0';
. C: W+ Z+ y: Y- n8 p5 R$ Q        flag4 <= '0';
% C0 d: M) x- k8 y) }2 d- _5 g        flag8 <= '0';
% D/ w, [, F, u/ u0 ~0 M8 J        flag14 <= '0';
9 ?) Y4 `( G) z( @. L6 g( f8 h    elsif wck'event and wck='1' then: m/ N( c3 f* I4 N1 n4 w( U
        if wen='0' and nrd='1' then: W3 R6 o( e. c4 L
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;3 r8 ?& b9 p: }+ ?; x' l* D5 B
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
; G) o' G/ d9 l& O2 l! ^            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;+ i* a* q" G; a1 C
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
+ x% ~! y( ~+ ^% U3 V6 a            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
" E- @; z6 t- g5 U- H/ {            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;3 w: _# i& N0 |
        end if;
# j* b% l$ q/ c) U5 v    end if;+ ]" N1 y* }- q4 D
end process;
3 d2 _% t+ V3 x. Q( H8 C0 A; p0 [1 {
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高- `/ |4 @! m! A0 p

% g+ m- O. a8 L1 q* N+ F' y8 _好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例. _# w* g6 O! P9 I9 D: w
; K" o4 ]  `! g* \& w! p
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論% {& {2 z. b8 h8 d

6 a. ~0 n6 g' s) s  J1.
3 {& z6 @) [+ B   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態", b/ y3 q2 s- r# z
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
9 W1 X% d' Q, p3 y4 }   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一4 a+ h2 o' L4 V$ m4 J
2.% A& i* Y) P- S' ~' L  I/ m5 D
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
8 V# \4 u& r+ f. m4 m0 m   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出" O# j8 f% D9 `" U
   資料讀取週期RC最小280ns+ `* G# ]/ y$ d/ k" l! c
3.3 z; C$ t* l! x' n
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期" m" r/ Q1 K5 u5 Z& o6 i
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
! ?$ s4 U! w. I9 Q4 I  d7 I   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間7 X$ W1 p+ l. m  U, |: C: j
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
) I' {: j1 S7 S  Z3 G# M/ `* l. _. B
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了; t$ h' l: J0 u: y2 z: _1 d2 z/ A

) X% f* O+ l* H' c- w2 K9 a$ W4 N# E第三個問題還是clock rate的問題
1 _& o, x1 R7 I
: g  E, `% a1 i" Q第一個問題留給別人回答好了...* ~0 a5 ~2 ~  t5 z
2~3問題的確是問題沒錯, 誰來接手一下呢?
1 i! `/ H# q/ Y$ R1 g
& j# j' g/ f) ]2 L3 V3 I$ T! oaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!) K. ?: y- r$ X$ t( r, r: u2 Z
/ @+ k4 t9 x: L
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
2 ?( T3 U, i* L' ~+ i2 c2 S[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]- f4 T; m9 W; I. ~
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
  a& w! ?; g% L$ P: t[4] Website of USC Asynchronous CAD/VSLI group. [link]
* C* |) X& D! B* ?6 l2 d0 Y[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]" T% m7 w' ?8 ~( K( P# Z: Y% ~
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 1 r! j9 B+ ]: H  s+ q# e- V
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料, g) ]/ x, H0 Y  Q: X$ W
我會好好的找來研究看看& D5 ]( r# o0 F8 K& [$ c
% J8 A6 `+ |: G7 l
我本身目前不是從事電子相關行業,不過對於
/ P: y6 \2 g! B2 `* h0 lFPGA/CPLD,HDL,數位邏輯設計及單晶片等6 g# i! P7 W4 m% C) E8 y  t
都很有興趣,之所以要寫16550 code主要是想* Y( l% c; J+ o6 _9 W6 }+ J- s
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
5 j4 ]! }  z' r9 N+ y1 E, D* |
; S" H3 h; v: G! o. C5 J& J0 _FIFO這部分我有上其他討論區問過,可是都沒人回覆6 V& \/ m/ P- J# c8 H! O* q
感謝版主願意跟我討論這個問題
. A6 `/ a+ ^5 |% v* e6 g' c
6 w1 j* m4 O9 k$ c再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多& r+ d- u( \; v3 s1 q9 x
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
! ?& F/ ?/ p2 K) w不然的話就變成只有我們二個人在討論了..." Z  R$ ^! B& B. @( S, D4 [

! P+ F% f3 n/ ~) }過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
# n' [4 [2 E* _9 k: s& M$ e2 ~最近想到一種架構,用來做FIFO不曉得可不可行
( Z) o, Z4 h. t6 ^8 s如下圖所示
& [; L  M/ d& c
* T6 ^' O  C0 b; ^$ c先就full,empty討論,trigger level不管/ Z0 Q4 M- I" N) i
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
; _" o: z6 s2 j( e4 v1 @( {9 E8 W( X/ Z7 A6 ~
1.用額外bit(valid_bit)來指出register是否有資料寫入
9 ]% L# ^% q% \2 d) P5 V  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
' v4 B# N* N0 M2 h0 B0 j  當讀取FIFO,相對應的valid_bit會被清為0
- _2 U  i( ^6 \! B# S4 t- q$ H2 i$ [
2.wptr及rptr用bin count  t! R1 S, h. ]4 ]/ i
( j9 ~: R+ t2 U) F- ^/ s
3.full將所有valid_bit取and,empty將所有valid_bit取nor2 P( l+ t  q9 C
( N, d* }) G! S5 w( y- J
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
* @2 i7 I  M( R1 n  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case; b3 y  i0 f8 n7 K. _6 h4 N3 _/ M
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已& [4 C8 K7 |2 L/ v  N' E' a
6 G) I5 p% [- p1 U& @; k, B
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作$ u7 B8 y4 l9 p2 A6 X6 O2 D7 @1 F
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk1 ]8 v  O& [$ K4 M9 n
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
: x/ m( T0 b9 {  ]1 ?7 g9 Y% f9 K  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
  Y) V. d  m" \  q" @: y. k  個位置是空但被判定為已經滿了的狀況)% v" f/ U/ n8 c6 }, d/ j. J
, p1 P6 S+ m2 A$ q
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
/ T! T" w" p4 y# n! C6 [& s: O: U9 x8 s7 b9 p
如果不管coding style的話, 這個想法很好  }0 ^+ J* t: o# v" U

  J1 t7 v9 R6 D- S- h, `) j相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.1 K! l5 ?' k4 z1 Q
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.* U5 D* z/ [' c) P6 r2 ~
anyway, 互相交流吧.
8 r" e8 d" N8 R( F- v) W% O
9 w4 Z& H: M/ \. X5 `5 U( h改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好4 s8 H. Z! f, a4 i# R( L( u, E
我想到這個方法除了電路會比較大外還有其他缺點- k  u  O- z* j6 `8 `( q% T
6 X8 S# {# G' a$ C
1.不適合做成容量較大的FIFO, }& Y  u* o- m
# Z& E7 R* |# A1 g2 i
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響: i0 ~! K! H3 p) N5 y# p2 e; a

9 K5 |/ i1 x$ t1 x: G, j3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
: G, y" F4 B* ^" n& x# p   會有較長的延遲時間,所以速度被拖慢了6 O6 }) e. ~$ z/ |! B% i1 S% H. I

- J1 Q8 Q3 ]& i% F2 [6 F- w謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO& T. ]! A4 P) B2 ^% Y
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大$ W/ c( B* B- k2 ~, f
但是做ASIC時你會發現其實很小的$ h$ ]: s. t6 j" B9 u$ E+ j
3 O& O& d4 U3 {8 o3 ~, k  A* ~

# b) ?, R1 {6 Y4 K! d2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響3 Q8 R# Y/ m" H# j
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
) p- L4 [' Y+ z; Z2 M  a2 U6 R( m, K  w) l: m4 f
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
& `( \+ ?5 Y, k+ X- B! O相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
# v/ a" r9 E# O9 U6 ^9 |
1 V# G( G. W  `1 @4 H- n( M( }- n5 y1 t, y/ P' Y9 `, K) C
1.$ P5 y% J; s+ \) c9 T% u; `% `
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"3 d; P' b: f. X5 ~7 p
! `$ Z; N8 F/ m! [! l
   不了解這段話的意思,可以在進一步說明嗎: n7 Y0 V" q# \2 m( h

  A( [: m+ H9 T. D3 Q/ a; @; |2., m% n3 O; J# w) t. y* L4 k
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
* D  w& c+ f0 U/ P2 L  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
1 S1 }9 G+ V8 C% @7 F1 P. P% `) \  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
! E3 T0 f' M7 X9 l  請問有辦法評估亞穩態維持的時間嗎
9 G- e6 ]" I' f$ o8 n5 e  
% z* d& `$ M8 W2 Y& O謝謝
/ V" I. |8 @, |1 Y: ]2 B# K% h8 n$ ]; Z0 H6 c2 e* P
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
! V$ w9 g3 G4 u- L8 i$ m我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:% N: M. m, C/ C2 @) {" G
empty = true if valid[WPTR-1]=false
1 u: s1 i. V/ i3 Gfull = true if valid[WPTR]=true
1 ^- _, r! B* l! r  R0 J/ E3 [4 a可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
5 }% l+ a) d3 `. h9 T
# V* @0 b5 r8 m# X9 C/ B/ `2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
3 s) V9 s  g' T/ |+ V1 ^關於 metastate
: v2 H9 F4 A5 `( h0 a& }, x& x請問如果一個d-ff假設 clock頻率1 hz
1 n% a8 d/ R5 P( Q9 u% v如果剛好發生metastate,metastate這個狀態
1 b( Y+ f; ?+ @! p4 o有沒有可能有機會維持1秒的時間長度呢
5 A7 X2 t# \3 m% g' ^
2 u6 T8 @7 E+ l& l謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有/ [/ v9 w4 O% U* M" J! R

# [5 Z' N$ P% v7 Y. dmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-19 11:48 PM , Processed in 0.129516 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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