Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 96710|回復: 74
打印 上一主題 下一主題

[問題求助] 如何將Hspice資料轉進MATLAB計算

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2007-10-4 22:57:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我現在在設計一個三角積分調變器(sigma delta modulator),電路完成後,我用Hspice做FFT(快速傅立葉轉換)求得SNDR(Signal to Noise plus distortion ratio),但我看其他論文秀出來的都是再經Matlab轉出來的圖形,請問,hspice要如何轉換成matlab畫出SNDR及DR(Dynamic Range)?包含方法及指令,愈詳細愈好。拜託有高手能相告。. Q2 Z+ q# J/ i& y* D" ^6 R
謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂13 踩 分享分享
推薦
發表於 2008-5-13 21:53:55 | 只看該作者
幫忙補充一下,) y8 w# S7 v  v- T! m
要使用這個toolbox時,在hspice的.option中不能使用post=2.
& E: l& ~" b0 C, Y可以用$ V8 T; j* V. b
.option post
9 V) t/ {: H. X: E' C" M$ \( R或是
6 `) r2 H/ Z( ^8 e.option post=1- n( |& U3 ~& ~# _% e% e
但絶不能用
: w: n1 Q9 D0 A% `.option post=2
推薦
 樓主| 發表於 2008-4-28 17:19:49 | 只看該作者
志良你好:. T8 C* |2 Z2 o. L% u* o. J5 u
如果你是要將hspice的波形用matlab叫出來比較,你可以去Matlab網站下載hspice toolbox來用,至於用法,我之前有在網路上搜尋到hspice toolbox的英文及簡體的說明檔,我另外自己也寫了一份繁體中文檔,我把他們全部置於附件中,供你參考,你看完說明檔後,應該就會用了,有問題再發問吧。( K9 ^$ j: C* M( t) v
關於你的第二個問題,這說起來可能有點複雜,你可以看一下版面上我之前與版主及副版主的問與答內容,應該可以知道如何從hspice下指令得到所需的資料,matlab程式的寫法,可以去買有關matlab的書來看,到時有問題再發問了。希望對你有幫助。* [& R# N' N( n+ k: @% R; _

4 s  V8 t. u( F  b4 a. r[ 本帖最後由 緣緣 於 2008-4-28 05:48 PM 編輯 ]

本帖子中包含更多資源

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

x

評分

參與人數 1感謝 +5 收起 理由
fechiu + 5 很給力!

查看全部評分

2#
發表於 2007-10-5 18:42:51 | 只看該作者
我之前做ADC再算SNR有用過一個方法 可是很爛 但是還勉強可以用' r$ q$ }& b; w& ^3 A. A
就是直接用.print指令把你要量的電壓印出來4 @, C( H9 e8 t+ e( G
然後再用手動把印出來的資料copy起來
  v+ J$ c7 K0 d1 `' {+ s* {然後貼在Matlab程式上面 然後就可以做FFT了
3#
 樓主| 發表於 2007-10-5 21:39:18 | 只看該作者

謝謝版主回復

謝謝版主的回覆及支援,我之前有找到一個MATLAB的應用軟體叫做HspiceToolbox,可以將hspice輸出的檔案透過HspiceToolbox將檔案轉入MATLAB中,也可用MATLAB叫出hspice電路中各節點的信號,只是,接下來MATLAB要用何種指令才能算出電路輸出點的SNDR及DR,我知道可以將MATLAB的指令整合成一個副檔名為m的檔案,不知版主或其他高手有沒有這方面的指令寫法或是m檔案,那就感激不盡了。$ ?$ Z4 |9 j. x

' z7 y1 p. t. y% v, U謝謝!
4#
發表於 2007-10-8 09:40:08 | 只看該作者
Matlab 有 fft 的  program,
& m+ x& g* ?0 _. j" |2 ~+ z% q所以  只要將FFT後的資料  做一些轉換就可以唷!!
& w: \: q) [* C將主信號找出來!!  然後將"所有的 fft power 加起來 - 主信號的 power"7 n9 r6 _' Z. f
就可以換算  SNDR 了!!
, [' t4 ^  q! o1 z6 [9 qSNDR is Signal to (Noise + THD) ratio?
5#
 樓主| 發表於 2007-10-11 17:44:50 | 只看該作者
謝謝sjhor版主的回復,我正上Matlab網站努力尋找資料中。
6#
發表於 2007-10-13 08:20:07 | 只看該作者
我以前作DAC的MATLAB部份程式; t6 k% [/ i1 R% w
我想,應該可以給你一些參考吧: ~. V; |; |- v1 N% O* L$ E. [) Z' Y
$ s4 ]. @7 o: ^1 |
% --------------Using minimum 4-term Blackman-harris Windows -------------" J) U$ S0 [3 b, e) w5 N
nb=1:1ts;% _; s. Q' S  i
kb=0.355768-0.487396*cos(2*pi*nb/(pts))+0.144232*cos(4*pi*nb/(pts))-0.012604*cos(6*pi*nb/(pts));
* _0 s+ S5 u( p$ n4 {) f9 a/ bwin_gain=sum(kb)/pts;
1 x& Z4 @( }2 h) S) Ukb=kb/win_gain;
( l* W: v$ L6 e4 q& O# l, V* Q( R! N* V3 o
% --------------- Calculated fft --------------------------
3 h/ i1 E. }+ J7 ~2 A3 g. Kyb=kb.*x(ptsttfi);
6 ~+ a; z( D' Qyk=fft(yb);* `- ^( \  t1 o7 |: N# ?
fft_no=length(yk);* ^" G3 R. W- D4 F! f
f=fs*(0:fft_no-1)/fft_no;
* F2 \$ Z2 F# S7 t& y! uPyy=yk.*conj(yk)/((fft_no/2)^2);
, G6 r% Q2 B# g9 w* U: }. \! R4 ^& t4 `- w
% ---------- Calculate THD ----------------------------
0 [  F8 F9 D9 ~' ~, Wj=1;. F7 B2 z: {* p6 {
for i=1:1fft_no/2)
# k4 H" Y8 Y2 V! `' a    if (f(i) == (fi*j))( J* c* Q# J' P8 Q% ^4 {
        HD(j)=Pyy(i);     %% find all harmonic distortion components. W: N7 Z- r4 L! [
        j=j+1;; E9 @# l0 [/ t: @4 T- H
    end
7 ?% l' I' V1 A: B& K2 uend
" Z. O7 }/ G# d# s/ W* h8 CP_hd=sum(HD(2:9));* x! n$ A, Y: W8 Z$ E5 K' s7 j6 r
THD =10*log10(P_hd/HD(1));  %% HD(1) is fundamental signal
7 A3 X  e) K$ D6 M, d" k2 Bfprintf('THD = %g dB\n',THD);
% g  q! K- k" v( r9 z! d. {7 g
/ p0 {" z# E6 T  h/ \' i0 q& K% ---------- Calculate SNR ----------------------------" A$ M0 D* P- O  J$ U
fundamen_dB=max(10*log10(Pyy(1:fft_no/2)));/ J. R  X) j+ m
fundamen_no=find(10*log10(Pyy(1:fft_no/2))==fundamen_dB);
3 Q) O" ?6 E& ^3 u  e) Q( \span=max(round(fft_no/200),5);5 P. u. U& j( R! ~
P_sig=sum(Pyy(fundamen_no-span:fundamen_no+span));
& D. m) N; [, R, x4 v
3 R( I8 l8 ]" E* J7 |6 x# |P_noise1=sum(Pyy(1:fft_no/2))-P_sig-P_hd;/ J$ K2 S6 T% E6 _
SNR1=10*log10(P_sig/P_noise1);
. n2 m1 V0 t% y$ D! jfprintf('SNR = %g dB\n',SNR1);
7#
 樓主| 發表於 2007-10-15 19:34:54 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:
2 V5 M/ L5 [3 |6 P+ @請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。, x3 J- t- |) y6 j/ J8 ?6 x% h

. T, y: O1 ~' [5 k( N% M# e另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:, B, L" M: s+ I6 o' G- C7 ?( K, }
"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!"
3 q$ D1 w6 j, O. A0 \$ Q7 d  y0 H內容為:- b) G7 {5 o! B8 p- f5 ]/ l
压缩文件共有三个文件:两个m文件和一个txt文件; r# q3 o, P2 `3 z
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
/ R, L$ S7 P6 ~! L4 Y9 E  _9 \# G希望大家喜欢!!
) S$ T* D! N8 e$ F附件為:FFT.rar
9 b* N: v& Z; J& u* ^0 v2 Y2 j* l2 V- ~, R/ b
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:0 e2 Q9 N+ t- Q+ u$ Y

5 R9 a# M) |( r0 U7 A- C" c??? Undefined command/function 'AD10'.
8 X- @2 G& Q) a5 M( I! y" Z
8 k3 t' F7 e2 T1 {- o2 y) xError in ==> spectra2 at 43
# p! r0 @5 {3 c& ~+ X) Md0=round(AD10(start:stepstart+M*step-step),3)/1.8);
9 K3 t) r9 b( j' r* j3 n/ q
4 a+ v. \7 y' N# g& o- q+ @由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
5 D+ C: U3 M; H% \1 ^
, h( H. S9 W* V$ n1 h( d∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~??????? 2 T/ v0 p( i; ?* R) w8 m
, @. ]! w$ u7 B! H
[ 本帖最後由 緣緣 於 2007-10-15 07:54 PM 編輯 ]
8#
 樓主| 發表於 2007-10-15 20:54:45 | 只看該作者

謝謝副版主回復

謝謝finster副版主回復,想再請問一下:6 }$ a( _# @4 [9 z! R* H
請問你的程式是將Hspice輸出的*.lis檔內的FFT做運算,還是使用HspiceToolbox由Matlab將Hspice電路中各節點的訊號叫出來,才根據某一輸出點作分析,還請不吝指教。
/ h' b7 |( s( C另外,我在另一個網站(EETOP,中國電子頂級開發網)發現一個matlab的m檔,原帖標題為:
+ I& O, `8 ~6 `& M! P- q* N/ M% D9 l; b. f"一个对ADC和PLL输出结果作FFT频谱分析的matlab程序,推荐!") Y7 n7 n9 r& B
內容為:
6 Q: l6 c, _, E压缩文件共有三个文件:两个m文件和一个txt文件, i/ c) d5 M2 l% }6 m. T. @% P6 n
spectra.m :用来调用主程序fft_analy.m和txt文件。其中txt是我做的27M PLL的Hspice输出模拟结果。步长为1ns,对应里面的取样频率fs=1000。cycle对应的是取的波形长度。如果数据是ADC的量测结果,则要添加相应的bit数,程序里已标明PLL和ADC的语句。
, P/ W3 i% z$ ?9 i希望大家喜欢!! . }" Q7 d: b# a; J. j7 O7 l( \
附件為:FFT.rar
' f' Z& T  V7 x6 V3 x( I 9 O+ g5 x+ k9 n# [
我根據他的說明修改他的程式變為如附件FFT2.rar的程式,FFT2包含一個ADC用Hspice做FFT分析得到一個輸出結果,如int40b.txt,主程式內容修改成fin=5K,fs=5.12M,Bit數為1 bit,如附件FFT2.rar內的spectra2.m及fft_analy2.m,執行後,Matlab卻顯示以下的錯誤訊息:0 t+ ], a  n# s1 o+ t# c0 H6 u+ N
# i/ t. Y7 L0 z" H8 W% s4 W' Q
??? Undefined command/function 'AD10'.
6 d7 u. U' O$ q; j0 v3 O& `$ i- u" u9 t8 M2 F$ V' C
Error in ==> spectra2 at 43
3 k0 @- M( s( L8 P  b- ]d0=round(AD10(start:stepstart+M*step-step),3)/1.8);
0 A# w4 ~" i% I  e% [# q; i$ T- B* T' O& ]" E
由程式的錯誤訊息應是"AD10"的函數或指令未被定義,但不知如何再做修改,可否請Finster副版主幫我看一下,有什麼地方需要修改,感激不盡!
9#
 樓主| 發表於 2007-10-15 22:18:15 | 只看該作者

增加附件

∼不曉得為何無法上傳附件,一直出現Internet Explorer無法連線訊息~???????, ^4 R  y+ s; _6 h* B1 Q! }7 A- M
附上上帖的附件

評分

參與人數 1Chipcoin +2 收起 理由
chip123 + 2 可能是圖檔太大?縮小再試看看?

查看全部評分

10#
發表於 2007-10-15 22:31:57 | 只看該作者
在回答你的問題前我先稍微解說一下我的MATLAB程式7 {7 Z# A+ s5 F
要作FFT必需是sine waveform或者近似sine waveform,所以,我在作DAC的SNR及THD時,必需是輸出信號為sine waveform的記錄數值
* o& v( B7 h: M$ I3 n  |故而,我利用SPICE中.measure的指令來記錄DAC的輸出信號數值,然後將這些記錄的值存成一個TXT的文字檔,然後再用MATLAB將這個文字檔讀出,再作FFT運算3 n8 g, m" M+ u

) L6 \. ?% X/ h( v5 Y1 R7 c3 [; ]% r4 B在MATLAB程式中要作FFT運算時,需注意它必須是2的倍數,同時,我在作FFT運算時,先行利用minimum 4-term Blackman-harris Windows的filter來使DAC的輸出信號平順些,當然,你也可以不加,不過,畫出的waveform會有點怪怪的,再者,因為我們記錄的數值是每隔一段時間所記錄的數值,所以畫成連續的圖形時,會很不連貫,所以,一般都會作windows的filter,而我也問過一些比較資深的analog designer此種作法是否恰當,還沒有人對於這種作法感到奇怪,也許大家都是這個樣子作的吧' Y* D7 R% V, W7 |! @
% M4 k: |: ]+ `( I1 W
我看不到你的附件檔,故而實在無法作出評論$ i" y6 M1 V/ @' q" f3 ^5 J( k! e
而看了一下你所秀出的錯誤訊息,想問一下,MATLAB程式中有AD10這個函式嗎??又或者有沒有AD10這個array??
3 \0 Q8 Q$ y' z2 S& `9 `從錯誤訊息來看,似乎是找不到AD10這個函式或者array,所以才有錯誤
11#
 樓主| 發表於 2007-10-16 15:54:59 | 只看該作者
由於之前一直出現Internet Explorer無法連線訊息~???????
* r, Q1 g# X2 h所以重新上傳附件

本帖子中包含更多資源

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

x
12#
 樓主| 發表於 2007-10-16 17:02:11 | 只看該作者

有關hspice .measure指令寫法

再請問一下finster副版主,如果我是要將Hspice的電路輸出點Dout,使用.measure指令來記錄ADC的輸出信號數值,暫態分析(TRAN)掃瞄區間:0~3.2msec,! |: I4 g$ ?# X- A# O2 K  z! p
指令的寫法是否為:
7 b' f- M& h. d, H. W; v9 D7 T" N- O0 y" b0 b/ \1 @
.MEAS TRAN DIGOUT
& m8 x' {6 E& V0 i; N# D+TRIG  V (Dout)  VAL=0        RISE=2
; z. Q2 e* j) R) U7 ]5 o, w4 ]+TARG V (Dout)  VAL=3.2m  RISE=2+ _/ }" k0 w1 a: w+ z8 a$ _

4 R" l5 a  Y( A) u- {6 U; A∼還請指教,謝謝∼
% Q* H. T8 G* y! \) W5 X1 v0 `; c" h/ j$ e7 ]
另外,我先使用一個小程式去試.measure這個指令,輸出的*.lis只發現以下的數據:
$ x- q( G1 k8 a: F- _! s! O5 f/ C7 g- I) g3 x
digout=  3.7443E-09  targ=  1.5167E-07   trig=  1.4792E-07
/ ?6 |: \3 T6 O3 G# B0 d/ y2 N8 \% m8 p3 I
Hspice輸出檔多了一個*.mt0的檔案,該檔內容同上面之敘述,不知是否還有那邊出錯?
2 ~! z( V3 E* M3 Y9 E- T* I% D; L$ p4 e
9 b6 u) W- h. a5 Q, d, K% b+ H[ 本帖最後由 緣緣 於 2007-10-16 05:34 PM 編輯 ]
13#
發表於 2007-10-16 23:08:40 | 只看該作者
在Hspice執行.measure指令時,它是依據你的.lib的數目來產生相對應的*.mt*檔
9 @. S. u- D8 x. X# Y2 P; c  u5 Z5 y+ [故而,如果你的檔案有多出*.mt0的檔案,那表示這是你的.lib的第一個依據.measure所計算出來的資料0 E( o) Y3 W' R) ]8 R
所以,請再檢查一下你的HSPICE檔案吧
$ |; b- ]( I9 |" V
8 V: b& x3 ]( w: u9 g1 ~1 d再來,你的.measure指令用法沒有問題. U7 N& ~: G) Q$ Q4 b0 w
但,你的取樣點及時間似乎不對
4 T* H' g+ Z5 ^9 R. g你的暫態分析(TRAN)掃瞄區間:0~3.2msec,你所用的指令為:
0 v- u9 k+ t8 y! F6 c.MEAS TRAN DIGOUT
2 ?0 O. {9 \* R+ X% A+TRIG  V (Dout)  VAL=0        RISE=2  u: W8 M4 O9 m3 D2 ^; {( s2 d
+TARG V (Dout)  VAL=3.2m      RISE=2: ?" C. L8 ]5 J+ ?
寫法沒錯,但,如果是ADC,那其輸出信號為digital,故而,輸出信號的振幅不是0就是vdd,如果要記綠輸出信號的digital code的話
5 U" V' j$ H5 p那,計算輸出信號的digital code應該依照clock來作取樣時間,而不是0~3.2ms,也就是.measure的VAL要是clock$ l3 f  N$ k3 q) q5 Q
另外,若依照你的指令來用,應該會計算不到輸出信號,除非你的模擬時間超過6.4ms,因為你是用RISE=2
+ r" D, _' |9 o5 n再者,如果是用.measure來計算digital code,那如果以rise edge作基準則應該用RISE=1,而不是RISE=2,這是很嚴重的錯誤,除非你的clock及取樣有delay 1個clock的作用在,如果是以fall edge則是FALL=1,若是以你RISE=2,那你取樣出來的digital code應該都是錯誤的
14#
 樓主| 發表於 2007-10-17 14:02:04 | 只看該作者

再次謝謝Finster的回復

再次謝謝Finster的回復,我會依照你的方法再重試一遍,另外在麻煩你幫我看看上傳的ADC Matlab程式。" o& _- U& z' q6 w# R( T1 k
$ F2 w% [8 r* m, J" V% t
∼感激不盡∼
15#
 樓主| 發表於 2007-10-18 23:59:51 | 只看該作者
再請問一下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: ~0 I7 j3 {+ o! |: o
3 }) X8 A, P4 X" H8 S& m% j& ^- k0 ]% ]; E5 ]5 s
.MEAS TRAN DIGOUT
% T1 ~# a$ J' E+TRIG  V (Dout)  VAL=0      TD=0.5E-7    RISE=1( Z" a/ w) H+ q' t$ Y3 `! j! f" t' _* X2 k: B4 ^
+TARG V (Dout)  VAL=0.976E-7               RISE=1
' [, |' K9 ~7 u4 U2 D: \$ W
* G# O. a) g9 M" W: Z∼還請指教∼
/ q1 `2 |9 g+ Q& I  [1 l. G程式重試的結果,*.mt0檔案只出現:
" m; y% T8 I$ S/ |* h4 v9 y& Adigout           temper           alter#            5 ?" J/ R; c5 L) ^' N, J
1.890e-12        25.0000           1.0000         + o6 f( Q% I/ l" H' @4 E
不知是否還需修改?% S7 T# U; O' k; J$ M
; W# G& Z2 ^7 x* V/ j; T8 \
[ 本帖最後由 緣緣 於 2007-10-19 12:11 AM 編輯 ]
16#
發表於 2007-10-19 01:58:58 | 只看該作者
先回答第一個問題
! D( i: q0 E1 M1 x5 c你的MATLAB程式我大概看了一下,發覺到AD10應該是一個由別人自行撰寫的運算函式,而因為你在MATLAB程式中並沒有這個函式,同時也沒有呼去這個函式,故而,你在執行MATLAB程式時,當然會出現錯誤訊息
$ C4 x2 T9 a1 R所以,如果這不是你自己寫的MATLAB程式,那我只能說你的MATLAB程式並不完整,也許,這是別人故意留一手的吧
! Z; l$ V. K& k5 I3 O0 y& V; {
. k  l) l+ `9 a再來,在ADC中的Sample and hold電路若是用SC電路,是會用non-overlap clock,故而會有兩個clock
/ G! @% C4 k  D1 d$ K8 l但,源頭的clock只有一個,而這個clock會透過non-overlap circuit去產生兩個時間差的clock
, c6 h1 i$ @0 M, x! ?9 D$ }一般而言,ADC的數位電路所需的clock通常都是由源頭的clock作為基準,然後將數位信號輸出,故而,在使用.measure時,所參考的時間及頻率也該是以這個源頭的clock為主,而不是由non-overlap circuit所產生出來的兩個時間差clock,除非,你的ADC電路並沒有包Sample and hold circuit(我不清楚你的電路架構為何,但,ADC一般而言一定要有Sample and hold circuit)
/ ]% f+ ]% e. y! ~) B再來,我看了一下你的取樣頻率為5.12Mhz,這是很低的clock頻率,所以,照理來說這麼低的頻率,你的架構應該是採用SAR架構的ADC吧,那你的輸入信號頻率為何呢??另外,你的.tran的時間多久呢???還有,你是幾個bit的ADC呢???
7 [+ T. g0 O) Q' j( p, R3 d舉個例來說,假如你是4-bit ADC,輸出分別為D3,D2,D1,D0,且clock為1MHz,所以使用.measure應該為" u! r! O5 @  J; g& v$ I, ?
.MEASURE TRAN DIGOUT_D3_t1 find V(D3) AT=5.2us
7 Z4 r$ V& o& I6 t: V; p& h0 w.MEASURE TRAN DIGOUT_D2_t1 find V(D2) AT=5.2us
6 n9 T6 i. l. I# e9 R.MEASURE TRAN DIGOUT_D1_t1 find V(D1) AT=5.2us- U- `# G3 L9 A( Y
.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=5.2us
% o) J7 ?, _, [1 |- B! Z4 o& i) s- E! O2 T
.MEASURE TRAN DIGOUT_D3_t2 find V(D3) AT=6.2us, Q  b) S' C: K
.MEASURE TRAN DIGOUT_D2_t2 find V(D2) AT=6.2us, L5 C; X0 R) e- e& ~6 Q9 l
.MEASURE TRAN DIGOUT_D1_t2 find V(D1) AT=6.2us
3 a& z* D6 |' N  v.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=6.2us
) N1 j  S) B8 z" R: b5 b3 g) u0 T+ l2 ~
我只計算clock的週期,然後再初估ADC中的delay時間為0.2us,所以,我第一個數位取出的時間為第5個clock週期來取出4個bit的digital code,然後在第6個clock週期時又取出第2筆digital code9 N! ~* T2 z5 M5 g, U" o
我用的方式較為簡化些,因為ADC要取出的是在每個clock週期中的digital code,所以,只要精算出每個clock時間,即可簡化.measure的指令,而不用用到TRIG....TARG.....,當然,這是我的作法,你也可以依照我前面寫的改成你用的TRIG...TARG的用法
& _4 S, |8 m( o$ }3 h/ Z
( J- T. _1 `5 W" O最後,像我剛才寫的.MEASURE TRAN DIGOUT_D3 find V(D3) AT=5.2us
) b" {  G1 ~& K7 ?$ {2 Y可以用MATLAB程式寫成一個自我產生的.measure,我以前是用MATLAB來自己產生的,不然,光是計算1024點就要寫4096行.MEASURE指令,那是一件很浪費時間和生命的事,用MATLAB的迴圈即可一下子產生出所有.MEASURE指令,小小作法,提供給你參考
17#
 樓主| 發表於 2007-11-8 15:00:24 | 只看該作者

謝謝finster副版主的詳細解說

再次謝謝finster副版主的詳細解說,我前一陣子剛好有事在忙,沒有及時回復你的問題,還請見諒。( _" f0 @" v4 l  {. P+ u, l
我大概講一下我的架構:
7 {0 d) r5 N$ `% O; o" t我電路是使用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的指令寫出,指令如下:$ j1 x4 s* ~& ~
For Fs=10.24MHz:
' \# \4 ~5 Y2 o) J% pV0 NET2 0  PULSE 0  3.3  0.5E-7    0.976E-10 0.976E-10 0.488E-7 0.976E-76 h, D9 N9 C" a/ F2 G7 G
V1 NET6 0  PULSE 0  3.3  0.988E-7  0.976E-10 0.976E-10 0.488E-7 0.976E-7% d; v1 |& H. p9 ]" E8 b3 O& b
For Fs=5.12MHz
7 T/ O  ]  @6 C2 k& W5 h5 ~3 qV0 NET2 0  PULSE 0  3.3  0.5E-7    1.952E-10 1.952E-10 0.976E-7 1.952E-7- e" s8 f( X# ^+ j: `( I+ c
V1 NET6 0  PULSE 0  3.3  1.476E-7  1.952E-10 1.952E-10 0.976E-7 1.952E-7
5 i1 M7 D, c; i5 S- Q3 P( {+ e另外,我在hspice做FFT運算取的點數為32k,所以根據計算,如果Fs=10.24M,.tran的時間=(1/Fs)*32k=3.2msec,如果Fs=5.12M,.tran的時間=(1/Fs)*32k=6.4msec。
! a. Z4 p& I% b! ]4 \如果依照你指令的寫法,根據我的clock=>Fs=5.12M,delay 0.05us的情形下,同樣第一個數位取出的時間為第5個clock週期來取出1個bit的digital code,然後在第6個clock週期時又取出第2筆digital code,寫法是否為:
9 b0 S$ M( o5 \: S" c: \.MEASURE TRAN DIGOUT_D0_t1 find V(D0) AT=1.026us
1 S( U% g. M0 f2 c.MEASURE TRAN DIGOUT_D0_t2 find V(D0) AT=1.2212us
; s, {& ~/ B+ y6 _) C2 P然後以此類推,在第7個clock週期時又取出第3筆digital code,如果32k點(二進制),就須寫32768行,這樣對嗎?' j! v* |( F) b  ?9 W/ B
你說可以用matlab寫迴圈,可是如果我是將hspice的輸出數據再帶到matlab做計算,那我就需要先在hspice下指令記錄輸出數據,再帶到matlab中,那這樣子變成還是需要在hspice中寫32768行的指令才能記錄數據,或是說有其他辦法可簡化hspice指令?或是就你所言,用MATLAB程式寫成一個自我產生的.measure,但要如何做呢?還請finster副版主多多指教!謝謝!
( N6 ]2 O: R/ T9 f3 e1 l9 @
: l5 i3 B8 i; p, R[ 本帖最後由 緣緣 於 2007-11-8 03:04 PM 編輯 ]
18#
發表於 2007-11-12 02:06:38 | 只看該作者
看了一下你的說明,覺得有些奇怪的地方( Q; V/ z. q1 E, V9 Y
首先,我沒作過switched current ADC,不過,依照取樣原理理論來說,取樣頻率需大於輸入信號的兩倍才能夠將原始信號還原回來6 [1 l$ J& G3 d
而你的取樣頻率和輸入信號頻率卻非常地接近,似乎有違取樣原理的理論基礎,不知道這個樣子真的能夠取出真實的信號?5 c2 y; \" Q# V( Q7 X" B7 m
! E2 E/ E% I; ~0 ~
再者,FFT運算基本上也是依照取樣原理理論發展出來的,因為FFT的取樣點數是輸入信號的2^N倍,N的最小值為1,也就是FFT的最小取樣頻率是輸入信號的2倍,亦即輸入信號在一個週期內會被取樣2點,而我們所撰寫的FFT來計算SNR,SFDR,THD...也是依此理論陸續往下寫的,所以,看了你的規格,實在覺得有些奇怪
6 d7 E% w9 C4 r+ r3 q9 o" X. T; M. |+ t' h
FFT的取樣點數如我剛才所言是取樣點數是輸入信號的2^N倍,所以,取樣點數為2,4,8,16,32,64,128,256,512,1024,2048,4096...,一般取到1024點或者2048點就已經非常足夠了,因為超過2048點之後所計算出來的SNR,SFDR,THD....其實變化的只有小數點後面幾位的不同而以,取樣到32768點,其實真的不需要
/ j4 [# u& x( f4 _
1 F: s* a4 P3 Q+ i; ]clear all
. K: w$ t+ j! r0 n  A# tfid=fopen('dual_measure_rms.txt','w')
) I- M* _; t! N8 \& l8 a0 ?for M=1:1:1024
* C9 s0 H% F$ W* j, a! Q- N$ l) c( I       T=M-1;
% C" ]# K9 ?1 J) y4 ?2 V6 N/ ^       from=(50*T)+45; %DUAL DAC measure time
3 l, s& C: C  d. s/ Q       to=50+(50*T);
6 Y" h4 [( B8 N; s8 y: V% U       fprintf(fid,'.MEASURE TRAN A%g RMS v(daci_outp) from=%gn to=%gn\n',M,from,to);1 r6 F5 t# H4 ?: [. \
end  y3 j) T8 s: \1 x) H, L
MATLAB程式會產生一個dual_measure_rms.txt檔,你將這個檔裡面的.MEASURE複製到HSPICE中即可,不過,如我前面所言,取樣頻率是輸入信號的2^N倍,然後再算出我的取樣點的時間點為何,如果不知道這些關係式,那這個MATLAB程式將無法使用
  y4 s0 \+ ^& \8 [+ U; V這個程式很簡單,只是一個迴圈再加上幾行計算時間的式子
19#
發表於 2007-11-12 12:02:56 | 只看該作者
感謝Finster提供一個非常實用的小技巧2 I0 v& z3 s0 h) y3 Z/ M" D
這樣以後模擬FFT就非常方便了9 t1 [+ B' R2 j& R1 W5 {$ p$ F
看一下應該是先計算好要取樣點的時間間隔 也就是sample clcok的時間$ s' ~' D" f# F& l4 J
然後譬如取1024個點 就用Matlab產生1024個.measure指令敘述吧
% `& I( d+ k3 L" q) S5 ^只是我Matlab指令不熟 看來這些程式碼還得花點時間弄清楚一下
20#
 樓主| 發表於 2007-11-13 15:58:41 | 只看該作者

再次感謝Finster的詳細解說

首先我想請問副版主finster,你說我的取樣頻率和輸入信號頻率非常地接近,在取樣頻率Fs=10.24MHz的條件下,不知這裡輸入信號頻率指的是輸入信號頻率10K,還是輸入信號頻寬頻率40K?
0 q. G; w& m' T$ y( L我解釋一下我為何要用fin=10k,Fs=10.24MHz的原因:
" t/ O: S8 S$ o+ l: I" H因為我的Fs=10.24M,所以我的Fin=10.24M/1024=10k,會取1024倍的原因是之前曾上過ADC的課程,上課的講師提到由數位信號處理(DSP)的理論,Fs=1024*Fin的情形下,頻譜比較不會產生leakage。, o1 Y! Y: H1 j- I8 n8 J
且如果以我的規格來看,我的OSR=Fs/2Fb=10.24M/(2*40k)=128,我是希望縮小Bandwidth提高OSR,進而提高SNR,可是我們老闆堅持要做到40k以上,所以,在無法提高取樣頻率Fs的情形下,只能維持OSR=128來設計。
, ~! W8 r1 W& [& ?另外,為何FFT運算要取32K points,是因為我看相關的論文,幾乎都是取16k或32k points,然後我在hspice使用FFT指令來計算的結果,好像32k points以上圖形比較像SNDR的圖形,所以才用32k points,後來再問其他人員,SNDR要由matlab做計算,輸出的圖形才準,論文中提到matlab計算的點數大多也是32K points,也因此,我也才想用32k points去計算FFT。
' n6 N- \7 M# Y- d5 }& ?/ e6 C; t2 C2 E依照你所言,由於我的Fs是Fin的1024倍,所以,我的FFT只需取1024點即可,依照你的.measure迴圈程式,我將程式更改為:
' T# p1 ?( ~' L7 Tclear all
  y2 B+ x$ [# v8 f3 ?; e5 qfid=fopen('sdm_out.txt','w')
& b9 L6 H6 W4 ~for M=1:1:1024/ ]& c- L& Z9 v( W
    T=M-1;
& q& _# s1 c" [% l" U2 Z    AT=(0.1952*T)+1.026; %SDM measure time
4 ^# f7 L" h! [5 Z- z0 R. M0 n    fprintf(fid,'.MEASURE TRAN DIGOUT_t%g find V(D0) AT=%gu',M,AT);: \! E/ Q6 r+ V/ Y5 o4 j, S, z
end
! ?( v$ t% _& G/ H( S/ B3 N試的結果,可得到1024行.MEASURE的指令,我會把他代入hspice程式跑跑看。9 W, }1 j6 f' m: R* }" n. j
想再請問的是:
' l# [: o1 p1 T/ U5 s. T! _- E# R0 I當我使用.MEASURE指令得到數據後,是不是還要在你提供的SNDR&SNR的Matlab程式前加上load指令,例如:* q- t% c+ D9 p& n
load sdm_out.txt -ascii ;%sdm_out.txt is output digital code of SDM
" V4 E# j$ f* X( S& f+ k然後就可算出SNDR及SNR以及畫出圖形了嗎?
, w5 m9 `0 f: F5 h1 |) D- w請指教∼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 09:43 AM , Processed in 0.208012 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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