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.

87 lines
2.6 KiB

7 months ago
//VerilogA for pd,msmpd,veriloga
`include "constants.vams"
`include "disciplines.vams"
module msmpd(Vin,Gnd,Ipow,Iphase,Ilam);
parameter real Lg = 3u from (0:inf);
parameter real Se = 3726E-12 from (0:inf);
parameter real Aa = 2757E-12 from (0:inf);
parameter real Ac = 3114E-12 from (0:inf);
parameter real Cf = 0.02 from (0:inf);
parameter real Cc = 0.5 from [0:inf);
parameter real Cno = 1.0E-12 from (0:inf);
parameter real Ci = 0.38 from (0:inf);
parameter real EPSs = 12.9 from (0:inf);
parameter real D = 6u from (0:inf);
parameter real ALFA = 1e10 from [0:inf);
parameter real Un = 5500E-4 from (0:inf);
parameter real Up = 400E-4 from (0:inf);
parameter real Vns = 8.5E4 from (0:inf);
parameter real Vps = 8.5E4 from (0:inf);
parameter real Fth = 4.2E10 from (0:inf);
parameter real Tnr = 0.2n from (0:inf);
parameter real Tpr = 0.65n from (0:inf);
parameter real Cm = 10 from (0:inf);
parameter real Rdark = 9.1E9 from (0:inf);
parameter real Cp = 0.1p from [0:inf);
parameter real Rs = 5 from [0:inf);
parameter real Rgnd = 50 from [0:inf);
input Vin,Ipow,Iphase,Ilam;
output Gnd;
electrical Vin,Gnd,Ipow,Iphase,Ilam,Nin1,Nin2,Npn,Npp;
real HV;
real Go,Rnr,Rpr;
real Ct,Cga,Cgc;
real F,Vp,Vn;
real Fg,Vng,Vpg;
real Rnt,Rpt;
branch (Nin1,Nin2) CCp,CCt,BIp,BIn,RRdark;
branch (Gnd,Npn) BIon;
branch (Npn,Gnd) RRnt,RRnr,CCnon;
branch (Gnd,Npp) BIop;
branch (Npp,Gnd) RRpt,RRpr,CCnop;
analog begin
HV=`P_H*`P_C/V(Ilam);
Go=`P_Q*Ci*(1-exp(-ALFA*D))/HV;
Cga=Cc*Aa*sqrt(Cno*V(Npn,Gnd)*`P_EPS0*EPSs/Se/D/V(Nin1,Nin2));
Cgc=Cc*Ac*sqrt(Cno*V(Npp,Gnd)*`P_EPS0*EPSs/Se/D/V(Nin1,Nin2));
F=Cf*V(Nin1,Nin2)/Lg;
Fg=V(Nin1,Nin2)/Lg;
Vp=Up*F/(1.0+Up*F/Vps);
Vn=(Un*F+Vns*pow(F/Fth,4))/(1+pow(F/Fth,4));
Vpg=Up*Fg/(1.0+Up*Fg/Vps);
Vng=(Un*Fg+Vns*pow(Fg/Fth,4))/(1+pow(Fg/Fth,4));
Ct=Cga*Cgc/(Cga+Cgc);
Rnt=Lg/Vng/Cno;
Rpt=Lg/Vpg/Cno;
Rnr=Tnr/Cno;
Rpr=Tpr/Cno;
V(Vin,Nin1) <+ I(Vin,Nin1)*Rs;
I(CCp) <+ Cp*ddt(V(CCp));
I(CCt) <+ Ct*ddt(V(CCt));
V(RRdark) <+ I(RRdark)*Rdark;
I(BIp) <+ Cm*Cno*V(Npp,Gnd)*Vp/Lg;
I(BIn) <+ Cm*Cno*V(Npn,Gnd)*Vn/Lg;
I(BIon) <+ V(Ipow,Gnd)*Go;
V(RRnt) <+ I(RRnt)*Rnt;
V(RRnr) <+ I(RRnr)*Rnr;
I(CCnon) <+ Cno*ddt(V(CCnon));
I(BIop) <+ V(Ipow,Gnd)*Go;
V(RRpt) <+ I(RRpt)*Rpt;
V(RRpr) <+ I(RRpr)*Rpr;
I(CCnop) <+ Cno*ddt(V(CCnop));
V(Gnd,Nin2) <+ Rgnd*I(Gnd,Nin2);
end
endmodule