//VerilogA for laser,eml,veriloga `include "constants.vams" `include "disciplines.vams" `define MAX_ARRAY 1000 module eml(Vin,Vlam,Vsig1,Vsig2,Opow,Ophase,Olam,Gnd); parameter real L = 300u from [0:inf); parameter real W = 1.5u from [0:inf); parameter real D = 0.2u from [0:inf); parameter real GAM = 0.3 from [0:1); parameter real T = 10n from [0:inf); parameter real BEATsp = 5e-5 from [0:inf); parameter integer ID = 0 from [0:1]; parameter real G0 = 25000 from [0:inf); parameter real Ntr = 1e24 from [0:inf); parameter real EPS = 6e-23 from [0:inf); parameter real B = 1e-16 from [0:inf); parameter real A = 7.5E-41 from [0:inf); parameter real Rl = 1e-8 from [0:1); parameter real ALFA0 = 5000 from [0:inf); parameter real Q1 = 1.9998 from [0:inf); parameter real Q2 = 1.4391E-4 from [0:inf); parameter real Rat = 1 from [0:inf); parameter real Ng = 3.6 from [0:inf); parameter real N0 = 6.5e13 from [0:inf); parameter real Vbi = 1.13 from [0:inf); parameter real EIT = 2 from [0:inf); parameter real Rs = 1E-5 from [0:inf); parameter real Cp = 0p from [0:inf); parameter real Rd = 1E15 from [0:inf); parameter real Csc0 = 0p from [0:inf); parameter real Gam_c = 0 from (-inf:inf); parameter integer tau_L = 6 from [1:inf); parameter integer num_carriler = 2 from [1:inf); parameter integer num_voltage = 6 from [1:inf); //TODO: file for multinomial coefficients parameter string tau_file = "./tau_mat.in"; parameter string alpha_file = "./alpha_mat.in"; parameter string gamma_file = "./gamma_mat.in"; //Use LF!!! input Vin,Vlam,Vsig1,Vsig2; output Opow,Ophase,Olam; inout Gnd; electrical Vin,Vlam,Vsig1,Vsig2,Opow,Ophase,Olam,Gnd; electrical Ns_eam,Nph_eam; electrical Nin1,Ns,Nph; real Vcalc; real Gamma=0,Alpha=0; real tau=0; real opow,ophase; integer file_tau,file_alpha,file_gamma; integer i,j; real f=1e-18; real readfile=0; real tau_array[0:`MAX_ARRAY]; real alpha_array[0:`MAX_ARRAY]; real gamma_array[0:`MAX_ARRAY]; real VT=`P_K*$temperature/`P_Q; real Vact; real Cg; real CPL,Tph,QV,Cph,Rph; real Cd,Csc; real N,G; real opow_laser,ophase_laser; real UL,UW,UD; real UN0,UG0,UNtr,UEPS; real UA,UB,UALFA0,ULAMBDA,ULSPEED,UQ2; branch (Gnd,Ns_eam) Cs,Is; branch (Ns_eam,Gnd) It; branch (Gnd,Nph_eam) Cph_eam,Iph; branch (Nin1,Gnd) R2,C1,C2,C3,B1,B2,B3,B4; branch (Gnd,Ns) B5,B6,R3,C4; branch (Gnd,Nph) B7,C5; analog initial begin UL=L*1e6; UW=W*1e6; UD=D*1e6; UG0=G0*1e-6; UN0=N0*1e-18; UNtr=Ntr*1e-18; UEPS=EPS*1e18; UA=A*1e36; UB=B*1e18; UALFA0=ALFA0*1e-6; ULSPEED=`P_C*1e6; UQ2=Q2*1e6; Vact=UL*UW*UD; Cg=ULSPEED/Ng; Tph=Ng/(ULSPEED*(UALFA0+Q1/UQ2)); QV=`P_Q*Vact; Cph=QV; Rph=Tph/QV; end analog begin ULAMBDA=V(Vlam)*1e6; CPL=`P_H*Cg*Vact*Rat*ULSPEED*(1-Rl)/ULAMBDA/UQ2; N=UN0*(exp(V(Nin1,Gnd)/EIT/VT)-1.0); if (N