netlist: Macro-ized 9322 DIPs.

This commit is contained in:
Aaron Giles 2020-08-01 23:57:57 -07:00 committed by couriersud
parent bd6cbb17aa
commit fe8c88862f
6 changed files with 82 additions and 89 deletions

View File

@ -128,6 +128,7 @@ namespace devices
LIB_ENTRY(9310)
LIB_ENTRY(9314)
LIB_ENTRY(9316)
LIB_ENTRY(9322_GATE)
LIB_ENTRY(9322)
LIB_ENTRY(9334)
LIB_ENTRY(AM2847)
@ -163,7 +164,6 @@ namespace devices
LIB_ENTRY(74365_dip)
LIB_ENTRY(9602)
LIB_ENTRY(9314_dip)
LIB_ENTRY(9322_dip)
LIB_ENTRY(9334_dip)
LIB_ENTRY(AM2847_dip)
LIB_ENTRY(MM5837_dip)

View File

@ -14,24 +14,34 @@ namespace netlist
{
class NETLIB_NAME(9322);
NETLIB_OBJECT(9322_selector)
NETLIB_OBJECT(9322_GATE)
{
NETLIB_CONSTRUCTOR(9322_selector)
, m_parent(owner)
NETLIB_CONSTRUCTOR(9322_GATE)
, m_A(*this, "A", NETLIB_DELEGATE(inputs))
, m_B(*this, "B", NETLIB_DELEGATE(inputs))
, m_SELECT(*this, "SELECT", NETLIB_DELEGATE(inputs))
, m_STROBE(*this, "STROBE", NETLIB_DELEGATE(inputs))
, m_Y(*this, "Y")
, m_power_pins(*this)
{
}
// FIXME: Timing
NETLIB_HANDLERI(inputs);
NETLIB_HANDLERI(inputs)
{
if (m_STROBE())
m_Y.push(0, NLTIME_FROM_NS(21));
else if (m_SELECT())
m_Y.push(m_B(), NLTIME_FROM_NS(14));
else
m_Y.push(m_A(), NLTIME_FROM_NS(14));
}
public:
NETLIB_NAME(9322) &m_parent;
logic_input_t m_A;
logic_input_t m_B;
logic_input_t m_SELECT;
logic_input_t m_STROBE;
logic_output_t m_Y;
nld_power_pins m_power_pins;
};
@ -39,8 +49,6 @@ namespace netlist
NETLIB_OBJECT(9322)
{
NETLIB_CONSTRUCTOR(9322)
, m_SELECT(*this, "SELECT", NETLIB_DELEGATE(inputs))
, m_STROBE(*this, "STROBE", NETLIB_DELEGATE(inputs))
, m_1(*this, "A")
, m_2(*this, "B")
, m_3(*this, "C")
@ -65,73 +73,29 @@ namespace netlist
connect("A.GND", "B.GND");
connect("A.GND", "C.GND");
connect("A.GND", "D.GND");
connect("A.SELECT", "B.SELECT");
connect("A.SELECT", "C.SELECT");
connect("A.SELECT", "D.SELECT");
connect("A.STROBE", "B.STROBE");
connect("A.STROBE", "C.STROBE");
connect("A.STROBE", "D.STROBE");
register_subalias("SELECT", "A.SELECT");
register_subalias("STROBE", "A.STROBE");
register_subalias("GND", "A.GND");
register_subalias("VCC", "B.VCC");
}
friend class NETLIB_NAME(9322_dip);
public:
logic_input_t m_SELECT;
logic_input_t m_STROBE;
private:
NETLIB_HANDLERI(inputs)
{
m_1.inputs();
m_2.inputs();
m_3.inputs();
m_4.inputs();
}
NETLIB_SUB(9322_selector) m_1;
NETLIB_SUB(9322_selector) m_2;
NETLIB_SUB(9322_selector) m_3;
NETLIB_SUB(9322_selector) m_4;
NETLIB_SUB(9322_GATE) m_1;
NETLIB_SUB(9322_GATE) m_2;
NETLIB_SUB(9322_GATE) m_3;
NETLIB_SUB(9322_GATE) m_4;
};
NETLIB_HANDLER(9322_selector, inputs)
{
if (m_parent.m_STROBE())
m_Y.push(0, NLTIME_FROM_NS(21));
else if (m_parent.m_SELECT())
m_Y.push(m_B(), NLTIME_FROM_NS(14));
else
m_Y.push(m_A(), NLTIME_FROM_NS(14));
}
NETLIB_OBJECT(9322_dip)
{
NETLIB_CONSTRUCTOR(9322_dip)
, A(*this, "A")
{
register_subalias("1", A.m_SELECT);
register_subalias("2", A.m_1.m_A);
register_subalias("3", A.m_1.m_B);
register_subalias("4", A.m_1.m_Y);
register_subalias("5", A.m_2.m_A);
register_subalias("6", A.m_2.m_B);
register_subalias("7", A.m_2.m_Y);
register_subalias("8", "A.GND");
register_subalias("9", A.m_3.m_Y);
register_subalias("10", A.m_3.m_B);
register_subalias("11", A.m_3.m_A);
register_subalias("12", A.m_4.m_Y);
register_subalias("13", A.m_4.m_B);
register_subalias("14", A.m_4.m_A);
register_subalias("15", A.m_STROBE);
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
private:
NETLIB_SUB(9322) A;
};
NETLIB_DEVICE_IMPL(9322, "TTL_9322", "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE,@VCC,@GND")
NETLIB_DEVICE_IMPL(9322_dip, "TTL_9322_DIP", "")
NETLIB_DEVICE_IMPL(9322_GATE, "TTL_9322_GATE", "")
NETLIB_DEVICE_IMPL(9322, "TTL_9322", "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE,@VCC,@GND")
} //namespace devices
} // namespace netlist

View File

@ -23,22 +23,11 @@
#include "netlist/nl_setup.h"
#define TTL_9322(name, cSELECT, cA1, cB1, cA2, cB2, cA3, cB3, cA4, cB4, cSTROBE) \
NET_REGISTER_DEV(TTL_9322, name) \
NET_CONNECT(name, SELECT, cSELECT) \
NET_CONNECT(name, GND, GND) \
NET_CONNECT(name, VCC, VCC) \
NET_CONNECT(name, A1, cA1) \
NET_CONNECT(name, B1, cB1) \
NET_CONNECT(name, A2, cA2) \
NET_CONNECT(name, B2, cB2) \
NET_CONNECT(name, A3, cA3) \
NET_CONNECT(name, B3, cB3) \
NET_CONNECT(name, A4, cA4) \
NET_CONNECT(name, B4, cB4) \
NET_CONNECT(name, STROBE, cSTROBE)
#define TTL_9322_GATE(...) \
NET_REGISTER_DEVEXT(TTL_9322_GATE, __VA_ARGS__)
#define TTL_9322_DIP(name) \
NET_REGISTER_DEV(TTL_9322_DIP, name)
// usage: TTL_9322(name, cSELECT, cA1, cB1, cA2, cB2, cA3, cB3, cA4, cB4, cSTROBE)
#define TTL_9322(...) \
NET_REGISTER_DEVEXT(TTL_9322, __VA_ARGS__)
#endif /* NLD_9322_H_ */

View File

@ -798,13 +798,6 @@
#define TTL_9314_DIP(...) \
NET_REGISTER_DEVEXT(TTL_9314_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_9322.cpp
// ---------------------------------------------------------------------
// usage : TTL_9322_DIP(name)
#define TTL_9322_DIP(...) \
NET_REGISTER_DEVEXT(TTL_9322_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_dm9334.cpp
// ---------------------------------------------------------------------
@ -1227,6 +1220,10 @@
#define TTL_9316_DIP(...) \
NET_REGISTER_DEVEXT(TTL_9316_DIP, __VA_ARGS__)
// usage : TTL_9322_DIP(name)
#define TTL_9322_DIP(...) \
NET_REGISTER_DEVEXT(TTL_9322_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: CD4XXX_lib
// ---------------------------------------------------------------------

View File

@ -1864,6 +1864,45 @@ static NETLIST_START(TTL_9316_DIP)
)
NETLIST_END()
/*
* 9322: Quad 2-Line to 1-Line Data Selectors/Multiplexers
*
* +------------+
* SELECT |1 ++ 16| VCC
* A1 |2 15| STROBE
* B1 |3 14| A4
* Y1 |4 9322 13| B4
* A2 |5 12| Y4
* B2 |6 11| A3
* Y2 |7 10| B3
* GND |8 9| Y3
* +------------+
*/
static NETLIST_START(TTL_9322_DIP)
TTL_9322_GATE(A)
TTL_9322_GATE(B)
TTL_9322_GATE(C)
TTL_9322_GATE(D)
NET_C(A.SELECT, B.SELECT, C.SELECT, D.SELECT)
NET_C(A.STROBE, B.STROBE, C.STROBE, D.STROBE)
NET_C(A.VCC, B.VCC, C.VCC, D.VCC)
NET_C(A.GND, B.GND, C.GND, D.GND)
DIPPINS( /* +------------+ */
A.SELECT, /* SELECT |1 ++ 16| VCC */ A.VCC,
A.A, /* A1 |2 15| STROBE */ A.STROBE,
A.B, /* B1 |3 14| A4 */ D.A,
A.Y, /* Y1 |4 9322 13| B4 */ D.B,
B.A, /* A2 |5 12| Y4 */ D.Y,
B.B, /* B2 |6 11| A3 */ C.A,
B.Y, /* Y2 |7 10| B3 */ C.B,
A.GND, /* GND |8 9| Y3 */ C.Y
/* +------------+ */
)
NETLIST_END()
/* SN7442: 4-Line BCD to 10-Line Decimal Decoder
*
* +--------------+
@ -2527,4 +2566,5 @@ NETLIST_START(TTL74XX_lib)
LOCAL_LIB_ENTRY(DM9312_DIP)
LOCAL_LIB_ENTRY(TTL_9310_DIP)
LOCAL_LIB_ENTRY(TTL_9316_DIP)
LOCAL_LIB_ENTRY(TTL_9322_DIP)
NETLIST_END()

View File

@ -397,6 +397,9 @@
#define TTL_9316_DIP(name) \
NET_REGISTER_DEV(TTL_9316_DIP, name)
#define TTL_9322_DIP(name) \
NET_REGISTER_DEV(TTL_9322_DIP, name)
#endif // NL_AUTO_DEVICES
/* ----------------------------------------------------------------------------