Diseño del Ampl Operacionalde dos etapas
PARAMETROS DE DISEÑO:
In [1701]:
SR_o=3/(1e-6)
Cl=10e-12
Kn=110e-6
Kp=50e-6
Voutmax=2
Voutmin=-2
Vinmax=2
Vinmin=-1
Vdd=2.5
Vss=-2.5
Vtomax=0.85
Vtomin=0.55
GB=50e3
Lambda2=0.04
Lambda3=0.05
Temp=0
In [1702]:
SR=SR_o*10
#SR=SR_o*10
SR
Out[1702]:
In [1703]:
Cc_calculado=0.044*Cl
#Cc_calculado=0.022*Cl
Cc_calculado
Out[1703]:
In [1704]:
Cc=Cc_calculado*1.6
Cc
Out[1704]:
In [1705]:
I5=SR*Cc
I5
Out[1705]:
In [1706]:
I3=I5/2
I3
Out[1706]:
In [1707]:
S3=I5/(Kp*(Vdd-Vinmax-Vtomax+Vtomin)*(Vdd-Vinmax-Vtomax+Vtomin))
S3
Out[1707]:
In [1708]:
S4=S3
S4
Out[1708]:
In [1709]:
import math
S3_final=round(S3)
S3_final
Out[1709]:
In [1710]:
S4_final=S3_final
S4_final
Out[1710]:
In [1711]:
#GB_final=GB*1000
GB_final=GB*500
GB_final
Out[1711]:
In [1712]:
Gm1=GB_final*Cc*2*math.pi
Gm2=Gm1
Gm1
Out[1712]:
In [1713]:
S1=(Gm1*Gm1)/(2*Kn*I3)
S1
Out[1713]:
In [1714]:
S1_final=round(S1)
S1_final
S2_final=S1_final
S2_final
Out[1714]:
In [1715]:
Vds5_sat=Vinmin-Vss-math.sqrt(I5/(Kn*S1_final))-Vtomax
Vds5_sat
Out[1715]:
In [1716]:
S5=(2*I5)/(Kn*Vds5_sat*Vds5_sat)
S5
Out[1716]:
In [1717]:
S5_final=round(S5)
S5_final
Out[1717]:
In [1718]:
Gm6=Gm1*10
Gm6
Out[1718]:
In [1719]:
S6_final=100
Gm4=S4_final*Gm6/S6_final
Gm4
Out[1719]:
In [1720]:
S6_final=S4_final*Gm6/Gm4
S6_final
Out[1720]:
In [1721]:
I6=Gm6*Gm6/(2*Kp*S6_final)
I6
Out[1721]:
In [1722]:
S7=S5_final*(I6/I5)
S7
Out[1722]:
In [1723]:
S7_final=round(S7)
S7_final
Out[1723]:
In [1724]:
Pdis=(Vdd-Vss)*(3*I5+I6)
Pdis
Out[1724]:
In [1725]:
Av=2*Gm2*Gm6/(I5*(Lambda2+Lambda3)*(Lambda2+Lambda3)*I6)
Av
Out[1725]:
In [1726]:
AV_db=20*math.log10(Av)
AV_db
Out[1726]:
In [1727]:
L_base=2*800e-9
L_base
Out[1727]:
In [1728]:
W1=S1_final*L_base
L1=L_base
W1
Out[1728]:
In [1729]:
L1
Out[1729]:
In [1730]:
W2=S2_final*L_base
L2=L_base
W2
Out[1730]:
In [1731]:
L2
Out[1731]:
In [1732]:
W3=S3_final*L_base
L3=L_base
W3
Out[1732]:
In [1733]:
L3
Out[1733]:
In [1734]:
W4=S4_final*L_base
L4=L_base
W4
Out[1734]:
In [1735]:
L4
Out[1735]:
In [1736]:
W5=S5_final*L_base
L5=L_base
W5
Out[1736]:
In [1737]:
W6=S6_final*L_base
L6=L_base
W6
Out[1737]:
In [1738]:
W7=S7_final*L_base
L7=L_base
W7
Out[1738]:
In [1739]:
#Cc_final=Cc*1.5
Cc_final=Cc*0.6
Cc_final
Out[1739]:
Calculo Rbias del Multiplicador Beta
In [1740]:
#Rbias=math.sqrt(2/(I5/2*Kn*5))*(1-1/(math.sqrt(4)))
Rbias=math.sqrt(2/(2*I5*Kn*5))*(1-1/(math.sqrt(4)))
Rbias
Out[1740]:
In [1741]:
import sys
import fileinput
def modificar_cir_Op_Amp_Two_Stages(W1,W2,W3,W4,W5,W6,W7,W8,L,Cc,I5,Rbias):
text="* Simulación Circuito Amplificador Operacional de dos etapas"+"\n"+ \
"* Universidad Nacional de Colombia 2016"+"\n"+ \
"* CMOS Analógico"+"\n"+ \
"* Grupo Jorge Garzón, Esteban Iafrancesco A"+"\n"+ \
"\n"+\
"Vdd_1 Vdd_1 0 DC 2.5 AC 0"+"\n"+\
"Vss_1 Vss_1 0 DC -2.5 AC 0"+"\n"+"\n"+\
"Vin2_1 vinM2_1 0 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito del amplificador operacional de dos etapas"+"\n"+\
"M1_1 drainM1_1 vinM2_1 sourceM1_1 Vss_1 nmosG W="+str(W1)+" L="+str(L)+"\n"+\
"M2_1 drainM2_1 vinM1_1 sourceM1_1 Vss_1 nmosG W="+str(W2)+" L="+str(L)+"\n"+\
"\n"+\
"M3_1 drainM1_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W3)+" L="+str(L)+"\n"+\
"M4_1 drainM2_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W4)+" L="+str(L)+"\n"+\
"\n"+\
"M5_1 sourceM1_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"M6_1 vout_1 drainM2_1 Vdd_1 Vdd_1 pmosG W="+str(W6)+" L="+str(L)+"\n"+\
"\n"+\
"M7_1 vout_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W7)+" L="+str(L)+"\n"+\
"\n"+\
"Cl_1 vout_1 0 10p"+"\n"+\
"Cc_1 vout_1 drainM2_1 "+str(Cc)+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito espejo ideal"+"\n"+\
"*Iref Espejo N de "+str(I5)+" Amps"+"\n"+\
"Iref_1 0 vbiasM5_1 DC "+str(I5)+" AC 0"+"\n"+\
"M8_1 vbiasM5_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"VRBref_1 RBref2_1 Vss_1 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"\n"+\
"*Fuente AC en vinM1_1"+"\n"+\
"Vinac_1 vinM1_1 0 sin(0 0.0001 1k) dc=0 ac=0.0001"+"\n"+\
"\n"+\
"* Modelos para tecnología 0.8u < L < 200u 10u < W < 10000u Vdd=2.5V (Allen)"+"\n"+\
"* lambda cambia de acuerdo con la longitud del canal"+"\n"+\
"* nMOS: lambda=0.04 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"* pMOS: lambda=0.05 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"\n"+\
".model nmosG nmos level=2"+"\n"+\
"+ vto = 0.7 kp = 110e-6 gamma = 0.4 phi = 0.7"+"\n"+\
"+ tox = 14e-9 cj = 770e-6 cjsw = 380e-12 mj = 0.5 mjsw = 0.38"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.04"+"\n"+\
"\n"+\
".model pmosG pmos level=2"+"\n"+\
"+ vto = -0.7 kp = 50e-6 gamma = 0.57 phi = 0.8"+"\n"+\
"+ tox = 14e-9 cj = 560e-6 cjsw = 350e-12 mj = 0.5 mjsw = 0.35"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.05"+"\n"+\
"\n"+\
".control"+"\n"+\
"set temp = "+str(Temp)+"\n"+\
"set tnom = "+str(Temp)+"\n"+\
"set color0 =white"+"\n"+\
"set color1=black"+"\n"+\
"op"+"\n"+\
"show all"+"\n"+\
"\n"+\
"*Ganacia en AC barrido en frecuencia vout/vin AC"+"\n"+\
"ac dec 10 1 10ghz"+"\n"+\
"let av = v(vout_1)/v(vinm1_1)"+"\n"+\
"*Ganancia en decibeles"+"\n"+\
"plot db(av)"+"\n"+\
"*Ganancia en magnitud V/V"+"\n"+\
"*plot mag(av)"+"\n"+\
"*phase plot"+"\n"+\
"plot ph(av)*360/(2*pi)"+"\n"+\
"\n"+\
"*Phase margin"+"\n"+\
"meas ac freqzerodbs when vdb(av)=0 fall=LAST"+"\n"+\
"print freqzerodbs"+"\n"+\
"meas ac pmb find vp(av) when vdb(av)=0"+"\n"+\
"let phasemargin = 180+pmb*360/(2*pi)"+"\n"+\
"print phasemargin"+"\n"+\
"\n"+\
"*Band width"+"\n"+\
"meas ac Gain MAX vdb(av) from=1 to=10ghz"+"\n"+\
"let gain3dbs = Gain-3"+"\n"+\
"print gain3dbs"+"\n"+\
"meas ac Bw when vdb(av)=gain3dbs fall=LAST"+"\n"+\
"\n"+\
"*Transitorio"+"\n"+\
"tran .00001s .01s"+"\n"+\
"*Potencia discipada en el circuito (Vdd_1-Vss_1)*Itotal"+"\n"+\
"plot v(vdd_1,vss_1)*vss_1#branch"+"\n"+\
".endc"+"\n"
for i, line in enumerate(fileinput.input('../ngspice-simulations/Script-Op-Amplifier-Two-Stages.cir', inplace=1)):
if i == 1: sys.stdout.write(text) # replace 'sit' and write
fileinput.close()
In [1742]:
import sys
import fileinput
def modificar_cir_Op_Amp_Two_Stages_slew_rate(W1,W2,W3,W4,W5,W6,W7,W8,L,Cc,I5,Rbias):
text="* Simulación Circuito Amplificador Operacional de dos etapas"+"\n"+ \
"* Universidad Nacional de Colombia 2016"+"\n"+ \
"* CMOS Analógico"+"\n"+ \
"* Grupo Jorge Garzón, Esteban Iafrancesco A"+"\n"+ \
"\n"+\
"Vdd_1 Vdd_1 0 DC 2.5 AC 0"+"\n"+\
"Vss_1 Vss_1 0 DC -2.5 AC 0"+"\n"+"\n"+\
"*Vin2_1 vinM2_1 0 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito del amplificador operacional de dos etapas"+"\n"+\
"M1_1 drainM1_1 vout_1 sourceM1_1 Vss_1 nmosG W="+str(W1)+" L="+str(L)+"\n"+\
"M2_1 drainM2_1 vinM1_1 sourceM1_1 Vss_1 nmosG W="+str(W2)+" L="+str(L)+"\n"+\
"\n"+\
"M3_1 drainM1_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W3)+" L="+str(L)+"\n"+\
"M4_1 drainM2_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W4)+" L="+str(L)+"\n"+\
"\n"+\
"M5_1 sourceM1_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"M6_1 vout_1 drainM2_1 Vdd_1 Vdd_1 pmosG W="+str(W6)+" L="+str(L)+"\n"+\
"\n"+\
"M7_1 vout_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W7)+" L="+str(L)+"\n"+\
"\n"+\
"Cl_1 vout_1 0 10p"+"\n"+\
"Cc_1 vout_1 drainM2_1 "+str(Cc)+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito espejo ideal"+"\n"+\
"*Iref Espejo N de "+str(I5)+" Amps"+"\n"+\
"Iref_1 0 vbiasM5_1 DC "+str(I5)+" AC 0"+"\n"+\
"M8_1 vbiasM5_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"////////////------////////////////////"+"\n"+\
"\n"+\
"*Fuente AC en vinM1_1"+"\n"+\
"Vinac_1 vinM1_1 0 PULSE(-1.8 2 0 1ns 1ns 0.5s 1s)"+"\n"+\
"\n"+\
"* Modelos para tecnología 0.8u < L < 200u 10u < W < 10000u Vdd=2.5V (Allen)"+"\n"+\
"* lambda cambia de acuerdo con la longitud del canal"+"\n"+\
"* nMOS: lambda=0.04 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"* pMOS: lambda=0.05 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"\n"+\
".model nmosG nmos level=2"+"\n"+\
"+ vto = 0.7 kp = 110e-6 gamma = 0.4 phi = 0.7"+"\n"+\
"+ tox = 14e-9 cj = 770e-6 cjsw = 380e-12 mj = 0.5 mjsw = 0.38"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.04"+"\n"+\
"\n"+\
".model pmosG pmos level=2"+"\n"+\
"+ vto = -0.7 kp = 50e-6 gamma = 0.57 phi = 0.8"+"\n"+\
"+ tox = 14e-9 cj = 560e-6 cjsw = 350e-12 mj = 0.5 mjsw = 0.35"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.05"+"\n"+\
"\n"+\
".control"+"\n"+\
"set temp = "+str(Temp)+"\n"+\
"set tnom = "+str(Temp)+"\n"+\
"set color0 =white"+"\n"+\
"set color1=black"+"\n"+\
"op"+"\n"+\
"show all"+"\n"+\
"\n"+\
"*Transitorio"+"\n"+\
"tran .000000001s .0000005s"+"\n"+\
"plot v(vout_1) v(vinm1_1)"+"\n"+\
".endc"+"\n"
for i, line in enumerate(fileinput.input('../ngspice-simulations/Script-Op-Amplifier-Two-Stages-Slew-Rate.cir', inplace=1)):
if i == 1: sys.stdout.write(text) # replace 'sit' and write
fileinput.close()
In [1743]:
import sys
import fileinput
def modificar_cir_Op_Amp_Two_Stages_setting_time(W1,W2,W3,W4,W5,W6,W7,W8,L,Cc,I5,Rbias):
text="* Simulación Circuito Amplificador Operacional de dos etapas"+"\n"+ \
"* Universidad Nacional de Colombia 2016"+"\n"+ \
"* CMOS Analógico"+"\n"+ \
"* Grupo Jorge Garzón, Esteban Iafrancesco A"+"\n"+ \
"\n"+\
"Vdd_1 Vdd_1 0 DC 2.5 AC 0"+"\n"+\
"Vss_1 Vss_1 0 DC -2.5 AC 0"+"\n"+"\n"+\
"*Vin2_1 vinM2_1 0 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito del amplificador operacional de dos etapas"+"\n"+\
"M1_1 drainM1_1 vout_1 sourceM1_1 Vss_1 nmosG W="+str(W1)+" L="+str(L)+"\n"+\
"M2_1 drainM2_1 vinM1_1 sourceM1_1 Vss_1 nmosG W="+str(W2)+" L="+str(L)+"\n"+\
"\n"+\
"M3_1 drainM1_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W3)+" L="+str(L)+"\n"+\
"M4_1 drainM2_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W4)+" L="+str(L)+"\n"+\
"\n"+\
"M5_1 sourceM1_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"M6_1 vout_1 drainM2_1 Vdd_1 Vdd_1 pmosG W="+str(W6)+" L="+str(L)+"\n"+\
"\n"+\
"M7_1 vout_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W7)+" L="+str(L)+"\n"+\
"\n"+\
"Cl_1 vout_1 0 10p"+"\n"+\
"Cc_1 vout_1 drainM2_1 "+str(Cc)+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito espejo ideal"+"\n"+\
"*Iref Espejo N de "+str(I5)+" Amps"+"\n"+\
"Iref_1 0 vbiasM5_1 DC "+str(I5)+" AC 0"+"\n"+\
"M8_1 vbiasM5_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"////////////------////////////////////"+"\n"+\
"\n"+\
"*Fuente AC en vinM1_1"+"\n"+\
"Vinac_1 vinM1_1 0 PULSE(0 16m 0 1ns 1ns 0.5s 1s)"+"\n"+\
"\n"+\
"* Modelos para tecnología 0.8u < L < 200u 10u < W < 10000u Vdd=2.5V (Allen)"+"\n"+\
"* lambda cambia de acuerdo con la longitud del canal"+"\n"+\
"* nMOS: lambda=0.04 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"* pMOS: lambda=0.05 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"\n"+\
".model nmosG nmos level=2"+"\n"+\
"+ vto = 0.7 kp = 110e-6 gamma = 0.4 phi = 0.7"+"\n"+\
"+ tox = 14e-9 cj = 770e-6 cjsw = 380e-12 mj = 0.5 mjsw = 0.38"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.04"+"\n"+\
"\n"+\
".model pmosG pmos level=2"+"\n"+\
"+ vto = -0.7 kp = 50e-6 gamma = 0.57 phi = 0.8"+"\n"+\
"+ tox = 14e-9 cj = 560e-6 cjsw = 350e-12 mj = 0.5 mjsw = 0.35"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.05"+"\n"+\
"\n"+\
".control"+"\n"+\
"set temp = "+str(Temp)+"\n"+\
"set tnom = "+str(Temp)+"\n"+\
"set color0 =white"+"\n"+\
"set color1=black"+"\n"+\
"op"+"\n"+\
"show all"+"\n"+\
"\n"+\
"*Transitorio"+"\n"+\
"tran .000000001s .0000005s"+"\n"+\
"plot v(vout_1) v(vinm1_1)"+"\n"+\
".endc"+"\n"
for i, line in enumerate(fileinput.input('../ngspice-simulations/Script-Op-Amplifier-Two-Stages-Setting-Time.cir', inplace=1)):
if i == 1: sys.stdout.write(text) # replace 'sit' and write
fileinput.close()
In [1744]:
import sys
import fileinput
def modificar_cir_Op_Amp_Two_Stages_ICMR(W1,W2,W3,W4,W5,W6,W7,W8,L,Cc,I5,Rbias):
text="* Simulación Circuito Amplificador Operacional de dos etapas"+"\n"+ \
"* Universidad Nacional de Colombia 2016"+"\n"+ \
"* CMOS Analógico"+"\n"+ \
"* Grupo Jorge Garzón, Esteban Iafrancesco A"+"\n"+ \
"\n"+\
"Vdd_1 Vdd_1 0 DC 2.5 AC 0"+"\n"+\
"Vss_1 Vss_1 0 DC -2.5 AC 0"+"\n"+"\n"+\
"*Vin2_1 vinM2_1 0 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito del amplificador operacional de dos etapas"+"\n"+\
"M1_1 drainM1_1 vout_1 sourceM1_1 Vss_1 nmosG W="+str(W1)+" L="+str(L)+"\n"+\
"M2_1 drainM2_1 vinM1_1 sourceM1_1 Vss_1 nmosG W="+str(W2)+" L="+str(L)+"\n"+\
"\n"+\
"M3_1 drainM1_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W3)+" L="+str(L)+"\n"+\
"M4_1 drainM2_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W4)+" L="+str(L)+"\n"+\
"\n"+\
"M5_1 sourceM1_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"M6_1 vout_1 drainM2_1 Vdd_1 Vdd_1 pmosG W="+str(W6)+" L="+str(L)+"\n"+\
"\n"+\
"M7_1 vout_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W7)+" L="+str(L)+"\n"+\
"\n"+\
"Cl_1 vout_1 0 10p"+"\n"+\
"Cc_1 vout_1 drainM2_1 "+str(Cc)+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito espejo ideal"+"\n"+\
"*Iref Espejo N de "+str(I5)+" Amps"+"\n"+\
"Iref_1 0 vbiasM5_1 DC "+str(I5)+" AC 0"+"\n"+\
"M8_1 vbiasM5_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"////////////------////////////////////"+"\n"+\
"\n"+\
"*Fuente DC en vinM1_1"+"\n"+\
"Vindc_1 vinM1_1 0 DC 0 AC 0"+"\n"+\
"\n"+\
"* Modelos para tecnología 0.8u < L < 200u 10u < W < 10000u Vdd=2.5V (Allen)"+"\n"+\
"* lambda cambia de acuerdo con la longitud del canal"+"\n"+\
"* nMOS: lambda=0.04 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"* pMOS: lambda=0.05 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"\n"+\
".model nmosG nmos level=2"+"\n"+\
"+ vto = 0.7 kp = 110e-6 gamma = 0.4 phi = 0.7"+"\n"+\
"+ tox = 14e-9 cj = 770e-6 cjsw = 380e-12 mj = 0.5 mjsw = 0.38"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.04"+"\n"+\
"\n"+\
".model pmosG pmos level=2"+"\n"+\
"+ vto = -0.7 kp = 50e-6 gamma = 0.57 phi = 0.8"+"\n"+\
"+ tox = 14e-9 cj = 560e-6 cjsw = 350e-12 mj = 0.5 mjsw = 0.35"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.05"+"\n"+\
"\n"+\
".control"+"\n"+\
"set temp = "+str(Temp)+"\n"+\
"set tnom = "+str(Temp)+"\n"+\
"set color0 =white"+"\n"+\
"set color1=black"+"\n"+\
"op"+"\n"+\
"show all"+"\n"+\
"\n"+\
"*Simulacion en DC vin vs vout y I(vdd_1) vs vin, para observar la rampa de operacion del amplificador"+"\n"+\
"dc vindc_1 -4 4 0.0001"+"\n"+\
"plot v(vout_1)"+"\n"+\
"plot i(vss_1)"+"\n"+\
".endc"+"\n"
for i, line in enumerate(fileinput.input('../ngspice-simulations/Script-Op-Amplifier-Two-Stages-ICMR.cir', inplace=1)):
if i == 1: sys.stdout.write(text) # replace 'sit' and write
fileinput.close()
In [1745]:
import sys
import fileinput
def modificar_cir_Op_Amp_Two_Stages_vout_max_min(W1,W2,W3,W4,W5,W6,W7,W8,L,Cc,I5,Rbias):
text="* Simulación Circuito Amplificador Operacional de dos etapas"+"\n"+ \
"* Universidad Nacional de Colombia 2016"+"\n"+ \
"* CMOS Analógico"+"\n"+ \
"* Grupo Jorge Garzón, Esteban Iafrancesco A"+"\n"+ \
"\n"+\
"Vdd_1 Vdd_1 0 DC 2.5 AC 0"+"\n"+\
"Vss_1 Vss_1 0 DC -2.5 AC 0"+"\n"+"\n"+\
"*Vin2_1 vinM2_1 0 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito del amplificador operacional de dos etapas"+"\n"+\
"M1_1 drainM1_1 vout_1 sourceM1_1 Vss_1 nmosG W="+str(W1)+" L="+str(L)+"\n"+\
"M2_1 drainM2_1 vinM1_1 sourceM1_1 Vss_1 nmosG W="+str(W2)+" L="+str(L)+"\n"+\
"\n"+\
"M3_1 drainM1_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W3)+" L="+str(L)+"\n"+\
"M4_1 drainM2_1 drainM1_1 Vdd_1 Vdd_1 pmosG W="+str(W4)+" L="+str(L)+"\n"+\
"\n"+\
"M5_1 sourceM1_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"M6_1 vout_1 drainM2_1 Vdd_1 Vdd_1 pmosG W="+str(W6)+" L="+str(L)+"\n"+\
"\n"+\
"M7_1 vout_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W7)+" L="+str(L)+"\n"+\
"\n"+\
"Cl_1 vout_1 0 10p"+"\n"+\
"Cc_1 vout_1 drainM2_1 "+str(Cc)+"\n"+\
"////////////------////////////////////"+"\n"+\
"*Circuito espejo ideal"+"\n"+\
"*Iref Espejo N de "+str(I5)+" Amps"+"\n"+\
"Iref_1 0 vbiasM5_1 DC "+str(I5)+" AC 0"+"\n"+\
"M8_1 vbiasM5_1 vbiasM5_1 Vss_1 Vss_1 nmosG W="+str(W5)+" L="+str(L)+"\n"+\
"\n"+\
"VRBref_1 RBref2_1 Vss_1 DC 0 AC 0"+"\n"+\
"////////////------////////////////////"+"\n"+\
"\n"+\
"*Fuente AC en vinM1_1 con 6 voltios pico pico"+"\n"+\
"Vinac_1 vinM1_1 0 sin(0 3 100k) dc=0 ac=1"+"\n"+\
"\n"+\
"* Modelos para tecnología 0.8u < L < 200u 10u < W < 10000u Vdd=2.5V (Allen)"+"\n"+\
"* lambda cambia de acuerdo con la longitud del canal"+"\n"+\
"* nMOS: lambda=0.04 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"* pMOS: lambda=0.05 para L=1u y lambda=0.01 para L=2u"+"\n"+\
"\n"+\
".model nmosG nmos level=2"+"\n"+\
"+ vto = 0.7 kp = 110e-6 gamma = 0.4 phi = 0.7"+"\n"+\
"+ tox = 14e-9 cj = 770e-6 cjsw = 380e-12 mj = 0.5 mjsw = 0.38"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.04"+"\n"+\
"\n"+\
".model pmosG pmos level=2"+"\n"+\
"+ vto = -0.7 kp = 50e-6 gamma = 0.57 phi = 0.8"+"\n"+\
"+ tox = 14e-9 cj = 560e-6 cjsw = 350e-12 mj = 0.5 mjsw = 0.35"+"\n"+\
"+ cgso = 220e-12 cgdo = 220e-12 cgbo = 700e-12"+"\n"+\
"+ lambda = 0.05"+"\n"+\
"\n"+\
".control"+"\n"+\
"set temp = "+str(Temp)+"\n"+\
"set tnom = "+str(Temp)+"\n"+\
"set color0 =white"+"\n"+\
"set color1=black"+"\n"+\
"op"+"\n"+\
"show all"+"\n"+\
"\n"+\
"**Transitorio vin vs vout"+"\n"+\
"tran .000001s .00001s"+"\n"+\
"plot v(vout_1) v(vinm1_1)"+"\n"+\
".endc"+"\n"
for i, line in enumerate(fileinput.input('../ngspice-simulations/Script-Op-Amplifier-Two-Stages-Vout-min-max.cir', inplace=1)):
if i == 1: sys.stdout.write(text) # replace 'sit' and write
fileinput.close()
In [1746]:
modificar_cir_Op_Amp_Two_Stages(W1,W2,W3,W4,W5,W6,W7,W5,L_base,Cc_final,I5*11,Rbias)
modificar_cir_Op_Amp_Two_Stages_slew_rate(W1,W2,W3,W4,W5,W6,W7,W5,L_base,Cc_final,I5*11,Rbias)
modificar_cir_Op_Amp_Two_Stages_setting_time(W1,W2,W3,W4,W5,W6,W7,W5,L_base,Cc_final,I5*11,Rbias)
modificar_cir_Op_Amp_Two_Stages_ICMR(W1,W2,W3,W4,W5,W6,W7,W5,L_base,Cc_final,I5*11,Rbias)
modificar_cir_Op_Amp_Two_Stages_vout_max_min(W1,W2,W3,W4,W5,W6,W7,W5,L_base,Cc_final,I5*11,Rbias)
In [1747]:
print("Ganacia en DBs: "+str(AV_db))
print("Corriente I5: "+str(I5))
print("W1/L1: "+str(S1_final))
print("W2/L2: "+str(S2_final))
print("W3/L3: "+str(S3_final))
print("W4/L4: "+str(S4_final))
print("W5/L5: "+str(S5_final))
print("W6/L6: "+str(S6_final))
print("W7/L7: "+str(S7_final))
In [1748]:
print("Tamaño W1: "+str(W1)+ " Tamaño L1: "+str(L1))
print("Tamaño W2: "+str(W2)+ " Tamaño L2: "+str(L2))
print("Tamaño W3: "+str(W3)+ " Tamaño L3: "+str(L3))
print("Tamaño W4: "+str(W4)+ " Tamaño L4: "+str(L4))
print("Tamaño W5: "+str(W5)+ " Tamaño L5: "+str(L5))
print("Tamaño W6: "+str(W6)+ " Tamaño L6: "+str(L6))
print("Tamaño W7: "+str(W7)+ " Tamaño L7: "+str(L7))
In [1749]:
print("Valores para el diseño del Layout del amplificador en Electric escala 800nm: ")
print("Tamaño W1: "+str(W1/800e-9)+ " Tamaño L1: "+str(L1/800e-9))
print("Tamaño W2: "+str(W2/800e-9)+ " Tamaño L2: "+str(L2/800e-9))
print("Tamaño W3: "+str(W3/800e-9)+ " Tamaño L3: "+str(L3/800e-9))
print("Tamaño W4: "+str(W4/800e-9)+ " Tamaño L4: "+str(L4/800e-9))
print("Tamaño W5: "+str(W5/800e-9)+ " Tamaño L5: "+str(L5/800e-9))
print("Tamaño W6: "+str(W6/800e-9)+ " Tamaño L6: "+str(L6/800e-9))
print("Tamaño W7: "+str(W7/800e-9)+ " Tamaño L7: "+str(L7/800e-9))
In [1750]:
print("Valores para el diseño del Layout del multiplicador-beta en Electric escala 800nm: ")
print("Tamaño WB1: "+str(8e-6/800e-9)+ " Tamaño L1: "+str(1600e-9/800e-9))
print("Tamaño WB2: "+str(32e-6/800e-9)+ " Tamaño L2: "+str(1600e-9/800e-9))
print("Tamaño WB3: "+str(24e-6/800e-9)+ " Tamaño L3: "+str(1600e-9/800e-9))
print("Tamaño WB4: "+str(24e-6/800e-9)+ " Tamaño L4: "+str(1600e-9/800e-9))