// VerilogA for photodiode, photo_SPICE, veriloga `include "constants.vams" `include "disciplines.vams" module photo_SPICE(Anode,Cathode,Light); inout Anode, Cathode,Light; electrical Anode, Cathode,Light; //In m parameter real xph=1e-6; parameter real xjm=1e-6; // In cm parameter real xphi=1e-4; parameter real xj=1e-4; parameter real xW=50e-4; //Transmition coefficient parameter real Tx=0.5; //Semicondutor parameters parameter real Na=1.3e15; parameter real Nam=1.3e21; parameter real Nd=1.0e20; parameter real Ndm=1.0e26; parameter real ni=9.65e9; parameter real nim=9.65e15; // h+, e- lifetime parameter real ton=200e-6; parameter real top=0.2e-6; //h+ diffusion coefficient in cm2/s parameter real Dp=12; //e- diffusion coefficient in cm2/s parameter real Dn=36; // Surface recombination in cm/s parameter real Sp=10; parameter real Sn=4e4; //Relative dielectric coefficient of silicon parameter real Ks=11.8; //Necessary parameters parameter real h=6.6260696957e-34; parameter real c=3.0e8; parameter real lambda = 500e-9; parameter real T=298.0; parameter real er=12.0; parameter real eo=8.854187817e-12; parameter real k=1.3806488e-23; //e- charge parameter real q=1.60217657e-19; //Photodiode emission coefficient parameter real N=1.35; //Reverse bias saturation current parameter real Is=1e-14; //Dark current equivalent resitance parameter real Rdark=1e8; parameter real alpha=760; //Variables real phio,Area,mu,En,Vbi,W,Wcm,Vt; real pno,npo,Ln,Lp; real kp,kn; real AA,BB,CC,DD,EE,FF,GG,HH,II,JJ,KK,LL,MM,NN; real OO,PP,QQ,RR,SS,TT,UU,VV,WW; real C1, C2, C3, C4,Cpd; real A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11; real B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11; real Iaa,Id,Icpd; real H1, H2; real jpsub,jndop,jdepl; real Popt; real Vbias; branch (Anode,Cathode) b1; analog begin Popt=V(Light); //Depletion width Vt=k*T/q; Id=Is*(exp((-V(b1))/(N*$vt))-1); Vbi=Vt*ln((Na*Nd)/(ni*ni)); W=sqrt((Vbi+V(b1))*(1.0/Ndm+1.0/Nam)*(eo*er)/q); Wcm=W*100; //Depletion capacitance calculation GG=(Ks*eo)/(W); HH=xph*xph; Cpd=GG*HH; Icpd=Cpd*ddt(V(b1)); // //Phi0 and Absorption lengths En=(h*c)/(lambda); npo=Ndm; pno=(nim*nim)/Ndm; Ln=sqrt(Dn*ton); Lp=sqrt(Dp*top); phio=(Popt*Tx)/(En*10000); kp=(phio*alpha*top)/(1-alpha*alpha*Lp*Lp); kn=(phio*alpha*ton)/(1-alpha*alpha*Ln*Ln); //Jndop A1=alpha*Ln+(Sn*Ln)/Dn; A2=1+(Sn*Ln)/Dn; A3=1-(Sn*Ln)/Dn; H1=A1/A2; H2=A3/A2; A4=(H1*(exp(xj/Ln)))/H2; A5=exp((-xj)/Ln); A6=(exp(xj/Ln))/H2; A7=exp((-alpha)*xj); C3=((-kn)*(A7+A4))/(A5+A6); A8=H1*(exp((-xj)/Ln)); A9=H2*(exp((-xj)/Ln)); A10=exp(xj/Ln); A11=exp((-alpha)*xj); C4=((-kn)*(A11-A8))/(A10+A9); AA=(-kn)*alpha*(exp((-alpha)*xj)); BB=(C3*(exp((-xj)/Ln)))/(Ln); CC=(C4*(exp(xj/Ln)))/(Ln); jndop=q*Dn*(AA-BB+CC); //Jpsub B1=alpha*Lp-(Sp*Lp)/Dp; B2=1+(Sp*Lp)/Dp; B3=1-(Sp*Lp)/Dp; B4=kp*(exp((-alpha)*(xj+Wcm)))*(exp(-(xj+Wcm)/Lp)); B5=kp*(exp((-xW)*(alpha+1/Lp))); B6=exp(((-2)*xW)/Lp); B7=exp(((-2)*(xj+Wcm))/Lp); C1=((-B4)*B2+(-B1)*B5)/(B6*B3+B7*B2); B8=kp*(exp((-alpha)*(xj+Wcm)))*(exp((xj+Wcm)/Lp)); B9=kp*(exp((-xW)*(alpha-1/Lp))); B10=exp((2*xW)/Lp); B11=exp((2*(xj+Wcm))/Lp); C2=((-B8)*B3+B9*B1)/(B11*B3+B10*B2); DD=(-kp)*alpha*(exp((-alpha)*(xj+Wcm))); EE=(C1*(exp((-(xj+Wcm))/Lp)))/(Lp); FF=(C2*(exp((xj+Wcm)/Lp)))/(Lp); jpsub=q*Dp*(DD-EE+FF); //Jdepl jdepl=q*phio*(exp(-alpha*xj))*(1-(exp(-alpha*Wcm))); // Photogenerated current Iaa=xphi*xphi*(jpsub+jdepl+jndop); I(b1)<+ Iaa; I(b1)<+ -Id; I(b1)<+ -V(b1)/Rdark; I(b1)<+ -Icpd; end endmodule