Chip123 科技應用創新平台

標題: 如何將Hspice資料轉進MATLAB計算 [打印本頁]

作者: 緣緣    時間: 2007-10-4 10:57 PM
標題: 如何將Hspice資料轉進MATLAB計算
我現在在設計一個三角積分調變器(sigma delta modulator),電路完成後,我用Hspice做FFT(快速傅立葉轉換)求得SNDR(Signal to Noise plus distortion ratio),但我看其他論文秀出來的都是再經Matlab轉出來的圖形,請問,hspice要如何轉換成matlab畫出SNDR及DR(Dynamic Range)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
" T, ^( c  e7 h! d- X謝謝!
作者: monkeybad    時間: 2007-10-5 06:42 PM
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用9 n; E( V- o4 M4 w
就是直接用.print指令把你要量的電壓印出來% F2 l$ g( |, F$ s7 X8 W1 T
然後再用手動把印出來的資料copy起來+ A" `/ Q! G) u( k
然後貼在Matlab程式上面 然後就可以做FFT了
作者: 緣緣    時間: 2007-10-5 09:39 PM
標題: 謝謝版主回復
謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。) p9 k( a/ i4 `8 ~8 ^( G9 Z
$ E3 ^1 Q7 r5 k3 l, T) g1 L2 X
謝謝!
作者: sjhor    時間: 2007-10-8 09:40 AM
Matlab 有 fft 的  program,
- X8 z/ f- `% C所以  只要將FFT後的資料  做一些轉換就可以唷!!, c! s/ `% w. ]
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power". u8 {( l, W$ d% O, }* W1 m
就可以換算  SNDR 了!!3 {4 H( p' d$ p" S% s& k4 ^9 g
SNDR is Signal to (Noise + THD) ratio?
作者: 緣緣    時間: 2007-10-11 05:44 PM
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
作者: finster    時間: 2007-10-13 08:20 AM
我以前作DAC的MATLAB部份程式
& @9 }9 r4 A1 n& H+ W, y我想,應該可以給你一些參考吧0 F7 I* l' v# q5 L9 U
) X. u* B2 v. o5 s
% --------------Using minimum 4-term Blackman-harris Windows -------------
' I# c5 d2 U' j4 o5 J/ hnb=1:1ts;( y8 Z$ X0 V/ h. ^
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
& i; @- q2 Q( C/ h) I+ vwin_gain=sum(kb)/pts;
8 h) x: Z7 |( T4 z  Bkb=kb/win_gain;  D+ k) W/ Q. {% ]

+ F9 U; ^; E0 C/ Z% a% --------------- Calculated fft --------------------------
5 T; s3 Y- a3 T, r7 c1 R( c7 Nyb=kb.*x(ptsttfi);9 g# `& E) U+ g5 `/ [
yk=fft(yb);7 r! p$ ]4 n; e" b2 J; L5 h
fft_no=length(yk);
& j* ~9 }  i- L* \$ c: @f=fs*(0:fft_no-1)/fft_no;6 Q8 o" `- ^4 g" n, L- r
Pyy=yk.*conj(yk)/((fft_no/2)^2);# M" o. E! N6 d% @7 d; w1 D
3 M/ z+ G) d" @+ `4 W! N
% ---------- Calculate THD ----------------------------
* H4 P$ n1 b9 t% P  H5 U1 ij=1;
  v7 Y5 ?3 j  i! w4 w- s# o7 afor i=1:1fft_no/2)5 b! G9 M) `$ Q6 `# j! _$ v- h
    if (f(i) == (fi*j))* ?% U9 y% o$ b, k
        HD(j)=Pyy(i);     %% find all harmonic distortion components
6 I& z" j+ O' _9 X8 g! d, e, x        j=j+1;
9 q, o1 k" m$ G  a+ [( W, Z4 G( n    end3 V3 @' l! l& h0 X
end: Q1 f3 C0 o( Y$ V
P_hd=sum(HD(2:9));2 M1 `- ?3 o: x8 o$ F: I( g/ @
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal2 F& U' m4 T0 f* B
fprintf('THD = %g dB\n',THD);
9 e. E1 U" B) O% k. X: X3 \
3 w$ |2 b7 ]6 l: d( |7 h% ---------- Calculate SNR ----------------------------
. L4 t, y; E5 Z* R; i7 b- e2 bfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));; z1 _2 k7 L& d; _# e) o4 V
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);& i* _, e& X+ z% z( S3 o
span=max(round(fft_no/200),5);
2 f6 d3 X' b0 i$ L3 g  t& BP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
" [: ?( ]6 V0 G' {& K  z' W& o, x! I; @. w
P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
( v. c! L2 D0 P' }- a, Q( WSNR1=10*log10(P_sig/P_noise1);
* B& l! x+ D4 w6 n, I6 wfprintf('SNR = %g dB\n',SNR1);
作者: 緣緣    時間: 2007-10-15 07:34 PM
標題: 謝謝副版主回復
謝謝finster副版主回復,想再請問一下:
' z5 q' v6 f0 V$ k請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
% l, r6 M9 x/ C4 c2 z/ K3 D
6 A& ]3 e1 z$ }另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:+ ?" l( u; C6 j2 w" e
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
* Q7 s) Z$ X" D4 y2 a, ]內容為:+ N) {- L  K* g+ N0 k2 I; P$ V
压缩文件共有三个文件:两个m文件和一个txt文件
4 B  j) E7 d! Y0 sspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
& e) ~  x  P) z' b' [$ M3 t: V' V5 e希望大家喜欢!! 2 U7 k3 [9 n6 w
附件為:FFT.rar
% D: ]; G1 G8 ?& s0 i2 O$ I
+ y+ b9 Z; B3 o9 k我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:! p+ G, N3 z0 p

- ]7 p0 e: c& @6 o! E  r??? Undefined command/function 'AD10'.
7 ^. n7 V3 `* R# Z! C, d0 h4 |# b+ o: ?1 n+ J6 x* f) m
Error in ==> spectra2 at 43
% x  y9 A5 w% U$ B1 A6 ad0=round(AD10(start:stepstart+M*step-step),3)/1.8);, g8 A( ^  l+ Z$ ~
+ x7 d0 y0 E( p: r" W
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
4 ?8 D. ]7 N4 r, i; v: H5 b# N. M- E! m
* `& L& R2 X  B; E∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? 5 g+ X  y. l9 `: O- L4 t: a

  n0 ?" W# s5 D) x[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
作者: 緣緣    時間: 2007-10-15 08:54 PM
標題: 謝謝副版主回復
謝謝finster副版主回復,想再請問一下:; e$ m  K) n6 r/ B; H+ b  K
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
0 i  ]& k0 O" O8 q' ^1 I" k另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
) c+ `$ L9 ]: F( v"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
3 [  P. v/ ^+ p( G2 l內容為:) \$ \9 v# [0 V& j) |
压缩文件共有三个文件:两个m文件和一个txt文件0 c4 y. W$ @% `/ `$ u+ r5 m- x6 X
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
: Y3 @' ?% ^! O; m# X希望大家喜欢!! ! O7 T7 c& c1 j- B* Y& e6 Y
附件為:FFT.rar/ L0 e% v3 s5 h; D- c2 [5 M0 j) O
0 f/ [# h1 @. b7 |* f" J
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
% m$ v) z  i! |& b/ X, Y8 {/ o9 z/ V
??? Undefined command/function 'AD10'.( H% o- [& m: G

' b. C7 c  _  k, `7 WError in ==> spectra2 at 43) `$ K# b+ m5 E/ P, k# N
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);6 y! `$ `, j$ t+ L$ Y' |/ S- P4 ]! J
, C' L: @( U; i; Z# r
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
作者: 緣緣    時間: 2007-10-15 10:18 PM
標題: 增加附件
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
9 G1 H6 A: _) W! \) P8 w附上上帖的附件
作者: finster    時間: 2007-10-15 10:31 PM
在回答你的問題前我先稍微解說一下我的MATLAB程式
2 q; e3 Y' M: w+ L# n+ l1 D要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
( s' ~: `" {; g7 y4 A; o故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算
" ]7 v6 s/ b* _9 b8 u. O& _* p- b# z
$ k  p, G2 f1 I9 v: Y, z+ X在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
. B9 Y& G( D$ I# M1 f9 d" T  K$ r2 Z5 S& x
我看不到你的附件檔,故而實在無法作出評論
, L9 q9 ~/ B( x: U) |# }# I而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
2 a8 C) O. b' J. ]從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
作者: 緣緣    時間: 2007-10-16 03:54 PM
由於之前一直出現Internet Explorer無法連線訊息~???????- I# i  K$ T( L# I. X( e4 @
所以重新上傳附件
作者: 緣緣    時間: 2007-10-16 05:02 PM
標題: 有關hspice .measure指令寫法
再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,
5 J+ V2 S$ K9 D, j' }2 u; E, C6 F+ z指令的寫法是否為:" ?2 B# C0 h" R( W
8 a) q: R, x  m" C4 D/ a  u- Q% i7 \
.MEAS TRAN DIGOUT
9 L: a) q1 s2 H$ w  }/ W+TRIG  V (Dout)  VAL=0        RISE=24 F' F2 D, R/ b: w  x9 e5 N
+TARG V (Dout)  VAL=3.2m  RISE=2- a& B# N. q* v% |* ?8 v* M9 B

, o' B7 b/ L& X! k∼還請指教,謝謝∼
7 A* m6 H0 r- f$ E3 f7 v
6 W' o* g* O7 {另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
$ C+ p& c" M! i4 ~6 l9 x# B. a, c# q5 j3 C
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
) B5 X& ]! r" ]$ A+ W) X$ t
  |- X5 x8 {. b  W6 \( P' B) f4 t& Z. uHspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?- N" T, {, @! X

& |" L. H( K+ _/ D$ L2 x[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
作者: finster    時間: 2007-10-16 11:08 PM
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔; n2 _  J) T0 y' B
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料! C6 A  @4 S- O3 x8 x. ?
所以,請再檢查一下你的HSPICE檔案吧/ |; `$ }% |: J+ l( ]7 X% p/ r

" E  [  w5 l) G' i9 q6 Q: Q3 z+ K再來,你的.measure指令用法沒有問題8 q; a! C# m( |/ G+ \
但,你的取樣點及時間似乎不對
' i  r8 x) Q" D7 |8 b1 e你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
& I  w- L' w' b. j.MEAS TRAN DIGOUT) {; D7 s9 n$ x4 }" O+ W
+TRIG  V (Dout)  VAL=0        RISE=2- e, R) ^! L! S' a5 o, {
+TARG V (Dout)  VAL=3.2m      RISE=2
4 T" u; q2 w/ h1 ^8 i" [5 z寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話6 v) l% }; ]# O- {+ e- ?8 A/ D- ]
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock! f) d, Q0 X: s2 o4 w, S
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
' x& N* t6 Q2 O- h" v  T! L" T6 ^再者,如果是用.measure來計算digital code,那如果以rise edge作基準則應該用RISE=1,而不是RISE=2,這是很嚴重的錯誤,除非你的clock及取樣有delay 1個clock的作用在,如果是以fall edge則是FALL=1,若是以你RISE=2,那你取樣出來的digital code應該都是錯誤的
作者: 緣緣    時間: 2007-10-17 02:02 PM
標題: 再次謝謝Finster的回復
再次謝謝Finster的回復,我會依照你的方法再重試一遍,另外在麻煩你幫我看看上傳的ADC Matlab程式。' \4 E2 s0 m/ u8 ?: o$ H+ r
' {" j4 j) T  Y5 u; Q8 h) a
∼感激不盡∼
作者: 緣緣    時間: 2007-10-18 11:59 PM
再請問一下finster副版主,我有兩個非重疊的Clock,一個ON,另一個就為OFF,取樣頻率為5.12M,週期0.1952u sec,半週脈寬0.0976u sec,第一個clock延遲0.05u sec開始觸發,第二個Clock再經過半週0.0976u sec觸發,電路輸出點為Dout,.Measure指令的寫法是否為:2 b% S8 U/ K7 L# j" `. e3 T# J, z
3 }) X8 A, P4 X" H8 S& m0 z- o  k; Y! [2 T2 L% q+ [6 ~
.MEAS TRAN DIGOUT) u  \! H- s. x" ]
+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f3 a3 H/ o  q8 j% Q: A' ]1 H
+TARG V (Dout)  VAL=0.976E-7               RISE=17 \) ~7 |$ N5 B" R$ I. G

2 \3 d" A+ a) X% g∼還請指教∼. I+ ~$ I# q( X
程式重試的結果,*.mt0檔案只出現:* G" r; l- J8 C' P7 {% p4 A
digout           temper           alter#            
  ^+ a0 e: v" n9 R. ^1.890e-12        25.0000           1.0000         * D& }) U2 t! m2 A+ \* X+ J
不知是否還需修改?" V% q* K  |9 U4 }2 Q$ Q+ v
4 k" _- y5 m0 M5 w1 D2 k
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
作者: finster    時間: 2007-10-19 01:58 AM
先回答第一個問題: Z1 N7 O! t' [2 Q
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息2 F7 e; W" G" Y$ i4 x; ^9 a& a
所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧) v9 F+ e. u  E3 o0 D& d9 M4 [

- S; q& ^. @" F( a: g( j再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
/ B! N1 M7 W1 p/ H0 t& p8 Y但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock+ P5 l" @' @: {/ [9 h
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)8 e9 f! F0 O* p" t9 ^
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
( C/ k9 v/ x0 w& C4 A舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為, x  ~( s- q9 y+ I: R% n/ [  Y. a
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us0 R5 |! ~6 f0 v6 Z9 {0 v2 a
.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us$ p' n( V9 h& V! O
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us# {, }+ n6 {( X5 V
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us5 b3 [9 w; U, b) h7 L' k! b
0 }0 j$ r( P- d
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us. n$ l4 ?! n. `$ Y& \& w9 K# t
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us
* a' L7 o0 H! B, [# R8 o2 ^.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
, \, m$ k* G: W1 L# M) G* c' o5 V.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
/ i( T8 G2 p, W* T9 V1 R
3 F/ g; c4 E) W2 p$ h我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
! Z* X, [. z, N我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
1 O* J) y- R- M8 B1 {4 \6 S  y2 d: }. q: @; Q4 W( p; ~
最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us. g* |) ^7 d% ~, d1 p0 p
可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
作者: 緣緣    時間: 2007-11-8 03:00 PM
標題: 謝謝finster副版主的詳細解說
再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。' z3 Z6 p! \+ Q, M4 {8 l
我大概講一下我的架構:" ^1 g  U% w& S# S* N
我電路是使用Switched-Current(SI)的架構,不同於Switched Capacitor(SC)的架構,最早設計是設定輸入頻率Fin=10KHz,取樣頻率為Fs=10.24MHz,頻寬40K,位元數為1-bit;由於我電路中有一個Op-Amp,因為OP-Amp頻寬限制的原因,在高頻時易產生非常大的諧波(harmonic)及雜訊(Noise),所以才降頻為輸入頻率Fin=5KHz,取樣頻率為Fs=5.12MHz,頻寬20K。電路中有兩個Clock(Φ1 & Φ2),Φ1 & Φ2是兩個Non-overlappind clock,由於尚在模擬階段,所以兩個clock的產生是使用hspice的指令寫出,指令如下:* Q, c7 @/ v- T! d* g7 \1 Y
For Fs=10.24MHz:
. ~1 C. O3 G# i# @* Y# L; BV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
: c% R" H  [( n" b& C0 dV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7: d3 v: Y; K# @* g5 y3 p
For Fs=5.12MHz & t: O0 ~/ o9 m5 M0 I* }; @+ ~, n
V0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7$ N! C2 e3 a% B& b6 t1 `0 F
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
- j" e/ B4 B$ S( k+ m, M) w$ ~另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
8 L! a; Y2 J4 e, M# v如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
6 ?' A0 _- _1 r* E, Q.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
4 _. b. D; j& }/ G( }+ P.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us5 ]3 L- f2 Y3 R3 ]* |5 ?$ v
然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?
/ r- d0 G( X4 U# Y; p你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!$ z/ L" }- w0 F5 {+ D
0 J+ i0 Z1 j* N/ n( E* A* R
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
作者: finster    時間: 2007-11-12 02:06 AM
看了一下你的說明,覺得有些奇怪的地方  B( A2 u5 ?' Y4 }( ]
首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來. V# `* O- d! q( y
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?1 r, p; l- w( W6 s

" e: k/ O) h9 |0 m再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪9 W6 s0 u/ @* w! j# C
9 R( ~4 _" C4 X- C& U# a+ i/ a/ v
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
/ l5 R* {5 h$ q: ]
3 z: X4 s$ Q1 T! S$ B& U, i7 Xclear all
) P1 D$ r0 S8 ]fid=fopen('dual_measure_rms.txt','w')
1 L8 Z3 ?+ W/ Y. H% Bfor M=1:1:10249 B& O6 {% i6 U7 ~2 @7 D( m
       T=M-1;
5 ~! G2 @" v3 X$ x! ?' {2 K       from=(50*T)+45; %DUAL DAC measure time. T6 A+ X. e( p: u5 A. Y% j9 o
       to=50+(50*T);: a  G. w% V: P
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
2 k; T2 G0 W' x8 fend
4 N. u  @6 C  [* Z0 c5 {MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用+ J9 O/ U7 [% j- {+ @
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
作者: monkeybad    時間: 2007-11-12 12:02 PM
感謝Finster提供一個非常實用的小技巧
, M- s" P- V0 |# ]7 v這樣以後模擬FFT就非常方便了
9 T! s& n; r! \' ?5 o" l8 N看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間
9 {, a7 @8 d3 U1 j然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧3 }% I  j  b* G. [+ ~2 l; _1 {
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
作者: 緣緣    時間: 2007-11-13 03:58 PM
標題: 再次感謝Finster的詳細解說
首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
$ E9 _3 m8 b) j4 _7 M/ }我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:) N. a" p. N, }! H* Y) D- W7 V% G
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
, l. E7 h1 l) t9 `( z& m且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。* v9 [- ^- U; E" G6 U
另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
( u$ X  A" J" S+ ?% T: g依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
- J+ X: @8 }' w! B# L" Y" ~- a! jclear all
! B$ S. j4 z6 m9 X/ Rfid=fopen('sdm_out.txt','w')
* C5 {# |  o: ?  n8 J! Y# Efor M=1:1:1024
7 K0 n% z/ t& Z4 W4 }5 _8 u/ d    T=M-1;% Y! @5 h  @8 ^5 y" B& C3 E
    AT=(0.1952*T)+1.026; %SDM measure time7 e6 E1 P) o8 Z- R# }3 u7 F
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);
+ l8 u; D  c7 O0 b0 Q5 r  vend% U+ p) h" O9 o$ ^4 p1 ^
試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。
( N/ ?% X  E$ C" }' d0 A想再請問的是:
# w. [1 A8 I+ {0 d當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:% D3 }- v: q: ]$ Y' t' Q4 d! s6 \
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM, ^2 X6 r8 M' S) s3 x
然後就可算出SNDR及SNR以及畫出圖形了嗎?7 |; x5 J/ ^$ |/ t/ E, H) O
請指教∼
作者: finster    時間: 2007-11-14 06:03 AM
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....' T+ ?/ h" y1 [5 N' e# P8 t  b) v
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失6 u# [% Y4 i2 b3 h, W; p& C! K( x0 t2 |

% I$ J2 k  [2 f9 B4 ^7 U1 s3 [至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
, N9 g; f9 \" R) H% Q( L. _% N  s! o而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久, U2 R2 B& w/ ]4 }4 Z/ e

9 w6 L0 m& T3 ^5 B$ j* ^至於另外個問題,我的回答是,對的
' C' E7 |4 ?* D: ^0 s/ b2 N但,要先把一些參數改成你們自己的規格才行
作者: monkeybad    時間: 2007-11-14 05:04 PM
我補充一下; k! X8 ]- @2 ]* K: O& g
緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣# K" V9 y& ^' A; ]* P
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了
7 s8 ~7 y0 R1 e, \3 |至少我模擬起來也是這樣
$ c. u2 x/ ?8 D6 X( W而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC8 m1 T: o: i$ @7 Y! t% o7 }
所以我想取樣點很多應該是正常的吧
作者: 緣緣    時間: 2007-11-26 04:38 PM
標題: 非常謝謝finster副版主的詳細解說與monkeybad版主的指導
再次謝謝finster副版主的詳細解說與monkeybad版主的指導。% Q' }# k1 s. N: O
說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
' x/ k' _4 M" M! a; U8 N$ i說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 : S( W% p* q- W( K$ ]1 k
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。, {% w/ n! M9 u/ R3 }
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
) \" W  f. J9 `∼謝謝!∼
作者: 緣緣    時間: 2007-11-28 09:24 PM
標題: 請問finster副版主有關程式問題
請問finster副版主:/ K- y, b) r* W2 P5 h: `3 i
我依照你提供的程式,修改成我的規格後,程式修改如下:; p. h+ @2 ?9 Z& T% D
% --------------The number of FFT -------------- n8 _4 D/ X% q, z
fin=5;% *KHz( H  v% w5 E- Q* U5 K
fs=5120; % *KHz0 L" F; R  y4 V9 [1 n
cycle=1; % cycle = 2^N ; N = 0~5
* |% i1 }# |) b3 l. {- K- Q1 mM=round(cycle*fs/fin);
5 f' Z$ u1 y0 Z" S% --------------Load the binary code -------------
9 n1 C' S6 d; I+ R2 |5 p; K" p# Iload sdm_out.txt -ascii
9 J& v. V) C8 a7 N6 kstart = 1;. }3 H9 n: Y8 Q' i" M' W# D
step  = 1;
7 c$ O, i6 U6 w  c4 w$ P' S: X# E0 Z  o%ADC
* C  e$ A: Y. E5 k8 X( E) mx=sdm_out(start:step:M);- b7 Y0 i4 g! C9 n
% --------------Using minimum 4-term Blackman-harris Windows -------------: o7 B% G, _1 s3 t+ M1 c) w! U
ptst = 1;( y  ~1 z( D2 W  m" a7 S# D
ptfi = M;
. Q* v9 u# y, g2 D8 N! ypts = M;. p5 a$ j% V( [* D" S3 ~  n7 B
nb=1:1ts;
7 q# F$ w' U2 o% y" Nkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));: A. b0 `- k3 k' g2 j% M
win_gain=sum(kb)/pts;
1 V2 C1 u0 q, y! m" s/ t/ @2 {0 Okb=kb/win_gain;
3 e( E, n- E' y8 L3 P% --------------- Calculated fft --------------------------
4 Q, C1 |/ c& z2 Yyb=kb.*x(ptsttfi);. _) T2 f2 x: u3 U3 p
yk=fft(yb);9 L# E8 B3 `% |' S1 X0 E2 x: x6 F
fft_no=length(yk);/ G, i0 [  @- b& c
f=fs*(0:fft_no-1)/fft_no;$ k$ z% O; T7 A, a1 f
Pyy=yk.*conj(yk)/((fft_no/2)^2);& C1 `7 B' I' N- U; o& Z
% ---------- Calculate THD ----------------------------
2 u1 e/ _3 C) S4 \j=1;
/ A3 j3 J: Q6 g7 tfor i=1:1fft_no/2)
0 d6 w% \4 m9 T0 ^2 |; s    if (f(i) == (fi*j))  
/ V5 G' E, C: z0 Y        HD(j)=Pyy(i);     %% find all harmonic distortion components
/ e: U8 L: B8 c2 Y9 f        j=j+1;
/ P1 D9 T8 y' u6 g+ H% ^0 I) S' U    end
: N. K. O% @. w1 W" {end, C9 e% {7 y- N: p& J
P_hd=sum(HD(2:9));8 a8 {7 h. h6 z) i5 X+ p9 S
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;) ]- t3 |2 L6 U( i8 {2 l& I; F4 E! N' Z) ^
fprintf('THD = %g dB\n',THD);
. m# d- ~  G8 \% ---------- Calculate SNR ----------------------------
6 K( _% Q" N) Tfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));
+ A' G( Z: ?! M8 lfundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
- s) S: b* S% r+ ^  l! x2 {span=max(round(fft_no/200),5);; y$ G+ j9 K- |6 y' G" ?, ^
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
% K, @& |) Q& G: I# GP_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;2 P" B, }8 s; l3 [) x2 o1 N
P_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;
& g9 E( [% [& y# @5 T# j. h
SNR=10*log10(P_sig/P_noise);
) x9 \$ d0 O% aSNDR=10*log10(P_sig/P_noise_hd);
$ f) |& q' p' p2 ~3 }' ^2 u, `
fprintf('SNR = %g dB\n',SNR);# p. w- j8 }/ ]! ~) l% P
fprintf('SNDR = %g dB\n',SNDR);
0 B# v- w) m4 P, ]* r ) X7 a7 |# W( y" }
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:! T4 v+ f) A8 Y1 E2 C3 q8 k0 P
??? Error using ==> times; \. M+ M, ~6 ?; q! Q: R$ H
Matrix dimensions must agree.

8 w) s3 S0 l' l# D. v: h
: }/ m- L$ a' u7 [2 t7 Q) O% LError in ==> sndrtest at 21
4 K, H. z3 W7 B$ q1 c; j: w% J) Wyb=kb.*x(ptsttfi);
# n3 E5 O, {: N: E+ \# J1 k% }* S1 i
4 G2 X3 q3 t; L% ]8 K7 z; k+ Z
因x函數是我自行定義的,可否幫我看看要如何修改?
! h/ \4 M( n" K( b另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?
% L! Y2 t  G3 R: J1 b" I除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。/ |( ?* A' S% M# X8 }1 d
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。' x) x2 `0 L5 T
以上麻煩finster副版主賜教。
作者: finster    時間: 2007-11-30 12:54 AM
我看了一下你的MATLAB程式,發覺到有一個地方有問題
& b/ c7 l* l) l  H, w/ {那就是你設ptst和ptfi是同一個值是不對的
2 F' ?! N% s* uptst是計算fft開始的值7 e; ^, K4 v0 `4 z3 V+ q- k- D' I
而ptfi則是計算fft的range,如8~519,total則為512點
7 J; i0 R) S$ c  Y故而你在執行MATLAB程式時就會出現錯誤8 W2 w7 }* v9 Y6 Y6 q% y7 G
9 e, b, I5 g9 p/ Y
我看了一下你的MATLAB程式,基本上沒有多大問題
' D( M( Q1 e5 I8 s不過,要小心計算THD的值和範圍( O8 `  k8 p/ C; j
因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤, L0 W. `& L$ ]8 C% o* U
2 l2 l3 N+ @, Z# x( R5 d
最後,計算noise有好幾種定義方式, [" `8 D9 g) l6 F
原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
- l9 H* A) o0 G# f" N9 r5 v我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可+ e# }" c$ w( N$ q  C2 S
因為目前在計算noise上並沒有很統一的說詞,故而,只要解釋的合理即可
作者: 緣緣    時間: 2007-12-2 06:25 PM
標題: 感謝finster的解說
感謝finster的解說,我解釋一下你的回復,我程式中ptst是設1,但我的ptfi是設ptfi=M=round(cycle*fs/fin)=1024,所以並不是同樣數值,取1024是因為我有1024筆資料,還是說我這樣的寫法不對?
0 S6 Q$ l6 C/ S: |$ d  @因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。- ]6 W4 J, @: m! r% a! |# l& h
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?, x; ~, A3 _9 a% y9 b& U0 |
謝謝!
作者: finster    時間: 2007-12-2 09:33 PM
我想,你可能有點誤解了我的意思了9 k0 S0 l3 e/ [0 }% p* {; F+ O7 o/ h
我列出我當初寫ptst和ptfi的式子關係式
" _0 w! F& V# Y2 o( U/ K' u: g& Mptst=2^3;          % calculated fft of start point% V- ]/ h9 U7 q- k$ {* V" y" L; ^
pts=2^9;           % calculated fft of end point; ~6 I/ N" D2 o
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point. v, o, q9 Z7 `" e
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
% a2 r& u. j/ b9 O, x- g  Q如此一來才能夠取到足夠運算fft的值
9 `5 ~6 T! J/ T6 O; c3 n5 _$ j! W: t8 j& w' i
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值
7 U$ W/ `/ g- N6 T4 I. O如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤# \5 @6 ^2 q: j$ \, c3 `2 E4 A

8 Q, t7 V6 O) l( H& D1 j, @/ r1 q+ T! o如果對於要設的參數仍有問題4 k0 `" ]7 [- p
我可以把我最原始的程式寄給你參考
6 Z+ c* V7 x: z* C6 q0 u9 @5 H; ~! v0 }$ L, a8 c
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]
作者: 緣緣    時間: 2007-12-3 12:16 PM
標題: 謝謝finster的指導
謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
. M" g" V0 E  Q' n2 g. I( g7 H??? Error using ==> times( l; G' H6 g% w
Matrix dimensions must agree.% O' y8 X" o" }* s; R  H6 D7 w

1 |- _# g4 e# |' QError in ==> sndrtest at 26
% |# a3 Z# e. S+ \4 _0 V: B- pyb=kb.*x(ptst:ptfi);* s" Y1 h7 ^3 m
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。; K! g7 {- R2 h' ?2 l- F
∼感激不盡∼3 t6 W; T, g- P  q
ps.我的E-mail address我會以短消息傳給你,謝謝!
作者: liuyj610    時間: 2008-3-23 03:06 PM
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?2 g- D+ @- O  R$ w
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
作者: winnie22    時間: 2008-3-24 12:18 PM
請問一下
9 R- d# h6 {) h/ u. b如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
2 q, N, o3 \2 J5 D8 i4 s因為沒有MATLAB請問HPICE可以直接做嗎??
6 P2 C" W% v8 n ; H0 \* @. t0 p: u0 Q& g( Y; d( r5 `
請各位做過ADC的高手幫忙回覆..
作者: finster    時間: 2008-3-24 01:21 PM
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
, Z% F3 A" t/ ]. O- R+ |至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬
0 t* T1 E4 _: c但,在業界,個人的建議是,還是要跑HSPICE會比較保險
5 s$ D& B) N8 j至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
! s2 z" d: f+ W$ o% q. ^一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
: i$ k0 H3 j- i, r4 Z而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
作者: 盧志良    時間: 2008-4-23 10:59 PM
標題: Hspice轉進matlab
請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?
  F. k( |& N# M9 d4 @3 q                請各位了解的高手幫忙,謝謝.
作者: 緣緣    時間: 2008-4-24 04:16 PM
標題: 回復 32# 的帖子
請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
, Y& C7 P: G* q% c2 C還是要將hspice模擬出來的數據,然後使用matlab做分析?
作者: 盧志良    時間: 2008-4-28 11:34 AM
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
作者: 盧志良    時間: 2008-4-28 12:18 PM
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
0 Y* i5 q8 U# T請各位高手幫忙,謝謝.
作者: 緣緣    時間: 2008-4-28 05:19 PM
志良你好:
  @7 l. M9 ^& d6 X: e如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。
9 \9 l" V0 i" C2 L* Q關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
" I0 b& a7 K4 o/ r8 }
% n+ j# {( `, G% E9 m6 p' q) H[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]
作者: 盧志良    時間: 2008-4-29 12:53 PM
請問一下,第一個問題我看完附件後,第三個步驟還是不太懂,是要先把hspice的波形檔放到hspice toolbox裡面嗎?那在matlab裡要怎樣叫出波形檔呢?
作者: 緣緣    時間: 2008-4-29 02:03 PM
標題: 回復 37# 的帖子
1.首先你跑完hspice會產生一個*.tr0的檔案。
$ P6 W" U" x' W( x' a6 }2.然後開啟matlab軟體。4 e6 n+ e" U7 d* `" \# m7 U) x
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。  M- @! M2 g) _5 U
4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。" E" h* e! X: K6 ~  b" \- X
5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
作者: 盧志良    時間: 2008-4-29 04:17 PM
請問結構x是什麼意思呢?
; y/ E# f( ~9 f6 a. p7 n
# I& p* z* B0 T$ `' eerror in hs_allocate_sf: unexpected values in block1 header
9 L9 S6 `) P; @$ U' n4 z  x??? One or more output arguments not assigned during call to 'loadsig'.6 y( P1 b. F8 N. ^) E- G
這是怎樣的錯誤呢?
作者: 緣緣    時間: 2008-4-30 01:42 PM
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。3 E* T" F+ c& _$ F: R0 m4 {4 r
第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
作者: 盧志良    時間: 2008-4-30 03:10 PM
請問一下,輸入X=loadsig('xxx.tr0')這個指令是把hspice的*.tr0的檔案在matlab裡面叫出來嗎?; U' U+ ?9 o, a- n$ F
那如果我想把這個檔案叫到我在matlab模擬出來的波形裡面,是要怎麼弄呢?$ x2 v  L4 O2 j3 U1 R& B
還有就是進入到目錄 ~/matlab/toolbox/Hspice Toolbox,執行命令mex loadsig.c。這個是要怎麼執行阿?
作者: 盧志良    時間: 2008-5-1 02:01 PM
********************************************************; y; U6 r. v8 R8 i
               Hspice Toolbox for Matlab  G2 z+ G, S, ]; T" S6 K
written by Michael Perrott (http://www-mtl.mit.edu/~perrott)0 G6 H+ U) o, k$ y5 R3 Y+ C: U
   while at Silicon Laboratories (http://www.silabs.com)
0 V: G; N1 y, w1 G4 V9 X     Copyright (C) 1999 by Silicon Laboratories, Inc.
' t% M  O5 G( C# x( U1 l3 f, Q     This software is distributed under the terms of
; `" C6 c) a( N% T$ E       the GNU Public License (see the COPYING file9 e9 T3 U; m7 r/ ?4 V6 X
  for more details), and comes with no warranty or support. P2 a% p6 x1 o! N; g! z0 l8 x
*********************************************************
, Q- p# |/ p" W( ~. `9 ?2 Y. C0 B
" x- n$ i. ]1 N! H??? Error:  file can't be opened! z/ e6 B# n' ?# R( ~
  r: F3 v9 _/ g6 \- F$ j
Error in ==> C:\MATLAB6p5p1\toolbox\hspicetoolbox\loadsig.dll  R/ U0 i2 V1 O0 D( b, C( [! E9 K
縁缘大大請問你,這是怎樣的錯誤呢?怎麼解決?謝謝.
作者: 盧志良    時間: 2008-5-1 02:30 PM
縁缘大大請問你,我的hspice模擬出來沒有.tro檔耶,只有.sto檔而已.那這樣還可以在matlab裡面叫出波型嗎?
作者: jerwei    時間: 2008-5-1 05:43 PM
原帖由 盧志良 於 2008-5-1 02:30 PM 發表 / R* e* G) g/ J) V% c4 S3 e
縁缘大大請問你,我的hspice模擬出來沒有.tro檔耶,只有.sto檔而已.那這樣還可以在matlab裡面叫出波型嗎?

" a6 B) u0 v/ J/ }) R7 l- {5 P3 g, E% q' E3 P4 l% ?2 G
tr0是spice的你執行transient simulation後的記錄檔8 B, e8 t4 i3 d0 l5 f
若是你沒有tr0則你可能沒辦法將transient的結果滙入到matlab2 x6 N; c$ N: t6 \& F$ v
有錯請指正,thx
作者: 緣緣    時間: 2008-5-2 05:57 PM
正如jerwei所說,需要有*.tr0檔案才可由matlab叫出波形,你沒有*.tr0檔案是因為你沒有在hspice 執行transient simulation(暫態分析),一般指令的寫法為:
' x$ l8 [8 V9 P1 ?.TRAN  0.1E-12(取點間隔)   0.81E-3(結束時間)  START= 0E-6(開始時間)" g# j* ?4 t3 e1 A7 Y6 `2 o3 h: c
你可以看一些hspice指令的書來瞭解涵意。只要你有下這個指令,在輸出檔就會有*.tr0的檔案。
作者: jwtsai    時間: 2008-5-13 09:53 PM
幫忙補充一下,, [" M8 L% x. u! I% V: m
要使用這個toolbox時,在hspice的.option中不能使用post=2.+ k: d6 u, M$ W: z
可以用
. n5 i  p; U3 I4 f9 {.option post$ y8 |$ ]  ?5 p' H# d
或是$ F  Q& l" \; t) Q
.option post=1# C/ n9 y3 Z& y' j7 C/ M( m
但絶不能用
& w4 v" c) t) m.option post=2
作者: simon_ncku    時間: 2008-5-19 10:43 AM
請問或是版主副或是其他人
. L* ~- ]5 ~% Q- N% a1 H$ R我將 緣緣的MATLAB程式 放進去跑有是出現ERROR耶
3 h9 ]. |) k" H( W0 _! i+ @6 z它出現3 k1 h# H/ @  F
??? Error using ==> run
2 R  z2 J8 F$ E9 P. R8 hError using ==> times
6 l% C! K8 t0 F6 N. U- D& wMatrix dimensions must agree.
9 m3 b& X7 Y: e4 o% [: h3 T附件是CO下來的: e" C: f& S/ R( t9 U: w, }
請各位先進指教& E9 f/ }4 f; y. F7 U3 y& o( n
THANKS.
作者: simon_ncku    時間: 2008-5-19 07:41 PM
標題: 回復 45# 的帖子
緣緣大大是否可跟妳要MATLAB  分析FFT等一些動態參數的程式. f& N4 U8 s$ E8 G1 q/ L: D
謝謝
作者: 阿茶先生    時間: 2008-8-9 10:07 PM
@口@ 不好意思,小弟到MATLAB的網頁中找不到Hspice Toolbox載點哩...
! e+ g# p. O* k9 @) C) @0 K+ e- \6 N5 b5 g! S& J9 P6 b
不知道有哪位好心人士可以提供載點呢??. V9 v9 e0 h4 X( G2 |" O6 j

* u, w: @" J% g- r4 z( I7 p3 C感謝不盡喔!
作者: yoyo20701    時間: 2008-10-3 02:10 PM
多謝大大的解答~~小弟大概瞭解一點~~~謝謝你喔~~~大大~~~~~
作者: yoyo20701    時間: 2008-10-3 02:10 PM
多謝大大的解答~~小弟大概瞭解一點~~~謝謝你喔~~~大大~~~~~
作者: pandera    時間: 2009-3-18 09:06 PM
標題: 謝謝大家回覆
剛剛試了第一個方法 覺得不是很方便+ @# k2 I- r7 C8 j  h" F$ W
後面的辦法用起比較ok
/ p! u6 N4 ?& u- o! p. g這樣我的模擬結果就比較好看了 謝謝
作者: e2000    時間: 2009-4-8 01:46 AM
怎麼感覺很繁雜的樣子,看來這方法還需要多點解釋,我也很困擾到底要怎樣利用hspice的值放進matlab裡面
作者: caroff    時間: 2009-5-13 06:02 PM
不好意思,有個問題想請教各位前輩。) [6 m0 [) m4 u
如果由hspice使用.fft得到一個spectrum,
: ~; M  u+ t; A0 p/ w/ x那我該從何得到這個spectrum的data呢?!) X, n; H3 d2 A6 Y9 w# p
因為我要利用這spectrum去計算SNR,不知該如何用?謝謝!!
作者: s13571357    時間: 2009-5-14 09:47 AM
可以問一下嗎??
; J9 M2 u  D2 R$ \5 _當我現在有一時間t=0:0.01:60(表示時間是0~60  而每0.01分析一次)
1 W" @% V; @0 D0 B4 N; g- x另外每一時間對應到相對的電壓值% l- y' M0 S7 Q0 s" x
但是電壓值和時間不能寫成一方程式
( T/ S) u: U2 F- T! W; a' x我現在想要用MATLAB做FFT
# H* z& w, W* H$ ^把時間軸轉成頻率, u$ p4 M2 H  Z! L
去看他的輸出直
+ x4 E3 n6 m8 [% B, y3 J* ]) Z我該如何使用MATLAB呢??
% d1 j/ z' [8 NMATLAB新手
作者: sky987    時間: 2009-5-19 01:40 PM
他們跑 32k 16k點 應該是在量測的數據7 n& S  X- w" a1 i5 K

7 y' K1 A4 d, y  G模擬的時候不用跑那麼多點   這樣太花時間了
作者: kuohsi    時間: 2009-5-21 05:45 PM
請問若用.meas指令2 v/ Z( |, R. F' J! t% j! M
將VOUT取65536點的指令要如何寫?
作者: iamsailing    時間: 2009-5-26 09:18 AM
緣緣網友以及版主:
* ], b5 @* N' I8 g3 J  I6 b  _- a4 J我的問題如下:
( L3 P, K, y; ^我用HSPICE 仿真了一個2-bit flash ADC8 V1 S6 ~" T! \1 c9 B% ]( a
利用spice explorer中的理想D/A工具,
' n3 I# I+ M3 O, m( }! V8 v可將2-bit flash ADC的輸出數字信號,通過該D/A重構爲模擬信號; I+ U3 y2 d  L# _- ^6 d3 X; K' |
並導出數據,如附件ADC_DAC_out.txt所示
7 C  k  |: B1 `( P) t該文件中第一列爲時間信號(X軸),第二列爲重構後模擬信號的幅度9 J. ?1 p5 _$ J  ], z; u
在matlab中如何用load語句將這樣一個兩維的數據導入
, f; O! `6 ^) ^9 l" `  u- Q* r我現在需要用matlab對該信號進行FFT處理,並計算THD,SNR,SNDR( T' x7 _% w! Y6 }9 Y! m' h" j
我的fin=56640625Hz,fs=2e+9Hz,打算做1024個點的FFT# o3 W9 i1 l6 e
ADC_DAC_out.txt中數據的時間是從11ns----523ns/ G, q/ p/ l* f, ]1 G' ^; s
因爲11ns+1/fs=523ns
! m! n9 q1 H, B( _附件中fft_yuanyuan.m文件是我將網站上你的matlab程序複制下來了6 x- h. `, b; n$ ^8 P
但�面有些部分我不明白,我用“?”標出了
3 ^; c: T: K! Z$ O& d! g# K5 [% }+ n- F0 s( c" `
謝謝你。
; Z" c9 }/ c. l; n0 z& p! F; |8 Q* Y1 s3 ~( Q, _; t: D
[ 本帖最後由 iamsailing 於 2009-5-26 09:24 AM 編輯 ]
作者: kuohsi    時間: 2009-6-1 04:02 PM
iamsailing:2 x$ s! `& Q& J4 k% ~+ a% n& {& J( c
你取點應該是11ns+1024*(1/fs)=11ns+1024 / 2G=0.523us
  Y, e  F3 b& O8 W- A3 q; R所以你HSPICE要下.tran 50n 0.523us
% `1 X4 P& f2 N* O5 \- H' O% R& ].tran 的step要是1/fs才對
作者: 異星人    時間: 2009-6-4 10:16 PM
我有個問題啊' A. Z+ v: v- W* J" ^! T2 ?& @; c( x

7 j: K4 H, S+ K+ U是論壇上的表情問題
4 {) r" H9 f2 O+ |: ~& ~% ~( [# M3 f  Z
  這些程式碼都穿插的表情符號% p/ S3 R3 ]* z" N: K) e
' a1 f4 u" c& _
無法解讀啊
作者: 異星人    時間: 2009-6-4 10:16 PM
我有個問題啊, V( W4 _- z) \* o; C/ _' g7 J0 z
3 s5 s. [! }7 L
是論壇上的表情問題
* X9 v. `; _$ {7 f0 Q0 k
4 b7 t* \/ }) a   這些程式碼都穿插的表情符號& I7 G  l0 U9 _+ {

' }4 q7 t. p( `1 O7 Y1 s0 e* x' `4 ?無法解讀啊
作者: kimwin107    時間: 2009-7-27 08:44 PM
感恩..請多多指導..即所謂無分享就無成長..為又努力不懈地汲取他人經驗,才能更精進.!
作者: pkf690801    時間: 2010-3-18 04:42 AM
我需要這個頁面內的付加檔...為什麼都不能下載呢?
作者: mayluli1981    時間: 2010-4-13 05:22 PM
版主 請問依下能給下載hspice toolbox的網址?偶在網路都找無% T) {; @6 X& Q9 d
我是新手  我要把Hspice 的AC及 TRAN 圖用matlab顯示出來而已
( \9 Q% h$ j" h; O! U沒有hspice toolbox好像不行ㄟ* v, ^) p  ?# Z( l5 A- z' d
感謝
作者: s13571357    時間: 2010-4-21 02:15 PM
請問一下
; a1 i5 \( A7 Z7 {/ Rhspice toolbox主要是用來和maltlab溝通嗎
/ T( q2 A0 w0 J' y+ m  s$ K哪裡可以找到相關的資料呢
作者: lqlcug    時間: 2010-4-22 09:28 AM
楼上很多牛人,这里斗胆谈谈我的处理方式。! Q7 ]0 N1 s7 N$ S0 m
1.将Hspice的仿真结果正确的输出,用到了一个interp=1的设置,它可以选择你想要的数据点输出;
" e0 o1 D( S1 |7 k) P# d# W2.采用Hspicetoolbox将hspice仿真结果导入到Matlab,然后处理的方式就非常的自由了,比较典型的处理方法可以参考MAXIM公司的设计笔记,楼上已经有人贴出,还可以采用Matlab将数据先处理到workplace区域,然后采用simulink,借助SDtoolbox来计算SNR。
作者: rokin    時間: 2010-4-23 02:35 PM
首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下, ...) s) }$ k5 R; w7 g4 Q$ s  }
緣緣 發表於 2007-11-13 03:58 PM
. z2 G1 i# a! z

8 L1 L% a- B5 Y9 s, q* I) E' x$ Z" L6 ]7 S" q
  請教版主及緣緣; J: e/ n& V6 y0 Q; O/ @4 f, d
對於給matlab計算FFT之前,
% z3 N" y( \& D; z2 |( k" `.meas 指令對輸出要取均方根值嗎?+ V3 }9 W: z. E& _* d% \1 l* ~
或者直接取值就可以了?
作者: juro0827    時間: 2010-9-27 01:37 PM
WOW  X% r9 z* |7 L/ }9 T3 h
正在找此相關資料!!
8 _9 F2 }0 N0 GLUCKY!
作者: wwm101    時間: 2011-3-18 10:14 AM
finster 版主相当强大啊,受教了,谢谢
作者: killer7788    時間: 2011-10-4 04:40 PM
回復 58# iamsailing
: ]+ P2 G6 l5 {' ?/ w
: c0 s" [6 d; ~+ |/ F& N9 _% J$ i' Y0 g$ t
    可以請問一下, SPICE EXPLORER 中的 D to A converter 是如何使用, 因為我所做的ADC 的輸出是一個序列或並列波形輸出, 案OK後好像沒什麼反應, 也不會像你的TXT檔一樣
作者: david_chen    時間: 2011-10-6 08:40 AM
來這裡看到很多高手精闢的講解$ ]2 n4 T* L8 I4 y6 s# c. {* S6 ?
受益良多  謝謝囉
作者: chivv    時間: 2012-6-21 12:45 PM
感謝版主回覆 6 a) v' O9 A/ ]# i- v$ V6 m1 C4 H
正在找這方面相關的訊息
" @4 u# S, v) e! C7 L( J. a讚!
作者: poiuzxcverty    時間: 2013-3-2 03:34 PM
謝謝各位大大分享,小弟受用了
作者: jghn    時間: 2013-3-28 02:50 AM
謝謝大大的分享!  
6 w  v4 A' Z9 D( [( V
: b9 T3 W$ T' @0 n- K) ^% ^7 e真是受用無窮




歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/) Powered by Discuz! X3.2