Quantcast
Channel: Cadence Custom IC Design Forum
Viewing all articles
Browse latest Browse all 4890

pspice code in spectre.

$
0
0

Hi

I've been trying to implement an infineon power switch model (SPA12N50C3_L1) in virtuoso. I used the NMOS4 from the analoglib for the purpose and I added a model file that i got from infineons website. I also added the command line 'simulator lang=spice ' at the beginning of the code. However it still keeps throwing up errors. I came across another cadence thread where someone had said that this command line would only convert Berkeley spice and not pspice code. I am attaching the unedited code bit below 

simulator lang=spice
**

.SUBCKT SPA12N50C3_L1 drain gate source PARAMS: dVth=0 dRdson=0

.PARAM Rs=3.08m Rg=1.4 Ls=10.4n Ld=3n Lg=8n
.PARAM act=10.159 Inn=7 Unn=10 Rmax=0.38

X1 dd g s Tj Tj cool_500_n_var PARAMS: act={act} dVth={dVth} dR={dRdson} Inn={Inn} Unn={Unn}
+Rmax={Rmax} Rs={Rs} heat=0
L_Ld drain dd {Ld}
R_Ld drain dd 10

L_Ls source lsrs {Ls}
R_Ls source lsrs 10
R_Rs s lsrs {Rs}

L_Lg gate lgrg {Lg}
R_Lg gate lgrg 10
R_Rg lgrg g {Rg}

E1 Tj w VALUE={TEMP}
R1 w 0 1u

.ENDS

**********

**********

.SUBCKT cool_500_n_var dd g s Tj t1 PARAMS: act=1 dVth=0 dR=0 Inn=1 Unn=1 Rmax=1 Rs=0 dC=0 heat=1

.PARAM enable_diode=1

.PARAM fpar22=1.6 fpar2=1 Vth0=3.54 fpar3=5.1m nb=1.2
.PARAM fpar4=0.5 fpar19=-23 fpar6=557 fpar7=207m fpar12=0.5

.PARAM Rd=3 nmu=3.3 Tref=298 fpar30=273 lnIsj=-30.6
.PARAM ndi=1 Rdi=80m nmu2=0.5 ta=1u td=200n
.PARAM fpar17=0.23 ph0=22.15 ph1=37m rpa=160m fpar18=85.8u

.PARAM w0=40 w1=20k w2=22.7 x1=4.729 x2=-3
.PARAM w4=150 w5=10 x3=0.873 x4=-19
.PARAM w8=6 w9=15 x5=26.376 x6=0.72
.PARAM w13=210 w14=-0.12
.PARAM w15=-0.12 w16=120 w17=150 w18=-1 w19=80 w20=100 w21=0.7p w22=3.6p
.PARAM f=105p

.PARAM Vmin=2.64 Vmax=4.44 dCmax=0.33
.PARAM Vth=(Vth0+(Vmax-Vth0)*limit(dVth,0,1))-((Vmin-Vth0)*limit(dVth,-1,0))
.PARAM p0=fpar22*((fpar30/Tref)**nb)*act
.PARAM p1=Unn-Inn*Rs-Vth0
.PARAM Rlim=((SQRT(p1**2-4*fpar2/p0*Inn)-p1)*(1+fpar12*p1/fpar2)/(2*fpar2*Inn)+fpar12/(p0*fpar2)+
+ (Rmax-Rs))/(1+rpa*(Inn/act)**2)
*.PARAM Rlim={(Rmax-(Unn-Vth0-SQRT((Unn-Vth0)**2-4*fpar2*Inn/p0))/(2*fpar2*Inn))/(1+rpa*(Inn/act)**2)}
.PARAM dRd=(Rd/act+if(dVth==0,limit(dR,0,1)*max(Rlim-Rd/act,0),0))
.PARAM bet=fpar22
.PARAM dC1=1+dCmax*limit(dC,0,1)

.PARAM Cox=1p*(w17+w20)*act*dC1
.PARAM Cgs0=f*act*dC1
.PARAM Cox1=(w21*act+w22)*dC1
.PARAM dRdi=Rdi/act

.FUNC fpar25(p,Uee,z1,pp) {if(Uee>pp,(Uee-fpar2*z1)*z1,p*(pp-p)/fpar2*exp((Uee-pp)/p))}
.FUNC fpar28(Uds,fpar29,p,Uee) {bet*(fpar30/fpar29)**nb*fpar25(p,Uee,min(Uds,Uee/(2*fpar2)),min(2*p,p+fpar2*Uds))}
.FUNC fpar27(Udsk,Uds,Ugs,fpar29)
+ {act*sgn(Udsk)*(fpar28(abs(Udsk),fpar29,1/(ph0-ph1*fpar29),Ugs-Vth+fpar3*(fpar29-Tref))+
+ exp(min(fpar19+(abs(Uds)-fpar6-fpar4*(fpar29-Tref))/fpar7,25)))}

.FUNC Isjt(Tj) {exp(min(lnIsj+(Tj/Tref-1)*1.12/(ndi*fpar18*Tj),9))*(Tj/Tref)**0}
.FUNC Idiode(Usd,Tj,Iss) {exp(min(log(Iss)+Usd/(ndi*fpar18*Tj),9))-Iss}
.FUNC Idiod(Usd,Tj) {act*Idiode(Usd,Tj,Isjt(Tj))}

.FUNC Qa(U) {w1/(w0*x2)*(max(U-w2,x1)**x2-x1**x2)+min(U,x1+w2)}
.FUNC Qb(U) {w5/(w4*x4)*(max(U,x3)**x4-x3**x4)+min(U,x3)}
.FUNC Qc(U) {(exp(w14*max(-1,U))-1)/w14}
.FUNC Qd(U) {w9/(w8*x6)*(max(U,x5)**x6-x5**x6)+min(U,x5)}
.FUNC Qe(U) {1/w15*(w16/w17*(exp(min(w15*U,log(w17/w16)))-1)+max(w15*U-log(w17/w16),0))}
.FUNC Qf(U) {1/w18*(w19/w20*(exp(min(w18*U,log(w20/w19)))-1)+max(w18*U-log(w20/w19),0))}

E_Edg d ox VALUE {V(d,g)-((w17*Qe(V(d,g))+w20*Qf(V(d,g))))/(w17+w20)}
C_Cdg ox g {Cox}
C_Cdg1 d g {Cox1}

E_test test1 0 VALUE {Qc(V(d,s))}
R_test test1 0 1

E_Eds d edep VALUE {V(d,s)-(limit(I(V_sense3)/act,-100,100)/1p+w0*Qa(V(d,s))+w13*Qc(V(d,s))
+ +w4*Qb(V(d,s)))/(w0+w4+w13)}
C_Cds edep s {act*(w0+w4+w13)*1p}
E_Eds2 d3 edep2 VALUE {V(d3,s)-Qd(V(d3,s))}
C_Cds2 edep2 s {act*w8*1p}

C_Cgs g s {Cgs0}

G_chan d s VALUE={fpar27((SQRT(1+4*fpar12*V(d,s))-1)/(2*fpar12),V(d,s),V(g,s),fpar30+limit(V(Tj),-200,350))}
E_RMos d1 d VALUE={(I(V_I)-I(V_Idio))*(fpar17*dRd+(1-fpar17)*dRd*((limit(V(T1),-200,999)+fpar30)/Tref)**nmu)
+ *(1+rpa*(I(V_I)/act)**2)}
V_I dd d1 0
G_diode s d2 VALUE={Idiod(V(s,d2),fpar30+limit(V(Tj),-200,499))}
E_Rdio d1 d3 VALUE={I(V_Idio)*dRdi*((limit(V(Tj),-200,999)+fpar30)/Tref)**nmu2}
V_Idio d3 d2 0

L_L001 a fpar2 {td/(ta+td)}
R_R001 a b {1/ta}
V_sense3 fpar2 0 0
E_E001 b 0 VALUE {enable_diode*I(V_Idio)}

R1 g s 1G
Rd01 d s 500Meg
Rd02 d3 s 500Meg
Rd03 d1 d 1k
Rd04 d2 d3 1k

G_Ptot_channel 0 Tj VALUE {heat*LIMIT(V(d,s)*I(V_I),0,100k) }
G_Ptot_Epi 0 t1 VALUE {heat*LIMIT(V(dd,d)*I(V_I),0,100k) }

.ENDS
*$


*********************************************************************************************************************

I edited it a little and changed to this, 

simulator lang=spice


.SUBCKT SPA12N50C3_L1 drain gate source $PARAMS: dVth=0 dRdson=0

.PARAM Rs=3.08m Rg=1.4 Ls=10.4n Ld=3n Lg=8n
.PARAM act=10.159 Inn=7 Unn=10 Rmax=0.38

X1 dd g s Tj Tj cool_500_n_var $PARAMS: act={act} dVth={dVth} dR={dRdson} Inn={Inn} Unn={Unn}
+Rmax={Rmax} Rs={Rs} heat=0
L_Ld drain dd {Ld}
R_Ld drain dd 10

L_Ls source lsrs {Ls}
R_Ls source lsrs 10
R_Rs s lsrs {Rs}

L_Lg gate lgrg {Lg}
R_Lg gate lgrg 10
R_Rg lgrg g {Rg}

E1 Tj w VALUE={TEMP}
R1 w 0 1u

.ENDS

**********
.SUBCKT cool_500_n_var dd g s Tj t1 PARAMS: act=1 dVth=0 dR=0 Inn=1 Unn=1 Rmax=1 Rs=0 dC=0 heat=1

.PARAM enable_diode=1

.PARAM fpar22=1.6 fpar2=1 Vth0=3.54 fpar3=5.1m nb=1.2
.PARAM fpar4=0.5 fpar19=-23 fpar6=557 fpar7=207m fpar12=0.5

.PARAM Rd=3 nmu=3.3 Tref=298 fpar30=273 lnIsj=-30.6
.PARAM ndi=1 Rdi=80m nmu2=0.5 ta=1u td=200n
.PARAM fpar17=0.23 ph0=22.15 ph1=37m rpa=160m fpar18=85.8u

.PARAM w0=40 w1=20k w2=22.7 x1=4.729 x2=-3
.PARAM w4=150 w5=10 x3=0.873 x4=-19
.PARAM w8=6 w9=15 x5=26.376 x6=0.72
.PARAM w13=210 w14=-0.12simulator lang=spice
.PARAM w15=-0.12 w16=120 w17=150 w18=-1 w19=80 w20=100 w21=0.7p w22=3.6p
.PARAM f=105p

.PARAM Vmin=2.64 Vmax=4.44 dCmax=0.33
.PARAM Vth=(Vth0+(Vmax-Vth0)*0)-((Vmin-Vth0)*(0))
.PARAM p0=fpar22*((fpar30/Tref)**nb)*(act)
.PARAM p1=Unn-Inn*Rs-Vth0
.PARAM Rlim=((SQRT(p1**2-4*fpar2/p0*Inn)-p1)*(1+fpar12*p1/fpar2)/(2*fpar2*Inn)+fpar12/(p0*fpar2)+
+ (Rmax-Rs))/(1+rpa*(Inn/act)**2)
*.PARAM Rlim={(Rmax-(Unn-Vth0-SQRT((Unn-Vth0)^2-4*fpar2*Inn/p0))/(2*fpar2*Inn))/(1+rpa*(Inn/act)^2)}
.PARAM dRd=(Rd/(act)+if(dVth==0,0*max(Rlim-Rd/act,0),0))
.PARAM bet=fpar22
.PARAM dC1=1+dCmax*0

.PARAM Cox=1p*(w17+w20)*(act)*dC1
.PARAM Cgs0=f*(act)*dC1
.PARAM Cox1=(w21*act+w22)*dC1
.PARAM dRdi=Rdi/act

fpar25(p,Uee,z1,pp) = 'if(Uee>pp,(Uee-fpar2*z1)*z1,p*(pp-p)/fpar2*exp((Uee-pp)/p))'
fpar28(Uds,fpar29,p,Uee)= 'bet*(fpar30/fpar29)**nb*fpar25(p,Uee,min(Uds,Uee/(2*fpar2)),min(2*p,p+fpar2*Uds))'
fpar27(Udsk,Uds,Ugs,fpar29) =
+ '(act)*sgn(Udsk)*(fpar28(abs(Udsk),fpar29,1/(ph0-ph1*fpar29),Ugs-Vth+fpar3*(fpar29-Tref))+
+ exp(min(fpar19+(abs(Uds)-fpar6-fpar4*(fpar29-Tref))/fpar7,25)))'


Idiode(Usd,Tj,Iss) = 'exp(min(log(Iss)+Usd/(ndi*fpar18*Tj),9))-Iss'
Idiod(Usd,Tj) = '(act)*Idiode(Usd,Tj)'

Qa(U) = '(w1/(w0*x2)*(max(U-w2,x1)**x2-x1**x2)+min(U,x1+w2))'
Qb(U) = 'w5/(w4*x4)*(max(U,x3)^(x4)-x3^(x4))+min(U,x3)'
Qc(U) = (exp(w14*max(-1,U))-1)/w14
Qd(U) = w9/(w8*x6)*(max(U,x5)**x6-x5**x6)+min(U,x5)
Qe(U) = 1/w15*(w16/w17*(exp(min(w15*U,log(w17/w16)))-1)+max(w15*U-log(w17/w16),0))
Qf(U) = 1/w18*(w19/w20*(exp(min(w18*U,log(w20/w19)))-1)+max(w18*U-log(w20/w19),0))

E_Edg d ox VALUE {V(d,g)-((w17*Qe(V(d,g))+w20*Qf(V(d,g))))/(w17+w20)}
C_Cdg ox g {Cox}
C_Cdg1 d g {Cox1}

E_test test1 0 VALUE {Qc(V(d,s))}
R_test test1 0 1

E_Eds d edep VALUE {V(d,s)-(limit(I(V_sense3)/act,-100,100)/1p+w0*Qa(V(d,s))+w13*Qc(V(d,s))
+ +w4*Qb(V(d,s)))/(w0+w4+w13)}
C_Cds edep s {(act)*(w0+w4+w13)*1p}
E_Eds2 d3 edep2 VALUE {V(d3,s)-Qd(V(d3,s))}
C_Cds2 edep2 s {(act)*w8*1p}

C_Cgs g s {Cgs0}

G_chan d s VALUE={fpar27((SQRT(1+4*fpar12*V(d,s))-1)/(2*fpar12),V(d,s),V(g,s),fpar30+limit(V(Tj),-200,350))}
E_RMos d1 d VALUE= '(I(V_I)-I(V_Idio))*(fpar17*dRd+(1-fpar17)*dRd*((limit(V(T1),-200,999)+fpar30)/Tref)**nmu)
+ *(1+rpa*(I(V_I)/act)**2)'
V_I dd d1 0
G_diode s d2 VALUE={Idiod(V(s,d2),fpar30+limit(V(Tj),-200,499))}
E_Rdio d1 d3 VALUE={I(V_Idio)*dRdi*((limit(V(Tj),-200,999)+fpar30)/Tref)**nmu2}
V_Idio d3 d2 0

L_L001 a fpar2 {(td)/(ta+td)}
R_R001 a b {1/ta}
V_sense3 fpar2 0 0
E_E001 b 0 VALUE {enable_diode*I(V_Idio)}

R1 g s 1G
Rd01 d s 500Meg
Rd02 d3 s 500Meg
Rd03 d1 d 1k
Rd04 d2 d3 1k

G_Ptot_channel 0 Tj VALUE {heat*LIMIT(V(d,s)*I(V_I),0,100k) }
G_Ptot_Epi 0 t1 VALUE {heat*LIMIT(V(dd,d)*I(V_I),0,100k) }

.ENDS

*$


**************************************************

There are some mistakes in the edited code especially where i've replaced the {} with '' . But I'm mostly facing errors in the lines I've put it in italics and not bold. I hope you can help me with this issue. 


Viewing all articles
Browse latest Browse all 4890

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>