184 lines
6.2 KiB
Matlab
184 lines
6.2 KiB
Matlab
clear all;
|
|
|
|
% Physical constants in MKS units
|
|
|
|
hbar = 1.054e-34;
|
|
q = 1.602e-19;
|
|
epsilon_0 = 8.854e-12;
|
|
epsilon_r = 4;
|
|
mstar = 0.25*9.11e-31;
|
|
|
|
% MOSFET dimensions in meters
|
|
|
|
W = 1.0e-6;
|
|
L = 10.0e-9;
|
|
tox = 1.5e-9;
|
|
|
|
% Capacitances and capacitance parameters
|
|
|
|
CG = epsilon_r*epsilon_0*W*L/tox;
|
|
CS = 0.05*CG;
|
|
CD = 0.05*CG;
|
|
CE = CG + CS + CD;
|
|
alpha_G = CG / CE;
|
|
alpha_D = CD / CE;
|
|
alpha_S = (1 - alpha_G - alpha_D);
|
|
|
|
% Energy parameters in eV
|
|
|
|
kBT = 0.025;
|
|
U0 = q/CE;
|
|
|
|
% Energy grid in eV, from -1 eV to 1 eV
|
|
|
|
NE = 501;
|
|
E = linspace(-1,1,NE);
|
|
dE = E(2) - E(1);
|
|
|
|
% Escape velocity [m/s] and gamma values [eV]
|
|
|
|
vR = 1e5;
|
|
gamma_1 = hbar*vR/(q*L);
|
|
gamma_2 = gamma_1;
|
|
gamma = gamma_1 + gamma_2;
|
|
|
|
% Step-like density of states, stepping from 0 to a finite value
|
|
% at an energy of 0 eV
|
|
|
|
D0 = mstar*q*W*L/(pi*hbar*hbar);
|
|
D = D0*[zeros(1,251) ones(1,250)];
|
|
|
|
% Equilibrium Fermi level in eV
|
|
|
|
mu = -0.2;
|
|
|
|
% Reference number of channel electrons
|
|
|
|
f0 = 1./(1+exp((E - mu)./kBT));
|
|
N0 = dE*sum(D.*f0);
|
|
|
|
% Voltage values to consider for the final plots
|
|
|
|
NV = 61;
|
|
VV = linspace(0,0.6,NV);
|
|
|
|
% Loop over voltage values and compute number of electrons and current
|
|
% for each voltage value in a self-consistent manner
|
|
|
|
for VG = [0.25 0.5]
|
|
|
|
for count = 1:NV
|
|
|
|
% Set terminal voltages
|
|
|
|
VD = VV(count);
|
|
VS = 0;
|
|
|
|
% Values of mu1 and mu2; notice that the usual factor of q multiplying
|
|
% the voltages is omitted, because in this code, energy is in eV
|
|
|
|
mu1 = mu - VS;
|
|
mu2 = mu - VD;
|
|
|
|
% Value of Laplace potential in eV
|
|
|
|
UL = - (alpha_G*VG) - (alpha_D*VD) - (alpha_S*VS);
|
|
|
|
% Initial value of Poisson part in eV
|
|
|
|
UP = 0;
|
|
|
|
% Iterate until self-consistent potential is achieved by monitoring
|
|
% the Poisson part (the Laplace part does not change)
|
|
|
|
dUP = 1;
|
|
while dUP > 1e-6
|
|
|
|
% Compute source and drain Fermi functions
|
|
|
|
f1 = 1./(1+exp((E + UL + UP - mu1)./kBT));
|
|
f2 = 1./(1+exp((E + UL + UP - mu2)./kBT));
|
|
|
|
% Compute number of channel electrons
|
|
|
|
N(count) = dE*sum( ((gamma_1/gamma).*f1 + (gamma_2/gamma).*f2).*D );
|
|
|
|
% Update Poisson part of self-consistent potential
|
|
|
|
UPnew = U0*( N(count) - N0 );
|
|
dUP = abs(UP - UPnew);
|
|
UP = UP + 0.1*(UPnew - UP);
|
|
|
|
end
|
|
|
|
% Compute the current in A after the self-consistent potential
|
|
% has been achieved; notice the extra factor of q preceding the
|
|
% equation, which is needed since the gammas are in eV
|
|
|
|
ID(count) = q*(q/hbar)*(gamma_1*gamma_2)/(gamma) ...
|
|
*dE*sum((f1-f2).*D);
|
|
|
|
if (VG == 0.5)
|
|
|
|
switch VD
|
|
case 0.0
|
|
figure(2); title('VD = 0.0 V');
|
|
subplot(2,3,1); plot(f1,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.0 V');
|
|
subplot(2,3,2); plot(D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.0 V');
|
|
subplot(2,3,3); plot(f2,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f2(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.0 V');
|
|
subplot(2,3,5); plot(f1-f2,E,'--',D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)-f2(E+U), D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.0 V');
|
|
case 0.05
|
|
figure(3); title('VD = 0.05 V');
|
|
subplot(2,3,1); plot(f1,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.05 V');
|
|
subplot(2,3,2); plot(D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.05 V');
|
|
subplot(2,3,3); plot(f2,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f2(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.05 V');
|
|
subplot(2,3,5); plot(f1-f2,E,'--',D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)-f2(E+U), D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.05 V');
|
|
case 0.1
|
|
figure(4); title('VD = 0.1 V');
|
|
subplot(2,3,1); plot(f1,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.1 V');
|
|
subplot(2,3,2); plot(D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.1 V');
|
|
subplot(2,3,3); plot(f2,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f2(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.1 V');
|
|
subplot(2,3,5); plot(f1-f2,E,'--',D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)-f2(E+U), D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.1 V');
|
|
case 0.2
|
|
figure(5); title('VD = 0.2 V');
|
|
subplot(2,3,1); plot(f1,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.2 V');
|
|
subplot(2,3,2); plot(D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.2 V');
|
|
subplot(2,3,3); plot(f2,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f2(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.2 V');
|
|
subplot(2,3,5); plot(f1-f2,E,'--',D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)-f2(E+U), D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.2 V');
|
|
case 0.3
|
|
figure(6); title('VD = 0.3 V');
|
|
subplot(2,3,1); plot(f1,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.3 V');
|
|
subplot(2,3,2); plot(D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.3 V');
|
|
subplot(2,3,3); plot(f2,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f2(E+U)'); ylabel('ENERGY [eV]'); title('VD = 0.3 V');
|
|
subplot(2,3,5); plot(f1-f2,E,'--',D/1E4,E,'k-'); axis([-0.1 1.1 -1 1]);
|
|
xlabel('f1(E+U)-f2(E+U), D(E)/1E4'); ylabel('ENERGY [eV]'); title('VD = 0.3 V');
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
figure(1); plot(VV,ID,'k-'); grid on;
|
|
xlabel('DRAIN VOLTAGE [V]'); ylabel('CURRENT [A]'); hold on;
|
|
|
|
end
|