summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2020-08-02 12:39:08 +0200
committer couriersud <couriersud@gmx.org>2020-08-02 12:49:44 +0200
commitd8733b9f25d23273b7eeaabf10786aef74e0082a (patch)
tree17a84175a12b698a832d9d8a59415d3341a56d28
parentcdca99f3536c946f5f9233836ca1b4a3bce24ada (diff)
netlist: Macro-ized 74174 DIPs
-rw-r--r--src/lib/netlist/devices/net_lib.cpp1
-rw-r--r--src/lib/netlist/devices/nld_74174.cpp122
-rw-r--r--src/lib/netlist/devices/nld_74174.h21
-rw-r--r--src/lib/netlist/devices/nld_devinc.h15
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.cpp37
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.h3
6 files changed, 125 insertions, 74 deletions
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index 8457a95da8d..57d2aef0a4d 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -147,7 +147,6 @@ namespace devices
LIB_ENTRY(r2r_dac)
LIB_ENTRY(tristate)
LIB_ENTRY(tristate3)
- LIB_ENTRY(74174_dip)
LIB_ENTRY(74175_dip)
LIB_ENTRY(74192_dip)
LIB_ENTRY(74193_dip)
diff --git a/src/lib/netlist/devices/nld_74174.cpp b/src/lib/netlist/devices/nld_74174.cpp
index 37071e190ed..5f0e3c99ea9 100644
--- a/src/lib/netlist/devices/nld_74174.cpp
+++ b/src/lib/netlist/devices/nld_74174.cpp
@@ -12,14 +12,14 @@ namespace netlist
{
namespace devices
{
- NETLIB_OBJECT(74174)
+ NETLIB_OBJECT(74174_GATE)
{
- NETLIB_CONSTRUCTOR(74174)
+ NETLIB_CONSTRUCTOR(74174_GATE)
, m_CLK(*this, "CLK", NETLIB_DELEGATE(clk))
- , m_Q(*this, {"Q1", "Q2", "Q3", "Q4", "Q5", "Q6"})
+ , m_Q(*this, "Q")
, m_clrq(*this, "m_clr", 0)
, m_data(*this, "m_data", 0)
- , m_D(*this, {"D1", "D2", "D3", "D4", "D5", "D6"}, NETLIB_DELEGATE(other))
+ , m_D(*this, "D", NETLIB_DELEGATE(other))
, m_CLRQ(*this, "CLRQ", NETLIB_DELEGATE(other))
, m_power_pins(*this)
{
@@ -34,18 +34,11 @@ namespace devices
NETLIB_HANDLERI(other)
{
- uint_fast8_t d = 0;
- for (std::size_t i=0; i<6; i++)
- {
- d |= (m_D[i]() << i);
- }
+ netlist_sig_t d = m_D();
m_clrq = m_CLRQ();
if (!m_clrq)
{
- for (std::size_t i=0; i<6; i++)
- {
- m_Q[i].push(0, NLTIME_FROM_NS(40));
- }
+ m_Q.push(0, NLTIME_FROM_NS(40));
m_data = 0;
} else if (d != m_data)
{
@@ -54,68 +47,95 @@ namespace devices
}
}
+ private:
NETLIB_HANDLERI(clk)
{
if (m_clrq)
{
- for (std::size_t i=0; i<6; i++)
- {
- netlist_sig_t d = (m_data >> i) & 1;
- m_Q[i].push(d, NLTIME_FROM_NS(25));
- }
+ m_Q.push(m_data, NLTIME_FROM_NS(25));
m_CLK.inactivate();
}
}
- friend class NETLIB_NAME(74174_dip);
- private:
logic_input_t m_CLK;
- object_array_t<logic_output_t, 6> m_Q;
+ logic_output_t m_Q;
state_var<netlist_sig_t> m_clrq;
- state_var<unsigned> m_data;
+ state_var<netlist_sig_t> m_data;
- object_array_t<logic_input_t, 6> m_D;
+ logic_input_t m_D;
logic_input_t m_CLRQ;
nld_power_pins m_power_pins;
};
- NETLIB_OBJECT(74174_dip)
+ NETLIB_OBJECT(74174)
{
- NETLIB_CONSTRUCTOR(74174_dip)
+ NETLIB_CONSTRUCTOR(74174)
, A(*this, "A")
+ , B(*this, "B")
+ , C(*this, "C")
+ , D(*this, "D")
+ , E(*this, "E")
+ , F(*this, "F")
{
- register_subalias("1", A.m_CLRQ);
- register_subalias("9", A.m_CLK);
-
- register_subalias("3", A.m_D[0]);
- register_subalias("2", A.m_Q[0]);
-
- register_subalias("4", A.m_D[1]);
- register_subalias("5", A.m_Q[1]);
-
- register_subalias("6", A.m_D[2]);
- register_subalias("7", A.m_Q[2]);
-
- register_subalias("11", A.m_D[3]);
- register_subalias("10", A.m_Q[3]);
-
- register_subalias("13", A.m_D[4]);
- register_subalias("12", A.m_Q[4]);
-
- register_subalias("14", A.m_D[5]);
- register_subalias("15", A.m_Q[5]);
-
- register_subalias("8", "A.GND");
- register_subalias("16", "A.VCC");
+ register_subalias("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_subalias("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_subalias("D1", "A.D");
+ register_subalias("Q1", "A.Q");
+
+ register_subalias("D2", "B.D");
+ register_subalias("Q2", "B.Q");
+
+ register_subalias("D3", "C.D");
+ register_subalias("Q3", "C.Q");
+
+ register_subalias("D4", "D.D");
+ register_subalias("Q4", "D.Q");
+
+ register_subalias("D5", "E.D");
+ register_subalias("Q5", "E.Q");
+
+ register_subalias("D6", "F.D");
+ register_subalias("Q6", "F.Q");
+
+ register_subalias("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_subalias("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) A;
+ 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")
- NETLIB_DEVICE_IMPL(74174_dip,"TTL_74174_DIP", "")
+ NETLIB_DEVICE_IMPL(74174_GATE, "TTL_74174_GATE", "")
+ NETLIB_DEVICE_IMPL(74174, "TTL_74174", "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ,@VCC,@GND")
} //namespace devices
} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_74174.h b/src/lib/netlist/devices/nld_74174.h
index 4fe23739aad..f5708fd2e90 100644
--- a/src/lib/netlist/devices/nld_74174.h
+++ b/src/lib/netlist/devices/nld_74174.h
@@ -38,21 +38,12 @@
#include "netlist/nl_setup.h"
-#define TTL_74174(name, cCLK, cD1, cD2, cD3, cD4, cD5, cD6, cCLRQ) \
- NET_REGISTER_DEV(TTL_74174, name) \
- NET_CONNECT(name, GND, GND) \
- NET_CONNECT(name, VCC, VCC) \
- NET_CONNECT(name, CLK, cCLK) \
- NET_CONNECT(name, D1, cD1) \
- NET_CONNECT(name, D2, cD2) \
- NET_CONNECT(name, D3, cD3) \
- NET_CONNECT(name, D4, cD4) \
- NET_CONNECT(name, D5, cD5) \
- NET_CONNECT(name, D6, cD6) \
- NET_CONNECT(name, CLRQ, cCLRQ)
-
-#define TTL_74174_DIP(name) \
- NET_REGISTER_DEV(TTL_74174_DIP, name)
+// usage: TTL_74174_GATE(name)
+#define TTL_74174_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74174_GATE, __VA_ARGS__)
+// usage: TTL_74174(name, cCLK, cD1, cD2, cD3, cD4, cD5, cD6, cCLRQ)
+#define TTL_74174(...) \
+ NET_REGISTER_DEVEXT(TTL_74174, __VA_ARGS__)
#endif /* NLD_74174_H_ */
diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h
index 4c89ed9d58e..298db9083cb 100644
--- a/src/lib/netlist/devices/nld_devinc.h
+++ b/src/lib/netlist/devices/nld_devinc.h
@@ -440,6 +440,10 @@
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74174.cpp
// ---------------------------------------------------------------------
+// usage : TTL_74174_GATE(name)
+#define TTL_74174_GATE(...) \
+ NET_REGISTER_DEVEXT(TTL_74174, __VA_ARGS__)
+
// usage : TTL_74174(name, pCLK, pD1, pD2, pD3, pD4, pD5, pD6, pCLRQ)
// auto connect: VCC, GND
#define TTL_74174(...) \
@@ -707,13 +711,6 @@
NET_REGISTER_DEVEXT(TTL_TRISTATE3, __VA_ARGS__)
// ---------------------------------------------------------------------
-// Source: src/lib/netlist/devices/nld_74174.cpp
-// ---------------------------------------------------------------------
-// usage : TTL_74174_DIP(name)
-#define TTL_74174_DIP(...) \
- NET_REGISTER_DEVEXT(TTL_74174_DIP, __VA_ARGS__)
-
-// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74175.cpp
// ---------------------------------------------------------------------
// usage : TTL_74175_DIP(name)
@@ -1027,6 +1024,10 @@
#define TTL_74166_DIP(...) \
NET_REGISTER_DEVEXT(TTL_74166_DIP, __VA_ARGS__)
+// usage : TTL_74174_DIP(name)
+#define TTL_74174_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74174_DIP, __VA_ARGS__)
+
// usage : TTL_74260_GATE(name)
#define TTL_74260_GATE(...) \
NET_REGISTER_DEVEXT(TTL_74260_GATE, __VA_ARGS__)
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp
index 69edc551964..422ac024a84 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp
@@ -1764,6 +1764,42 @@ static NETLIST_START(TTL_74166_DIP)
NETLIST_END()
/*
+ * DM74174: Hex D Flip-Flops with Clear
+ *
+ * +--------------+
+ * CLR |1 ++ 16| VCC
+ * Q1 |2 15| Q6
+ * D1 |3 14| D6
+ * D2 |4 74174 13| D5
+ * Q2 |5 12| Q5
+ * D3 |6 11| D4
+ * Q3 |7 10| Q4
+ * GND |8 9| CLK
+ * +--------------+
+ */
+
+static NETLIST_START(TTL_74174_DIP)
+ TTL_74174_GATE(A)
+ TTL_74174_GATE(B)
+ TTL_74174_GATE(C)
+ TTL_74174_GATE(D)
+ TTL_74174_GATE(E)
+ TTL_74174_GATE(F)
+
+ DIPPINS( /* +--------------+ */
+ A.CLRQ, /* CLR |1 ++ 16| VCC */ A.VCC,
+ A.Q, /* Q1 |2 15| Q6 */ F.Q,
+ A.D, /* D1 |3 14| D6 */ F.D,
+ B.D, /* D2 |4 74174 13| D5 */ E.D,
+ B.Q, /* Q2 |5 12| Q5 */ E.Q,
+ C.D, /* D3 |6 11| D4 */ D.D,
+ C.Q, /* Q3 |7 10| Q4 */ D.Q,
+ A.GND, /* GND |8 9| CLK */ A.CLK
+ /* +--------------+ */
+ )
+NETLIST_END()
+
+/*
* DM74260: Dual 5-Input NOR Gates
* _________
* Y = A+B+C+D+E
@@ -2813,6 +2849,7 @@ NETLIST_START(TTL74XX_lib)
LOCAL_LIB_ENTRY(TTL_74164_DIP)
LOCAL_LIB_ENTRY(TTL_74165_DIP)
LOCAL_LIB_ENTRY(TTL_74166_DIP)
+ LOCAL_LIB_ENTRY(TTL_74174_DIP)
LOCAL_LIB_ENTRY(TTL_74260_DIP)
LOCAL_LIB_ENTRY(TTL_74279_DIP)
LOCAL_LIB_ENTRY(TTL_74377_DIP)
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h
index 7329e81b2af..bcfc1f48432 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.h
+++ b/src/lib/netlist/macro/nlm_ttl74xx.h
@@ -372,6 +372,9 @@
#define TTL_74166_DIP(name) \
NET_REGISTER_DEV(TTL_74166_DIP, name)
+#define TTL_74174_DIP(name) \
+ NET_REGISTER_DEV(TTL_74174_DIP, name)
+
#define TTL_74260_GATE(name) \
NET_REGISTER_DEV(TTL_74260_GATE, name)