mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
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:
parent
1c046325a5
commit
9526556bf8
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user