Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...9 i, g9 E9 Q) q
. E: I: _* k3 e9 V/ ~' J; E
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多6 I7 K* Y9 y3 k/ C
4 x5 A" o. A6 u9 C- I
那些信號也先估且如我假設一般& C" ?( x2 B. y6 M' |( F5 N
wen是RX收到一筆完整的資料時所送出來的
9 [; I6 H3 p) [" S1 J因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下): f6 C9 |4 N. Q$ ^( y7 K& O- {" q0 d
prptr:process(nSysRst, nrd)( P8 m+ Q" W* o
begin
/ T; S7 i, r: Y$ n) ?$ s) J+ w. P    if nSysRst='0' then! ]9 e" q( V# p& H- P" d* b+ z! L) |
        rptr <= "00000";
% A9 Y2 B: I3 [: k* V9 z    elsif nrd'event and nrd='1' then# H/ I8 e4 Z7 ]9 q+ C
        rptr <= rptr + '1';
; g4 \1 d; b, w' u9 c2 \    end if;7 l( N8 l; o- K$ \( T
end process;6 a: T' U  A2 x( o

1 T4 Y8 j+ z1 R  qpwptr:process(nSysRst, wck, wen)6 B0 V5 E" D  `# T
begin
$ J/ \+ ?8 ?6 T' l    if nSysRst='0' then
4 t, T5 J% b3 m% }: U        wptr <= "00000";. W& e! x4 ~. a/ `
    elsif wck'event and wck='1' then/ D+ t8 d  T* Q: s( ~7 M0 m5 X
        if wen='1' then2 `  j# c9 ?) `8 e. ^1 t% d
            wptr <= wptr + '1';. x( f- S, m1 d" F& e
        end if;& M4 z* O- h% \5 M( S# o
    end if;# m) W  v) o8 i2 p
end process;
- \0 Y# n' e+ y) ]9 ?3 z4 ?* r* R: t$ z4 j' e1 A
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
7 ?6 }1 X2 z; H7 K; d你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
& r* ?# v* E4 a
4 ?" a- l0 Z& ORead buffer部分
/ S! {) W) J/ N: u7 @# T- M. Y0 V& s& B0 j1 x! g
--read_buffer
' o  M3 L7 S1 D. k0 H+ Zwith rptr(3 downto 0) select rdata <=
. O0 M/ H2 x& v+ X    fifo(0) when "0000",  F: m9 Z. Z* M! O2 x& i2 M
    fifo(1) when "0001",$ t) S- E) L0 O0 x" i
    fifo(2) when "0010",
2 G1 M2 W" D) n0 r# ]' @# F    fifo(3) when "0011",4 ?4 V5 U* o; N% a- o
    fifo(4) when "0100",
  e2 v2 N6 S0 R/ G  N, A    fifo(5) when "0101",7 |0 d& a. t+ p+ H; [' P
    fifo(6) when "0110",1 D4 u5 s( V1 T! v  N- [; _
    fifo(7) when "0111",
0 s6 ]0 S6 M* K" P5 H) \4 ^    fifo(8) when "1000",$ ?- a' c3 x4 Q! I% l# |, j
    fifo(9) when "1001",
8 r/ ^, f( ?! O7 ~+ ]6 Z& c    fifo(10) when "1010",
5 W! X' b, B4 G1 C* q5 b& R    fifo(11)when "1011",( H- T# A' B9 W: T/ E" f- m/ T
    fifo(12) when "1100",% T, F9 H- R) |9 {2 {
    fifo(13) when "1101",( T( D9 V, _! a( U" s
    fifo(14) when "1110",
+ @# Z( G) N" q    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分" q! Q) m3 {& n! D* _
4 X& O8 P3 J/ e+ `# M! g
write_buffer:process(nSysRst, wck, wen, wptr, wdata)- L# c5 H1 F* z* l- Q1 H( m
begin' [* @8 x1 G# l3 l, L8 }. G% c
    if nSysRst='0' then
6 V- A- O% ^' d+ s9 ?* p( Q        for i in 0 to 15 loop
+ u6 T* z2 e4 w9 e2 u( m            fifo(i) <= "00000000";$ I  Z$ V' y' _" T: V4 n/ O
        end loop;
8 Y6 o% [2 R) e. m+ e: L1 |    elsif wck'event and wck='1' then
; J! B9 e+ F: [        if wen='1' then
. a% \/ \  K: w+ `; J: s            case wptr(3 downto 0) is8 M' C/ J0 L2 l  {5 T: M. Y! I
                when "0000" => fifo(0) <=wdata;$ ~! k4 E7 e6 [) P( n8 T
                when "0001" => fifo(1) <=wdata;8 ~" S7 ~/ F( d8 [/ _/ O' z
                when "0010" => fifo(2) <=wdata;' P) t, ?; a( I2 E' r2 O
                when "0011" => fifo(3) <=wdata;
. z6 T0 B: k8 C8 b$ u8 p                when "0100" => fifo(4) <=wdata;
" w7 j4 f$ e; A7 p                when "0101" => fifo(5) <=wdata;9 c4 s/ }# ?; X4 o
                when "0110" => fifo(6) <=wdata;6 e  v) g3 g5 Q: f( K3 I
                when "0111" => fifo(7) <=wdata;6 S- |/ K6 V" z2 _
                when "1000" => fifo(8) <=wdata;
: V3 i/ q1 o# T                when "1001" => fifo(9) <=wdata;
+ A) g; `- x/ B; x5 ^- y" e                when "1010" => fifo(10) <=wdata;+ b$ R# s( r2 K8 b6 `& p' ~* c
                when "1011" => fifo(11) <=wdata;
2 s2 ^- C, g. T5 `+ P; R                when "1100" => fifo(12) <=wdata;6 K" y  v. X% S% k; a9 m
                when "1101" => fifo(13) <=wdata;
/ c% d7 Y" ~8 I$ {( O  U3 t                when "1110" => fifo(14) <=wdata;8 {$ e. S+ I3 Q
                when others  => fifo(15) <=wdata;
! W" s  x9 [9 b+ j            end case;+ K: C9 U' t) [
        end if;
1 e7 U0 |4 I6 l) I! `4 I    end if;$ W' T) D$ g& b9 @* }2 A7 e1 ^
end process;
  I4 X: ?) d% ^9 z/ H' c* q
, G: w/ S$ K+ K, n6 M[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
! ]! n; r: U9 ~  \我先做些假設
6 O8 K* u! X! ~2 r# @+ E8 v, y1) /RD動作時狀態不能改變# G0 v6 W* [6 W6 Z1 c' u
2) wen動作時也不能改變狀態) N8 L# B+ l8 l& U
如果只有這二個case的話以下這段code或許可行
% F% F# E6 Q' E- k- `6 K6 P- s- b4 S  a
status:process(nSysRst, wck, wen, nrd, wptr, rptr); h$ [% `+ l/ {! Z; O) B, c
begin4 O% e% P, m+ ?3 x) q  @" p' d
    if nSysRst='0' then
# D/ c1 Z# [" q) k) h# _  s        full <= '0';1 I7 l5 U. y7 t0 ~
        empty <= '0';9 x% h; x! |% M6 l; d/ v" ^
        flag1 <= '0';7 m5 V  H* ~; }' I1 ?
        flag4 <= '0';
( l& P5 ~3 D" s% Q3 ^! }% x' ~2 F        flag8 <= '0';& |1 Z: [. ~- s: O+ P, O: K
        flag14 <= '0';. \% f  O/ b  {8 B; g
    elsif wck'event and wck='1' then
0 o5 H! w. H( L- G/ a        if wen='0' and nrd='1' then2 x* [% n3 b: a, ]. f5 n: O4 o
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;: c+ K- C" I5 [( R3 ]
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
4 @; B) r2 c( v8 i0 K- u8 O            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
- U- W8 c8 b! N# K: ~0 F; K" k            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;! Q0 k' A  F6 s" Z' M8 q
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;: C7 h( p) v( J7 ~9 {& Q9 ?$ I
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;5 f# c% E% ^, o, i
        end if;
! A- X' J9 U* g, q) O    end if;7 t* P: O( h' A3 X* _% K, N( j+ K3 g
end process;
. w) Q3 O9 a9 L
; c- C5 L8 j' O) C; o+ v, S[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
! q' C; {0 }' t. a+ f3 N, M4 X- x( D  D0 i* M  h- K/ X
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例4 P' }) W) P; q) z2 p. Z+ y. K

4 ?" @0 E( M- E! d" r; K將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論# [8 D! ]) W% i/ n% ?  s: S

% S9 ~* o. N% Z1.3 p1 `/ o8 M( }9 Y& D, [# q
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
( g2 N& P" i3 r. P- `& ~2 a4 h   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
" l* v7 F; l( w$ ^) {   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一2 P2 s8 M7 C! b$ S, R) [& _
2.% Z% B; ^0 h/ w) e; j
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高% ?, `% g( |+ L6 P
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
8 S0 p6 r; I6 b/ L   資料讀取週期RC最小280ns2 `+ v+ K. i* [. u$ ~
3.# y% ^1 V1 V5 _; c: T& j+ Z
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期9 @' t3 e" m9 o, V0 Y
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
  j! D) p) e4 P9 W: V. f   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
( m0 G8 Z( j6 Y   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了/ @% X3 K2 i1 m! b3 v

3 y. M/ W3 G1 p. x第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
, H) A* C) B& B8 q! V2 n; n; q' K) Z9 X- {2 `4 ?
第三個問題還是clock rate的問題, ~2 N) J0 ~- M- x- S

% F; v- x6 x: u. F; q$ g第一個問題留給別人回答好了...0 [6 [: k% x3 _  ~& k, ?
2~3問題的確是問題沒錯, 誰來接手一下呢?1 v2 e& y; J* d* [  \$ i0 h

  ]3 @1 W) [" H. c& k% S- ~: [  {addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!% T$ V# z; x" c% a6 N. g9 g( a
  {+ t7 x* G0 A- m7 {( r) K
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]& n8 I+ c: U* l& m- |  K
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]2 B  ]( [, q$ s7 C; G) a  U9 F
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.6 ~8 o" ?6 e/ N. |: I  p
[4] Website of USC Asynchronous CAD/VSLI group. [link]
# K$ d* B0 S4 t: t' H6 I/ [1 T8 d[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
0 B: s' f2 S& q( `1 a2 t" M[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] ; _" D" Q: ]' l8 V! y5 m
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料5 g7 ?) D9 e: ~6 D
我會好好的找來研究看看& J' w& }7 \! o

7 T7 i# s! p1 L" i. H我本身目前不是從事電子相關行業,不過對於
' T: }! u$ h8 z* ]$ ^* U* gFPGA/CPLD,HDL,數位邏輯設計及單晶片等
( _0 {, F4 M, O( H, F0 |% h) }0 h都很有興趣,之所以要寫16550 code主要是想
3 o+ D! ~% B( h1 V( b挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
% W3 L' L" {- \$ k2 e3 U. r; e  y3 @( k& D
FIFO這部分我有上其他討論區問過,可是都沒人回覆) G4 Q; k% t8 e
感謝版主願意跟我討論這個問題, l% x% z8 T$ c3 r% j9 J
2 O! l6 i' ^2 k- t0 Y' i/ o1 y
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
7 o& O  u6 I' k8 M/ B不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
% J, G# Z3 l; k6 c8 h不然的話就變成只有我們二個人在討論了...
" u0 p# F* k! V* v# `2 E$ b
3 y% ]% \/ Q; C- T" Z$ C9 G過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好4 V8 L- y/ t2 x- {
最近想到一種架構,用來做FIFO不曉得可不可行! _' i3 m& s- U; n5 B
如下圖所示/ b' o2 V2 t- o# p! _' z$ f) x
9 `+ E. g+ c" \7 \
先就full,empty討論,trigger level不管( H3 k1 f4 N0 P* U, f& P$ N
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
" _4 V& c& P. `" |, p8 _2 S9 q2 i
- Q  S% C4 }2 n/ j1.用額外bit(valid_bit)來指出register是否有資料寫入
* s% Z# G, z' A1 h# D# k# Z0 E  當寫資料到FIFO則相對應的valid_bit會一起被設定為10 k% e% S5 V/ m( s' y( m
  當讀取FIFO,相對應的valid_bit會被清為0$ s0 m- G0 I4 k5 t# g
; z6 ]! E) H2 q7 o; Q( F
2.wptr及rptr用bin count- ?0 S* i( B0 z4 n, \3 _0 I! h& Z: R4 u
4 U$ S& x4 y9 V3 O* W1 G  e" `
3.full將所有valid_bit取and,empty將所有valid_bit取nor
9 D0 n; `0 |6 k# v3 a, y
  U4 ]! l) }# E$ s  Y' r$ k4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時4 Z& Z, F" _; P0 }& t4 p# S
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
/ ?$ r) X. c4 H3 `  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已9 L. N. b+ E3 G
/ ]. P* m* p) Q! f6 Q" D6 t
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
# G% {" F% p% ~. Y1 P8 F$ I6 z0 d2 N  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk  u/ ?/ D- ~( I9 u; z0 t/ \3 V5 g
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接; ~4 U! P% }; U
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
! W' O2 J( [, ?, Y* ?; B  個位置是空但被判定為已經滿了的狀況)
0 w$ X. E- P4 g: g% V& T
5 r. V7 J6 ?( ^以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
6 E% A+ v0 i$ V- P' M8 ]: i4 W+ n1 L
如果不管coding style的話, 這個想法很好1 C4 Y$ r/ k6 B. f

( P9 j* b3 v3 j3 E+ y4 _相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
5 v$ w$ u; b& t% I跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
  i% p  ~6 O% f' U( R/ ranyway, 互相交流吧.
: v0 }! p5 x) ^/ Q. M$ ~0 `/ D$ {- i2 d" `8 P
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
) x! M0 ]& D  J0 H7 @0 ^- D我想到這個方法除了電路會比較大外還有其他缺點8 i* \$ _' @; m

) m5 B8 g. C, |$ L  n1.不適合做成容量較大的FIFO7 m# K) K8 z" D  E

5 w: ?9 Y3 `1 u% c/ l+ B6 Z: M. l2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
: u  {, h8 g! c* t- |) J( F% L. V" X$ `. T3 ], y
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
0 U- [5 ^; @6 t/ V# w   會有較長的延遲時間,所以速度被拖慢了
. x" P; B/ s; `* M; V. @0 H  n( ~: B5 g7 X# L/ @
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
5 O6 R/ q- e$ e# W6 w我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大2 v; t) {, g* r+ o: B; `% Q
但是做ASIC時你會發現其實很小的
5 ^! N" }( n& @$ D8 Z! D) j7 p& z3 }7 d7 z0 V' {: e
! b' X: s& {* \9 m; s1 p
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響1 E* t( M3 V- r( M% I
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了9 `, ]# a- X% n: _2 |

9 c6 N, [0 F" u( v$ \' U3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
& {$ ?' p" q5 _6 V& r  ~5 ?7 b) c相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好2 h( l- a4 ~0 }5 M
7 @  A5 m7 D% s2 c" h0 m/ I
  A9 ^# H& N$ d/ q/ M
1.% E" G# [* @) k8 ^8 g
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
$ a: ?/ e/ @$ W! l7 [  J8 u
% R" O% P% m- g( r% G7 [" H( Q$ n   不了解這段話的意思,可以在進一步說明嗎
( G; Z0 U/ ^& O! I+ H5 X1 H" N3 i
( o# J5 y1 E$ Z+ W2.: b6 a- x8 r1 z+ v5 M% V
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間- ], h. I0 P9 m5 a3 a
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
& T" P  J2 s; S1 e( }6 i  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了" _3 v6 {3 Q; B, ~
  請問有辦法評估亞穩態維持的時間嗎
  j3 t( z* i2 d% p' j- Y6 ~  
& B- W' @) J/ R+ }謝謝
, W6 H+ |: ]" W% V! T
# b. s& V; `: J/ S7 g[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. 6 o; B6 i. q9 P; B
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
$ X2 R0 U& o6 g/ `$ `! @: mempty = true if valid[WPTR-1]=false
* B2 g6 G5 O# s0 X  P' Sfull = true if valid[WPTR]=true5 |5 N0 j7 X9 w% d3 B4 l
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已$ N6 z4 `) o) H

6 x) _. y/ t* O( z& {0 f2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
! J$ G- i& U+ I6 i- M" K: f: ]; O關於 metastate
4 P( [8 x+ x) M9 D6 r% ?請問如果一個d-ff假設 clock頻率1 hz0 f9 j; l0 z; A! O3 k1 u( V- K
如果剛好發生metastate,metastate這個狀態
: y, _; s2 t# A( T有沒有可能有機會維持1秒的時間長度呢# Z, v; J. Z* J$ X. p

9 K+ V: s; i$ L; e- }謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
! T8 S; l! C  D
" I% A. p) w% |% ?metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 03:13 PM , Processed in 0.134517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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