//Written By Mahmood Baraani-Dastjerdi, COSMIC LAB, Columbia University, New York, NY, 10027 // b.mahmood@columbia.edu, 11/23/2016 // The model is optimized and verified for the transistor with size 24 x 4u/60n through measurements. // To change the transistor width change parameter WM (width) and NumF (number of fingers). // It is better to change number of fingers rather than W to avoid errors due to narrow channel effects. // IF the length of the device is not 60nm, parameters are needed to be reoptimized using the MATLAB. // For more information visit "Cosmic.ee.columbia.edu" // Please, reference to our work through "M. B. Dastjerdi and H. Krishnaswamy, "A simplified CMOS FET model using surface potential equations for inter-modulation simulations of passive-mixer-like circuits," 2017 IEEE Radio Frequency Integrated Circuits Symposium (RFIC), Honolulu, HI, USA, 2017, pp. 132-135". `include "constants.vams" `include "disciplines.vams" module MB_VerilogTest(G, B, D, S, Phi_0, Phi_L); inout G, B, D, S; // defining Pins electrical G, B, D, S, Phi_0, Phi_L; // Constant Parameter parameter integer m=1 from (0:255); parameter integer NumF=24 from (0:255); parameter real WM=4e-6 from (0:100e-6); parameter real LM=60e-9 from (0:100e-6); localparam real e0=8.85e-12, q=1.6e-19, ni = 1e16, v_t = 25e-3, DW=2e-9, DL=2e-9, Vfb0=-0.8, e1=2.91, na=4.75e23, tox=4.83e-9, u0=0.267, a0=31.7e-9, Ne=0.703, Vds_Velsat=0.529, E1=1e6, A=10, C_p0=4.58, dj=24.2e-9, CF=0.001, CFB=0.048, Ve=0.842; // Variable Parameters localparam real es=e0*e1, pf=25e-3*ln(na/ni), Cox=es/tox, p0=2*pf+C_p0*v_t, gamma0=sqrt(2*q*es*na)/Cox, L=LM-DL, W=NumF*(WM-DW); real Vds, Vsb, Vdb, Vgb, Vdsx, pb, px, ap, bp, px_xx, temp, px_x, temp2, pv, temp3, Vsb_x, Vsbx; real dBd, dBs, sB, Delta_Ls, Delta_Ld, gamma, Phi_m, Alfa_m, Qb_ave, Qi_ave, Coeff, u, dB; real Coeff_u, Vt, Vds_sat, Vds_eff, Vds_effx, Ids_LC, La, Lp, Leff, Ids_SC, Vfb; analog begin Vds=V(D , S); Vsb=V(S , B); Vdb=V(D , B); Vgb=V(G , B); // Vsb clipping parameters //---------------------------------------------------------------------------- Vdsx=sqrt(pow(Vds,2)+0.01)-0.1; pb=2*pf; px=0.95*pb; ap=2.5e-3*pow(pb,2); bp=2.5e-3*pow(pb,2); px_xx=0.5*sqrt(bp); temp=min(px-px_xx,0); px_x=min(temp,ap); temp2=min(Vsb, Vdb); pv=min(temp2, bp)+px; temp3=min(pv,0); Vsb_x=Vsb-min(temp3,ap)+px_x; Vsbx=Vsb_x+(Vds-Vdsx)/2; //------------------------------------- // Drain Induced Barrier Lowering (applied on the flatband voltage) //--------------------------------------------------------------------------- //real Delta_Vg=CF*Vdsx*(1+CFB*Vsbx); //real Vfb=Vfb0-Delta_Vg; // Charge Sharing Effect //------------------------------------------------- dBd=sqrt(2*es/q/na)*sqrt(p0+Vsb); dBs=sqrt(2*es/q/na)*sqrt(p0+Vdb); dB=dBd/2+dBs/2; Delta_Ls=dj*(-1+sqrt(1+2*dBs/dj)); Delta_Ld=dj*(-1+sqrt(1+2*dBd/dj)); gamma=gamma0*(1-Delta_Ls/L*(1-dBs/2/dB)-Delta_Ld/L*(1-dBd/2/dB)); //------------------------------------------------- Vfb=Vfb0; V(Phi_0) <+ Vgb - Vfb - gamma *sqrt(V(Phi_0)+v_t*exp((V(Phi_0)-2*pf-Vsb)/v_t)); V(Phi_L) <+ Vgb - Vfb - gamma *sqrt(V(Phi_L)+v_t*exp((V(Phi_L)-2*pf-Vdb)/v_t)); Phi_m=V(Phi_0)/2+V(Phi_L)/2; Alfa_m=1+gamma/2/sqrt(Phi_m); // effective Mobility //-------------------------------------------------------------------------- Qb_ave=-1*Cox*gamma*sqrt(Phi_m); Qi_ave=-1*Cox*(Vgb-Vfb-Phi_m)-Qb_ave; Coeff_u=1/(1-a0/es*(Qb_ave+Ne*Qi_ave)); u=u0*Coeff_u; //-------------------------------------------------------------------------- // Saturation Voltage //-------------------------------------------------------------------------- Vt=Vfb+p0+gamma*sqrt(p0+Vsbx); Vds_sat=max(p0-2*pf,(Vgb-Vsbx-Vt)/Alfa_m); //-------------------------------------------------------------------------- Vds_eff= Vds/pow(1+pow(Vds/Vds_sat,A),1/A); Vds_effx=sqrt(pow(Vds_eff,2)+0.01)-0.1; Ids_LC=W/L*u*Cox*((Vgb-Vfb-Phi_m-gamma*sqrt(Phi_m))+(Alfa_m*v_t))*(V(Phi_L)-V(Phi_0)); // Channel Length Modulation //-------------------------------------------------------------------------- La=sqrt(3*tox*dj); Lp = La*ln(1+(Vdsx-Vds_effx)/Ve); Leff=L-Lp; //-------------------------------------------------------------------------- //Apply velocity Satuartion & Channel Length Modulation //-------------------------------------------------------------------------- Coeff=1/0.5/(1+sqrt(1+2*pow(Vds_eff/Vds_Velsat,2)))*L/Leff; Ids_SC=Ids_LC*Coeff; I(D,S)<+Ids_SC; //-------------------------------------------------------------------------- end endmodule