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]:
30000000.0

In [1703]:
Cc_calculado=0.044*Cl
#Cc_calculado=0.022*Cl
Cc_calculado


Out[1703]:
4.3999999999999994e-13

In [1704]:
Cc=Cc_calculado*1.6
Cc


Out[1704]:
7.039999999999999e-13

In [1705]:
I5=SR*Cc
I5


Out[1705]:
2.1119999999999998e-05

In [1706]:
I3=I5/2
I3


Out[1706]:
1.0559999999999999e-05

In [1707]:
S3=I5/(Kp*(Vdd-Vinmax-Vtomax+Vtomin)*(Vdd-Vinmax-Vtomax+Vtomin))
S3


Out[1707]:
10.55999999999999

In [1708]:
S4=S3
S4


Out[1708]:
10.55999999999999

In [1709]:
import math
S3_final=round(S3)
S3_final


Out[1709]:
11

In [1710]:
S4_final=S3_final
S4_final


Out[1710]:
11

In [1711]:
#GB_final=GB*1000
GB_final=GB*500
GB_final


Out[1711]:
25000000.0

In [1712]:
Gm1=GB_final*Cc*2*math.pi
Gm2=Gm1
Gm1


Out[1712]:
0.0001105840614063607

In [1713]:
S1=(Gm1*Gm1)/(2*Kn*I3)
S1


Out[1713]:
5.263789013914323

In [1714]:
S1_final=round(S1)
S1_final
S2_final=S1_final
S2_final


Out[1714]:
5

In [1715]:
Vds5_sat=Vinmin-Vss-math.sqrt(I5/(Kn*S1_final))-Vtomax
Vds5_sat


Out[1715]:
0.45404082057734574

In [1716]:
S5=(2*I5)/(Kn*Vds5_sat*Vds5_sat)
S5


Out[1716]:
1.8626936094268722

In [1717]:
S5_final=round(S5)
S5_final


Out[1717]:
2

In [1718]:
Gm6=Gm1*10
Gm6


Out[1718]:
0.0011058406140636071

In [1719]:
S6_final=100
Gm4=S4_final*Gm6/S6_final
Gm4


Out[1719]:
0.00012164246754699678

In [1720]:
S6_final=S4_final*Gm6/Gm4
S6_final


Out[1720]:
100.0

In [1721]:
I6=Gm6*Gm6/(2*Kp*S6_final)
I6


Out[1721]:
0.00012228834637125757

In [1722]:
S7=S5_final*(I6/I5)
S7


Out[1722]:
11.580335830611514

In [1723]:
S7_final=round(S7)
S7_final


Out[1723]:
12

In [1724]:
Pdis=(Vdd-Vss)*(3*I5+I6)
Pdis


Out[1724]:
0.0009282417318562878

In [1725]:
Av=2*Gm2*Gm6/(I5*(Lambda2+Lambda3)*(Lambda2+Lambda3)*I6)
Av


Out[1725]:
11690.983913206137

In [1726]:
AV_db=20*math.log10(Av)
AV_db


Out[1726]:
81.35702125847115

In [1727]:
L_base=2*800e-9
L_base


Out[1727]:
1.6e-06

In [1728]:
W1=S1_final*L_base
L1=L_base
W1


Out[1728]:
8e-06

In [1729]:
L1


Out[1729]:
1.6e-06

In [1730]:
W2=S2_final*L_base
L2=L_base
W2


Out[1730]:
8e-06

In [1731]:
L2


Out[1731]:
1.6e-06

In [1732]:
W3=S3_final*L_base
L3=L_base
W3


Out[1732]:
1.76e-05

In [1733]:
L3


Out[1733]:
1.6e-06

In [1734]:
W4=S4_final*L_base
L4=L_base
W4


Out[1734]:
1.76e-05

In [1735]:
L4


Out[1735]:
1.6e-06

In [1736]:
W5=S5_final*L_base
L5=L_base
W5


Out[1736]:
3.2e-06

In [1737]:
W6=S6_final*L_base
L6=L_base
W6


Out[1737]:
0.00015999999999999999

In [1738]:
W7=S7_final*L_base
L7=L_base
W7


Out[1738]:
1.92e-05

In [1739]:
#Cc_final=Cc*1.5
Cc_final=Cc*0.6
Cc_final


Out[1739]:
4.2239999999999995e-13

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]:
4639.185118907534

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))


Ganacia en DBs: 81.35702125847115
Corriente I5: 2.1119999999999998e-05
W1/L1: 5
W2/L2: 5
W3/L3: 11
W4/L4: 11
W5/L5: 2
W6/L6: 100.0
W7/L7: 12

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))


Tamaño W1: 8e-06 Tamaño L1: 1.6e-06
Tamaño W2: 8e-06 Tamaño L2: 1.6e-06
Tamaño W3: 1.76e-05 Tamaño L3: 1.6e-06
Tamaño W4: 1.76e-05 Tamaño L4: 1.6e-06
Tamaño W5: 3.2e-06 Tamaño L5: 1.6e-06
Tamaño W6: 0.00015999999999999999 Tamaño L6: 1.6e-06
Tamaño W7: 1.92e-05 Tamaño L7: 1.6e-06

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))


Valores para el diseño del Layout del amplificador en Electric escala 800nm: 
Tamaño W1: 10.0 Tamaño L1: 2.0
Tamaño W2: 10.0 Tamaño L2: 2.0
Tamaño W3: 22.000000000000004 Tamaño L3: 2.0
Tamaño W4: 22.000000000000004 Tamaño L4: 2.0
Tamaño W5: 4.0 Tamaño L5: 2.0
Tamaño W6: 200.0 Tamaño L6: 2.0
Tamaño W7: 24.0 Tamaño L7: 2.0

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))


Valores para el diseño del Layout del multiplicador-beta en Electric escala 800nm: 
Tamaño WB1: 10.0 Tamaño L1: 2.0
Tamaño WB2: 40.0 Tamaño L2: 2.0
Tamaño WB3: 30.000000000000004 Tamaño L3: 2.0
Tamaño WB4: 30.000000000000004 Tamaño L4: 2.0