ECE_456_Reports/PS1/q2.m
2021-02-06 17:46:18 -07:00

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