Verilog-A release version.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

176 lines
5.4 KiB

//VerilogA for pd,pinpd,veriloga
`include "constants.vams"
`include "disciplines.vams"
module pinpd(Vin,Ipow,Iphase,Ilam,Gnd);
parameter real Idi = 1 from [0:1];
parameter real A = 12000E-12 from (0:inf);
parameter real Wn = 2u from (0:inf);
parameter real Wi = 4.2u from (0:inf);
parameter real Wp = 2u from (0:inf);
parameter real R = 0.35 from (0:1);
parameter real ALFn = 0.01 from (0:inf);
parameter real ALFi = 3000 from (0:inf);
parameter real ALFp = 3000 from (0:inf);
parameter real Vbi = 0.8 from (0:inf);
parameter real Nin = 3.3E12 from (0:inf);
parameter real Nip = 7.3E17 from (0:inf);
parameter real Nd = 5E24 from (0:inf);
parameter real Na = 5E24 from (0:inf);
parameter real Un = 1.05 from (0:inf);
parameter real Vsn = 1E5 from (0:inf);
parameter real Fth = 350000 from (0:inf);
parameter real Up = 0.03 from (0:inf);
parameter real Vsp = 1E5 from (0:inf);
parameter real Tp = 1n from (0:inf);
parameter real Tn = 0.2n from (0:inf);
parameter real Tnr = 0.2n from (0:inf);
parameter real Dp = 5.2E-4 from (0:inf);
parameter real Dn = 260E-4 from (0:inf);
parameter real EPSs = 12 from (0:inf);
parameter real Eg = 0.75 from (0:inf);
parameter real Mc = 0.041 from (0:inf);
parameter real GAM = 1.1 from (0:inf);
parameter real Rd = 1e10 from (0:inf);
parameter real Cs = 1.0p from (0:inf);
parameter real Rs = 5 from [0:inf);
parameter real Cno = 1e-12 from (0:inf);
parameter real Rgnd = 50 from [0:inf);
input Vin,Ipow,Iphase,Ilam;
inout Gnd;
electrical Vin,Ipow,Iphase,Ilam,Gnd;
electrical Nvin,Ngnd,Npn,Npp,Npi;
real PLANCK2PI=`P_H/`M_TWO_PI;
real m0=9.10938356E-31;
real Np0,Pn0,Ln,Lp,SIT1,SIT2,HV;
real EAWn,EAWp,EAWi;
real Vop,Voi,Von;
real Rp,Rn,Rnr;
real CHPN,SHPN,CHNP,SHNP;
real Rnd,Rpd,In0,Ip0,Ln2,ALFp2,Lp2,ALFn2;
real BEATn0,BEATn,BEATp0,BEATp,Cj;
real Rnt,Tnt,F,LMD;
real Vn,Vp;
real UA,UWn,UWi,UWp,ULMD;
real UALFn,UALFi,UALFp;
real UNin,UNip,UNd,UNa;
real UUn,UVsn,UFth,UUp,UVsp;
real UDp,UDn;
real ULSPEED,UEPS0;
branch (Nvin,Ngnd) CCs,CCj,RRd,Ii,Id,Ip;
branch (Gnd,Npn) IVN;
branch (Npn,Gnd) CCnoN,RRn,Iin;
branch (Gnd,Npp) IVP;
branch (Npp,Gnd) CCnoP,RRp,Iip;
branch (Gnd,Npi) IVI,Iini;
branch (Npi,Gnd) CCnoI,RRnr,Iii;
analog begin
LMD=V(Ilam);
UA=A*1e12;
UWn=Wn*1e6;
UWi=Wi*1e6;
UWp=Wp*1e6;
ULMD=LMD*1e6;
UALFn=ALFn*1e-6;
UALFi=ALFi*1e-6;
UALFp=ALFp*1e-6;
UNin=Nin*1e-18;
UNip=Nip*1e-18;
UNd=Nd*1e-18;
UNa=Na*1e-18;
UUn=Un*1e12;
UVsn=Vsn*1e6;
UFth=Fth*1e-6;
UUp=Up*1e12;
UVsp=Vsp*1e6;
UDp=Dp*1e12;
UDn=Dn*1e12;
ULSPEED=`P_C*1e6;
UEPS0=`P_EPS0*1e-6;
Np0=UNip*UNip/UNa;
Pn0=UNin*UNin/UNd;
Ln=sqrt(UDn*Tn);
Lp=sqrt(UDp*Tp);
SIT1=pow(`P_Q,3)*sqrt(2*Mc*m0/(Eg*`P_Q))/(4*`M_PI*pow(PLANCK2PI,2));
SIT2=GAM*sqrt(Mc*m0*(Eg*`P_Q))/(`P_Q*PLANCK2PI)*(Eg*`P_Q);
// SIT1=sqrt(Mc/Eg)*3.159E4;
// SIT2=GAM*sqrt(Mc*Eg)*Eg*3.623E9;
HV=`P_H*ULSPEED/ULMD;
EAWn=exp(-UALFn*UWn);
EAWp=exp(-UALFp*UWp);
EAWi=exp(-UALFi*UWi);
Ln2=Ln*Ln;
Lp2=Lp*Lp;
ALFn2=UALFn*UALFn;
ALFp2=UALFp*UALFp;
CHPN=cosh(UWp/Ln);
SHPN=sinh(UWp/Ln);
CHNP=cosh(UWn/Lp);
SHNP=sinh(UWn/Lp);
BEATn0=(`P_Q*(1-R)*UALFp*Ln2/HV/(1.0-ALFp2*Ln2))*((CHPN+1.0)/(Ln*SHPN)+(EAWp-1.0)/(UALFp*Ln2*(CHPN-1.0))-UALFp);
BEATp0=(`P_Q*(1-R)*UALFn*Lp2/HV/(1.0-ALFn2*Lp2))*((CHNP+1.0)*EAWn/Lp/SHNP+(EAWn-1.0)/(UALFn*Lp2*(CHNP-1.0))+UALFn*EAWn);
if (Idi > 0) begin
Vop=`P_Q*(1-R)*(1.0-EAWn)/HV;
Voi=`P_Q*(1-R)*(1.0-EAWi)*EAWn/HV;
Von=`P_Q*(1-R)*(1.0-EAWp)*EAWn*EAWi/HV;
BEATn=BEATn0*EAWn*EAWi;
BEATp=BEATp0;
end
else begin
Vop=`P_Q*(1-R)*(1.0-EAWn)*EAWp*EAWi/HV;
Voi=`P_Q*(1-R)*(1.0-EAWi)*EAWp/HV;
Von=`P_Q*(1-R)*(1.0-EAWp)/HV;
BEATn=BEATn0;
BEATp=BEATp0*EAWp*EAWi;
end
Rp=Tp/Cno;
Rn=Tn/Cno;
Rnr=Tnr/Cno;
Rnd=Rn*(CHPN-1.0);
Rpd=Rp*(CHNP-1.0);
In0=(`P_Q/Tn)*UA*Np0*Ln*(CHPN+1.0)/SHPN;
Ip0=(`P_Q/Tp)*UA*Pn0*Lp*(CHNP+1.0)/SHNP;
Cj=EPSs*UEPS0*UA/UWi;
F=(V(Nvin,Ngnd)+Vbi)/UWi;
Vn=(UUn*F+UVsn*(pow((F/UFth),4)))/(1.0+(pow((F/UFth),4)));
Vp=UUp*F/(1.0+UUp*F/UVsp);
Tnt=UWi/Vn;
Rnt=Tnt/Cno;
V(Vin,Nvin) <+ I(Vin,Nvin)*Rs;
I(CCs) <+ ddt(V(CCs))*Cs;
I(CCj) <+ ddt(V(CCj))*Cj;
V(RRd) <+ I(RRd)*Rd;
I(Id) <+ SIT1*1E-6*UA*V(Id)*(V(Id)+Vbi)*exp(-SIT2*1E-6*UWi/(V(Id)+Vbi))/UWi;
I(Ii) <+ V(Npi,Gnd)/Rnt;
I(Ip) <+ V(Npp,Gnd)/Rpd+BEATp*V(Ipow,Gnd)+Ip0;
I(IVP) <+ V(Ipow,Gnd)*Vop;
I(CCnoP) <+ ddt(V(CCnoP))*Cno;
V(RRp) <+ I(RRp)*Rp;
I(Iip) <+ V(Npp,Gnd)/Rpd+BEATp*V(Ipow,Gnd)+Ip0;
I(IVI) <+ V(Ipow,Gnd)*Voi;
I(CCnoI) <+ ddt(V(CCnoI))*Cno;
I(Iini) <+ V(Npn,Gnd)/Rnd+BEATn*V(Ipow,Gnd)+In0;
V(RRnr) <+ I(RRnr)*Rnr;
I(Iii) <+ V(Npi,Gnd)/Rnt;
I(IVN) <+ V(Ipow,Gnd)*Von;
I(CCnoN) <+ ddt(V(CCnoN))*Cno;
V(RRn) <+ I(RRn)*Rn;
I(Iin) <+ V(Npn,Gnd)/Rnd+BEATn*V(Ipow,Gnd)+In0;
V(Gnd,Ngnd) <+ Rgnd*I(Gnd,Ngnd);
end
endmodule