Previous 199869 Revisions Next

r40065 Wednesday 29th July, 2015 at 21:15:43 UTC by Couriersud
Improve MB3614 parameters. Changed some opamps to type "idealized" (type
1) in Congo Bongo netlist and got 50% speed improvement.
[nl_examples]congo_bongo.c
[src/emu/netlist/analog]nld_opamps.c
[src/emu/netlist/macro]nlm_opamp.c

trunk/nl_examples/congo_bongo.c
r248576r248577
3434// .END
3535
3636   SOLVER(Solver, 24000)
37   PARAM(Solver.ACCURACY, 1e-9)
38   PARAM(Solver.NR_LOOPS, 90)
37   PARAM(Solver.ACCURACY, 1e-8)
38   PARAM(Solver.NR_LOOPS, 150)
3939   PARAM(Solver.SOR_FACTOR, 0.001)
4040   PARAM(Solver.GS_LOOPS, 1)
4141   //PARAM(Solver.GS_THRESHOLD, 99)
r248576r248577
8080    */
8181   PARAM(XU16.B.MODEL, "MB3614(UGF=11k)")
8282   PARAM(XU17.C.MODEL, "MB3614(UGF=11k)")
83   //PARAM(XU16.B.MODEL, "MB3614_SLOW")
84   //PARAM(XU17.C.MODEL, "MB3614_SLOW")
8583
84   PARAM(XU17.A.MODEL, "MB3614(TYPE=1)")
85   PARAM(XU17.B.MODEL, "MB3614(TYPE=1)")
86   PARAM(XU17.D.MODEL, "MB3614(TYPE=1)")
87
88   //PARAM(XU16.A.MODEL, "MB3614(TYPE=1)")
89   PARAM(XU16.C.MODEL, "MB3614(TYPE=1)")
90   PARAM(XU16.D.MODEL, "MB3614(TYPE=1)")
91
92#if 0
93   PARAM(XU13.A.MODEL, "MB3614(TYPE=1)")
94   PARAM(XU13.B.MODEL, "MB3614(TYPE=1)")
95   PARAM(XU13.C.MODEL, "MB3614(TYPE=1)")
96   PARAM(XU13.D.MODEL, "MB3614(TYPE=1)")
97#endif
98
8699   OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50)
87100   OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50)
88101
trunk/src/emu/netlist/analog/nld_opamps.c
r248576r248577
4242
4343/*
4444 * Type = 0: Impedance changer
45 *        1; Ideal opamp
45 *        1; Idealized opamp
4646 *        2; opamp with first pole
4747 *        3: opamp with first pole + output limit
4848 *        4: opamp with input stage, first pole + output limit
r248576r248577
5050
5151NETLIB_START(OPAMP)
5252{
53   register_sub("RP1", m_RP);
54   register_sub("CP1", m_CP);
55   register_sub("G1", m_G1);
56   register_sub("EBUF", m_EBUF);
57   register_sub("DN", m_DN);
58   register_sub("DP", m_DP);
53   register_param("MODEL", m_model, "");
5954
55   m_type = m_model.model_value("TYPE");
56
6057   register_input("VCC", m_VCC);
6158   register_input("GND", m_GND);
6259
r248576r248577
6461   register_output("VH", m_VH);
6562   register_output("VREF", m_VREF);
6663
67   register_param("MODEL", m_model, "");
64   register_sub("G1", m_G1);
65   register_sub("RP1", m_RP);
6866
69   m_type = m_model.model_value("TYPE");
67   if (m_type == 1)
68   {
69      register_subalias("PLUS", "G1.IP");
70      register_subalias("MINUS", "G1.IN");
71      register_subalias("OUT", "G1.OP");
7072
71   if (m_type == 3)
73      connect_late("G1.ON", "VREF");
74      connect_late("RP1.2", "VREF");
75      connect_late("RP1.1", "G1.OP");
76
77   }
78   else if (m_type == 3)
7279   {
80      register_sub("CP1", m_CP);
81      register_sub("EBUF", m_EBUF);
82      register_sub("DN", m_DN);
83      register_sub("DP", m_DP);
84
7385      register_subalias("PLUS", "G1.IP");
7486      register_subalias("MINUS", "G1.IN");
7587      register_subalias("OUT", "EBUF.OP");
r248576r248577
111123
112124NETLIB_RESET(OPAMP)
113125{
114   m_EBUF.do_reset();
115126   m_G1.do_reset();
116   m_DP.do_reset();
117   m_DN.do_reset();
118   m_CP.do_reset();
119   m_RP.do_reset();
120
121   m_EBUF.m_G.setTo(1.0);
122127   m_G1.m_RI.setTo(m_model.model_value("RI"));
123   m_EBUF.m_RO.setTo(m_model.model_value("RO"));
124   m_DP.m_model.setTo("D(IS=1e-15 N=1)");
125   m_DN.m_model.setTo("D(IS=1e-15 N=1)");
126128
127   double CP = m_model.model_value("DAB") / m_model.model_value("SLEW");
128   double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF");
129   double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RP;
129   if (m_type == 1)
130   {
131      double RO = m_model.model_value("RO");
132      double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RO;
133      m_RP.set_R(RO);
134      m_G1.m_G.setTo(G);
135   }
136   else if (m_type == 3)
137   {
138      m_EBUF.do_reset();
139      m_DP.do_reset();
140      m_DN.do_reset();
141      m_CP.do_reset();
142      m_RP.do_reset();
130143
131   //printf("CP=%e RP=%f G=%f\n", CP, RP, G);
132   m_CP.m_C.setTo(CP);
133   m_RP.set_R(RP);
134   m_G1.m_G.setTo(G);
144      m_EBUF.m_G.setTo(1.0);
145      m_EBUF.m_RO.setTo(m_model.model_value("RO"));
146      m_DP.m_model.setTo("D(IS=1e-15 N=1)");
147      m_DN.m_model.setTo("D(IS=1e-15 N=1)");
135148
149      double CP = m_model.model_value("DAB") / m_model.model_value("SLEW");
150      double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF");
151      double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RP;
152
153      //printf("CP=%e RP=%f G=%f\n", CP, RP, G);
154      m_CP.m_C.setTo(CP);
155      m_RP.set_R(RP);
156      m_G1.m_G.setTo(G);
157
158   }
159
160
136161}
137162
138163NETLIB_UPDATE_PARAM(OPAMP)
trunk/src/emu/netlist/macro/nlm_opamp.c
r248576r248577
7373
7474   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)")
7575   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)")
76   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)")
77   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)")
76   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)")
7877
7978   LOCAL_LIB_ENTRY(MB3614_DIP)
8079   LOCAL_LIB_ENTRY(LM324_DIP)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team