From 7f60ea012dd2524dae921a2a35adbf7ef21f2bb6 Mon Sep 17 00:00:00 2001 From: prashantsinalkar Date: Tue, 10 Oct 2017 12:27:19 +0530 Subject: initial commit / add all books --- 3866/CH1/EX2.1/Ex2_1.sce | 9 +++++++++ 3866/CH10/EX10.1/Ex10_1.sce | 5 +++++ 3866/CH10/EX10.2/Ex10_2.sce | 25 +++++++++++++++++++++++++ 3866/CH10/EX10.3/Ex10_3.sce | 18 ++++++++++++++++++ 3866/CH10/EX10.4/Ex10_4.sce | 25 +++++++++++++++++++++++++ 3866/CH11/EX11.1/Ex11_1.sce | 11 +++++++++++ 3866/CH2/EX2.10/Ex2_10.sce | 11 +++++++++++ 3866/CH2/EX2.11/Ex2_11.sce | 18 ++++++++++++++++++ 3866/CH2/EX2.12/Ex2_12.sce | 35 +++++++++++++++++++++++++++++++++++ 3866/CH2/EX2.13/Ex2_13.sce | 11 +++++++++++ 3866/CH2/EX2.2/Ex2_2.sce | 14 ++++++++++++++ 3866/CH2/EX2.3/Ex2_3.sce | 11 +++++++++++ 3866/CH2/EX2.4/Ex2_4.sce | 19 +++++++++++++++++++ 3866/CH2/EX2.5/Ex2_5.sce | 8 ++++++++ 3866/CH2/EX2.6/Ex2_6.sce | 11 +++++++++++ 3866/CH2/EX2.7/Ex2_7.sce | 15 +++++++++++++++ 3866/CH2/EX2.8/Ex2_8.sce | 12 ++++++++++++ 3866/CH2/EX2.9/Ex2_9.sce | 13 +++++++++++++ 3866/CH3/EX3.1/Ex3_1.sce | 18 ++++++++++++++++++ 3866/CH3/EX3.2/Ex3_2.sce | 8 ++++++++ 3866/CH3/EX3.3/Ex3_3.sce | 8 ++++++++ 3866/CH4/EX4.2/Ex4_2.sce | 16 ++++++++++++++++ 3866/CH4/EX4.4/Ex4_4.sce | 9 +++++++++ 3866/CH4/EX4.5/Ex4_5.sce | 18 ++++++++++++++++++ 3866/CH4/EX4.6/Ex4_6.sce | 15 +++++++++++++++ 3866/CH4/EX4.7/Ex4_7.sce | 21 +++++++++++++++++++++ 3866/CH4/EX4.8/Ex4_8.sce | 16 ++++++++++++++++ 3866/CH4/EX4.9/Ex4_9.sce | 24 ++++++++++++++++++++++++ 3866/CH5/EX5.2/Ex5_2.sce | 17 +++++++++++++++++ 3866/CH5/EX5.4/Ex5_4.sce | 12 ++++++++++++ 3866/CH5/EX5.5/Ex5_5.sce | 6 ++++++ 3866/CH5/EX5.6/Ex5_6.sce | 7 +++++++ 3866/CH5/EX5.8/Ex5_8.sce | 13 +++++++++++++ 3866/CH5/EX5.9/Ex5_9.sce | 23 +++++++++++++++++++++++ 3866/CH6/EX6.1/Ex6_1.sce | 18 ++++++++++++++++++ 3866/CH6/EX6.10/Ex6_10.sce | 15 +++++++++++++++ 3866/CH6/EX6.11/Ex6_11.sce | 27 +++++++++++++++++++++++++++ 3866/CH6/EX6.12/Ex6_12.sce | 10 ++++++++++ 3866/CH6/EX6.13/Ex6_13.sce | 25 +++++++++++++++++++++++++ 3866/CH6/EX6.14/Ex6_14.sce | 21 +++++++++++++++++++++ 3866/CH6/EX6.15/Ex6_15.sce | 19 +++++++++++++++++++ 3866/CH6/EX6.16/Ex6_16.sce | 23 +++++++++++++++++++++++ 3866/CH6/EX6.3/Ex6_3.sce | 10 ++++++++++ 3866/CH6/EX6.4/Ex6_4.sce | 12 ++++++++++++ 3866/CH6/EX6.5/Ex6_5.sce | 18 ++++++++++++++++++ 3866/CH6/EX6.6/Ex6_6.sce | 24 ++++++++++++++++++++++++ 3866/CH6/EX6.7/Ex6_7.sce | 22 ++++++++++++++++++++++ 3866/CH6/EX6.8/Ex6_8.sce | 10 ++++++++++ 3866/CH6/EX6.9/Ex6_9.sce | 20 ++++++++++++++++++++ 3866/CH7/EX7.1/Ex7_1.sce | 25 +++++++++++++++++++++++++ 3866/CH7/EX7.2/Ex7_2.sce | 26 ++++++++++++++++++++++++++ 3866/CH7/EX7.4/Ex7_4.sce | 18 ++++++++++++++++++ 3866/CH7/EX7.5/Ex7_5.sce | 10 ++++++++++ 3866/CH7/EX7.8/Ex7_8.sce | 23 +++++++++++++++++++++++ 3866/CH8/EX8.1/Ex8_1.sce | 15 +++++++++++++++ 3866/CH8/EX8.2/Ex8_2.sce | 21 +++++++++++++++++++++ 3866/CH8/EX8.3/Ex8_3.sce | 14 ++++++++++++++ 3866/CH9/EX9.1/Ex9_1.sce | 24 ++++++++++++++++++++++++ 3866/CH9/EX9.3/Ex9_3.sce | 9 +++++++++ 3866/CH9/EX9.4/Ex9_4.sce | 7 +++++++ 60 files changed, 968 insertions(+) create mode 100644 3866/CH1/EX2.1/Ex2_1.sce create mode 100644 3866/CH10/EX10.1/Ex10_1.sce create mode 100644 3866/CH10/EX10.2/Ex10_2.sce create mode 100644 3866/CH10/EX10.3/Ex10_3.sce create mode 100644 3866/CH10/EX10.4/Ex10_4.sce create mode 100644 3866/CH11/EX11.1/Ex11_1.sce create mode 100644 3866/CH2/EX2.10/Ex2_10.sce create mode 100644 3866/CH2/EX2.11/Ex2_11.sce create mode 100644 3866/CH2/EX2.12/Ex2_12.sce create mode 100644 3866/CH2/EX2.13/Ex2_13.sce create mode 100644 3866/CH2/EX2.2/Ex2_2.sce create mode 100644 3866/CH2/EX2.3/Ex2_3.sce create mode 100644 3866/CH2/EX2.4/Ex2_4.sce create mode 100644 3866/CH2/EX2.5/Ex2_5.sce create mode 100644 3866/CH2/EX2.6/Ex2_6.sce create mode 100644 3866/CH2/EX2.7/Ex2_7.sce create mode 100644 3866/CH2/EX2.8/Ex2_8.sce create mode 100644 3866/CH2/EX2.9/Ex2_9.sce create mode 100644 3866/CH3/EX3.1/Ex3_1.sce create mode 100644 3866/CH3/EX3.2/Ex3_2.sce create mode 100644 3866/CH3/EX3.3/Ex3_3.sce create mode 100644 3866/CH4/EX4.2/Ex4_2.sce create mode 100644 3866/CH4/EX4.4/Ex4_4.sce create mode 100644 3866/CH4/EX4.5/Ex4_5.sce create mode 100644 3866/CH4/EX4.6/Ex4_6.sce create mode 100644 3866/CH4/EX4.7/Ex4_7.sce create mode 100644 3866/CH4/EX4.8/Ex4_8.sce create mode 100644 3866/CH4/EX4.9/Ex4_9.sce create mode 100644 3866/CH5/EX5.2/Ex5_2.sce create mode 100644 3866/CH5/EX5.4/Ex5_4.sce create mode 100644 3866/CH5/EX5.5/Ex5_5.sce create mode 100644 3866/CH5/EX5.6/Ex5_6.sce create mode 100644 3866/CH5/EX5.8/Ex5_8.sce create mode 100644 3866/CH5/EX5.9/Ex5_9.sce create mode 100644 3866/CH6/EX6.1/Ex6_1.sce create mode 100644 3866/CH6/EX6.10/Ex6_10.sce create mode 100644 3866/CH6/EX6.11/Ex6_11.sce create mode 100644 3866/CH6/EX6.12/Ex6_12.sce create mode 100644 3866/CH6/EX6.13/Ex6_13.sce create mode 100644 3866/CH6/EX6.14/Ex6_14.sce create mode 100644 3866/CH6/EX6.15/Ex6_15.sce create mode 100644 3866/CH6/EX6.16/Ex6_16.sce create mode 100644 3866/CH6/EX6.3/Ex6_3.sce create mode 100644 3866/CH6/EX6.4/Ex6_4.sce create mode 100644 3866/CH6/EX6.5/Ex6_5.sce create mode 100644 3866/CH6/EX6.6/Ex6_6.sce create mode 100644 3866/CH6/EX6.7/Ex6_7.sce create mode 100644 3866/CH6/EX6.8/Ex6_8.sce create mode 100644 3866/CH6/EX6.9/Ex6_9.sce create mode 100644 3866/CH7/EX7.1/Ex7_1.sce create mode 100644 3866/CH7/EX7.2/Ex7_2.sce create mode 100644 3866/CH7/EX7.4/Ex7_4.sce create mode 100644 3866/CH7/EX7.5/Ex7_5.sce create mode 100644 3866/CH7/EX7.8/Ex7_8.sce create mode 100644 3866/CH8/EX8.1/Ex8_1.sce create mode 100644 3866/CH8/EX8.2/Ex8_2.sce create mode 100644 3866/CH8/EX8.3/Ex8_3.sce create mode 100644 3866/CH9/EX9.1/Ex9_1.sce create mode 100644 3866/CH9/EX9.3/Ex9_3.sce create mode 100644 3866/CH9/EX9.4/Ex9_4.sce (limited to '3866') 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 -- cgit