summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-03-21 15:42:11 +0100
committer couriersud <couriersud@gmx.org>2020-03-21 15:42:45 +0100
commite160240f6ac84aeb1a6f3a0427d451b9ee66b2f0 (patch)
tree5e2577deec90835c8794c347f9085519040157d8
parent840a9c640f15c702cc2a732dd8596bf784495a19 (diff)
netlist: Document alternative opamp output stage. (nw)
-rw-r--r--src/lib/netlist/analog/nld_opamps.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/lib/netlist/analog/nld_opamps.cpp b/src/lib/netlist/analog/nld_opamps.cpp
index 8af6ab28170..e47a0e15117 100644
--- a/src/lib/netlist/analog/nld_opamps.cpp
+++ b/src/lib/netlist/analog/nld_opamps.cpp
@@ -7,6 +7,13 @@
#include "nlid_fourterm.h"
#include "nlid_twoterm.h"
+//
+// Set to 1 to model output impedance as a series resistor.
+// The default is that the VCVS already has an internal impedance.
+// This needs more investigation.
+//
+#define TEST_ALT_OUTPUT (0)
+
namespace netlist
{
namespace analog
@@ -130,7 +137,9 @@ namespace netlist
{
create_and_register_subdevice("CP1", m_CP);
create_and_register_subdevice("EBUF", m_EBUF);
-
+#if TEST_ALT_OUTPUT
+ create_and_register_subdevice("RO", m_RO);
+#endif
register_subalias("PLUS", "G1.IP");
register_subalias("MINUS", "G1.IN");
@@ -147,7 +156,12 @@ namespace netlist
}
if (m_type == 2)
{
+#if TEST_ALT_OUTPUT
+ connect("EBUF.OP", "RO.1");
+ register_subalias("OUT", "RO.2");
+#else
register_subalias("OUT", "EBUF.OP");
+#endif
}
if (m_type == 3)
{
@@ -159,8 +173,12 @@ namespace netlist
connect("VL", "DN.A");
connect("DP.A", "DN.K");
connect("DN.K", "RP1.1");
-
+#if TEST_ALT_OUTPUT
+ connect("EBUF.OP", "RO.1");
+ register_subalias("OUT", "RO.2");
+#else
register_subalias("OUT", "EBUF.OP");
+#endif
}
}
@@ -176,6 +194,9 @@ namespace netlist
analog::NETLIB_SUB(R_base) m_RP;
analog::NETLIB_SUB(VCCS) m_G1;
NETLIB_SUB_UPTR(analog, C) m_CP;
+#if TEST_ALT_OUTPUT
+ NETLIB_SUB_UPTR(analog, R_base) m_RO;
+#endif
NETLIB_SUB_UPTR(analog, VCVS) m_EBUF;
NETLIB_SUB_UPTR(analog, D) m_DP;
NETLIB_SUB_UPTR(analog, D) m_DN;
@@ -232,12 +253,22 @@ namespace netlist
if (m_type == 2)
{
m_EBUF->m_G.setTo(nlconst::one());
+#if TEST_ALT_OUTPUT
+ m_EBUF->m_RO.setTo(0.001);
+ m_RO->set_R(m_model.m_RO);
+#else
m_EBUF->m_RO.setTo(m_model.m_RO);
+#endif
}
if (m_type == 3)
{
m_EBUF->m_G.setTo(nlconst::one());
+#if TEST_ALT_OUTPUT
+ m_EBUF->m_RO.setTo(0.001);
+ m_RO->set_R(m_model.m_RO);
+#else
m_EBUF->m_RO.setTo(m_model.m_RO);
+#endif
}
}