diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_74174.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_74174.cpp | 101 |
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 |