Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...7 G: w  a8 |' X+ X( J6 {2 N
. \! Z0 H& C) b5 K* g: d
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
, L" o7 v: K+ s# W; X  `
) o3 m# K* g6 ]: g( i: Q那些信號也先估且如我假設一般5 ?3 B4 `" Z5 f9 v; E
wen是RX收到一筆完整的資料時所送出來的
% W8 r0 {- [9 I& X因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
& l8 ^* \$ n* R/ C' pprptr:process(nSysRst, nrd)
9 e) C) w  g5 l1 J0 [! Y" Z9 Wbegin$ W) x+ k7 E- Z1 h7 [
    if nSysRst='0' then7 G6 T! \0 _" y2 c
        rptr <= "00000";3 ?4 l! y, P- ~' N! Z
    elsif nrd'event and nrd='1' then
$ ~8 Z% y  D* N. l, A, k        rptr <= rptr + '1';
5 e; n# h) A5 t) r! }0 d# G, m  |    end if;. G, _+ u; Z5 [
end process;/ E: e/ U" @( K' S

  o. S7 ^( V1 n6 h- npwptr:process(nSysRst, wck, wen)
# R2 I2 U* {  w  {begin
' [9 q8 S- f* e  F& a    if nSysRst='0' then
. V' ?( m0 \7 b& J! J; w        wptr <= "00000";0 |* B& |$ z7 F1 C. u
    elsif wck'event and wck='1' then
2 o3 m; H) S+ k4 t3 C$ u        if wen='1' then
5 v9 w3 {" I2 n2 P8 m+ f3 \            wptr <= wptr + '1';2 z6 u2 Q/ }$ ]5 z' f  g8 {
        end if;
+ N, `8 @" D' W& B$ J# x    end if;, O- B! H) K% ?5 F+ G% R
end process;; {0 D, O1 u, S& l' x

4 E& D! c* u5 r- T& J8 E  d假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
, T6 R" r' E6 r" e4 _你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key4 @& q. ~3 ~+ ~$ Q

- ~6 N6 [" G1 ~1 P- ERead buffer部分
! R$ f+ w1 G3 q. v! B) `9 J+ {! K  W  j2 ]) M4 l9 H
--read_buffer
) s. `9 o$ \; j/ k7 t; ^5 N4 swith rptr(3 downto 0) select rdata <=4 \; z4 U" i( [  t
    fifo(0) when "0000",
# w" k( `! F/ ?; j0 g, j    fifo(1) when "0001",+ q, j" O4 Y2 F9 m" f" c. w9 |4 W
    fifo(2) when "0010",4 T$ P- M8 t5 t9 T
    fifo(3) when "0011",/ c$ P3 O& d2 I4 n. |5 l
    fifo(4) when "0100",; l0 U/ P& S  J$ }& N; e
    fifo(5) when "0101",
; i1 F. L6 q* Y. l. u0 T) u    fifo(6) when "0110",9 j/ a  S/ w. e+ V- ~
    fifo(7) when "0111",. k4 x! C  P  ^* r3 E: a; a
    fifo(8) when "1000",
8 o6 B, ~6 l2 c# o3 y0 t0 S; A    fifo(9) when "1001",5 c" U1 S3 j- k! S, ]) b
    fifo(10) when "1010",' g" l( v& G5 X$ |+ |% _
    fifo(11)when "1011",# K5 P, A+ p  g  Y. ^, w
    fifo(12) when "1100",
8 t9 K  |  S+ V0 _+ [% @    fifo(13) when "1101",$ x+ Y4 t$ p5 F) t0 N' ?# H4 N, }  m
    fifo(14) when "1110",4 r1 y+ h- ^+ ]4 A% L4 t
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分: G  i! _5 w% Q5 w1 k+ Z5 u
) I  ~0 R$ _* L
write_buffer:process(nSysRst, wck, wen, wptr, wdata)4 P/ j$ u6 R* C7 a+ ]
begin6 m5 F1 h# {7 _3 l- o% q! n. e
    if nSysRst='0' then4 \/ Z+ O1 D) x" G  [9 v
        for i in 0 to 15 loop) Q5 `6 x( \- h
            fifo(i) <= "00000000";" j) d0 Z* m* F4 @
        end loop;' c! m. ^3 z& ]
    elsif wck'event and wck='1' then* S8 M3 Y9 Z: `  f4 s+ s
        if wen='1' then$ h) o7 `9 v' S2 D6 |) R
            case wptr(3 downto 0) is1 q8 j( W( W/ Z4 j$ `
                when "0000" => fifo(0) <=wdata;
' y, q4 T# V) m8 y. T                when "0001" => fifo(1) <=wdata;
) j6 p  ^1 ^& E; K                when "0010" => fifo(2) <=wdata;% g* N+ L0 q  f* M, `
                when "0011" => fifo(3) <=wdata;
  y5 \3 W0 D# ^                when "0100" => fifo(4) <=wdata;
8 q+ w# d2 o! _8 t' x7 S                when "0101" => fifo(5) <=wdata;
! H+ z0 Y7 L: }* N0 c6 {                when "0110" => fifo(6) <=wdata;2 N/ N" m; ]. I$ d9 ~( I! W
                when "0111" => fifo(7) <=wdata;  g9 I8 N$ x* D6 Q
                when "1000" => fifo(8) <=wdata;( z$ p" ~- B' A/ P0 c/ E( a2 e+ m& x/ k
                when "1001" => fifo(9) <=wdata;3 H$ n5 [' X3 R& w) B1 k& K
                when "1010" => fifo(10) <=wdata;& u! |, }% j3 k1 z" n* t
                when "1011" => fifo(11) <=wdata;
) D% \% P# x( b2 }; Y( l. e                when "1100" => fifo(12) <=wdata;, J7 ^4 M  h! N6 ~* J
                when "1101" => fifo(13) <=wdata;
3 }4 O; S# b! f- B6 a1 t                when "1110" => fifo(14) <=wdata;/ X7 Z4 a  f% p8 ~2 ?
                when others  => fifo(15) <=wdata;1 S" @% u# c8 c- ]
            end case;
+ z; k% G7 K0 ^! z% @! r        end if;
  A, B4 H* V# i( y    end if;" p5 D4 H- G& P
end process;+ T& p; s: t( x5 y

- Q$ }" F% u" y7 M# J4 Q[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
% [7 P8 S0 z/ b3 c& y& `% N' ?0 U) Y我先做些假設' M: s* Q5 T" z( e" b
1) /RD動作時狀態不能改變0 Q6 Y2 L  L  V. q# B' F  J
2) wen動作時也不能改變狀態
" K: W( ]% b6 y. r如果只有這二個case的話以下這段code或許可行" J( u* }3 b( \+ x8 C& c, B9 W
9 n8 M7 O9 @  ]& m$ r; X( k
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
4 v: D% T- O) u/ X# P+ Wbegin
9 v. J/ }: e6 B% C/ y- _- g! X    if nSysRst='0' then
6 Z3 L3 e1 I$ Q! u# V) R        full <= '0';  z% Z2 I# K) ^; c. Z2 k
        empty <= '0';
5 s" h1 H+ X. c" P        flag1 <= '0';
. f  ^' q7 i# \* l$ i% R8 j  W        flag4 <= '0';. j; h1 g5 M7 V5 q
        flag8 <= '0';& d1 I) n  _" l, P0 b+ _
        flag14 <= '0';: m# O- d6 k- B4 S0 Q  P" u) U
    elsif wck'event and wck='1' then8 R& D% I. v$ J) v
        if wen='0' and nrd='1' then
. @3 n% z  R5 V, G2 h7 q! p8 i6 K            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
* f3 Z) u& `" Y! W            if wptr=rptr then empty<='1';  else empty<='0'  end if;. v; |# s  e. J/ M& W1 |- F0 t4 u
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;+ B! ~6 D$ M2 X; T% M& P: r
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
2 Q: k9 v8 x: j( B5 V1 q7 x            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;: r" e+ U6 d+ _  p4 F2 c8 t* [; P3 Q
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;" Q% b1 c8 f+ L7 I6 d7 d( C
        end if;7 b7 V4 O* f7 S
    end if;7 L1 G2 f9 L# R9 |1 f/ q
end process;/ e6 X& P5 v! z: c% P8 L

1 W7 j; t& o7 U+ K' m3 s( J2 L8 i[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高$ Q( Z% g- M+ b# D8 F

  j7 L% v) C- u: y) t8 |好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
: m, T3 r( K0 C7 \/ O( e2 V: y4 z+ j3 g/ r8 W0 |/ z+ f" h
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
3 C, d& @+ G( M% U1 ?0 J
4 U7 |* z9 S: G: L: e- T! Z  P  }* T1.
4 \% D$ Y- E5 W9 G4 v6 f$ g+ ~3 G3 L   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
9 I) x1 Q. Z, b   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
6 h- z: I) W9 P$ ]   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一% [( F1 k/ V- Y8 L& b
2.
1 {+ j0 L' I9 R0 H   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高, s6 K. H& e) |2 {0 f
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
' Q" s5 X. Z9 E) h   資料讀取週期RC最小280ns
0 d# W% n! ?$ z3.
7 ?7 E3 r, B+ L# |/ h! ^; b   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
( L% E7 R: @& k9 t9 n  x0 @   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
, L1 Z2 \( e( r& a0 R8 [1 \) H   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
# T# k& q% G4 N. b7 b   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
2 |0 U* R) a' C. E" M3 f: n$ X- a
* e8 M# Y# m: s5 I( n第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了$ Q2 J: Y- e# j3 u/ c

) Z0 f1 H8 w: ~. e/ r: t* }  A8 c第三個問題還是clock rate的問題
2 Y' A1 T/ h$ n3 F' H# d, b6 k+ L  m7 b* R) V1 X6 [$ Q) O  K* l' M
第一個問題留給別人回答好了...: W+ e( j/ b3 L. n4 m! E8 v' C
2~3問題的確是問題沒錯, 誰來接手一下呢?
, o" ?3 v3 b: A) {# l
9 j. @9 r' P, o! C5 S, Zaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!, Z- T- f) }$ T# Y) ^& D

8 s+ R; d/ d* ], l% `2 C! {[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]" O0 t0 M: P, ~9 H, V( x
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
% U; S! O4 X  h3 L+ Z! L[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005." n* I$ [( p4 {( u5 p, l
[4] Website of USC Asynchronous CAD/VSLI group. [link]! I% z# W6 a* n! S& d1 F4 Q
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]; m% \4 D. H: L2 p- N/ d: a. {
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] , [0 q, e6 `1 a4 Z4 e
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
) e8 O' P# e1 u我會好好的找來研究看看
- |1 @5 v: C/ a6 l  o
% Q+ ], f8 ?- W1 K. V我本身目前不是從事電子相關行業,不過對於
8 T- A; s5 s+ K# n5 C! i' eFPGA/CPLD,HDL,數位邏輯設計及單晶片等% v) E/ m! M# r7 v8 ~0 N
都很有興趣,之所以要寫16550 code主要是想& b$ t' T) L$ N  Y8 x
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易0 e$ u: s7 G* M# i( X

5 F( F0 Z! X; S9 S, G' y( _& eFIFO這部分我有上其他討論區問過,可是都沒人回覆
- ]0 q5 U) n% X9 n* p3 i6 F: [感謝版主願意跟我討論這個問題$ I; d) G  h  @, I) C9 o

$ T; E6 j% ~0 b, Z再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
& c- J/ Q$ u4 P# N0 w不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
8 D; v2 E! [  E/ r1 X5 Z& m不然的話就變成只有我們二個人在討論了...) ~6 n' Q; P3 L/ O  E; H+ i
0 U, e4 J- \, M
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好1 G. l) |& D/ g/ e* X1 j6 ~5 E
最近想到一種架構,用來做FIFO不曉得可不可行
( ^) C7 G+ x) A* L) m如下圖所示
9 `( i' ~! m! f1 h$ y( i# \) {+ s$ ]
$ _% N' ?& S$ E) p# i  ]先就full,empty討論,trigger level不管3 {% u  p5 E$ E5 d. P' H
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間1 o0 P% a# W- U) I9 {: }
3 l+ B7 y% r$ {: j# }5 N3 k* N0 F( Y
1.用額外bit(valid_bit)來指出register是否有資料寫入
1 ]) b7 a3 }' l. o6 m: h% |; H  當寫資料到FIFO則相對應的valid_bit會一起被設定為1* H/ E7 U3 _6 x4 ^, K
  當讀取FIFO,相對應的valid_bit會被清為0
- ]/ ]' {4 K0 a7 Y4 Y/ T- W" S! g; S: P8 R, v4 B" C
2.wptr及rptr用bin count
; g: b1 N1 o+ p7 f1 O$ i- X: k2 D" k% X- H$ g6 @% o3 s+ q
3.full將所有valid_bit取and,empty將所有valid_bit取nor
1 k4 f" |$ d/ s, i& l. ~! Z6 F) [7 [6 ?# Q( H( O
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時( a. e( x2 I/ G$ q
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
2 h# h+ b4 Z) i- d% C' }1 d  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已' Y0 W; s$ k4 i  n' V; r

3 H9 m9 @# N6 ^; i3 J! i- {* P5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
0 F3 {7 I9 H7 [$ b% u! V  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk8 E( F$ ]. R+ ^" T0 _& C- q) y- j
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
& K7 H* H: d# S+ ~0 [+ X  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
8 _1 ^. c" [! m& N  個位置是空但被判定為已經滿了的狀況)
+ M: t, o; }. V4 l3 ^9 a5 u( E, p9 z5 z" e! t0 [
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意8 d0 }, \$ a2 R6 _" D( t* j! Q7 @
& V& ]1 m( k% ~, O
如果不管coding style的話, 這個想法很好& p( b6 Q. U0 N

, c& g: @4 G- s( L相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
3 n' z% v5 \& O: x5 d# }" A跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.4 d0 x0 }( }* \7 J; f0 d
anyway, 互相交流吧.
- \8 P: n7 C; n6 n0 `7 s7 s
& R0 p; [" o) E5 q2 P改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
! `7 S# P1 g- n+ a" D! K1 T我想到這個方法除了電路會比較大外還有其他缺點
/ e9 u4 e4 o% L. d+ C6 g+ a$ `5 T5 f" m' U
1.不適合做成容量較大的FIFO# l2 c/ b" W. Z- S0 ~: e

. w! \" q6 r2 [  }7 W# `% c/ W; V2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響* l$ b8 E! H2 t9 d! l1 ~

( [$ b/ D% z1 }/ ~( @3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
# }4 c0 C1 H. W* m6 q& ^   會有較長的延遲時間,所以速度被拖慢了, J9 L, u6 t  a. ]8 Q8 b+ z" T
2 X6 L) k2 S( ?' w
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
5 o4 ?0 A+ I3 b0 a- O6 Y* @  h我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
' s- p8 V9 R' u但是做ASIC時你會發現其實很小的9 K6 p$ C: D/ z

7 T: H) K; R7 ]0 O  V! a7 j' c7 ?: u5 g+ C3 C: h
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響; K$ q' q* z! E$ e
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了1 L" u, h' Y8 |

8 B( a1 ^, s1 D/ F3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
! t! r1 v1 Q7 D相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
4 u: r1 [& o* G! ?9 l0 N6 ^4 E& C  h* F+ J+ Q5 L* P' l/ `
! E! }) L: @1 b( B# s  q: g
1.3 W( c$ N; Q# G* G) p8 R
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
6 \2 T: m. n9 c* W9 k) ^. G" X4 N1 \1 G# v! C! x
   不了解這段話的意思,可以在進一步說明嗎2 q  o2 s$ G/ e# n- w1 ^
2 F' ^: [9 G6 C0 T  u- ~" ?
2.  m2 s4 C+ o) _" Z
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
% a1 g, U; t7 [% D3 o% Q/ K  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
3 j) S" ]6 o$ l) C4 U$ g3 l  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
6 R) ~: }3 u& e+ X# q# d  請問有辦法評估亞穩態維持的時間嗎
8 t% p8 E( N. g8 u" @  
) _1 |& v4 P1 _) k謝謝/ y5 Q9 |4 q+ S8 l, x6 u' p
1 v( ]# p8 U, z$ J. E) g9 u& s8 V
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. * l/ R' `4 z5 S+ T% h2 J
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:. P- a+ T1 a# [* s
empty = true if valid[WPTR-1]=false
( D5 \! e& @% [3 U8 [1 u0 U6 Hfull = true if valid[WPTR]=true' w3 T3 l2 g& p$ X, n, D4 K/ W
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已* c1 Z- O1 o7 O- f

9 t. d5 V% }) |2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
1 q% U- t. h/ Q7 K% L關於 metastate" j4 x/ J9 ?5 \6 I; g/ a% d
請問如果一個d-ff假設 clock頻率1 hz
' D& |' j; N0 o* J! z如果剛好發生metastate,metastate這個狀態
# n" h& x+ f- Y有沒有可能有機會維持1秒的時間長度呢
+ e  H$ ?& B, G0 q* J; i( }) z) ~: G& T& g
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
- p- ~3 s2 F- o. h# Y
7 r4 Z3 z0 G2 Imetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 01:30 AM , Processed in 0.126016 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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