summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_74174.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_74174.cpp')
-rw-r--r--src/lib/netlist/devices/nld_74174.cpp101
1 files changed, 20 insertions, 81 deletions
diff --git a/src/lib/netlist/devices/nld_74174.cpp b/src/lib/netlist/devices/nld_74174.cpp
index ed45783f31e..2789eef0bb5 100644
--- a/src/lib/netlist/devices/nld_74174.cpp
+++ b/src/lib/netlist/devices/nld_74174.cpp
@@ -37,15 +37,15 @@
namespace netlist::devices {
- NETLIB_OBJECT(74174_GATE)
+ NETLIB_OBJECT(74174)
{
- NETLIB_CONSTRUCTOR(74174_GATE)
+ NETLIB_CONSTRUCTOR(74174)
, m_CLK(*this, "CLK", NETLIB_DELEGATE(clk))
- , m_Q(*this, "Q")
+ , m_Q(*this, 1, "Q{}")
, m_clrq(*this, "m_clr", 0)
, m_data(*this, "m_data", 0)
- , m_D(*this, "D", NETLIB_DELEGATE(other))
- , m_CLRQ(*this, "CLRQ", NETLIB_DELEGATE(other))
+ , m_D(*this, 1, "D{}", NETLIB_DELEGATE(other))
+ , m_CLRQ(*this, "CLRQ", NETLIB_DELEGATE(clrq))
, m_power_pins(*this)
{
}
@@ -57,22 +57,27 @@ namespace netlist::devices {
m_data = 0xFF;
}
- NETLIB_HANDLERI(other)
+ private:
+ NETLIB_HANDLERI(clrq)
{
- netlist_sig_t d = m_D();
m_clrq = m_CLRQ();
if (!m_clrq)
{
- m_Q.push(0, NLTIME_FROM_NS(40));
m_data = 0;
- } else if (d != m_data)
- {
- m_data = d;
- m_CLK.activate_lh();
+ m_Q.push(m_data, NLTIME_FROM_NS(40));
+ m_CLK.inactivate();
}
+ else
+ m_CLK.activate_lh();
+ }
+
+ NETLIB_HANDLERI(other)
+ {
+ m_data = m_D();
+ if (m_clrq)
+ m_CLK.activate_lh();
}
- private:
NETLIB_HANDLERI(clk)
{
if (m_clrq)
@@ -83,82 +88,16 @@ namespace netlist::devices {
}
logic_input_t m_CLK;
- logic_output_t m_Q;
+ object_array_t<logic_output_t, 6> m_Q;
state_var<netlist_sig_t> m_clrq;
state_var<netlist_sig_t> m_data;
- logic_input_t m_D;
+ object_array_t<logic_input_t, 6> m_D;
logic_input_t m_CLRQ;
nld_power_pins m_power_pins;
};
- NETLIB_OBJECT(74174)
- {
- NETLIB_CONSTRUCTOR(74174)
- , A(*this, "A")
- , B(*this, "B")
- , C(*this, "C")
- , D(*this, "D")
- , E(*this, "E")
- , F(*this, "F")
- {
- register_sub_alias("CLRQ", "A.CLRQ");
- connect("A.CLRQ", "B.CLRQ");
- connect("A.CLRQ", "C.CLRQ");
- connect("A.CLRQ", "D.CLRQ");
- connect("A.CLRQ", "E.CLRQ");
- connect("A.CLRQ", "F.CLRQ");
-
- register_sub_alias("CLK", "A.CLK");
- connect("A.CLK", "B.CLK");
- connect("A.CLK", "C.CLK");
- connect("A.CLK", "D.CLK");
- connect("A.CLK", "E.CLK");
- connect("A.CLK", "F.CLK");
-
- register_sub_alias("D1", "A.D");
- register_sub_alias("Q1", "A.Q");
-
- register_sub_alias("D2", "B.D");
- register_sub_alias("Q2", "B.Q");
-
- register_sub_alias("D3", "C.D");
- register_sub_alias("Q3", "C.Q");
-
- register_sub_alias("D4", "D.D");
- register_sub_alias("Q4", "D.Q");
-
- register_sub_alias("D5", "E.D");
- register_sub_alias("Q5", "E.Q");
-
- register_sub_alias("D6", "F.D");
- register_sub_alias("Q6", "F.Q");
-
- register_sub_alias("GND", "A.GND");
- connect("A.GND", "B.GND");
- connect("A.GND", "C.GND");
- connect("A.GND", "D.GND");
- connect("A.GND", "E.GND");
- connect("A.GND", "F.GND");
-
- register_sub_alias("VCC", "A.VCC");
- connect("A.VCC", "B.VCC");
- connect("A.VCC", "C.VCC");
- connect("A.VCC", "D.VCC");
- connect("A.VCC", "E.VCC");
- connect("A.VCC", "F.VCC");
- }
- //NETLIB_RESETI() {}
- private:
- NETLIB_SUB(74174_GATE) A;
- NETLIB_SUB(74174_GATE) B;
- NETLIB_SUB(74174_GATE) C;
- NETLIB_SUB(74174_GATE) D;
- NETLIB_SUB(74174_GATE) E;
- NETLIB_SUB(74174_GATE) F;
- };
-
NETLIB_DEVICE_IMPL(74174, "TTL_74174", "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ,@VCC,@GND")
} // namespace netlist::devices