Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...9 W& ]2 G6 j8 ~1 d3 H
' i5 d5 o8 U& S* d# A
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多+ h2 W# v& x9 M; g) t
0 x8 p  i, W  m) I
那些信號也先估且如我假設一般
/ ~6 A( ?( m7 z5 d$ r( pwen是RX收到一筆完整的資料時所送出來的, W. C% z" }$ U1 e: P
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)9 O) [0 _5 c, K
prptr:process(nSysRst, nrd)" t" j4 J3 t0 W/ [6 _
begin
7 ?! j1 p: \9 {% l% S    if nSysRst='0' then+ o: P- [0 ?+ K9 z! i
        rptr <= "00000";9 k$ v" P3 L; b
    elsif nrd'event and nrd='1' then
$ A+ _7 ~. o; p2 t7 V* F  y/ Y        rptr <= rptr + '1';+ A$ o3 P* z% n* \7 x
    end if;
3 |! P7 m, I3 O% P# N* Fend process;
6 r1 z( ?0 D6 N3 V5 c/ V! F6 Q! H; F8 A' L) `7 d
pwptr:process(nSysRst, wck, wen)  Z( r* D. d* `, {. C
begin
3 A: F, c! _  Z& }, x- F# }& ~; _# x    if nSysRst='0' then
9 k5 J5 z% Q# @5 T0 s        wptr <= "00000";
. N2 x6 Q- _' L' F    elsif wck'event and wck='1' then/ Q6 a1 Z( P) B* ~
        if wen='1' then, a# e4 }/ f  g7 y
            wptr <= wptr + '1';' y, {* [8 |4 b& n( G& J8 a* W  P" r
        end if;* U' I4 k" p2 d. r3 d0 h5 B" m
    end if;
3 w; K4 P5 K% y+ L" Aend process;1 d  t1 ~5 V0 [- g6 S0 `1 n4 u" Z

/ u! P7 v) S% i' [! g. `9 \假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?- T( z  F8 Z' M
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key; Z, I" n: V# b1 c$ d

* ~' r7 U5 c4 F. t/ }' V* \Read buffer部分% d4 B- l: y7 M9 ?! P

( J& c7 `3 d. _--read_buffer+ U: K' W/ H( \7 F5 B1 E% Q& H/ r
with rptr(3 downto 0) select rdata <=
& R5 z5 C' Z: ?    fifo(0) when "0000",
" m! o4 w/ p# ]0 F1 L8 _    fifo(1) when "0001",
, K* [% ~' F# R3 X, U9 P    fifo(2) when "0010",# T/ _7 Z, u% t$ k
    fifo(3) when "0011",
8 P$ _8 T) t) ]2 M% l, e    fifo(4) when "0100",1 o& J& y/ P7 A4 H
    fifo(5) when "0101",/ I1 p6 [; V8 f% r$ t
    fifo(6) when "0110",
( d# p* D! u1 u, M    fifo(7) when "0111",
4 @: X" U( h3 J, k& o    fifo(8) when "1000",) o2 C/ l. V) J( M5 Z
    fifo(9) when "1001",
' A1 H) `5 X  Y* e5 w/ @/ V    fifo(10) when "1010",$ o. a; h9 R2 Z* R8 S- J" U
    fifo(11)when "1011",
8 i0 I- Z3 R4 y' E    fifo(12) when "1100",
. `& F/ ?" t1 ?$ p( Y    fifo(13) when "1101",
  v$ J3 M% ]9 l4 K% k    fifo(14) when "1110",8 ]+ J$ s$ }3 f' l8 ?
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分6 R) n9 a( u" E4 y# j' p) O
: `3 c2 j- V" K9 h, u
write_buffer:process(nSysRst, wck, wen, wptr, wdata), G' _6 c( o, a$ h
begin* I# o* ~' K7 O/ ^7 U. J
    if nSysRst='0' then0 |  {. Q6 Q5 ~9 j5 f
        for i in 0 to 15 loop. L* k6 _+ r/ B  D1 [( Z
            fifo(i) <= "00000000";
2 q0 L: K) \6 F  `! h% h- M        end loop;
0 K% Y- Y7 z; a) S3 I6 T% w    elsif wck'event and wck='1' then
; Z9 {" M7 L' B# p. @  x        if wen='1' then
: X; L- ^8 w- J3 E- [' p            case wptr(3 downto 0) is* Q* Q$ P' B" _# d+ Z$ w" i0 q: M) E) B
                when "0000" => fifo(0) <=wdata;
1 j9 _" Z( S0 E9 J% y+ l, Z                when "0001" => fifo(1) <=wdata;
; e$ ^( c& R2 D                when "0010" => fifo(2) <=wdata;
; i! |4 h! u+ E! N* z) L                when "0011" => fifo(3) <=wdata;" ?% e& x! l2 `- q6 Y2 h2 A
                when "0100" => fifo(4) <=wdata;8 w( @9 j" A( y% |
                when "0101" => fifo(5) <=wdata;
* `9 j( x- W& r" V" s9 a                when "0110" => fifo(6) <=wdata;
  {- b$ k$ M' W5 C# m* o                when "0111" => fifo(7) <=wdata;
7 k: l0 ?( ~; M                when "1000" => fifo(8) <=wdata;& K. z! N% [1 f, V( f4 h
                when "1001" => fifo(9) <=wdata;% h5 V6 [8 g  G$ s
                when "1010" => fifo(10) <=wdata;9 `* q: M5 \. ?, C5 @
                when "1011" => fifo(11) <=wdata;; ~3 \$ H9 Q( T: g6 f$ {% `
                when "1100" => fifo(12) <=wdata;# e/ k7 A) Z0 d9 j, K# l/ o
                when "1101" => fifo(13) <=wdata;2 p8 n; B5 E; f) I  j. o3 l; n
                when "1110" => fifo(14) <=wdata;2 Q; P" O& Y- T0 _
                when others  => fifo(15) <=wdata;
& X3 V# H% s1 W! R$ \            end case;
! Y, L/ Z! M- V; h1 H" w        end if;8 p6 i6 B9 u6 l! I# e' H; w/ K
    end if;
$ H# ^9 [  n* X+ p$ Y2 iend process;- }! Z8 J5 s  x1 ~! P0 s& i/ V3 u
6 M4 L/ q/ B; ?5 l  Z2 t% j
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
7 d9 G" E/ ?! M' l5 t我先做些假設. D5 u( A; [+ f6 g- O
1) /RD動作時狀態不能改變+ r$ m+ ~$ Q8 v+ {; u' }& r
2) wen動作時也不能改變狀態' \  v! n3 V5 F0 F" J( w
如果只有這二個case的話以下這段code或許可行
0 Z; k1 K7 L+ c" w5 ^2 T# A
" w# `0 c. L" o' w8 d! \4 `5 _status:process(nSysRst, wck, wen, nrd, wptr, rptr)
6 Q6 d9 ?2 U3 u& F$ y# A2 ^begin
; \* G8 U0 G% s. e  s3 q" k8 p    if nSysRst='0' then
, w- l7 y) d4 \+ e- o) f        full <= '0';' H! ]; E2 g! o6 c7 ^" L) W5 V
        empty <= '0';
9 B3 c1 p7 i1 b" ?. k/ d6 a+ k, e        flag1 <= '0';7 D( D9 o9 y/ A
        flag4 <= '0';
* ~8 N) C3 ^* Y, o8 u1 u/ Q( @        flag8 <= '0';
& d8 y, j$ U7 X; ^) D% z0 P. e* C" s        flag14 <= '0';# o/ |; K4 D. F2 z
    elsif wck'event and wck='1' then
" F* ]8 t+ E* t' P9 ?        if wen='0' and nrd='1' then
( o& W7 X5 k* P" W3 s: B            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
% Q4 I7 a) j" A            if wptr=rptr then empty<='1';  else empty<='0'  end if;
5 t- r% v+ w- [; {3 @: Q% u            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
  k. l( N9 O* w8 H5 b( n            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
7 u5 _; u& M6 g* a            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
9 [$ O. Q1 {3 v: S0 G5 y0 b- ~            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
2 E/ j7 ]4 W! A- c& R        end if;- W/ |0 {& z0 b4 h* ]# h% v
    end if;, l2 @% v6 @8 ^( B' C+ Q6 U) M7 z' F
end process;
7 K9 R7 s; E! h$ U" w% \, r
$ b& n7 [3 _. F1 w0 M[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
! Q8 @$ Z& d; O+ R6 q6 x# z: U3 Y+ K
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例/ a! A, q6 O" _
  r6 U4 Q  |6 b% x9 u3 a
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論" U6 T- k) ~1 l7 K

3 h0 ~. }  F" ?" X* Q' Q7 z$ D1.
) s' {$ J; N% d4 p4 W   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"9 ^. K0 `; r# A
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
) w- H& U* ^( i$ q: f$ j. \   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一" ^9 T' C* X. H! u4 o6 U0 T- H: E
2.! ]  _: P* X$ S* \8 @+ n( N
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高9 ?6 o4 Y1 `6 _. z9 `. `# X, t
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
4 q: t- t+ L* a. t8 S   資料讀取週期RC最小280ns1 @) y' w% B& l6 [
3.
4 i: ?% \  B3 X& i: w3 H   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
- f( N" C  U0 c  V: y6 X8 q" Y! x   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
9 C8 V# h8 }. q( j  w+ S6 ~   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
# S% s# S/ y" }- ?5 C   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了  f5 [" A& f1 O8 U2 l) h1 R5 N
4 L- {1 B- v! K1 |
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
1 [; u( B9 h% {) Z
: M8 D/ ?5 a) `- H+ r* m  h第三個問題還是clock rate的問題
& H, y" ~- g7 ~, l
- F  v% V: e* F* }  _第一個問題留給別人回答好了...
3 q' V' D4 C6 h; _3 d. \7 R- F2~3問題的確是問題沒錯, 誰來接手一下呢?. _6 p9 E4 ~& E/ n+ @

0 u" C- y) _4 Z0 {' ^& e8 @addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
' O: z- a, e, X( u3 J% h/ t7 X; T% A" Y8 L6 K, E
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]) c0 L) m2 }. F: r: R% ^0 K
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]  |% a/ p9 q& n' L2 Z- [2 `
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
3 L, A- r0 C3 t4 \[4] Website of USC Asynchronous CAD/VSLI group. [link]$ p8 I9 i1 z! N& m$ U. t
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]+ P1 z4 q% \9 K1 i& L
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
/ R$ O- |9 Y0 H/ R9 P2 X[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
! z1 T2 L& k5 c7 L我會好好的找來研究看看3 F8 y+ o5 _6 _; p) e
+ w, W  n4 k9 O9 |
我本身目前不是從事電子相關行業,不過對於# T4 T" {" B& m( b6 i% s# N
FPGA/CPLD,HDL,數位邏輯設計及單晶片等6 N7 j/ ?6 c* p/ m2 f& x
都很有興趣,之所以要寫16550 code主要是想! f  ?' \; ^  }
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易  C; S0 ^6 c! S
; ~" m! n  R$ K2 J8 v$ b
FIFO這部分我有上其他討論區問過,可是都沒人回覆
! t4 ^% |& b# U4 d感謝版主願意跟我討論這個問題
! Y) G- a' b; T- g
' p* Y7 F4 g$ R* D' F$ C4 L再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
$ A8 g0 |0 ~& {2 B! c( E不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
- Q$ _, s% S% d% a! |) p- g& {不然的話就變成只有我們二個人在討論了...
$ a) l' }2 r+ s6 m4 O2 q0 K" e8 |, `- E. T1 ~, u
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好; ^/ v, S8 q5 D6 k) ]6 S" o
最近想到一種架構,用來做FIFO不曉得可不可行
( X; Y0 p+ Q9 ]7 M: @- R) C: T$ ~如下圖所示
4 b. \* p0 Z2 q3 u7 U1 `
% ]1 ?  j  G9 T, K# I先就full,empty討論,trigger level不管
2 V' ?/ M. n, y$ l讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間* v" Z* w3 l+ f( y) y
/ z' \8 O. t$ t3 {& K8 w  ]
1.用額外bit(valid_bit)來指出register是否有資料寫入9 [2 l! d  z, o3 p& X
  當寫資料到FIFO則相對應的valid_bit會一起被設定為13 _9 q; ?3 t! D7 u* R
  當讀取FIFO,相對應的valid_bit會被清為0
; b9 d  a; N" T+ |# m* E
+ Q$ J. S7 G* x5 B3 ^: `! l2.wptr及rptr用bin count
0 E) Q7 u! S9 `
3 ]2 E; _% o3 i. P; Y9 Z  u/ N3.full將所有valid_bit取and,empty將所有valid_bit取nor- `. X1 h2 G4 p9 ?9 q/ e* v+ F

9 e) J' E# s5 {8 o0 A: W4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時" ~0 c; w$ h+ h! _' \
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
) q' H$ L" p2 v0 O, g3 q8 m  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
* l" N1 \. Y" t1 q6 M8 i9 E+ l3 l/ V/ Q7 k) ^
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
6 W+ U& n! e- e2 J  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' f! S+ ^* C4 q  y2 F) Y
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
: Z# \8 m) D% b- h( ]4 D  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
/ e% A# \' I6 }  個位置是空但被判定為已經滿了的狀況)
- I6 {1 Z2 g" ~: T, {1 W) `* y% Z% L* d% E% C: z
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
9 n( s4 j# v$ U) V# S/ a" ~/ N+ A+ d: p9 s+ x% Z, G9 j
如果不管coding style的話, 這個想法很好# W- z3 l6 O" E

9 }3 B8 Y) J$ w9 b相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
- J2 f2 g, m5 Q  L( D, a% C跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.$ v. {8 Z. `3 `
anyway, 互相交流吧.0 Y1 e( a5 A) @6 s* r; ]

  S9 f# Q: ?8 d2 M* U改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
* Y1 E+ C0 Q5 j# c$ ?我想到這個方法除了電路會比較大外還有其他缺點
% U: r: v; c0 q$ P6 v. w+ q
; M$ k$ p% d/ f8 r& j1.不適合做成容量較大的FIFO
- F; ]! o2 I/ r' n  i5 S4 }2 J: V3 r* v5 t8 R
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響' {7 n: `( j9 j. |9 _) B7 ?4 i

0 i5 H' n2 _6 o. j: C3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣% R$ n3 C+ \0 `* J1 i
   會有較長的延遲時間,所以速度被拖慢了
+ W2 I. L& Q8 h' j/ u2 A0 n( k7 J  |& f! G/ ^
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO- t9 s+ Z. p+ m1 |" Q# H6 G% e
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大& J& k% c/ F3 V+ l4 V+ c) F
但是做ASIC時你會發現其實很小的! G- h5 L$ D+ Z* P

! f6 a. O: m0 D6 ]. P1 m! L. ?) l7 W
3 x. x: P* `4 ^6 w, Z4 n2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
. n* B5 Z' c& X, t7 n這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了  k3 r. I! C# o9 B
, r& H$ B/ {$ n& ~: k1 i! I
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了  K$ |& p4 a( c+ A
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好9 G  g0 L8 i- v$ G' C
! x3 _6 q. d5 t- T% R3 S
+ q5 ?2 U/ ?- u4 o2 d+ d5 `/ ^
1.+ @$ t: G( E5 `) G# d5 G0 F# W8 N
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"( T6 W; z7 a- C0 O# F' d

" w" y1 d  }) F3 G  W- x( M# I   不了解這段話的意思,可以在進一步說明嗎
" K. G% ?  e: m, @8 Z) V
7 X/ w  n0 ?/ C3 m' J2.6 @# B+ o% C5 J2 T- g
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
( s; y1 h9 L! s% d) y  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會8 ], y* A  H( j. v. V' ?% q- D8 w
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了; C! [8 a0 i, i$ z( g% R
  請問有辦法評估亞穩態維持的時間嗎
9 G. J; ?, J) Z3 |. K  q  , c. J# ^2 @" ]2 `1 j
謝謝8 a# D/ R" H( i1 J( I3 I( w
0 R0 a: v" Q9 l- O1 K) k( _0 P
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
4 L1 E: W, q/ Z5 S我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:- M6 \1 o8 f8 g' J) {5 _5 H3 |- }
empty = true if valid[WPTR-1]=false
$ ^" Q9 S5 i* K: a. Y3 S8 [full = true if valid[WPTR]=true& ]0 z; _! @9 u- `7 K4 W9 L
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已0 q8 d+ r- m: d( k! a8 X& L
3 ]- z8 Z' W5 l' {
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
( \( s, Z2 c  U$ N關於 metastate
  S6 O7 N  G  }" C; \( b  P. h( i: ]請問如果一個d-ff假設 clock頻率1 hz
1 ^- u( U  @. i% r; K# Q- L如果剛好發生metastate,metastate這個狀態
2 \2 x# p& x( j, h( f( z( H1 ^有沒有可能有機會維持1秒的時間長度呢
$ G( F2 O2 y! w, }1 F5 k# T
, t2 q3 ?6 S, Z0 {7 t謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有  b! B. `* }6 ~

$ a& c- _6 h+ r7 gmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-29 07:41 AM , Processed in 0.139018 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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