Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...! z( |, }; F' a. i5 p
+ p9 F$ ]1 r+ B6 u; z
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
9 H+ W+ d2 Q) v  |, N2 O. g1 H" R8 K: z! i1 N+ W6 J
那些信號也先估且如我假設一般
2 z* B7 F! w! c2 Ywen是RX收到一筆完整的資料時所送出來的. K9 e, L% x0 r
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
0 f3 r) {% f% w$ H* bprptr:process(nSysRst, nrd)
& r9 t2 W7 ^& F6 a4 D6 c6 Kbegin
1 i! w+ `" F5 i& x' `; V    if nSysRst='0' then3 M: X) s" g/ `
        rptr <= "00000";
* Q( U$ N7 u$ Y9 t7 K& ^3 p2 @    elsif nrd'event and nrd='1' then
/ V6 `3 ]1 l) _& A" T, {/ G        rptr <= rptr + '1';
7 y2 ^8 e- j% @' M( O    end if;  c3 @2 q( V0 |2 g7 m6 F! i2 ?4 J
end process;0 E9 L7 j$ B: C0 F5 V8 d: V" i
! B! y8 Z* x0 K2 B0 o
pwptr:process(nSysRst, wck, wen)
& w* p' T; ?& ~6 vbegin+ t+ q% f8 ~* A7 \$ r# v: w7 a
    if nSysRst='0' then, r7 ?, T( ^" ?' }4 w0 j. o. w4 I( J
        wptr <= "00000";
- c) ]1 \4 p! c$ \1 d    elsif wck'event and wck='1' then# _. `2 q7 E7 v" L8 R
        if wen='1' then+ K! q! n, D1 \4 B) p5 h9 V2 n
            wptr <= wptr + '1';: K' E1 p& n- f* P8 \6 t
        end if;
" d) V# P) y& f( g# _4 q    end if;' ~3 t) Z$ @$ `: E3 R( `! Y
end process;/ d) A( C! u. v. C# I: u0 k6 c
* w% V* x# r8 ?. w0 _; \
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
$ G2 e$ W! w# ~3 o, p你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key7 k4 X3 z" f9 x9 N( y: \9 z8 D

$ d. W# B9 _1 gRead buffer部分
2 F6 m& I) B5 D6 x) @7 B$ j" M; }+ C
--read_buffer' n4 A. n4 |# ^5 f" A
with rptr(3 downto 0) select rdata <=% s( @3 o2 P! T, D7 v
    fifo(0) when "0000",+ o7 c# a- G* u5 e$ Y
    fifo(1) when "0001",
' o! \& S* S3 ]/ G$ Y0 I9 a& Z    fifo(2) when "0010",
( f- p9 ?1 B% _8 t4 b; h, b$ B    fifo(3) when "0011",
+ @( {1 ~( I. E  i) X    fifo(4) when "0100",; x* k: Z% x4 [) Z0 K0 U
    fifo(5) when "0101",
! ?2 h0 k4 l* a6 W+ M1 x. ~2 G1 ], {- v    fifo(6) when "0110",, \$ T8 U( P; t; q% |" V8 t
    fifo(7) when "0111",& ~* l6 D$ v4 o' b3 K/ K1 s
    fifo(8) when "1000",/ S; i# n# i/ }) O4 |( O- l. w
    fifo(9) when "1001",
/ O) a% d& s% o. u8 b& k* U3 k+ Q    fifo(10) when "1010",
4 _4 |# J7 h" `5 ^6 @# K. d    fifo(11)when "1011",
' k8 z/ m' P; `( y# N    fifo(12) when "1100",
, J% q7 _% L. l    fifo(13) when "1101",
9 K8 h2 P9 j- \8 V4 Y( Y! i, U    fifo(14) when "1110",, N$ @5 r8 @! V* |( A0 n2 z  `. X" p
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
  z- b: o, O; E5 {5 ~: J% Y* C! K- @$ _1 l% H/ N3 m
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
! N2 ?5 R% {5 T% v( `begin
0 {4 S' b8 x4 @; R. H* d# H    if nSysRst='0' then% r( y% m* n) f+ R+ \, O+ i& ?
        for i in 0 to 15 loop5 L; J; p5 K( L, ^
            fifo(i) <= "00000000";
7 f* U9 Q- i$ |  l) H/ y        end loop;
" K9 ?6 n' P# T    elsif wck'event and wck='1' then4 T$ U/ D2 u- C( ?  _
        if wen='1' then
  t; o( \4 W+ E) F            case wptr(3 downto 0) is
* m' H+ K# P' A: L  @: P: N, i                when "0000" => fifo(0) <=wdata;
" ~2 P$ o0 Z* G8 p0 q! Q- a* X                when "0001" => fifo(1) <=wdata;
" r2 d  n1 p8 E/ F7 ~                when "0010" => fifo(2) <=wdata;
' [4 ?6 \+ P( ?4 ~5 f4 R1 r                when "0011" => fifo(3) <=wdata;5 h0 B3 Z- H7 p" r' B) }; v
                when "0100" => fifo(4) <=wdata;
) T9 @/ F) m* l" q% i3 M; d/ T5 w3 a                when "0101" => fifo(5) <=wdata;# Z& P! x# G/ w! b, b5 P
                when "0110" => fifo(6) <=wdata;* J8 j# }1 i& Q: p% B
                when "0111" => fifo(7) <=wdata;
+ b4 v5 y1 [$ ~                when "1000" => fifo(8) <=wdata;& |& L% Y' `7 Z% w5 _# _4 r
                when "1001" => fifo(9) <=wdata;
6 R' h- K' g9 m. {3 C& E# ^                when "1010" => fifo(10) <=wdata;
4 W8 E# n! Q0 m5 f! _                when "1011" => fifo(11) <=wdata;% M6 Y# M. U5 h$ x
                when "1100" => fifo(12) <=wdata;& m/ N, |6 G- q' x; Z
                when "1101" => fifo(13) <=wdata;
* u0 k7 H+ ]2 h) C. Z5 q- |9 {                when "1110" => fifo(14) <=wdata;
7 `0 @2 A4 e2 u% n9 [& }, \* z                when others  => fifo(15) <=wdata;7 u8 Q5 u- T% A$ N( [+ S
            end case;
( N# g2 c: T, Z. x6 p        end if;, F8 G# H4 ^7 m. A
    end if;6 y1 _+ v, P8 f5 i- s8 ^
end process;
- m. G) ?' t% y+ u: R/ a' A" D% u) a% ^8 `3 H' R
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分  Z7 _8 |0 n; y" t' e* g
我先做些假設  m) M) q/ v9 p9 B+ \0 X9 K0 t
1) /RD動作時狀態不能改變  s4 s; @+ ]- w4 n
2) wen動作時也不能改變狀態4 h2 c; c& ~/ i. q( n" B
如果只有這二個case的話以下這段code或許可行$ J5 u' V1 m$ |) c: g+ f

9 Q; z$ c: Q! W9 U9 f% w. t6 ]status:process(nSysRst, wck, wen, nrd, wptr, rptr)
3 C0 h" s' b  Lbegin" {4 X2 D) T, K
    if nSysRst='0' then4 Q1 X- B0 Q5 q2 B* Z5 x5 J/ V0 g
        full <= '0';
" p" N3 q) ]" |% r& z        empty <= '0';2 p' e" d, F$ B5 w
        flag1 <= '0';' [, b: e/ S- N  Q& G) f
        flag4 <= '0';
. x7 D5 }0 }# O& E5 Y* U, ^        flag8 <= '0';* h9 h! ?1 k' ~# P
        flag14 <= '0';
+ G* w, C7 ?& P* a' ]2 C  Q* ~    elsif wck'event and wck='1' then
* f% m5 Q2 t- s1 H6 z6 ^8 c; f        if wen='0' and nrd='1' then" }1 }1 f" {7 p* x  `5 b
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
5 T6 Y0 q. ~8 p, b1 f" x            if wptr=rptr then empty<='1';  else empty<='0'  end if;5 H! I$ C! ?7 `5 b
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;- ~: T( Q; v7 U& [0 g
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
  I  K( S' a2 a' X9 C            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;$ ~. j4 j( `6 u: l9 `, D3 d. \8 T
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
3 n) f5 }# P0 K* H! [+ s        end if;
" ]. W4 ?' M3 ]5 q7 q& [8 G+ R" y    end if;% z& W" E3 n+ c( Z
end process;# T8 B% y# E! E. K+ c4 W0 C. o
9 u' ?/ R3 C0 |. Z  v1 L) X
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
# ?% S2 U' `! h! z. z& m+ _& h& X+ ~3 x
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
: V5 j& S* G( \/ _$ d- B2 B4 Z: I( c" y" o0 L7 P
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
5 ?1 z, F; k! D+ j; b4 y% Z) O- R5 u8 u6 `: S1 q
1.: C% y: D( B. _' h2 j! {: ?: x% ^, k
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
! S4 h& J# N- V' x' K7 N   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
' c* M0 {& B$ `0 l   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一: z  ^7 H+ l6 y5 S; |2 ~) \
2.8 w5 F/ u8 _2 T3 C
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
% g# U; X) r/ [   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出( V! _& z4 m. N2 x6 o9 H: l7 Q
   資料讀取週期RC最小280ns
* q2 r/ O2 X) M) Q+ K. h3.0 q2 \6 W. e& f
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期, r$ ?9 G" Y5 |- ~; W
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
" v3 P4 i8 ^. F& \( Y& ~   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間) I: q7 c, U) A4 K: z# q3 A( m+ s
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了: T: Z* j' E9 o: Q+ \
8 @& e2 X2 B; U' S' n# X
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
- ^0 J6 s% P& ~, O5 N7 V* X& U9 d2 X" j1 d7 p  `, y
第三個問題還是clock rate的問題
2 h! o8 K# K1 F/ _' g: P$ z& s! @- s
第一個問題留給別人回答好了...- {7 E8 y  {1 K0 f' D. X
2~3問題的確是問題沒錯, 誰來接手一下呢?& B& `  |# F) ^7 [4 |

" y9 S  k  a  C. @  p" l# }addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!& @7 L  O7 ]# S3 U6 D
& |' ]% d* k! d5 t9 Y" U* j
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
. H% b8 G' w, ]$ {! I[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
4 n) |7 _& ?; s2 b! J[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.! F; B% E8 {3 q; v& d& r
[4] Website of USC Asynchronous CAD/VSLI group. [link]
+ a, L. A# T5 f4 D  @[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
0 p0 P8 \$ _' o0 K! @[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 9 m) l7 ?  y7 {" B, \* _
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
2 e( q# I0 L7 j  ^+ w, N我會好好的找來研究看看- |# P  d  h4 ]5 l( @! ~
/ x( `7 w1 X. s+ V8 w
我本身目前不是從事電子相關行業,不過對於
7 M* g+ ]( ~9 W; WFPGA/CPLD,HDL,數位邏輯設計及單晶片等1 e' w! j* z! C5 Y4 R+ L( v, T7 d
都很有興趣,之所以要寫16550 code主要是想& W8 r& S2 x; {# B  g
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
2 z% L' T4 B) d0 i. y) x) }
, z  S  w+ k! C; c7 _' NFIFO這部分我有上其他討論區問過,可是都沒人回覆, A2 T3 s# p  E! W" P0 l
感謝版主願意跟我討論這個問題2 ~( D6 c! v9 B. Z, x# I

  E) w/ c' t+ k再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
+ B  X/ Y/ e" K* [不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見: h& e4 o7 I* z9 E8 h8 \
不然的話就變成只有我們二個人在討論了...1 r; U: T3 q$ G
9 {0 u* E6 `- m! w$ Z/ `
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
& [2 H! y. e) U2 W9 q2 M9 c! ^最近想到一種架構,用來做FIFO不曉得可不可行
7 }% a- z, q" o1 M如下圖所示0 y" i' [' {0 o

. K4 M* Z8 ^9 V, J  F: ~( N; ^3 D先就full,empty討論,trigger level不管% c& _  Z1 t. Z) ?, F# [
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
' t2 _9 b. T3 g. ?
) Z' b  r2 K# [; U3 y1.用額外bit(valid_bit)來指出register是否有資料寫入
( P& k  L+ v0 K/ [2 e6 U4 n  當寫資料到FIFO則相對應的valid_bit會一起被設定為1) \- K- [6 ^3 z2 ?
  當讀取FIFO,相對應的valid_bit會被清為0" B( @, x' e2 k4 N2 k% P+ O

1 M2 d( A% X) S* u5 @1 N) k2.wptr及rptr用bin count
7 ~8 @7 K9 c; n' M1 y7 s
: h' a2 I+ Q/ {+ H. p9 B3.full將所有valid_bit取and,empty將所有valid_bit取nor1 z, S1 B5 P  ^) o
2 |9 }) ?+ }; @0 W- |% _, T. ?  c( f4 L
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時' e5 j0 W2 \# Z4 S+ x
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
, z) V6 q4 R$ x  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
+ N9 J& n' F2 h; {7 T
' ?- G2 ^# r6 k5 a/ z/ r. C5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
! r. z' p, f2 T) V. T! R# @/ j  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
- |& Z: n( Y. J3 L; Q, y; ~) N- B  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接3 d! _' t0 Q' t" t( B4 F  T
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
& W3 b+ y- H% H  個位置是空但被判定為已經滿了的狀況)
0 ]2 A1 e0 q2 W( o! r* M
8 j9 V9 c# C, ]1 _/ g/ a, s以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
$ p2 N+ r, H: n9 i, l4 z+ A. y
3 d5 L9 A3 c; M, c5 a4 s  W2 s, Q如果不管coding style的話, 這個想法很好
. N( y4 p$ t% c) o, p8 r1 B4 b* l& K, ^
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.+ r+ P& v4 f1 C  R. B5 b5 D
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
( F  V$ M1 \, Z- |5 V' X# uanyway, 互相交流吧.
# l. {4 V0 [- R8 J  H% }* g+ {5 N: Y3 _, u* J8 }. R" d. t; t' K
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
$ `' y. A# s/ ^; m/ k我想到這個方法除了電路會比較大外還有其他缺點5 x9 m$ ?9 i8 Z

1 T- W5 A' |" j  P  W/ o2 a1.不適合做成容量較大的FIFO
; k% Q. Q4 \" ~: }% Z" m- \5 ]' X" {1 {* n0 u( n; g& ~
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
+ C0 X' E+ c! V( n) Y* I
8 U5 D6 h! l/ m! z8 N/ [! D3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
+ M& x. i% B1 I* X- Z: z   會有較長的延遲時間,所以速度被拖慢了5 p  y  W. f; |1 J6 P0 l( e! _

' q' B( g8 K: y) V8 x% ~) _' h謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
+ `  }$ U3 a# a! ?2 z* w  l& Z- H我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
( C6 S7 e- \* O/ v6 z! L" n但是做ASIC時你會發現其實很小的
# n; V2 h  o! Z+ R; q" H+ _
1 ?- R- `& ^! `+ o) v
' e; c/ B/ a  J5 ?2 }2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
( z% ], ~: M  t4 F$ ]* z這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了+ k/ J' v- o: a, ]8 p1 a- r: _8 a
# @$ M, B4 [( s1 A# X& C5 d4 d* x) q
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了; w! \# E( `$ R, P6 k
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
2 Y( Z) ?( f6 C$ U1 K) [1 X2 q, }2 Y

7 W! ?+ a. `3 n3 [! \1.- R1 g( ?/ _9 o1 C. @
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"* ~3 t6 f% X0 S& M$ q5 x

; d/ o4 @+ g- a7 z3 ?8 y   不了解這段話的意思,可以在進一步說明嗎
+ o$ n  B5 _( e7 m% _
' J, k& e& E4 b: T4 b; C! a8 G2.
( z" \# V( r! u4 j# @  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
$ M+ ?  p' i$ J2 U# L  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
* T$ W/ m% h- W$ S# K9 G! n- N  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
6 Y  e& N1 Q2 l$ I  請問有辦法評估亞穩態維持的時間嗎
1 t8 q' R( f. R* P  
+ @: f7 e% L( T. H謝謝# }9 I& Z8 R- L3 o! }

- H; v$ g% c- o9 E[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
( Y7 y5 b, P3 w6 L我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:; k( G* g: V; ~1 X
empty = true if valid[WPTR-1]=false. r: j, W. X- \( h- V
full = true if valid[WPTR]=true
  M! w. x( i' U6 Y0 \! g可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
( _$ K0 J5 p# s% n9 k4 [
6 j# z6 s: \; j: ]( V5 w2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
* W2 b  G6 u8 L0 l9 l7 `關於 metastate% O( r9 j! s! b# Z& H% Z6 r# g/ a
請問如果一個d-ff假設 clock頻率1 hz1 _" `7 v3 B7 K
如果剛好發生metastate,metastate這個狀態
* G$ s: k6 C. U! A5 `  p. D有沒有可能有機會維持1秒的時間長度呢+ B4 i9 Z6 E2 T' Q. q8 W
7 k' M2 W9 K+ Z$ V' K6 e
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
! o4 j/ O& y1 t9 m! S0 d. B! X3 Q" O4 w7 c: t' a
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 11:33 AM , Processed in 0.191011 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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