netlist: Re-do the 74377/8/9 as macros. [Aaron Giles]

This commit is contained in:
Aaron Giles 2020-05-13 19:40:15 -07:00 committed by couriersud
parent 5739043ced
commit 333329e54c
6 changed files with 113 additions and 218 deletions

View File

@ -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

View File

@ -15,9 +15,9 @@ namespace netlist
constexpr const std::array<netlist_time, 2> 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

View File

@ -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_ */

View File

@ -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)

View File

@ -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()

View File

@ -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) \