diff options
Diffstat (limited to '3866')
60 files changed, 968 insertions, 0 deletions
diff --git a/3866/CH1/EX2.1/Ex2_1.sce b/3866/CH1/EX2.1/Ex2_1.sce new file mode 100644 index 000000000..122fa491e --- /dev/null +++ b/3866/CH1/EX2.1/Ex2_1.sce @@ -0,0 +1,9 @@ +clear; close; clc;
+
+kc=1.380*(10^(-23));//constant
+te=300;//room_temp_in_kelvin
+qe=1.602*(10^(-19));//electron_charge
+ni=1.45*(10^10);
+p=3*(10^17);
+deg=2*kc*te*abs(log(ni/p))/qe;
+disp(deg,'degree of band bending(in volt):');
diff --git a/3866/CH10/EX10.1/Ex10_1.sce b/3866/CH10/EX10.1/Ex10_1.sce new file mode 100644 index 000000000..bce8fdcea --- /dev/null +++ b/3866/CH10/EX10.1/Ex10_1.sce @@ -0,0 +1,5 @@ +clc; clear; close;
+
+mprintf('T1=(R1*C1)+(R1*C2)+(R1*C3)\n\n');//for node 1
+mprintf(' T2=(R1*C1)+(R1*C3)+(R1+R2)*C2\n\n');//for node 2
+mprintf(' T3=(R1*C1)+(R1*C2)+(R1+R3)*C3\n\n');//for node 3
diff --git a/3866/CH10/EX10.2/Ex10_2.sce b/3866/CH10/EX10.2/Ex10_2.sce new file mode 100644 index 000000000..fa676b449 --- /dev/null +++ b/3866/CH10/EX10.2/Ex10_2.sce @@ -0,0 +1,25 @@ +clc; clear; close;
+
+Ceff=1;//in fF/um
+Cint=0.2;//in fF/um
+Cg=2;//in fF/um
+Wn=0.8;//in um
+Wp=0.4;//in um
+Lwire=20;//in um
+reff=12.5/2;//in kiloohm
+rsq=0.054;//in ohm
+Cfan=4*Cg*(Wn+Wp);
+disp(Cfan,'Fanout Capacitance(in fermifarads)=');
+Cself=Ceff*(Wn+Wp);
+disp(Cself,'Self Capacitance(in fermifarads)=');
+Cwire=Cint*Lwire;
+disp(Cwire,'Wire Capacitance(in fermifarads)=');
+Ctot=Cfan+Cself+Cwire;
+disp(Ctot,'Total Capacitance(in fermifarads)=');
+Tdriver=reff*Ctot;
+disp(Tdriver,'total delay without wire resistance(in picoseconds)=');
+Rwire=(rsq*(Lwire/0.2))/1000;
+Tdriver1=reff*(Cself+Cg)+(reff+Rwire)*(Cfan+Cg);
+disp(Rwire,'wire resistance (in kiloohms)=');
+disp(Tdriver1,'total delay with wire resistance(in picoseconds)=');
+disp('Inclusion of wire resistance made no appreciable difference');
diff --git a/3866/CH10/EX10.3/Ex10_3.sce b/3866/CH10/EX10.3/Ex10_3.sce new file mode 100644 index 000000000..ada1764dc --- /dev/null +++ b/3866/CH10/EX10.3/Ex10_3.sce @@ -0,0 +1,18 @@ +clc; clear; close;
+
+Rint=0.027/0.5;//in ohm/um
+L=20000;//in um
+Cint=0.1;//in fF/um
+Reqn=12500;//in ohms
+Ceff=1;//in fF/um
+W=0.2;//in um
+Rwire=Rint*L;
+Cwire=Cint*L;
+Reff=Reqn/100;
+Cself=Ceff*(3*W)*100;
+Telmore=(Reff*Cwire/2)+(Reff+Rwire)*Cwire/2;
+disp(Rwire,'Wire resistance(in ohms)=');
+disp(Cwire,'Wire capacitance(in fermifarads)=');
+disp(Reff,'Inverter on resistance(in ohms)=');
+disp(Cself,'Inverter output capacitance(in fermifarads)=');
+disp(Telmore*10^(-6),'Resulting elmore delay(in nanoseconds)=');
diff --git a/3866/CH10/EX10.4/Ex10_4.sce b/3866/CH10/EX10.4/Ex10_4.sce new file mode 100644 index 000000000..329d0b089 --- /dev/null +++ b/3866/CH10/EX10.4/Ex10_4.sce @@ -0,0 +1,25 @@ +clc; clear; close;
+
+Rint=0.054;//in ohm/um
+Cint=0.1;//in fF/um
+l=20000;//in um
+Reqn=12500;//in ohm
+Cg=2;//in fF/um
+Ceff=1;//in fF/um
+W=0.2;//in um
+CG=Cg*W;//in fF
+CJ=Ceff*W;//in fF
+B=2;
+N=round(sqrt((Rint*Cint*l*l)/(2*Reqn*(CG+CJ)*(1+B))));
+disp(N,'Number of segments in wire=');
+M=round(sqrt((Reqn*Cint)/(CG*(1+B)*Rint)));
+disp(M,'Buffer size=');
+Reff=round(Reqn/M);
+disp(Reff,'Buffer resistance(in ohms)=');
+Cself=Ceff*(2*W+W)*M;
+disp(Cself,'Buffer output capacitance(in fermifarads)=');
+Cfan=Cg*(2*W+W)*M;
+disp(Cfan,'Buffer input capacitance(in fermifarads)=');
+Telm=7*((Reff*(Cself+(Cint*l/(2*N))))+(Reff+(Rint*l/N))*(((Cint*l/(2*N)))+Cfan));
+disp(Telm*10^(-6),'Total delay(in nanoseconds)=');
+//answers vary due to roundoff error
diff --git a/3866/CH11/EX11.1/Ex11_1.sce b/3866/CH11/EX11.1/Ex11_1.sce new file mode 100644 index 000000000..89754ed56 --- /dev/null +++ b/3866/CH11/EX11.1/Ex11_1.sce @@ -0,0 +1,11 @@ +clc; clear; close;
+
+t=10;//in years
+A=2*(10^7);//in hr-cm^2/amp
+delH=0.85;//in eV
+T=398;//in kelvin
+t50=10*t*365*24;
+k=8.62*(10^(-5));
+Jmax=sqrt(A*exp(delH/(k*T))/t50);
+disp(Jmax,'max tolerable current density for electromigration(in A/cm^2)=');
+//the answer given in the textbook is wrong
diff --git a/3866/CH2/EX2.10/Ex2_10.sce b/3866/CH2/EX2.10/Ex2_10.sce new file mode 100644 index 000000000..f06fbdb9c --- /dev/null +++ b/3866/CH2/EX2.10/Ex2_10.sce @@ -0,0 +1,11 @@ +clear; clc; close;
+
+vgs1=0.140;//obtained from figure
+vgs2=0.212;//obtained from figure
+k=1.3807*(10^(-23));//boltzmann constant
+t=300;//temperature in kelvin
+q=1.6*(10^(-19));
+n=((vgs2-vgs1)*q)/(k*t*log(10));
+s=60*n;
+disp(n,'for PMOS device');
+disp(s,'slope factor(in mv/decade)');
diff --git a/3866/CH2/EX2.11/Ex2_11.sce b/3866/CH2/EX2.11/Ex2_11.sce new file mode 100644 index 000000000..a148567ee --- /dev/null +++ b/3866/CH2/EX2.11/Ex2_11.sce @@ -0,0 +1,18 @@ +clear; clc; close;
+
+w=0.4;//in micrometer
+l=100;//in nanometer
+Cg=1.6;//in fF/micrometer
+Ct=Cg*w;
+Cgs1=0;Cgd1=0;Cgb1=Ct/2;//cutoff
+Cgs2=Ct/2;Cgd2=Ct/2;Cgb2=0;//linear
+Cgs3=(2*Ct)/3;Cgb3=0;Cgd3=0;//saturation
+disp(Cgs1,'Cgs for cutoff region');//units in fF
+disp(Cgd1,'Cgd for cutoff region');
+disp(Cgb1,'Cgb for cutoff region');
+disp(Cgs2,'Cgs for linear region');
+disp(Cgd2,'Cgd for linear region');
+disp(Cgb2,'Cgb for linear region');
+disp(Cgs3,'Cgs for saturation region');
+disp(Cgd3,'Cgs for saturation region');
+disp(Cgb3,'Cgs for saturation region');
diff --git a/3866/CH2/EX2.12/Ex2_12.sce b/3866/CH2/EX2.12/Ex2_12.sce new file mode 100644 index 000000000..d051356b8 --- /dev/null +++ b/3866/CH2/EX2.12/Ex2_12.sce @@ -0,0 +1,35 @@ +clear; close; clc;
+
+disp('a)');
+k=1.38*(10^(-23));//boltzmann constant
+t=300;//room temperature
+q=1.6*(10^(-19));
+Na=3*(10^17);//in cm^(-3)
+na1=3*(10^23);//in m^(-3)
+Nd=10^20;//in cm^(-3)
+Ni=1.45*(10^10);
+esi=11.7*8.85*(10^(-12));
+FIb=(k*t*log((Na*Nd)/(Ni*Ni)))/q;
+Cjb=((esi*q*na1)/(2*FIb))^(0.5);
+disp(FIb,'Built in junction potential(in volts):');
+disp(Cjb,'capacitance per length(farad/(m^2)):');//answer vary due to round off error
+
+disp('b)');
+y=0.3;//in micrometer
+xi=0.05;//in micrometer
+w=0.4;//in micrometer
+Cjb=1.6;//in (fF/micrometer^2) from 2_12a
+FIb=1;//in volts from 2_12a
+Vj1=0;
+Vj2=-1.2;
+Cj1=(Cjb*w*(y+xi));
+Cj2=(Cjb*w*(y+xi))/((1-(Vj2/FIb))^0.5);
+disp(Cj1,'junction capacitance for Vj=0(in fF)=');
+disp(Cj2,'junction capacitance for Vj=-1.2v(in fF)=');
+
+disp('c)');
+v2=0;
+v1=-1.2;//in volts
+Keq=(-2)*sqrt(FIb)*(sqrt(FIb-v2)-sqrt(FIb-v1))/(v2-v1);
+Cj=Keq*Cjb*w*(y+xi);
+disp(Cj,'junction capacitance(in fF)=');
diff --git a/3866/CH2/EX2.13/Ex2_13.sce b/3866/CH2/EX2.13/Ex2_13.sce new file mode 100644 index 000000000..45d2bfb9b --- /dev/null +++ b/3866/CH2/EX2.13/Ex2_13.sce @@ -0,0 +1,11 @@ +clear; close; clc;
+
+T=100;
+Ld=0.01;//in micrometer
+eox=4*8.85*(10^(-14));
+Cf=(2*eox*log(1+T))/%pi;//in F/cm
+Cf1=(Cf)/(10^4);//in F/micrometer
+Cox=(15*10^(-15));//in F
+Cov=Cox*Ld;
+Col=(Cf1+Cov)*(10^15);//in fF/micrometer
+disp(Col,'overlap capacitance(in fF/micrometer)=');
diff --git a/3866/CH2/EX2.2/Ex2_2.sce b/3866/CH2/EX2.2/Ex2_2.sce new file mode 100644 index 000000000..e70f7d940 --- /dev/null +++ b/3866/CH2/EX2.2/Ex2_2.sce @@ -0,0 +1,14 @@ +clear; close; clc;
+
+kc=1.380*(10^(-23));//constant
+te=300;//room_temp_in_kelvin
+qe=1.602*(10^(-19));//electron_charge
+ni=1.45*(10^10);
+p=3*(10^17);
+esi=11.7*8.85*(10^(-14));
+deg=2*kc*te*abs(log(ni/p))/qe;
+xd=sqrt((2*esi*deg)/(qe*p));
+qb=-sqrt(2*qe*p*esi*abs(-deg));
+disp(deg,'degree of band bending(in volt):');
+disp(xd,'limiting value of depletion layer width(in cm)');
+disp(qb,'total charge in depleted region(in C/cm^2)');
diff --git a/3866/CH2/EX2.3/Ex2_3.sce b/3866/CH2/EX2.3/Ex2_3.sce new file mode 100644 index 000000000..2368155a2 --- /dev/null +++ b/3866/CH2/EX2.3/Ex2_3.sce @@ -0,0 +1,11 @@ +clear; clc; close;
+
+tox=22*(10^(-10));
+na=3*(10^(17));
+qe=1.602*(10^(-19));//electron_charge
+eox=8.85*(10^(-14));
+esi=11.7*eox;
+cox=(4*eox)/tox;
+y=sqrt(2*qe*esi*na)/cox;
+disp(cox,'oxide capacitance (in F/m^2)');
+disp(y,'body factor');
diff --git a/3866/CH2/EX2.4/Ex2_4.sce b/3866/CH2/EX2.4/Ex2_4.sce new file mode 100644 index 000000000..33e870515 --- /dev/null +++ b/3866/CH2/EX2.4/Ex2_4.sce @@ -0,0 +1,19 @@ +clear; close; clc;
+
+kc=1.380*(10^(-23));//constant
+te=300;//room_temp_in_kelvin
+qe=1.602*(10^(-19));//electron_charge
+eo=8.85*(10^(-14));
+ni=1.45*(10^10);
+p=3*(10^17);
+fg=0.55;
+s=2*(10^10);//in_cm^(-2)
+tox=22*(10^(-8));//in_cm
+esi=11.7*eo;
+ffp=kc*te*log(ni/p)/qe;
+fgc=ffp-fg;
+eox=4*eo;
+cox=eox/tox;
+qbo=-sqrt(2*qe*p*esi*abs(2*ffp));
+vto=fgc-(2*ffp)-(qbo/cox)-(s*qe/cox);
+disp(vto,'zero bias threshold voltage(in volts=)');
diff --git a/3866/CH2/EX2.5/Ex2_5.sce b/3866/CH2/EX2.5/Ex2_5.sce new file mode 100644 index 000000000..cfc821045 --- /dev/null +++ b/3866/CH2/EX2.5/Ex2_5.sce @@ -0,0 +1,8 @@ +clear; close; clc;
+
+cox=1.6*10^(-6);//from_previous_example
+v=0.4;
+vto=0.08;//from previus example
+qe=1.602*10^(-19);
+n1=(cox*(v-vto))/qe;
+disp(n1,'ion implant doses(in ions/cm^2)');
diff --git a/3866/CH2/EX2.6/Ex2_6.sce b/3866/CH2/EX2.6/Ex2_6.sce new file mode 100644 index 000000000..5cbe032cd --- /dev/null +++ b/3866/CH2/EX2.6/Ex2_6.sce @@ -0,0 +1,11 @@ +clear; clc; close;
+
+vgs=1.8;
+vt=0.5;
+cl=200*(10^(-9));
+enln=6*(10^6)*cl;
+eplp=24*(10^6)*cl;
+vdsat1=((vgs-vt)*enln)/(vgs-vt+enln);
+vdsat2=((vgs-vt)*eplp)/(vgs-vt+eplp);
+disp(vdsat1,'Vdsat for NMOS(in volts)');
+disp(vdsat2,'Vdsat for PMOS(in volts)');
diff --git a/3866/CH2/EX2.7/Ex2_7.sce b/3866/CH2/EX2.7/Ex2_7.sce new file mode 100644 index 000000000..4a7d1067a --- /dev/null +++ b/3866/CH2/EX2.7/Ex2_7.sce @@ -0,0 +1,15 @@ +clear; close; clc;
+//in standard units
+vsat=8*(10^4);
+tox=22*(10^(-10));
+vgs=1.2;
+vt=0.4;
+cl=100*(10^(-9));
+eo=8.85*(10^(-12));
+cox=(4*eo)/tox;
+enln=6*(10^6)*cl;
+eplp=24*(10^6)*cl;
+ids1=(vsat*cox*((vgs-vt)^2))/(vgs-vt+enln);
+ids2=(vsat*cox*((vgs-vt)^2))/(vgs-vt+eplp);
+disp(ids1,'saturation current of NMOS(in ampere/metre)');//answers vary due to round off error
+disp(ids2,'saturation current of PMOS(in ampere/metre)');//answers vary due to round off error
diff --git a/3866/CH2/EX2.8/Ex2_8.sce b/3866/CH2/EX2.8/Ex2_8.sce new file mode 100644 index 000000000..6f6d49347 --- /dev/null +++ b/3866/CH2/EX2.8/Ex2_8.sce @@ -0,0 +1,12 @@ +clear; clc;close;
+
+vgs=1.2;
+vt=0.4;
+ecln=0.6;
+eclp=2.4;
+vdsat1=((vgs-vt)*ecln)/(vgs-vt+ecln);
+vdsat2=((vgs-vt)*eclp)/(vgs-vt+eclp);
+ratio=(vgs-vt+eclp)/(vgs-vt+ecln);
+disp(vdsat1,'for NMOS(in volts)');
+disp(vdsat2,'for PMOS(in volts)');
+disp(ratio,'saturation current ratio nmos to pmos');
diff --git a/3866/CH2/EX2.9/Ex2_9.sce b/3866/CH2/EX2.9/Ex2_9.sce new file mode 100644 index 000000000..34caab228 --- /dev/null +++ b/3866/CH2/EX2.9/Ex2_9.sce @@ -0,0 +1,13 @@ +clear; clc; close;
+
+vgs1=1.35;//given
+vgs2=1.8;//given
+ids1=130*(10^(-6));//given
+ids2=220*(10^(-6));//given
+vt=0.5;//given
+vgs3=0.9;//given
+a=(log10(ids2/ids1))/(log10((vgs2-vt)/(vgs1-vt)));
+ks=ids2/((vgs2-vt)^a);
+ids=ks*((vgs3-vt)^a);
+disp(a,'alpha based from figure)');//answer vary due to round off error
+disp(ids,'saturation current for vgs=0.9(in amperes)');//answer vary due to round off error
diff --git a/3866/CH3/EX3.1/Ex3_1.sce b/3866/CH3/EX3.1/Ex3_1.sce new file mode 100644 index 000000000..6c4a7430c --- /dev/null +++ b/3866/CH3/EX3.1/Ex3_1.sce @@ -0,0 +1,18 @@ +clc; clear; close;
+
+r1=0.027;//resistivity in microohm/m
+t1=1;//in micrometer
+L=35;//in micrometer
+T1=5;//in micrometer
+R1=r1*(L/T1)/t1;
+t2=0.5;//in micrometer
+T2=0.18;//in micrometer
+R2=r1*(L/T2)/t2;
+r2=0.017;//in microohm/m
+t3=0.4;//in micrometer
+T3=0.13;//in micrometer
+R3=r2*(L/T3)/t3;
+disp(R1,'resistance(in ohm) of aluminium wire(1980)=');
+disp(R2,'resistance(in ohm) of aluminium wire(2000)=');
+disp(R3,'resistance(in ohm) of copper wire(2002)=');
+//answers vary due to round off error
diff --git a/3866/CH3/EX3.2/Ex3_2.sce b/3866/CH3/EX3.2/Ex3_2.sce new file mode 100644 index 000000000..ec52c66e1 --- /dev/null +++ b/3866/CH3/EX3.2/Ex3_2.sce @@ -0,0 +1,8 @@ +clc; clear; close;
+
+l=0.2;//in micrometer
+w=0.4;//in micrometer
+y=0.5;//in micrometer
+ad=0.2;//in picometer^2
+pd=0.4;//in micrometer
+mprintf('M1 drainn gaten Gnd Gnd NMOS1 l=%fu w=%fu ad=%fp pd=%fu as=%fp ps=%fu',l,w,ad,pd,ad,pd);
diff --git a/3866/CH3/EX3.3/Ex3_3.sce b/3866/CH3/EX3.3/Ex3_3.sce new file mode 100644 index 000000000..68fa20ccc --- /dev/null +++ b/3866/CH3/EX3.3/Ex3_3.sce @@ -0,0 +1,8 @@ +clc; clear; close;
+
+vto=0.5;//in volts
+kp=300;//in micro
+phi=0.8;
+gam=0.4;
+lam=0;
+mprintf('.mode1 NMOS1 nmos level=1 vto=%f kp=%du phi=%f gamma=%f lambda=%d',vto,kp,phi,gam,lam);
diff --git a/3866/CH4/EX4.2/Ex4_2.sce b/3866/CH4/EX4.2/Ex4_2.sce new file mode 100644 index 000000000..a3d70f175 --- /dev/null +++ b/3866/CH4/EX4.2/Ex4_2.sce @@ -0,0 +1,16 @@ +clc; clear; close;
+
+ki=430*(10^(-6));//in amp/volt^2
+vt=0.4;//in volts
+wl=2;
+Vdd=1.2;//in volts
+Rl=20*(10^3);
+Voh=Vdd;
+k=ki*wl;
+Vol=Vdd/(1+k*Rl*(Vdd-vt));
+Vil=vt+(1/(k*Rl));
+Vih=vt+sqrt((8*Vdd)/(3*k*Rl))-1/(k*Rl);
+NML=Vil-Vol;
+NMH=Voh-Vih;
+disp(NML,'NML(in volts)');//answer vary due to round off error
+disp(NMH,'NMH(in volts)');//answer vary due to round off error
diff --git a/3866/CH4/EX4.4/Ex4_4.sce b/3866/CH4/EX4.4/Ex4_4.sce new file mode 100644 index 000000000..bac334067 --- /dev/null +++ b/3866/CH4/EX4.4/Ex4_4.sce @@ -0,0 +1,9 @@ +clc; clear; close;
+
+Vdd=1.2;//in volts
+Vt=0.4;//in volts
+gam=0.2;
+voh=0.74;//in volts
+fi=0.44;//in volts
+Voh=Vdd-Vt-(gam*sqrt(voh+(2*fi)))+gam*sqrt(2*fi);
+disp(Voh,'VOH(in volts)=');
diff --git a/3866/CH4/EX4.5/Ex4_5.sce b/3866/CH4/EX4.5/Ex4_5.sce new file mode 100644 index 000000000..e3bc31acc --- /dev/null +++ b/3866/CH4/EX4.5/Ex4_5.sce @@ -0,0 +1,18 @@ +clc; clear ; close;
+
+Vol=0.1;//in volts
+WL=100;//in nm
+l=10^(-5);//in cm
+un=270;//in cm^2/v.s
+Vto=0.4;//in volts
+Vdd=1.2;//in volts
+el=0.6;//in volts
+vsat=8*(10^6);//in cm/s
+gam=0.2;
+fi=0.44;
+Vt=Vto+(gam*sqrt(Vol+(2*fi)))-gam*sqrt(2*fi);
+k=(vsat*((Vdd-Vol-Vt)^2)*(1+Vol/el)*l)/((Vdd-Vol-Vt+el)*((Vdd-Vt)*Vol-(Vol^2)/2)*un);
+Wl=WL*k;
+disp(Vt,'Vtl(in volts)=');
+disp(k,'ratio=');
+disp(Wl,'Wl(in nm)=');//answers vary due to round off error
diff --git a/3866/CH4/EX4.6/Ex4_6.sce b/3866/CH4/EX4.6/Ex4_6.sce new file mode 100644 index 000000000..c8e7bedf5 --- /dev/null +++ b/3866/CH4/EX4.6/Ex4_6.sce @@ -0,0 +1,15 @@ +clc; clear; close;
+
+Wn=0.1;//in micrometer
+Wp1=0.4;//in micrometer
+Wp2=0.1;//in micrometer
+Vdd=0.8;//in volts
+Vtn=0.4;//in volts
+Ecp=24;
+Ecn=6;
+X1=sqrt((Wn*Ecp)/(Wp1*Ecn));
+Vs1=(Vdd+(X1*Vtn))/(1+X1);
+X2=sqrt((Wn*Ecp)/(Wp2*Ecn));
+Vs2=(Vdd+(X2*Vtn))/(1+X2);
+disp(Vs1,'switchng voltage(in volts) for Wp=0.4um ');
+disp(Vs2,'switchng voltage(in volts) for Wp=0.1um ');
diff --git a/3866/CH4/EX4.7/Ex4_7.sce b/3866/CH4/EX4.7/Ex4_7.sce new file mode 100644 index 000000000..81a2377ee --- /dev/null +++ b/3866/CH4/EX4.7/Ex4_7.sce @@ -0,0 +1,21 @@ +clc; clear; close;
+
+
+Wn=0.4;//in micrometer
+Wp=0.8;//in micrometer
+Vdd=1.8;//in volts
+Vtn=0.5;//in volts
+Ecp=24;
+Ecn=6;
+Vtp=0.5;//in volts
+Voh=Vdd;
+Vol=0;
+Vil=0.7;//in volts
+Vih=1;//in volts
+X=sqrt((Wn*Ecp)/(Wp*Ecn));
+Vs=(Vdd+(X*Vtn)-Vtp)/(1+X);
+NMH=Voh-Vih;
+NML=Vil-Vol;
+disp(Vs,'Vs(in volts)=');
+disp(NMH,'NMH(in volts)=');
+disp(NML,'NMH(in volts)=');
diff --git a/3866/CH4/EX4.8/Ex4_8.sce b/3866/CH4/EX4.8/Ex4_8.sce new file mode 100644 index 000000000..8418f24d5 --- /dev/null +++ b/3866/CH4/EX4.8/Ex4_8.sce @@ -0,0 +1,16 @@ +clc; clear; close;
+
+Wp=400;//in nanometer
+Vsat=8*(10^6);//in cm/s
+Vdd=1.8;//in volts
+Vtp=0.5;//in volts
+Ep=4.8;//in volts
+Ln=2*(10^(-5));//in cm
+un=270;//in cm^2/V.s
+Vol=0.065;//in volts
+En=1.2;//in volts
+Vtn=0.5;//in volts
+k=(Vsat*((Vdd-Vtp)^2)*Ln*(1+(Vol/En)))/(un*(Vol*(Vdd-Vtn)-(Vol^2)/2)*(Vdd-Vtp+Ep));
+Wn=k*Wp;
+disp(k,'WN/WP=');//answers vary due to round off error
+disp(Wn,'Wn(in nanometers)=');//answers vary due to round off error
diff --git a/3866/CH4/EX4.9/Ex4_9.sce b/3866/CH4/EX4.9/Ex4_9.sce new file mode 100644 index 000000000..07fb0b6be --- /dev/null +++ b/3866/CH4/EX4.9/Ex4_9.sce @@ -0,0 +1,24 @@ +clc; clear; close;
+
+t=50*(10^(-12));
+Cl=50*(10^(-15));
+Reqn=12500;//in ohm
+Reqp=30000;//in ohm
+Ref=t/(0.7*Cl);
+R1=Reqn/Ref;
+mprintf('Wn/Ln=%f',R1);
+R2=Reqp/Ref;
+mprintf('\nWp/Lp=%f',R2);
+Vsat=8*(10^6);//in cm/s
+Vdd=1.2;//in volts
+Vtp=0.4;//in volts
+Ep=2.4;//in volts
+un=270;//in cm^2/V.s
+Vol=0.065;//in volts
+En=0.6;//in volts
+Vtn=0.4;//in volts
+Wp=(un*(Vol*(Vdd-Vtn)-(Vol^2)/2)*(Vdd-Vtp+Ep)*R1)/(Vsat*((Vdd-Vtp)^2)*(1+(Vol/En)));
+mprintf('\nWp=%f (in cm)',Wp);
+Wp=Wp*10000;//in micrometer
+mprintf('\nWn/Ln=%f/0.1 (in 0.1um technology)',0.1*R1);
+mprintf('\nWp/Lp=%f/0.1 (in 0.1um technology)',Wp);
diff --git a/3866/CH5/EX5.2/Ex5_2.sce b/3866/CH5/EX5.2/Ex5_2.sce new file mode 100644 index 000000000..e43dc52ba --- /dev/null +++ b/3866/CH5/EX5.2/Ex5_2.sce @@ -0,0 +1,17 @@ +clc; clear; close;
+
+Wn1=400;//in nm
+Wp1=400;//in nm
+Wn2=200;//in nm
+Wp2=800;//in nm
+Vdd=1.8;//in volts
+Vtp=0.5;//in volts
+Vtn=0.5;//in volts
+Ep=24;//in volts
+En=6;//in volts
+X1=sqrt((Wn1*Ep)/(Wp1*En));
+Vs1=(Vdd+(X1*Vtn)-Vtp)/(1+X1);
+X2=sqrt((Wn2*Ep)/(Wp2*En));
+Vs2=(Vdd+(X2*Vtn)-Vtp)/(1+X2);
+disp(Vs1,'Vs when one input is high and other is varied(in volts)=');
+disp(Vs2,'Vs when both inputs are varied(in volts)=');
diff --git a/3866/CH5/EX5.4/Ex5_4.sce b/3866/CH5/EX5.4/Ex5_4.sce new file mode 100644 index 000000000..a50162a1b --- /dev/null +++ b/3866/CH5/EX5.4/Ex5_4.sce @@ -0,0 +1,12 @@ +clc; clear; close;
+
+Cl=100*(10^(-15));//in farad
+T=200*(10^(-12));//in seconds
+Reqn=12500;//in_ohms for_nmos_devices
+r=(0.7*Reqn*Cl)/T;
+disp(r,'W/L=');
+Wn=r*100;
+disp(Wn,'Wn for both nmos devices(in nanometer)=');
+Wp=4*Wn;
+disp(Wp,'Wp for both pmos devices(in nanometers)=' );
+//answers vary due to round off error
diff --git a/3866/CH5/EX5.5/Ex5_5.sce b/3866/CH5/EX5.5/Ex5_5.sce new file mode 100644 index 000000000..2af8bcea9 --- /dev/null +++ b/3866/CH5/EX5.5/Ex5_5.sce @@ -0,0 +1,6 @@ +clc; clear; close;
+
+cc=8;//number of clock cycles
+to=4;//number of toggles at output
+a=to*100/(2*cc);
+disp(a, 'activity factor(%)=');
diff --git a/3866/CH5/EX5.6/Ex5_6.sce b/3866/CH5/EX5.6/Ex5_6.sce new file mode 100644 index 000000000..b9e0bd559 --- /dev/null +++ b/3866/CH5/EX5.6/Ex5_6.sce @@ -0,0 +1,7 @@ +clc; clear; close;
+
+C=50*(10^(-15));//in farad
+Vdd=1.8;//in volts
+f=250*10^(6);//in hertz
+P=C*Vdd*Vdd*f;
+disp(P,'dynamic power(in watts)=');
diff --git a/3866/CH5/EX5.8/Ex5_8.sce b/3866/CH5/EX5.8/Ex5_8.sce new file mode 100644 index 000000000..2d8325aa5 --- /dev/null +++ b/3866/CH5/EX5.8/Ex5_8.sce @@ -0,0 +1,13 @@ +clc; clear; close;
+
+Vol=0.1;//in volts
+WL=9;
+uc=430;//in uA/v^2
+en=0.6;//in volts
+Vdd=1.2;//in volts
+Vtn=0.4;//in volts
+Idc=(WL*uc*(Vol*(Vdd-Vtn)-(Vol*Vol)/2))/(1+(Vol/en));
+disp(Idc,'Idc(in micro amperes)=');
+P=Idc*Vdd;
+disp(P,'power dissipated(in microwatts)=');
+//answers vary due to round off error
diff --git a/3866/CH5/EX5.9/Ex5_9.sce b/3866/CH5/EX5.9/Ex5_9.sce new file mode 100644 index 000000000..9b561ed9f --- /dev/null +++ b/3866/CH5/EX5.9/Ex5_9.sce @@ -0,0 +1,23 @@ +clc; clear; close;
+
+n1=10*(10^6);
+n2=50*(10^6);
+a1=0.1;
+c1=20*(10^(-15));//in F
+Vdd1=1.8;//in volts
+f1=500*(10^6);//in Hz
+a2=0.05;
+c2=10*(10^(-15));//in F
+Vdd2=1.2;//in volts
+f2=1*(10^9);//in Hz
+P1=n1*c1*Vdd1*Vdd1*f1*a1;
+disp(P1,'Case 1 Power(in watts)=');
+P2=n2*c2*Vdd2*Vdd2*f2*a2;
+disp(P2,'Case 2 Power(in watts)=');
+t1=1/f1;
+t2=1/f2;
+EDP1=P1*t1*t1;
+EDP2=P2*t2*t2;
+disp(EDP1,'case 1 EDP(in joule-seconds)=');
+disp(EDP2,'case 2 EDP(in joule-seconds)=');
+disp('Second design has lower energy delay product , so it is better ');
diff --git a/3866/CH6/EX6.1/Ex6_1.sce b/3866/CH6/EX6.1/Ex6_1.sce new file mode 100644 index 000000000..4059b29c7 --- /dev/null +++ b/3866/CH6/EX6.1/Ex6_1.sce @@ -0,0 +1,18 @@ +clc; clear; close;
+
+Vsat=8*(10^6);//in cm/s
+Cox=1.6*(10^(-6));//in F/cm^2
+Vdd=1.2;//in volts
+Wn=0.1*(10^(-4));//in cm
+En=0.6//in volts
+Vtn=0.4;//in volts
+Wp=Wn;
+Vtp=Vtn;
+Ep=2.4;//in volts
+Idsat=(Wn*Vsat*Cox*((Vdd-Vtn)^2))/(Vdd-Vtn+En);
+Reqn=Vdd/(0.7*Idsat*2);
+Idsat1=(Wp*Vsat*Cox*((Vdd-Vtp)^2))/(Vdd-Vtp+Ep);
+Reqp=Vdd/(0.7*Idsat1*2);
+mprintf('for NMOS device, Idsat(in amperes)=%f \n Reqn(in ohms)=%f',Idsat,Reqn);
+mprintf('\n\nfor PMOS device, Idsat(in amperes)=%f \n Reqp(in ohms)=%f',Idsat1,Reqp);
+//answers vary due to roundoff error
diff --git a/3866/CH6/EX6.10/Ex6_10.sce b/3866/CH6/EX6.10/Ex6_10.sce new file mode 100644 index 000000000..43ad70fc2 --- /dev/null +++ b/3866/CH6/EX6.10/Ex6_10.sce @@ -0,0 +1,15 @@ +clc; clear; close;
+
+Cload=200;//in fF
+Cin=2;//in fF
+Tnand=4;
+Tnor=5;
+Tinv=3;
+Fanout_d=(Tnand*Tnor*Tinv*Cload/Cin)^(1/3);
+Cj2=Tnor*Cload/Fanout_d;disp(Cj2,'Cj+2 (in fermifarad)=');
+Cj1=Tinv*Cj2/Fanout_d;disp(Cj1,'Cj+1 (in fermifarad)=');
+Cin1=Tnand*Cj1/Fanout_d;disp(Cin1,'Cin(in fermifarad)=');
+mprintf('\nfor nand gate:Cin=%ffF , so Wp=Wn=0.5um\n',Cin1);
+mprintf('\nfor inverter:Cin=%ffF , so Wp=3um & Wn=1.5um\n',Cj1);
+mprintf('\nfor nor gate:Cin=%ffF , so Wp=22um & Wn=5.5um\n',Cj2);
+//answers vary due to round off error
diff --git a/3866/CH6/EX6.11/Ex6_11.sce b/3866/CH6/EX6.11/Ex6_11.sce new file mode 100644 index 000000000..47f51a5cd --- /dev/null +++ b/3866/CH6/EX6.11/Ex6_11.sce @@ -0,0 +1,27 @@ +clc; clear; close;
+
+LEnand=4/3;
+LEinv=1;
+LEnor=5/3;
+Cload=200;//in fF
+Cin=2;//in fF
+Pnand=1;
+Pinv=1/2;
+Pnor=3/2;
+Tinv=7.5;//in picoseconds
+path_effort=LEnand*LEinv*LEnor*Cload/Cin;
+disp(path_effort,'Total path effort=');
+Stage_effort=round(path_effort^(1/3));
+disp(Stage_effort,'Stage effort=');
+D=3*Stage_effort+Pnand+Pinv+Pnor;
+disp(D,'Normalised delay=');
+min_delay=Tinv*D;
+disp(min_delay,'Physical delay value(in picoseconds)=');
+cj2=Cload*LEnor/Stage_effort;
+disp(cj2,'Cj+2(in fF)=');
+cj1=cj2*LEinv/Stage_effort;
+disp(cj1,'Cj+1(in fF)=');
+cin=cj1*LEnand/Stage_effort;
+disp(cin,'Cj+2(in fF)=');
+mprintf('\n\nDevice size will be same as example 6.10');
+//answers vary due to round off error
diff --git a/3866/CH6/EX6.12/Ex6_12.sce b/3866/CH6/EX6.12/Ex6_12.sce new file mode 100644 index 000000000..6cfeb1fe7 --- /dev/null +++ b/3866/CH6/EX6.12/Ex6_12.sce @@ -0,0 +1,10 @@ +clc; close; clear;
+
+Cgate=1+1;
+Cinv=1+2;
+LEf=Cgate/Cinv;
+LEr=2*Cgate/Cinv;
+LE=(LEf+LEr)/2;
+disp(LEf,'Falling case Logical effort=');
+disp(LEr,'Rising case Logical effort=');
+disp(LE,'Average logical effort=');
diff --git a/3866/CH6/EX6.13/Ex6_13.sce b/3866/CH6/EX6.13/Ex6_13.sce new file mode 100644 index 000000000..134b40459 --- /dev/null +++ b/3866/CH6/EX6.13/Ex6_13.sce @@ -0,0 +1,25 @@ +clc; clear; close;
+
+LEinv=1;
+LEnor=5/3;
+LEnand=4/3;
+Cload=20;//in fF
+Cin=10;//in fF
+Pinv=1/2;
+Pnor=3/2;
+Pnand=1;
+path_effort=LEinv*LEnand*LEnor*Cload/Cin;
+disp(path_effort,'total path effort=');
+SE=path_effort^(1/4);
+disp(SE,'optimal stage effort=');
+delay=(4*SE)+(2*Pinv)+Pnor+Pnand;
+disp(delay,'normalised delay=');
+Z=LEinv*Cload/SE;
+disp(Z,'Z=');
+Y=LEnand*Z/SE;
+disp(Y,'Y=');
+X=LEnor*Y/SE;
+disp(X,'X=');
+Cin1=LEinv*X/SE;
+disp(Cin1,'Cin=');
+//answers vary due to round off error
diff --git a/3866/CH6/EX6.14/Ex6_14.sce b/3866/CH6/EX6.14/Ex6_14.sce new file mode 100644 index 000000000..e32127876 --- /dev/null +++ b/3866/CH6/EX6.14/Ex6_14.sce @@ -0,0 +1,21 @@ +clc; clear; close;
+
+Cload=200;//in fF;
+Cin=20;//in fF
+LEnand4=2;
+LEnand2=4/3;
+LEinv=1;
+LEnor=5/3;
+Pinv=1/2;
+Pnand2=1;
+Pnand4=2;
+Pnor=3/2;
+path_effort=LEinv*LEnand2*LEnand4*Cload/Cin;
+SE=path_effort^(1/4);
+D=(4*SE)+Pnand4+Pinv+Pnand2+Pinv;
+disp(D,'Normalised Delay for 1st case=');
+path_effort1=LEinv*LEnand2*LEnand2*LEnor*Cload/Cin;
+SE1=path_effort1^(1/4);
+D1=(4*SE1)+Pnand2+Pnor+Pnand2+Pinv;
+disp(D1,'Normalised Delay for 2nd case=');
+mprintf('\n\n Option 1 is better than option 2');
diff --git a/3866/CH6/EX6.15/Ex6_15.sce b/3866/CH6/EX6.15/Ex6_15.sce new file mode 100644 index 000000000..14a92df76 --- /dev/null +++ b/3866/CH6/EX6.15/Ex6_15.sce @@ -0,0 +1,19 @@ +clc; clear; close;
+
+LEnand=4/3;
+Cout=4.5;
+Cin=1;
+N=3;
+Pnand=1;
+LEp=LEnand^3;
+disp(LEp,'Logical effort=');
+FOp=Cout/Cin;
+disp(FOp,'Electrical effort=');
+BEp=2*3;
+disp(BEp,'Branching effort=');
+PE=LEp*FOp*BEp;
+disp(PE,'Path effort=');
+SE=PE^(1/N);
+disp(SE,'Optimal stage effort=');
+D=(N*SE)+Pnand*3;
+disp(D,'Delay=');
diff --git a/3866/CH6/EX6.16/Ex6_16.sce b/3866/CH6/EX6.16/Ex6_16.sce new file mode 100644 index 000000000..d91602429 --- /dev/null +++ b/3866/CH6/EX6.16/Ex6_16.sce @@ -0,0 +1,23 @@ +clc; clear; close;
+
+Cin=1;
+a=8;
+b=64;
+LEinv=1;
+//solving without sideload 'a'
+SE=(LEinv*b/Cin)^(1/3);
+y=LEinv*b/SE;
+mprintf('WITHOUT SIDELOAD');
+disp(y,'Y=');
+x=LEinv*y/SE;
+disp(x,'X=');
+w=LEinv*x/SE;
+disp(w,'W=');
+//adding sideload by removing gates beyond sideload
+sideload_c=y+a;
+SE1=(LEinv*sideload_c/Cin)^(1/2);
+X=round(LEinv*sideload_c/SE1);
+mprintf('\n WITH SIDELOAD');
+disp(y,'Y=');
+disp(X,'X=');
+disp(w,'W=');
diff --git a/3866/CH6/EX6.3/Ex6_3.sce b/3866/CH6/EX6.3/Ex6_3.sce new file mode 100644 index 000000000..302a8a0a6 --- /dev/null +++ b/3866/CH6/EX6.3/Ex6_3.sce @@ -0,0 +1,10 @@ +clc; clear; close;
+
+Wp=2;
+Wn=3;
+a=Wp+Wn;
+mprintf('Worst case input capacitance: Cin= %dWCg',a);
+b=3*Wn;
+c=2*Wp;
+d=b+c;
+mprintf('\n\n Worst case output capacitance: Cout= %dWCeff',d);
diff --git a/3866/CH6/EX6.4/Ex6_4.sce b/3866/CH6/EX6.4/Ex6_4.sce new file mode 100644 index 000000000..bca6e081c --- /dev/null +++ b/3866/CH6/EX6.4/Ex6_4.sce @@ -0,0 +1,12 @@ +clc; clear; close;
+
+Cg=2;//in fF/micrometer
+Wp=0.8;//in micrometer
+Wn=0.4;//in micrometer
+Ceff=1;//in fF/micrometer
+Cfanout=4*Cg*(Wp+Wn);
+Cself=Ceff*(Wn+Wp);
+Ctotal=Cfanout+Cself;
+disp(Cfanout,'Fanout capacitance(in fermifarad)=');
+disp(Cself,'Self capacitance(in fermifarad)=');
+disp(Ctotal,'Total capacitance(in fermifarad)=');
diff --git a/3866/CH6/EX6.5/Ex6_5.sce b/3866/CH6/EX6.5/Ex6_5.sce new file mode 100644 index 000000000..90c9353f0 --- /dev/null +++ b/3866/CH6/EX6.5/Ex6_5.sce @@ -0,0 +1,18 @@ +clc; clear; close;
+
+disp('a) Propagation delay for step case');
+disp('Imax=Cl*(dVout/dt)=(Cl*Vdd)/(2*Tphl)');
+disp('Tphl=Cl*Vdd/(2*Imax)');
+
+disp('b) Propagation delay for ramp case');
+disp('Imax=Cl*(dVout/dt)');
+disp('Iout*dt=Cl*dVout');
+disp('Integrating both sides,');
+disp('(Imax*tr/4)+Imax*(Tphl-tr/2)=Cl*Vdd/2');
+disp('Tphl=(tr/4)+Cl*Vdd/(2*Imax)');
+
+disp('c)')
+disp('Tphl_ramp = (tr/4)+Tphl_step');
+disp('if tr=2*Tplh_step , then');
+disp('Tphl_ramp = (2*Tplh_step/4)+Tphl_step');
+disp('Tphl_ramp = Tphl_step+(Tphl_step/2)');
diff --git a/3866/CH6/EX6.6/Ex6_6.sce b/3866/CH6/EX6.6/Ex6_6.sce new file mode 100644 index 000000000..a66ca8c86 --- /dev/null +++ b/3866/CH6/EX6.6/Ex6_6.sce @@ -0,0 +1,24 @@ +clc; clear; close;
+
+//a
+Ctotal=10.8;//in fermifarad(from Ex 6_4)
+Reff1=12.5;// in kiloohm
+Reff2=30;//in kiloohm
+r1=1/2;
+r2=1/4;
+PHL=Reff1*r1*Ctotal;
+disp(PHL,'Tphl(in picoseconds)=');//answer vary due to roundoff error
+PLH=Reff2*r2*Ctotal;
+disp(PLH,'Tplh(in picoseconds)=');
+Tp=(PHL+PLH)/2;
+disp(Tp,'total inverter delay(in picoseconds)=');//answer vary due to roundoff error
+
+//b
+Cload1=2.4+1.2;//in fermifarad
+PHL1=Reff1*r1*Cload1;
+disp(PHL1,'FO1 fall delay(in picoseconds)= ');
+
+PLH1=Reff2*r2*Cload1;
+disp(PLH1,'FO1 rise delay(in picoseconds)= ');
+Tp1=2*(PHL1+PLH1);
+disp(Tp1,'total delay(in picoseconds)=');
diff --git a/3866/CH6/EX6.7/Ex6_7.sce b/3866/CH6/EX6.7/Ex6_7.sce new file mode 100644 index 000000000..12b013a11 --- /dev/null +++ b/3866/CH6/EX6.7/Ex6_7.sce @@ -0,0 +1,22 @@ +clc; clear; close;
+
+//a
+Reff=12.5;//in kiloohm
+r=2/4;
+Cload=4.2;//in fermifarad
+T=4*Reff*r*Cload;
+disp(T,'total delay(in picoseconds)=');
+
+//b
+Reff1=30;//in kiloohm
+Cfanout=2;//in fermifarad
+Cself=1;//in fermifarad
+r1=2/6;
+Cload1=Cself+Cfanout;
+PLH=Reff1*Cload1*r1;
+PHL=Reff*r*Cload1;
+T1=2*(PHL+PLH);
+disp(PLH,'rise delay(in picoseconds)=');
+disp(PHL,'fall delay(in picoseconds)=');
+disp(T1,'total delay(in picoseconds)=');
+//answers vary due to roundoff error
diff --git a/3866/CH6/EX6.8/Ex6_8.sce b/3866/CH6/EX6.8/Ex6_8.sce new file mode 100644 index 000000000..9261a4fb3 --- /dev/null +++ b/3866/CH6/EX6.8/Ex6_8.sce @@ -0,0 +1,10 @@ +clc; clear; close;
+
+Reqn=12.5;//in kiloohm
+Cg=2;//in fF/micrometer
+Ln=0.1;//in micrometer
+Ceff=1;//in fF/micrometer
+Tinv=3*Reqn*Cg*Ln;
+Yinv=Ceff/Cg;
+disp(Tinv,'Tinv for 0.13um technology(in picoseconds)=');
+disp(Yinv,'Yinv for 0.13um technology=');
diff --git a/3866/CH6/EX6.9/Ex6_9.sce b/3866/CH6/EX6.9/Ex6_9.sce new file mode 100644 index 000000000..a30d0396f --- /dev/null +++ b/3866/CH6/EX6.9/Ex6_9.sce @@ -0,0 +1,20 @@ +clc; close; clear;
+
+Cload=200;//in fF
+Cin=1;//in fF
+N=3;
+Tinv=7.5;//in picoseconds
+Y=0.5;
+f=(Cload/Cin)^(1/N);
+disp(f,'Fanout ratio for 3 stage inverter=');
+tdelay=3*Tinv*(f+Y);
+disp(tdelay,'total delay in 3 stage case(in picoseconds)=');
+f1=3.6;//estimated
+N1=log(Cload/Cin)/log(f1);
+g=round(N1);
+disp(N1,'N=');
+f2=(Cload/Cin)^(1/g);
+disp(f2,'recomputed fanout ratio for 4 stage=');
+tdelay1=4*Tinv*(f2+Y);
+disp(tdelay1,'total delay in 3 stage case(in picoseconds)=');
+//answers vary due to round off error
diff --git a/3866/CH7/EX7.1/Ex7_1.sce b/3866/CH7/EX7.1/Ex7_1.sce new file mode 100644 index 000000000..cd24f53cc --- /dev/null +++ b/3866/CH7/EX7.1/Ex7_1.sce @@ -0,0 +1,25 @@ +clc; clear; close;
+
+Vdd=1.2;//in volts
+Vto=0.4;//in volts
+gam=0.2;//in vplts^(0.5)
+fi=0.88;//in volts
+//solving of quadratic equation
+a=1;
+b=(-2)*(Vdd-Vto+gam*sqrt(fi))-(gam^2);
+c=((((Vdd-Vto+gam*sqrt(fi))^2)-(gam^2)*fi));
+Vout=((-b)-sqrt(b*b-4*c))/2;
+disp(Vout,'Output(in volts) when input=1.2V and clock=1.2V:');
+Col=0.25;//in fF/um
+W=0.2;//in um
+Ceff=1;//in fF/um
+Cg=2;//in fF/um
+Cf=Col*W; disp(Cf,'Cf(in fermifarad)=');
+Cgnd=Ceff*W; disp(Ceff,'Cef(in fermifarad)=');
+Vout1=Vout-((1.2*Cf)/(Cf+Cgnd));
+disp(Vout1,'Output(in volts) when input=1.2V and clock=low:');
+mprintf('\n\n When input=0V then output=0V irrespective of clock\n\n');
+Cf1=(0.5*Cg*W)+(Col*W);
+Vout2=0-((1.2*Cf1)/(Cf1+Cgnd));
+disp(Vout2,'output(in volts) when input=0V and device is in linear region:');
+//answers vary due to round off error
diff --git a/3866/CH7/EX7.2/Ex7_2.sce b/3866/CH7/EX7.2/Ex7_2.sce new file mode 100644 index 000000000..db1d54ecb --- /dev/null +++ b/3866/CH7/EX7.2/Ex7_2.sce @@ -0,0 +1,26 @@ +clc; clear; close;
+
+//a
+C1=100;//in fF
+C2=20;//in fF;
+V1=0//in volts
+V2=1.2;//in volts
+V=(C1*V1+C2*V2)/(C1+C2);
+disp(V,'A) V*(in volts)=');
+
+//b
+C1=20;//in fF
+C2=20;//in fF;
+V1=0//in volts
+V2=1.2;//in volts
+V=(C1*V1+C2*V2)/(C1+C2);
+disp(V,'B) V*(in volts)=');
+
+//c
+C1=20;//in fF
+C2=100;//in fF;
+V1=0//in volts
+V2=1.2;//in volts
+V=(C1*V1+C2*V2)/(C1+C2);
+disp(V,'C) V*(in volts)=');
+mprintf('\n Last solution is not possible since V cannot rise above Vdd-Vtn\n');
diff --git a/3866/CH7/EX7.4/Ex7_4.sce b/3866/CH7/EX7.4/Ex7_4.sce new file mode 100644 index 000000000..30b000637 --- /dev/null +++ b/3866/CH7/EX7.4/Ex7_4.sce @@ -0,0 +1,18 @@ +clc; close; clear;
+
+mprintf('For 1st model:\n\n');
+mprintf(' Total delay=T1\n');
+mprintf(' T1=Rinv*C1+(Rinv+Rtg)*C2+(Rinv+2*Rtg)*C3\n');
+mprintf(' Rinv=R and Rtg=R\n');
+mprintf(' C1=(3*Ceff*W)+(Cg*W)+(2*Ceff*W)\n');
+mprintf(' C2=(Cg*W*2)+(6*Ceff*W)\n');
+mprintf(' C3=(4*Ceff*W)+(Cg*W)+(3*f*Cg*W)\n');
+mprintf(' T1=R*W*((29*Ceff)+(8*Cg)+(9*f*Cg))\n\n\n');
+mprintf(' For 2nd model:\n\n');
+mprintf(' Total delay=T2\n');
+mprintf(' T2=Rinv*C4+(Rinv+Rtg)*C5\n');
+mprintf(' Rinv=R and Rtg=R\n');
+mprintf(' C4=(3*Ceff*W)+(2*Ceff*W)+(Cg*W)\n');
+mprintf(' C5=(8*ceff*W)+(Cg*W)+(3*f*Cg*W)\n');
+mprintf(' T2=R*W*((21*Ceff)+(3*Cg)+(6*f*Cg))\n\n');
+mprintf(' Comparing two models, MUX1 is slower than MUX2');
diff --git a/3866/CH7/EX7.5/Ex7_5.sce b/3866/CH7/EX7.5/Ex7_5.sce new file mode 100644 index 000000000..c325355f2 --- /dev/null +++ b/3866/CH7/EX7.5/Ex7_5.sce @@ -0,0 +1,10 @@ +clc; clear; close;
+
+LE_input_a1=4*2/3;
+LE_input_sel1=2/3;
+LE_input_a2=(4*5)/(3*4);
+LE_input_sel2=(4*5)/(4*3);
+disp(LE_input_a1,'LE Input A(for 1st case)=');
+disp(LE_input_sel1,'LE Input sel(for 1st case)=');
+disp(LE_input_a2,'LE Input A(for 2nd case)=');
+disp(LE_input_sel2,'LE Input A(for 2nd case)=');
diff --git a/3866/CH7/EX7.8/Ex7_8.sce b/3866/CH7/EX7.8/Ex7_8.sce new file mode 100644 index 000000000..7af050a61 --- /dev/null +++ b/3866/CH7/EX7.8/Ex7_8.sce @@ -0,0 +1,23 @@ +clc; clear; close;
+
+mprintf('A)\n');
+mprintf(' F=AB+C\n\n');
+mprintf(' B)\n');
+Cg=2;//in fF/um
+Wp=16*0.05;//in um
+lam=0.05;
+Ceff=1;//in fF/um
+Vclk=1.2;//in volts
+Vdd=1.2;//in volts
+Cf=Cg*Wp/2;
+Cgnd=(Ceff*40*lam)+(Cg*30*lam);
+delV=(Cf*Vclk/(Cf+Cgnd));
+disp(delV,'DELVx(in volts)=');
+Vout=Vdd+delV;
+disp(Vout,'Output voltage(in volts)=');
+mprintf('\nSince output voltage is above Vdd , it is not a problem\n\n');
+mprintf(' C)\n');
+Cy=Ceff*16*lam;
+V=Cgnd*Vdd/(Cy+Cgnd);
+disp(V,'Worst case charge sharing V*(in volts)=');
+//answers vary due to roundoff error
diff --git a/3866/CH8/EX8.1/Ex8_1.sce b/3866/CH8/EX8.1/Ex8_1.sce new file mode 100644 index 000000000..cd969657f --- /dev/null +++ b/3866/CH8/EX8.1/Ex8_1.sce @@ -0,0 +1,15 @@ +clc; clear; close;
+
+norm_ot=1;
+LEnand3=5/3;
+B_effort=16;
+LEnand2=4/3;
+mprintf(' Normalised output=%f\n',norm_ot);
+Ic=norm_ot/4;
+mprintf(' Inverter input capacitance=%f\n',Ic);
+In3=LEnand3*Ic/4;
+mprintf(' Input capacitance of NAND3 gate=%f\n',In3);
+Ic1=In3*B_effort/4;
+mprintf(' 2nd inverter input capacitance=%f\n',Ic1);
+In2=LEnand2*Ic1/4;
+mprintf(' Input capacitance of NAND2 gate=%f\n',In2);
diff --git a/3866/CH8/EX8.2/Ex8_2.sce b/3866/CH8/EX8.2/Ex8_2.sce new file mode 100644 index 000000000..6a5cbe465 --- /dev/null +++ b/3866/CH8/EX8.2/Ex8_2.sce @@ -0,0 +1,21 @@ +clc; clear; close;
+
+Vsat=8*(10^6);//in cm/s
+Vdd=1.2;//in volts
+Vt1=0.4;//in volts
+Ln=1*(10^(-5));//in cm
+un=270;//in cm^2/V.s
+Vol=0.065;//in volts
+En=0.6;//in volts
+Vt3=0.4;//in volts
+Vq=0.1;//in volts
+Cbit=2;//in picofarads
+DelV=200;//in mV
+Delt=2;//in nanoseconds
+k=(Vsat*((Vdd-Vt3-Vq)^2)*Ln*(1+(Vq/En)))/(un*(Vq*(Vdd-Vt1)-(Vq^2)/2)*(Vdd-Vt3-Vq+En));
+disp(k,'W1/W3=');
+Icell=Cbit*DelV/Delt;
+disp(Icell,'Icell(in microamperes)=');
+W3=(Icell*(Vdd-Vt1-Vq+En))/(((Vdd-Vq-Vt1)^2)*1.6*Vsat);
+disp(W3,'W3(in centimeters)=');
+mprintf(' \n This implies that W1=0.7um');
diff --git a/3866/CH8/EX8.3/Ex8_3.sce b/3866/CH8/EX8.3/Ex8_3.sce new file mode 100644 index 000000000..187023ab9 --- /dev/null +++ b/3866/CH8/EX8.3/Ex8_3.sce @@ -0,0 +1,14 @@ +clc; clear; close;
+
+gate_cap=2*0.5;//in fF
+wire_cap1=30*0.2/20;//in fF
+drain_cap=0.5*0.5;//in fF
+wire_cap2=40*0.2*0.1/2;//in fF
+con_cap=0.5/2;//in fF
+row_cells=256;
+col_cells=256;
+Cword=row_cells*(2*gate_cap+wire_cap1);
+disp(Cword,'Capacitance of wordline(in fermifarads)=');
+Cbit=col_cells*(drain_cap+wire_cap2+con_cap);
+disp(Cbit,'Capacitance of Bitline(in fermifarads)=');
+//answers vary due to roundoff error
diff --git a/3866/CH9/EX9.1/Ex9_1.sce b/3866/CH9/EX9.1/Ex9_1.sce new file mode 100644 index 000000000..5956b1bc1 --- /dev/null +++ b/3866/CH9/EX9.1/Ex9_1.sce @@ -0,0 +1,24 @@ +clc; clear; close;
+
+Ctag=450;//in fF
+Cin=3;//in fF
+Pinv=0.5;
+Cg=2;//in fF/um
+Reqn=12.5;//in kiloohm
+Ln=0.2;//in um
+C=200;//in fF
+N=round(log10(Ctag/Cin)/log10(4));
+disp(N,'Number of stages of drivers=');
+SE=(Ctag/Cin)^(1/N);
+disp(SE,'Optimal stage effort=');
+D=(N*SE)+(N*Pinv);
+disp(D,'Normalised delay=');
+Tinv=3*Cg*Reqn*Ln;
+Ttag=Tinv*D;
+disp(Ttag,'Actual delay(in picoseconds)=');
+Reff=Reqn/8;
+Tmatchline=Reff*C;
+disp(Tmatchline,'Delay for the matchline(in picoseconds)=');
+Ttotal=Ttag+Tmatchline;
+disp(Ttotal,'Total delay (in picoseconds)=');
+//answers vary due to round off error
diff --git a/3866/CH9/EX9.3/Ex9_3.sce b/3866/CH9/EX9.3/Ex9_3.sce new file mode 100644 index 000000000..68f204717 --- /dev/null +++ b/3866/CH9/EX9.3/Ex9_3.sce @@ -0,0 +1,9 @@ +clc; clear; close;
+
+col_cap=10;
+cell_cap=1;
+Vdd=1;
+V1=((col_cap*Vdd/2)+(Vdd*cell_cap))/(col_cap+cell_cap);
+mprintf('For a stored 1, V= %fVdd\n\n',V1);
+V2=(col_cap*Vdd/2)/(col_cap+cell_cap);
+mprintf(' For a stored 0, V= %fVdd\n\n',V2);
diff --git a/3866/CH9/EX9.4/Ex9_4.sce b/3866/CH9/EX9.4/Ex9_4.sce new file mode 100644 index 000000000..3e04671d0 --- /dev/null +++ b/3866/CH9/EX9.4/Ex9_4.sce @@ -0,0 +1,7 @@ +clc; clear; close;
+
+Vt=2;//in volts
+disp(Vt,'Threshold voltage relative to gate 2(in volts)');//Capacitive divider equation
+disp('When 5V external voltage is applied , internal voltage will reach to -0.5V which means device is OFF');
+disp('To reach 1V as internal voltage , external voltage should have value of 8V');
+//values are obtained experimentally by EPROM programming
|