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.

191 lines
6.1 KiB

//VerilogA for pd,pinapd,veriloga
`include "constants.vams"
`include "disciplines.vams"
module pinapd(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 An = 5.13E9 from [0:inf);
parameter real Bn = 1.95E8 from (-inf:inf);
parameter real Cn = 1 from (-inf:inf);
parameter real Ap = 7.3E9 from [0:inf);
parameter real Bp = 2.2E8 from (-inf:inf);
parameter real Cp = 1 from (-inf: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,Zn,Vp,Zp;
real UA,UWn,UWi,UWp,ULMD;
real UALFn,UALFi,UALFp;
real UNin,UNip,UNd,UNa;
real UUn,UVsn,UFth,UUp,UVsp;
real UDp,UDn,UAn,UBn,UAp,UBp;
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,Iia,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;
UAn = An*1e-6;
UBn = Bn*1e-6;
UAp = Ap*1e-6;
UBp = Bp*1e-6;
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);
// Zn = UAn/exp(pow((UBn/F),Cn));
Zn = exp(ln(UAn)-pow((UBn/F),Cn));
// Zp = UAp/exp(pow((UBp/F),Cp));
Zp = exp(ln(UAp)-pow((UBp/F),Cp));
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(Iia) <+ Cno*V(Npi,Gnd)*(Vn*Zn+Vp*Zp);
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