Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了...1 Q& ]4 \* D% w. q
6 Z1 X$ {' ]3 ?& h' }1 |
這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
/ a7 b) U! V8 v( H
9 C/ t7 \* s% l: [* ]9 R: \那些信號也先估且如我假設一般3 m" J) I: `+ M4 G, w# q1 P- O& Q
wen是RX收到一筆完整的資料時所送出來的
/ }* M+ Y$ D% X0 K7 C因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
2 U2 V: P8 i# D- vprptr:process(nSysRst, nrd)3 a, E8 m0 T/ ~8 y
begin
% g: ~( Z, E( q. C0 L; {1 m    if nSysRst='0' then
- _" k4 ]3 w- j$ y, `/ a        rptr <= "00000";+ r: G2 Z. O! A# R" _" g
    elsif nrd'event and nrd='1' then: }  x  ~$ R. h1 Q
        rptr <= rptr + '1';
. [* j" y' z% O/ C0 P1 {# X6 G+ b4 a2 }    end if;+ k8 `; ~) ~7 W8 T8 g
end process;
0 d: p# `. b- [& }9 x( t
0 E3 N4 ~6 h1 h9 |- i/ l0 Z& @pwptr:process(nSysRst, wck, wen)
% K. }  P( Y, v4 z$ Q8 {; V9 U# }begin
7 o" O9 d$ T# ?2 I% v% n    if nSysRst='0' then1 T5 e6 v6 E( F3 f& ?
        wptr <= "00000";
1 Q, |9 A& v! d: `$ y$ ~    elsif wck'event and wck='1' then0 k  q. l3 H# h
        if wen='1' then
: q4 g/ q" u" L0 w6 [( x& j            wptr <= wptr + '1';% T& A5 S  t: `
        end if;% y! w4 H8 Y5 c: E, \- K
    end if;
$ d; ?( N9 t. R  q0 z3 fend process;
- \/ g1 b6 N6 p( P7 Z+ r! v; M" B  m2 E  ]; p: @
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?
8 m1 G/ R8 Z$ E; y你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key; |: {# T, [( P7 D
+ E+ @. Q. q( I5 K) w; y
Read buffer部分
5 Z7 |$ U  P+ J6 H% U; \. u, Q( S/ t0 j5 {% o/ C1 ]2 O1 h/ h
--read_buffer' c* L! K. E' g2 E
with rptr(3 downto 0) select rdata <=( y' u2 U, V9 m) H  a
    fifo(0) when "0000",8 z# Z( m5 K' \3 k$ C9 |* F
    fifo(1) when "0001",8 ?3 x' v8 {2 `1 U; r
    fifo(2) when "0010",4 ?: s4 s: _& ~9 {
    fifo(3) when "0011",9 ~% L7 [0 C9 x
    fifo(4) when "0100",
8 F% n. ]$ m7 o- V  j    fifo(5) when "0101",% ^6 f8 n& \9 \; l- x* f
    fifo(6) when "0110",+ }* s9 e, ~% d# m. v4 j5 o- k
    fifo(7) when "0111",  D; w" K3 g! F* ~/ R* J- n5 S
    fifo(8) when "1000",4 ^/ b( t' I/ Y+ D( H2 L
    fifo(9) when "1001",
4 p0 H: R8 C% P' I: h: f    fifo(10) when "1010",
3 R8 O! f# k2 w9 f4 c& G1 b    fifo(11)when "1011",
' i& t, k! K* d8 a. b9 a( F    fifo(12) when "1100",
$ B) P9 P5 L4 W5 [1 D    fifo(13) when "1101",% G- S) R% X( [- Y
    fifo(14) when "1110",
( T' Q# `  j; H    fifo(15) when others;
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分, M+ X$ p% r) \$ ^. H7 e
4 v4 S( H- y5 N  z0 q, j
write_buffer:process(nSysRst, wck, wen, wptr, wdata)% L. G+ O" A: D. J/ \$ F
begin
: Q/ J* O9 T0 T, W6 D* b: ~1 ]    if nSysRst='0' then
" k, q; X9 C& D; B- k; i( ?: @# |        for i in 0 to 15 loop6 T+ R* i* c$ `% n9 g. H4 j  p- ]
            fifo(i) <= "00000000";
6 r5 ^9 i% E7 J7 J7 d        end loop;7 d1 i$ c( ~, L, T
    elsif wck'event and wck='1' then
4 U% |. @' y! h- C1 e/ m9 `# _        if wen='1' then9 R4 d. E9 C* g& ^& q
            case wptr(3 downto 0) is3 e/ m0 |1 ^, l* @
                when "0000" => fifo(0) <=wdata;( a4 a5 j  B( j$ u6 @: m/ l
                when "0001" => fifo(1) <=wdata;
  `6 }* O* B; H0 R                when "0010" => fifo(2) <=wdata;8 ^0 P& v# C4 y! W+ P) P
                when "0011" => fifo(3) <=wdata;
  W" U- T  V( b% d1 w, f3 {                when "0100" => fifo(4) <=wdata;7 B5 ~8 K* z5 J# o3 |1 A) a
                when "0101" => fifo(5) <=wdata;$ q- Q+ f4 {$ G2 F
                when "0110" => fifo(6) <=wdata;3 J- }  O( q. k" t, Y2 w% p
                when "0111" => fifo(7) <=wdata;- J6 k3 Z* T  d6 _" @5 @
                when "1000" => fifo(8) <=wdata;
" J+ g9 [% f" O: i1 s                when "1001" => fifo(9) <=wdata;
1 `* Z! m- N$ o& u  {& \1 l                when "1010" => fifo(10) <=wdata;
4 K! g. j  y: }. G                when "1011" => fifo(11) <=wdata;
9 X9 p+ ~( {! m                when "1100" => fifo(12) <=wdata;9 X7 o# I6 X, X3 k# _3 H7 ^
                when "1101" => fifo(13) <=wdata;2 n6 k3 y8 C& @  q( h; X
                when "1110" => fifo(14) <=wdata;! [0 F9 z9 q: D& {3 r: {* {2 a
                when others  => fifo(15) <=wdata;
) t! L: @! w, P- ?+ {; {            end case;
, \+ P& r$ n- ~* L        end if;1 i. D6 q, `+ h9 X' Y  F
    end if;8 a- k3 ^- U6 t# C, o3 f
end process;
: I! Z! ^6 S, I0 C7 `& U2 r3 D$ \9 R% t7 R! ~( c& x. k
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
$ `4 H' a, i4 m& c& |我先做些假設3 _/ a9 V) N8 ?0 M. j% T+ |5 y& J
1) /RD動作時狀態不能改變
- S7 }  W, c( \+ [- C2) wen動作時也不能改變狀態8 d6 U0 j: w( T  H' `
如果只有這二個case的話以下這段code或許可行( u4 A  P- D$ V: v

9 w2 t( S  o2 jstatus:process(nSysRst, wck, wen, nrd, wptr, rptr)
3 ]: X# b+ S( I8 P: u: g; }begin
- c, H: j! s8 B. R5 m    if nSysRst='0' then
2 }; m' N" Y* V2 F' z! b        full <= '0';6 e1 _1 e8 ]9 M3 P# L" O
        empty <= '0';' L- F- u1 D% U$ R
        flag1 <= '0';
7 M6 Q: t. o& P; C9 ?        flag4 <= '0';3 e3 L0 q4 m0 `4 |
        flag8 <= '0';
3 k) X: F/ F- f        flag14 <= '0';: l1 [0 [" _+ D
    elsif wck'event and wck='1' then! ~/ r# M1 t: y( {8 G
        if wen='0' and nrd='1' then, \4 r9 w5 N7 l
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;  @# k! m  g0 h; U8 e
            if wptr=rptr then empty<='1';  else empty<='0'  end if;. E# B' Q# H! |9 Y$ |' ]& I
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;
) [3 i, C) e. h5 S' W( n            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;- }+ @% d& T+ G& X- w4 E. W' h7 Q2 ]
            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;/ `: W( _; U: p0 D( B* @
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
6 Q& E' s: b7 ^+ A* R: I1 Q$ C% @        end if;
' f- V1 F0 n1 Q1 c- J& U" w    end if;
; Y9 E1 _9 E  kend process;4 \3 q. z  j' g0 K

8 ?1 ~) R! b! H% `1 C7 d1 z1 \[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高$ I& p& ]9 \$ i( n6 d' J: k

1 |. }  X$ w' M* X1 U  r2 W好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例
( [/ t, X5 A0 u. p6 W  z% o/ Q0 P  D! I9 O1 f
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論1 D# V! x! X; C8 N3 x$ V

# T+ Y* i) N2 o: l! e* O: y2 }1.3 Z% m0 R' h, B8 _2 A. @2 i3 H+ l
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
7 Y+ ]1 P' T' Z* c  g3 ^4 u& h   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生/ u: b& A. r& |( @; \& e3 f" L
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一( B" Z% I- S5 K3 P- v
2.
  @, }4 @; M" Y+ W: [   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
/ l" ]4 G9 ^2 R+ T+ F3 |   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出8 n; E9 K) [6 I' L+ ~3 R
   資料讀取週期RC最小280ns' `2 h3 @$ H& Q6 W4 D" C
3.
5 X7 s. [9 a& a+ y5 s! P   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
  r- a: \9 x$ t& d4 P- G   小小於wck週期的case,會有問題,以trigger level造成的INTR來講# @- ]' A4 T& b; T% J: r6 X
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間1 z8 d& J! S: M* k! [
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
" @# A: {3 K8 A% A2 F
8 ~! L5 e; X* T% z) i* N第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了* b8 I: o  B' k5 x0 I
! G! d  v. [! l+ r
第三個問題還是clock rate的問題" l$ I: E& P$ Z, b

8 {" e5 H1 Z8 s* h, v第一個問題留給別人回答好了...
/ P% T" z$ D  `& ]2~3問題的確是問題沒錯, 誰來接手一下呢?, e6 i8 c6 \+ O0 X% c" m
7 Q3 E! ?/ ?! S- Y
addn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!. f5 T: W" z- U( X4 s9 e

9 }  \/ @2 G' C7 Y1 t[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]/ {8 ]  f# t* i% v% c8 g
[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]
: |4 a8 R! ?; K. q3 N: I2 N; T" L) K[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.1 J9 }. ]2 c* P8 l8 v7 d' i( m' s
[4] Website of USC Asynchronous CAD/VSLI group. [link]1 A+ m) n" w' c# B; ?
[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
2 Y" ]5 Z/ h& a[6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link]
; ]- ?: s/ H" t2 g. @[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 | 只看該作者
版主 大大謝謝你再提供這些參考的資料6 t3 L- F- o+ s; E
我會好好的找來研究看看
& V" Y% e# w) u# T% O) _5 h4 o* P' C5 M
我本身目前不是從事電子相關行業,不過對於# X+ A  s) {. k/ n# a6 j
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
! ], h; Z# g; e) e$ T; y都很有興趣,之所以要寫16550 code主要是想! |2 l% p* T- k% |5 J
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
( E8 q' B3 M7 {8 T5 M6 a. h8 N6 \0 Y' F
FIFO這部分我有上其他討論區問過,可是都沒人回覆
" f% f; E1 r; J$ @% s# ~, _3 f+ \2 y感謝版主願意跟我討論這個問題5 G$ b$ U3 i# g4 L( p
, R7 l. h7 j' ~- x% K
再次謝謝啦
32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多8 {* {7 _: h( d( i8 E5 y8 V
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見. a# D4 Y# o6 M/ E! |: [
不然的話就變成只有我們二個人在討論了...
6 ?& i, X- V6 {8 S9 ^. X# M9 n4 J, Q5 ^; Y  y& I5 s
過幾天沒人回時我再找個時間來回吧!
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
- \- z3 g, ~( e- |最近想到一種架構,用來做FIFO不曉得可不可行& ]) c0 d2 v! i- v; u7 C  T
如下圖所示9 f7 d6 G4 _) I& Q- a) @
8 o, ?& \/ A3 d5 U2 z$ n5 K
先就full,empty討論,trigger level不管9 J, Q" z. Y: a% G# s
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
( H) m" p7 i6 S7 h
. e6 N9 X: Q  e( O$ Y1.用額外bit(valid_bit)來指出register是否有資料寫入
0 v! |  K% x2 w5 k  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
( q, p- K9 b9 Q  當讀取FIFO,相對應的valid_bit會被清為0' [& ?- h0 b- c' i& N& @' D- S

/ J2 R, n8 o! [3 h4 Q( H2.wptr及rptr用bin count
4 B* B& p6 ]  ~% N8 T, E' S- l3 k
! b0 G1 W% c7 }3 P0 ~  \( u+ X3.full將所有valid_bit取and,empty將所有valid_bit取nor( X& E( `2 @' W7 z  B  B2 h- J3 Q# [

/ M3 ~: f- B5 i' e4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
1 G* K4 h3 w9 y, P7 E* A  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
* `# N7 I  u- X, w. F. u& i  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
1 e5 ^( O0 z% K# C& E+ U5 O9 U2 a* T) g* ]6 ~% a
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作& o( U8 y/ V5 k) W
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
! T+ R9 L$ n' `" z4 ~# a5 e  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
$ N6 O! |+ \+ d$ s7 W" Y  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
" \% v: k+ e- G! ?  個位置是空但被判定為已經滿了的狀況)/ L5 u/ u4 W; R2 ?

7 C& l4 _7 T6 y( d* Q# Y以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
/ n. g! w; X( ~% _2 k* M* E; E1 N! K# [( |3 R
如果不管coding style的話, 這個想法很好
' Q# J+ W, Z  N* k
8 i1 G( X, z- O9 ^$ F! |. e相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
$ v+ C' _! {; @( B跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點./ D7 m1 D$ ^3 y, W3 e
anyway, 互相交流吧./ w$ `9 M8 D/ `0 E$ ~8 j+ F/ _

; N4 o& W. L" H6 B) B4 c改天有空的話來討論一下asynchrous circuit也不錯
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好7 ]8 U  M2 P+ {" |1 n. w
我想到這個方法除了電路會比較大外還有其他缺點& ~* R7 @4 \; O, n* ~4 Z

. n( B, Q+ e4 R0 y- S% a1.不適合做成容量較大的FIFO4 N2 d3 ~3 F9 A  V. L* ~4 {( J

+ z  ^! [" Z9 d" |2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
  S/ M/ \* R9 f# r( o6 K+ Q8 d# T# K0 e- n5 Y( j
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
8 g5 \/ b* |% A5 q2 ~( J   會有較長的延遲時間,所以速度被拖慢了
0 o" q6 \5 f1 u6 l- h; p
. v5 l* P, P8 y% d  |, B$ y4 H謝謝 版主 大大 再提供了另一個思考的方向
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
1 y# K* M5 [" c9 v5 b9 `$ F我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大) q# x9 ?0 m1 V! M: b
但是做ASIC時你會發現其實很小的
, }7 f5 u% w0 r, w+ ~) P! W  D$ D
, f5 Q3 U. }) `: i7 Z+ n
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
' q+ z0 Y" q  F9 p. R這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了! Q2 D( J4 @& ^9 y/ G& ?

0 X9 D$ J/ y, ^4 Z. L, M) ^3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了, c7 z- j/ g8 _) h7 ~2 U
相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好7 B7 m7 ]$ o6 L* }2 Z
* M4 M3 A/ K0 Z; \; t
: c5 {2 K4 y+ ]
1./ M9 R) E8 {+ M7 Y
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
& \+ U/ I3 {3 m- ?" b' z$ t0 T1 @! H
   不了解這段話的意思,可以在進一步說明嗎6 @1 m0 S: n/ D, Q

7 L. H6 F% B# l; O5 }/ K+ L' U! H: J2.
8 L& K/ y7 Q' t3 C& w2 j& X  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間: ^! w  `) h  R& ]& e% k, _
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
& I2 z+ h1 K& H, }- u1 Z  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了# ?! T! l1 V+ t. a
  請問有辦法評估亞穩態維持的時間嗎: I  F3 |# m# \( F) J! ~0 ?# _
  . c" ]0 n' `$ [  @7 h0 s
謝謝
+ m8 Y. \; T' K( @9 x& G. u+ s) G5 G- D" `0 L. |
[ 本帖最後由 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數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
5 f* m- n: ]+ e9 |3 {  V* X* J我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:" ~# [- n. U" m, J
empty = true if valid[WPTR-1]=false
0 v7 y% U* {& g8 `7 a5 vfull = true if valid[WPTR]=true
' g( W3 y1 d( `' C可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
# Y2 }& J$ \! s1 g3 n: R  `4 w, f7 O9 ?: I. @; o* W' Z7 {  B% T
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
5 h$ s8 w" L. ]; a/ }: a關於 metastate
0 g, }* Y5 ]( a$ v1 r# e請問如果一個d-ff假設 clock頻率1 hz9 [- f, }4 U, |
如果剛好發生metastate,metastate這個狀態: ?% @! e0 o. s1 M4 \" N
有沒有可能有機會維持1秒的時間長度呢
. ?# X! \, G' Q. R/ P
6 P, P/ F( q& P  S; v謝謝
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
2 A; b) A, i4 {$ W  A( k# S; M/ G- j5 M8 B7 r: j
metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 12:00 AM , Processed in 0.126516 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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