Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
/ S5 z( {9 A  l% Z; f
9 b. |! k' }9 J這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
0 ~* @- }1 Y( g" ^' `: f9 w
: Q+ J7 c& c2 K1 ~那些信號也先估且如我假設一般
8 H/ |& s4 {- x1 Lwen是RX收到一筆完整的資料時所送出來的
& Z1 B9 M* o) S因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)) ~% X0 i% J" v+ i- |
prptr:process(nSysRst, nrd)
" @( t, H# L4 m) p- {! P. f6 b9 Hbegin" g8 A& C, z1 n$ P8 S9 p$ g8 \, ^
    if nSysRst='0' then
& X4 o' q  Y7 R& j, g        rptr <= "00000";
+ E5 F4 {- S$ R' v; g9 w, E    elsif nrd'event and nrd='1' then. z; |( z& r7 u- k
        rptr <= rptr + '1';3 Z3 g  Y% d; q. E. C8 b
    end if;9 o3 J0 F( ^* F  N  y6 a
end process;
' {; s) o, i/ U7 N2 Q' l7 R# `3 h' V+ a0 q6 \
pwptr:process(nSysRst, wck, wen)/ p* ^# J* ~& `* Y* Z/ G& e" T
begin- o% |: i% C/ |$ ^
    if nSysRst='0' then
. W  \$ {2 f3 }; M" k) Q3 Y+ p" J        wptr <= "00000";
0 F! a# E* b+ {5 `4 D/ J" L    elsif wck'event and wck='1' then  q4 ~: i% [0 F; `
        if wen='1' then( [& Z  B2 J. _" E7 E& O2 n: H
            wptr <= wptr + '1';
" D+ O+ A/ x7 u2 K6 B3 |2 x        end if;/ g  }1 |9 a) a" ]
    end if;* t0 e! v) b4 H( ?2 p. Z0 D% k: Z# `
end process;
0 i7 Q* Z& C( j; t1 I% G* S/ J. g1 |; q/ V1 L( X2 |$ L2 m
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?; k* g, |% L$ b, Q
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
% c: H3 g' K/ ], a3 \8 d# h5 Z4 q4 ^7 Y. m2 S7 [/ i
Read buffer部分
! v" Q9 S8 T2 X1 f1 M8 X. j" Z$ v3 ^! U; l, C: u9 W, ~# g, D
--read_buffer
' F) ~7 `. R- m" r8 z$ o# Nwith rptr(3 downto 0) select rdata <=$ O& o  B' P0 `+ j: r* B' z- L
    fifo(0) when "0000",: b& q- N, T# {6 ?* u* X
    fifo(1) when "0001",! O* z& ~" n, G: _. Y& s5 a
    fifo(2) when "0010",, |' N( E5 ?7 J' g! ]$ {
    fifo(3) when "0011",* ]+ i7 x3 D2 G/ \
    fifo(4) when "0100",/ V) A) }5 G& L* b1 C% p9 |+ C
    fifo(5) when "0101",1 e/ S7 Q8 {1 @
    fifo(6) when "0110",6 ~0 B& I' Z( S6 r5 u
    fifo(7) when "0111",6 N, z! N4 K6 w9 r$ O( W1 [
    fifo(8) when "1000",. l+ U  K5 f* ~2 U$ I* K
    fifo(9) when "1001",
) i! T5 S" W, n$ w& T0 I    fifo(10) when "1010",
( d$ V0 W5 J- d    fifo(11)when "1011",! Q7 s' F0 x2 y4 W
    fifo(12) when "1100",
) x1 l  D( m0 @& S1 Z    fifo(13) when "1101",& l# I8 i; j) c% h: u) f: Y$ _0 L
    fifo(14) when "1110",
" ]! L! S. {, N9 ~    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
  l, g7 S* I/ g+ P/ L$ L  p. H8 H  S
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
$ k$ h2 z' F" j8 Ubegin" C  \. B! i# w. x% S5 ~
    if nSysRst='0' then8 i  H% }# x1 q0 K* `
        for i in 0 to 15 loop
( l: \1 y! }0 u            fifo(i) <= "00000000";
+ ~3 S/ i7 c! u, W) @: C" R        end loop;' L1 R) Z- F3 `3 y
    elsif wck'event and wck='1' then$ a( J5 `5 m' o2 r- ~
        if wen='1' then( W: W' M! D/ V' E# O
            case wptr(3 downto 0) is
% M0 s/ F  p' C/ r                when "0000" => fifo(0) <=wdata;
) k. K/ V, [8 E0 Q' F7 t7 l- U                when "0001" => fifo(1) <=wdata;6 T0 x' G( p* k0 r! v# v
                when "0010" => fifo(2) <=wdata;
2 }; h. ^. h8 Q$ v5 ]7 c                when "0011" => fifo(3) <=wdata;' x  L- V  I! M" N: l
                when "0100" => fifo(4) <=wdata;8 ^) O$ j1 f; l; ]
                when "0101" => fifo(5) <=wdata;* {; b7 n/ w% `1 C- K9 j% B. c9 l
                when "0110" => fifo(6) <=wdata;
) E( |# z4 O8 I3 G                when "0111" => fifo(7) <=wdata;0 p+ A* F) F: A9 m# w! h
                when "1000" => fifo(8) <=wdata;6 n/ |! x5 [& a5 C1 Z/ a9 S  c/ J7 N
                when "1001" => fifo(9) <=wdata;
" ?9 Y9 z0 r; v* C! N                when "1010" => fifo(10) <=wdata;7 C' D0 l9 B% }' T3 A, j
                when "1011" => fifo(11) <=wdata;
4 w/ [% T/ F2 l; J. r                when "1100" => fifo(12) <=wdata;
6 p) K& I, E/ j1 l                when "1101" => fifo(13) <=wdata;. ?1 B& k% e, Y" m; R! c
                when "1110" => fifo(14) <=wdata;
6 C( Q+ ?' x9 Q, z0 H) _1 r# v2 v                when others  => fifo(15) <=wdata;, ?% ~0 |/ ]/ U& e
            end case;$ C, |5 t3 H8 o: z
        end if;2 D+ s" K/ m4 h4 b' [
    end if;2 N( |' t, i2 b5 I8 V6 h/ R
end process;2 d1 Q7 b7 z) B3 f, U
/ M4 K/ [' Q! ]& P  o. M
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分1 [! W/ [% t+ ^/ O
我先做些假設! R  h2 z9 }, h' h8 \. o
1) /RD動作時狀態不能改變
$ K! g' x' ]- p4 a2) wen動作時也不能改變狀態9 \7 m2 f' l2 ^4 t; s9 U7 m- }2 A0 }
如果只有這二個case的話以下這段code或許可行
$ y9 u4 ~4 Y. [$ K; y7 F+ Q
3 k4 l5 F7 Z! H- K5 h4 U5 Istatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
: h. H& J2 [1 Y: \begin
& k. d+ j, r# E! B    if nSysRst='0' then
0 L: f' |+ M& r/ f8 \        full <= '0';
9 {9 I" {7 l' a0 q* M        empty <= '0';5 @  m) I) O* Y0 O& [8 u
        flag1 <= '0';
/ x/ D! H5 R1 S3 r) o/ K; C        flag4 <= '0';1 ]" ^; J; u' F- h0 K
        flag8 <= '0';
  B# p* ?+ ^3 b7 q. u) R        flag14 <= '0';; l6 w2 y/ o# t7 `: W8 m+ k
    elsif wck'event and wck='1' then* P6 P' G6 y6 B$ z7 Y' v
        if wen='0' and nrd='1' then
9 W1 G: l; A- `: w            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;  D# A$ p- A' b- v  e* R
            if wptr=rptr then empty<='1';  else empty<='0'  end if;, Y$ A, r% }/ a4 d4 {7 k  c  y
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;! [# {. q6 s- y4 V
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;6 C9 x( Z! A, y3 M: I
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
5 a5 |8 r  ?& v  w6 y" w            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
  |; z5 i. F) i4 P" Y% G3 O        end if;
5 S' q2 A& t# m0 ]! W    end if;
9 x2 }9 y6 L! `8 Cend process;9 F. ]( e7 Q4 B" g

& s, f) g% ~" v8 A1 W[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
+ b: z7 l& ^( L
0 G8 i1 \8 _, h2 a6 l( M& `好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
* {5 h9 S1 g6 a; ?6 b) T6 b% Q5 _8 P# d# L+ H
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
- x; n* D# n& f. C4 o
8 b& v8 d- F( n# T. L0 n1.
+ ?9 ?) R. D. D* w* I: j   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
) L( x4 [3 ^3 P& e# n. p   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生$ F# W; }  f( W* X+ ^$ {6 Y
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一9 j2 R( m5 e4 }) ]! K0 U0 }
2.
3 f) L' I) }3 r   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
' X- G* Y1 C/ Z9 S6 \   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
0 a4 f( k0 X5 W7 V   資料讀取週期RC最小280ns
/ c# Y' @2 l0 X8 C- e0 u7 v3.
1 V" V, V2 P) w. d- q' O  D   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期9 U% Z- F- L, z( n8 v/ V
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
& C# @2 _9 S% a6 E- G# N9 J9 t   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
2 d' ?& U( T& {; t2 A6 v3 v   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了. z: g/ W) L. p
8 k* h3 D* V) q9 g' Q) x% {0 M
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
0 k# S" K. V: J" U' l5 D- G1 j# h" n1 Q0 @+ R$ H5 A7 C
第三個問題還是clock rate的問題+ i$ u4 m/ ?) I1 {- q; a
5 @) Q  Z3 d) W) r, a: O. x& Y) a& }
第一個問題留給別人回答好了...
6 ?& u$ |# u/ D# _# `& r2~3問題的確是問題沒錯, 誰來接手一下呢?
- u3 S8 ]/ D  s- k- e& q
4 K" E% N8 X& F. ?# d; [" Haddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!/ }5 c6 B3 I! j% K, n' P

5 d9 W7 u/ _9 {[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
# d/ E8 W+ L; G2 n5 l+ h[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
+ t0 m% p0 M- L7 @# M, @[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
4 w  H  A9 Z+ }/ D% V2 R6 l[4] Website of USC Asynchronous CAD/VSLI group. [link]1 n' y9 Z) G3 U! R" N! S/ E
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
! V6 h+ |: v/ T[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]   G/ F/ `& y; o" _/ c. K3 t: T# E2 L. Z8 c7 |
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料6 R) j. Q1 V# b9 ~% U4 Y8 L
我會好好的找來研究看看
0 |( C$ |4 H2 G9 G
3 Y& `  ]5 g3 K8 w我本身目前不是從事電子相關行業,不過對於/ |; K5 p! V" {! U, j9 A& B
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
* e1 Q1 Y& F! R3 D9 H. l都很有興趣,之所以要寫16550 code主要是想7 `$ h% P; X; E( d+ q+ i- t
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易% T& Q0 K3 b( {4 ]

- F0 |/ q8 x" C0 _. HFIFO這部分我有上其他討論區問過,可是都沒人回覆
1 r' H$ {1 ?1 `, S+ \感謝版主願意跟我討論這個問題
6 k' {1 D. t/ d. d8 a
. W" z0 U, f8 z) t; S& U5 o" }8 N, R3 q再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
2 H1 u3 \% ?* ^& e$ B% H9 h* `不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見$ g% L+ ^) X6 ~9 o. Z; w& H
不然的話就變成只有我們二個人在討論了...) Q& ~3 P' f# @7 {+ K
- U: \- B4 Q3 R, O1 I* Y& s* \
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
. M7 G# s! v# [& H6 v最近想到一種架構,用來做FIFO不曉得可不可行
$ f  i5 m6 Y0 e6 R如下圖所示
- H8 s! _2 v7 ?; s$ `8 B$ l
- @4 E* T8 q% P- a  ?; a先就full,empty討論,trigger level不管
! ]" {" A. p$ N# A& g+ D3 f- T讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間( g0 S4 J- X/ f! @7 p( V  G2 [
5 J/ }$ |) Y; S! p
1.用額外bit(valid_bit)來指出register是否有資料寫入
9 h& ]* X9 f( ^1 |; n  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
6 {% d+ O! r. U1 I% E2 `7 B. e  當讀取FIFO,相對應的valid_bit會被清為0
( q* d6 `9 v) n2 o; z6 U; ^. @4 M& g  E
2.wptr及rptr用bin count' Y2 K* s" T, {2 G  a
8 `: t+ X& V6 q# d2 }+ m, q
3.full將所有valid_bit取and,empty將所有valid_bit取nor
( E2 `1 w7 P2 X3 n2 h/ _( a5 N: @/ D
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
8 y' E0 I5 {& [( J+ f. G* `% D5 v, i  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
) M! d- f5 A! |; G( R) ^  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已; X: {5 g9 m" V4 M! S  Z- U
* J4 f6 t) E. N5 }
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作; n/ m: n; B( S9 F$ i; M/ b. b
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
' i# H; f9 R; P  U2 n: e* F  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接7 c: U/ A6 y. _7 J- v
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
% S% C7 C8 Z* I, y6 O0 H  個位置是空但被判定為已經滿了的狀況)8 M% C9 z- u! |% R) G+ B
% x6 b5 X- |. ~2 C' v* W
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意% R. C5 k! t2 J! Z
/ F# B: B/ I$ Y6 m0 g/ A
如果不管coding style的話, 這個想法很好
. ]: K! A, L+ k. ~" [3 `7 O9 c
1 g$ H3 ~' x; I9 J- d0 _" B$ H相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.! @. c6 V8 I" k9 d4 l
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
! U6 e2 O5 B% U8 Sanyway, 互相交流吧.
2 M7 A  n3 f& O, Z& U6 O, T/ Y7 r0 E* q9 D
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好: c" o" l& u, o
我想到這個方法除了電路會比較大外還有其他缺點: h4 b6 E0 O% T4 y

6 t3 f  u; T% R3 M1.不適合做成容量較大的FIFO$ H2 C& D1 q+ a- u7 H& B4 e) w. u: T

% P9 }6 I  G% @. ^! M2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
8 r0 k2 M$ o. N1 S) ]9 Z8 Z# f5 ]; K( |0 L+ u3 X
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
" V/ f2 t& _* S6 T* K( X1 `   會有較長的延遲時間,所以速度被拖慢了7 _( K; E; d0 l( l
: \0 ^5 [8 w. ~" x; @
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO) @$ L- P# D6 A' a: g) z0 w
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大) c! W7 g3 W) {) h
但是做ASIC時你會發現其實很小的$ ^8 q9 Q9 l) Y
% u# I% i+ n* C) c2 b

, G3 L; q$ J% k- ^* @2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
3 I1 g- s! o) i8 m: S! s' s這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了$ _( N3 o* l5 j+ u( d- X. V. F
6 @! H2 I2 ~6 d7 n; Y$ k
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
  j- ?  y; L) K9 ]3 i相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
4 `4 h* i; {* f6 A4 G/ s
# o* q# H, D9 |! D# g/ P/ I% t5 E8 x6 u
1.5 O8 p% ^9 `+ }( G4 V) J- s
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)") n' t5 q* A: j; X+ x8 x6 V

1 d8 G- i- e$ ?3 e/ @- h   不了解這段話的意思,可以在進一步說明嗎
& E+ x4 v- i4 Z8 v' N' V
; Z7 q( C! q% z* Q8 r" g. _2.
- v* U- }( ^% G0 N+ d  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間6 g* y$ t- c( g/ k& A2 w
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
0 U$ Q. B% u2 p) t6 ~  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
, s, n& [% t& N$ D8 a0 u  請問有辦法評估亞穩態維持的時間嗎
7 y- h: Q+ w) ~4 a) Z" k  
# X* G; {; c0 D  f; O/ O謝謝, c& q" c6 I# O' p1 F& O" i

; {* V. m6 ~5 p0 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. : v; d  d: e' p
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:9 _7 i0 P8 M* Y1 M4 w
empty = true if valid[WPTR-1]=false
+ N& l$ r2 F4 k" S& c8 U& Efull = true if valid[WPTR]=true  a% r/ M3 c1 t1 x5 _
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已2 ?: i" d4 J0 ], t* B# i

; i$ B  I5 e9 G. h3 y& K2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好5 Y; ]! R  G5 v) z, \; \
關於 metastate4 N) j! |% ~! [2 C
請問如果一個d-ff假設 clock頻率1 hz
' z+ @2 I: h3 P1 s- c+ k如果剛好發生metastate,metastate這個狀態
! m. R7 P9 p7 _& o7 G( Y& c有沒有可能有機會維持1秒的時間長度呢; {# I3 P5 m4 L7 m$ L: v
$ s, z2 p3 r9 L- h5 U  u
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
% N+ B8 G0 v& l! F( J6 F4 W3 ~) |5 q% v' c& \$ X, i  t6 \
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-31 11:19 AM , Processed in 0.151019 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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