Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
; `) S+ z% I% E( P8 h; b" R% d. y
9 Q0 \  s' [3 ]: a& s9 w, x( h這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
; w& L: ?) y& e. e* o. S4 b5 D4 s. S+ s2 X7 q+ r* x: F3 f' I" z
那些信號也先估且如我假設一般2 l/ d0 @2 Z6 Q6 K# ]- Q
wen是RX收到一筆完整的資料時所送出來的
- O, Z. @. \2 q' Y' n9 n因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
7 ~: J9 O: s0 W- t* A9 S- vprptr:process(nSysRst, nrd)6 ]5 u& C$ M3 a& a( ^8 T
begin7 h" b: m! \9 G# B7 f1 `
    if nSysRst='0' then
+ ~" E2 }/ k2 s. ?% q3 K; B        rptr <= "00000";
! W' T% ?: r9 K    elsif nrd'event and nrd='1' then3 [2 I: b4 q* f
        rptr <= rptr + '1';
. d. Q( ^. a# R7 P5 W6 j    end if;! K" `; @, l8 \1 r+ N
end process;
' z2 @# B( k/ Z. |, b, G: z* r1 H8 Z! I& w3 }6 ?
pwptr:process(nSysRst, wck, wen)
8 B9 q( P( |) W* V$ Y8 Ybegin3 [5 f: _9 r" `1 J
    if nSysRst='0' then9 }9 m8 ~3 i% W9 T* J
        wptr <= "00000";( v  e6 V3 f) ?
    elsif wck'event and wck='1' then1 w0 i( ^8 E5 N
        if wen='1' then: ^5 D5 M9 m0 L) D/ u' b/ B
            wptr <= wptr + '1';; }% U) q" n! L) v
        end if;
( e9 o8 U( D8 R    end if;* ^! X4 X+ o" u) a2 e: k
end process;6 [& A9 n5 R" E$ j" v/ G, W
. R" [  d6 i( a5 A5 Q
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
6 C1 e. C! k( z你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
' N+ D" N  S6 k5 V+ }8 F0 M, ^& @- k
Read buffer部分! [% `( j3 \" k# ~2 z7 _% Y( S" Q
# I0 b7 {! k$ a6 d
--read_buffer, g7 l/ e+ j; ?, |
with rptr(3 downto 0) select rdata <=
1 f( v  C0 z" o/ W3 D/ j: ^4 Y    fifo(0) when "0000",
6 o; N! u+ n. G6 @' r    fifo(1) when "0001",
+ g, Y1 e+ i! [- ^6 M    fifo(2) when "0010",, s; S( H# r8 n. p
    fifo(3) when "0011",9 N7 |: ]: w3 F7 w' a
    fifo(4) when "0100",) ~' L4 `( a4 L/ |
    fifo(5) when "0101",
* E* f- @3 j/ u% s    fifo(6) when "0110",9 S3 m  l( N$ L/ i+ O4 ]/ C
    fifo(7) when "0111",
" c, ^5 O) ]: R# K/ V- q5 j- ^* y    fifo(8) when "1000",% ?: j9 K. g/ d; o
    fifo(9) when "1001",& X: O9 [) K9 S0 C- ?
    fifo(10) when "1010",1 {, p. s  o& L9 r* B* G
    fifo(11)when "1011",' V7 Z& E1 [# g7 N8 k6 o
    fifo(12) when "1100",3 m7 B# I$ `. g3 @  }
    fifo(13) when "1101",
/ K7 E, i0 c9 @" F    fifo(14) when "1110",
) ^7 e+ Q% Y$ B, r) r7 Q+ }3 K    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
  F7 z: \/ z) ]/ K; K3 C3 `% D) L. N( B7 ~2 ^+ B/ B$ p: `
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
1 R) T! x5 K3 l% H) Nbegin
- D6 K( q8 d2 w4 j% q    if nSysRst='0' then
! ]  P7 w" l* P. q        for i in 0 to 15 loop
0 L1 n6 @, U2 v: N            fifo(i) <= "00000000";
. F& [! y9 M+ H: f5 m        end loop;8 a' v7 T4 h% }7 t% b6 d* Z& g
    elsif wck'event and wck='1' then
, d4 x+ @6 k, _0 K6 ^5 N        if wen='1' then8 `1 w8 E1 F: X2 a
            case wptr(3 downto 0) is* D( V; ?1 N# ^- d; q& R9 T  L2 t
                when "0000" => fifo(0) <=wdata;, u: _7 m& k  u2 o! M
                when "0001" => fifo(1) <=wdata;" t+ ?9 I* r5 @$ g! x9 }! ]
                when "0010" => fifo(2) <=wdata;0 y4 |6 k1 d6 T5 m" {# S* b
                when "0011" => fifo(3) <=wdata;
3 j! ~* f! a# F# j7 w7 _' x/ p                when "0100" => fifo(4) <=wdata;: n" l* T" b3 ?, j& D, o! H3 r
                when "0101" => fifo(5) <=wdata;; g: P0 ^0 u1 Y3 y/ @
                when "0110" => fifo(6) <=wdata;
) `, H+ ]7 o7 v( g7 \                when "0111" => fifo(7) <=wdata;
7 j( {1 G& b- S  V+ H1 f6 I                when "1000" => fifo(8) <=wdata;
4 h2 a. Z. n- I9 g2 y                when "1001" => fifo(9) <=wdata;5 g$ R: T$ l2 I4 ?
                when "1010" => fifo(10) <=wdata;7 A! T3 P1 M$ j) V5 g: ]
                when "1011" => fifo(11) <=wdata;
& |9 o  g/ {* q9 `) y' Q                when "1100" => fifo(12) <=wdata;4 p/ L( w0 O" s$ Z( b
                when "1101" => fifo(13) <=wdata;8 t! O2 t: W8 E2 h3 X* Z, I
                when "1110" => fifo(14) <=wdata;
$ h) U& o& q& y6 x/ x                when others  => fifo(15) <=wdata;* C& I+ @8 [' h: [6 @# U. u3 p
            end case;7 E9 `2 H7 h4 ]- E7 M
        end if;) V7 }) v: r$ y+ A2 g. U
    end if;; ~0 `& a( r( l" S4 X
end process;' |, T! r* R0 `! j) v& h$ r7 `" H

: N$ h; E* g$ Y[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
% e* ^! O/ V. G0 R/ s/ P4 g: k9 A我先做些假設( y% W3 q/ C8 m$ T
1) /RD動作時狀態不能改變3 x# f8 c( x# T7 P$ Y0 }& Z
2) wen動作時也不能改變狀態1 w  Z4 A: N% ^; T3 s$ t& F
如果只有這二個case的話以下這段code或許可行) ?# d5 u# ?9 z! F8 ?8 L1 Z/ z

* Z  b( p/ R4 _% ]/ N$ c7 g  e# sstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
5 V# B# Y7 D1 U# p7 G# N' bbegin
) G# K  l; {3 r3 C$ f  ]    if nSysRst='0' then, }+ ]8 |; z4 O3 w+ \# o" d
        full <= '0';
6 d  a$ S) V  u8 A        empty <= '0';
' b: f, h0 \9 [9 z2 B8 s2 [, d7 W        flag1 <= '0';
, \% l4 W, r5 D7 ]- e        flag4 <= '0';
9 ^( m0 t! F/ A) i        flag8 <= '0';
+ \, z) r! l4 @: b0 Z6 K        flag14 <= '0';8 X9 w! ^- i( }0 x2 B! L
    elsif wck'event and wck='1' then8 Q, a$ g1 S- b4 K2 Q, Z. P3 M" R
        if wen='0' and nrd='1' then
6 F; A5 W6 \0 E- C            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;! k+ ?& i- ]' V. {/ D! v1 k  d& c
            if wptr=rptr then empty<='1';  else empty<='0'  end if;! _/ E+ X8 U3 ~# E! ], _
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;3 J% C4 [2 ^- N. A: o
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;& V- C: j7 ~! T4 E# x0 a- f
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;
# f& g) ^& b+ x* A0 n! r            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
6 O" ^  C8 ?$ s* L9 \) q        end if;; L0 s# t; z4 [# P7 u7 m: p( p
    end if;
. i0 a. b- d% A& Y2 R$ W- K4 _end process;
( `$ k6 ]1 o& |) U# l% ], @8 h
2 U4 m3 h4 y) T[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
/ M8 T9 N" ?: p0 W
5 _' }" c% p& i! h+ X好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例$ O* S( G: a5 {! C4 K
% {  F1 ?1 L* w8 e$ h4 t' ~) x
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論2 ^) S" Y; F+ i3 j# j/ h9 y- z0 p
. {) a- B! C8 {6 P0 A: q
1.3 H! K; J9 O, ?9 r
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
9 j  [$ H7 S) h! s   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生1 h. n0 h7 B* y4 r* ~
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
9 ?9 y$ T. G- `, B. M. u2.5 `5 z; ?& w: T0 U4 t. _3 ~
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高# r. o! g/ W5 Z" k' P* e
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出; ]6 }; Q( x( t
   資料讀取週期RC最小280ns% p7 ?' r8 F5 p" j, l# e- P9 f6 Y
3.* j6 k* R+ K1 e  O4 z
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
! }$ i; M! X; I6 Q) r7 O+ ^& c5 j   小小於wck週期的case,會有問題,以trigger level造成的INTR來講; S: Y: Q+ P- Y' _7 c9 ]
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間' t: C6 B$ Z! {; K& b
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
1 x3 r8 ]4 Q- R: {. ^+ U5 m4 x5 J' i( G* d1 I$ K. _
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了4 |4 D/ r9 f& X7 L- V

1 T* X8 {6 \5 r0 U# ^! E7 ?第三個問題還是clock rate的問題
& x7 R- {5 l9 s7 `3 C1 y5 a  K
3 S7 o9 H, O4 c/ B第一個問題留給別人回答好了...
$ {8 N. T. \% U  ]8 F2~3問題的確是問題沒錯, 誰來接手一下呢?& W3 X+ h2 `1 z! v' Q9 C8 E

" C  q( }/ G0 Uaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
/ x$ Z/ p2 C) N/ }0 @, @( F" b( T+ P  f/ }& o+ F9 d- [7 o) Z4 Q# H) X
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]; \/ E, N  Y% ]. E; N
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]% K0 P2 M) E  `! B( ?5 u) l# x
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.  J" _$ h3 t6 X4 d( M$ d4 i
[4] Website of USC Asynchronous CAD/VSLI group. [link]4 ?; J0 u/ b6 \5 b
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
( u0 Y) h% ?* M$ m( t[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
/ U' ~  J) E- Y0 I[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料7 e* S$ }  U1 _6 M, ?& T
我會好好的找來研究看看' \- ~. X; k% \! H, u: R, F: q

$ }$ }4 e1 F6 c# g我本身目前不是從事電子相關行業,不過對於' @( m* h( e& }# a5 S2 D( s& ]+ B
FPGA/CPLD,HDL,數位邏輯設計及單晶片等1 G! ?" O! @  z' \+ c
都很有興趣,之所以要寫16550 code主要是想4 m8 r$ ~4 E! K) Q; q
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
2 Z/ J& {7 [4 Z3 c6 ?) r  s6 ^( C6 l' @3 {, A
FIFO這部分我有上其他討論區問過,可是都沒人回覆: k8 w3 y) l1 y1 S+ G
感謝版主願意跟我討論這個問題
3 V# K" Q2 P' ]; d* [* z0 c: s0 c1 |' H( F3 s, _
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多: \9 ?, [- E3 t
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見( m0 b6 [* N0 S5 p
不然的話就變成只有我們二個人在討論了...
3 @. [* x7 {+ C5 x- m7 r/ l9 j4 ]8 q2 f0 f7 W/ M6 o# k$ S
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
7 I" y* v7 _. c' u" g/ v4 F0 U) ^最近想到一種架構,用來做FIFO不曉得可不可行
. _; Q, D) O2 a2 v6 t& s8 F: j0 u如下圖所示
: |% Y5 Z: y- I7 s+ R/ r% Q% K
( r( [) h/ R8 U& C0 v先就full,empty討論,trigger level不管
- A, t' `4 d) f* \8 j6 `1 L讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
+ P7 c* @8 |+ P  h3 `  m
2 b% u/ k% e& l& {, m& q1.用額外bit(valid_bit)來指出register是否有資料寫入) ]4 m7 w( I5 H9 r. M
  當寫資料到FIFO則相對應的valid_bit會一起被設定為16 |( @6 F) o8 M/ w% z- ?5 ^5 a
  當讀取FIFO,相對應的valid_bit會被清為06 Z6 Z  R' t- `) ]$ _4 v# y, C: r: s

" d0 S! s2 l1 N* N+ L; p2.wptr及rptr用bin count
' Y: Z6 P/ `, ]7 h
; z7 L  R4 i$ l3 v- ]7 F* A2 j3.full將所有valid_bit取and,empty將所有valid_bit取nor# l1 F( k# p6 }! e& K& J+ t8 U: P
7 H9 o/ M$ W9 v% u! e4 M
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時4 a  A, c( j* o. e' j! Q7 Z8 Q
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case) L9 {- Q- X+ o5 N% D' b/ L
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
7 [- |& g5 _, B" E& {7 y4 M
7 u. g9 n$ q; I4 d! `5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作, _4 ^1 R3 m% _3 m) {: X7 O; p3 r- W6 _
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
% U' u. {2 I8 f0 X' f5 Q  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
9 L' {6 s8 Y6 ^  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一8 N/ z0 \! _6 d. z
  個位置是空但被判定為已經滿了的狀況)
. u) O2 M8 j8 O
& ^6 h+ w2 t4 k. x# ~* l  X以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
" i/ N6 G! ?" k" g7 u* u' _7 ?
! @8 W7 P! v4 m7 d0 M* R如果不管coding style的話, 這個想法很好
3 T1 q# A/ L, w9 x5 L6 N9 s4 x! e, G( Q" l9 y" Y- P
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
' _1 L" b8 ]3 ?% u0 Q8 E. a6 \) \跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
! }& y  X# H9 B, y2 d9 U$ Wanyway, 互相交流吧.
% D0 T# b; F1 P4 b& C# i- V7 e# H2 o7 t6 Y2 O" a! v: Q
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
) B" G  z, C+ U3 I) w& ]我想到這個方法除了電路會比較大外還有其他缺點
5 H" n+ ?4 D7 d
% P8 D& n7 e  t5 A$ O! P1.不適合做成容量較大的FIFO
1 {1 X; N. G2 a4 v3 Q" O1 Y
1 Q# r! t, Y7 h' H! a/ E  L2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
: V* G2 N9 U* `9 g, c) D" o9 f9 @. Z2 y
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
) n' B/ U! }) o0 ~; l   會有較長的延遲時間,所以速度被拖慢了
. G0 u, K8 @; c0 q
4 I. B8 d+ L' L: P- T9 b# h謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO3 x2 q: Y& q  g8 r6 P% z  m
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
$ \3 D, T* |# [1 [6 E3 u/ U5 B8 u但是做ASIC時你會發現其實很小的
9 h3 Z5 i" y0 Q$ ?: ^; V! s+ t: M: |: j( j5 t
4 O% s! f# i' d, g+ o5 W1 h
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
& k) v  m6 `/ ?這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了4 N: U5 G1 V! @. [$ G5 k0 m

- |( |& ?# s4 l8 ~2 B6 n8 Y3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
" o0 P# O# Y( @/ E6 u2 u6 C% \相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好) K, w% i! M/ s0 G4 v- @3 n

9 n/ T$ j7 o2 c6 H# j" T! H5 T; M
" u, e- j  B6 {* M. T) [1.1 l3 S) h1 Q3 O# f2 i1 A! ]) x: m
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
$ y4 P( }$ B' x+ c- d& k' t. I; A% o8 P# U4 V2 [+ |9 t+ e
   不了解這段話的意思,可以在進一步說明嗎/ H# i* M! z% Z- l1 W, f
7 d+ W9 o* [, x: s- Y
2.% z: a. p& V. y$ Q" U
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
, K, p+ J- U( U" u. P  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會3 \5 t1 b! _3 X3 K0 E
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
: l* |; y! r: _7 O0 X4 P  請問有辦法評估亞穩態維持的時間嗎
1 z; m$ s/ B( v' V7 D  
& Y2 ~: A0 M/ N# @" c/ W/ o( p謝謝
" q7 ~) E, c0 X; ]$ O, y4 E
5 Q! m5 j" J+ r5 S5 s% g  M: {[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
1 _( Q2 t  U# c/ h& N3 H1 q我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
8 F9 {4 o/ D: U$ A& n0 Iempty = true if valid[WPTR-1]=false2 D) i. I6 B( ~$ e+ j5 X/ |
full = true if valid[WPTR]=true
( |" M# u: s3 K  g  o' X# W可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
8 E8 }7 E! Z) A. T, x8 m1 U( Y7 h/ u0 G% w. {$ a& [. ]) F/ S
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
+ v* y# v. K0 p7 B關於 metastate! v  M' j( a; V$ Q, t
請問如果一個d-ff假設 clock頻率1 hz: J! K0 @: r! v6 {6 ]
如果剛好發生metastate,metastate這個狀態
9 `8 s0 J1 w9 O有沒有可能有機會維持1秒的時間長度呢( F: L4 w0 Y7 I, d& C" o& m

- k' v& I. L% o) W7 U3 m2 R謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
% N* u5 @$ m! Y8 l$ b7 K1 ^- g& V8 y0 T9 P9 U7 |$ ^2 f) y
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 12:18 AM , Processed in 0.140017 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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