From 333329e54ccf00a9a3b7e3b5724e3d8ade764b9a Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Wed, 13 May 2020 19:40:15 -0700 Subject: [PATCH] netlist: Re-do the 74377/8/9 as macros. [Aaron Giles] --- src/lib/netlist/devices/net_lib.cpp | 4 +- src/lib/netlist/devices/nld_74377.cpp | 200 +------------------------- src/lib/netlist/devices/nld_74377.h | 10 +- src/lib/netlist/devices/nld_devinc.h | 18 +-- src/lib/netlist/macro/nlm_ttl74xx.cpp | 90 ++++++++++++ src/lib/netlist/macro/nlm_ttl74xx.h | 9 ++ 6 files changed, 113 insertions(+), 218 deletions(-) diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index 9cbaea79bc5..ae380e6804b 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -129,9 +129,7 @@ namespace devices LIB_ENTRY(74193) LIB_ENTRY(74194) LIB_ENTRY(74365) - LIB_ENTRY(74377_dip) - LIB_ENTRY(74378_dip) - LIB_ENTRY(74379_dip) + LIB_ENTRY(74377_GATE) LIB_ENTRY(74393) LIB_ENTRY(74393_dip) //ENTRY(74279, TTL_74279, "") // only dip available diff --git a/src/lib/netlist/devices/nld_74377.cpp b/src/lib/netlist/devices/nld_74377.cpp index 6521d33764c..127803acb42 100644 --- a/src/lib/netlist/devices/nld_74377.cpp +++ b/src/lib/netlist/devices/nld_74377.cpp @@ -15,9 +15,9 @@ namespace netlist constexpr const std::array delay = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(25) }; - NETLIB_OBJECT(74377_gate) + NETLIB_OBJECT(74377_GATE) { - NETLIB_CONSTRUCTOR(74377_gate) + NETLIB_CONSTRUCTOR(74377_GATE) , m_E(*this, "E") , m_D(*this, "D") , m_CP(*this, "CP") @@ -45,9 +45,6 @@ namespace netlist } } - friend class NETLIB_NAME(74377_dip); - friend class NETLIB_NAME(74378_dip); - friend class NETLIB_NAME(74379_dip); private: logic_input_t m_E; logic_input_t m_D; @@ -59,198 +56,7 @@ namespace netlist nld_power_pins m_power_pins; }; - NETLIB_OBJECT(74377_dip) - { - NETLIB_CONSTRUCTOR(74377_dip) - , m_A(*this, "A") - , m_B(*this, "B") - , m_C(*this, "C") - , m_D(*this, "D") - , m_E(*this, "E") - , m_F(*this, "F") - , m_G(*this, "G") - , m_H(*this, "H") - { - register_subalias("1", m_A.m_E); - register_subalias("2", m_A.m_Q); - register_subalias("3", m_A.m_D); - register_subalias("4", m_B.m_D); - register_subalias("5", m_B.m_Q); - register_subalias("6", m_C.m_Q); - register_subalias("7", m_C.m_D); - register_subalias("8", m_D.m_D); - register_subalias("9", m_D.m_Q); - register_subalias("10", "A.GND"); - - register_subalias("11", m_A.m_CP); - register_subalias("12", m_E.m_Q); - register_subalias("13", m_E.m_D); - register_subalias("14", m_F.m_D); - register_subalias("15", m_F.m_Q); - register_subalias("16", m_G.m_Q); - register_subalias("17", m_G.m_D); - register_subalias("18", m_H.m_D); - register_subalias("19", m_H.m_Q); - register_subalias("20", "A.VCC"); - - 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"); - connect("A.GND", "G.GND"); - connect("A.GND", "H.GND"); - 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"); - connect("A.VCC", "G.VCC"); - connect("A.VCC", "H.VCC"); - connect(m_A.m_E, m_B.m_E); - connect(m_A.m_E, m_C.m_E); - connect(m_A.m_E, m_D.m_E); - connect(m_A.m_E, m_E.m_E); - connect(m_A.m_E, m_F.m_E); - connect(m_A.m_E, m_G.m_E); - connect(m_A.m_E, m_H.m_E); - connect(m_A.m_CP, m_B.m_CP); - connect(m_A.m_CP, m_C.m_CP); - connect(m_A.m_CP, m_D.m_CP); - connect(m_A.m_CP, m_E.m_CP); - connect(m_A.m_CP, m_F.m_CP); - connect(m_A.m_CP, m_G.m_CP); - connect(m_A.m_CP, m_H.m_CP); - } - //NETLIB_RESETI(); - //NETLIB_UPDATEI(); - - protected: - NETLIB_SUB(74377_gate) m_A; - NETLIB_SUB(74377_gate) m_B; - NETLIB_SUB(74377_gate) m_C; - NETLIB_SUB(74377_gate) m_D; - NETLIB_SUB(74377_gate) m_E; - NETLIB_SUB(74377_gate) m_F; - NETLIB_SUB(74377_gate) m_G; - NETLIB_SUB(74377_gate) m_H; - }; - - NETLIB_OBJECT(74378_dip) - { - NETLIB_CONSTRUCTOR(74378_dip) - , m_A(*this, "A") - , m_B(*this, "B") - , m_C(*this, "C") - , m_D(*this, "D") - , m_E(*this, "E") - , m_F(*this, "F") - { - register_subalias("1", m_A.m_E); - register_subalias("2", m_A.m_Q); - register_subalias("3", m_A.m_D); - register_subalias("4", m_B.m_D); - register_subalias("5", m_B.m_Q); - register_subalias("6", m_C.m_D); - register_subalias("7", m_C.m_Q); - register_subalias("8", "A.GND"); - - register_subalias("9", m_A.m_CP); - register_subalias("10", m_D.m_Q); - register_subalias("11", m_D.m_D); - register_subalias("12", m_E.m_Q); - register_subalias("13", m_E.m_D); - register_subalias("14", m_F.m_D); - register_subalias("15", m_F.m_Q); - register_subalias("16", "A.VCC"); - - 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"); - 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"); - connect(m_A.m_E, m_B.m_E); - connect(m_A.m_E, m_C.m_E); - connect(m_A.m_E, m_D.m_E); - connect(m_A.m_E, m_E.m_E); - connect(m_A.m_E, m_F.m_E); - connect(m_A.m_CP, m_B.m_CP); - connect(m_A.m_CP, m_C.m_CP); - connect(m_A.m_CP, m_D.m_CP); - connect(m_A.m_CP, m_E.m_CP); - connect(m_A.m_CP, m_F.m_CP); - } - //NETLIB_RESETI(); - //NETLIB_UPDATEI(); - - protected: - NETLIB_SUB(74377_gate) m_A; - NETLIB_SUB(74377_gate) m_B; - NETLIB_SUB(74377_gate) m_C; - NETLIB_SUB(74377_gate) m_D; - NETLIB_SUB(74377_gate) m_E; - NETLIB_SUB(74377_gate) m_F; - }; - - NETLIB_OBJECT(74379_dip) - { - NETLIB_CONSTRUCTOR(74379_dip) - , m_A(*this, "A") - , m_B(*this, "B") - , m_C(*this, "C") - , m_D(*this, "D") - { - register_subalias("1", m_A.m_E); - register_subalias("2", m_A.m_Q); - register_subalias("3", m_A.m_QQ); - register_subalias("4", m_A.m_D); - register_subalias("5", m_B.m_D); - register_subalias("6", m_B.m_QQ); - register_subalias("7", m_B.m_Q); - register_subalias("8", "A.GND"); - - register_subalias("9", m_A.m_CP); - register_subalias("10", m_C.m_Q); - register_subalias("11", m_C.m_QQ); - register_subalias("12", m_C.m_D); - register_subalias("13", m_D.m_D); - register_subalias("14", m_D.m_QQ); - register_subalias("15", m_D.m_Q); - register_subalias("16", "A.VCC"); - - connect("A.GND", "B.GND"); - connect("A.GND", "C.GND"); - connect("A.GND", "D.GND"); - connect("A.VCC", "B.VCC"); - connect("A.VCC", "C.VCC"); - connect("A.VCC", "D.VCC"); - connect(m_A.m_E, m_B.m_E); - connect(m_A.m_E, m_C.m_E); - connect(m_A.m_E, m_D.m_E); - connect(m_A.m_CP, m_B.m_CP); - connect(m_A.m_CP, m_C.m_CP); - connect(m_A.m_CP, m_D.m_CP); - } - //NETLIB_RESETI(); - //NETLIB_UPDATEI(); - - protected: - NETLIB_SUB(74377_gate) m_A; - NETLIB_SUB(74377_gate) m_B; - NETLIB_SUB(74377_gate) m_C; - NETLIB_SUB(74377_gate) m_D; - }; - - - NETLIB_DEVICE_IMPL(74377_gate, "TTL_74377_GATE", "") - NETLIB_DEVICE_IMPL(74377_dip, "TTL_74377_DIP", "") - NETLIB_DEVICE_IMPL(74378_dip, "TTL_74378_DIP", "") - NETLIB_DEVICE_IMPL(74379_dip, "TTL_74379_DIP", "") + NETLIB_DEVICE_IMPL(74377_GATE, "TTL_74377_GATE", "") } //namespace devices } // namespace netlist diff --git a/src/lib/netlist/devices/nld_74377.h b/src/lib/netlist/devices/nld_74377.h index 87646d150d3..6f5a3aed14e 100644 --- a/src/lib/netlist/devices/nld_74377.h +++ b/src/lib/netlist/devices/nld_74377.h @@ -53,17 +53,9 @@ #include "netlist/nl_setup.h" + #define TTL_74377_GATE(name) \ NET_REGISTER_DEV(TTL_74377_GATE, name) -#define TTL_74377_DIP(name) \ - NET_REGISTER_DEV(TTL_74377_DIP, name) - -#define TTL_74378_DIP(name) \ - NET_REGISTER_DEV(TTL_74378_DIP, name) - -#define TTL_74379_DIP(name) \ - NET_REGISTER_DEV(TTL_74379_DIP, name) - #endif /* NLD_74377_H_ */ diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h index f42fa126fa5..af0d1a26d4b 100644 --- a/src/lib/netlist/devices/nld_devinc.h +++ b/src/lib/netlist/devices/nld_devinc.h @@ -432,15 +432,6 @@ #define TTL_74377_GATE(name) \ NET_REGISTER_DEVEXT(TTL_74377_GATE, name) -#define TTL_74377_DIP(name) \ - NET_REGISTER_DEVEXT(TTL_74377_DIP, name) - -#define TTL_74378_DIP(name) \ - NET_REGISTER_DEVEXT(TTL_74378_DIP, name) - -#define TTL_74379_DIP(name) \ - NET_REGISTER_DEVEXT(TTL_74379_DIP, name) - // --------------------------------------------------------------------- // Source: src/lib/netlist/devices/nld_74393.cpp // --------------------------------------------------------------------- @@ -894,6 +885,15 @@ #define TTL_74279_DIP(name) \ NET_REGISTER_DEVEXT(TTL_74279_DIP, name) +#define TTL_74377_DIP(name) \ + NET_REGISTER_DEVEXT(TTL_74377_DIP, name) + +#define TTL_74378_DIP(name) \ + NET_REGISTER_DEVEXT(TTL_74378_DIP, name) + +#define TTL_74379_DIP(name) \ + NET_REGISTER_DEVEXT(TTL_74379_DIP, name) + #define DM9312_DIP(name) \ NET_REGISTER_DEVEXT(DM9312_DIP, name) diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp index 33c516f9766..21b2b6775f9 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.cpp +++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp @@ -828,6 +828,93 @@ static NETLIST_START(TTL_74279_DIP) ) NETLIST_END() +/* + * DM74377: Octal D Flip-Flop With Enable + * DM74378: Hex D Flip-Flop With Enable + * DM74379: 4-bit D Flip-Flop With Enable + * + */ + +static NETLIST_START(TTL_74377_DIP) + TTL_74377_GATE(A) + TTL_74377_GATE(B) + TTL_74377_GATE(C) + TTL_74377_GATE(D) + TTL_74377_GATE(E) + TTL_74377_GATE(F) + TTL_74377_GATE(G) + TTL_74377_GATE(H) + + NET_C(A.VCC, B.VCC, C.VCC, D.VCC, E.VCC, F.VCC, G.VCC, H.VCC) + NET_C(A.GND, B.GND, C.GND, D.GND, E.GND, F.GND, G.GND, H.GND) + NET_C(A.CP, B.CP, C.CP, D.CP, E.CP, F.CP, G.CP, H.CP) + NET_C(A.E, B.E, C.E, D.E, E.E, F.E, G.E, H.E) + + DIPPINS( /* +--------------+ */ + A.E, /* /E |1 ++ 20| VCC */ A.VCC, + A.Q, /* Q0 |2 19| Q7 */ H.Q, + A.D, /* D0 |3 18| D7 */ H.D, + B.D, /* D1 |4 74377 17| D6 */ G.D, + B.Q, /* Q1 |5 16| Q6 */ G.Q, + C.Q, /* Q2 |6 15| Q5 */ F.Q, + C.D, /* D2 |7 14| D5 */ F.D, + D.D, /* D3 |8 13| D4 */ E.D, + D.Q, /* Q3 |9 12| Q4 */ E.D, + A.GND,/* GND |10 11| CP */ A.CP + /* +--------------+ */ + ) +NETLIST_END() + +static NETLIST_START(TTL_74378_DIP) + TTL_74377_GATE(A) + TTL_74377_GATE(B) + TTL_74377_GATE(C) + TTL_74377_GATE(D) + TTL_74377_GATE(E) + TTL_74377_GATE(F) + + NET_C(A.VCC, B.VCC, C.VCC, D.VCC, E.VCC, F.VCC) + NET_C(A.GND, B.GND, C.GND, D.GND, E.GND, F.GND) + NET_C(A.CP, B.CP, C.CP, D.CP, E.CP, F.CP) + NET_C(A.E, B.E, C.E, D.E, E.E, F.E) + + DIPPINS( /* +--------------+ */ + A.E, /* /E |1 ++ 16| VCC */ A.VCC, + A.Q, /* Q0 |2 15| Q5 */ F.Q, + A.D, /* D0 |3 14| D5 */ F.D, + B.D, /* D1 |4 74378 13| D4 */ E.D, + B.Q, /* Q1 |5 12| Q4 */ E.Q, + C.D, /* D2 |6 11| D3 */ D.D, + C.Q, /* Q2 |7 10| Q3 */ D.Q, + A.GND,/* GND |8 9| CP */ A.CP + /* +--------------+ */ + ) +NETLIST_END() + +static NETLIST_START(TTL_74379_DIP) + TTL_74377_GATE(A) + TTL_74377_GATE(B) + TTL_74377_GATE(C) + TTL_74377_GATE(D) + + NET_C(A.VCC, B.VCC, C.VCC, D.VCC) + NET_C(A.GND, B.GND, C.GND, D.GND) + NET_C(A.CP, B.CP, C.CP, D.CP) + NET_C(A.E, B.E, C.E, D.E) + + DIPPINS( /* +--------------+ */ + A.E, /* /E |1 ++ 16| VCC */ A.VCC, + A.Q, /* Q0 |2 15| Q3 */ D.Q, + A.QQ, /* /Q0 |3 14| /Q3 */ D.QQ, + A.D, /* D0 |4 74379 13| D3 */ D.D, + B.D, /* D1 |5 12| D2 */ C.D, + B.QQ, /* /Q1 |6 11| /Q2 */ C.QQ, + B.Q, /* Q1 |7 10| Q2 */ C.Q, + A.GND,/* GND |8 9| CP */ A.CP + /* +--------------+ */ + ) +NETLIST_END() + /* * DM9312: One of Eight Line Data Selectors/Multiplexers * @@ -1434,5 +1521,8 @@ NETLIST_START(TTL74XX_lib) LOCAL_LIB_ENTRY(TTL_74156_DIP) LOCAL_LIB_ENTRY(TTL_74260_DIP) LOCAL_LIB_ENTRY(TTL_74279_DIP) + LOCAL_LIB_ENTRY(TTL_74377_DIP) + LOCAL_LIB_ENTRY(TTL_74378_DIP) + LOCAL_LIB_ENTRY(TTL_74379_DIP) LOCAL_LIB_ENTRY(DM9312_DIP) NETLIST_END() diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h index 17fd32f885a..c2eb075d938 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.h +++ b/src/lib/netlist/macro/nlm_ttl74xx.h @@ -293,6 +293,15 @@ #define TTL_74279_DIP(name) \ NET_REGISTER_DEV(TTL_74279_DIP, name) +#define TTL_74377_DIP(name) \ + NET_REGISTER_DEV(TTL_74377_DIP, name) + +#define TTL_74378_DIP(name) \ + NET_REGISTER_DEV(TTL_74378_DIP, name) + +#define TTL_74379_DIP(name) \ + NET_REGISTER_DEV(TTL_74379_DIP, name) + #define DM9312(name, cA, cB, cC, cSTROBE, cD0, cD1, cD2, cD3, cD4, cD5, cD6, cD7) \ NET_REGISTER_DEV(DM9312, name) \ NET_CONNECT(name, VCC, VCC) \