//VerilogA for laser,qwld,veriloga `include "constants.vams" `include "disciplines.vams" module qwld(Vin,Vlam,Gnd,OpowL,OphaseL,OlamL,OpowR,OphaseR,OlamR); input Vin,Vlam; inout Gnd; output OpowL,OphaseL,OlamL,OpowR,OphaseR,OlamR; electrical Vin,Vlam,Gnd,OpowL,OphaseL,OlamL,OpowR,OphaseR,OlamR,Nin1,Nlight; parameter real Vw = 6e-18 from (0:inf); parameter real Vs = 6e-17 from (0:inf); //parameter real Gws = 0.1; //parameter real Alpha_w = 9.6e-37; //parameter real Alpha_s = 9.12e-36; parameter real tau_s = 6p from (0:inf); parameter real tau_e = 200p from (0:inf); parameter real tau_n = 0.125n from (0:inf); parameter real tau_p = 1p from (0:inf); parameter real Gamma = 0.4 from (0:1]; parameter real xi = 1.5e-23 from (0:inf); parameter real beta = 1e-4 from [0:1]; parameter real g0 = 7.2e-12 from (0:inf); parameter real Nom = 1e24 from (0:inf); parameter real eta = 2 from (0:inf); parameter real Cn = 1 from (0:inf); parameter real Rl = 0.3 from [0:1]; parameter real Rr = 0.3 from [0:1]; parameter real Nr = 3.5 from (0:inf); parameter real L = 500u from (0:inf); real Gws=Vw/Vs; real VT=`P_K*$temperature/`P_Q; //real Gws=Alpha_w/Alpha_s; real Alpha_w=`P_Q*Vw; real Alpha_s=`P_Q*Vs; real Rsch; real Csch; real Cch; real Rch; real Nw,G; real CPL,CPR; real TEMPR=$temperature; branch (Vin,Gnd) RRsch,CCsch; branch (Gnd,Vin) G1; branch (Nin1,Gnd) Gn,Ga,RRgnd; branch (Gnd,Nin1) Gs; branch (Nin1,Nlight) Gst; branch (Gnd,Nlight) Gb; branch (Nlight,Gnd) RRch,CCch; real UAlpha_w,UNom,Ug0,Uxi; analog begin UAlpha_w=Alpha_w*1e18; UNom=Nom*1e-18; Ug0=g0*1e18; Uxi=xi*1e18; Rsch=`P_Q*Gws*tau_s/UAlpha_w/Cn; Csch=UAlpha_w*Cn/`P_Q/Gws; Cch=UAlpha_w; Rch=tau_p/UAlpha_w; Nw=UNom*exp(`P_Q*V(Nin1,Gnd)/(eta*`P_K*TEMPR)); G=Ug0*(Nw-UNom)/(sqrt(Nw/pow(10,24-18))+sqrt(UNom/pow(10,24-18))); CPL=`P_H*`P_C*`P_C*(Rl-1.0)*ln(Rl*Rr)/(2.0*Nr*L*V(Vlam)*(1-Rl+sqrt(Rl/Rr)*(1-Rr)))*(Vs+Vw)*1e18; CPR=`P_H*`P_C*`P_C*(Rr-1.0)*ln(Rl*Rr)/(2.0*Nr*L*V(Vlam)*(1-Rr+sqrt(Rr/Rl)*(1-Rl)))*(Vs+Vw)*1e18; V(RRsch) <+ Rsch*I(RRsch); I(CCsch) <+ Csch*ddt(V(CCsch)); I(G1) <+ tau_n/tau_e*UAlpha_w*Nw/tau_n; I(Gs) <+ V(Vin,Gnd)/Rsch-tau_n/tau_e*UAlpha_w*Nw/tau_n; I(Gn) <+ UAlpha_w*Nw/tau_n; I(Ga) <+ tau_n*ddt(UAlpha_w*Nw/tau_n); V(RRgnd) <+ 1T*I(RRgnd); I(Gst) <+ Gamma*UAlpha_w*G*abs(V(Nlight,Gnd))/(1+Uxi*abs(V(Nlight,Gnd))); I(Gb) <+ beta*UAlpha_w*Nw/tau_n; V(RRch) <+ I(RRch)*Rch; I(CCch) <+ Cch*ddt(V(CCch)); V(OpowL,Gnd) <+ CPL*V(Nlight,Gnd); V(OpowR,Gnd) <+ CPR*V(Nlight,Gnd); V(OphaseL) <+ 0; V(OphaseR) <+ 0; V(OlamL) <+ V(Vlam); V(OlamR) <+ V(Vlam); end endmodule