Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
# [- q' h4 u1 G( ~( v) F2 j+ f  c9 n6 `. V
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
) c4 p- x7 ^# G9 S+ F0 A4 H* D* ]0 d
那些信號也先估且如我假設一般
- ]4 i3 e9 N4 ^3 b* Kwen是RX收到一筆完整的資料時所送出來的
8 t- @+ s, k" }/ C: J8 P6 _因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)! j  d1 Y7 G) ]% J0 e7 q9 w
prptr:process(nSysRst, nrd)
5 {$ j$ m' g- X' `. N; H: ]begin# U/ i! `) L1 l/ j: D; l/ x+ D
    if nSysRst='0' then& R. {+ v* s9 A; _
        rptr <= "00000";
" S) U3 D8 z% l7 j    elsif nrd'event and nrd='1' then
8 y  u9 r1 `' {! i2 |! u) S        rptr <= rptr + '1';
6 ?  Z7 h" Y- @    end if;
" F/ I  a0 I+ `end process;" [. ?& p. U( G7 m+ n
2 t( p) C/ Z' u) r9 R' g  c' I
pwptr:process(nSysRst, wck, wen)
5 m" V. k9 p4 y& r4 x( S# bbegin- @/ D  h4 |+ G! @% C
    if nSysRst='0' then
7 c$ R" z5 G$ l# B4 s- W; c        wptr <= "00000";0 P0 R7 }5 ?/ H& ~( p" S+ [) T+ h; @
    elsif wck'event and wck='1' then
2 w& o2 Z( }6 l- q% E! Q+ K" y) W) ~        if wen='1' then
! G3 z6 r/ V* @6 I! s            wptr <= wptr + '1';
, ^0 f/ N2 k3 E: ~. m: f7 I        end if;
4 D5 O5 W# q, B. Z( R    end if;0 ]9 y0 C6 u( I& _) C/ h% X1 E
end process;
, k( K, E5 L  Y  g- o
1 P# N6 ?2 S* o) J% h& ?3 x; b4 r假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?4 }" C/ v2 ~3 {; c8 m7 |( r
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
, `9 M% t: o1 [4 ~- ]
( \, |& O3 j" ?9 D, r4 ORead buffer部分1 S. {. l, O! c' k
6 B6 r4 P2 X" m/ }5 N' n) t( q
--read_buffer. ]. Y& @: d8 s$ a7 K* x9 k: M
with rptr(3 downto 0) select rdata <=! i: K" q3 g7 w: R' v
    fifo(0) when "0000",
5 u( ]8 S5 K& p: Z$ `    fifo(1) when "0001",
- Y9 C- y/ p# _5 x    fifo(2) when "0010",
- X. L" v+ z( k+ l) h0 N    fifo(3) when "0011",! q! J: R: Y4 n! Y& |
    fifo(4) when "0100",
( u3 ^* t- B7 z6 @6 o1 M9 E    fifo(5) when "0101",. p9 M; ^, E- u3 u6 w5 I# v( Q) g/ ?
    fifo(6) when "0110"," T  J0 ~1 T, i
    fifo(7) when "0111",* ^0 g2 I; p/ z8 I6 W2 I/ A5 J
    fifo(8) when "1000",
4 L7 I& S# Y, b! e+ ^+ @: ~2 j    fifo(9) when "1001",
( ^/ o& t; M) B0 I! Q6 O    fifo(10) when "1010",
7 L# a5 j. Z( ~( L! e    fifo(11)when "1011",' X! L* H& x! G* y! P
    fifo(12) when "1100",
% F: f  w: D4 _1 b; F. n    fifo(13) when "1101",
/ Q% H* ^6 G8 F' B    fifo(14) when "1110"," P5 n$ @7 b" Q$ a: H; I& C$ l. K
    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分
/ y: V8 ^1 b; ~$ ~3 a5 h/ l5 f7 p/ A9 ~5 p; R( d
write_buffer:process(nSysRst, wck, wen, wptr, wdata)" ]0 P/ b9 t$ G. ~
begin. i' N( V3 E: a/ a0 K
    if nSysRst='0' then
6 |" T" L0 @5 C0 J" E        for i in 0 to 15 loop8 X) d0 H6 A% ~  x; G6 z0 J
            fifo(i) <= "00000000";
% M2 x: u, S3 z, O/ R        end loop;
' W+ j2 i; \+ s) S. I+ x    elsif wck'event and wck='1' then
- v- D( t* z8 U' n6 C4 ~3 c# |        if wen='1' then5 s) G  g; ?) \; J0 {/ H9 [
            case wptr(3 downto 0) is$ Z- d. G! H5 T: K% |7 f
                when "0000" => fifo(0) <=wdata;; s$ c( E  K" [& ^6 z* N' K
                when "0001" => fifo(1) <=wdata;
; a4 t& Q9 `: ]2 V$ p                when "0010" => fifo(2) <=wdata;
5 m6 m7 ^  ]( f4 Q4 t                when "0011" => fifo(3) <=wdata;
4 n4 Q  p/ A% h! w& ^0 C                when "0100" => fifo(4) <=wdata;3 y- T# }5 Y3 g( u
                when "0101" => fifo(5) <=wdata;- m4 ~, K6 ?# a! Z4 j" L# E
                when "0110" => fifo(6) <=wdata;2 A/ c- k& X! |2 {% F$ x7 V
                when "0111" => fifo(7) <=wdata;
5 l# Q$ X1 f4 Z                when "1000" => fifo(8) <=wdata;
! O3 B1 A7 _) B8 Y9 l' b1 ?                when "1001" => fifo(9) <=wdata;, u) f4 @3 \- V# ~$ q, [& D7 B- D
                when "1010" => fifo(10) <=wdata;
4 W4 w! e0 T- Z: J8 B7 ?                when "1011" => fifo(11) <=wdata;# j5 W/ z+ b7 N# ^* N* a. U1 Z
                when "1100" => fifo(12) <=wdata;( H6 Z4 h' W# t- k1 u
                when "1101" => fifo(13) <=wdata;
0 r* ~4 Z+ V( o8 j& k2 D                when "1110" => fifo(14) <=wdata;4 G# b5 P& l  ~% q" Q* L
                when others  => fifo(15) <=wdata;
" ~2 a& ~5 n+ f# I2 e) F6 C  M, T            end case;
, ]: R# E* E! b+ h$ m. r3 C        end if;
0 g9 `5 C( }# ]$ K2 L; g+ f  w    end if;) J; G4 [  N" b  Y; ?  I4 ^
end process;2 s2 ?+ F- s" P& K* @
1 ~. n1 P" ^7 ~5 G+ C9 L" v3 l) a5 x
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分7 T; g* q8 ^* N0 D4 s; C! m) I
我先做些假設% L' D8 D, O' f( c
1) /RD動作時狀態不能改變+ K7 y; o2 q4 e& g% e
2) wen動作時也不能改變狀態
/ K3 L' G$ `4 i2 O7 X9 T如果只有這二個case的話以下這段code或許可行
" ^4 F6 b& d% s
) D  j0 R: }. c( A8 T4 Wstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
1 b2 @2 C! a& W! ]begin
  |5 @7 d/ P% J- o& Y    if nSysRst='0' then
. }; n- ]- R4 X" E6 z7 W% D/ H        full <= '0';
! }3 G8 C& E" B: P        empty <= '0';# b" T/ j, e# u9 N2 a2 U5 O% O
        flag1 <= '0';
# J$ i1 P3 f% o( Q# r        flag4 <= '0';% D( `1 t6 Q1 |+ t  ^0 t" S
        flag8 <= '0';
+ n. e. G# A  }9 V9 s' `# N" m        flag14 <= '0';1 x$ P/ h( L" c  k" [! R
    elsif wck'event and wck='1' then/ V, p1 p, V( t6 W0 k! y* s8 _' c
        if wen='0' and nrd='1' then; z. X$ ]! q% [, g
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;
0 G* g. b" D* _) a* V* U6 G            if wptr=rptr then empty<='1';  else empty<='0'  end if;( ~# @% s% q/ \: W  l
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
) g8 r. O3 W8 ~$ s+ D! }! S* G            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;4 r- P! d  h1 D3 ^
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;& z. J7 c  s7 N0 ?
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;5 \' g* Y+ U# N5 I$ F6 W% |4 `
        end if;5 p& E' E1 \5 @$ j! u
    end if;
, Q4 S$ A. ?( \$ jend process;
; Z* s6 Q5 H2 j* S( A! w
; d  U+ Y9 G% w+ \" S0 j7 Z[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
. f4 u) ~2 b8 [. Z5 V) a) m2 V+ r1 \5 @0 l
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例* {0 t* f! c% v4 l! ?" X4 n  l2 k

, T! S# l' Y: i0 i5 J( x. N將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
% W& O* E: _. y4 g% h" a3 s
$ D& l) F0 P5 A. ]" v/ n2 \1.
1 H, u# P2 h1 B  p# L9 g8 p   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"( w# O) T: p7 Z5 e1 j1 N$ w4 o2 N
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
6 N, v& j0 _* |0 U) ^   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
; ]  c0 W) G7 J" _2.6 z/ c! ?, k+ e' k0 F
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高2 k! A( N1 G' X! O" F0 K% p, D( o& Y
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
6 @! Z! L) o9 M1 ]   資料讀取週期RC最小280ns
; V' k( P! I. k9 u3.- V) V- K' O, z% C( O; |' W
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
4 L6 F" a* s# R! i3 \, M   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
& b& B+ g# ~) D. s! p  q/ x   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
. ?4 u. s  d$ y; C' K   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
7 j& V4 L! ^6 y3 u8 O) x) S8 W; ?) K* i& s4 B
第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
& v+ M' ^+ r: B9 ?& I9 J' ^' u
  }% R4 F, T. J第三個問題還是clock rate的問題9 W: M8 n0 p0 n4 H
3 p. z$ h( M) ^3 t% e9 E  S) M
第一個問題留給別人回答好了..., I  ~/ u  t  D) y% h/ C
2~3問題的確是問題沒錯, 誰來接手一下呢?
5 q- o. P+ d5 \$ @! N; s6 p, g- S$ q# o9 @* L+ U
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
+ i$ ]% o6 P5 m6 q7 u: n1 o6 N: N1 p) e# _3 i# j7 T/ |- h
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
" g& \5 n  D$ G[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link], s) P& E" \7 X2 y  [6 a0 O
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.: z! J' h0 k4 y) j' y
[4] Website of USC Asynchronous CAD/VSLI group. [link]
7 A8 b8 V7 ^. I5 y1 K& L. d! n[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]" c# s5 H! }, [) Q$ \2 F' k" v
[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
9 j1 `. n: ~# ~[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
9 ]4 T) g8 y5 s0 s我會好好的找來研究看看
  L8 t5 ~0 K# v+ l! m" x6 y
) m( n$ z$ ~9 W我本身目前不是從事電子相關行業,不過對於
# E' J. c$ v( c: a1 Y$ GFPGA/CPLD,HDL,數位邏輯設計及單晶片等
* s8 H" v# R7 V都很有興趣,之所以要寫16550 code主要是想
& q& f: m" c7 u" B" ?- I5 ~挑戰看看自己能不能寫的出來,不過似乎沒那麼容易  F+ ~2 `3 T! N/ D3 P7 q

6 y# L' R8 H5 Q& n# EFIFO這部分我有上其他討論區問過,可是都沒人回覆
0 m, t0 z6 |2 E: x" n6 G+ F感謝版主願意跟我討論這個問題8 I$ e) L8 L9 |

/ t4 g% e$ {% i2 i1 x; q  R, O, u再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
" j9 G  y+ m' |& |不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
; N6 B: |7 g7 Y# y! [* w" r不然的話就變成只有我們二個人在討論了...
, N9 w. a# n; P# x" E; K- N
( A. L7 k% I. U! z4 r6 H  |/ v  }% |& {過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
+ `/ Q/ |( R, b* \9 U最近想到一種架構,用來做FIFO不曉得可不可行
" D7 r9 m- J0 a* T  @5 c8 R如下圖所示7 |5 ]7 n) t- f# M) ~( p: i

! F( w) P0 C% u' g. D) n/ z, Z先就full,empty討論,trigger level不管
3 L5 G0 b/ |# Q2 E' K: g3 Y讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間! u% e3 i- X- @" G2 L
8 \: x8 f  ~  L9 _1 V8 G( c% G$ ~
1.用額外bit(valid_bit)來指出register是否有資料寫入
% n3 [; {& j; {+ V0 q* k  當寫資料到FIFO則相對應的valid_bit會一起被設定為1& F' z7 V; F/ f' T; j
  當讀取FIFO,相對應的valid_bit會被清為0* D: |+ y. c. B9 [" h5 W! h8 g
' R0 L+ k1 b+ M% k
2.wptr及rptr用bin count, t! N# k: A5 P: b$ E  S
7 m" m3 W5 q# \/ l
3.full將所有valid_bit取and,empty將所有valid_bit取nor
$ J7 b5 n$ Z! u6 |$ ^( s
% R1 V& m- `# t  A  e3 [& t/ B' V4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時7 r$ ]9 Z- W! v
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
9 I% ~* S4 g9 Z/ I  j: U" Q  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已! k) W8 \( y0 J6 }4 S

5 t& W3 g# K1 S8 F* c- b5 n5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作7 V5 Q4 t# v0 g4 p( J
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' e' `9 F' C9 ]. E# L4 G
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
" ~9 f$ O! y/ u& g  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
8 @! h/ E8 [: ~; t# t  個位置是空但被判定為已經滿了的狀況)
  c4 r, h1 G8 V& k( l( Y/ F# a) m7 f- s. \+ G, P+ `
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意. b3 @, ~$ Y0 ?

% _" L1 ~9 E6 |8 ?2 O如果不管coding style的話, 這個想法很好
' C% f6 y. M+ V# S! j( ^8 e1 ^* I# L' b
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
: B- Y8 c8 l* f, c1 D8 ?跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.6 C2 G& Q& q, ~3 u2 R; Y  r
anyway, 互相交流吧.
. o0 C2 u' W9 K4 A6 q
  v1 Y8 D6 c. `9 v, K改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
0 F. f  Q3 Y: d) n5 ^4 m: n6 Z我想到這個方法除了電路會比較大外還有其他缺點* S: `$ r; T5 g& @
8 }7 e) T" \( B( ~
1.不適合做成容量較大的FIFO
! D; k' j0 _2 j, l; K% }6 A6 ^) X0 a6 w- Z) I
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
- E6 z9 v) z0 k8 _. N' w" R0 P5 j- l4 r2 s
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
' w0 i) p0 K  Y0 k: w   會有較長的延遲時間,所以速度被拖慢了
# U( @/ y5 n0 M  n
$ T; @' s1 l- `( j謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO' t) w( N+ Y6 N4 Z. c# d8 Y
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
5 m+ ]1 ]. z/ z! t, A8 D/ \( o, Z但是做ASIC時你會發現其實很小的! H* @7 t8 }/ P3 L$ z6 b7 b
* H! U+ {" n& F9 b
& r0 R7 y0 T4 _3 V  K" O
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
5 d# `4 x1 }- V: i, M這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
# w5 i+ G9 m4 f8 O& ]
( I; `* s$ N; Y- \& k; T4 Q3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
( a* X9 s: N+ G9 L- R3 i0 _! B相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
7 F* A$ X8 _" h2 |) r8 X7 w4 u/ }. f) [: q  U5 ~6 N

5 c/ X; P- J  C8 a1.
' s% w* E! y" x/ ?   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"$ n3 c; C0 ^6 y

* \% h# F/ A7 v; m' e& B7 P' A" R# b   不了解這段話的意思,可以在進一步說明嗎+ ^' T% V  E& c) s, |' @
  U- d- L/ K6 G5 m( ]; G+ h
2.; y; ?" B+ E- ], f# ^
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
6 V% [' y: M3 c8 L) ^* g% {  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會2 p" w7 c8 q1 V2 v+ A, r+ F! R
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
( k" C$ W, Y8 |0 @" a3 J$ F6 S  請問有辦法評估亞穩態維持的時間嗎
/ z. r1 ]1 L* C) f! b/ J: ~  
9 ~& T' K4 n. I7 {) S5 R謝謝
. r7 l7 [) M6 z3 I0 |
+ [: `$ R$ |, y' b: X1 y[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. * J0 g4 A0 `6 n5 r
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:% v9 l/ n/ u) ~7 x  @5 T
empty = true if valid[WPTR-1]=false, g4 a# D4 t1 u& I3 l8 u
full = true if valid[WPTR]=true/ k* m+ O9 e% p" g) \- ?' u! U( k6 ]1 r
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
+ H$ H0 h' m$ u! k* r
, p4 Y& \2 n" ]: [, E8 T8 ^. c2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好  M/ q5 X* q  P, X( ~; Y
關於 metastate  u5 O, y0 V9 A4 H5 u& x
請問如果一個d-ff假設 clock頻率1 hz  R* j) x7 }% l- t) a
如果剛好發生metastate,metastate這個狀態
4 D1 m( z" h4 S8 e4 l$ q0 p2 I- d有沒有可能有機會維持1秒的時間長度呢, \0 O. m& q( L( U  |

: F$ I8 g& `2 A5 I( B: T# L謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
9 C( ~# F" w9 g0 O$ l* C/ [$ a5 y9 S2 W- C' h' t
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-8 07:59 AM , Processed in 0.177022 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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