Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...* m8 x5 }( _4 J9 L6 H/ r- Q0 F5 E, ]

, s9 l3 H& y% n  L5 v這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多* n9 r5 Z% n8 b! y' x" L

' S; t# \) R: k2 N2 t5 `& x那些信號也先估且如我假設一般( M" ?. A: U! ^: c1 v
wen是RX收到一筆完整的資料時所送出來的5 j1 {3 H6 R# H; H" e4 h
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)/ x2 I+ w/ \' w+ i: w+ R& y% {8 i
prptr:process(nSysRst, nrd)& n4 A: `) x  x5 T, e
begin( U' O, F: o3 ^& l. S6 T+ e
    if nSysRst='0' then
" g* P: V& R; s5 S        rptr <= "00000";! j, ?: [2 u/ [/ ^4 W+ b2 r
    elsif nrd'event and nrd='1' then
4 a5 X. W/ X: {" X        rptr <= rptr + '1';
+ W8 L. t5 `4 S9 c9 n0 c4 O    end if;. z8 |8 p: J0 D+ b$ ?6 A1 [
end process;# W# K5 O+ g5 r" l0 ?+ \

. A( B& R" C( h7 B; a0 @! zpwptr:process(nSysRst, wck, wen)& f- K0 C" X$ q
begin1 W: K. m$ A  O3 \2 a5 h9 x4 O
    if nSysRst='0' then
* U7 t' P8 o( \2 j) ^8 ]        wptr <= "00000";
8 {4 \$ I1 B* _9 g( S, s; D" M    elsif wck'event and wck='1' then
& Y0 ]" V, h2 y) e* j& t& w        if wen='1' then
2 H9 O3 `' [8 }; X& O5 V* {            wptr <= wptr + '1';
! _5 Y4 S9 C, p3 V7 H  v        end if;  ?* C# n  @2 b
    end if;0 B" E: X+ |. h& ?9 a
end process;$ h& a% z4 _& j! A2 D4 t; z1 W) U
/ d$ c7 V) X5 y. a+ i. A6 ~
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?8 b2 r, K3 K# P; o% {
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
, {8 T% E% T, H* `3 A& f0 q0 X$ A
, Y9 D7 r% T' H& A. ]Read buffer部分
9 ?. L+ i# K4 D( L$ j7 Z, \' a7 ?( x+ @
--read_buffer, R4 o' M2 J7 F( A% S6 x
with rptr(3 downto 0) select rdata <=
  U$ @' v4 g! c5 e( b/ Z    fifo(0) when "0000",+ t8 Y2 U$ f) k( G: x  O
    fifo(1) when "0001",
' \9 g0 ~, [, c) r, J    fifo(2) when "0010",
8 J& t7 V2 k' `( m    fifo(3) when "0011",. y3 R! s: p* l" p
    fifo(4) when "0100",6 P* p& T$ M6 I9 ~8 k
    fifo(5) when "0101",* E# s# t- [/ l& i7 V6 `
    fifo(6) when "0110",
# I2 T5 t% e$ C- W( ~! Q( m1 ?" g    fifo(7) when "0111",7 S; n4 y0 s1 P& O
    fifo(8) when "1000",5 P! S; m6 W: _! ]4 T. I; I
    fifo(9) when "1001",
& ^  i' ~4 _: P$ \4 u    fifo(10) when "1010",9 _+ `" V' |5 H& e
    fifo(11)when "1011",5 ?; o; f8 s/ R
    fifo(12) when "1100",
$ b" K9 ~* p: c    fifo(13) when "1101",
+ X3 c* M1 j& S0 d/ X: f2 A    fifo(14) when "1110",
$ f0 p4 N) }( K. j    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分6 M6 h$ \! J+ N! J" T

! A' k7 r1 s5 c3 kwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
4 i& Z; p3 q% ^begin0 U, {! R1 I0 e; z$ X
    if nSysRst='0' then/ {5 B: Q. ~: G% B7 q/ n' g) x; m6 o
        for i in 0 to 15 loop' b1 g3 }& F; ]+ j) V: B) N
            fifo(i) <= "00000000";8 A9 }7 F4 M* i  N! F
        end loop;
! K" |4 V4 a/ F; M9 c7 `    elsif wck'event and wck='1' then6 \2 |, w+ Q5 G- X* B/ e
        if wen='1' then
8 `. W. J4 A6 k: ?            case wptr(3 downto 0) is
. S0 ]# }2 u  A) O) d- o2 ]* U& R0 U1 H                when "0000" => fifo(0) <=wdata;
+ I- ]; Q: Q+ E; E% B' i, |                when "0001" => fifo(1) <=wdata;
* z. A4 C" H; p9 o  y$ i                when "0010" => fifo(2) <=wdata;7 B3 W. L+ Y1 t" M0 n; `8 n0 i1 b
                when "0011" => fifo(3) <=wdata;. @8 ~+ E; g( W5 B, O! W
                when "0100" => fifo(4) <=wdata;+ w6 z1 n& \8 X
                when "0101" => fifo(5) <=wdata;
9 G+ P6 ?  b( M                when "0110" => fifo(6) <=wdata;
1 j* y& w# ?6 b2 C+ T                when "0111" => fifo(7) <=wdata;
+ J  U- F; x, ~6 C* w; ~, g+ [. F. E                when "1000" => fifo(8) <=wdata;
: U: e  S; w9 B  K# z/ P                when "1001" => fifo(9) <=wdata;
  F2 L9 |' ]: Y                when "1010" => fifo(10) <=wdata;
: t/ M* S& }8 z, m. z+ F  X# G: r                when "1011" => fifo(11) <=wdata;
9 E6 @0 N) ?8 J3 W                when "1100" => fifo(12) <=wdata;- r/ K# T8 G4 b0 V) q) Q& b
                when "1101" => fifo(13) <=wdata;
$ R3 l7 L: J7 ?9 \+ V                when "1110" => fifo(14) <=wdata;8 G% G- x5 ~% f7 E' G
                when others  => fifo(15) <=wdata;
# L+ J- u% V  Y            end case;& ^: K& {& I/ o7 y) S$ \& H
        end if;
) T; T; I7 M9 p" O6 }! P    end if;
. Z2 K" l  E4 g: y6 |+ Xend process;
. @6 _9 a- K1 C+ g$ O; C8 G% A9 U+ d8 p( c2 |
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
% ]: q. [; P4 L8 W% V我先做些假設
5 W; X9 k; i  b0 e7 `( y, m: t1) /RD動作時狀態不能改變
) q; t& B- t6 Q7 U2) wen動作時也不能改變狀態$ x* S, v1 i1 L, Z
如果只有這二個case的話以下這段code或許可行7 b. _; V. B* x3 d( e* M

* w3 P$ [5 W6 B7 j" d- J$ a, M* Tstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)$ r: I( S. s3 n9 C8 t& N
begin
% L! k; i. i8 L3 J8 d  r    if nSysRst='0' then5 {2 t) e2 ?( }; X( U( z  w
        full <= '0';
) C' c9 i. D  P( F& I) H0 s% N        empty <= '0';- H' b& d7 c4 D4 {$ e0 w' x! w
        flag1 <= '0';1 W' }! }0 i: v4 K% {
        flag4 <= '0';
  J- h% B, G; n        flag8 <= '0';
1 }$ A! \3 M$ K+ F: m& J        flag14 <= '0';
) P9 `- G+ ^8 }; O    elsif wck'event and wck='1' then7 h" ^7 H% H# `! O8 E# j3 F1 Y
        if wen='0' and nrd='1' then& U2 t# Z( R* ]
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;8 \. U0 v/ M" `3 v9 ]2 a
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
' [8 l8 [! f/ m# l; C, X            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
* m% Y4 ?$ H! s4 g) Z# ^            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
9 E) C" }) A# \: P( ?- Y+ {            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
: d1 T6 Q6 i) q, @% F            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
/ J, j8 A3 h- a3 t( Q. h) Q7 U/ x+ I( `        end if;, U7 ]/ s8 ^  R4 |& i( m4 J7 Q
    end if;% c& X! z' v8 r) o. ^8 R# {
end process;
7 ^/ h. h) h  R7 K
- A  v* x0 s0 ~5 I- H$ I* n/ V4 \[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高6 ~3 q, [/ [  z7 T( K! s
" S- _# K' X* o3 \6 I! z. {( N
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
* w2 X  ~+ U4 R$ d% R
# _3 E& K5 Z% L3 ~, I' H將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
) t% f7 D' q7 I* f9 J+ V7 \% ~4 [0 |- a  x( @. R
1.
7 k4 F* @! c- r9 ]$ |% o' Q   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
! g& O  k8 D; e( V8 ]- _   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
6 Y# b2 x( u+ |# d   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
6 z0 i3 {: s3 ]9 U1 M2.
& ~  V2 m" V. ?5 _+ P2 m. O: \   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高* p" l- c1 q2 M) _( N) H9 V
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
! s/ M- L# o2 O3 y1 u5 u   資料讀取週期RC最小280ns9 g# V) \' O$ Z2 r  m" A! x' P0 d$ F
3.
' n) m, _. s" C: [   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
: w( N; L8 A+ l; Z   小小於wck週期的case,會有問題,以trigger level造成的INTR來講  H9 `9 ?5 L. a: B8 y2 H
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間; [- J7 p. d4 M4 B7 O
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了4 q. T) ?! }0 l: n( V- @3 t
/ s! A( v9 X- E3 T! U  |( k
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了/ g7 y5 O9 t  ~) Q8 U' u7 T& o

2 z- \& E0 X& q  L' F. z2 i第三個問題還是clock rate的問題0 @: h7 m; a& j0 s
% W0 z8 J" J. M7 ^: d, M
第一個問題留給別人回答好了...
+ J& j' L7 |( D9 r7 p2 S2~3問題的確是問題沒錯, 誰來接手一下呢?6 }8 |% J4 d6 ~% D- r3 F

1 v+ _$ P4 Q2 Z+ paddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
7 s: ?. J8 n+ r% V
" j8 k) k* p. u- l- Y: c% q( }[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
4 R% z3 O) x: D1 b/ J[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
! r1 R; n' h! z1 {( C( t[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
, w% P0 T! `  p2 d5 r" W[4] Website of USC Asynchronous CAD/VSLI group. [link]
5 G! m8 S6 L! b# y7 k8 i3 C; T[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
  m$ J4 Y! R; s  f7 p! J/ m[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
2 O0 S) @, o! y, l( y6 h. ?1 w[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 p# X! L+ w" C5 E! O我會好好的找來研究看看
7 v7 y- b* Q4 B
  g+ _. u! V% h2 T( k2 r- g我本身目前不是從事電子相關行業,不過對於; u% |0 _* Q4 M
FPGA/CPLD,HDL,數位邏輯設計及單晶片等2 Q3 I/ I9 k8 B3 n. z5 G5 z3 I' p
都很有興趣,之所以要寫16550 code主要是想
# T  O9 k8 `+ @挑戰看看自己能不能寫的出來,不過似乎沒那麼容易$ _) w' Q; v) Z9 `+ ~

! R* {  Q) ~  _" l3 x3 }FIFO這部分我有上其他討論區問過,可是都沒人回覆
4 X5 E9 E, n$ l. B7 u  Y$ r! H感謝版主願意跟我討論這個問題
! k% ~7 N* Z. C& ?0 }
7 I& r/ N# t1 h/ p9 r; ?再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多* {3 G5 [7 K* n6 D! R/ N
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
- |  ]; ^5 D" K# u8 j; M* @不然的話就變成只有我們二個人在討論了...
# W! @" l2 h$ q7 }/ s5 a; |4 J' W* n; C
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好+ F+ r4 R1 L) s6 V& t* Y
最近想到一種架構,用來做FIFO不曉得可不可行
; H6 L1 K9 a; h! p如下圖所示& K; P1 `& z+ @5 _
  ]" k7 {/ b( o# J; R
先就full,empty討論,trigger level不管- J! b# J; B  a% t
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
3 S6 f; g) N1 w/ W' Y  h5 s$ ^
7 }, E8 {+ m3 @" _: q% Q1.用額外bit(valid_bit)來指出register是否有資料寫入+ r$ |1 ^+ ]/ x8 P0 w% I' d
  當寫資料到FIFO則相對應的valid_bit會一起被設定為11 s& `5 r( z: U/ ]
  當讀取FIFO,相對應的valid_bit會被清為0
$ r% e1 S4 l$ N: v. g
! ^3 l4 m% q+ }, e. m2.wptr及rptr用bin count2 b  V: j0 T  J5 O( o8 ?, r
% a8 T' M3 q) \
3.full將所有valid_bit取and,empty將所有valid_bit取nor2 ^9 w2 Z8 l' ?
! w$ @* ?0 G3 c* Q  y; [/ w9 s
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
; \, O6 {' x3 }% E8 a( S# D/ y  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
& c; p0 t. A# k& z. l5 t  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已. S- A" v5 n! |1 c2 {

# z" ^, j" `% V5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
2 H) f- S) d" L4 r/ R+ n2 H  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
1 S) R: T/ S6 X  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接* t! G( ~6 d: H$ V5 M0 L0 ?
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
& E: F; r. z5 r  個位置是空但被判定為已經滿了的狀況)
! t# C) B4 T; X6 u  H5 H& f# A$ y: x& v- o2 ~( V0 M  i; |0 o
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
" u( U, `6 R/ @- q1 n
6 g, {: T& X- L( T! Q# _( y8 @如果不管coding style的話, 這個想法很好
$ m: ^: ]3 }4 o# R% ~9 p3 ?: C8 A' o9 C3 L  d
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.2 j/ ?# e* c( H4 ^
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
% ~. ?2 O7 _1 T. Y5 G* Vanyway, 互相交流吧.0 F+ Q" e& C1 S, S/ j) O8 y

" c  _. v+ D6 P4 q& s改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好4 X- k( x: M/ t& ?% k, a
我想到這個方法除了電路會比較大外還有其他缺點
3 S4 \) @/ X* ^4 k' m) B5 v0 S# F/ o# [
1.不適合做成容量較大的FIFO
3 o% W9 `7 G% p' e+ {2 ^/ s2 X% f9 H5 Q9 S2 ~2 @0 q
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響8 W7 V) D1 m3 V) T1 u( g) O* h* @) S

  G9 J9 v" z9 A' |3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣8 ]" G( i$ x- T+ V: q: ]
   會有較長的延遲時間,所以速度被拖慢了
  j& A& U" |5 J" n; J' `' o
- A% b4 A6 B+ Z. E  I謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
4 @+ G  v5 ^7 N1 c) r8 N2 m我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大9 ]1 t; z3 [4 e, g9 J4 B% F
但是做ASIC時你會發現其實很小的5 H1 P9 |  S6 ^

/ k8 t  y' }  {8 I0 y1 V0 ]8 L# a+ S, }/ z
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響6 N# Q/ s  c7 a, d( r; c& u* j
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
( u) T' a7 x* z& m! s: C$ k+ ^+ R; g! h# n! q
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
; K; \# c% O" A; j, B% L0 ^9 }相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
* A; z9 ^- i. r8 j/ e0 ]* K, T  K3 J) i% b# i5 Y* c

  ^" E& i& K# U' n% A5 Q1.
1 t& y' b! G$ f$ i# K   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
( ~& t) E% w# A
, b1 {( L3 E8 F+ _5 s   不了解這段話的意思,可以在進一步說明嗎
" S: \2 i. c* @2 f: C7 x4 N
6 O( C: }$ }7 V* r& R2.
) k& I9 ?, V8 \; R3 C  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間5 L6 P, w% r0 p- f4 m& B
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
0 ~5 f# y3 V# }, H2 s* d( [- ]  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了4 G: S) ?5 x# ^9 w3 C- Y
  請問有辦法評估亞穩態維持的時間嗎4 r, V1 o; F7 ]( }
  
# I; B! m: y0 ]( l謝謝
7 y! U, g' f0 z& ^) x" J# N# c
[ 本帖最後由 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' w- p2 W+ G7 c. a* d' ^7 @8 G6 `
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
% A; F% }% ?: D3 E+ }/ O( s& mempty = true if valid[WPTR-1]=false
. ~, }+ K: {' D; a. }! D2 |full = true if valid[WPTR]=true
" s% k/ @1 i. C9 O! L& w' ]可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
5 A1 Q  C9 m+ ]& Y1 v- Y
1 F6 \6 W) l" @  j& `2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
) ?) _* z' K8 O) c1 V+ c& {關於 metastate. y- f+ Z# w& U9 ~
請問如果一個d-ff假設 clock頻率1 hz
: \7 A3 S) k2 b( Y如果剛好發生metastate,metastate這個狀態
) z7 F, @/ a2 G# [( f有沒有可能有機會維持1秒的時間長度呢' H" l, K# b# g2 O

- [2 v2 ~; ~; E- u2 J% R謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
2 V$ R: }0 x0 R, X  J" j+ ~! {* s5 f
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 04:52 PM , Processed in 0.137518 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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