Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
8 i# O2 y* }0 @: A
3 A, B# ^/ v, K( t: v. ?+ ]這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
8 l! p3 ]# l, I: n- |/ O+ B1 @# g2 L: q2 b  f5 |
那些信號也先估且如我假設一般) `7 ~! Z6 @- T2 H
wen是RX收到一筆完整的資料時所送出來的
: y) ]) G8 v: @$ U  \2 g: K% s3 q因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)7 ^0 }; z0 ?7 r1 Y1 e
prptr:process(nSysRst, nrd)
% D, N! D; M& Wbegin
( }& v- I, ?, g$ z    if nSysRst='0' then
  w8 u2 A& v; n1 i& F% `, _        rptr <= "00000";7 o9 F) Y6 w/ U3 k7 i
    elsif nrd'event and nrd='1' then0 z. m5 y  X! g
        rptr <= rptr + '1';
) ~' A! Y$ n' b+ V' t7 v    end if;
& G5 w! y& K1 b; _8 {9 r0 `! u% uend process;
$ q) P2 ?* e3 ?5 i* ^" p
, m! H6 v$ G6 I. s6 Bpwptr:process(nSysRst, wck, wen)! Z0 N6 i) {' d5 S$ {0 L  V
begin" L' H; p( {/ e( c7 J3 k3 i
    if nSysRst='0' then
* ~3 D8 E- k  O9 a9 F# M" G3 v        wptr <= "00000";
! f4 F; t  w% i- d. s- v    elsif wck'event and wck='1' then' t9 ~" u1 x0 l. Y! f
        if wen='1' then# ?4 j" s- _; d
            wptr <= wptr + '1';
! @% a, e2 {$ ]5 E4 E        end if;
6 g& E8 F0 ~( e+ {* K    end if;* X+ j! x1 }- W0 @. u  y$ R4 x3 m
end process;
  s; R" R& Q% N4 n2 h9 u8 ~( x
& [5 W- v2 U0 b! z. A假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
8 D  N. G2 q" n% J你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key4 {3 t: p# C$ X  G" \
0 d4 D: F) E0 v6 w7 \3 ]. k
Read buffer部分0 c7 |! \# z/ i5 v4 _/ h

+ d3 E3 p3 p/ j! H% t--read_buffer( {7 V9 \" L- H7 K
with rptr(3 downto 0) select rdata <=2 s0 b: B$ a9 o* G$ h
    fifo(0) when "0000",& o! S, M8 |# W4 L. ?) G
    fifo(1) when "0001",
6 Y% h4 o9 ]: Q1 M" m, x    fifo(2) when "0010",/ Y$ A6 D( M* N1 K% f6 S$ u
    fifo(3) when "0011",+ h  c- S2 w6 E) R% `, |. h
    fifo(4) when "0100",/ `: ^8 L( w/ f1 _) e/ k
    fifo(5) when "0101",
: D$ A; l9 Q- _" a) T    fifo(6) when "0110",
$ ^$ X7 F5 x" n* L% S    fifo(7) when "0111",
) w' P6 q3 V( L3 h; M% v    fifo(8) when "1000",$ U& @( `8 c, i2 J7 }. v
    fifo(9) when "1001",& t$ \" ~- C' F2 k
    fifo(10) when "1010",
6 [' [  d! Y( b7 G# a. I    fifo(11)when "1011",
- c; [2 y5 a; z- J( k    fifo(12) when "1100",
8 d7 I& [* u( Z  p, y( h    fifo(13) when "1101",
& Q" \3 N* [3 U    fifo(14) when "1110",0 f# C7 |5 w1 p  q! u' q5 Z( m
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
3 j3 N+ l; ?6 B  D! r0 d6 O1 }1 {' {0 k( v' c
write_buffer:process(nSysRst, wck, wen, wptr, wdata)% A* B  F3 ^5 B1 S7 E& ?( x) y( Q, Z
begin
8 d  T4 Y# F1 u% y$ K2 ]    if nSysRst='0' then9 N4 p- W: R3 }' W4 k# T
        for i in 0 to 15 loop0 \3 Z! i. m, M! l- J. S$ H
            fifo(i) <= "00000000";; g- b+ m! Y4 v: ?: z: `( G& i
        end loop;/ \7 ~5 Y; e1 h# M; L, m
    elsif wck'event and wck='1' then
1 ~' I( W2 j; P# W7 b9 U        if wen='1' then
) k/ x  e& t; e" K" C) a( `, Q$ x            case wptr(3 downto 0) is( P( W3 f7 y2 l* r
                when "0000" => fifo(0) <=wdata;
+ \# }( P) Z. `+ B                when "0001" => fifo(1) <=wdata;  o* T9 Y) o6 P6 n2 q- V  \
                when "0010" => fifo(2) <=wdata;( t( s/ B3 o$ D8 K' T
                when "0011" => fifo(3) <=wdata;4 |8 t% G9 V, F$ v) N0 H; {
                when "0100" => fifo(4) <=wdata;7 h5 @* D! O" H! J  u+ E) a
                when "0101" => fifo(5) <=wdata;
+ w+ M5 X) z( X6 D2 T                when "0110" => fifo(6) <=wdata;
$ A/ ?, |7 G/ `2 e; ^                when "0111" => fifo(7) <=wdata;: G5 y6 O7 p8 E2 C4 u
                when "1000" => fifo(8) <=wdata;
- \% {5 |+ c3 M: f                when "1001" => fifo(9) <=wdata;
9 b7 A4 p' S5 G+ I& F0 w. p                when "1010" => fifo(10) <=wdata;% y' i0 Q! j* {9 M
                when "1011" => fifo(11) <=wdata;
  q- x+ C$ z  n& q' I+ u, f4 U# E                when "1100" => fifo(12) <=wdata;
4 T; x% V5 D* e1 `: @2 B' s                when "1101" => fifo(13) <=wdata;
" h- D3 d4 _* M4 @                when "1110" => fifo(14) <=wdata;
0 @/ j5 b/ P% W/ e& t; p                when others  => fifo(15) <=wdata;" g; ?4 d8 f% ]. J  D( u
            end case;* a6 H* K2 C# _0 U0 G
        end if;
4 p) L$ A0 j+ r1 `    end if;
0 U* U( o9 P1 u' |( ?0 G, X/ pend process;$ I  a! A$ B/ ~# I0 v; @' }

# O, @" k9 H4 p6 P7 c4 e[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
. ^) o: Q& f" \8 v% m4 r我先做些假設
0 v6 x+ X' \5 B& s& S1) /RD動作時狀態不能改變) t: x& W+ b+ R6 u
2) wen動作時也不能改變狀態& n9 V, F2 H( Q4 {5 k# J( {; r
如果只有這二個case的話以下這段code或許可行
5 \0 x) s" U  m, _2 _6 p) q0 c: d  S! k# m" r% P
status:process(nSysRst, wck, wen, nrd, wptr, rptr)1 Q' ]* z& E) P' |
begin
! o7 O# F* O  a1 n4 D' T    if nSysRst='0' then
8 J+ d8 B. H6 o        full <= '0';
: m& z- t; o3 I6 p        empty <= '0';
2 x! F! o* M; g4 I+ q        flag1 <= '0';
; x4 C5 Q, G- ]7 `; k: ?        flag4 <= '0';
, ^& k$ U! R5 b) ^$ n& O9 h        flag8 <= '0';
3 Z# B- w# B5 Q3 ?  i4 l0 }        flag14 <= '0';
: o  B& H. R, Q, k- V$ o    elsif wck'event and wck='1' then
' ?" b' l8 q% r5 L0 X( }5 n        if wen='0' and nrd='1' then9 h8 b/ j( J7 ]
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
/ `; t0 Z" _5 z5 F  N8 v, z            if wptr=rptr then empty<='1';  else empty<='0'  end if;
4 p5 ^  F( g: f& H, t            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
, @* N/ E* Y" w. b$ V4 \            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
9 F8 @& M: h7 D/ k, s8 C# \' T8 ^            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;5 B$ W. u' H& W( S: A6 L: u5 m
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
+ [8 T# m( [- j" K) G2 R        end if;! k, a7 w# G7 e- p
    end if;
% J0 @, T6 B- K" _. ^  o6 N% H5 qend process;
$ h: i) Y8 }9 k) f1 t8 O) y% l. S  n' o( D/ B
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
# Y9 p! P8 ~2 H6 R# n! _, @
. x: @2 t( K4 F2 r$ U好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
* \6 ]6 O/ k! t& P3 |( A! Z/ g
1 B% C' R& f4 X4 {4 V+ H將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論/ B( H. u5 N) P: F8 ]( [
: D& e5 o3 V% K: _# N5 W  b# ~
1.
: \  e4 b2 A( N1 S& f2 U2 h. O6 B% C7 j   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"; x: |" b( T4 M7 p: f2 e4 q8 L
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生' o  ?9 C* k, o- b2 P8 x3 B, F0 ~
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一- D1 S! z2 W& E. u3 Z' v
2.6 r1 ~, U* T, E- \9 @  F
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高* `6 |- c+ \* l* K0 w6 Z! t0 K+ @
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
. o6 r( I5 d( j# V6 [( B   資料讀取週期RC最小280ns
7 q' n& m" H! M0 j2 W3.
6 ~5 {/ o1 C; l" h   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期8 e( G4 J3 W: u
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講4 `* U& h/ a/ D  L5 X- Z" a. J
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間/ U2 ?8 M& g% ~) v* q, ], {
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了9 a$ q, P9 a+ f5 Y

9 P* C0 F* h" A8 ]* ?第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了, p$ C7 h6 V5 W$ n% l
7 N7 P& ~' y2 j2 ~
第三個問題還是clock rate的問題
9 G4 \1 `' z9 y8 o6 M4 C/ X9 x
' p8 ]  P/ V8 R& m* M& a第一個問題留給別人回答好了...
- q* e' R1 y& @& E4 ^3 I% P* J2~3問題的確是問題沒錯, 誰來接手一下呢?
0 {5 i' o. _7 q5 A4 _% x' U. J
0 J  m/ z' h" \  G0 O& i" iaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
  G; n& B: @# ]! P  c8 v8 i5 C$ @4 s" \: _! H/ t3 [# T: e' E" o- `
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
5 _* x& B. Q/ ~[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
. [1 `0 ^. j/ n0 v[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
! ]: n+ L+ V; J3 ]6 d+ `* J# r[4] Website of USC Asynchronous CAD/VSLI group. [link]0 K: F$ J1 G+ u
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]; z2 d! D& a3 F0 g2 o
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
' ^& k6 e0 {/ ^" e+ l+ M' p[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料4 f+ o; x* U: w
我會好好的找來研究看看
$ t8 u9 `0 W9 ~! L( e# M
" T1 E6 }/ j6 y' J% C7 q我本身目前不是從事電子相關行業,不過對於" L) `7 O( E  [3 z" A
FPGA/CPLD,HDL,數位邏輯設計及單晶片等1 n' Z* M- K, _. h
都很有興趣,之所以要寫16550 code主要是想
# F7 v" D( `( ^- J挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
3 ^6 a2 r: a5 s& |( m8 D5 o
# u# |3 j9 b5 k+ ^4 l/ Q5 UFIFO這部分我有上其他討論區問過,可是都沒人回覆" E! V  A# _1 r/ y7 \1 J8 q
感謝版主願意跟我討論這個問題% ?  G4 j+ @  b

6 r0 {! ?2 |. J2 h$ Q- v再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多7 \4 i5 D; u5 }
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見: k9 z- \+ E- R" h% u$ G
不然的話就變成只有我們二個人在討論了...: r: T% W$ g1 I) `- F; @6 w! y

2 R+ ?- t# b: n' |" ?/ |過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
; h- y2 B# r9 V9 ]6 p最近想到一種架構,用來做FIFO不曉得可不可行
* u4 |$ Q) F8 A. c% J+ Z如下圖所示0 x+ c( V) I' [8 m! Z& s' Z2 E
9 T- O+ ?4 L6 _8 b
先就full,empty討論,trigger level不管
8 z1 u8 F8 e& A' {讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
- |( u1 R! s8 T9 B) }
3 }  l/ d2 |2 N0 w" N1.用額外bit(valid_bit)來指出register是否有資料寫入
0 ]% r& g8 }. a& W  L( W  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
) t% @/ S9 S' H0 P' _& v  當讀取FIFO,相對應的valid_bit會被清為0
* u" f5 Q& Z( v' L$ Z. Y; ]" z
! [$ @$ F# I5 Z# s! s4 g2.wptr及rptr用bin count
1 D7 s5 e& J* A! U8 J9 R2 X" R/ e2 \! N+ |7 u4 v' u4 G
3.full將所有valid_bit取and,empty將所有valid_bit取nor
/ x! v! Y& C8 V& i+ I: m! Q$ ?$ x- [( O4 g
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
* F  Q8 d% U2 c* I  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
9 y  B, C: |* V2 |0 K( a  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已" H" \: v8 ~/ l* G; n
9 E' |% O, X) A: `5 q
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
& ?! p1 C, q; `, R3 j; Q  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk: G3 n9 `1 E" c5 h
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
4 S! H* _1 B5 F9 o4 o% \; l  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一' c* @& R, p3 F& A1 L2 Y% ]- |4 t3 N
  個位置是空但被判定為已經滿了的狀況)! \) {/ @) _' w; ^) H2 u6 I
: T$ p- j6 N7 ]" G* ^
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
( Y- @; g+ m) h' x" r1 h( ~2 H# r; P6 e. \* s0 G0 g
如果不管coding style的話, 這個想法很好6 C2 x; ?8 T' \) h1 `( L
; G  k7 H6 x: b4 T3 S8 o% b
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
* l) @2 e! q3 f+ {* @1 ]跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.& [; _/ V: B4 Q) ?$ A
anyway, 互相交流吧.
( ]( y1 {. k' O! `; _2 V; P: I6 b1 V: n4 V5 O% x
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好& \8 F* b* j/ Z# E9 L# @
我想到這個方法除了電路會比較大外還有其他缺點6 @4 }) Q7 P8 h, [( a2 L+ D

3 K# P; i& C7 T0 w1.不適合做成容量較大的FIFO
3 n9 a  M9 I  _2 H# n& I) g- i% E) |. J9 l; K" A3 ?5 w/ Z/ o% J: ]
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
5 Z7 ~' C/ o( a0 {- S; z# p- d" E5 z% I
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣& r% ?1 `- b8 U: s
   會有較長的延遲時間,所以速度被拖慢了; }: Y8 W0 b! p

, d: |1 A3 W& [3 l謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO3 L1 B  L0 F& w$ a
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
0 \3 F; v0 U) B" V但是做ASIC時你會發現其實很小的/ `6 Q. H3 w! I/ e

7 _  V4 P. I7 m0 A- l  U# o( C- C
$ |, u4 n3 u2 Z3 l) M0 i2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響" q0 e3 D8 Y4 ^2 W0 l4 x) x
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了% K' d- i. y9 J3 J6 B' G

+ \! n, T  R9 z" `9 U3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了% O6 I$ [( x$ [4 D$ h# d0 h' R$ l
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好7 B/ S7 d/ k2 q0 X
/ O! s5 h, O& Q
5 U$ v  l8 Z7 e! ]8 i2 G: L
1.* c5 L2 q; h; ?( M8 C2 J
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"! ~( {( e. ~- F+ I

9 V, b' V# P+ B4 m3 x   不了解這段話的意思,可以在進一步說明嗎) x. t) X' |" F4 k5 Q( t

& k# y7 P7 x# t2 `" h- k  B2.2 U) i$ }9 Q# t' Z
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
/ x3 l# I7 T+ S$ O- T( K. B  ]  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
# h- Q" C% ~* S# E  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了2 D/ D# N" h4 d1 i8 w# h- y
  請問有辦法評估亞穩態維持的時間嗎
: \3 }# m# G7 i7 U+ D  @8 A3 e( a4 O  1 c( v1 ]8 y, v. i. `, Y
謝謝5 o' L3 W, E1 n: k9 Z# T

: p, D: e2 p; o! H# W[ 本帖最後由 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 H( Q) ~# x7 J( i' a, ]
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:8 @- _2 K, m* [: }
empty = true if valid[WPTR-1]=false9 O# r6 D8 U; n5 @
full = true if valid[WPTR]=true* ]" R/ n# K7 |4 p+ \* R' L
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已8 D/ e& [; w+ H5 N' k

2 u1 u% M5 c$ ?2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
- \* h3 H4 \8 p$ Z: m% n關於 metastate3 a  P# e7 Q! U) t
請問如果一個d-ff假設 clock頻率1 hz# z9 @/ r, }. G: u1 {" G8 ]
如果剛好發生metastate,metastate這個狀態
4 x( S6 i7 L5 }3 T有沒有可能有機會維持1秒的時間長度呢
9 {6 |) q" ]4 g/ D+ U: Q; _8 [5 ?3 d! a4 I
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有, A/ S8 G1 j4 k4 R$ w

! Y; J' R: d- m% \# ^metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 12:34 PM , Processed in 0.127516 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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