Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
& D+ @. v% o8 }$ P# {; j
6 T2 h& F$ j$ s0 ~這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
/ w+ h* j5 p/ }# w$ B! Q- l# V. Z" j( ^; l! s& H$ w$ l% s) ?
那些信號也先估且如我假設一般
+ S6 V4 C; \. X) `wen是RX收到一筆完整的資料時所送出來的
! }2 q* p* e4 @5 G" ]( k因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)1 H/ q, o+ d6 ?: i4 i6 G
prptr:process(nSysRst, nrd)+ b+ W$ A3 {; k7 q
begin
; g# M6 W2 t5 O; n& R) S    if nSysRst='0' then/ h! n3 U$ I3 A
        rptr <= "00000";
% P5 |2 ], U1 v+ f    elsif nrd'event and nrd='1' then
( Q) v% f1 {  U, k) s2 N$ B        rptr <= rptr + '1';3 W5 X! {' c+ A; u! e5 ?& A% V
    end if;2 w2 s  @* i, b: T% S
end process;
) s; X, C% C. t4 }7 `9 ~, J8 Y; l% X/ s7 |
pwptr:process(nSysRst, wck, wen)
2 l' [5 t2 c; n" qbegin
3 B8 r2 ~" B/ w# ^; g3 i( ~3 A    if nSysRst='0' then9 i- \% ]  j8 A" B
        wptr <= "00000";
1 T% _: `7 m% |+ I5 B1 Y    elsif wck'event and wck='1' then
  ]. }4 G: V0 P5 G. X" U4 b        if wen='1' then' G2 p2 h+ W; e# D  x' W
            wptr <= wptr + '1';
4 i9 g& |, E. J* `        end if;
, d( V: B' q4 h$ R4 w8 l8 Q6 B) ^    end if;7 R  p( Z5 O: V+ l/ a* D( E7 x
end process;
; ^7 |2 M+ F- ~7 ^. O
2 e& B5 X' w$ J" `假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
7 ?) R  V- U3 p8 W6 x- z" t你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key" d+ C$ H# H& ^3 B$ @5 r6 l9 ], |
, K$ P) J' b0 I
Read buffer部分
# B6 }$ U2 E6 ]: \1 `0 L2 [1 Y9 ]1 b7 B7 S; C8 L/ o1 ^
--read_buffer
- f" D& u( d% s3 l! Qwith rptr(3 downto 0) select rdata <=
! E. r6 b" t0 w  u3 V    fifo(0) when "0000",9 [3 `, {+ ]) `( F- s
    fifo(1) when "0001",
& r# s# Y* C. k, ~1 p5 a5 t    fifo(2) when "0010",
1 T- v! N. Z& O2 I: T    fifo(3) when "0011",8 P9 s& V/ K. F1 z7 O" |
    fifo(4) when "0100",
$ I; G( L+ k% v: o% m    fifo(5) when "0101",
* u; W0 _4 F2 V+ w* D, J5 x. I    fifo(6) when "0110",
. u* }* h8 Q! h+ a9 E" e4 h    fifo(7) when "0111",
1 s. g* N% D2 S  }/ I( ?* z    fifo(8) when "1000",, q9 I# \9 J; o% D  `& R
    fifo(9) when "1001",
( O$ k8 ?2 {* l7 T" Y    fifo(10) when "1010",/ a& O0 \( L8 e
    fifo(11)when "1011",: D% T: z/ `2 R# l0 g
    fifo(12) when "1100",
/ B  g4 z& Q) X    fifo(13) when "1101",8 L6 T5 v. \( [/ s, ^
    fifo(14) when "1110",* V8 s9 ^7 F, I9 c
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分) k& ~: l# e% T2 R2 S" H

! M, x% |/ r( @2 H& Jwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
* l- D0 f/ Q  U7 C" Cbegin, e; _3 A; j- k  k& B* g, j
    if nSysRst='0' then
/ g. O& o* _4 ]: H5 x" r; y9 h* C        for i in 0 to 15 loop/ `) n" U) U, d2 X
            fifo(i) <= "00000000";4 i! M0 s5 P! y3 s
        end loop;
) }4 k9 I9 R2 @8 T! U5 k    elsif wck'event and wck='1' then
# k- Q' O' \, e5 ?3 W6 R0 u        if wen='1' then+ U/ K; n  N- Y" @3 _/ j
            case wptr(3 downto 0) is! E/ w1 c. E3 q) w5 W0 Y8 q9 h' q
                when "0000" => fifo(0) <=wdata;% o3 f& K* H7 {* o+ }- l9 X
                when "0001" => fifo(1) <=wdata;& V# P& E$ _) W; ]5 R# o6 X: U
                when "0010" => fifo(2) <=wdata;: L! w& [' F9 l9 P9 ?( r
                when "0011" => fifo(3) <=wdata;
" |. d1 ?0 L/ |' s! M) ~                when "0100" => fifo(4) <=wdata;
4 c( }4 d6 @% ~5 H8 Z                when "0101" => fifo(5) <=wdata;# I, D1 E+ \. D* u, P
                when "0110" => fifo(6) <=wdata;
9 N6 U, d% X2 p  J9 J                when "0111" => fifo(7) <=wdata;
; Q" H! c6 t0 a                when "1000" => fifo(8) <=wdata;) W9 o6 r, V& [0 f  S7 b. j/ Q
                when "1001" => fifo(9) <=wdata;9 Y! Z' @9 n* a- z) @4 E
                when "1010" => fifo(10) <=wdata;+ y& B4 a. {2 i- C
                when "1011" => fifo(11) <=wdata;, y' R/ Q: q7 o
                when "1100" => fifo(12) <=wdata;
6 ?% m) e6 B' ~                when "1101" => fifo(13) <=wdata;, _! }4 l4 C# j( G$ X( ]. O0 T3 o* s
                when "1110" => fifo(14) <=wdata;
6 s0 z; E+ [; f2 l9 B# J. X                when others  => fifo(15) <=wdata;
1 I2 V( E& H  i            end case;' ^$ {: j& C# P' R
        end if;  ]' I/ O0 V  V  n5 ~
    end if;
* a. x5 q( ~1 l3 E/ V; c$ m7 f; i8 mend process;
4 O' t5 O  r! N6 Z$ d
* d, m6 _  r( [7 m3 u3 H[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分, H) Z2 i8 o% j& Z
我先做些假設" `9 R! [  c3 d  W* B
1) /RD動作時狀態不能改變6 |1 b" K$ t9 t6 D; Q* \
2) wen動作時也不能改變狀態' Q5 f& R8 g$ O9 `7 h& t
如果只有這二個case的話以下這段code或許可行
, X. y9 H2 q; E. C+ U6 v3 b
, C$ `1 U7 b) M  l" xstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)) y* Y# @% T) n* r" r' z3 D2 A) A
begin7 S3 t( N7 e- i8 h* A9 s/ {
    if nSysRst='0' then- r6 Z$ P5 g1 k$ C5 Q2 p
        full <= '0';$ A% q5 d2 u7 ^$ n
        empty <= '0';1 E1 K5 w1 M; Q) b' O3 r
        flag1 <= '0';
6 Z! W" {. m& P7 |6 d        flag4 <= '0';3 p/ `/ V7 S7 h1 N5 g0 A
        flag8 <= '0';
* V6 j' r# V% ~- i" `        flag14 <= '0';. R  b1 c* ~( |0 b) w6 r+ u
    elsif wck'event and wck='1' then
. `  ?( @/ d  ?2 Z        if wen='0' and nrd='1' then
9 p7 O1 E, h) c- A            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
( W' c( h2 L8 d% s! Z4 r            if wptr=rptr then empty<='1';  else empty<='0'  end if;! F+ c: b" \4 b1 U- \: J
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
1 M" m% {+ `& x$ p+ Q3 K            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
+ j  _2 Z3 t" {' n! j, f7 U2 y            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;6 J3 c( s7 i  z8 N6 t; {
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;6 a7 x& c! d3 r- V
        end if;
4 G3 Z7 C: V: Q' h/ m- y8 [    end if;
, p  n  D$ h7 x9 c# |" Yend process;( y  C5 A) M/ c% z( W( z8 N
/ x8 t. [8 Z8 V9 T' |
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
, F0 h% R( B3 }. L
! ?5 m& R  F2 V; b- V4 y好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例3 ?( U7 f! ]) W3 y3 N* ?. Y
$ w1 R. f  ~9 y- p3 {: Z
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
+ E9 n2 V# r1 u. z
3 U, l- @7 B, C( `1.
+ }: h( h1 ^* D  M/ a( K   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
% O! F, k( R7 _9 ^) [3 m   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生8 J+ W7 ?3 B! o) \" n( @+ [
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
0 j% A% R" r& g" P. y+ J; J2.6 Z, I; r5 [3 \, b, u: _
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高+ F' t7 M1 B) y6 U
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
/ a5 D3 }, M( }; @, K   資料讀取週期RC最小280ns
% L5 B8 D, Y# i, s( P3.
2 a# \6 m- ^% ]% p$ ?   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期! }; J9 G1 p: _& T1 c' _
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講4 x/ G: u  m3 K8 m" w
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
- I) ^: L2 H) c1 _6 h( g$ e/ E( I) m! j   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了+ `: X, |; G8 c* C& }5 M
( y* R6 _9 @0 Q9 h* w8 I* e# Y
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
7 n/ g: S7 H7 {3 C. @5 f8 A6 m+ i+ b
第三個問題還是clock rate的問題
( M. V- W9 `0 T- l
) D! \: u8 Y$ X第一個問題留給別人回答好了...
# t9 N* m( v5 {; w1 f9 s% l2~3問題的確是問題沒錯, 誰來接手一下呢?
. P0 T% J# C9 \2 O) {0 g9 T
. E; |7 u2 Q; ^) O. `addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!! w6 ]! v0 O4 @$ V% g; x) [- M
. t, D. w. W+ i4 y, k1 `
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]+ y- y6 g3 a' D0 |9 H# q
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]+ M, D4 E6 G: ^( D$ K
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
: P6 _% i( n& m- E1 P[4] Website of USC Asynchronous CAD/VSLI group. [link]
# b' k5 Z( ]! L/ z( U, Q( @+ R[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
$ ~& _# }* ?# W( `5 H# m[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] ) V; O% R% P: k8 y2 }6 t8 h; L
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料3 {7 d6 z/ O' D# P& i9 _9 l6 f
我會好好的找來研究看看$ U; T- r5 j+ C- u

3 q9 k( n- Q! x- ~我本身目前不是從事電子相關行業,不過對於
' H' R5 e7 v/ b5 DFPGA/CPLD,HDL,數位邏輯設計及單晶片等; k7 Y1 Y- P' t7 J& I0 n
都很有興趣,之所以要寫16550 code主要是想
9 ~. p3 p/ b, W) O1 ^挑戰看看自己能不能寫的出來,不過似乎沒那麼容易# `" k; x( q% s" Y
  f- D/ T- H1 F2 o7 C% B6 L
FIFO這部分我有上其他討論區問過,可是都沒人回覆2 H% X; T' L" T3 \( v
感謝版主願意跟我討論這個問題
3 B; C* l/ V/ }. g3 P- g1 u! ~# `* b1 j0 z# Z
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多  x0 h% x4 m# A, G9 i" R
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見$ c- L* P+ ~+ ?
不然的話就變成只有我們二個人在討論了...
  ?- p5 O7 l  ~* W0 |4 ~, k5 e4 k; v$ Y  r2 z; ]/ ~
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好+ {; g/ y$ o) }# k" G7 ~% C6 a
最近想到一種架構,用來做FIFO不曉得可不可行
/ O1 @4 _" T5 o) h/ s! }如下圖所示- t, {/ n. Y' j0 A1 K9 }# V

$ u$ o- d1 V8 S& u) C& A& n6 n先就full,empty討論,trigger level不管: R6 ?, g; J5 O+ ?/ V+ W; n5 G
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
: @8 [/ \) y$ K! h* `: F. t& p' R* H% C+ q4 i, m: D3 _! O  O; n$ q% k) k
1.用額外bit(valid_bit)來指出register是否有資料寫入
& ^" I7 d* r( H8 S: ^  當寫資料到FIFO則相對應的valid_bit會一起被設定為1# U. m# ?$ O7 p6 K  ^6 \* [
  當讀取FIFO,相對應的valid_bit會被清為0
( [/ {1 A) {4 L1 c
( o9 s" b# F1 H+ o! a& ]* U6 `! W2.wptr及rptr用bin count) M3 d! w) [- ^
5 q0 Z/ W7 D3 y' X4 ]/ v  x& P
3.full將所有valid_bit取and,empty將所有valid_bit取nor( I( V) J& R1 H6 |" S* g

! k! f, Y, V/ R7 r. a5 l4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時( l; g$ ~3 e. Z6 T
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
: ?* O8 j# H9 {6 f6 T! H$ t& j5 R  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
6 E" o2 F( o: B/ y; W) s$ T" d
1 q' Q* a1 J! K; F1 k% k( |' y5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
* M( O! w( H& I) Z8 r/ x5 _  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk) X3 @% i$ V( x3 O  s
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
9 @5 M: T( O6 }' m  s; L  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一) H9 c; R' [! f* t2 W8 b
  個位置是空但被判定為已經滿了的狀況)
& q# U) }" d& a/ P# v5 j; |- _
+ A7 g5 N7 j/ l; G以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意- a6 E0 ]5 _* |4 g7 _% j( b; z4 |
( W( a1 g6 W, ^1 k9 _- m
如果不管coding style的話, 這個想法很好
% i- O# W$ o1 J" {! u& w* J$ ~8 e3 E; j- g# m
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
/ }$ Y- @, N3 W& f; J+ y跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.; N# O4 [& {6 B7 U' N7 I
anyway, 互相交流吧." e5 D/ B" ~, P- v1 b" e5 ^; ^

& d' Q% c8 W* S( o, Q改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
# W( |& E# G2 K0 S: \9 z$ W! h我想到這個方法除了電路會比較大外還有其他缺點- ?8 k( V4 e) S0 _' U% w1 V0 b
/ W5 W6 N0 Q8 G' ~
1.不適合做成容量較大的FIFO* W  _+ Q# A* ?8 r8 e- F' Q8 z% E

+ H9 Z% D8 o, N! r; j2 |* {2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
+ r2 B7 V$ K5 U% ?6 Z
8 y3 H. d' P) m4 G7 @3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
5 {$ ~) A" ^. y   會有較長的延遲時間,所以速度被拖慢了. j3 i% \* {) f  u) M* a$ K3 b
+ I# n* X# a' _" g
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO+ z0 y+ X& M) g) Z
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
) o7 F9 \+ C7 u/ n4 X2 m但是做ASIC時你會發現其實很小的
2 Q7 _+ f9 A' z, i, @) z( A# [  s$ V: b  d

& [" S& h$ @. x* l8 }0 S2 c' k+ L2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
7 }9 r2 Z0 v1 G9 s! D, M* F/ d( O0 b9 |這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
! }" g; T8 z/ X" ]+ Q& D) A( \5 n. z
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
1 d9 ?2 M# j: E相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好4 E& v1 k" W. X  U3 ]' R

4 M& T7 m" h; D, r* C* d* v
" V! O3 q9 @6 Y5 j& l1.
5 f; U; C! E# _. V   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
5 V6 u8 w4 a% r+ D! ^8 X: v& Y' T5 F/ F) n- k! Y
   不了解這段話的意思,可以在進一步說明嗎1 b/ C- t) s  |3 L# e6 l( w
4 d; H3 R+ z" G2 K+ l& C
2.% `; Y7 d  ~/ S4 q8 l* s+ L" M) G
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
' w5 w1 D' e) [" ^$ S6 J  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會+ V7 H- j$ C, R9 |& N* u
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了9 g4 X, A* }! v$ b1 ^( d
  請問有辦法評估亞穩態維持的時間嗎
( h$ u6 w8 m, ~9 @; e/ W  3 g% y8 _) j8 p$ X
謝謝
1 V- |/ }5 I7 B3 j0 o( p( i  b) F" ~; P7 N/ ~+ h+ w; S1 n
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. % z* w! ?/ H, I% w- |0 J
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
  }' f8 i' j' ^empty = true if valid[WPTR-1]=false
9 D/ t% s: ^4 i7 ]: G; h7 Lfull = true if valid[WPTR]=true$ N3 x6 G* J8 J& _
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
5 a) R- F- G4 d7 E% \* V3 X: X7 l) e
/ G8 f% |/ D+ b% _- m& X2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好1 {5 {5 h5 _, a6 v8 i3 `
關於 metastate. F( k& t3 s) k4 K
請問如果一個d-ff假設 clock頻率1 hz3 k. ^+ _+ P. [( x9 p# t; D7 T/ _+ n
如果剛好發生metastate,metastate這個狀態
5 D! q) u) T8 _! B有沒有可能有機會維持1秒的時間長度呢8 F9 s. X# N( z! D& d

. d5 z" H6 ~& e- M5 h: U+ V2 A謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
* B+ N9 F# V! C
. C: A+ N+ I+ l$ g9 I; K0 Umetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-30 06:12 AM , Processed in 0.134517 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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