Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...0 X7 `6 @, y$ |0 Y2 \3 b
9 f6 p7 i  X% N7 A, ^
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
; I1 [" S5 ~3 u! [) h
* k( |+ _2 ~: \' Y; K9 ]$ `5 g+ q那些信號也先估且如我假設一般
, O& y7 T  u& r3 p+ b2 ?2 W7 S  G3 Iwen是RX收到一筆完整的資料時所送出來的0 f" f/ K3 D( C
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
" d9 p5 p0 F9 e/ qprptr:process(nSysRst, nrd)* L- w0 v- Z  D7 I! f) t, i
begin
- ?( M: ]' {0 h0 m+ d    if nSysRst='0' then
' L1 t- t* R0 @( d: [% ]$ F        rptr <= "00000";
" j( n! W# [  V, w$ w    elsif nrd'event and nrd='1' then
7 h; m+ ^6 {( b        rptr <= rptr + '1';1 a: j* E% Z* u
    end if;
1 b$ R: R  s, O8 v9 U( lend process;4 n9 {* w6 |8 \3 D7 i7 N7 E+ y

: ^4 V* M9 q# x7 {" B1 Rpwptr:process(nSysRst, wck, wen)5 w- v5 S' B) S& \
begin. K. a' O' m0 [
    if nSysRst='0' then( i% X9 L" M6 Z1 E- F" q. ~0 C
        wptr <= "00000";; S4 l; U, o* l( }. @; U+ o- m
    elsif wck'event and wck='1' then
" O7 J! b: B, _& C6 C& H; u" U        if wen='1' then
) ?/ o" q; U& _( s3 {* U. ?            wptr <= wptr + '1';& S) o8 w7 P, g+ f
        end if;% x" `7 K1 J5 d; B# S6 Y
    end if;9 L, h2 T2 P: [5 V
end process;2 Q" W3 Y8 Z% Y/ k! H( F

! Q+ c  K% ~7 E2 n. w假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?. P) d; w5 C# L% ]
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
6 x7 G# r1 o5 ?- t5 @9 K" w9 E' D6 c/ l! z: a, F2 W* W2 i, g
Read buffer部分
5 J4 t6 F- Y& p* s/ _* O
" I& N. j: `3 k+ o3 {--read_buffer1 \3 U/ a: i1 s2 u5 i. s- K
with rptr(3 downto 0) select rdata <=
0 I9 H9 |# W" b; `2 v) `$ P    fifo(0) when "0000",
5 j8 y- j  L$ |% K    fifo(1) when "0001",
5 O& q9 A9 Y5 K1 X: X* z- L    fifo(2) when "0010",
) w6 }1 j/ @$ |" U& ^: D; T    fifo(3) when "0011",; u* P& |$ ]4 D$ G
    fifo(4) when "0100",
/ o  }: H; p7 ?; C9 e    fifo(5) when "0101",
7 @1 q4 P  y. G+ U+ \% y& w8 R+ @6 b    fifo(6) when "0110",
; Z* R0 B' x' N' Y  W( g    fifo(7) when "0111",
+ d  z4 U: h, V6 P# x    fifo(8) when "1000",
5 ]+ P% V7 v2 ^5 d$ c6 C    fifo(9) when "1001",
+ W& D$ g$ T4 r/ Q) i+ I    fifo(10) when "1010",6 L7 h" y) c6 s% d
    fifo(11)when "1011",0 c- n9 u, @& f! Y4 O' J
    fifo(12) when "1100",. y0 e+ Q; h/ j8 D6 E; H7 q
    fifo(13) when "1101",
" F/ x9 O$ w" U& h1 f+ T    fifo(14) when "1110",
( U8 Y% y* ~9 O$ }% L; y4 O' }    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
4 z8 @+ [3 y$ P( p
  }. X% H0 q# t' L5 awrite_buffer:process(nSysRst, wck, wen, wptr, wdata)3 Z5 g7 F( K+ s. X
begin5 ]: O' U/ x5 ?" I& X
    if nSysRst='0' then6 a: W' Q7 J1 v6 s# T0 p
        for i in 0 to 15 loop' j$ s) E& \* r$ I1 ~
            fifo(i) <= "00000000";( j* ~; [  S0 v+ K1 P1 P, S2 q* ^
        end loop;! A4 S* V7 d) X% w# s* g
    elsif wck'event and wck='1' then
4 y7 \6 |# h! [6 R4 [        if wen='1' then0 p; S" R$ I1 i& s- q9 [3 ?1 x6 T3 m
            case wptr(3 downto 0) is; J- A) D+ E/ U, P8 ?
                when "0000" => fifo(0) <=wdata;% O  @# R! L. {, P4 D4 E
                when "0001" => fifo(1) <=wdata;
+ v! t0 q+ D2 Y) @# l+ l                when "0010" => fifo(2) <=wdata;7 q% i# O3 {3 N: S
                when "0011" => fifo(3) <=wdata;
6 @% }; m0 w/ h$ W/ P' R                when "0100" => fifo(4) <=wdata;* |  E2 g& E5 U8 _
                when "0101" => fifo(5) <=wdata;; o+ Q' [( ^2 U( p9 n: R
                when "0110" => fifo(6) <=wdata;/ ]$ W! \5 Q; h$ L( v
                when "0111" => fifo(7) <=wdata;
# d4 Y2 M8 J  r7 R/ Y; D6 _# l                when "1000" => fifo(8) <=wdata;/ F0 B& O; R% @% N8 h* c: q
                when "1001" => fifo(9) <=wdata;
6 i/ [2 `, c2 U% L                when "1010" => fifo(10) <=wdata;' O5 l4 G* `1 }# [
                when "1011" => fifo(11) <=wdata;/ U/ d. i! C8 A5 t2 r
                when "1100" => fifo(12) <=wdata;' h8 {5 Y/ z) H/ N2 b" ^
                when "1101" => fifo(13) <=wdata;% O) ~8 }( P& E' E: j; v& F1 h# P2 a" U
                when "1110" => fifo(14) <=wdata;( w5 Q. U0 j& s. ]" `2 y/ ^
                when others  => fifo(15) <=wdata;
# l, u# ?/ Z- w7 }            end case;
( o# ?6 d1 h& o8 b  t- c. j3 i+ e' g+ K        end if;( f, y+ D( J0 ~/ f% q) [3 M* [
    end if;
; ~  r: d+ G4 |  E. @; b9 zend process;
" H9 D% d* A+ ]0 X( `) T# Z* Z7 W5 ~$ B' e& [: n
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
( d- l& q; A' _+ W, y8 B  T我先做些假設
( e5 r  R7 U$ `6 o; j% C9 \1) /RD動作時狀態不能改變
+ u, A9 H7 v2 c8 ^* o$ e2 B4 e2) wen動作時也不能改變狀態
6 @- K' Y4 J% v1 R0 s如果只有這二個case的話以下這段code或許可行% v. {; P) i9 p
0 I% ~) H, q9 a& n: N2 p; G2 f
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
& U; {4 t- Y. f, m4 R! n" u: @begin
. s! T- s9 @9 z. W0 X; h    if nSysRst='0' then
8 m5 }0 S4 v: x/ j* r        full <= '0';2 D% E9 t( ]. d2 T9 m7 ^
        empty <= '0';
: H  d( t4 W: {7 d, q4 h: a        flag1 <= '0';
2 R4 }; M0 Q: }: Z, K4 M        flag4 <= '0';
- u: A9 {9 V! }$ R# ^) z3 b7 Q        flag8 <= '0';0 Q1 Z+ j# _; t' p
        flag14 <= '0';; C( O, d8 @# o6 s2 m; u0 q8 e7 {
    elsif wck'event and wck='1' then
, g$ _+ e3 B$ P! ~1 k3 H        if wen='0' and nrd='1' then! q0 e3 R+ C  f0 B4 E
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;! Z/ |2 i; Z' @0 b
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
7 ?! Z9 o4 x) v6 P! ~. S7 T% e            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;, w" l3 R! f; ^  R- e$ e' d. |6 }
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;9 ?5 r) h0 H' P: @3 @
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
' @2 _9 D0 A1 F( s# y8 M6 \6 X, f            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
/ C/ p" y" b3 o        end if;- h: U7 W6 T9 ?7 t8 j2 y
    end if;: y* a3 X: h4 ^3 [7 Y3 e
end process;
  N3 O4 q# X0 ], M8 ], G" _
8 _$ V# B+ W5 @- W% n! v[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
% i/ V0 h  ]3 U4 F, n$ d$ u' U3 K
5 `& X2 a7 W$ h: y/ U好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例4 {8 d! r; _+ W, N0 E# D

: T  K% H- ?9 Z# ~將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論" E; r; D2 y& H( G& \" c

) [& w  _6 \7 ?7 v, p1." S: }2 n5 k' T9 ~
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"  `" X- s. y1 P/ R( M' F  D
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
2 B/ }: C, `( ?" D% N: p7 \   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一+ h: U& A6 K2 a9 E
2.
1 K, F& |$ f, s: M7 p& x" l   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高- k4 L# w" ~2 F
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出1 [; h0 d: O3 I1 N. T/ X6 q
   資料讀取週期RC最小280ns# M. r( f# Q2 D9 y8 k; q& R  \
3.' F# i% r3 U& Z- L
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
3 H/ |! W. ?9 P( [7 ^5 u   小小於wck週期的case,會有問題,以trigger level造成的INTR來講; `9 c  m* I* }5 O. D
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間9 f9 u" S/ i! O0 E) n
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
. C  ^" i; p$ K) S
% R& e- Z8 R  c第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
' o& F- N1 [* e' J% `. Z& x( {, K7 P  Z4 Y6 C
第三個問題還是clock rate的問題6 T1 T+ h$ p" y" E

+ ]6 K& r; x) h5 _' E第一個問題留給別人回答好了...
* z0 m: ^. O' l5 \2~3問題的確是問題沒錯, 誰來接手一下呢?
! d; Q! A  q; t) W6 j) Y" M0 X/ r% @6 H2 C+ a
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!* S& }. u% C* a: ^: o  k/ Q

+ {6 g2 w9 I8 Z; [  k[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
) c; m2 q. J7 u- h9 i9 o[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]3 O2 j  E, T- B' N$ k
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.: ]" y6 T6 O( e( m8 e
[4] Website of USC Asynchronous CAD/VSLI group. [link]
3 U3 Z- |7 {" @0 f. ^[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]* ~9 _/ z+ l" @" M, w
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
3 h) _" p1 r; D1 S7 }. v2 f[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 X' f8 p* P0 h+ R+ Y
我會好好的找來研究看看3 ]4 D7 `5 s" x; `

: _; S: {( K5 Z% F5 c# y我本身目前不是從事電子相關行業,不過對於
# G2 O# A' M# {! j$ ?& cFPGA/CPLD,HDL,數位邏輯設計及單晶片等. x0 _; a$ W- P' a2 ]
都很有興趣,之所以要寫16550 code主要是想! I3 J: ?+ Y$ H; x
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
8 F, s' R) }- w/ O% P# v" g. ?/ ?: c4 j
FIFO這部分我有上其他討論區問過,可是都沒人回覆
  F( C/ q+ M, g% o& t感謝版主願意跟我討論這個問題
/ v* G4 o3 {5 d+ c# J, `5 o* x0 `; j) y8 p/ ^- s' A  O& E9 z
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
/ u, U+ k) @* ~  ?: ~不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
# F0 e, a& n2 Y4 M不然的話就變成只有我們二個人在討論了...
4 [; s/ H, q: O. i% O8 N; ?& l" s: C! S' z! I6 q4 Y7 Z8 p# U
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好2 l/ R) H3 E) I/ N
最近想到一種架構,用來做FIFO不曉得可不可行
- {' T+ U  }) m! K7 B如下圖所示, D" ]( L% W9 T

9 \6 Q' o3 `* J' g# q3 U, ~4 {先就full,empty討論,trigger level不管0 J$ k3 d. J3 e/ P7 o% c+ y6 q& R
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
3 M7 {, R' a! R8 x  [4 w8 k$ l3 i$ H6 a# f7 }$ P+ S
1.用額外bit(valid_bit)來指出register是否有資料寫入& ^5 E3 C8 M, ?0 V- m. D) G8 p* O
  當寫資料到FIFO則相對應的valid_bit會一起被設定為16 m6 g- k7 h/ |, E: ~. @6 G
  當讀取FIFO,相對應的valid_bit會被清為0
. U) M& @0 E$ f& ?3 I  N( T
3 \9 c( n/ c! L2 N& E1 t; B) s2.wptr及rptr用bin count
9 X) }% s& @- `' ^* i4 B
( x: |! }- e' i1 t% y6 J3.full將所有valid_bit取and,empty將所有valid_bit取nor/ u' V& E' o# u# R" R& w# M

5 q$ a  v8 j9 H( u# I4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
! r; F& v* ^; h9 G' k" @  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
- ^' _& u4 o3 }  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已, ^1 O* z3 Q1 q$ A

, w; ]* r9 c. p; p: d% V5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
/ k4 Q: `' b+ `% s2 M3 d5 f  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
7 J; d4 b5 G- D: P1 V  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
) ?. e1 l' D" O7 L9 g9 U  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一! ?: _$ I* H9 o9 @" O
  個位置是空但被判定為已經滿了的狀況)
4 O( @2 A0 b# Z) u
( j: s# k1 |: K, h. ?以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
  m2 Y* m$ Y" R! k3 p
! v. ~  G5 N" m5 }5 s9 X如果不管coding style的話, 這個想法很好
/ r' T/ o1 W# P
) T: _( l0 D: ?  ?3 Z相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule." Y& [( m/ N; O) M
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.5 V5 n2 L9 o9 E) ~; }7 F1 R6 ?
anyway, 互相交流吧.( P! |( x% M  i7 f: w: _
* r' Z/ C4 A* z$ n: M* x5 r' ~- ~
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好1 _2 Y" b! D  [
我想到這個方法除了電路會比較大外還有其他缺點
1 I3 c$ i- @7 k! ^& F3 j: d) J# G5 F/ A, J9 S; v, H* M
1.不適合做成容量較大的FIFO
! c- y2 U8 x+ c# T
, a- D+ S- R9 U* T- C. P2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
0 \  N5 N# i/ l0 p- I
. c9 u* G% ~: b5 v1 G3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
! L7 c# Z3 `3 s0 H, Q   會有較長的延遲時間,所以速度被拖慢了
* }  v! M" D9 k# N* p. ~" ?9 i  d! p: b
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO' m7 J! t( H! d/ A/ ^  h" l
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大. Q8 c% Z0 K* S- P! H" ~+ d
但是做ASIC時你會發現其實很小的
# M2 o" z1 K" d/ |( b* m5 Y+ a, X) `* y- w2 Q9 v; q& |

$ [) p. M( V6 q3 d3 |' Q' u2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
. g* e$ r7 ^, k. `! o4 U這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了" s$ d9 j9 i( B0 P+ ^! l5 {$ R( ]$ m
2 s, Y) E: |- j0 t
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
8 l: v. D& d0 {5 R* Y# O3 f  `相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好7 M7 a$ b' r1 k% P
" d7 J: Z2 _( u& c4 y, A3 P" X

! o% p- X* N) _9 u2 H1 L1.
  [2 p  T. w1 V) A   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
: d" V, h; Y5 E  I: }
5 D2 [  ]7 S8 ^7 e! U1 Q; E$ I7 o" N   不了解這段話的意思,可以在進一步說明嗎4 b7 W6 s+ _8 P

0 Q+ Q* B" t# e2.! P+ [5 U( i0 r5 j
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間" ?) f2 n7 J+ ~' ~7 L
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
$ [' j8 e7 ^9 Q% @& `2 a  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了. n- U0 S- f& W8 _/ `; C
  請問有辦法評估亞穩態維持的時間嗎
* m& w1 J( W; T  ~0 A2 s$ a  3 W! U! _2 p' L7 B! o% s/ M
謝謝" B( i' y1 v. O# _) k

6 L! R' t* o4 q[ 本帖最後由 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: L9 {  i: ~6 \- E# A, V
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:: ]7 y! |+ C; w  \: M- b; Y' p
empty = true if valid[WPTR-1]=false
4 ]2 @7 E. G- I( D1 f! k; n3 e7 wfull = true if valid[WPTR]=true+ [: N! e' B  s. W
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已# {& e; F  p5 ~. `1 o) S3 l: ^

' V2 C" F3 V, n4 c* g2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好( j* U. T) y, T! u5 x* {
關於 metastate
: W7 I! }) _( x請問如果一個d-ff假設 clock頻率1 hz
1 V" u1 E5 j/ m) K: r' \如果剛好發生metastate,metastate這個狀態+ U" z5 |$ L* J; T( Q
有沒有可能有機會維持1秒的時間長度呢
# B- x+ I& ^2 w5 N/ e0 f
$ E9 E$ h2 M0 |+ L9 H; r" N謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有# Z  \) d' M2 s# z5 e- e
& `' r! |2 U* \" J8 U: v
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 06:36 AM , Processed in 0.126016 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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