Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
* J% F0 b, U: C5 H
# ?- B5 x3 i: M% h這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
) w: b5 K( n( `6 |
7 T( |+ Y( p& F  |. P+ v  l  S那些信號也先估且如我假設一般
6 z3 J! N* D/ i; y4 U1 J, |  h+ ywen是RX收到一筆完整的資料時所送出來的
% H( l# k* Q6 j- [! V因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
  W. H" Q- g9 j8 u$ F, N* mprptr:process(nSysRst, nrd)
2 i! n9 X7 e/ w; {3 j. ubegin  F( D" L7 K7 h5 n
    if nSysRst='0' then
. o6 S! ~6 i  t) @: }        rptr <= "00000";
1 T# R9 F% c1 _4 e4 m, r8 b    elsif nrd'event and nrd='1' then
& i8 r4 f4 J# Z- q! Y" o; o- L4 W        rptr <= rptr + '1';
* p* d) I& x8 @4 `- H( H$ @    end if;
% j  Z4 k1 X; h. |7 }end process;7 c4 q, m* G# @  z
& |7 }* H  c: ?" B5 |3 d
pwptr:process(nSysRst, wck, wen)0 }$ Y" [* k/ K+ A* i7 {5 Z
begin
; `! j) y% Q( }. U8 v    if nSysRst='0' then# ?* A7 ~2 t, R  d, ]; v
        wptr <= "00000";
4 R9 i- w* M7 M" _/ |& i3 F    elsif wck'event and wck='1' then
) A3 i1 M9 k+ j2 r1 S        if wen='1' then$ v1 [. q% B; K6 y: y4 q: W/ C
            wptr <= wptr + '1';
( p2 O4 x+ a  B% _: t8 q. @# R/ f        end if;
0 \: H8 p- g2 C  W6 X* Y: f+ T    end if;
' H6 V2 n) y# `; ?7 {8 wend process;" |; U. I5 i9 o  J
9 T5 J* ~+ }; D! {. ]
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
" z& ~* _9 h1 M8 S$ {  V你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key/ n) [- }" {- A4 E4 O; L/ m
' d. K6 P+ s% F% f3 ~
Read buffer部分% K& L% R; C" _* t$ J2 W
  m1 u2 l! Y) x" G
--read_buffer$ ^6 F6 {) T. A  m
with rptr(3 downto 0) select rdata <=
1 }& E* @! N- E! V( z/ Y6 r    fifo(0) when "0000",2 ~. N( |. c! p- S+ Y3 g. G- Q
    fifo(1) when "0001",
: A0 a; K' o( ^5 g: Q    fifo(2) when "0010",
7 [5 k! C3 l# C* [    fifo(3) when "0011",8 o8 V# I/ R: L0 ], O6 ]
    fifo(4) when "0100",
/ B0 V& V# I# i    fifo(5) when "0101",
$ |3 S9 z7 N8 K( C6 ?; q. }  A    fifo(6) when "0110",
  x: Z3 y# z; X# }$ H# R    fifo(7) when "0111",
( Q6 m: B. X9 ^6 x+ _" K    fifo(8) when "1000",* X% B6 V( J- a8 l, w" E5 p
    fifo(9) when "1001",9 \" _9 b6 x" c
    fifo(10) when "1010",1 s  Q: [: Z+ e5 T/ p& t
    fifo(11)when "1011",/ s- h4 B$ `' ^# r( ]
    fifo(12) when "1100",- [5 k4 [2 v6 s$ Y. X6 y
    fifo(13) when "1101"," U! G6 l% C3 v; S& L( V
    fifo(14) when "1110",
, J* v0 s. O1 q# {  O    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分1 Z# @! k4 \' d" B

: t2 q( D$ H9 R! D1 Z" E/ ^write_buffer:process(nSysRst, wck, wen, wptr, wdata)
5 ?  |7 N/ |5 H5 G- G5 P+ [begin5 v+ i# P" N8 V! c+ W4 q+ Z
    if nSysRst='0' then
1 y8 t4 a8 j; x) F7 I, J$ ]        for i in 0 to 15 loop
0 p9 v" }7 q; |! W" h; S) A            fifo(i) <= "00000000";) X; D' H" S1 k' a! F
        end loop;
1 b* b" Z' i. O5 M/ K+ h2 j3 m% F    elsif wck'event and wck='1' then4 }# c( Q1 i3 W3 Z! n
        if wen='1' then! O* R' N; ^) i3 i
            case wptr(3 downto 0) is
, [( F2 q$ |5 O+ L" A1 d3 J' A                when "0000" => fifo(0) <=wdata;7 {7 @0 x$ T3 L" g0 B* q
                when "0001" => fifo(1) <=wdata;
2 e/ Y( R1 L2 f& {* B                when "0010" => fifo(2) <=wdata;
6 F6 X$ I/ s7 ~                when "0011" => fifo(3) <=wdata;
  V2 s# Y% {  E+ C                when "0100" => fifo(4) <=wdata;
, h" ~2 v; Y- }' k- }, r                when "0101" => fifo(5) <=wdata;. V/ g7 @. y+ L
                when "0110" => fifo(6) <=wdata;
2 k2 u3 X: L' [8 C: r                when "0111" => fifo(7) <=wdata;
& k9 J  E: F8 r" @; E- s5 J& G                when "1000" => fifo(8) <=wdata;
) M8 E$ C5 W  T5 z/ H5 X                when "1001" => fifo(9) <=wdata;& I: h4 a% J* Q$ }
                when "1010" => fifo(10) <=wdata;* L4 n' p: I" d& @6 T
                when "1011" => fifo(11) <=wdata;8 b& S! E8 `  S5 q; D- Y
                when "1100" => fifo(12) <=wdata;: q7 a; {( X3 r$ ?; V0 {
                when "1101" => fifo(13) <=wdata;
. {: c) [; e8 o; Z/ I7 ^* w7 a                when "1110" => fifo(14) <=wdata;0 y, V$ B9 P9 N! i7 h" Y8 F
                when others  => fifo(15) <=wdata;
# y) X1 U6 |* C; e$ D5 o5 P            end case;
# Y; A; N! }, M' W* Q        end if;
3 l3 E  i+ |% y! u    end if;
/ [- f, d. M# r  nend process;
6 M) A2 |6 _' O
  w: J: U3 f0 v2 \3 R+ {+ ~3 E[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分8 U) v6 t2 j# f9 r7 z6 e3 I9 E
我先做些假設
9 p* u8 B3 Y- ~1) /RD動作時狀態不能改變
7 ?. I7 F# I( W/ }. ?. S0 d3 |" h2) wen動作時也不能改變狀態1 A: w% B' ]4 y6 o" J% L+ N
如果只有這二個case的話以下這段code或許可行
" [/ p2 A5 @# R* ^. b
4 W& X3 L7 X9 R' h4 Y. S: ^status:process(nSysRst, wck, wen, nrd, wptr, rptr)
8 I" E% I/ L* p: Z3 v* a1 K, J1 ubegin8 Y1 c; K+ J  L6 Q9 t
    if nSysRst='0' then- |9 r4 d  l: y6 v
        full <= '0';- i) S3 p% W2 F
        empty <= '0';/ |3 P8 B4 {) `. t& G
        flag1 <= '0';) S7 Q% a! l; w- b1 v. A; W* g
        flag4 <= '0';
3 G; k6 c% P$ A' [) S  p        flag8 <= '0';
0 a2 \( f# |; Y) F8 e5 {        flag14 <= '0';
9 w! ~3 Z; W, s/ V% R5 ~    elsif wck'event and wck='1' then4 P" C, k) e+ D$ Y3 B1 y- s
        if wen='0' and nrd='1' then
$ S4 m$ }; r6 I. I* P4 Y            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;3 q9 ^8 g1 w+ y
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
! c7 {- y3 _4 k5 S            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;5 \) t3 w9 e3 w  Z1 x7 i  q
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;+ \) s5 E2 F" `
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
" }9 W) e- {3 U/ H4 w! M0 K            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
5 V9 W6 Q& V$ ?5 J: s; x) W        end if;
. k- Y/ b4 i' F- c+ a    end if;
/ |3 Q# l- Z, d4 Q2 @+ d! tend process;
) b# G! ]8 U3 q0 _
% |8 P; o$ Y  s) @9 ~; @# E[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高$ t5 H& q( [, e. R

: ~5 j9 m0 ~, V  m: n好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例* S' m- e5 T5 y; s# Y2 z: f

$ M3 b" t7 e9 R將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
8 _0 S  |! U# G, w! z8 X5 d; ~- X. z" p& u4 o- e+ c9 n
1.
' k8 p" E, F8 M4 {   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"1 C' X' A, j+ J, A
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
' e% ]) f+ r2 A   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
' g3 E  B/ o% O# l( t  ?# P: }$ v2.
* Z8 J6 [# P) u* J9 o/ w6 }   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
2 ^0 E( J& F9 K- z   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
2 _3 r# B$ l) k1 p5 a, e   資料讀取週期RC最小280ns
  E- v9 l3 m: @) B3." ~- L/ L7 n  w, E0 ]3 m+ K' ~& D
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
, y( D2 J/ Y) O0 c/ v   小小於wck週期的case,會有問題,以trigger level造成的INTR來講& C1 I& r6 @5 L+ g
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間; `" _1 \6 x7 q3 \( K7 A( F
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了5 H4 B( m) {4 J4 H( W5 T
2 L/ \. L+ O8 j
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
" P8 _" c6 |  v* S3 E0 l8 R; G0 z' T3 v* ]: J6 C  \8 G
第三個問題還是clock rate的問題
0 C2 i1 Q7 q$ z9 L$ R- f1 t; [) v$ p
第一個問題留給別人回答好了...
1 f: A: i( Q1 t' M1 C# a- ^6 k2~3問題的確是問題沒錯, 誰來接手一下呢?: S( M1 ^6 i+ R/ g8 R
  ~+ T8 D4 ?1 x/ ~" ^+ ]' i
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
0 {6 ~3 R% T( v, a5 S" R' J4 i1 k  S, j
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]; @& H" i" T) ~/ _) |
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
  `. o$ k5 L1 L1 t4 U[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
( q) E; q! P( G% ^6 ?/ i[4] Website of USC Asynchronous CAD/VSLI group. [link], e( R$ P7 s# V# x+ n
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]/ N1 E! j% U# ^- o
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
/ k; c. D) U4 S. u) J[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 Z0 i- u+ q8 r9 {; z# V) p0 {, E
我會好好的找來研究看看
2 Y! N9 j. Q, A: o/ j$ g1 o4 U
- {3 Z/ j# R0 j我本身目前不是從事電子相關行業,不過對於. u& Y+ l0 g& `2 V6 d- c
FPGA/CPLD,HDL,數位邏輯設計及單晶片等6 G& C, j2 ^8 @& p+ l( R' I; L. s7 X# \4 J
都很有興趣,之所以要寫16550 code主要是想" D* _/ n' ~0 A# F
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
% ?$ ?4 Z4 X; D! X1 r6 f: y! T: A
1 W6 a% v- x# x$ T. XFIFO這部分我有上其他討論區問過,可是都沒人回覆
% |8 j- E9 j# ~, l8 l3 m感謝版主願意跟我討論這個問題
; ?% g- ?' r% E: Z- f3 W! W5 ]# ?' v
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
6 e+ U+ M4 X* Q6 A3 e; E不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
2 P+ [" {7 s3 r( C不然的話就變成只有我們二個人在討論了...
! r3 T7 _" G0 S" `8 {5 g  v
0 a! }6 Q! E# Z. ~$ x過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好% i/ c) w6 w; U6 \3 v
最近想到一種架構,用來做FIFO不曉得可不可行7 d0 i- e, \- m# h
如下圖所示
2 N5 O1 x6 V! X* Y) s
! o# ^4 W; a# Y; x先就full,empty討論,trigger level不管0 Q# m6 U" d" X+ i3 E
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間+ r1 ~8 |: R4 u5 v$ W/ L/ g5 d
" S! J* z- Z; v7 u! C+ y; Q5 K
1.用額外bit(valid_bit)來指出register是否有資料寫入
" R- {8 ]* L2 v, `( z- f9 a- A  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
% ~) D4 e( }3 x8 x0 G  當讀取FIFO,相對應的valid_bit會被清為0
" o! F, k. m4 H5 i" @6 r
; Y" g6 Y7 y+ ?* [2 Y7 K2.wptr及rptr用bin count7 z3 R- t: ~$ r7 @9 \7 q
$ ~" n7 l* s6 t& r3 {  C
3.full將所有valid_bit取and,empty將所有valid_bit取nor
( v7 y/ R( [0 \1 x, g' m* q, R3 {+ B2 z+ E5 }
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
) G* l0 G3 A. N# A  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case+ T5 [5 n' J4 E! M, p' c. n2 D5 i
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已0 F# t5 N! Q( q+ d' ^% X2 w/ ]

4 J" z( ~6 G  d, w4 R5 q$ h5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
$ Q3 I" F' f( T3 C' Q- Y, x- t  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk" n3 X3 t3 ~# N& ?7 Z
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
, K$ w- N) |9 v, j) S  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一, }/ G! P; m6 J# z8 t
  個位置是空但被判定為已經滿了的狀況)/ j3 [3 ~; p: S- f# X0 M4 x: T

' d! a. E# H; I! P; y以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意% w, y1 ]( P) x; P: _
& A" C. K/ L- L
如果不管coding style的話, 這個想法很好( u! S" Y! b' |
2 i( B5 F+ m- [: y- B) @
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.6 V" @! h: w2 v
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
, V8 O8 g& b+ L* C- T: N7 Aanyway, 互相交流吧.
7 w" m8 m! }( I/ x' W7 o
2 l0 b: k; L* }" \* l" u改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好3 q/ Z8 p2 Z, ~5 N& w) R& {! }" U
我想到這個方法除了電路會比較大外還有其他缺點
: Z' K, P% F2 x6 B: s
0 y: L7 v* z$ s1.不適合做成容量較大的FIFO( D. ]! g& K5 q3 L8 z* _
6 o9 y4 R: y. W3 M
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響) J1 O. k3 D$ q

$ m! y& X- {" ^2 z% ~$ w" V) e3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣0 P$ ~8 K/ [! w( [3 P9 ]: E4 [- }
   會有較長的延遲時間,所以速度被拖慢了- r. c; N& ]/ o. Z8 ~
0 K1 @1 P) k" O( h
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
1 t% d+ k; y: x我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
$ v5 ~. `6 r/ W) h% w但是做ASIC時你會發現其實很小的
/ S3 D6 l. l7 b: q* p4 b. e/ g
! G3 u7 i2 [0 X. l& N' {7 J" a7 G7 ~0 X9 C' J: v$ }
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響/ c4 {0 Q9 T" v! m
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了4 b) e) c$ E6 ?" _6 a+ c
" s  Y  `0 j8 O2 u5 b; H! @* i) Q; c2 z1 k
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
5 X( p$ b& N3 V# k相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
) M7 l- _2 I7 Q+ Z
; A% U- x3 T6 c, h3 K' E4 r( r$ A: r; r$ c8 d! d% x" d
1.9 f/ K% [6 f, S: i2 _# k, o+ g
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
5 n9 \8 A1 n" o8 H7 ?2 q6 L9 S+ y2 O* q" I9 B- R0 _+ Z% F4 z4 y
   不了解這段話的意思,可以在進一步說明嗎
: ?9 J- E: o3 x1 K  a& \* g% D" n- S. r' `$ t
2.9 t0 c6 F% p5 \! I; e/ L
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
1 s+ k9 n# K% C  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
  h- `$ a- K$ P. C7 A* X7 L  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
1 P5 z. M7 X& H3 {  請問有辦法評估亞穩態維持的時間嗎
, I6 p3 F9 m* g* ~# h  
8 C; W% G6 o5 Z: x) ^謝謝
2 X) G. Q4 c( O  p2 }! `+ M& ^/ C3 g6 j# ]9 ^" U6 D
[ 本帖最後由 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( L- y( Y  _# n9 |( o我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:5 N4 K) H. J+ ?
empty = true if valid[WPTR-1]=false
& w% ^+ u+ a9 j: j8 ~  u) ~+ _' Mfull = true if valid[WPTR]=true$ ~0 }, T9 Z& ^4 f0 v/ \
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已1 R' x1 \; T/ B& u/ i0 w8 U7 S
1 B. M" s  n0 W; _
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好. E+ w0 }& p1 J  k% K
關於 metastate5 ^' k- L- N7 x8 V
請問如果一個d-ff假設 clock頻率1 hz8 `5 B! y! l) c2 [5 i4 d3 T! J
如果剛好發生metastate,metastate這個狀態
' z2 Q1 M, M: V! c3 R0 f有沒有可能有機會維持1秒的時間長度呢
' K8 Y2 b7 M8 \$ v5 p: v1 [+ h7 x2 w) [; S
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
$ r5 I2 V% \1 L& n  m
/ r8 d5 J5 c: T" gmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 04:18 AM , Processed in 0.148519 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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