Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...( q+ N7 b8 u) t0 s2 z  T
2 H+ F* |% q+ Y$ |
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
! f- s3 u6 Y6 i/ {* M; N3 r* D2 B6 V$ r6 |' I$ I+ H! m+ W2 ^# _& s0 B0 d
那些信號也先估且如我假設一般! y/ k2 I3 Q0 ~
wen是RX收到一筆完整的資料時所送出來的1 p; E9 [+ L6 I' g( u
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
/ {! o8 F2 v3 b) ~+ @prptr:process(nSysRst, nrd)
1 e8 v: N* E) M8 {; }. ~, gbegin  C& p. S0 E. j) Z6 m6 J; B+ w0 b
    if nSysRst='0' then
/ M: [( ~+ v* \* L$ h# U        rptr <= "00000";
: S: g6 S- }. f2 J    elsif nrd'event and nrd='1' then
; D3 v" C2 A6 U) j        rptr <= rptr + '1';
0 b0 i9 W% }* E5 @    end if;
8 `1 v5 }$ Y+ Hend process;
( I6 r9 n) I' Y$ p! `2 {6 C( n3 V
# P! Z3 F+ T6 z0 A- Ipwptr:process(nSysRst, wck, wen)/ Q: ?/ z9 s( ~6 J( F& C
begin# A; q/ d4 {3 h4 k& }
    if nSysRst='0' then0 e1 Q% C6 u, p1 z
        wptr <= "00000";
& l2 I5 W* X$ z  N    elsif wck'event and wck='1' then
8 A' O! J. {$ m8 c        if wen='1' then3 }3 n# K7 H0 q4 ?- \5 `
            wptr <= wptr + '1';& v6 N/ Q7 k& g! {. z0 b4 |9 U
        end if;0 t! q3 f$ g1 k6 a$ D4 e2 r7 `5 X: f
    end if;
* H" M' ~2 G, j' C! V) Kend process;
3 M7 ]4 B8 Z1 V0 z/ c6 n; F1 P* b2 I: [5 B& d
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?0 J- K/ h. e8 Q+ k& a
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
6 ]" c6 z8 W4 y# A) O7 ~6 j# f$ e+ }3 `  j7 h; G- S4 X
Read buffer部分; y1 F( E+ U9 M0 x! {% b3 s

/ w' R1 T5 m* x6 b# Q# D--read_buffer6 t! g& t, I8 s4 F8 p8 [
with rptr(3 downto 0) select rdata <=) F( |- [' ]4 v& F9 U1 o2 U
    fifo(0) when "0000",
( Z- u8 \% k! U  o) R: ]8 ~' H4 p    fifo(1) when "0001",
/ C' J$ j  w( `0 |" g4 y  r8 d    fifo(2) when "0010",
- R. ^6 E6 D. K% n    fifo(3) when "0011",6 ^/ O% n8 ~  @) |( r
    fifo(4) when "0100",* i' m( U) p# ?' k/ t
    fifo(5) when "0101",6 N0 ?0 K! F) L4 o
    fifo(6) when "0110",
- x& }& M* s% M  j$ i    fifo(7) when "0111",- w0 u5 g$ N2 f) E
    fifo(8) when "1000",. y2 T! `! P! |" Z7 ]7 g
    fifo(9) when "1001",
+ N; u7 c5 p9 j# Z$ H    fifo(10) when "1010",& ^; L% X( v2 B0 Q' Q% z# A9 t
    fifo(11)when "1011",- |0 [/ J, B* m9 A* j; s2 \0 W
    fifo(12) when "1100",% _- k" i! ?! N* K
    fifo(13) when "1101",# I) _3 M2 J2 o" n. l
    fifo(14) when "1110",
, y& @& y8 C: s9 B3 k" s    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分6 a  L+ h1 z# s" e) O( y) [) ^

  A. Y7 j2 u- Y2 w4 }6 fwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)
: _. ?' _6 p( T* ]begin, k0 l/ b% I" n- v$ M
    if nSysRst='0' then% r3 B/ Y3 K; u9 a; d+ N
        for i in 0 to 15 loop9 y+ P- H, D3 h% f6 [
            fifo(i) <= "00000000";2 G/ T0 Y, T8 z; w7 y  d
        end loop;
1 Y+ W: U2 m2 R* x; \7 h. T/ _' _( R    elsif wck'event and wck='1' then+ L2 `$ B8 g9 V) ?/ \# g5 Y5 \8 V
        if wen='1' then1 X6 e3 D# U0 X8 u( i+ g
            case wptr(3 downto 0) is4 w  t8 I) M, }- e
                when "0000" => fifo(0) <=wdata;% d' v- j3 P# \3 j# G$ K
                when "0001" => fifo(1) <=wdata;
. K! z* r7 Z$ s) P                when "0010" => fifo(2) <=wdata;/ _2 M+ \! D/ x" c
                when "0011" => fifo(3) <=wdata;
3 M( c9 u  z7 s. u1 v  o                when "0100" => fifo(4) <=wdata;  H' A: A: }7 G+ ]- \) G
                when "0101" => fifo(5) <=wdata;
1 @. H0 D& k9 D% Y& E# S                when "0110" => fifo(6) <=wdata;
, q( u% C, ~6 f: a* t                when "0111" => fifo(7) <=wdata;* M& S8 ?! f- _) `
                when "1000" => fifo(8) <=wdata;4 s7 |1 C$ u' J9 @: W
                when "1001" => fifo(9) <=wdata;
. R1 Q1 S" j0 J                when "1010" => fifo(10) <=wdata;; T* q( H1 X. _* a5 `7 J
                when "1011" => fifo(11) <=wdata;
( W7 g( r9 L0 Z& i0 I8 t) P                when "1100" => fifo(12) <=wdata;3 Z8 E/ g* [7 F
                when "1101" => fifo(13) <=wdata;2 Y( I7 a6 U5 q7 b8 n# Y: C
                when "1110" => fifo(14) <=wdata;
! n. Z; W; l2 A2 \, a: J- d! c                when others  => fifo(15) <=wdata;
8 Z; [" I- C7 P6 f% e4 t            end case;
' i; ?, O& N$ P4 p, x1 M2 C        end if;
+ ^# G' d1 j: R) ]) C3 L    end if;, {# }( x) i$ g" `! ^* e4 Z
end process;% o$ u+ m. D: ^8 j% {' Q
4 Z+ c8 h5 r( Z
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分/ }1 N4 g4 m% @9 d7 ?
我先做些假設  X" q  Q* b6 U6 d* O6 c
1) /RD動作時狀態不能改變% d$ s0 e8 n3 ?7 s) V
2) wen動作時也不能改變狀態; B. R2 T& i$ \* R6 K7 D: ~$ n
如果只有這二個case的話以下這段code或許可行1 s8 m  i# Q# Q. r% A2 y' b4 \
  }  g* Q5 _: p9 E; c! [1 Y, }
status:process(nSysRst, wck, wen, nrd, wptr, rptr)
+ R% Y& y6 \0 Z* Sbegin
0 X$ Q1 |8 o( [7 W0 q% H    if nSysRst='0' then
( {% ~% D  [! N. W# H        full <= '0';
, `* ?/ n0 O9 h0 H        empty <= '0';
4 P7 Q* f0 o7 k$ T# {* d        flag1 <= '0';0 |3 |! \$ {3 h2 J+ \4 E$ w
        flag4 <= '0';
9 a' v1 Z" K- A) M/ d* q        flag8 <= '0';1 ]6 ^& I4 q) E$ a5 t+ [
        flag14 <= '0';  n9 [/ H8 t9 c% R8 E6 @4 R
    elsif wck'event and wck='1' then
) F, t% Q  F& o2 p        if wen='0' and nrd='1' then0 m* F2 S0 O4 D5 Y+ }
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;# y& [& w- A! @% x' F* I3 w- I9 y% i2 o
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
! c1 f. p3 F+ K2 S# N2 l. p, K            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;, x( j6 a6 \0 a$ a- D8 U
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;2 F; T+ \! ~/ p' W, j8 w8 X+ V
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;* g8 F6 d. Q+ B; v
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
0 B  _( {- H* H        end if;# N* N. H4 m! [* |4 K3 s
    end if;/ ?* v8 v2 h" u; h
end process;
+ l/ w9 k: U3 g; \; V, v, \: _7 E$ u- o
: a5 n  i- h! z: C( @; ~9 G& a[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高  s+ m. F: f+ Q
$ Y: l5 T) S7 O, ~
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例9 A! M1 w0 j& F) ?! A
' Y- O; L0 f$ l! F" ?7 C- F
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
" n9 e5 B' w0 }/ ^7 ~
# [/ `- H4 p9 J! c$ P1.
4 \  K" z  n7 d   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
: j$ `/ k# F: \' a! `, M   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生( C5 n3 V$ i% g: x/ D
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一3 s& q. b7 y/ G" @/ U: l
2.5 ]0 p& L6 N; h8 a" w
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高% E0 A& }! C) r$ _$ P
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
9 H; p' v( ?  j& v0 l1 F   資料讀取週期RC最小280ns$ j' n  R! ~8 Y5 Y0 ]4 t/ t% _
3.' `! m2 c; K: m% ^+ m
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期: m, I7 \9 a' H
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
0 |! @$ H: u: S% C1 N. ~; q   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間/ s9 D- k. i5 n# @% V2 ?
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了: h6 |% m" f! H" _* Q; \9 A4 x

+ s! o$ ?) Q) e$ ?! d5 N- V第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
( W6 p9 ]9 H) ^4 b) @  t7 P, ?; s8 L0 ^6 d7 ?( o; _# I9 B
第三個問題還是clock rate的問題' r! ]/ e: Z/ t7 H6 A4 Y* C) w, N
: e3 e. X2 r5 ^& c" m
第一個問題留給別人回答好了...
* M. O. J& Q5 `* i5 \. H: w0 f. _. A6 [2~3問題的確是問題沒錯, 誰來接手一下呢?4 f) k3 G2 I2 l! J/ f! t
$ g- \% b# z7 z$ {
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!) |2 I; f3 F" p( Q2 g- M, [

$ p3 _, Y0 u) F  ]% ?% s3 u- j, w[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]+ B6 r" q! Y( [8 o1 Z; F, }
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]& [) S( H) u0 u. g. @/ W8 p9 s, n
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.) v2 B4 o  r! f( b) F
[4] Website of USC Asynchronous CAD/VSLI group. [link]
" s& [- m' a0 D( N; O6 S" h[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]/ F/ t9 V- \8 {
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] - d0 q3 t3 R: Q
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料! o. R) P1 [8 O+ x
我會好好的找來研究看看4 n9 Z% ]+ V! v, H5 ^
: d0 j" M; Z, e$ f
我本身目前不是從事電子相關行業,不過對於
% D. x8 t4 D! m# {  c( ]1 lFPGA/CPLD,HDL,數位邏輯設計及單晶片等
: a0 n" K: K* ]都很有興趣,之所以要寫16550 code主要是想
: f0 ]! h. c; b! n9 ]3 d; K挑戰看看自己能不能寫的出來,不過似乎沒那麼容易) g/ N+ Q- y" }3 i+ M- C2 X0 o$ J% G+ J

8 F9 w! p4 @# w9 UFIFO這部分我有上其他討論區問過,可是都沒人回覆
. d7 ]  M( H& T# P) z% I' C7 a( m: D感謝版主願意跟我討論這個問題9 t; U; _/ W# D6 x6 g' F' E
# u1 W# n$ ^* T8 w
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多1 Q5 p8 B+ F1 \
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
4 ?8 T* N$ }& Z) s不然的話就變成只有我們二個人在討論了...$ C; q- L2 V, f; j: ], T2 z& Z

3 _/ f1 x9 ~1 }2 W! e過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好  ~( ]) n. T( Y9 D: P
最近想到一種架構,用來做FIFO不曉得可不可行" M6 j$ u4 s0 e
如下圖所示
) L5 J! Z! O. y8 D, f7 v3 z
6 F/ L- i2 L  U" R* N2 p先就full,empty討論,trigger level不管* E/ @6 O- z( o9 b) w* s
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
, e, U0 Q/ s: D3 A0 N* k! b# }# {
+ m* ~1 u& h. I0 ^4 G1.用額外bit(valid_bit)來指出register是否有資料寫入) z; `) x9 X" b$ C% Z
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1$ m4 O5 p  `! T' y! K( o8 G
  當讀取FIFO,相對應的valid_bit會被清為0
9 G7 p5 Z' a) G4 L9 m: n4 e% D+ y5 e+ ~9 t" T  Z" ^/ @
2.wptr及rptr用bin count
( N3 `' V% ^' q+ I
& w; Z3 R9 O) ]: e6 O! r9 u3.full將所有valid_bit取and,empty將所有valid_bit取nor
7 i8 X0 s: X8 Z7 i. W  k6 K% ]; \1 K+ @( W8 j
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時% \2 E7 h- y* e+ v( _
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
/ ?, h$ \) q: _1 H) A/ O  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
4 S! e' i" K7 v9 ^% q
1 F6 a* v! {2 y  T" V5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
( C4 L2 K' ?+ b9 y0 I4 M  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk: m$ P4 [' p; }
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
/ p% W: W( I+ M. g+ \4 ~  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
6 @! X2 o( V8 ^5 a4 d  個位置是空但被判定為已經滿了的狀況)$ Y9 Z+ j3 Z3 u$ ~

+ T9 k+ r' {8 |" D7 y+ ^以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意! n5 ^- s# U1 l& w" r: z! @
/ k! C) f+ q$ `) G; l
如果不管coding style的話, 這個想法很好8 f& Z6 P+ d' X  g8 ]
) _3 P( Z) i2 A8 x3 g7 S4 h
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
0 G& q8 u% m4 ]! B* h% z跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
, Z8 J1 U9 p4 wanyway, 互相交流吧.- |; f% Y5 ?! k+ H2 X! H
/ N1 C$ R0 I1 _- F& d( j
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好0 z0 a0 G" c: m& Y* m. d% M( |
我想到這個方法除了電路會比較大外還有其他缺點
1 v  P3 o+ A/ y- Q, G1 U- V$ O. c; G  t# Q9 S, K1 E4 a* F( L
1.不適合做成容量較大的FIFO. B4 o/ x3 Y5 s3 R
$ m7 J" B. R9 U8 \/ L
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
0 L  M) H* }1 ~$ v2 `5 C
, v* u% i# Q7 N" X) I- o3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
' @8 {4 ?7 y: L" ~5 N7 m+ X8 ~   會有較長的延遲時間,所以速度被拖慢了
3 X  h/ B7 a) u! h. T8 n! w& t/ Z* s8 `
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
! `( ~. t, e2 @6 f  P我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
, B" ~& |5 u" Y$ w' g. E2 `但是做ASIC時你會發現其實很小的$ s0 B$ j( e1 t8 @3 }: q2 {

: ?7 T% r; y' g& P; b
1 {% v; _2 D4 Z8 B$ n" C# V5 H6 R& P2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響8 C& D( E: X% e! _* F$ ]
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
! T0 ^. a4 q4 Z% M% `' ]0 C, P' N% M& C2 ~( y3 d1 B8 n7 _* ~+ N: e( B7 y
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了! R$ J/ X7 t8 |6 l2 j5 |3 E
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好( P$ u; T; ]) H3 E+ J& |. g8 U( j

  t1 j3 K5 l, O8 s% d6 t. q* i1 E* v. g3 O( T3 X) \' k
1.+ Q! y* x3 b" V5 y% i, k
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
2 ]8 B4 r0 p: J4 o" \& Y
. W+ x$ a6 D  I, \$ M: c2 u9 a   不了解這段話的意思,可以在進一步說明嗎
, e  }6 H4 h/ z* D  R
6 I5 ^" X$ h- g% M0 Y2 R! P2.
3 D: E2 g. a, M* {' I6 U: }' w  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間7 b4 ~+ f/ E. K& z& O- \( P' D
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會% u1 ]1 h% ]2 a: {$ U
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
1 b% k( X4 J1 u3 Y9 X* ]7 r6 A" q  請問有辦法評估亞穩態維持的時間嗎6 t+ ?7 n5 c! F
  3 [& b$ P, a3 \% w. \8 W% D
謝謝
/ g0 I. {, z) T& \/ _
: d$ ?3 V! ?' W" d# [1 ^6 t, ^[ 本帖最後由 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 a( ]7 f: n- V0 K! p+ Z3 @我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
% J8 I# @; T; L, L7 I4 Bempty = true if valid[WPTR-1]=false/ s# A+ A# p, I1 @( _
full = true if valid[WPTR]=true
& k: j: R/ f' m( i可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已  X/ ]% ^$ {* M, s" g0 l" {3 g
' @8 p# w$ _  u) D% r
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
( N/ ]! t' f( N關於 metastate
/ z+ ^7 K: @* I2 [* A請問如果一個d-ff假設 clock頻率1 hz6 |' n, ~: [1 u- b3 b" K% ]
如果剛好發生metastate,metastate這個狀態! N0 Y1 V9 w2 J: q
有沒有可能有機會維持1秒的時間長度呢
) i" n* [  ~1 x& Y$ Q) d
0 y2 h: V2 Z; ?: A3 @7 w謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
9 H& F$ w' z# [5 L! J$ ]4 X$ i" j1 J) B' n* z! U, o% x/ g+ s1 K
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-29 06:49 PM , Processed in 0.126007 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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