Improve MB3614 parameters. Changed some opamps to type "idealized" (type

1) in Congo Bongo netlist and got 50% speed improvement.
This commit is contained in:
couriersud 2015-07-29 23:15:26 +02:00
parent 1c046325a5
commit 9526556bf8
3 changed files with 71 additions and 34 deletions

View File

@ -34,8 +34,8 @@ NETLIST_START(dummy)
// .END
SOLVER(Solver, 24000)
PARAM(Solver.ACCURACY, 1e-9)
PARAM(Solver.NR_LOOPS, 90)
PARAM(Solver.ACCURACY, 1e-8)
PARAM(Solver.NR_LOOPS, 150)
PARAM(Solver.SOR_FACTOR, 0.001)
PARAM(Solver.GS_LOOPS, 1)
//PARAM(Solver.GS_THRESHOLD, 99)
@ -80,8 +80,21 @@ NETLIST_START(dummy)
*/
PARAM(XU16.B.MODEL, "MB3614(UGF=11k)")
PARAM(XU17.C.MODEL, "MB3614(UGF=11k)")
//PARAM(XU16.B.MODEL, "MB3614_SLOW")
//PARAM(XU17.C.MODEL, "MB3614_SLOW")
PARAM(XU17.A.MODEL, "MB3614(TYPE=1)")
PARAM(XU17.B.MODEL, "MB3614(TYPE=1)")
PARAM(XU17.D.MODEL, "MB3614(TYPE=1)")
//PARAM(XU16.A.MODEL, "MB3614(TYPE=1)")
PARAM(XU16.C.MODEL, "MB3614(TYPE=1)")
PARAM(XU16.D.MODEL, "MB3614(TYPE=1)")
#if 0
PARAM(XU13.A.MODEL, "MB3614(TYPE=1)")
PARAM(XU13.B.MODEL, "MB3614(TYPE=1)")
PARAM(XU13.C.MODEL, "MB3614(TYPE=1)")
PARAM(XU13.D.MODEL, "MB3614(TYPE=1)")
#endif
OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50)
OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50)

View File

@ -42,7 +42,7 @@ NETLIB_NAMESPACE_DEVICES_START()
/*
* Type = 0: Impedance changer
* 1; Ideal opamp
* 1; Idealized opamp
* 2; opamp with first pole
* 3: opamp with first pole + output limit
* 4: opamp with input stage, first pole + output limit
@ -50,12 +50,9 @@ NETLIB_NAMESPACE_DEVICES_START()
NETLIB_START(OPAMP)
{
register_sub("RP1", m_RP);
register_sub("CP1", m_CP);
register_sub("G1", m_G1);
register_sub("EBUF", m_EBUF);
register_sub("DN", m_DN);
register_sub("DP", m_DP);
register_param("MODEL", m_model, "");
m_type = m_model.model_value("TYPE");
register_input("VCC", m_VCC);
register_input("GND", m_GND);
@ -64,12 +61,27 @@ NETLIB_START(OPAMP)
register_output("VH", m_VH);
register_output("VREF", m_VREF);
register_param("MODEL", m_model, "");
register_sub("G1", m_G1);
register_sub("RP1", m_RP);
m_type = m_model.model_value("TYPE");
if (m_type == 3)
if (m_type == 1)
{
register_subalias("PLUS", "G1.IP");
register_subalias("MINUS", "G1.IN");
register_subalias("OUT", "G1.OP");
connect_late("G1.ON", "VREF");
connect_late("RP1.2", "VREF");
connect_late("RP1.1", "G1.OP");
}
else if (m_type == 3)
{
register_sub("CP1", m_CP);
register_sub("EBUF", m_EBUF);
register_sub("DN", m_DN);
register_sub("DP", m_DP);
register_subalias("PLUS", "G1.IP");
register_subalias("MINUS", "G1.IN");
register_subalias("OUT", "EBUF.OP");
@ -111,27 +123,40 @@ NETLIB_UPDATE(OPAMP)
NETLIB_RESET(OPAMP)
{
m_EBUF.do_reset();
m_G1.do_reset();
m_DP.do_reset();
m_DN.do_reset();
m_CP.do_reset();
m_RP.do_reset();
m_EBUF.m_G.setTo(1.0);
m_G1.m_RI.setTo(m_model.model_value("RI"));
m_EBUF.m_RO.setTo(m_model.model_value("RO"));
m_DP.m_model.setTo("D(IS=1e-15 N=1)");
m_DN.m_model.setTo("D(IS=1e-15 N=1)");
double CP = m_model.model_value("DAB") / m_model.model_value("SLEW");
double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF");
double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RP;
if (m_type == 1)
{
double RO = m_model.model_value("RO");
double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RO;
m_RP.set_R(RO);
m_G1.m_G.setTo(G);
}
else if (m_type == 3)
{
m_EBUF.do_reset();
m_DP.do_reset();
m_DN.do_reset();
m_CP.do_reset();
m_RP.do_reset();
m_EBUF.m_G.setTo(1.0);
m_EBUF.m_RO.setTo(m_model.model_value("RO"));
m_DP.m_model.setTo("D(IS=1e-15 N=1)");
m_DN.m_model.setTo("D(IS=1e-15 N=1)");
double CP = m_model.model_value("DAB") / m_model.model_value("SLEW");
double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF");
double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RP;
//printf("CP=%e RP=%f G=%f\n", CP, RP, G);
m_CP.m_C.setTo(CP);
m_RP.set_R(RP);
m_G1.m_G.setTo(G);
}
//printf("CP=%e RP=%f G=%f\n", CP, RP, G);
m_CP.m_C.setTo(CP);
m_RP.set_R(RP);
m_G1.m_G.setTo(G);
}

View File

@ -73,8 +73,7 @@ NETLIST_START(OPAMP_lib)
NET_MODEL("LM324 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)")
NET_MODEL("LM358 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.001)")
NET_MODEL("MB3614 OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
NET_MODEL("MB3614_SLOW OPAMP(TYPE=3 VLH=2.0 VLL=0.2 FPF=5 UGF=11k SLEW=0.6M RI=1000k RO=50 DAB=0.002)")
NET_MODEL("MB3614 OPAMP(TYPE=3 VLH=1.4 VLL=0.02 FPF=2 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.0002)")
LOCAL_LIB_ENTRY(MB3614_DIP)
LOCAL_LIB_ENTRY(LM324_DIP)