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