Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...
. i/ g* l& _2 {( ]: v, w& d
( B1 K' S- `1 v  K. a+ ^# m% E, \' d這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多6 J) H2 Z  y% @' p) m0 L' t8 ?
- _5 D) f9 L  t
那些信號也先估且如我假設一般
, d$ k# F4 Y4 Xwen是RX收到一筆完整的資料時所送出來的( u* L" r3 o; Y, a% ?3 B
因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)8 n, P. ]# ^9 C" G+ l, t
prptr:process(nSysRst, nrd)1 C9 Z; j6 ~* s. ~: n0 L3 S: h% @
begin
/ c5 y. X( \/ Z' E    if nSysRst='0' then
1 p6 Z7 K- s3 ~& b0 p9 D/ I        rptr <= "00000";( c& G" `# d8 ~
    elsif nrd'event and nrd='1' then
6 q4 C) p5 d. k        rptr <= rptr + '1';
& b# ^/ _+ k, @4 J0 y! B    end if;7 K) ]- |$ H* ^5 K! @+ J% u( M
end process;
4 P5 D7 E- `. P. E* ^& _" a1 u, u4 V* z6 N( r
pwptr:process(nSysRst, wck, wen)# Y  _' e, P" W! I8 ~
begin- a3 H  O  Z( g" U7 l1 W& |
    if nSysRst='0' then
" U: S# t" f% p# m5 P        wptr <= "00000";
; t: Y( N5 m" \* Y6 ], C2 r1 ]    elsif wck'event and wck='1' then9 E. u  O5 z: b- _' h* y# u6 C
        if wen='1' then
* T9 u4 O8 Q5 |  D# P% G            wptr <= wptr + '1';/ p" Z" [# z1 W/ W6 h, w( g8 `  U
        end if;
. [' b* {  c9 U4 h, @* ]    end if;( y' h3 _; V! F+ n4 N
end process;
/ [$ R6 x% ]' \" |9 F( X0 e4 g$ }2 h' b% G5 m" s- B& O
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?8 E- `: y$ _9 c: j- ^
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key0 D/ k2 o( Z8 C! ~5 T
! w% b2 e" v3 x( J# ?( S) I! o
Read buffer部分
3 P2 w) J, r2 f) O6 W0 }; \& H: y/ X
  k( Z- H3 [4 Z" Y5 U% E--read_buffer7 Q1 X' `9 `; W$ s# T8 r8 _( Y
with rptr(3 downto 0) select rdata <=
4 M2 A0 w% u5 ^; ~; E    fifo(0) when "0000",! B( I5 E; H9 J3 F
    fifo(1) when "0001",
* O1 a$ J+ z1 T! z, d* P    fifo(2) when "0010",/ ]" f7 @$ w5 n+ N1 G7 ^( Z
    fifo(3) when "0011",
2 z' i+ ?0 [# A/ `! }& c5 v    fifo(4) when "0100",% }( l# _; J1 b1 S
    fifo(5) when "0101",) j8 k/ Z& ^* E! H4 W
    fifo(6) when "0110",
5 R) Q3 h2 ]( }# a    fifo(7) when "0111",' h$ g; X* M6 e0 N; k0 k
    fifo(8) when "1000",8 X8 F' Z2 R2 a9 c& J
    fifo(9) when "1001",- f' Q7 @2 ^" C" O6 M/ S' _7 a
    fifo(10) when "1010",% g# e* c0 K. {& C
    fifo(11)when "1011",
; H  q) r" A  m, O9 _4 M1 _: p: H    fifo(12) when "1100",) F5 q/ P3 c9 v% ^! g3 `, {
    fifo(13) when "1101",! ], @1 p/ ?% g7 k7 G7 _
    fifo(14) when "1110",
" X& L! G2 i& w  j: @    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分! A' ]1 ^  d  n, L3 f

3 j6 A& K- F7 C, v; Hwrite_buffer:process(nSysRst, wck, wen, wptr, wdata)4 _% v" ?% r1 V4 V' k0 U3 ~
begin% ~5 @5 {- p4 Y
    if nSysRst='0' then+ g0 n5 R  C1 O# z% Q+ I
        for i in 0 to 15 loop9 p  L) T' w5 c- M
            fifo(i) <= "00000000";( R7 j& P. w* B! o9 ~8 m' P
        end loop;
( A( i* J6 {. s  w8 ~    elsif wck'event and wck='1' then
5 `8 b  ~: o, \/ S        if wen='1' then9 D5 n2 v0 R$ d# E/ e( f' D$ D
            case wptr(3 downto 0) is+ t* d# ?6 X, r  K4 u& z
                when "0000" => fifo(0) <=wdata;
* ^$ Q) G/ K4 N$ b$ a* J/ `                when "0001" => fifo(1) <=wdata;. e9 M. Q/ h$ v! [' O# A
                when "0010" => fifo(2) <=wdata;/ `& P  L+ e- h3 N6 M) b2 n
                when "0011" => fifo(3) <=wdata;" K6 g4 a+ q6 @$ a7 d
                when "0100" => fifo(4) <=wdata;" [" a. z- }( j( W
                when "0101" => fifo(5) <=wdata;# q+ w; N4 ?2 s0 K( _
                when "0110" => fifo(6) <=wdata;
) V5 g8 S" l+ j/ {8 \0 r  o8 j$ y                when "0111" => fifo(7) <=wdata;
9 p, [+ _6 Y& K/ ]& N3 d! Q) i                when "1000" => fifo(8) <=wdata;9 K+ {8 @1 i! P: L% E8 P
                when "1001" => fifo(9) <=wdata;3 l8 H/ r; o. u, g7 u9 `4 L
                when "1010" => fifo(10) <=wdata;
8 c& d, F. @  R) a; H                when "1011" => fifo(11) <=wdata;
1 Q) e9 e" v/ t( |  d% }! c" d3 y                when "1100" => fifo(12) <=wdata;" ^5 ^6 \) T) S
                when "1101" => fifo(13) <=wdata;5 E- L" Z2 P" }8 w
                when "1110" => fifo(14) <=wdata;
4 H8 V8 U* x8 P  j. c                when others  => fifo(15) <=wdata;
" ?% G/ n4 C: q            end case;6 w) y+ h# g, A
        end if;& R4 l2 v9 Y( Y/ \3 }
    end if;
. ^" O' R2 T" Z) L% O4 \, send process;" u2 @' I" ]9 l5 n- u+ d" M: _

5 j( Y+ K, W/ \# A[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
4 V8 Q7 X: {# [0 @我先做些假設
9 e6 M+ `/ f. a1 L" g1) /RD動作時狀態不能改變
% V7 d( ^- r/ r& P2 T& G2) wen動作時也不能改變狀態
: r; ~+ h# _( j$ ]" a% I如果只有這二個case的話以下這段code或許可行
5 e; c5 ]# K5 {- x% e2 S  Y% \2 o5 B! Z- L* Z* z
status:process(nSysRst, wck, wen, nrd, wptr, rptr)% V+ S/ N4 @; ^; E/ W. ?/ F  {7 k
begin' X4 e; R8 z& I1 r' J
    if nSysRst='0' then+ w* c1 X3 S( Z  U" r) J! N
        full <= '0';$ I/ y7 R2 [+ V8 v% }* `' g
        empty <= '0';
& c  t. m, @" o$ Z# O7 u) w/ a) \3 g        flag1 <= '0';
( I# G5 m9 m; D( e6 n7 Y        flag4 <= '0';+ P8 |! r0 y6 G
        flag8 <= '0';
' z8 w+ a2 C6 k        flag14 <= '0';
* `3 {1 \) A; Z- q  X2 Z8 u7 w    elsif wck'event and wck='1' then$ `0 ^( T/ E6 V$ I- z% S3 y
        if wen='0' and nrd='1' then' C: z0 P$ e$ K4 I. t
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;& F  |# f! n* b! ~: O: u7 C$ Y
            if wptr=rptr then empty<='1';  else empty<='0'  end if;
8 g3 c  i# U- M' M            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
4 m$ g$ d5 y6 P- P6 m            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
* l$ L1 j3 `, ]8 t5 T1 ?/ T            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;9 ~1 `  m& N6 ?) g% L/ ^9 p
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
. n  F9 f, x. w/ B: q! C        end if;  l9 V* S4 M8 \' l% u1 x! h% L
    end if;8 q" B* g! @9 t, t- \5 w- P
end process;
; i+ W$ ~0 C8 Q* Q
$ g6 T' W- V' i. Q[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高
/ K: _& @4 ^8 p9 z% r8 Z2 l4 c
2 ~  a# q/ i" V4 l/ Z9 g& T5 a好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例: b$ c0 d. |/ ~2 }, H  D' X

2 Q" A1 O7 {2 V! W2 i+ W9 ?將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
% f$ S/ k" T& _; u' f7 g* Q9 C, @( h, n' L( _* l6 L/ A* W
1.
0 A& y* j0 Y  h, H   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態", d$ Z' M' `2 q3 P: c8 ?
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生* H' L: R9 [: u' D$ {7 Z  @& E
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一* g* `) `1 I2 ?) u$ s8 o
2.
( f5 M9 k3 s; p6 K& x: @   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高) L9 F* ]9 }- N' `  s$ ?& E
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
% w( `. U3 N- a. e+ D) L+ F0 I, g   資料讀取週期RC最小280ns( R8 Q% E8 K! v+ X2 j$ W
3.4 }7 e7 R4 H  \  z0 G! E. u, m
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
* L$ j8 l! q  z) b$ m3 `   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
; A- L0 \+ V  a  I4 F$ |   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
# b' L: f$ U5 C/ w   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
3 T; z7 c" `$ Y, ]+ v0 n" e  _
7 P( o! b3 `) g- a% }: Q第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
2 x( x+ b4 Z; {6 B
, k% c9 _7 a' [+ H' O第三個問題還是clock rate的問題
! w- H0 z; Q2 a5 Y, U0 L/ e+ X1 F8 B& ^- o& j
第一個問題留給別人回答好了...
, A) I0 g: q. ~. r2~3問題的確是問題沒錯, 誰來接手一下呢?
( ^& K2 L9 t+ y6 K( I9 a# \
7 Z# N5 _5 ^+ j; t: L% X4 k3 J# z1 Eaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
' \- t! K9 l: X* A+ X" r: H" |. A% W" g
[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
+ t! c9 L" T" x& F[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
3 P; m1 y. p1 |6 `' K, }7 L2 P[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.; j  R, S6 n0 R, ]
[4] Website of USC Asynchronous CAD/VSLI group. [link]
! H) {- J! P, G  X[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
9 X! B  j% |& |6 R[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
% ^9 W, q/ }/ \- {. ~' s8 s[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料3 U4 j7 O5 v. b
我會好好的找來研究看看, Q# @6 ~6 }" f1 G$ y/ I% c

9 \4 v6 b7 S! k# |- j我本身目前不是從事電子相關行業,不過對於4 s6 L) ^. d5 N, F
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
( I. ~+ k* c, O. A0 D' V都很有興趣,之所以要寫16550 code主要是想
. d7 n) T) I, [! I8 B* v& X挑戰看看自己能不能寫的出來,不過似乎沒那麼容易* h9 _9 X5 m2 Y5 M# h/ m
- ]" S& s3 z5 \+ ?( P9 ]# b
FIFO這部分我有上其他討論區問過,可是都沒人回覆  c7 B" B, s  ]: M3 q$ E
感謝版主願意跟我討論這個問題, K# ]- u) Z  u: `. o1 y% Z
( l- K# ]6 n/ x( l# Y9 q4 n
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多, @# e$ p& R2 z3 p" k" O) N
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
4 P# E3 n5 ^- w! t4 k, j: U不然的話就變成只有我們二個人在討論了...
9 m% O! \/ b% G( A$ S
7 Y0 b: H) N& K$ @6 i! ?過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好( s# H8 I! i( a' c1 w' f5 k
最近想到一種架構,用來做FIFO不曉得可不可行
1 b9 D6 C+ S+ i4 ?! Z7 C0 g* e( ~# Q如下圖所示
  P9 E" c' x, S7 V/ ]. O0 P& t3 L: t2 ?
先就full,empty討論,trigger level不管4 i& R* j1 L0 T& O% N
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
$ |& J* K' N) m$ b# ^7 F. v0 @+ T, b1 R  C( Q0 v' }
1.用額外bit(valid_bit)來指出register是否有資料寫入
; h# Y4 r; J$ \/ v1 H! }- C  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
% P3 ~! g# i+ @4 a  當讀取FIFO,相對應的valid_bit會被清為0
2 p; e% x1 D- v! v! P1 Y) n( p" T% l5 y! q
2.wptr及rptr用bin count
$ a# X' F* k- C4 Q% d- o  Z' [/ {% b. }
3.full將所有valid_bit取and,empty將所有valid_bit取nor* x* q$ @1 @, ]% q% Z- N( l
3 H5 }& v/ \0 W; `: G- H3 k
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
' K  ]% V+ z  T- I' ]! B9 J* ?  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case9 F4 Q# ^5 C$ C7 R5 c% ^
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
6 T7 ]( |$ T' {- H% i' \, f4 d1 P1 r: p+ o( @3 B
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
5 h; Y2 a: N7 ~% s* v  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
, r; m7 Z5 H; T, D" k  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
) x+ y' b* k/ G7 d  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
* q3 K0 k0 ]9 l/ R5 \! ^% L  個位置是空但被判定為已經滿了的狀況)+ a, D& @. ^! L- b
$ f1 w  U6 m0 r7 T3 _: E
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意5 r: K2 |" z7 S0 F
9 p4 s% ~% m) ^  g
如果不管coding style的話, 這個想法很好
& u8 D# h4 T8 J) C  F% K( g/ C# j& c) j) z
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.6 N) F# c/ P: {$ M( s5 w
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.' t: o( u9 X* M" Y; T; g
anyway, 互相交流吧.' N' s- E/ c- @
8 v" [& V) e& Y. p, v
改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
# p; T( h! L" E: }; J我想到這個方法除了電路會比較大外還有其他缺點6 {# n" \& E7 a

( Y5 u0 g0 V, U/ a: y1.不適合做成容量較大的FIFO9 T  Q9 z0 w. e* K6 U9 T! h+ C3 H

; V0 z$ F6 r5 k1 F! V! D; C2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響( k+ {5 b# o9 t, ~# e
. E2 I. U6 I1 O- e
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
* E% L: e" R% {6 ^: s! A+ V   會有較長的延遲時間,所以速度被拖慢了3 i! p2 |' `. [
# z" ?6 L( C) f/ Q; t3 H* w% \
謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
& ~! r+ B: C: M0 H8 H$ q我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大4 A5 @0 ~# @: V" M7 h1 p
但是做ASIC時你會發現其實很小的2 A+ `- L8 W( ]& ^& B- y
1 ]* \3 }0 E6 C2 m! z( N

5 n+ C6 d% p( M8 T( g5 p2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響% J! z2 S$ F! S
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了3 K1 @' \2 ?+ _  w, E
+ G" [: T0 x# s, Q0 V8 z
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
" `1 p1 g8 ]0 O) p8 T9 r" F相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好. v' O% Z. |# H5 s+ J/ j6 s% A

0 l, `6 J7 e7 n; r9 i4 `# n. I0 l( n6 X" y
1.9 g4 W: \1 L0 D- i( s& Z
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
" x. d* Q1 [1 z* P0 ?) e' T
% l, j6 C1 H4 S5 y5 Q   不了解這段話的意思,可以在進一步說明嗎9 N5 V3 L3 m, ]! J3 a

. R# O- k0 P1 f5 v4 l" S5 h% d2.
, h. t7 ^) r, ~' R( }# h6 w  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
  R/ O* _8 w, y" w8 D  T  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會; f5 h5 Y2 s% Q3 l
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
9 B6 z( L! [, \* U/ X5 s$ A  請問有辦法評估亞穩態維持的時間嗎
7 b5 J2 U. i/ P1 [0 q  & g- w+ P8 C9 b6 u$ t" j6 z0 n5 Z$ A
謝謝! m) C  j: m: z' |* u; }
" k0 p" P: W& E& ~) X2 {
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. $ A/ C# I3 K7 H# P  a- Y- D
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:+ M" W" R% C- s# h
empty = true if valid[WPTR-1]=false6 W" M* @' U  l' e4 f4 j  `
full = true if valid[WPTR]=true" ~( i' I' R, x& k! D. I* t
可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
% p  e9 Z1 Q! I, k1 b( I, {: T  G/ \
2 |, x6 H  t2 N2 l2 K. j, E, ]; l7 z. \2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
. S5 m+ d/ M, z1 k- K" q關於 metastate
( c4 g* ^8 h! a  ]( V請問如果一個d-ff假設 clock頻率1 hz
7 M4 A. Q# \7 d- }如果剛好發生metastate,metastate這個狀態; o' y$ O) P/ ]
有沒有可能有機會維持1秒的時間長度呢
) i# _1 z6 z2 s! ^8 u+ d- ~$ v
謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有5 c. A1 X3 h1 w: @6 v% Y& l
( R2 K; N9 h8 s/ [4 T
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 02:48 AM , Processed in 0.133017 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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