mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
netlist: Add CD4011, CD4024, 7407 and CD4053 devices.
This commit is contained in:
parent
0cbbbdc846
commit
44e4ea141d
@ -155,6 +155,7 @@ NLOBJS := \
|
||||
$(NLOBJ)/devices/nld_4006.o \
|
||||
$(NLOBJ)/devices/nld_4013.o \
|
||||
$(NLOBJ)/devices/nld_4020.o \
|
||||
$(NLOBJ)/devices/nld_4053.o \
|
||||
$(NLOBJ)/devices/nld_4066.o \
|
||||
$(NLOBJ)/devices/nld_4316.o \
|
||||
$(NLOBJ)/devices/nld_7442.o \
|
||||
|
@ -154,6 +154,8 @@ namespace devices
|
||||
LIB_ENTRY(CD4006_dip)
|
||||
LIB_ENTRY(CD4020_WI)
|
||||
LIB_ENTRY(CD4020)
|
||||
LIB_ENTRY(CD4024)
|
||||
LIB_ENTRY(CD4053_GATE)
|
||||
LIB_ENTRY(CD4066_GATE)
|
||||
LIB_ENTRY(CD4316_GATE)
|
||||
LIB_ENTRY(4538)
|
||||
|
@ -49,6 +49,7 @@ NETLIST_EXTERNAL(ROMS_lib)
|
||||
#include "nld_4006.h"
|
||||
#include "nld_4013.h"
|
||||
#include "nld_4020.h"
|
||||
#include "nld_4053.h"
|
||||
#include "nld_4066.h"
|
||||
#include "nld_4316.h"
|
||||
#include "nld_74107.h"
|
||||
|
@ -13,10 +13,16 @@ namespace netlist
|
||||
{
|
||||
namespace devices
|
||||
{
|
||||
|
||||
template <unsigned _LiveBitmask>
|
||||
NETLIB_OBJECT(CD4020_sub)
|
||||
{
|
||||
static constexpr unsigned MAX_BITS = 14;
|
||||
static constexpr unsigned MAX_BITMASK = (1 << MAX_BITS) - 1;
|
||||
|
||||
NETLIB_CONSTRUCTOR_MODEL(CD4020_sub, "CD4XXX")
|
||||
, m_IP(*this, "IP", NETLIB_DELEGATE(ip))
|
||||
, m_RESET(*this, "RESET", NETLIB_DELEGATE(reseti))
|
||||
, m_Q(*this, {"Q1", "_Q2", "_Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9",
|
||||
"Q10", "Q11", "Q12", "Q13", "Q14"})
|
||||
, m_cnt(*this, "m_cnt", 0)
|
||||
@ -33,10 +39,24 @@ namespace netlist
|
||||
NETLIB_HANDLERI(ip)
|
||||
{
|
||||
++m_cnt;
|
||||
m_cnt &= 0x3fff;
|
||||
update_outputs(m_cnt);
|
||||
}
|
||||
|
||||
NETLIB_HANDLERI(reseti)
|
||||
{
|
||||
if (m_RESET())
|
||||
{
|
||||
m_cnt = 0;
|
||||
m_IP.inactivate();
|
||||
/* static */ const netlist_time reset_time = netlist_time::from_nsec(140);
|
||||
for (int i = 0; i < MAX_BITS; i++)
|
||||
if (((_LiveBitmask >> i) & 1) != 0)
|
||||
m_Q[i].push(0, reset_time);
|
||||
}
|
||||
else
|
||||
m_IP.activate_hl();
|
||||
}
|
||||
|
||||
public:
|
||||
void update_outputs(const unsigned cnt) noexcept
|
||||
{
|
||||
@ -50,12 +70,13 @@ namespace netlist
|
||||
NLTIME_FROM_NS(1380), NLTIME_FROM_NS(1480),
|
||||
};
|
||||
|
||||
m_Q[0].push(cnt & 1, out_delayQn[0]);
|
||||
for (std::size_t i=3; i<14; i++)
|
||||
m_Q[i].push((cnt >> i) & 1, out_delayQn[i]);
|
||||
for (int i = 0; i < MAX_BITS; i++)
|
||||
if (((_LiveBitmask >> i) & 1) != 0)
|
||||
m_Q[i].push(cnt & 1, out_delayQn[i]);
|
||||
}
|
||||
logic_input_t m_IP;
|
||||
object_array_t<logic_output_t, 14> m_Q;
|
||||
logic_input_t m_RESET;
|
||||
object_array_t<logic_output_t, MAX_BITS> m_Q;
|
||||
|
||||
state_var<unsigned> m_cnt;
|
||||
nld_power_pins m_supply;
|
||||
@ -65,9 +86,9 @@ namespace netlist
|
||||
{
|
||||
NETLIB_CONSTRUCTOR_MODEL(CD4020, "CD4XXX")
|
||||
, m_sub(*this, "sub")
|
||||
, m_RESET(*this, "RESET", NETLIB_DELEGATE(inputs))
|
||||
{
|
||||
register_subalias("IP", m_sub.m_IP);
|
||||
register_subalias("RESET", m_sub.m_RESET);
|
||||
register_subalias("Q1", m_sub.m_Q[0]);
|
||||
register_subalias("Q4", m_sub.m_Q[3]);
|
||||
register_subalias("Q5", m_sub.m_Q[4]);
|
||||
@ -86,24 +107,32 @@ namespace netlist
|
||||
|
||||
//NETLIB_RESETI() {}
|
||||
|
||||
NETLIB_HANDLERI(inputs)
|
||||
private:
|
||||
NETLIB_SUB(CD4020_sub)<0x3ff9> m_sub;
|
||||
};
|
||||
|
||||
NETLIB_OBJECT(CD4024)
|
||||
{
|
||||
NETLIB_CONSTRUCTOR_MODEL(CD4024, "CD4XXX")
|
||||
, m_sub(*this, "sub")
|
||||
{
|
||||
if (m_RESET())
|
||||
{
|
||||
m_sub.m_cnt = 0;
|
||||
m_sub.m_IP.inactivate();
|
||||
/* static */ const netlist_time reset_time = netlist_time::from_nsec(140);
|
||||
m_sub.m_Q[0].push(0, reset_time);
|
||||
for (std::size_t i=3; i<14; i++)
|
||||
m_sub.m_Q[i].push(0, reset_time);
|
||||
}
|
||||
else
|
||||
m_sub.m_IP.activate_hl();
|
||||
register_subalias("IP", m_sub.m_IP);
|
||||
register_subalias("RESET", m_sub.m_RESET);
|
||||
register_subalias("Q1", m_sub.m_Q[0]);
|
||||
register_subalias("Q2", m_sub.m_Q[1]);
|
||||
register_subalias("Q3", m_sub.m_Q[2]);
|
||||
register_subalias("Q4", m_sub.m_Q[3]);
|
||||
register_subalias("Q5", m_sub.m_Q[4]);
|
||||
register_subalias("Q6", m_sub.m_Q[5]);
|
||||
register_subalias("Q7", m_sub.m_Q[6]);
|
||||
register_subalias("VDD", "sub.VDD");
|
||||
register_subalias("VSS", "sub.VSS");
|
||||
}
|
||||
|
||||
//NETLIB_RESETI() {}
|
||||
|
||||
private:
|
||||
NETLIB_SUB(CD4020_sub) m_sub;
|
||||
logic_input_t m_RESET;
|
||||
NETLIB_SUB(CD4020_sub)<0x7f> m_sub;
|
||||
};
|
||||
|
||||
|
||||
@ -111,5 +140,7 @@ namespace netlist
|
||||
NETLIB_DEVICE_IMPL(CD4020, "CD4020", "")
|
||||
NETLIB_DEVICE_IMPL_ALIAS(CD4020_WI, CD4020, "CD4020_WI", "+IP,+RESET,+VDD,+VSS")
|
||||
|
||||
NETLIB_DEVICE_IMPL(CD4024, "CD4024", "")
|
||||
|
||||
} //namespace devices
|
||||
} // namespace netlist
|
||||
|
@ -17,6 +17,19 @@
|
||||
* +--------------+
|
||||
*
|
||||
*
|
||||
* CD4024: 7-Stage Ripple Carry Binary Counters
|
||||
*
|
||||
* +--------------+
|
||||
* IP |1 ++ 14| VDD
|
||||
* RESET |2 13| NC
|
||||
* Q7 |3 12| Q1
|
||||
* Q6 |4 4024 11| Q2
|
||||
* Q5 |5 10| NC
|
||||
* Q4 |6 9| Q3
|
||||
* VSS |7 8| NC
|
||||
* +--------------+
|
||||
*
|
||||
*
|
||||
* Naming conventions follow Texas Instruments datasheet
|
||||
*
|
||||
* FIXME: Timing depends on VDD-VSS
|
||||
@ -40,4 +53,7 @@
|
||||
#define CD4020(name) \
|
||||
NET_REGISTER_DEV(CD4020, name)
|
||||
|
||||
#define CD4024(name) \
|
||||
NET_REGISTER_DEV(CD4024, name)
|
||||
|
||||
#endif /* NLD_4020_H_ */
|
||||
|
116
src/lib/netlist/devices/nld_4053.cpp
Normal file
116
src/lib/netlist/devices/nld_4053.cpp
Normal file
@ -0,0 +1,116 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Couriersud
|
||||
/*
|
||||
* nld_4053.c
|
||||
*
|
||||
*/
|
||||
|
||||
#include "nld_4053.h"
|
||||
|
||||
#include "netlist/analog/nlid_twoterm.h"
|
||||
#include "netlist/solver/nld_solver.h"
|
||||
|
||||
namespace netlist
|
||||
{
|
||||
namespace devices
|
||||
{
|
||||
NETLIB_OBJECT(CD4053_GATE)
|
||||
{
|
||||
NETLIB_CONSTRUCTOR_MODEL(CD4053_GATE, "CD4XXX")
|
||||
, m_RX(*this, "RX")
|
||||
, m_RY(*this, "RY")
|
||||
, m_select(*this, "S", NETLIB_DELEGATE(controls))
|
||||
, m_inhibit(*this, "INH", NETLIB_DELEGATE(controls))
|
||||
, m_base_r(*this, "BASER", nlconst::magic(270.0))
|
||||
, m_lastx(*this, "m_lastx", false)
|
||||
, m_lasty(*this, "m_lasty", false)
|
||||
, m_select_state(*this, "m_select_state", false)
|
||||
, m_inhibit_state(*this, "m_inhibit_state", false)
|
||||
, m_supply(*this)
|
||||
{
|
||||
connect(m_RX.N(), m_RY.N());
|
||||
|
||||
register_subalias("X", m_RX.P());
|
||||
register_subalias("Y", m_RY.P());
|
||||
|
||||
register_subalias("XY", m_RX.N());
|
||||
}
|
||||
|
||||
NETLIB_RESETI()
|
||||
{
|
||||
// Start in off condition
|
||||
// FIXME: is ROFF correct?
|
||||
m_RX.set_R(plib::reciprocal(exec().gmin()));
|
||||
m_RY.set_R(plib::reciprocal(exec().gmin()));
|
||||
}
|
||||
|
||||
private:
|
||||
NETLIB_HANDLERI(controls)
|
||||
{
|
||||
bool newx = false, newy = false;
|
||||
if (!on(m_inhibit, m_inhibit_state))
|
||||
{
|
||||
if (!on(m_select, m_select_state))
|
||||
{
|
||||
newx = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
newy = true;
|
||||
}
|
||||
}
|
||||
if (newx != m_lastx)
|
||||
{
|
||||
update_state(m_RX, newx);
|
||||
m_lastx = newx;
|
||||
}
|
||||
if (newy != m_lasty)
|
||||
{
|
||||
update_state(m_RY, newy);
|
||||
m_lasty = newy;
|
||||
}
|
||||
}
|
||||
|
||||
bool on(analog_input_t &input, bool &state)
|
||||
{
|
||||
nl_fptype sup = (m_supply.VCC().Q_Analog() - m_supply.GND().Q_Analog());
|
||||
nl_fptype in = input() - m_supply.GND().Q_Analog();
|
||||
nl_fptype low = nlconst::magic(0.45) * sup;
|
||||
nl_fptype high = nlconst::magic(0.55) * sup;
|
||||
if (in < low)
|
||||
{
|
||||
state = false;
|
||||
}
|
||||
else if (in > high)
|
||||
{
|
||||
state = true;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
void update_state(analog::NETLIB_SUB(R_base) &R, bool state)
|
||||
{
|
||||
nl_fptype Rval = plib::reciprocal(exec().gmin());
|
||||
if (state)
|
||||
{
|
||||
nl_fptype sup = (m_supply.VCC().Q_Analog() - m_supply.GND().Q_Analog());
|
||||
Rval = m_base_r() * nlconst::magic(5.0) / sup;
|
||||
}
|
||||
R.change_state([this, &R, Rval]() -> void { this->m_RX.set_R(Rval);});
|
||||
}
|
||||
|
||||
analog::NETLIB_SUB(R_base) m_RX;
|
||||
analog::NETLIB_SUB(R_base) m_RY;
|
||||
analog_input_t m_select;
|
||||
analog_input_t m_inhibit;
|
||||
param_fp_t m_base_r;
|
||||
state_var<bool> m_lastx;
|
||||
state_var<bool> m_lasty;
|
||||
state_var<bool> m_select_state;
|
||||
state_var<bool> m_inhibit_state;
|
||||
nld_power_pins m_supply;
|
||||
};
|
||||
|
||||
NETLIB_DEVICE_IMPL(CD4053_GATE, "CD4053_GATE", "")
|
||||
} //namespace devices
|
||||
} // namespace netlist
|
35
src/lib/netlist/devices/nld_4053.h
Normal file
35
src/lib/netlist/devices/nld_4053.h
Normal file
@ -0,0 +1,35 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Couriersud
|
||||
/*
|
||||
* nld_4053.h
|
||||
*
|
||||
* CD4053: Triple 2-Channel Analog Multiplexer/Demultiplexer
|
||||
*
|
||||
* +--------------+
|
||||
* INOUTBY |1 ++ 16| VDD
|
||||
* INOUTBX |2 15| OUTINB
|
||||
* INOUTCY |3 14| OUTINA
|
||||
* OUTINC |4 4053 13| INOUTAY
|
||||
* INOUTCX |5 12| INOUTAX
|
||||
* INH |6 11| A
|
||||
* VEE |7 10| B
|
||||
* VSS |8 9| C
|
||||
* +--------------+
|
||||
*
|
||||
* FIXME: These devices are slow (~125 ns). This is currently not reflected
|
||||
*
|
||||
* Naming conventions follow National semiconductor datasheet
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef NLD_4053_H_
|
||||
#define NLD_4053_H_
|
||||
|
||||
#include "netlist/nl_setup.h"
|
||||
|
||||
// FIXME: Implement pure CMOS version
|
||||
|
||||
#define CD4053_GATE(name) \
|
||||
NET_REGISTER_DEV(CD4053_GATE, name)
|
||||
|
||||
#endif /* NLD_4053_H_ */
|
@ -9,7 +9,7 @@
|
||||
* 1Z |1 ++ 16| VCC
|
||||
* 1Y |2 15| 1S
|
||||
* 2Y |3 14| 4S
|
||||
* 2Z |4 4066 13| 4Z
|
||||
* 2Z |4 4316 13| 4Z
|
||||
* 2S |5 12| 4Y
|
||||
* 3S |6 11| 3Y
|
||||
* /E |7 10| 3Z
|
||||
|
@ -715,6 +715,17 @@
|
||||
#define CD4020(...) \
|
||||
NET_REGISTER_DEVEXT(CD4020, __VA_ARGS__)
|
||||
|
||||
// usage : CD4024(name)
|
||||
#define CD4024(...) \
|
||||
NET_REGISTER_DEVEXT(CD4024, __VA_ARGS__)
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Source: src/lib/netlist/devices/nld_4053.cpp
|
||||
// ---------------------------------------------------------------------
|
||||
// usage : CD4053_GATE(name)
|
||||
#define CD4053_GATE(...) \
|
||||
NET_REGISTER_DEVEXT(CD4053_GATE, __VA_ARGS__)
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Source: src/lib/netlist/devices/nld_4066.cpp
|
||||
// ---------------------------------------------------------------------
|
||||
@ -945,6 +956,10 @@
|
||||
#define TTL_7406_GATE(...) \
|
||||
NET_REGISTER_DEVEXT(TTL_7406_GATE, __VA_ARGS__)
|
||||
|
||||
// usage : TTL_7407_GATE(name)
|
||||
#define TTL_7407_GATE(...) \
|
||||
NET_REGISTER_DEVEXT(TTL_7407_GATE, __VA_ARGS__)
|
||||
|
||||
// usage : TTL_7408_GATE(name)
|
||||
#define TTL_7408_GATE(...) \
|
||||
NET_REGISTER_DEVEXT(TTL_7408_GATE, __VA_ARGS__)
|
||||
@ -1105,6 +1120,10 @@
|
||||
#define TTL_7406_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(TTL_7406_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : TTL_7407_DIP(name)
|
||||
#define TTL_7407_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(TTL_7407_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : TTL_7408_DIP(name)
|
||||
#define TTL_7408_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(TTL_7408_DIP, __VA_ARGS__)
|
||||
@ -1244,6 +1263,10 @@
|
||||
#define CD4001_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4001_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4011_DIP(name)
|
||||
#define CD4011_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4011_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4069_DIP(name)
|
||||
#define CD4069_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4069_DIP, __VA_ARGS__)
|
||||
@ -1256,10 +1279,18 @@
|
||||
#define CD4020_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4020_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4024_DIP(name)
|
||||
#define CD4024_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4024_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4016_DIP(name)
|
||||
#define CD4016_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4016_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4053_DIP(name)
|
||||
#define CD4053_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4053_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4066_DIP(name)
|
||||
#define CD4066_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4066_DIP, __VA_ARGS__)
|
||||
|
@ -39,6 +39,45 @@ static NETLIST_START(CD4001_DIP)
|
||||
|
||||
NETLIST_END()
|
||||
|
||||
/* CD4011: Quad 2-Input NAND Gates
|
||||
*
|
||||
* +--------------+
|
||||
* A |1 ++ 14| VDD
|
||||
* B |2 13| H
|
||||
* J |3 12| G
|
||||
* K |4 4011 11| M
|
||||
* C |5 10| L
|
||||
* D |6 9| F
|
||||
* VSS |7 8| E
|
||||
* +--------------+
|
||||
*
|
||||
* Naming conventions follow National Semiconductor datasheet
|
||||
*
|
||||
* FIXME: Timing depends on VDD-VSS
|
||||
* This needs a cmos d-a/a-d proxy implementation.
|
||||
*/
|
||||
|
||||
static NETLIST_START(CD4011_DIP)
|
||||
CD4011_GATE(A)
|
||||
CD4011_GATE(B)
|
||||
CD4011_GATE(C)
|
||||
CD4011_GATE(D)
|
||||
|
||||
NET_C(A.VDD, B.VDD, C.VDD, D.VDD)
|
||||
NET_C(A.VSS, B.VSS, C.VSS, D.VSS)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
A.A, /* A |1 ++ 14| VDD */ A.VDD,
|
||||
A.B, /* B |2 13| H */ D.B,
|
||||
A.Q, /* J |3 12| G */ D.A,
|
||||
B.Q, /* K |4 4011 11| M */ D.Q,
|
||||
B.A, /* C |5 10| L */ C.Q,
|
||||
B.B, /* D |6 9| F */ C.B,
|
||||
A.VSS,/* VSS |7 8| E */ C.A
|
||||
/* +--------------+ */
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
/* CD4020: 14-Stage Ripple Carry Binary Counters
|
||||
*
|
||||
* +--------------+
|
||||
@ -78,6 +117,91 @@ static NETLIST_START(CD4020_DIP)
|
||||
|
||||
NETLIST_END()
|
||||
|
||||
/* CD4024: 7-Stage Ripple Carry Binary Counters
|
||||
*
|
||||
* +--------------+
|
||||
* IP |1 ++ 14| VDD
|
||||
* RESET |2 13| NC
|
||||
* Q7 |3 12| Q1
|
||||
* Q6 |4 4024 11| Q2
|
||||
* Q5 |5 10| NC
|
||||
* Q4 |6 9| Q3
|
||||
* VSS |7 8| NC
|
||||
* +--------------+
|
||||
*
|
||||
* Naming conventions follow Texas Instruments datasheet
|
||||
*
|
||||
* FIXME: Timing depends on VDD-VSS
|
||||
* This needs a cmos d-a/a-d proxy implementation.
|
||||
*/
|
||||
|
||||
static NETLIST_START(CD4024_DIP)
|
||||
|
||||
CD4024(s1)
|
||||
NC_PIN(NC)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
s1.IP, /* IP |1 ++ 14| VDD */ s1.VDD,
|
||||
s1.RESET, /* RESET |2 13| NC */ NC.I,
|
||||
s1.Q7, /* Q7 |3 12| Q1 */ s1.Q1,
|
||||
s1.Q6, /* Q6 |4 4024 11| Q2 */ s1.Q2,
|
||||
s1.Q5, /* Q5 |5 10| NC */ NC.I,
|
||||
s1.Q4, /* Q4 |6 9| Q3 */ s1.Q3,
|
||||
s1.VSS, /* VSS |7 8| NC */ NC.I
|
||||
/* +--------------+ */
|
||||
)
|
||||
/*
|
||||
* IP = (Input pulses)
|
||||
*/
|
||||
|
||||
NETLIST_END()
|
||||
|
||||
/* CD4053: Triple 2-Channel Analog Multiplexer/Demultiplexer
|
||||
*
|
||||
* +--------------+
|
||||
* INOUTBY |1 ++ 16| VDD
|
||||
* INOUTBX |2 15| OUTINB
|
||||
* INOUTCY |3 14| OUTINA
|
||||
* OUTINC |4 4053 13| INOUTAY
|
||||
* INOUTCX |5 12| INOUTAX
|
||||
* INH |6 11| A
|
||||
* VEE |7 10| B
|
||||
* VSS |8 9| C
|
||||
* +--------------+
|
||||
*
|
||||
* FIXME: These devices are slow (~125 ns). THis is currently not reflected
|
||||
*
|
||||
* Naming conventions follow National semiconductor datasheet
|
||||
*
|
||||
*/
|
||||
|
||||
static NETLIST_START(CD4053_DIP)
|
||||
CD4053_GATE(A)
|
||||
CD4053_GATE(B)
|
||||
CD4053_GATE(C)
|
||||
|
||||
NET_C(A.VEE, B.VEE, C.VEE)
|
||||
NET_C(A.VDD, B.VDD, C.VDD)
|
||||
NET_C(A.VSS, B.VSS, C.VSS)
|
||||
NET_C(A.INH, B.INH, C.INH)
|
||||
|
||||
PARAM(A.BASER, 270.0)
|
||||
PARAM(B.BASER, 270.0)
|
||||
PARAM(C.BASER, 270.0)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
B.Y, /* INOUTBY |1 ++ 16| VDD */ A.VDD,
|
||||
B.X, /* INOUTBX |2 15| OUTINB */ B.XY,
|
||||
C.Y, /* INOUTCY |3 14| OUTINA */ A.XY,
|
||||
C.XY, /* OUTINC |4 4053 13| INOUTAY */ A.Y,
|
||||
C.X, /* INOUTCX |5 12| INOUTAX */ A.X,
|
||||
A.INH, /* INH |6 11| A */ A.S,
|
||||
A.VEE, /* VEE |7 10| B */ B.S,
|
||||
A.VSS, /* VSS |8 9| C */ C.S
|
||||
/* +--------------+ */
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
/* CD4066: Quad Bilateral Switch
|
||||
*
|
||||
* +--------------+
|
||||
@ -171,7 +295,7 @@ static NETLIST_START(CD4069_DIP)
|
||||
CD4069_GATE(E)
|
||||
CD4069_GATE(F)
|
||||
|
||||
NET_C(A.VDD, B.VDD, C.VDD, D.VDD, E.VDD, E.VDD)
|
||||
NET_C(A.VDD, B.VDD, C.VDD, D.VDD, E.VDD, F.VDD)
|
||||
NET_C(A.VSS, B.VSS, C.VSS, D.VSS, E.VSS, F.VSS)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
@ -318,6 +442,14 @@ NETLIST_START(CD4XXX_lib)
|
||||
TT_FAMILY("CD4XXX")
|
||||
TRUTHTABLE_END()
|
||||
|
||||
TRUTHTABLE_START(CD4011_GATE, 2, 1, "")
|
||||
TT_HEAD("A,B|Q ")
|
||||
TT_LINE("0,X|1|100")
|
||||
TT_LINE("X,0|1|100")
|
||||
TT_LINE("1,1|0|100")
|
||||
TT_FAMILY("CDXXXX")
|
||||
TRUTHTABLE_END()
|
||||
|
||||
TRUTHTABLE_START(CD4069_GATE, 1, 1, "")
|
||||
TT_HEAD("A|Q ")
|
||||
TT_LINE("0|1|55")
|
||||
@ -335,12 +467,15 @@ NETLIST_START(CD4XXX_lib)
|
||||
TRUTHTABLE_END()
|
||||
|
||||
LOCAL_LIB_ENTRY(CD4001_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4011_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4069_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4070_DIP)
|
||||
|
||||
/* DIP ONLY */
|
||||
LOCAL_LIB_ENTRY(CD4020_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4024_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4016_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4053_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4066_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4316_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4538_DIP)
|
||||
|
@ -14,7 +14,9 @@
|
||||
* CD4001_NOR : single gate
|
||||
* CD4001_DIP : dip package
|
||||
* CD4020_DIP : dip package (device model in core)
|
||||
* CD4024_DIP : dip package (device model in core)
|
||||
* CD4016_DIP : dip package (device model in core)
|
||||
* CD4053_DIP : dip package (device model in core)
|
||||
* CD4066_DIP : dip package (device model in core)
|
||||
*
|
||||
*/
|
||||
@ -33,6 +35,12 @@
|
||||
#define CD4001_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4001_DIP, name)
|
||||
|
||||
#define CD4011_GATE(name) \
|
||||
NET_REGISTER_DEV(CD4001_GATE, name)
|
||||
|
||||
#define CD4011_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4011_DIP, name)
|
||||
|
||||
#define CD4069_GATE(name) \
|
||||
NET_REGISTER_DEV(CD4069_GATE, name)
|
||||
|
||||
@ -52,6 +60,12 @@
|
||||
#define CD4020_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4020_DIP, name)
|
||||
|
||||
#define CD4024_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4024_DIP, name)
|
||||
|
||||
#define CD4053_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4053_DIP, name)
|
||||
|
||||
#define CD4066_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4066_DIP, name)
|
||||
|
||||
|
@ -163,6 +163,37 @@ static NETLIST_START(TTL_7406_DIP)
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
/*
|
||||
* DM7407: Hex Buffers with
|
||||
* High Voltage Open-Collector Outputs
|
||||
*
|
||||
* Naming conventions follow Fairchild Semiconductor datasheet
|
||||
*
|
||||
*/
|
||||
|
||||
static NETLIST_START(TTL_7407_DIP)
|
||||
TTL_7407_GATE(A)
|
||||
TTL_7407_GATE(B)
|
||||
TTL_7407_GATE(C)
|
||||
TTL_7407_GATE(D)
|
||||
TTL_7407_GATE(E)
|
||||
TTL_7407_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)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
A.A, /* A1 |1 ++ 14| VCC */ A.VCC,
|
||||
A.Y, /* Y1 |2 13| A6 */ F.A,
|
||||
B.A, /* A2 |3 12| Y6 */ F.Y,
|
||||
B.Y, /* Y2 |4 7406 11| A5 */ E.A,
|
||||
C.A, /* A3 |5 10| Y5 */ E.Y,
|
||||
C.Y, /* Y3 |6 9| A4 */ D.A,
|
||||
A.GND,/* GND |7 8| Y4 */ D.Y
|
||||
/* +--------------+ */
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
/*
|
||||
* DM7408: Quad 2-Input AND Gates
|
||||
*
|
||||
@ -1431,6 +1462,14 @@ NETLIST_START(TTL74XX_lib)
|
||||
TT_FAMILY("74XXOC")
|
||||
TRUTHTABLE_END()
|
||||
|
||||
TRUTHTABLE_START(TTL_7407_GATE, 1, 1, "")
|
||||
TT_HEAD("A|Y ")
|
||||
TT_LINE("0|0|15")
|
||||
TT_LINE("1|1|23")
|
||||
/* Open Collector */
|
||||
TT_FAMILY("74XXOC")
|
||||
TRUTHTABLE_END()
|
||||
|
||||
TRUTHTABLE_START(TTL_7408_GATE, 2, 1, "")
|
||||
TT_HEAD("A,B|Q ")
|
||||
TT_LINE("0,X|0|15")
|
||||
@ -1886,6 +1925,7 @@ NETLIST_START(TTL74XX_lib)
|
||||
LOCAL_LIB_ENTRY(TTL_7402_DIP)
|
||||
LOCAL_LIB_ENTRY(TTL_7404_DIP)
|
||||
LOCAL_LIB_ENTRY(TTL_7406_DIP)
|
||||
LOCAL_LIB_ENTRY(TTL_7407_DIP)
|
||||
LOCAL_LIB_ENTRY(TTL_7408_DIP)
|
||||
LOCAL_LIB_ENTRY(TTL_7410_DIP)
|
||||
LOCAL_LIB_ENTRY(TTL_7411_DIP)
|
||||
|
@ -65,6 +65,13 @@
|
||||
NET_REGISTER_DEV(TTL_7406_DIP, name)
|
||||
|
||||
|
||||
#define TTL_7407_GATE(name) \
|
||||
NET_REGISTER_DEV(TTL_7407_GATE, name)
|
||||
|
||||
#define TTL_7407_DIP(name) \
|
||||
NET_REGISTER_DEV(TTL_7407_DIP, name)
|
||||
|
||||
|
||||
#define TTL_7408_GATE(name) \
|
||||
NET_REGISTER_DEV(TTL_7408_GATE, name)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user