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)?包含方法及指令,愈詳細愈好。拜託有高手能相告。
; R6 S' E$ V5 J* G& X6 F5 x2 O謝謝!
作者: monkeybad    時間: 2007-10-5 06:42 PM
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用
5 y" {; V- `9 E$ m# x. _就是直接用.print指令把你要量的電壓印出來
) {6 T3 K% Q5 F5 b7 }9 y% N然後再用手動把印出來的資料copy起來8 Z& o% z# P( \7 p+ B& V6 L
然後貼在Matlab程式上面 然後就可以做FFT了
作者: 緣緣    時間: 2007-10-5 09:39 PM
標題: 謝謝版主回復
謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。
7 A# ?8 {% E5 {5 s
, `! Q  y+ F" k$ g1 V6 H謝謝!
作者: sjhor    時間: 2007-10-8 09:40 AM
Matlab 有 fft 的  program,
2 u# r5 p6 L0 d, L5 [+ {所以  只要將FFT後的資料  做一些轉換就可以唷!!" o% H* d5 q" b
將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"
2 S4 ~& S# ^( X  ]就可以換算  SNDR 了!!) d% n4 ~- _  _* B
SNDR is Signal to (Noise + THD) ratio?
作者: 緣緣    時間: 2007-10-11 05:44 PM
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
作者: finster    時間: 2007-10-13 08:20 AM
我以前作DAC的MATLAB部份程式
. G6 W% y9 x3 T, j, [5 v我想,應該可以給你一些參考吧
; j) h' \9 A- M7 z% A2 w1 W+ R1 O/ P% S2 n! D8 m( p. \2 s
% --------------Using minimum 4-term Blackman-harris Windows -------------  W( S/ |: b4 y! G& Y! X: ^# y
nb=1:1ts;
2 ^, }, Y3 M9 _- m3 y+ I  dkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
: S; @+ \4 H0 m- ?' O, N: U8 _win_gain=sum(kb)/pts;, u5 Z* R) d3 W2 T7 V' @
kb=kb/win_gain;0 O/ j: g" A! b0 [% z

( M" o& b0 ~; U6 Z; S4 X/ }% --------------- Calculated fft --------------------------/ d% }9 b& [  p$ U$ y' [4 w2 H
yb=kb.*x(ptsttfi);7 m. Z& i3 l' d4 ?5 j: P
yk=fft(yb);
% }, t; b4 J9 M* n5 i+ v! V+ u+ x& Wfft_no=length(yk);
3 O3 P4 g" w" q: of=fs*(0:fft_no-1)/fft_no;
1 h% ~# J, E  r) w4 _Pyy=yk.*conj(yk)/((fft_no/2)^2);7 e4 n, I2 i* o4 i9 e2 W

' i( f5 {- S$ e, l8 f9 r  R! C% ---------- Calculate THD ----------------------------; o. I0 C7 P* b5 R7 `+ u
j=1;( \1 b0 }! V8 W& a
for i=1:1fft_no/2)# @) N) w) B& M2 Q  A
    if (f(i) == (fi*j))1 |/ l1 @( r  c+ y
        HD(j)=Pyy(i);     %% find all harmonic distortion components0 T6 x; O9 G1 p2 y0 C2 H
        j=j+1;
$ T! N1 L0 l, Q) U4 G( e% C7 L    end2 T7 w( ^* v1 w* H3 D5 d
end
6 s/ Q0 q7 V$ ^' E1 KP_hd=sum(HD(2:9));+ o& C/ W" U2 e. I, y, }/ [5 \2 M) |
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
1 b) a/ l( Q# l( C, C* l; L7 e' ?5 efprintf('THD = %g dB\n',THD);/ X2 E& A1 v6 W2 x
# }+ _. R# d" O) _1 L- k5 X
% ---------- Calculate SNR ----------------------------
1 L8 X4 }1 G" zfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));6 y! h3 H/ L1 Y* J8 t
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);: m( F3 `+ J, z6 l7 \# }: Q% J, M
span=max(round(fft_no/200),5);" e. q* ^4 o1 U+ v
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));1 V4 V, }; L2 y9 Y" E

4 Y( _6 S% m( DP_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
2 `# R; D6 l* j# c' _' WSNR1=10*log10(P_sig/P_noise1);
9 m% F" J$ K0 H( [) l( Wfprintf('SNR = %g dB\n',SNR1);
作者: 緣緣    時間: 2007-10-15 07:34 PM
標題: 謝謝副版主回復
謝謝finster副版主回復,想再請問一下:
- ^" L. W/ m8 a請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
; L5 G1 F3 X6 n& A; A$ _) V, U
9 i& H9 k8 B! F1 a. r. D' @7 j. Y8 H另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
* K, G( N6 U/ f+ h0 \) m3 }"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
% l5 M3 M* B% @2 @內容為:4 y' n3 }% x2 o/ y3 {
压缩文件共有三个文件:两个m文件和一个txt文件
4 Z9 g# v" W0 Q4 l7 C. Z, {; H8 i8 {spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
7 t0 Z, h% z+ P! i希望大家喜欢!! 5 U2 ^, j; _# {
附件為:FFT.rar
* o5 U9 b6 }0 ]" a% ~0 i5 j: W" {: u" c' M& \7 G% Z. Y
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:9 S& Z7 b" ?: @2 F4 J; y0 L

: J* B( i1 T# r1 M' v" q- V" Y??? Undefined command/function 'AD10'.
3 n. X# o( t) o& ?) d' U+ m+ I. R
Error in ==> spectra2 at 434 D5 m/ x# \% z. @9 I$ U$ C
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);2 Q+ B9 L& ^! Q3 \6 @$ {# [

# W4 o% T% U% [  ~/ A由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!) V* c- h# }8 x) a* v/ N

2 C  j; t& U/ G# t) U+ a∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? 4 j( Q% @; |( z1 z9 o# U- B7 w
; j- M# p4 k+ J! n1 R
[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
作者: 緣緣    時間: 2007-10-15 08:54 PM
標題: 謝謝副版主回復
謝謝finster副版主回復,想再請問一下:
4 w  t- y5 Z5 p  N3 o. t& X' v請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。 $ A" r4 N" k# m9 }8 ]2 s# y
另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
1 N# x$ o8 |" s5 w1 }( z"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
8 Y* l  L1 `6 q% ]$ ?/ q內容為:7 s  X: Z5 a/ ^) s1 [6 n8 z6 I
压缩文件共有三个文件:两个m文件和一个txt文件
1 I6 m1 u  |  ?0 J; f' aspectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
# B) L- X; y, q8 A+ k3 x% N希望大家喜欢!!
. a7 A8 ~5 Y3 w附件為:FFT.rar1 C# I# F* r, A4 @+ ?1 S/ u
# ^( K4 ^) m* r+ T& {1 t
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:
+ W& R3 e2 w, B/ u. [% w+ M3 `  A2 i( q) N
??? Undefined command/function 'AD10'.
) T+ Y1 e! C5 S, A4 n4 Z4 |" X4 W/ K4 }% w0 @5 }% z; L
Error in ==> spectra2 at 430 h# u# a8 H0 m  n2 G
d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
& L  w( E2 Q5 z: s
2 [6 j* W( b, l/ K" v$ E由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
作者: 緣緣    時間: 2007-10-15 10:18 PM
標題: 增加附件
∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????
4 a/ S  `1 ~- N) Q. L1 f) {3 g* v, F附上上帖的附件
作者: finster    時間: 2007-10-15 10:31 PM
在回答你的問題前我先稍微解說一下我的MATLAB程式
' r* t8 d$ |9 f$ x- n2 W要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值8 g3 [& T( }- I) J2 h
故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算- s/ i) }4 o9 l8 C5 g* J3 z5 i7 ~
( j7 H1 R1 \* g9 H+ @3 g- u: a+ e# l
在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧
0 Y- X1 H" h8 D/ ~1 M
% ?( B8 m. i* E' D+ B, ]7 |$ o我看不到你的附件檔,故而實在無法作出評論- }" R& n2 }) N
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
" A# U  c+ \# l, @從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
作者: 緣緣    時間: 2007-10-16 03:54 PM
由於之前一直出現Internet Explorer無法連線訊息~???????" e# E+ ^' _$ c' O7 a
所以重新上傳附件
作者: 緣緣    時間: 2007-10-16 05:02 PM
標題: 有關hspice .measure指令寫法
再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,! W/ Y, E) x- G4 y& [. {5 D! `
指令的寫法是否為:( [+ Y& t! t( @0 Z7 l

, k3 d$ [6 Y/ M! ?$ N/ z.MEAS TRAN DIGOUT
- x( C* w4 r. `1 i' K2 R, C% e/ {+TRIG  V (Dout)  VAL=0        RISE=26 W* _  R& T& b2 k/ C$ T1 T
+TARG V (Dout)  VAL=3.2m  RISE=2, J8 K: D3 A2 z' Q( m" d* G% e
6 M8 A8 x2 c0 V4 [' q
∼還請指教,謝謝∼
8 G" C/ P1 X/ O
. m0 p( J: ~$ i$ x2 K' X+ d" P另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:* _* @! ?: U7 Z( P% I( N6 C) A- v

/ x/ B( M7 p( Y, k0 S. P" qdigout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
( K* E' b8 s( i9 n" J5 \  }* J
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?5 H! Q9 k; u- e! W/ S2 d
& v3 I; q" d! |6 R0 J
[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
作者: finster    時間: 2007-10-16 11:08 PM
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔4 W: N/ i8 C, G' A8 A7 w6 W# p, o
故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料
1 e: R" y# N) _% i" s: N所以,請再檢查一下你的HSPICE檔案吧
2 g  u/ z- S3 i+ \& n( _3 q6 H* w) _- `- F3 ]. d4 W3 z+ Q% k
再來,你的.measure指令用法沒有問題
. Y; }3 n9 {0 x2 s/ k* t但,你的取樣點及時間似乎不對
# z4 a: [* a( S6 Y- q你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
# q0 I/ ?2 k2 |, r, T.MEAS TRAN DIGOUT- i  k& e9 b0 D1 d
+TRIG  V (Dout)  VAL=0        RISE=2
8 `6 Y2 d2 R0 I4 `$ A+ T+TARG V (Dout)  VAL=3.2m      RISE=2( N8 t+ a6 @( {5 y
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話$ R1 b- u! R0 ^- {% n
那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock- ^& Z/ y8 V# y
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2: l& H& ^. G9 h# K
再者,如果是用.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程式。
0 e9 N1 @3 a& P9 f% [+ @( K) C3 ]) X, E2 F+ T" z, z- o
∼感激不盡∼
作者: 緣緣    時間: 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# j1 ]5 S7 L3 _* t5 J8 a
3 }) X8 A, P4 X" H8 S& m, V6 o: j8 g3 T+ V& _
.MEAS TRAN DIGOUT
% m+ r2 E% o  D0 X+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f6 q# q6 v6 h6 u
+TARG V (Dout)  VAL=0.976E-7               RISE=1& f* e% v6 N9 l& u( y3 ^
. Y! {1 [: ^+ Q
∼還請指教∼1 S$ d, _! B/ p- A: u% e5 I4 K
程式重試的結果,*.mt0檔案只出現:+ z3 g2 j% a6 z0 {! U
digout           temper           alter#            + t* E5 o8 \" O: U. ~: @0 a
1.890e-12        25.0000           1.0000         ' k7 ^; p  }; P
不知是否還需修改?" z$ w* k4 m0 ^) {+ V$ p- ~; F8 [
3 x/ A9 G9 _: S# n* }  M$ A
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
作者: finster    時間: 2007-10-19 01:58 AM
先回答第一個問題' C2 L5 Q, |6 P7 j5 @, f
你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
2 [9 i! N1 c% T9 i* ^* @所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
7 D: z7 e: q  f
0 ^1 q8 T4 p& p$ `- [6 G- ^* i4 ?再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
0 L3 f9 S7 {, c# j* H7 F; ~但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock# I) W" ]$ o' R  `3 u8 D, a! m
一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)  B8 y9 w9 x/ ]
再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
' [" z) l4 }! ~2 r4 r! H+ }舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為
# |, }$ `+ b) h& V3 R: N& R. g.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us  u" B: `2 s- I/ ]' D/ ?; n
.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us* ^* w& N$ h7 O( y: c
.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us2 Y/ \4 p9 _' a" N
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us* ^) H4 a' V8 O4 e* ?, C
9 ?6 t/ ]( ]3 f  w
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us
+ \; S& b, o/ c$ A# e; O.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us. ^% ]) _& K7 t: e
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
3 P0 n6 q9 p! r* R! o8 r9 _1 j0 `.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
0 S6 M9 G: M3 S7 W6 G" F
- M  Y' F! {9 j我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code
  \- a1 y( R2 v. ^3 i% g我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法5 U* T+ ]$ Y6 O! Y) L) c

* [  X9 k" v2 K3 z; b1 `最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
+ E; w1 p6 y1 S5 o3 x9 I1 B1 L可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
作者: 緣緣    時間: 2007-11-8 03:00 PM
標題: 謝謝finster副版主的詳細解說
再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。
/ M( s9 x$ v  {7 _/ r: U3 `$ T! V- u我大概講一下我的架構:
* x1 H# B* l( n1 i" ?3 c: y  j& O我電路是使用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的指令寫出,指令如下:
, @4 A# H6 ]( y$ K8 i0 AFor Fs=10.24MHz:
+ H" c9 t) l" q" V; U  K+ zV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-7
  ], m2 }5 K9 ^6 u- {% w( `- tV1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7
8 @9 y% a0 q; z+ aFor Fs=5.12MHz ' {! x! U& @( u+ A. }
V0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7! E- [8 e$ ~5 p+ d
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
& [- ]6 X: h2 j+ T另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
- V% e2 G9 m! b( K+ V* t3 q8 i如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
9 b1 @& B7 V7 \2 O. U.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us( p( A4 [  ?: s, o0 A  k
.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
" L/ z, p8 B- {4 t8 }- w4 U- \然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?5 V# N2 ^3 v4 ?" R) z; L
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!8 K& D2 M5 O- u- _5 |/ a; q
( \1 ^; Y# @/ a6 Z# V
[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
作者: finster    時間: 2007-11-12 02:06 AM
看了一下你的說明,覺得有些奇怪的地方
# o; J5 V5 `4 l: Q0 ~. q5 |首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來# ]2 V( ^, _0 s7 I) P, W1 f" w
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?6 ^. B3 ^) O8 I5 r
' i! L0 n+ E% {9 W0 x- ?; O
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
! u9 u3 y6 N6 J' S, g4 `
) v$ q8 s  h+ H: N  d# CFFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要0 Q% ]- C: P8 s# c; U0 c; l' s
. s. j0 [$ D. q1 u: A1 P9 C
clear all
+ [  j& ]( Q: T! ]; N  f& s1 Rfid=fopen('dual_measure_rms.txt','w')7 o6 P& o2 ~: \+ [' f3 W# N; x
for M=1:1:1024
2 N0 A  q4 E7 w9 v& Y       T=M-1;# w2 {0 E9 n. I  u7 n$ T" l; T
       from=(50*T)+45; %DUAL DAC measure time  @/ d  L9 g  E0 o$ b3 d$ E0 m* n5 H
       to=50+(50*T);" \6 F8 }8 `. `- o# d% x
       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);
9 V) s% X$ ]3 ^0 R8 uend. s) H5 B. C2 ^
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用% Z! O3 P) s/ u! o6 q
這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
作者: monkeybad    時間: 2007-11-12 12:02 PM
感謝Finster提供一個非常實用的小技巧
% j$ s% b/ A5 a: S9 x這樣以後模擬FFT就非常方便了* Q, |- P, H6 C7 x) y
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間# H4 j2 I( K* l2 A+ v# {
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧; ~; ^$ d; ~7 V  j, G; F! o
只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
作者: 緣緣    時間: 2007-11-13 03:58 PM
標題: 再次感謝Finster的詳細解說
首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
2 E8 y; i+ }2 t% |% w! a我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:' W4 ]# ]7 _6 p, \& c' S+ P2 `9 F
因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。
$ w- J* \1 T$ W- J0 t+ N且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
( Q5 C4 q6 R& b6 y另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
: r% G% @9 M0 E3 f( e4 N; S  h; T依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
" V7 s0 l- }2 H7 `$ ]4 }2 v" Fclear all
. J0 \3 H8 T0 J" w2 A' N& pfid=fopen('sdm_out.txt','w')) _- Q/ I" H! R3 a
for M=1:1:1024
: g) V6 T! H" |* b    T=M-1;
2 U* b' v8 t' m4 L2 ?    AT=(0.1952*T)+1.026; %SDM measure time( G& k( L5 p5 H: _
    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);" @) ]# q; x" G2 }1 b
end
+ [" J/ c' s$ z: _( g試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。% ]' O, G9 s4 ~! K8 o
想再請問的是:( y4 w0 ]4 I( j$ B$ k- P3 r
當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:# v) O8 a. ^* U( P' T, Z0 I
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
, w# I+ e. E( R' Q! g' n/ c/ e6 l然後就可算出SNDR及SNR以及畫出圖形了嗎?6 K. y( i1 C5 z
請指教∼
作者: finster    時間: 2007-11-14 06:03 AM
不好意思,昨天一時眼花沒看清楚單位,把Fin的KHz看成MHz,sorry....+ L9 H( {: y* u; w8 Y2 F, [
所以才會說你的取樣頻率和輸入信號頻率非常地接近,這是我這方面的缺失) s. O9 F" {( X, y& W8 W

) F2 _: }. ?$ O( s# ~: o- q6 `至於FFT取樣點的問題,我之前是作88MHz,10-bit dual channel DAC,我之前有比較過FFT取樣2048點和4096點,甚至是8192點的差別,結果誠如我前面所言,MATLAB跑出來的結果只有小數點後面3位-5位之後才有差異,前面的數值都是一樣的,所以我才會說一般取到1024點或者2048點就已經非常足夠了
$ {. s9 ^2 Q  k1 |2 d: t而且,用SPICE跑模擬從2048點到4096點的時間非常地久,所增加的時間可能不只一倍,而是數倍,可是從MATLAB所計算出來的卻是差異不大,故而,如果paper提供到這麼大的取樣點,那就跑吧,只不過,時間會非常地久,印象中,我之前跑2048點的SPICE模擬DAC大概需要5-7天,而取樣到4096點大概就增加到接近三週的時間,這,純是個人以前的小小經驗,如果是ADC的話,那會更久
, N8 _9 O4 E% e2 o/ c! y7 W" T/ [1 }% h& E
至於另外個問題,我的回答是,對的" j0 b% F) R; }; Y
但,要先把一些參數改成你們自己的規格才行
作者: monkeybad    時間: 2007-11-14 05:04 PM
我補充一下
2 S1 q5 A5 s7 b/ h0 ]. x& q緣緣網友應該是在作over-sampling的ADC 跟Finster作的架構不太一樣6 p1 v. x$ A5 p+ Y$ g: h
video DAC or ADC 跟Finster講的一樣 取樣1024以上其實模擬結果就差不多了0 o. R4 x- G$ x3 u' x
至少我模擬起來也是這樣
8 X4 X8 a/ r0 G" |& f而over-sampling的架構 顧名思義 就是以超取樣來提高SNR 藉以換取高解析度的ADC
  z, J2 S( L/ \7 V所以我想取樣點很多應該是正常的吧
作者: 緣緣    時間: 2007-11-26 04:38 PM
標題: 非常謝謝finster副版主的詳細解說與monkeybad版主的指導
再次謝謝finster副版主的詳細解說與monkeybad版主的指導。
- o4 h4 g! A& G* R; k. F1 o說來好笑,我本身出了一個小烏龍,我從11/13回帖後,就一直期待finster副版主的回復,所以我幾乎每天都上論壇來看看有沒有新消息,可是我連續等了好幾天,直到今日(11/26),我才突然發現finster副版主早於我回帖的隔天11/14回我消息,以至於我沒有第一時間答謝finster副版主的指導,真有點不好意思。
! R. T3 G1 W  R5 R- x' n# k4 N- T說來慚愧,我沒有注意到我的帖子已經有第2頁,直到今天才發現,真有點啼笑皆非。 8 r  e& s3 ]' s
在此,根據finster的指導,我會再試試,有什麼新問題,再向你請教。" S/ G: p3 Y) ?% v/ B" y
此外,回答monkeybad版主的問題:我的確作的是over-sampling的ADC,所以, 才需要取樣到32k points那麼多吧,畢竟我也希望取點取少一點作計算,可是又怕算出來不準確,我想,我應該會比較一下1024點與32K點的差異,如果差異不大,或許我就可以將點數減少來計算。   
5 L/ R" d# m) L' x2 I∼謝謝!∼
作者: 緣緣    時間: 2007-11-28 09:24 PM
標題: 請問finster副版主有關程式問題
請問finster副版主:" T$ G4 N2 \( e; F7 N' W/ s, D: X
我依照你提供的程式,修改成我的規格後,程式修改如下:) m- R4 G0 Z" P. ]. B3 A
% --------------The number of FFT -------------
) a9 m8 f9 z* @4 `7 p8 |fin=5;% *KHz; h- J0 a4 v7 j: |; C6 ]
fs=5120; % *KHz+ g9 ^4 R7 c" L+ G
cycle=1; % cycle = 2^N ; N = 0~5
# S# q2 v/ n2 C6 P( h5 rM=round(cycle*fs/fin);
) f8 T& d" I( Y* v% --------------Load the binary code -------------( j# B$ V/ @0 f' R" u; {- ?
load sdm_out.txt -ascii( {! `0 K. m0 q6 T( f
start = 1;/ X" g2 e2 z7 n
step  = 1;
" j. ]& c1 i# g8 N%ADC
- d' A! [/ y. U8 l: L, gx=sdm_out(start:step:M);
* l, w  d2 r1 x% Z- G
% --------------Using minimum 4-term Blackman-harris Windows -------------+ B. w0 J( B, ]3 D
ptst = 1;
7 E7 m6 ~" d/ G2 M+ F( Yptfi = M;* a0 N- M' M! G; e% ]8 N) ?4 b! w
pts = M;' ^' P1 C5 F8 ^4 ]% c
nb=1:1ts;
9 E, V) k4 ]. |' R% R) pkb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
( Y: |+ l% K! Xwin_gain=sum(kb)/pts;7 S% I3 p! e# R
kb=kb/win_gain;. Z- ]8 n( P: V/ m1 p+ _7 |; q
% --------------- Calculated fft --------------------------
- Q! Y& [3 \+ U6 t' q+ \$ ]yb=kb.*x(ptsttfi);
0 m& K" `6 L, t0 h2 U* G- L+ L
yk=fft(yb);
% X" h  b  R* T- q. Q8 g( ?2 @fft_no=length(yk);# G8 p) ~1 w9 Q/ ^& i7 Q- m
f=fs*(0:fft_no-1)/fft_no;
; T2 z+ t, B  `6 T/ `6 APyy=yk.*conj(yk)/((fft_no/2)^2);
0 k/ F$ n; U/ V% ---------- Calculate THD ----------------------------; ]5 v% D( t6 b
j=1;
9 g- O6 T" b- _  @+ @( B) F, N/ ifor i=1:1fft_no/2)5 R3 V* f: v7 y' J6 c& n
    if (f(i) == (fi*j))  3 P% G! w5 J) @" D
        HD(j)=Pyy(i);     %% find all harmonic distortion components
! G- I8 t' _9 B+ }1 U9 k; r. e        j=j+1;
% i* }9 T# P% T    end
$ D9 e  z9 k) V, \end
. S& t* B; I. j  B( v! HP_hd=sum(HD(2:9));
6 j# t. K/ p1 z' F  QTHD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal;4 T/ v: D; u% R  ^/ b0 J
fprintf('THD = %g dB\n',THD);! j3 N8 M4 v9 k: ]
% ---------- Calculate SNR ----------------------------
0 K5 t" b( m9 w8 cfundamen_dB=max(10*log10(Pyy(1:fft_no/2)));& a# G& L3 D% U7 C5 w
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);  i' O0 i7 U4 H: V; z4 O
span=max(round(fft_no/200),5);
4 l& c& {+ \+ X% u$ g' w, @- OP_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));$ l( |" V  z" L! a. R( L
P_noise=sum(Pyy(1:fft_no/2))-P_sig-P_hd;
+ A$ F& G1 m2 M; A+ VP_noise_hd=sum(Pyy(1:fft_no/2))-P_sig;9 g! y7 E, L! M
SNR=10*log10(P_sig/P_noise);
6 R7 h$ {1 F/ p% _6 ^SNDR=10*log10(P_sig/P_noise_hd);- T, |4 `. {( t/ g
fprintf('SNR = %g dB\n',SNR);7 K/ _: g, H, y
fprintf('SNDR = %g dB\n',SNDR);
& S( l: z( m$ A, e! [3 ` 1 [0 O5 h0 G. l* R! b
藍色字體部分為我新增的程式,當我run到紅色字體部分,matlab顯示以下訊息:
. i! c# m, Q% S4 V5 K; L( h??? Error using ==> times- A* ^$ T2 ]1 |, {# l. Y: T, P; W- K
Matrix dimensions must agree.
2 ~4 |& U; i6 F4 ~/ a
1 B9 T. B, h! `  E& B
Error in ==> sndrtest at 21* W: M' c3 [* m( }, Y5 ?* w0 {
yb=kb.*x(ptsttfi);

; ?3 b8 @( G7 e+ h0 s4 L9 R: d; v7 ~- h$ T7 d9 r& }
因x函數是我自行定義的,可否幫我看看要如何修改?  m' K; Z: j, I- w5 N/ t( X
另外,在程式底下的藍色字體部分,是我增加對SNDR的計算式,不知有沒有錯?3 k- c" L' n  V. V
除了以上兩點外,全部程式中有沒有哪裡有問題,也請幫我看看。6 v* l* j; s" G* ?0 H' q
附件是我取1024點得到的SDM digital code,我是由第2 個clock開始抓輸出資料,我的測試條件為:Fin=5k,Fs=5.12M。
$ P6 v$ ~/ D, a2 P% i以上麻煩finster副版主賜教。
作者: finster    時間: 2007-11-30 12:54 AM
我看了一下你的MATLAB程式,發覺到有一個地方有問題
5 j. v# E9 j; A, f7 b3 Z( x那就是你設ptst和ptfi是同一個值是不對的
& G6 V5 d& n7 m) c+ dptst是計算fft開始的值) U- Y: c6 s' _( e1 u" \1 [% Q7 K
而ptfi則是計算fft的range,如8~519,total則為512點
' g3 b. W* L  Q' g: C: k故而你在執行MATLAB程式時就會出現錯誤4 E( l5 T8 V1 j# K, O3 L3 b
* _% O! S' x0 Z5 o2 I
我看了一下你的MATLAB程式,基本上沒有多大問題
5 T" l' Y- K* `不過,要小心計算THD的值和範圍
+ e4 O( ]4 I& |  a" g' R因為有不少人問過我為什麼在這個地方會出現錯誤,而當我看到他們的錯誤訊息時,便會發覺到他們的取様範圍太少,以致會計算不到第9個harmonic distortion components而出現錯誤) W7 B1 W% B( ]% [8 m# l
0 _; I  [/ w+ R  {/ g0 |
最後,計算noise有好幾種定義方式
# t( g4 y* B# g) P, L! P* E原本我所寫的程式有兩種計算SNR,SFDR的計算式,後來,經過我們內部討論的結果只用我給你的那一種計算方式,因為那個方式比較合理
; [: w* s4 B1 F我個人覺得計算noise的方式,只要能夠說服的了別人,同時也能夠提出合理的解釋即可
" ~1 r$ b+ j0 y: ]0 u因為目前在計算noise上並沒有很統一的說詞,故而,只要解釋的合理即可
作者: 緣緣    時間: 2007-12-2 06:25 PM
標題: 感謝finster的解說
感謝finster的解說,我解釋一下你的回復,我程式中ptst是設1,但我的ptfi是設ptfi=M=round(cycle*fs/fin)=1024,所以並不是同樣數值,取1024是因為我有1024筆資料,還是說我這樣的寫法不對?
1 B$ J' O. i+ @# ~因為我希望計算的點數為32k,所以先以1024(1k)的點數來試著計算看看,如果沒問題再計算32k點。5 K( p1 R9 q4 m; ?5 B2 t0 q! Y
我想我程式的問題在於x函數是我自行定義的,可能有錯,可否再幫我看看要如何修改?
, S, X% a4 I+ A謝謝!
作者: finster    時間: 2007-12-2 09:33 PM
我想,你可能有點誤解了我的意思了
' Q  Q! T4 Z1 M% @& m我列出我當初寫ptst和ptfi的式子關係式
8 J, \  G# y% `9 x& ^! ]ptst=2^3;          % calculated fft of start point
# ~; h5 g) v2 L* f1 [" |- C4 upts=2^9;           % calculated fft of end point6 ?7 s) [& N' g" Y, h6 R
ptfi=ptst+pts-1;   % calculated fft range: 8 ~ 519, total: 512 point8 A( P2 i8 c8 z$ [5 g
因為我們不是從第一點就取來作fft運算,故而在設ptfi時,它的值是取(2^N)再加上從第幾個cysle值所取的值
0 d7 [9 a& I& @- Y/ Z如此一來才能夠取到足夠運算fft的值! X6 X+ g# m  x
: z$ `. c- n  \# c5 M4 `# Z
另外,還有一點,x陣列的值要比ptfi的值大,或者等同於此值; W3 D& Q6 b$ u6 p
如果你的x陣列內的值沒有到達ptfi,那MATLAB就會判斷出錯誤. Z2 y3 V# [- B' w8 |3 n6 V
4 E6 i' t7 B( p- @0 b7 J7 |
如果對於要設的參數仍有問題" ^7 G  t: ?7 A1 L$ ^- G+ d' a
我可以把我最原始的程式寄給你參考
" v8 E( h: A0 ?; W! I8 a% \- l$ ^1 H3 E% y6 R% O4 O
[ 本帖最後由 finster 於 2007-12-2 09:43 PM 編輯 ]
作者: 緣緣    時間: 2007-12-3 12:16 PM
標題: 謝謝finster的指導
謝謝finster的指導,我試著把你的方法帶入程式驗證,matlab仍然出現:
& ]' h4 f  K8 }' Q+ x# f0 Q??? Error using ==> times" h% p% I  F* a$ M; R
Matrix dimensions must agree.. G* p& |( ^' p
  `& G" [8 x, t" M# G! d: ~$ @$ O
Error in ==> sndrtest at 26/ M* \/ w0 y) \) f% p  |0 m2 A( g) x
yb=kb.*x(ptst:ptfi);) W, M: q. r' l# P" A# c
那麼,就麻煩finster把你原始的程式寄給我參考,另外,可否附上hspice轉出來的digital code,我好方便作個比對。
9 K, M. \/ F" w∼感激不盡∼
: k+ S7 Z2 g! u! `. K1 Hps.我的E-mail address我會以短消息傳給你,謝謝!
作者: liuyj610    時間: 2008-3-23 03:06 PM
很有用啊,谢谢各位的指导,特别是finster太强了,对了,你能不能给我们多介绍一下关于整个ADC,DAC的设计流程与方法啊?8 v2 s9 W9 p4 ?$ Y7 P
特别是仿真方法(从用matlab系统仿真到fft仿真分析。。。)
作者: winnie22    時間: 2008-3-24 12:18 PM
請問一下* `- c: J! {0 B+ w  V0 {  d
如果要在HSPICE模擬ADC的INL及DNL的流程及作法??
9 T* K% a/ C- B9 ?因為沒有MATLAB請問HPICE可以直接做嗎??
0 Q" P4 t7 C( [% T! h; N/ y
* F" Y4 e. h- v- |% g' R請各位做過ADC的高手幫忙回覆..
作者: finster    時間: 2008-3-24 01:21 PM
基本上作ADC,DAC的模擬,還是以HSPICE為首選建議的模擬軟體
% I' ?! a3 ~, R6 M* M0 O, ~至於用spectre,h-sim,matlab....等,均可對ADC,DAC作模擬; I# F6 H  ^* }
但,在業界,個人的建議是,還是要跑HSPICE會比較保險6 i4 N$ ]; W2 Q/ Q
至於INL,DNL,SFDR,SNR....等,基本上很難直接用HSPICE跑出來,因為有些計算式子在HSPICE中要撰寫出來很麻煩(用.measure指令來作計算),我曾經嘗試過,但最後不得不放棄,因為有些計算真的很麻煩,而且用MATLAB很快便可達到計算
; G# N. U& _# _2 \# q/ y一般都是把HSPICE模擬出來的數值帶到MATLAB中去作計算會比較簡易
. f/ o1 c8 B( ~0 x而如果沒有MATLAB,也可以用C來作數學運算,不過,印象中C沒有FFT的計算函式,所以,可能會需要一些額外的撰寫FFT運算程式才行
作者: 盧志良    時間: 2008-4-23 10:59 PM
標題: Hspice轉進matlab
請問一下:我想把hspice模擬出來的波形,放到matlab裡面做比較,請問要怎麼操作呢?  Q" t! J/ V& ~& q7 \' i- G0 O
                請各位了解的高手幫忙,謝謝.
作者: 緣緣    時間: 2008-4-24 04:16 PM
標題: 回復 32# 的帖子
請問你是要將hspice模擬出來的波形,然後用Matlab叫出來比較呢?
3 W) {, L0 c% `4 t還是要將hspice模擬出來的數據,然後使用matlab做分析?
作者: 盧志良    時間: 2008-4-28 11:34 AM
目前我是要將hspice模擬出來的波形,然後用matlab叫出來做比較,請問這要怎麼弄呢?
作者: 盧志良    時間: 2008-4-28 12:18 PM
另外,也要將hspice模擬出來的數據,丟到matlab裡面做比較分析
. M% A6 A' g8 C6 b$ m+ L請各位高手幫忙,謝謝.
作者: 緣緣    時間: 2008-4-28 05:19 PM
志良你好:- C& u/ z7 f2 \  D
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。* g9 u' W; o9 K! Z. W6 n, R
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。
2 g* E4 C8 I7 b% }& D1 x& W
/ g. u$ x% q& ^$ J[ 本帖最後由 緣緣 於 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的檔案。& G; `; R5 K% m; p  N) m
2.然後開啟matlab軟體。3 G4 O* B$ N  x2 V7 w0 |( V9 ]
3.從matlab的工具列會有一行current directory設定你hspice *.tr0檔案的存放路徑,或是把檔案copy到你現在matlab工作的路徑。
1 D1 ~  R  U7 z8 i$ K4 K1 J4.在matlab的命令執行列執行X=loadsig('xxx.tr0')指令(說明檔裡面都有);  載入波形檔xxx.tr0到結構x中。
1 ?# W; t" \$ B' [4 e- i5.再執行說明檔中相關指令,即可看到你所想看的各點波形。
作者: 盧志良    時間: 2008-4-29 04:17 PM
請問結構x是什麼意思呢?/ G  k/ L  v; _/ Z! |$ Z7 p

* i+ }6 f& H* o* C" S# Berror in hs_allocate_sf: unexpected values in block1 header
: d# x# L& Z1 d6 M( P9 I0 S??? One or more output arguments not assigned during call to 'loadsig'.* ^) Y$ }  T; U# b8 g- {" ~3 q  r
這是怎樣的錯誤呢?
作者: 緣緣    時間: 2008-4-30 01:42 PM
首先x結構類似數學中的X函數,只是將loadsig('xxx.tr0')的指令指向X函數,你也可以用y,z....,此種寫法類似C語言的寫法。
: |) ^9 h' A% j! i2 G第二個問題好像是你的電路輸出節點有重複或是你的*.tr0檔案有問題,這我就沒遇過了,你可能要自己查一下。
作者: 盧志良    時間: 2008-4-30 03:10 PM
請問一下,輸入X=loadsig('xxx.tr0')這個指令是把hspice的*.tr0的檔案在matlab裡面叫出來嗎?
2 h8 S4 P/ w- ]) m! m  a% `0 j那如果我想把這個檔案叫到我在matlab模擬出來的波形裡面,是要怎麼弄呢?
" X6 [! F' I) s2 u8 M還有就是進入到目錄 ~/matlab/toolbox/Hspice Toolbox,執行命令mex loadsig.c。這個是要怎麼執行阿?
作者: 盧志良    時間: 2008-5-1 02:01 PM
********************************************************2 Z7 h, r# K' u5 W1 [
               Hspice Toolbox for Matlab* Q) g3 O! _' c. u% U- n2 B
written by Michael Perrott (http://www-mtl.mit.edu/~perrott)+ J" r3 L7 n: T' t9 t/ w% D% n9 m
   while at Silicon Laboratories (http://www.silabs.com)
% O& F- n0 B) I' l9 q8 j     Copyright (C) 1999 by Silicon Laboratories, Inc.7 k& z; ~/ A% i1 s+ E
     This software is distributed under the terms of4 O2 h% h" j8 {7 U9 ~6 O
       the GNU Public License (see the COPYING file
8 f* }7 [4 `  b8 s2 _& V  for more details), and comes with no warranty or support
* }* \/ r" B0 b: T& x*********************************************************
/ k- T; \& L, T- m* O8 h- g! r4 ]7 J* \& \
2 d" q  y5 O6 [??? Error:  file can't be opened9 X4 N0 E4 q( c1 @( ^- H  x& i

; q: K! o, g, E1 JError in ==> C:\MATLAB6p5p1\toolbox\hspicetoolbox\loadsig.dll* o% w. o- |2 [, ?5 ^) z! B
縁缘大大請問你,這是怎樣的錯誤呢?怎麼解決?謝謝.
作者: 盧志良    時間: 2008-5-1 02:30 PM
縁缘大大請問你,我的hspice模擬出來沒有.tro檔耶,只有.sto檔而已.那這樣還可以在matlab裡面叫出波型嗎?
作者: jerwei    時間: 2008-5-1 05:43 PM
原帖由 盧志良 於 2008-5-1 02:30 PM 發表
7 ]; d! W& j; i1 W, I5 [縁缘大大請問你,我的hspice模擬出來沒有.tro檔耶,只有.sto檔而已.那這樣還可以在matlab裡面叫出波型嗎?

! {& {7 ~" Y7 g' f5 j
# g7 l  q5 T; Q' [tr0是spice的你執行transient simulation後的記錄檔0 C# s3 v" H1 B: }: @' w
若是你沒有tr0則你可能沒辦法將transient的結果滙入到matlab
+ J( s  e) }2 \) g6 `有錯請指正,thx
作者: 緣緣    時間: 2008-5-2 05:57 PM
正如jerwei所說,需要有*.tr0檔案才可由matlab叫出波形,你沒有*.tr0檔案是因為你沒有在hspice 執行transient simulation(暫態分析),一般指令的寫法為:
. N9 Z' g) t7 c" q3 h7 k.TRAN  0.1E-12(取點間隔)   0.81E-3(結束時間)  START= 0E-6(開始時間)' k3 Y- p" F2 w8 V2 ?& [
你可以看一些hspice指令的書來瞭解涵意。只要你有下這個指令,在輸出檔就會有*.tr0的檔案。
作者: jwtsai    時間: 2008-5-13 09:53 PM
幫忙補充一下,1 r; k: v* i6 A5 s
要使用這個toolbox時,在hspice的.option中不能使用post=2.
$ n3 m( i3 Q' p5 r$ V5 Z! ]可以用
% K5 L1 p4 |/ C* Y0 P$ X& n. N.option post
, w$ r* D& [/ s" x+ j+ I或是
. X" E) P7 C: _" O1 m.option post=1" p* F; b, d! O
但絶不能用
; L2 U  q+ X& ]! \0 _.option post=2
作者: simon_ncku    時間: 2008-5-19 10:43 AM
請問或是版主副或是其他人- j$ j! z3 [7 L! D# q
我將 緣緣的MATLAB程式 放進去跑有是出現ERROR耶
6 S) i2 X  G8 d) S; {它出現
: O* f7 M/ k1 K6 J' @9 X) H% q0 X??? Error using ==> run
2 W: G6 f! y. k9 X( aError using ==> times$ i. A* l" X5 I5 S+ |
Matrix dimensions must agree.& b2 s/ t. R3 Y+ D* P6 Q
附件是CO下來的
  z% w  j* A6 F. F請各位先進指教
9 x% V, [9 G  ~THANKS.
作者: simon_ncku    時間: 2008-5-19 07:41 PM
標題: 回復 45# 的帖子
緣緣大大是否可跟妳要MATLAB  分析FFT等一些動態參數的程式# T" f" W7 N3 W3 j
謝謝
作者: 阿茶先生    時間: 2008-8-9 10:07 PM
@口@ 不好意思,小弟到MATLAB的網頁中找不到Hspice Toolbox載點哩...
8 i/ i4 R$ _9 y2 i* y8 F7 k- Q) \  Z6 v, n
不知道有哪位好心人士可以提供載點呢??/ B: S. m! c3 h5 [% Y
/ |6 S% E! `: w: Z
感謝不盡喔!
作者: yoyo20701    時間: 2008-10-3 02:10 PM
多謝大大的解答~~小弟大概瞭解一點~~~謝謝你喔~~~大大~~~~~
作者: yoyo20701    時間: 2008-10-3 02:10 PM
多謝大大的解答~~小弟大概瞭解一點~~~謝謝你喔~~~大大~~~~~
作者: pandera    時間: 2009-3-18 09:06 PM
標題: 謝謝大家回覆
剛剛試了第一個方法 覺得不是很方便
7 h# ?! q* U3 O- k$ U) q" H5 k後面的辦法用起比較ok( t( x* g, o- I
這樣我的模擬結果就比較好看了 謝謝
作者: e2000    時間: 2009-4-8 01:46 AM
怎麼感覺很繁雜的樣子,看來這方法還需要多點解釋,我也很困擾到底要怎樣利用hspice的值放進matlab裡面
作者: caroff    時間: 2009-5-13 06:02 PM
不好意思,有個問題想請教各位前輩。4 K% l4 F$ j3 q! j- F
如果由hspice使用.fft得到一個spectrum,
; o+ y9 ?/ |( x6 R) T( U! _7 R那我該從何得到這個spectrum的data呢?!/ |# F: A$ S5 x
因為我要利用這spectrum去計算SNR,不知該如何用?謝謝!!
作者: s13571357    時間: 2009-5-14 09:47 AM
可以問一下嗎??9 Y  z( H# U. _% c+ O8 T1 W
當我現在有一時間t=0:0.01:60(表示時間是0~60  而每0.01分析一次)
" K7 P- V5 s, q另外每一時間對應到相對的電壓值/ a% `; K6 o: x
但是電壓值和時間不能寫成一方程式1 H$ \, E2 y/ M) {2 j( n1 D' D
我現在想要用MATLAB做FFT* v+ \1 l5 k2 a& n# X" J
把時間軸轉成頻率8 O1 {4 Z9 d) S- g
去看他的輸出直
( ?% H# @# A7 X# x8 ]; b) }我該如何使用MATLAB呢??+ o0 _) b9 j6 O& t' ]( o9 o
MATLAB新手
作者: sky987    時間: 2009-5-19 01:40 PM
他們跑 32k 16k點 應該是在量測的數據
1 G; U8 ~4 Q! b4 w+ ]* K1 J- |/ Q0 X
模擬的時候不用跑那麼多點   這樣太花時間了
作者: kuohsi    時間: 2009-5-21 05:45 PM
請問若用.meas指令
; H% T4 i! G! ?: o將VOUT取65536點的指令要如何寫?
作者: iamsailing    時間: 2009-5-26 09:18 AM
緣緣網友以及版主:: h5 J/ C+ f) U) f) k
我的問題如下:
! q9 l/ o5 h/ B. A' i我用HSPICE 仿真了一個2-bit flash ADC
+ k9 P: i# g/ d$ @  I* }利用spice explorer中的理想D/A工具,: h+ t& i3 B# c
可將2-bit flash ADC的輸出數字信號,通過該D/A重構爲模擬信號  H! f% a& u# x
並導出數據,如附件ADC_DAC_out.txt所示& s  L; S0 G5 W+ |3 }
該文件中第一列爲時間信號(X軸),第二列爲重構後模擬信號的幅度1 K# d7 @( Z  d! _1 o; m
在matlab中如何用load語句將這樣一個兩維的數據導入
9 u# T: n% h' h3 A' Q我現在需要用matlab對該信號進行FFT處理,並計算THD,SNR,SNDR: E5 p; o8 @1 Z% p) t4 h8 V
我的fin=56640625Hz,fs=2e+9Hz,打算做1024個點的FFT
4 D& Y8 l# g! X: s9 JADC_DAC_out.txt中數據的時間是從11ns----523ns
3 F7 W% Y9 ?; J& [# e/ S& x+ e因爲11ns+1/fs=523ns4 a+ r. h9 C# \6 l5 K9 w
附件中fft_yuanyuan.m文件是我將網站上你的matlab程序複制下來了
# o; k+ l' I; M, S  k' h% J但�面有些部分我不明白,我用“?”標出了
* `6 U2 `  I) g
, i; K: @5 E4 C4 F& y: b8 k% @3 T謝謝你。0 s1 Y" ^/ c6 P( K+ ]+ V6 U. t

% g& o9 A  C) y- ]% F# Z1 G" \[ 本帖最後由 iamsailing 於 2009-5-26 09:24 AM 編輯 ]
作者: kuohsi    時間: 2009-6-1 04:02 PM
iamsailing:
0 }, f. v  h. Y0 @# t9 d你取點應該是11ns+1024*(1/fs)=11ns+1024 / 2G=0.523us/ ^; E& L  U+ O1 b
所以你HSPICE要下.tran 50n 0.523us
) m8 |9 {0 V/ `! n.tran 的step要是1/fs才對
作者: 異星人    時間: 2009-6-4 10:16 PM
我有個問題啊, l7 V; g( B5 W* v; |) l

2 s0 @. P6 {8 v0 d' x# D8 S是論壇上的表情問題
, {& Y5 g4 Z2 p; c7 Z; m$ N; A9 ^1 D: e& {  J" x
  這些程式碼都穿插的表情符號9 E; U* A1 p% m" @
5 t* S; w. e; m' V6 c1 G1 ^* z
無法解讀啊
作者: 異星人    時間: 2009-6-4 10:16 PM
我有個問題啊
" r/ J# H: G3 Y2 o$ q+ |" M/ E* T2 ]+ w. C
是論壇上的表情問題9 r+ \9 D% I" x7 F' Y/ z8 x$ d$ O+ e

# N  v6 Z& J  Y" z1 z4 M   這些程式碼都穿插的表情符號# X- o' R+ Q# d; o
$ ?$ B3 h' d# u) P2 q* y
無法解讀啊
作者: kimwin107    時間: 2009-7-27 08:44 PM
感恩..請多多指導..即所謂無分享就無成長..為又努力不懈地汲取他人經驗,才能更精進.!
作者: pkf690801    時間: 2010-3-18 04:42 AM
我需要這個頁面內的付加檔...為什麼都不能下載呢?
作者: mayluli1981    時間: 2010-4-13 05:22 PM
版主 請問依下能給下載hspice toolbox的網址?偶在網路都找無. R3 P1 M3 w& f  Q! ], r* e5 @: R
我是新手  我要把Hspice 的AC及 TRAN 圖用matlab顯示出來而已
( c( w* h( M3 U3 c$ G; O沒有hspice toolbox好像不行ㄟ  {% R8 q7 N: |  K" W
感謝
作者: s13571357    時間: 2010-4-21 02:15 PM
請問一下
. F& I" ?; e( a/ jhspice toolbox主要是用來和maltlab溝通嗎' P, I3 J# d4 f; @& W* f; p
哪裡可以找到相關的資料呢
作者: lqlcug    時間: 2010-4-22 09:28 AM
楼上很多牛人,这里斗胆谈谈我的处理方式。+ a# R1 J% [! V- [
1.将Hspice的仿真结果正确的输出,用到了一个interp=1的设置,它可以选择你想要的数据点输出;; g3 o( G! V2 \! ]- F# F
2.采用Hspicetoolbox将hspice仿真结果导入到Matlab,然后处理的方式就非常的自由了,比较典型的处理方法可以参考MAXIM公司的设计笔记,楼上已经有人贴出,还可以采用Matlab将数据先处理到workplace区域,然后采用simulink,借助SDtoolbox来计算SNR。
作者: rokin    時間: 2010-4-23 02:35 PM
首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下, ...
( m! N$ v4 ~: H; V0 @- S% J1 [3 d緣緣 發表於 2007-11-13 03:58 PM

! G; `3 }* i- C. E' a7 T7 m9 n, m2 ~& A& H. u" ?, J7 r: w

- _- V5 d" H# I% {# A  請教版主及緣緣
/ f: M" W$ m5 S0 Y  k7 p對於給matlab計算FFT之前,
/ d% r. D0 P* T1 q( \/ L.meas 指令對輸出要取均方根值嗎?
8 Y0 s8 e, S  w1 M; H; F或者直接取值就可以了?
作者: juro0827    時間: 2010-9-27 01:37 PM
WOW* a: X- o) G6 D' Y9 N+ t
正在找此相關資料!!
4 |: K: Z: i( z- gLUCKY!
作者: wwm101    時間: 2011-3-18 10:14 AM
finster 版主相当强大啊,受教了,谢谢
作者: killer7788    時間: 2011-10-4 04:40 PM
回復 58# iamsailing
: A- @. @, V5 m( @4 u/ Q
2 I- W8 c5 R$ A1 l' ?; l0 I' {* B3 T) @
    可以請問一下, SPICE EXPLORER 中的 D to A converter 是如何使用, 因為我所做的ADC 的輸出是一個序列或並列波形輸出, 案OK後好像沒什麼反應, 也不會像你的TXT檔一樣
作者: david_chen    時間: 2011-10-6 08:40 AM
來這裡看到很多高手精闢的講解0 S& {' N, V! }& C* F5 a  d! m: G
受益良多  謝謝囉
作者: chivv    時間: 2012-6-21 12:45 PM
感謝版主回覆
% N, ?" I: d+ A8 ~1 J正在找這方面相關的訊息
6 T8 y6 G  A1 F讚!
作者: poiuzxcverty    時間: 2013-3-2 03:34 PM
謝謝各位大大分享,小弟受用了
作者: jghn    時間: 2013-3-28 02:50 AM
謝謝大大的分享!  . f* b: F& O" \. M8 u4 W
/ @8 A; D$ S) n/ P( R9 b" Q0 }
真是受用無窮




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2