nmos1

Download MATLAB and LTSpice files: nmos.zip

clear
load spice
d = N1u();
disp(d)
     name: 'N_1u'
      TOX: 2.0000e-008
     NSUB: 1.0000e+017
    GAMMA: 0.5000
      PHI: 0.7000
      VTO: 0.8000
    DELTA: 3
       UO: 650
      ETA: 3.0000e-006
    THETA: 0.1000
       KP: 1.2000e-004
     VMAX: 100000
    KAPPA: 0.3000
      RSH: 0
      NFS: 1.0000e+012
      TPG: 1
       XJ: 5.0000e-007
       LD: 1.0000e-007
     CGDO: 2.0000e-010
     CGSO: 2.0000e-010
     CGBO: 1.0000e-010
       CJ: 4.0000e-004
       PB: 1
       MJ: 0.5000
     CJSW: 3.0000e-010
     MJSW: 0.5000

VSB = 0;
VGS = 2;
VT = d.VTO;


e0 = 8.85e-12;
eox = 3.8*e0;
COX  = eox/d.TOX;

us = d.UO/(1+d.THETA*abs(VGS-VT));
k = us*COX*1e-4; % contains conversion from m^2 to cm^2
disp('calculate KP');
disp(k)
disp('given KP');
disp(d.KP)
calculate KP
  9.7587e-005

given KP
  1.2000e-004

L = 2e-6;
W = 10e-6;

Leff = L - 2*d.LD;

COX = eox/d.TOX;
sigd = (8.15e-22)*d.ETA/(COX*Leff^3);
disp('sigma d');
disp(sigd)
sigma d
  2.4932e-007

beta = k*W/Leff;

FS = 1;
FB = d.GAMMA*FS;


VDsat = (VGS-VT)/(1+FB);

VDS = linspace(0,5,100);
%sigd = 8e-3;
idx = find(VDS<VDsat);
v = VDS(idx);
Vt = VT - sigd*v;
Id = beta*((VGS-Vt).*v - (1+FB)*v.^2/2);
idx = find(VDS>=VDsat);
v = VDS;
Vt = VT - sigd*VDS(idx);
Id(idx) = 0.5*beta*(VGS-Vt).^2/(1+FB);

plot(spice.vds,spice.data(:,1)*1e3,'--',v,Id*1e3);
xlabel('V_{DS} (V)');
ylabel('I_d (mA)');