Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...0 U& G0 ~8 U2 @/ q, i

, M, s' W6 x6 i; ^這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多1 u% d4 j/ H5 E  V5 ?$ T( j1 @
5 i7 t4 H; H% V8 E
那些信號也先估且如我假設一般
+ Z( j' ~8 f- G8 e8 Ywen是RX收到一筆完整的資料時所送出來的+ m1 K, Q  ^4 B0 P  ^0 d. A* W
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
8 B: `" ~3 l3 zprptr:process(nSysRst, nrd)
: h  d: f5 O; R+ J7 D; Wbegin
% z/ m. Y# Z# T9 ]' D2 e) v3 a    if nSysRst='0' then
! n7 |" L) N7 k6 K* v# u2 z3 ^        rptr <= "00000";
/ _8 |3 D6 x& E6 S7 w    elsif nrd'event and nrd='1' then* H/ o. K) y4 j8 K" ~
        rptr <= rptr + '1';- b( d* _1 m* a# R7 `
    end if;% X8 n3 g8 H- v, o' ^! k/ p
end process;
9 K% B- A: j( w( ^/ r% A' z2 d3 i9 g' S
pwptr:process(nSysRst, wck, wen)2 h2 R8 e0 B5 S" E4 U8 L, E
begin; Y* h! f8 y1 y8 D6 e
    if nSysRst='0' then
$ |2 w2 o3 ?& q        wptr <= "00000";
  K( w0 b1 o' R, j% d    elsif wck'event and wck='1' then% v9 K: J+ h' P3 t3 V. d, X- O
        if wen='1' then6 l( M; k2 H/ b, o) Z1 b
            wptr <= wptr + '1';1 E, {' I' y: J2 `5 D; D, p7 _
        end if;
# ]  j; v2 w  i5 p7 r" U    end if;
7 i! ]' k/ v. v9 Rend process;+ @2 {, S+ z. A% h

7 Y! z6 z( ]% K, d假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?1 n# z! w- W5 t
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key7 n: m1 g  ?( i' ?
7 c* S- v" F$ ^3 e$ \3 G- q
Read buffer部分. s& J% B  ~8 }3 |# T/ r6 E

$ a6 a# x# E# e0 B. ~--read_buffer
* v! Q, C! G8 C/ h* ?5 Pwith rptr(3 downto 0) select rdata <=! o. S6 |0 z4 F- D
    fifo(0) when "0000",( B  Z2 r4 ]' j+ o( D. F1 V% V
    fifo(1) when "0001",- Z9 ]( f9 x. P
    fifo(2) when "0010",
0 b7 h* u* T; ^2 N5 i' _8 R( e    fifo(3) when "0011",- c7 d+ B0 _8 b1 I
    fifo(4) when "0100",
8 s+ k, j% I0 K; y    fifo(5) when "0101",
4 b/ `1 w3 n/ D! k4 i8 [4 {' P    fifo(6) when "0110",4 v0 i! n  \  {3 i3 F
    fifo(7) when "0111",
6 F. }& E, W/ d  h7 r1 u    fifo(8) when "1000",, Z0 \5 P- n, J1 S' `& R0 _* x9 ?1 v
    fifo(9) when "1001",
( f+ s/ u. N4 G4 Q9 g, l7 T/ I+ `    fifo(10) when "1010",
0 r: ?) X8 p2 g- k$ S4 s+ P4 b* s3 K    fifo(11)when "1011",, g' ~8 G; y. V: ?
    fifo(12) when "1100",2 K1 m: L. T3 v$ P% U- }( i. ]5 ^& j
    fifo(13) when "1101",
* X( x5 D$ C6 [5 n) k! c" ?* j: ]    fifo(14) when "1110",
, e# ?& G9 k- i0 n3 F- E5 N    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分! H6 n7 K$ n3 o( n& H! B1 v% A
: y# b1 b3 G8 ~  O
write_buffer:process(nSysRst, wck, wen, wptr, wdata)/ ]. U" y$ A6 p0 j1 K$ b+ X5 j
begin( l1 A' [9 o9 `3 J
    if nSysRst='0' then8 k) o( v5 S& ?' \4 m% S
        for i in 0 to 15 loop
; Z' I, c' u! p8 G0 V3 g            fifo(i) <= "00000000";
9 F- V. e4 f& ^: {& y, S        end loop;
" |$ B5 v5 H  n' P! }. P. Q    elsif wck'event and wck='1' then
: C  w) `4 b! j9 j        if wen='1' then2 }* D; q1 E) l4 A% c8 E3 k* |
            case wptr(3 downto 0) is7 E% L! r4 R( H# q& _: x
                when "0000" => fifo(0) <=wdata;
0 |! V/ e! n$ d) E; w2 C+ ]7 l                when "0001" => fifo(1) <=wdata;& Q, {* Q; z$ P
                when "0010" => fifo(2) <=wdata;
$ ~. @( ~9 J% E* o* }                when "0011" => fifo(3) <=wdata;
0 z7 g2 N. T  {6 A9 b& J; C                when "0100" => fifo(4) <=wdata;
% t5 l% i0 c5 e6 Z6 ~                when "0101" => fifo(5) <=wdata;
( A8 i' b5 |* L) }                when "0110" => fifo(6) <=wdata;6 L6 g- ^+ m( I7 t* I" |2 ~; k. Q
                when "0111" => fifo(7) <=wdata;
8 D! e/ w6 |5 s- \7 s  ^                when "1000" => fifo(8) <=wdata;5 H$ t0 O6 m1 U% J! n* I6 ^, W0 D
                when "1001" => fifo(9) <=wdata;
* {, ~+ B/ F5 i; _' G6 I. J: {                when "1010" => fifo(10) <=wdata;
( R% i# ]2 j% u, I3 s" H4 T                when "1011" => fifo(11) <=wdata;
, r, M2 s" ^7 b0 m% _- B/ ^                when "1100" => fifo(12) <=wdata;
  f0 T- K+ f7 R) {                when "1101" => fifo(13) <=wdata;
3 A% }  \" `" y+ q                when "1110" => fifo(14) <=wdata;( z/ B+ B8 R: V
                when others  => fifo(15) <=wdata;$ D" D! C9 R- V( R+ y6 N7 H% x' Y/ s
            end case;
( `7 T: G. u% U' o) c! k0 \6 w        end if;( s; A. f. u+ e; Y* G* B9 A& v  q
    end if;
1 I0 E" I: N  x) g  G# [/ X8 Send process;
* f/ p7 T! F( n7 D7 @; {. o
5 a4 K( O, v& c- Q1 R  W( A7 T[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
% y& h3 k0 W- Z! R- b$ U. V我先做些假設$ D, G5 Z5 X$ r$ F
1) /RD動作時狀態不能改變* ?5 f6 F2 h. n6 v: L8 ^
2) wen動作時也不能改變狀態
" L0 |3 _, |' Q2 a$ O- e& K) s如果只有這二個case的話以下這段code或許可行
* \! b/ j, T$ L# R* Y; @1 n$ v) E$ C  f( N0 @/ j0 Q* y% ~
status:process(nSysRst, wck, wen, nrd, wptr, rptr)0 X4 v8 J+ |. r6 ?& k
begin+ \, r& ~! D/ }
    if nSysRst='0' then% _" d. p: r+ x* ?3 f' _8 G  e
        full <= '0';! T' \4 g6 ^% l7 o1 V  L
        empty <= '0';* `0 w9 c, f  w7 e; c
        flag1 <= '0';
1 C/ i# ~( j" R9 K        flag4 <= '0';, ]; q6 w, F; L
        flag8 <= '0';0 z. T# a  ~! ~" Q0 W
        flag14 <= '0';
5 G6 f8 H9 X( Q4 D9 |, B, _  h    elsif wck'event and wck='1' then
3 l3 y1 H! ~& N- P9 J        if wen='0' and nrd='1' then
, e/ v9 W, E9 Z: z+ B; `( ]            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
' H$ Y% ?! Z9 |0 E- V5 \: o, R9 `            if wptr=rptr then empty<='1';  else empty<='0'  end if;
1 I. n1 `/ K+ t/ A, F            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
/ U. G/ ]7 t- x/ r- L            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
# P. A7 l% q+ ?9 i% `: C. F6 d9 Q            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;  k3 r7 [1 u# x
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;% ^% L- [0 _2 N5 \
        end if;
+ A' b1 n* |3 J3 n1 |9 p4 M2 e! C. l    end if;
, n9 B. t- |" tend process;: r$ z/ a/ ~( ]1 D) c
1 O8 K! u8 Z/ P9 N" q/ x% o
[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
- Q! j% ?# t* z: i0 v+ w; S( ?4 {' I. q8 S( H* ?; t
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例1 I- l3 p' u1 Y8 W  `$ p
1 c' P( O2 P/ m5 [& m) M2 g( m
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
: G% A' ]7 O4 d
& M/ N! d. X% ~. Y2 r) l5 K" |/ e1 g1.% D# F) C; u8 K7 J
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"& Y( f. ?% v5 e" {5 Q0 L7 `: P% l
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生7 v8 w2 B; m, e6 T/ r
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一1 n' ?: i4 i& P
2.
# W) W5 L3 I; J' d8 Y) J/ {# P  d   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
6 f2 Y6 B6 ?" f# W9 ~/ M2 \   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出" H1 i. I' Y- ?6 r1 v4 a7 E
   資料讀取週期RC最小280ns
& j, e! H0 a' B' {3.$ ?# Q5 k7 @- c
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
( j( H- J: t% s. S2 B: k% c   小小於wck週期的case,會有問題,以trigger level造成的INTR來講1 `1 I3 N: V5 }& m2 ]' D) J  W4 O6 W
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間3 `3 q! t+ v, D# u6 Y8 g
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了2 ?2 h+ O  G8 W
$ Z4 E- {* u& S* Z: u
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
6 L+ r5 \2 i1 t
; j1 y5 b, }( X3 f第三個問題還是clock rate的問題  c7 x" u( H, o

' i( c8 o6 H! {4 K第一個問題留給別人回答好了...5 S% C, E$ t1 q0 V# |5 i% m3 ~
2~3問題的確是問題沒錯, 誰來接手一下呢?; n; I# w+ B2 h: H8 T1 m3 b
4 g# ~9 W' o5 S% C  Q
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!9 d+ m/ J' v( k  ]+ g

. d- J' X9 H' {2 U[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]1 J$ d) j3 u" A
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
  U2 L) {, e! V6 {[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.1 p1 k/ j" G. u( ~# q: f, A
[4] Website of USC Asynchronous CAD/VSLI group. [link]: E2 W/ B+ p6 K, l( _8 c; F! T
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
$ r* w6 T  F8 L# l; R  i5 W1 Q7 w8 M[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] $ c4 _% D, D. w$ X: c7 Z
[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
  e# I9 j5 V, U/ H$ p) w; |我會好好的找來研究看看
/ C: k$ K7 \$ L. K
( b! s3 C$ D0 d* U. [- E: d  I我本身目前不是從事電子相關行業,不過對於# {4 `  b: Q# Z- g) ]/ f6 B
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
5 r8 x; `' W8 C. J/ V( S都很有興趣,之所以要寫16550 code主要是想, X5 ~9 Q3 p4 K
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易; h1 E; f9 q+ p! D- p& W
0 _- H5 Q) q1 {: W) b" \5 K
FIFO這部分我有上其他討論區問過,可是都沒人回覆" z4 M! N6 }* G2 J
感謝版主願意跟我討論這個問題8 V& j! V9 ?) y& a

, f0 S7 i% V9 I; q% e  ^再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
$ A- [& Z1 v# ?8 f7 t2 Q不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
$ \+ l. x4 c: U8 N2 q! V/ ]+ ~, O3 r不然的話就變成只有我們二個人在討論了...$ x: ?1 a6 T' q* R% s: F
% M' J  X9 w0 ]4 w$ `% y
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好$ Q9 i9 @# F# ~3 W  j3 t
最近想到一種架構,用來做FIFO不曉得可不可行: c  k$ W$ @% P) W- d
如下圖所示! ]8 x& z: n9 r" x' M; j8 K. Q# t
7 l. c+ \- `3 c3 E$ u" I
先就full,empty討論,trigger level不管
+ M+ W' a& W" C; l, J讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
/ T* `  v( S  z* ?% O, _% c' U+ `5 Q) x) Y* w
1.用額外bit(valid_bit)來指出register是否有資料寫入* g/ k) o* U' l: U. b( r
  當寫資料到FIFO則相對應的valid_bit會一起被設定為19 B" J2 f' G8 g8 d; _$ n7 m
  當讀取FIFO,相對應的valid_bit會被清為0# v# R# l! E! C- l# w2 H5 g6 y

/ g* e* g1 b% @0 q5 j2.wptr及rptr用bin count
5 Q- g9 Y. s8 c. U/ g5 ^- d( B7 a* {( ?' u
3.full將所有valid_bit取and,empty將所有valid_bit取nor! i+ }$ K1 d0 J* X( l
  p! F% j- h. \8 o6 t
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
7 F' t* e/ t# G  U, [2 ?  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
, Z+ `' }2 X  w% o. C% e/ b  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已3 Q" ]$ W3 N) M8 A
: N! w6 E2 ^/ W- K# x
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作( a6 p1 e' s8 Y! Z: d3 \
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' ]# |, _# A; H9 l) X. G) t7 `! |
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
) q4 h" i' w/ P4 y' ~  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一4 a4 A( ]; L& ?- D4 H- \' P+ ?
  個位置是空但被判定為已經滿了的狀況)4 Q7 G1 N& q1 U$ }" b! z

# w; f, K* O' f' ^8 \; ]以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意+ e) d: X% p" _8 @7 C* D( @# u

- c" ]( \+ N6 `! |& B如果不管coding style的話, 這個想法很好  V2 c2 Y, X9 \3 y- B
8 T8 {3 w- d! \$ X$ @  K
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.1 u& a0 J0 T% [5 j' z7 @* z
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
1 b! w, u0 C8 h- h/ Yanyway, 互相交流吧.
* s3 C; f6 i- D" N; v0 L) |3 ?8 T" C: I$ y- [- g6 [" y  L( Z
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好# Z% c  j' j6 R$ Z
我想到這個方法除了電路會比較大外還有其他缺點7 H; Z: e: U( D# |, j

, N& P$ \9 x" E! e1.不適合做成容量較大的FIFO
. C+ t" V* w6 j( P, j
% w' d$ X* j' K9 o& U2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響3 a+ e/ w3 ]1 N/ `6 P3 q3 |) E& \
3 J5 |5 p6 h0 g
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣( f" P3 P& K7 p
   會有較長的延遲時間,所以速度被拖慢了
7 k% ~) U/ ~# ?: m! E9 j+ @! n1 U: I. B$ U1 ]& r$ e+ S
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
/ ]# I+ C7 i  {7 z! H我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大5 r$ s' _' g; w: p
但是做ASIC時你會發現其實很小的' v/ E+ ^& Y8 ?& `8 M" R

; L+ P: Q/ F: E) t: Y, N6 |* n$ a" \, g) `! t5 l* d+ D
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
+ A. H$ I+ E7 V; I這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
% e( M0 q5 `0 J. I
1 I) c9 |% p- O* d, t3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
& \. [& s2 A9 }/ ^0 m相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好- W- w9 V4 @( n% h& z( ]8 {! m0 J2 T
6 `+ k) x: b" P, J& g+ z, q# @
" V6 n8 }& e& m( O! M. ?- V
1.
( p. U4 Z  b; q, F   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"7 I4 u$ k' x8 ~' ^9 {6 k
( }9 O5 C9 Q( d# E
   不了解這段話的意思,可以在進一步說明嗎
% E, X: E5 |, p" p& Q$ m2 p
* I9 M: M, M/ i$ L% N2.
& r  s9 w/ B. x  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
, r% y9 E" K$ g$ t$ d5 t  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
6 k. G6 ]- e) ?2 V0 w/ Y  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
3 I! T9 n! x$ l. [) o0 Z3 c  請問有辦法評估亞穩態維持的時間嗎
' R% x" g5 g' w; R* A9 e  
4 ?! Q2 s5 D1 w# t7 Q( ]謝謝
" T  \5 ?. ?  [6 `7 W- A+ u& S: P0 @" Q. I* k( z9 [
[ 本帖最後由 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/ [! K7 g( U) d) s( U. U/ ^
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
1 I* C0 O/ L' a( z9 i; D8 f/ {+ b9 pempty = true if valid[WPTR-1]=false0 K* J$ T0 B7 c( A% c9 o
full = true if valid[WPTR]=true& K% m  ^6 f: H
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已" |" m; D2 ?( Q# m% f* a
# R4 i8 m4 v: H; S, m  h* t
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好7 J3 W- S! ^( E
關於 metastate
! e3 x+ v9 J  ^7 ?9 J請問如果一個d-ff假設 clock頻率1 hz4 y/ H7 E+ C; w. o( ^# S: u
如果剛好發生metastate,metastate這個狀態2 P/ [' i! i# o7 C) W
有沒有可能有機會維持1秒的時間長度呢, q( a1 J" q9 u9 \. c& Q

& K' \- y- g' s7 g2 R謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
. m7 ^! a6 R0 o$ B0 ]* v- ?1 S0 G$ a3 Y/ E, i( j5 k9 q
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-29 11:41 AM , Processed in 0.140008 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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