mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +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
|
// .END
|
||||||
|
|
||||||
SOLVER(Solver, 24000)
|
SOLVER(Solver, 24000)
|
||||||
PARAM(Solver.ACCURACY, 1e-9)
|
PARAM(Solver.ACCURACY, 1e-8)
|
||||||
PARAM(Solver.NR_LOOPS, 90)
|
PARAM(Solver.NR_LOOPS, 150)
|
||||||
PARAM(Solver.SOR_FACTOR, 0.001)
|
PARAM(Solver.SOR_FACTOR, 0.001)
|
||||||
PARAM(Solver.GS_LOOPS, 1)
|
PARAM(Solver.GS_LOOPS, 1)
|
||||||
//PARAM(Solver.GS_THRESHOLD, 99)
|
//PARAM(Solver.GS_THRESHOLD, 99)
|
||||||
@ -80,8 +80,21 @@ NETLIST_START(dummy)
|
|||||||
*/
|
*/
|
||||||
PARAM(XU16.B.MODEL, "MB3614(UGF=11k)")
|
PARAM(XU16.B.MODEL, "MB3614(UGF=11k)")
|
||||||
PARAM(XU17.C.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(C51.1, RES_K(20), 50)
|
||||||
OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50)
|
OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50)
|
||||||
|
@ -42,7 +42,7 @@ NETLIB_NAMESPACE_DEVICES_START()
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Type = 0: Impedance changer
|
* Type = 0: Impedance changer
|
||||||
* 1; Ideal opamp
|
* 1; Idealized opamp
|
||||||
* 2; opamp with first pole
|
* 2; opamp with first pole
|
||||||
* 3: opamp with first pole + output limit
|
* 3: opamp with first pole + output limit
|
||||||
* 4: opamp with input stage, first pole + output limit
|
* 4: opamp with input stage, first pole + output limit
|
||||||
@ -50,12 +50,9 @@ NETLIB_NAMESPACE_DEVICES_START()
|
|||||||
|
|
||||||
NETLIB_START(OPAMP)
|
NETLIB_START(OPAMP)
|
||||||
{
|
{
|
||||||
register_sub("RP1", m_RP);
|
register_param("MODEL", m_model, "");
|
||||||
register_sub("CP1", m_CP);
|
|
||||||
register_sub("G1", m_G1);
|
m_type = m_model.model_value("TYPE");
|
||||||
register_sub("EBUF", m_EBUF);
|
|
||||||
register_sub("DN", m_DN);
|
|
||||||
register_sub("DP", m_DP);
|
|
||||||
|
|
||||||
register_input("VCC", m_VCC);
|
register_input("VCC", m_VCC);
|
||||||
register_input("GND", m_GND);
|
register_input("GND", m_GND);
|
||||||
@ -64,12 +61,27 @@ NETLIB_START(OPAMP)
|
|||||||
register_output("VH", m_VH);
|
register_output("VH", m_VH);
|
||||||
register_output("VREF", m_VREF);
|
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 == 1)
|
||||||
|
|
||||||
if (m_type == 3)
|
|
||||||
{
|
{
|
||||||
|
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("PLUS", "G1.IP");
|
||||||
register_subalias("MINUS", "G1.IN");
|
register_subalias("MINUS", "G1.IN");
|
||||||
register_subalias("OUT", "EBUF.OP");
|
register_subalias("OUT", "EBUF.OP");
|
||||||
@ -111,27 +123,40 @@ NETLIB_UPDATE(OPAMP)
|
|||||||
|
|
||||||
NETLIB_RESET(OPAMP)
|
NETLIB_RESET(OPAMP)
|
||||||
{
|
{
|
||||||
m_EBUF.do_reset();
|
|
||||||
m_G1.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_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");
|
if (m_type == 1)
|
||||||
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;
|
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("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("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 OPAMP(TYPE=3 VLH=1.4 VLL=0.02 FPF=2 UGF=500k SLEW=0.6M RI=1000k RO=50 DAB=0.0002)")
|
||||||
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)")
|
|
||||||
|
|
||||||
LOCAL_LIB_ENTRY(MB3614_DIP)
|
LOCAL_LIB_ENTRY(MB3614_DIP)
|
||||||
LOCAL_LIB_ENTRY(LM324_DIP)
|
LOCAL_LIB_ENTRY(LM324_DIP)
|
||||||
|
Loading…
Reference in New Issue
Block a user