Netlist: Added 74163 to netlist. [Couriersud]

This commit is contained in:
couriersud 2020-04-28 12:17:26 +02:00
parent da8cfd878f
commit 097c736f79
3 changed files with 68 additions and 28 deletions

View File

@ -110,6 +110,8 @@ namespace devices
LIB_ENTRY(74153_dip)
LIB_ENTRY(74161)
LIB_ENTRY(74161_dip)
LIB_ENTRY(74163)
LIB_ENTRY(74163_dip)
LIB_ENTRY(74164)
LIB_ENTRY(74164_dip)
LIB_ENTRY(74165)

View File

@ -16,16 +16,20 @@ namespace netlist
static constexpr const unsigned MAXCNT = 15;
NETLIB_OBJECT(9316)
// FIXME: Family needs to be set to LS for 74193. This needs some more
// thought generally.
template <bool ASYNC>
NETLIB_OBJECT(9316_base)
{
NETLIB_CONSTRUCTOR(9316)
, m_CLK(*this, "CLK", NETLIB_DELEGATE(9316, clk))
NETLIB_CONSTRUCTOR(9316_base)
, m_CLK(*this, "CLK", NETLIB_DELEGATE(9316_base, clk))
, m_ENT(*this, "ENT")
, m_RC(*this, "RC")
, m_LOADQ(*this, "LOADQ")
, m_ENP(*this, "ENP")
, m_CLRQ(*this, "CLRQ")
, m_ABCD(*this, {"A", "B", "C", "D"}, NETLIB_DELEGATE(9316, abcd))
, m_ABCD(*this, {"A", "B", "C", "D"}, NETLIB_DELEGATE(9316_base, abcd))
, m_Q(*this, { "QA", "QB", "QC", "QD" })
, m_cnt(*this, "m_cnt", 0)
, m_abcd(*this, "m_abcd", 0)
@ -49,14 +53,14 @@ namespace netlist
m_ent = m_ENT();
m_loadq = m_LOADQ();
if (((m_loadq ^ 1) || (m_ent && m_ENP())) && CLRQ)
if (((m_loadq ^ 1) || (m_ent && m_ENP())) && (!ASYNC || CLRQ))
{
m_CLK.activate_lh();
}
else
{
m_CLK.inactivate();
if (!CLRQ && (m_cnt>0))
if (ASYNC && !CLRQ && (m_cnt>0))
{
update_outputs_all(0, NLTIME_FROM_NS(36));
m_cnt = 0;
@ -68,10 +72,18 @@ namespace netlist
NETLIB_HANDLERI(clk)
{
auto cnt = (m_loadq ? (m_cnt + 1) & MAXCNT: m_abcd);
m_RC.push(m_ent && (cnt == MAXCNT), NLTIME_FROM_NS(27));
update_outputs_all(cnt, NLTIME_FROM_NS(20));
m_cnt = cnt;
if (!ASYNC && !m_CLRQ())
{
update_outputs_all(0, NLTIME_FROM_NS(36));
m_cnt = 0;
}
else
{
auto cnt = (m_loadq ? (m_cnt + 1) & MAXCNT: m_abcd);
m_RC.push(m_ent && (cnt == MAXCNT), NLTIME_FROM_NS(27));
update_outputs_all(cnt, NLTIME_FROM_NS(20));
m_cnt = cnt;
}
}
NETLIB_HANDLERI(abcd)
@ -109,33 +121,42 @@ namespace netlist
}
};
NETLIB_OBJECT_DERIVED(9316_dip, 9316)
template <bool ASYNC>
NETLIB_OBJECT_DERIVED(9316_dip_base, 9316_base<ASYNC>)
{
NETLIB_CONSTRUCTOR_DERIVED(9316_dip, 9316)
NETLIB_CONSTRUCTOR_DERIVED(9316_dip_base, 9316_base<ASYNC>)
{
register_subalias("1", "CLRQ");
register_subalias("2", "CLK");
register_subalias("3", "A");
register_subalias("4", "B");
register_subalias("5", "C");
register_subalias("6", "D");
register_subalias("7", "ENP");
register_subalias("8", "GND");
this->register_subalias("1", "CLRQ");
this->register_subalias("2", "CLK");
this->register_subalias("3", "A");
this->register_subalias("4", "B");
this->register_subalias("5", "C");
this->register_subalias("6", "D");
this->register_subalias("7", "ENP");
this->register_subalias("8", "GND");
register_subalias("9", "LOADQ");
register_subalias("10", "ENT");
register_subalias("11", "QD");
register_subalias("12", "QC");
register_subalias("13", "QB");
register_subalias("14", "QA");
register_subalias("15", "RC");
register_subalias("16", "VCC");
this->register_subalias("9", "LOADQ");
this->register_subalias("10", "ENT");
this->register_subalias("11", "QD");
this->register_subalias("12", "QC");
this->register_subalias("13", "QB");
this->register_subalias("14", "QA");
this->register_subalias("15", "RC");
this->register_subalias("16", "VCC");
}
};
using NETLIB_NAME(9316) = NETLIB_NAME(9316_base)<true>;
using NETLIB_NAME(74163) = NETLIB_NAME(9316_base)<false>;
using NETLIB_NAME(9316_dip) = NETLIB_NAME(9316_dip_base)<true>;
using NETLIB_NAME(74163_dip) = NETLIB_NAME(9316_dip_base)<false>;
NETLIB_DEVICE_IMPL(9316, "TTL_9316", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D,@VCC,@GND")
NETLIB_DEVICE_IMPL(9316_dip, "TTL_9316_DIP", "")
NETLIB_DEVICE_IMPL(74163, "TTL_74163", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D,@VCC,@GND")
NETLIB_DEVICE_IMPL(74163_dip, "TTL_74163_DIP", "")
} //namespace devices
} // namespace netlist

View File

@ -67,7 +67,24 @@
NET_CONNECT(name, C, cC) \
NET_CONNECT(name, D, cD)
#define TTL_74163(name, cCLK, cENP, cENT, cCLRQ, cLOADQ, cA, cB, cC, cD) \
NET_REGISTER_DEV(TTL_74163, name) \
NET_CONNECT(name, GND, GND) \
NET_CONNECT(name, VCC, VCC) \
NET_CONNECT(name, CLK, cCLK) \
NET_CONNECT(name, ENP, cENP) \
NET_CONNECT(name, ENT, cENT) \
NET_CONNECT(name, CLRQ, cCLRQ) \
NET_CONNECT(name, LOADQ, cLOADQ) \
NET_CONNECT(name, A, cA) \
NET_CONNECT(name, B, cB) \
NET_CONNECT(name, C, cC) \
NET_CONNECT(name, D, cD)
#define TTL_9316_DIP(name) \
NET_REGISTER_DEV(TTL_9316_DIP, name)
#define TTL_74163_DIP(name) \
NET_REGISTER_DEV(TTL_74163_DIP, name)
#endif /* NLD_9316_H_ */