summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_r2r_dac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_r2r_dac.cpp')
-rw-r--r--src/lib/netlist/devices/nld_r2r_dac.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/netlist/devices/nld_r2r_dac.cpp b/src/lib/netlist/devices/nld_r2r_dac.cpp
new file mode 100644
index 00000000000..8ad59dfc9f8
--- /dev/null
+++ b/src/lib/netlist/devices/nld_r2r_dac.cpp
@@ -0,0 +1,42 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_R2R_dac.c
+ *
+ */
+
+#include "nld_r2r_dac.h"
+
+NETLIB_NAMESPACE_DEVICES_START()
+
+NETLIB_START(r2r_dac)
+{
+ NETLIB_NAME(twoterm)::start();
+ register_terminal("VOUT", m_P);
+ register_terminal("VGND", m_N);
+ register_param("R", m_R, 1.0);
+ register_param("VIN", m_VIN, 1.0);
+ register_param("N", m_num, 1);
+ register_param("VAL", m_val, 1);
+}
+
+NETLIB_RESET(r2r_dac)
+{
+ NETLIB_NAME(twoterm)::reset();
+}
+
+NETLIB_UPDATE(r2r_dac)
+{
+ NETLIB_NAME(twoterm)::update();
+}
+
+NETLIB_UPDATE_PARAM(r2r_dac)
+{
+ update_dev();
+
+ nl_double V = m_VIN.Value() / (nl_double) (1 << m_num.Value()) * (nl_double) m_val.Value();
+
+ this->set(1.0 / m_R.Value(), V, 0.0);
+}
+
+NETLIB_NAMESPACE_DEVICES_END()