//VerilogA for amp,soa,veriloga `include "constants.vams" `include "disciplines.vams" module soa(Ipow,Iphase,Ilam,Opow,Ophase,Olam,Vinj,Gnd); parameter real length = 500e-6 from (0:1e-3]; parameter real width = 3e-6 from (0:50e-6]; parameter real height = 80e-9 from (0:5e-6]; parameter real gamma = 0.15 from (0:1]; parameter real alpha_s = 4000 from (0:5e4]; parameter real dg = 2.78e-20 from (0:50e-20]; parameter real Ntr = 1.4e24 from (0:5e25]; parameter real alpha = 5.0 from [-20:20]; parameter real A = 1.43e8 from [0:1e11]; parameter real B = 1e-16 from (0:1e-13]; parameter real C = 3e-41 from (0:1e-37]; input Ipow,Iphase,Ilam,Vinj; output Opow,Ophase,Olam; inout Gnd; electrical Ipow,Iphase,Ilam,Vinj,Opow,Ophase,Olam,Gnd; electrical Na; real eir,eii,soar,soai,eor,eoi; real E_in,ph_in; real g,gtot,Pav,N; real Vsoa; real freq; branch(Gnd,Na) Iin; branch(Na,Gnd) C1,Ra,Ib,Ic,Iav; analog initial begin N=3e24; end analog begin freq=`P_C/V(Ilam); Vsoa=length*width*height; N=V(Na)/(`P_Q*Vsoa); g=dg*(N-Ntr); gtot=gamma*g-alpha_s; Pav=V(Ipow)*(exp(gtot*length)-1)/(gtot*length); I(Iin) <+ I(Vinj); I(C1) <+ ddt(V(C1)); I(Ra) <+ A*V(Ra); I(Ib) <+ `P_Q*Vsoa*B*pow(N,2); I(Ic) <+ `P_Q*Vsoa*C*pow(N,3); I(Iav) <+ `P_Q*gamma*g*Pav*length/(`P_H*freq); E_in=sqrt(V(Ipow)); ph_in=V(Iphase)/360*2*`M_PI; eir=E_in*cos(ph_in); eii=E_in*sin(ph_in); soar=exp((gamma*g*length-alpha_s*length)/2)*cos(alpha*gamma*g*length/2); soai=exp((gamma*g*length-alpha_s*length)/2)*sin(alpha*gamma*g*length/2); eor=soar*eir-soai*eii; eoi=soai*eir+soar*eii; V(Opow) <+ eor**2+eoi**2; V(Ophase) <+ atan2(eoi,eor)*360/(2*`M_PI); V(Olam) <+ V(Ilam); end endmodule