Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...! j( o# H( K; Y8 J: ~# a% j" m+ o

) O0 z/ v4 g1 {5 G這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多4 o9 e8 O1 ^( R+ U! U7 i

2 z) P4 n! B3 o* [  S那些信號也先估且如我假設一般. j4 \! z4 u. t# `3 P
wen是RX收到一筆完整的資料時所送出來的
  ~" o6 n. p  D! H3 f因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
5 o& L9 [0 L2 j" f6 I% Y$ @prptr:process(nSysRst, nrd)6 O5 K4 v: v( j' E5 s5 w
begin! k9 J  J7 i6 e6 x6 b
    if nSysRst='0' then
1 R& h' |+ d/ w' M6 c8 s( Q9 R0 i        rptr <= "00000";# j% U1 M# I' c" Z
    elsif nrd'event and nrd='1' then
1 S0 ~7 o' q8 t0 J) Q) ]        rptr <= rptr + '1';
6 z0 i" q5 G5 _5 o! o7 U    end if;
9 c' {" X, R; n  r& b5 X0 {0 zend process;; z4 |* v8 ]! B* i( @

8 i4 q- K! O- R; e- v# r, P" |( r* i  ipwptr:process(nSysRst, wck, wen)
5 V* [' V- N2 x- L8 v9 t  n. z4 Mbegin8 y4 O; h1 d  Q% M- s, H
    if nSysRst='0' then
* n) X; P" `# a# m        wptr <= "00000";( }7 K2 k2 P+ G& H% b) |! c" V
    elsif wck'event and wck='1' then4 z+ w4 V6 H1 d" u( m6 Z: H
        if wen='1' then
3 m; k% t0 a0 {3 {/ ^" \6 h            wptr <= wptr + '1';  c$ P; _9 q8 Y
        end if;$ l" d7 l9 J; @" @8 ^4 M
    end if;/ z4 b$ ^8 i/ Z9 Q4 B3 e+ ^1 z
end process;
' [4 L# Z% r4 O/ w# ]% w: y% `* l" }" v! d9 @7 l& p( Y) V
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
  A! i* [7 b3 ]* \/ w% p你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
# M" U% x7 X, b  ?  v9 Q6 Z* a- Z0 b% y
Read buffer部分. y: C5 n9 Z' ]" y1 x
8 S1 E5 h3 a7 X3 {0 M
--read_buffer
! M- C$ @" r+ Z* \with rptr(3 downto 0) select rdata <=( n  m3 G( p/ U0 B8 v+ c* j
    fifo(0) when "0000",
6 @2 a- z9 s6 J" y    fifo(1) when "0001",* l, k# w8 d! f8 _( ]5 \2 n/ k2 z
    fifo(2) when "0010",
7 {4 x- q. G) u5 q8 V1 C5 c    fifo(3) when "0011",
" `  P3 Z- k! c, k    fifo(4) when "0100",
3 N( L/ E# N( y, G  h" y1 y  M+ v! r    fifo(5) when "0101",; K$ t7 ^) ]- s. A& Y
    fifo(6) when "0110",: a, e7 D$ H6 v+ o
    fifo(7) when "0111",/ Y' ^! J# \6 X# T" D0 T7 W& u+ D3 @
    fifo(8) when "1000",; e" P7 H( z4 x1 c
    fifo(9) when "1001",
8 M, j' \7 G2 ?+ `4 D$ l; @: L    fifo(10) when "1010",
4 F" y9 n9 a! |& P3 {6 W% b    fifo(11)when "1011",% w3 B6 ~  q! s* Z0 l  y2 {
    fifo(12) when "1100",5 X1 c; `! \; }+ K6 ?. M
    fifo(13) when "1101",7 z+ h( |  l1 i
    fifo(14) when "1110",. _. w, N7 L$ {0 @: g
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
4 y) G- q( K. ]6 z% v; |
4 R7 Q7 f1 b$ S5 Y. d# U+ t& {$ Iwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
* i1 n  t. Y3 w. @: }# nbegin4 P) y0 t# Z; s: F6 j
    if nSysRst='0' then
4 V# [& Q) C0 L/ t1 F2 v; b        for i in 0 to 15 loop- X$ {3 g5 i. \# E; J6 s4 C
            fifo(i) <= "00000000";5 B. ^. h/ `7 ]! C; Y: ]
        end loop;6 v5 h) t* A# {
    elsif wck'event and wck='1' then5 y$ Y# [. `, U; i3 ]* A
        if wen='1' then! X  d5 v* T; B  x6 M6 t
            case wptr(3 downto 0) is; q: z7 H# k$ g/ a3 ]9 a) W- u
                when "0000" => fifo(0) <=wdata;$ v* G1 H) g, _4 D
                when "0001" => fifo(1) <=wdata;
/ s: r' \4 m7 M& ~1 I1 G                when "0010" => fifo(2) <=wdata;
; t( {+ O; L/ x: n                when "0011" => fifo(3) <=wdata;
% }# f1 x! \) e, B* L3 F                when "0100" => fifo(4) <=wdata;
& G7 k. Z7 ~* r/ f/ `2 ~                when "0101" => fifo(5) <=wdata;& ^& R& v0 j4 E! M  w
                when "0110" => fifo(6) <=wdata;
3 i5 d) X% }1 P% l                when "0111" => fifo(7) <=wdata;* t' X. H# B( B! s1 Y: Q
                when "1000" => fifo(8) <=wdata;
$ {0 v2 m  \  Z! P1 `6 J3 o3 Y                when "1001" => fifo(9) <=wdata;' o. ], g! H! y! c
                when "1010" => fifo(10) <=wdata;, Y  U% J" y) D( O  i
                when "1011" => fifo(11) <=wdata;
$ }) B+ b% Q6 ]                when "1100" => fifo(12) <=wdata;
8 p: i" A- M0 ~% \9 I1 `/ f9 j                when "1101" => fifo(13) <=wdata;! B* X* ]6 V0 U1 j! p3 h; b: m7 B( ^
                when "1110" => fifo(14) <=wdata;: L" N$ C$ s6 Z! @+ H& t; V
                when others  => fifo(15) <=wdata;
3 d# j: |: N! Q5 v4 x            end case;: m) u4 w( ~, c7 ~3 I/ c
        end if;
6 Z5 R* d$ t9 h- W7 e- {    end if;3 ]  I, j6 f/ m
end process;0 R8 X. T+ N% h+ s, _' I. `

; c9 G: a6 ~' s- y% d& e8 E: g[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分6 y( m" _: f/ L
我先做些假設
  x" O' c$ D7 q* g1) /RD動作時狀態不能改變
+ B. B3 E  U) }0 P. z+ U2) wen動作時也不能改變狀態$ L' E* u1 |3 y4 i( m8 c  K
如果只有這二個case的話以下這段code或許可行
3 i; z1 A/ x4 A0 k4 l* G2 j
1 n. ?0 E3 J. W: Z- ustatus:process(nSysRst, wck, wen, nrd, wptr, rptr)6 p, R6 R+ q! n( l: P7 g; T
begin
# Y- \$ |8 C1 h/ ~* p    if nSysRst='0' then' h: X) g7 c! w& G/ n/ g- K
        full <= '0';
% X* g! J+ ^0 X7 T% k& D' F        empty <= '0';$ ~7 \  A5 q7 S# h3 C
        flag1 <= '0';
' s3 O" e1 q5 n( q! k' w8 G        flag4 <= '0';
: w& t+ Q' [. r1 \4 j& Q+ |        flag8 <= '0';) j, q% F9 [. W% t" i0 f
        flag14 <= '0';
: C6 d# z& D# p4 s: A    elsif wck'event and wck='1' then
  M, g$ S; u6 }9 C        if wen='0' and nrd='1' then% X+ T5 I6 P6 H& g$ L, A
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
) p" [: N& H$ a2 h2 _            if wptr=rptr then empty<='1';  else empty<='0'  end if;" [' e- S$ L) S6 R
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;& A* F2 {- a, ?( `: [$ g
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
% U$ A# U7 O. u& [            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
1 d, }! b" z" p- p/ N' s            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
, X& M4 x6 N/ h& Z" Z  W) h7 B        end if;5 y% p" s6 ^- x- n( t$ o8 @. O5 U
    end if;1 m( ]! n% t. b7 e
end process;; e: @! J0 {" e
4 F* s' |: a; n' v- M$ Q' I
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高0 N7 m  [0 _; Q) u

* ^* a# B2 u4 {6 p好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例; r& T8 q/ @3 M5 H: O0 L+ [' d: }
5 }2 ]7 E$ o8 ?5 j/ N/ r
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
7 t0 E, }$ M% i7 l
  W; V' o. n  [: N1.
- F8 c: K( ~* x$ p! r, {; S   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"& V; ^2 T3 q* o+ |0 K5 `( z
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生5 O, |& J  L2 r8 @
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一: W! S. t$ k1 z
2.9 ?, p/ a2 `, P, ^7 S. r
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高0 L9 z& C# e/ B$ H6 W) O& O
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
; D/ {* |  M* g. _   資料讀取週期RC最小280ns
( W, Q* m2 F3 e7 o* D3.% O' {, W+ L* m/ w
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
. T. s4 w" k9 X5 d9 G) [& g/ F   小小於wck週期的case,會有問題,以trigger level造成的INTR來講' v+ n. |; H* \" m8 R0 ?( o6 Y% }! a4 |
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
; H% R: J. R% g* ^0 ~0 s7 L   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
4 B* i& E* H3 z2 E: s! g  X/ }- t* [% F( u/ H: ^4 u
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了4 d2 W7 Y; K: t6 K
9 y/ z* d, N1 t% r3 X6 _
第三個問題還是clock rate的問題! z! d$ v8 n* d9 T! |8 v. n+ \. F6 Z
$ v) l! D0 L! {& G# z/ u3 }
第一個問題留給別人回答好了...
2 N( ~5 e. c* l) Q* Z2~3問題的確是問題沒錯, 誰來接手一下呢?
! c0 j6 y* K" f! n7 w- E
# _; g5 ]. y2 Qaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
: D% e% ?2 p, Q; G
  [2 `* T: d) i: F[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
4 z3 a* u7 n& s1 E* c" M[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]; _2 p+ F* C4 z
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.; ~" ?3 T- E& @$ ]/ [
[4] Website of USC Asynchronous CAD/VSLI group. [link]
, ]$ s% u9 W6 D! d- O[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]$ Q  j" u: V" ?# V
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
. g5 M& \; t$ m, @/ _- U. a2 V[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
8 ^% F* a9 J0 d! ?9 U! C  x6 }+ h我會好好的找來研究看看
1 ?) b9 _' P" p6 q9 d! O+ ]
2 k4 r8 C$ L% p) V( P: `- H4 j我本身目前不是從事電子相關行業,不過對於, z+ y3 j' N% ^6 `: W6 Y
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
5 R, J) P1 ~! Y! Z5 ?都很有興趣,之所以要寫16550 code主要是想
5 C- p$ x9 C, ^9 w( I( u9 N# z  z挑戰看看自己能不能寫的出來,不過似乎沒那麼容易3 \1 F) }: }0 [+ u6 k6 t
- ~/ Y8 y- G, I; r* x
FIFO這部分我有上其他討論區問過,可是都沒人回覆
( y' w# f* E. H! w" p感謝版主願意跟我討論這個問題0 f# \1 g: b' E+ X
& \' |! O% e6 M' Z0 U0 C
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
+ g% ]& r: I9 G$ B7 c不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
+ Z! _% D4 N3 W, F4 y不然的話就變成只有我們二個人在討論了...
, q4 r5 N$ N% j8 o0 L8 B. F" |& q4 h& E9 C0 X6 q( a
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
2 v3 c6 C& X- z, X; M7 y4 M3 J  Z8 T, E最近想到一種架構,用來做FIFO不曉得可不可行
6 @. n+ h5 h( i: x5 a0 f% u" l如下圖所示
1 b7 G0 P+ f6 d. v' Z/ H& ^/ p. Y2 |- q5 }) w- Q& M, n2 u
先就full,empty討論,trigger level不管* h  y6 r# d' ^& H1 c' i
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間& J* O5 N+ }- }9 P2 c
/ V1 z" a9 x3 d4 F
1.用額外bit(valid_bit)來指出register是否有資料寫入2 i' G4 ]9 R1 i! O9 o" y- J
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
% {: Z2 j4 O0 H" f9 i, ~- ^7 K0 S  當讀取FIFO,相對應的valid_bit會被清為0
9 n' q4 q* f; j" r, C6 P: {3 P( p* i% b" d2 B9 A
2.wptr及rptr用bin count
# L7 w9 k# k* F0 ?9 q
7 F! S% p% v) P0 f  O! Y3.full將所有valid_bit取and,empty將所有valid_bit取nor
; T+ \4 i, f: k0 l2 f' W3 v3 y7 T
* p, \- M8 i+ R4 P$ [( S* u4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時- W2 T1 u$ k( _) Y$ V% y* i& G
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case3 ?/ [4 w0 B9 [# Q' t
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
8 c/ F* P( m+ C7 |' r' O- w1 C7 N0 a3 a. ~- z; I. B
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
1 @1 [9 M6 ^, V  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
8 o7 t1 x& s' l4 z  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接. X& f5 o7 E3 c% O" |% G* j  o
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
+ u! E# Z) d' I& n- F) b  個位置是空但被判定為已經滿了的狀況)
/ E  c2 w& }* Q  @, Z6 O$ W( `" t* J
& N4 b7 r* Z( r3 j0 j/ U9 g以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
$ x0 h0 k7 r( |$ m9 A
6 i8 x0 b% {  F: x如果不管coding style的話, 這個想法很好' G# `% B1 v$ n1 `

& p/ ~: |% Q4 A' V5 e相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule., v' W  t& G/ _. v) }
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.! N1 y" ^  q, ]2 [/ J; Q. J! }: y
anyway, 互相交流吧.
% i" ?% ^6 Q5 g
: N9 x  ^# r7 |改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好$ N# G+ V# k# n& d# a" ]
我想到這個方法除了電路會比較大外還有其他缺點
% q; t- P4 l8 K8 C3 x: A- |: j2 Q" j! r! z7 Q
1.不適合做成容量較大的FIFO/ M. S3 L: f( b9 X
( B/ V* A# ]4 _" C& u
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響5 Z+ t0 e  M1 Y7 Y* \) `; ?5 d
2 C4 ]; R) D# T0 K
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣- ?  w3 N, z5 F6 g- V% f, E& Y
   會有較長的延遲時間,所以速度被拖慢了
% h) \% r0 H9 E9 k2 m3 O* f. U9 C, r8 W5 S
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
8 N0 u! y% U- b% O! ~我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
( D: Y/ M6 _+ c但是做ASIC時你會發現其實很小的4 i8 H+ d6 h! T

" k) [1 s9 b$ w1 _% V& H3 m9 f$ V* V5 }3 i- z
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響$ ~# \4 W- i# t: z, ^
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
4 ]/ A8 @; J' @5 n
7 M( x9 Z7 t$ ^/ _3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
8 s1 G  Z% Z1 c7 w+ D$ i& w4 g相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
( u1 K( L( a& T/ {) P7 M  H- p# B  q" M2 L

* Y7 l! `+ `) {7 j) v: W7 E  F1.6 n: ^, v; m/ G1 S. V" ]
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
' q6 y) J9 m1 |
# X7 z! Z/ N8 @6 W" f) p1 s# B   不了解這段話的意思,可以在進一步說明嗎7 O3 E: Q$ l/ S8 v$ Z' J% y
2 \# [4 t: d& `8 a
2.
* g$ W1 C  f7 d  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
% l; K' l, R, n9 G& _- A  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
' U# U. ^* P( z) V6 [+ K! K7 U  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
0 }  d3 _: Y- Z# u* [  請問有辦法評估亞穩態維持的時間嗎
2 E3 G8 ?7 H3 O# u  + u' R3 K! ?) e/ r2 }4 \. K. m
謝謝
* Z, A7 Y6 y5 \% g9 d% T
* I! h+ x) j4 F1 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
3 c1 v9 n' ]; r& r$ p) o我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
9 k' Z- o( Q5 w' K6 F8 Aempty = true if valid[WPTR-1]=false
- J$ B9 j- \7 A! h# Sfull = true if valid[WPTR]=true
% q8 Y& g" K* q# {# I可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
% n: O4 L1 g5 t7 s# |, \- P5 ~9 C8 s. X/ J5 q4 |, m1 Q7 p
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
  n5 d# G- e- u) V: \9 j關於 metastate4 ~$ g5 y# p2 s% \% ~
請問如果一個d-ff假設 clock頻率1 hz( \5 Y9 \1 O# P! ]5 K* P
如果剛好發生metastate,metastate這個狀態
0 |9 }/ w( F$ ]& D5 R. w+ h" r有沒有可能有機會維持1秒的時間長度呢
  `! B' {& Y( {+ |; I0 W5 R0 [) ]- J
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
! j* s) G. G$ u! A4 a% D) Z2 @$ Z+ S+ a: ~* d! @9 B
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 06:08 AM , Processed in 0.156520 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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