diff --git a/PS1/q2.m b/PS1/q2.m new file mode 100644 index 0000000..1cf4af5 --- /dev/null +++ b/PS1/q2.m @@ -0,0 +1,183 @@ +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 diff --git a/PS1/q2_0V.png b/PS1/q2_0V.png new file mode 100644 index 0000000..fe98c73 Binary files /dev/null and b/PS1/q2_0V.png differ diff --git a/PS1/q2_0V2.png b/PS1/q2_0V2.png new file mode 100644 index 0000000..c302440 Binary files /dev/null and b/PS1/q2_0V2.png differ diff --git a/PS1/q2_0v3.png b/PS1/q2_0v3.png new file mode 100644 index 0000000..6b5045e Binary files /dev/null and b/PS1/q2_0v3.png differ diff --git a/PS1/q2_I-V.png b/PS1/q2_I-V.png new file mode 100644 index 0000000..7a59ba2 Binary files /dev/null and b/PS1/q2_I-V.png differ