Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
1 d/ u: X; s1 r" B) k  c) V
9 f* l1 K) w- c; v% c. g' n2 `這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多& t3 E! |* A( a" U+ {5 Q
3 v3 \$ J6 g1 e, U( z1 C' a) e
那些信號也先估且如我假設一般, G2 H" h: z8 k# V$ b
wen是RX收到一筆完整的資料時所送出來的' V, s6 |6 ^- g( n9 {2 e
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
. z  c" f4 L& V, m% mprptr:process(nSysRst, nrd), f) u0 c6 j+ I, K( g$ t) [
begin2 ?+ o- s' `) b6 y( |8 Z
    if nSysRst='0' then
! O/ N+ t% e% ]! Z2 f* u  k        rptr <= "00000";
) Z  D8 I' O8 D! `" ]+ N; l) f; {( W    elsif nrd'event and nrd='1' then3 ]4 h5 L: C4 ?: S/ `  f
        rptr <= rptr + '1';0 u! \4 S) ^& N" }
    end if;
( W! u' C' p, A2 w" F6 rend process;
8 [: \/ `* a. G  S+ v* m
1 i; N4 r/ m. d' h& k4 G. b+ Gpwptr:process(nSysRst, wck, wen)" ~7 R5 D! X$ M8 T- @/ C- p( H
begin
2 j1 d1 g% I, D$ T5 k5 q& U$ x    if nSysRst='0' then
6 L2 }. S( g5 ~5 }5 R        wptr <= "00000";) @  j/ ]- W6 b" n* j
    elsif wck'event and wck='1' then
6 H$ W9 q# s- p' m) K        if wen='1' then
( C, z5 _6 U4 d. H* \; U            wptr <= wptr + '1';3 ^$ u! y0 m# V3 q3 q8 D+ s8 e
        end if;
1 w9 k' x% u9 `) @, q    end if;7 n. e4 w$ F" ?. w# ?9 h
end process;
9 W& c) F" T9 I, p! f
4 z( d- H# V( _; f3 T6 U5 ^假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
5 F4 P, V  B. k8 D* u- ~- F你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key( i, ^5 N  \' ?4 ]2 B2 |" |

, m% \, V: ^8 x* TRead buffer部分
# L2 S8 ^1 R, ]/ x) R# Y
6 p9 ~# K0 Y# G  m$ W--read_buffer% _  s$ h7 E6 G  d; k
with rptr(3 downto 0) select rdata <=, S0 Q$ j. D. n5 t. O2 N+ b; d
    fifo(0) when "0000",6 ?8 f8 t8 F( D. r% q$ Q9 F
    fifo(1) when "0001",$ Z9 |5 m  _6 _6 [" H9 E: F3 S; L. Q  P+ A
    fifo(2) when "0010",
2 ]6 ]5 r5 C6 N2 `5 |7 {* X    fifo(3) when "0011",
3 E! e7 o- V% Z' H) ]' S    fifo(4) when "0100",
% b% D" z+ `* j    fifo(5) when "0101",
: t' z. m$ l/ `  c2 h7 {, S/ u    fifo(6) when "0110",
& ]4 b8 L6 c8 z8 b! H: N: ?    fifo(7) when "0111"," i+ v3 |5 M9 B) X' ?- r' d
    fifo(8) when "1000",
5 L" Z* |3 A5 x$ W    fifo(9) when "1001",3 C! S. g0 w3 J* U/ g" u( f* c
    fifo(10) when "1010",
6 G) R; `% [1 ~2 G    fifo(11)when "1011",/ B7 d" S/ L# |# t: G, C, {
    fifo(12) when "1100",
) W; D% n* A6 e& i0 V4 V    fifo(13) when "1101",
8 ], X! z( w5 A% _' K2 X    fifo(14) when "1110",
: k) X$ v6 F" w# J6 g    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分9 a* h5 N" t6 _0 B

6 F+ F" ~$ f* W& Z1 Ewrite_buffer:process(nSysRst, wck, wen, wptr, wdata)1 _6 }. G2 J! A* N. Z5 S5 ]
begin
6 Y$ U6 F3 Y. J- X" l    if nSysRst='0' then) M# ^0 V/ X5 y0 r, h$ ]2 w
        for i in 0 to 15 loop
2 f3 {$ q6 X+ O- [            fifo(i) <= "00000000";
' `: G) S3 f8 L9 R        end loop;
) R  ~" e& H* G, ?    elsif wck'event and wck='1' then0 P& [! S/ E% ^0 ~
        if wen='1' then6 C' X! g* B1 H) j, S" o3 I
            case wptr(3 downto 0) is
3 Q" t- ^% j" j% o- i& ]                when "0000" => fifo(0) <=wdata;, ?% h) [8 W- U) l; g4 h
                when "0001" => fifo(1) <=wdata;9 U0 S5 R  s  F% G! Z; Y: I, N
                when "0010" => fifo(2) <=wdata;
* X5 i. T* w! b! c8 ~                when "0011" => fifo(3) <=wdata;
5 C4 P# I7 p; |: H- D4 M% c1 ]                when "0100" => fifo(4) <=wdata;- z) _$ K2 u$ i. C) C5 o
                when "0101" => fifo(5) <=wdata;# t$ }* o" E: q3 i
                when "0110" => fifo(6) <=wdata;
2 z% z% G( i1 ^/ U- s: d- y- N) X                when "0111" => fifo(7) <=wdata;
& e. P) F- n% x0 V                when "1000" => fifo(8) <=wdata;
: J3 X" ^" d/ U: i& O: Q                when "1001" => fifo(9) <=wdata;
. q, }! Q8 f2 ?% v  ^                when "1010" => fifo(10) <=wdata;3 s  l" u6 @$ K% P
                when "1011" => fifo(11) <=wdata;
# g- S4 B- }, D1 ~+ d6 g4 r3 i                when "1100" => fifo(12) <=wdata;/ g1 F3 W# {# r, V' H2 V1 B
                when "1101" => fifo(13) <=wdata;0 ], p! k$ r, N* @3 W( z
                when "1110" => fifo(14) <=wdata;
& g" O& |$ C! U: |1 e) a: o) N! w                when others  => fifo(15) <=wdata;/ f4 ^9 _$ N6 u
            end case;6 K1 E" X/ }. Y5 j, g
        end if;0 V0 q( [( d7 T% F  O# P! S
    end if;9 k! k! g1 j" S" F7 I# q% V# n
end process;
& V+ ]# @6 R/ O3 I# t& V8 j: v0 W0 @: n( O5 s- A7 f6 P2 \
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
' W# D" |3 R1 ^我先做些假設
% K  G$ x, N8 `7 w6 z- z; ~6 ?1 \1) /RD動作時狀態不能改變! G3 S7 ?' A& }) B% n+ t/ O# _
2) wen動作時也不能改變狀態0 D# G# }( F1 q$ f* G2 J) c
如果只有這二個case的話以下這段code或許可行
+ Y$ o7 T/ I3 L  H- \/ I. j1 u
2 G% ^$ _: y2 [  r  Z- Bstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
. J! u0 m3 Z- e7 L5 H: R2 tbegin% D; W% n8 |1 z/ _8 W
    if nSysRst='0' then
* d: N8 M- O6 ]$ M' v: R2 W3 D        full <= '0';  O" N% L' Y: z( X+ C& E- Z
        empty <= '0';
& O9 Q- a% W/ l/ h; t$ p        flag1 <= '0';
9 j- N$ p& h  M        flag4 <= '0';! n& V6 E4 D4 [
        flag8 <= '0';
) i# s6 W/ R9 L( I+ P        flag14 <= '0';2 a' _6 Z  G% D' p2 J" o' p
    elsif wck'event and wck='1' then7 ^* N9 L9 R, Z) C7 c( z; \/ N) t
        if wen='0' and nrd='1' then6 v+ e% [  J: l/ c
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
, w. E# D4 Z) k+ O) |            if wptr=rptr then empty<='1';  else empty<='0'  end if;
' G: H- e7 R" w6 n& i( h2 e8 z            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;( q( L  v$ S' S8 A
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
% a) |3 {9 Y& D4 b            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;' U4 C, v7 ]$ w, X, N% _; m* L
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
; I/ d: B- O& j' k* G) @" P        end if;& \3 N9 j' c) D+ W5 u5 d* z
    end if;4 n+ o- K7 \% Y' [9 b, _% q
end process;& _- b" G: v; q% F) Q: g$ v- ?
: p: K2 Z* D7 b9 }: ~9 T
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
/ e) L- H9 Y1 N% @$ o/ N1 n; W. G8 k3 t6 E; [
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例6 ^/ ^4 B6 z$ @8 ]; I- f
6 M4 L* b: C6 N
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論/ F) t. B9 b3 `& H# H
8 V/ P. V8 i/ S+ X: d/ U7 e" g
1." R% I& f$ Y1 \! _; h
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
; M! E" c* H. p2 g8 P* V+ u   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
! K6 d' v; U% R   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
7 y# d+ c2 }0 J2.: @9 M) @9 G$ o5 @  ^+ a
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
0 t% v: }# |9 Q1 k' Z/ F, Z   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出  {% c5 G2 o0 @5 X# Q
   資料讀取週期RC最小280ns
  |# o8 E, x2 X$ [4 n3.
% s& Y, }! |+ D( d* ]   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
! @. q4 ^" A% F& a4 K0 q   小小於wck週期的case,會有問題,以trigger level造成的INTR來講0 w4 j$ @7 y! c7 A
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間6 W  X; }4 }! [! [# z7 z& E. q- _6 y
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了' t! H6 C) @+ F1 y5 u
, k( m( m9 T8 R9 p0 c) B* j+ @0 _
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
& t7 g! t( X8 c0 Q; c" L8 J# ~4 h' Y4 R8 B  D4 }
第三個問題還是clock rate的問題0 {. U! b, J3 J2 e' ~3 t7 F7 x
, T$ O; v  \9 _0 F$ Z% `
第一個問題留給別人回答好了...
2 O. v% n7 F2 ?; @& L8 i' c2~3問題的確是問題沒錯, 誰來接手一下呢?. U5 W" e2 U6 ?

7 F" {7 X9 l. a; ?& ^  m' qaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
/ g) J2 _4 v4 E% \! ?( o" S' |/ e
+ ]* N7 X( r5 H8 n[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]; `5 C0 ]+ Y) D" g
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
. I9 t3 \, l& i+ q, F4 O' o" H, x( t. |[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
6 `( L: n, D7 p  j& O: V[4] Website of USC Asynchronous CAD/VSLI group. [link]6 t+ z! v) T) }8 W+ X1 v$ H
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]& ~  d( @6 S5 |& X. i( `  L0 I  I
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
6 C- ]& |/ M0 l. v  q8 F+ O[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
& A4 h4 e' d7 h1 w我會好好的找來研究看看% J6 Y2 `/ ]! p1 `1 C

: |% }0 Q$ ~( i+ b9 n6 n我本身目前不是從事電子相關行業,不過對於
7 S/ K$ O2 F: b- ?FPGA/CPLD,HDL,數位邏輯設計及單晶片等
  u! D2 F; W. S" r& p都很有興趣,之所以要寫16550 code主要是想9 c6 s% b8 C# r$ w, _1 \( |
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易- i/ ?' O! H9 H7 b0 d. @
1 I$ M' G/ k! {8 j8 m2 d7 H" Q
FIFO這部分我有上其他討論區問過,可是都沒人回覆
1 i1 @- |  V! _- Y感謝版主願意跟我討論這個問題
+ j& w* w2 t$ l
# B, Y; X! h" w8 G再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多! ]8 o7 e( f" H3 i  {  {4 w
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見' |! U# D+ z1 j; x
不然的話就變成只有我們二個人在討論了...
) Z% M# L% R% K, d8 {8 f1 O. A
# n1 v# c9 i- v8 d過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好2 J! r2 G! j  l8 |& |# ?9 }. K
最近想到一種架構,用來做FIFO不曉得可不可行
+ ^# U; a# t9 t" m6 g' d如下圖所示
* E$ J) ^: k) H( K. X( G( ^  b
+ P: b4 T* k4 M1 G1 [先就full,empty討論,trigger level不管* J, w5 ~: |! Z, S! z) K
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間. V+ D; N3 K0 R  L
7 b" e% j8 i4 ^# G
1.用額外bit(valid_bit)來指出register是否有資料寫入
9 I) i9 q. N, T  當寫資料到FIFO則相對應的valid_bit會一起被設定為1! Q0 N9 e4 U/ X' k$ [% @6 [
  當讀取FIFO,相對應的valid_bit會被清為0
: g  u# B! s# \9 Q/ a' T( k* F" M; e8 B
2.wptr及rptr用bin count$ P( i+ Y# @; f( ?6 v
; y" f: i) `' W) ^; y" s+ m  L3 Q
3.full將所有valid_bit取and,empty將所有valid_bit取nor& H* R4 r" A2 O4 T# d, _

) b( ?, F6 K1 U; Q4 [, @  F4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
4 b3 D6 P9 Q$ t5 V4 H8 p8 Z  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
; B& z* x) ~& ]3 U, M  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已* @- t8 W& e# d- C9 z9 P+ H) G
" \" i0 }: J8 c, J& w1 m
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
0 ~8 ~0 w% ~' K" a9 N+ M$ T& q, u) f  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk: v. L3 I: F# i2 p
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
. J5 B4 D6 v0 Z: r  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一( e% S3 F+ n$ k. k: k- b) \" E
  個位置是空但被判定為已經滿了的狀況)5 x: c) q3 b# Y9 F3 [& n5 D4 t( G

5 [7 X2 y5 @: Z* O: y8 k# F) T. l以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意2 }9 w9 A9 o) @

3 k9 u' D( y2 v: a4 q如果不管coding style的話, 這個想法很好
: p; ]+ n) ]' i! n( g1 ?6 }  ?! d& z# O' q
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
6 e: u+ n+ I, f* Z8 S: y* o5 m* R跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
% E/ v* e3 {' U; danyway, 互相交流吧.
+ d! R" I5 n9 a- F5 w( v. g0 V# c. ^$ f1 E# O6 Y
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
. G. r: y  q6 y4 X% p我想到這個方法除了電路會比較大外還有其他缺點
# h+ G+ y6 @  N6 f, ^6 Q9 m! _; p, _7 c! U& [* ~, g
1.不適合做成容量較大的FIFO
! N( I& \: w! ^) W5 ~, v
# y  m* y& t# [3 r$ p: }1 e2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
" L, M, x9 v+ b5 I- p" x" ]' X$ m5 k7 i8 J" z+ p/ p& R
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
% F8 m$ \/ X% R   會有較長的延遲時間,所以速度被拖慢了3 _8 i0 H/ F7 w& C
) r) R+ m, t8 E# I
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO* A0 a* [- t$ i4 l) `9 x1 J" D
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大7 B6 v/ A% ?" m! m1 E( h
但是做ASIC時你會發現其實很小的
/ N" v% e+ k/ U" \9 Z" Q$ W( T! _& N1 [4 v! U. Q

$ G3 H/ J( u' }, u2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
; i, |' R4 G8 [/ m/ v" i這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了7 E) q& e6 r5 u  y/ P/ g; K
$ X+ r: w( S( ?
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了" u/ X2 Y: {; Q% f% D1 ^8 C' L
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
( e3 u0 x; {" y9 z2 B- t3 N- }4 d2 L5 H4 W- i1 w) H! l' @  b- z
* W: e+ P, j/ @1 _6 q
1.3 x4 z" p; u2 Y6 D. D6 O
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)", m+ h- V; o. g* _  x9 j

; J* q1 I" ?. c+ t( Q9 g   不了解這段話的意思,可以在進一步說明嗎& X' j" o$ {/ R: |! U

, H5 c& V; U; r5 P+ S2.
0 i9 |& U: L) i. Z& t  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間/ |! }4 j" D' N! o3 o
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
7 G+ ~9 P( C; H8 O: v, M1 {; m  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
4 b2 {% O$ V2 B; s8 X4 W  請問有辦法評估亞穩態維持的時間嗎
7 l* z4 Y) D! k* ^! ?  o/ ^: e  1 `+ w" }" |4 s
謝謝; u  `* {6 K0 N& N* s6 ~5 }$ Z' {9 Q
$ ^$ C: X" A& C: 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
/ g% ?9 I8 z5 b( C3 q' h2 L( o3 E我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
2 i0 y4 f" l0 u2 r1 Z+ T+ rempty = true if valid[WPTR-1]=false
8 s+ B. O, z# `/ [- }& Yfull = true if valid[WPTR]=true
/ G0 N( K: q- L8 m( _! R8 i4 [可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
% v1 [. k  e6 k1 N# v1 e; w: Q2 `$ k/ w7 ~8 P
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好' p$ ~: h& F, j/ n0 n- H$ H
關於 metastate) W; t; h/ C; X) E
請問如果一個d-ff假設 clock頻率1 hz9 P9 j" \% l8 g
如果剛好發生metastate,metastate這個狀態
# c2 w$ r' v) M1 Y: V2 s有沒有可能有機會維持1秒的時間長度呢* h1 s/ e' d5 v7 L7 c8 x
) M3 W0 J$ ^1 n' X: |7 L
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
4 T3 w0 R6 G' x/ G) ]# Y! d7 {* n0 L5 r& ]0 L8 L# c, ~
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-31 09:48 AM , Processed in 0.155520 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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