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
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
|