summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_74377.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_74377.cpp')
-rw-r--r--src/lib/netlist/devices/nld_74377.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/lib/netlist/devices/nld_74377.cpp b/src/lib/netlist/devices/nld_74377.cpp
new file mode 100644
index 00000000000..83da292737f
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74377.cpp
@@ -0,0 +1,101 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+/*
+ * nld_74377.cpp
+ *
+ * DM74377: Octal D Flip-Flop With Enable
+ *
+ * +--------------+
+ * /E |1 ++ 20| VCC
+ * Q0 |2 19| Q7
+ * D0 |3 18| D7
+ * D1 |4 74377 17| D6
+ * Q1 |5 16| Q6
+ * Q2 |6 15| Q5
+ * D2 |7 14| D5
+ * D3 |8 13| D4
+ * Q3 |9 12| Q4
+ * GND |10 11| CP
+ * +--------------+
+ *
+ * DM74378: Hex D Flip-Flop With Enable
+ *
+ * +--------------+
+ * /E |1 ++ 16| VCC
+ * Q0 |2 15| Q5
+ * D0 |3 14| D5
+ * D1 |4 74378 13| D4
+ * Q1 |5 12| Q4
+ * D2 |6 11| D3
+ * Q2 |7 10| Q3
+ * GND |8 9| CP
+ * +--------------+
+ *
+ * DM74379: 4-bit D Flip-Flop With Enable
+ *
+ * +--------------+
+ * /E |1 ++ 16| VCC
+ * Q0 |2 15| Q3
+ * /Q0 |3 14| /Q3
+ * D0 |4 74379 13| D3
+ * D1 |5 12| D2
+ * /Q1 |6 11| /Q2
+ * Q1 |7 10| Q2
+ * GND |8 9| CP
+ * +--------------+
+ *
+ * Naming conventions follow Motorola datasheet
+ *
+ */
+
+#include "nl_base.h"
+
+namespace netlist::devices {
+
+ constexpr const std::array<netlist_time, 2> delay = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(25) };
+
+ NETLIB_OBJECT(74377_GATE)
+ {
+ NETLIB_CONSTRUCTOR(74377_GATE)
+ , m_E(*this, "E", NETLIB_DELEGATE(inputs))
+ , m_D(*this, "D", NETLIB_DELEGATE(inputs))
+ , m_CP(*this, "CP", NETLIB_DELEGATE(inputs))
+ , m_Q(*this, "Q")
+ , m_QQ(*this, "QQ")
+ , m_cp(*this, "m_cp", 0)
+ , m_power_pins(*this)
+ {
+ }
+
+ NETLIB_RESETI()
+ {
+ }
+
+ private:
+ NETLIB_HANDLERI(inputs)
+ {
+ netlist_sig_t last_cp = m_cp;
+
+ m_cp = m_CP();
+
+ if (!m_E() && !last_cp && m_cp)
+ {
+ netlist_sig_t d = m_D();
+ m_Q.push(d, delay[d]);
+ m_QQ.push(d ^ 1, delay[d ^ 1]);
+ }
+ }
+
+ logic_input_t m_E;
+ logic_input_t m_D;
+ logic_input_t m_CP;
+ logic_output_t m_Q;
+ logic_output_t m_QQ;
+
+ state_var_sig m_cp;
+ nld_power_pins m_power_pins;
+ };
+
+ NETLIB_DEVICE_IMPL(74377_GATE, "TTL_74377_GATE", "")
+
+} // namespace netlist::devices