netlist: Added CD4017/4022 devices.

* Also contains squashed clang signedness fixes
This commit is contained in:
Aaron Giles 2020-08-01 18:26:52 +02:00 committed by couriersud
parent 2719654114
commit 9414a219a9
9 changed files with 232 additions and 0 deletions

View File

@ -138,6 +138,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_4006.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4013.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_4013.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4017.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_4017.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_4020.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4053.cpp",

View File

@ -154,6 +154,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_tms4800.o \
$(NLOBJ)/devices/nld_4006.o \
$(NLOBJ)/devices/nld_4013.o \
$(NLOBJ)/devices/nld_4017.o \
$(NLOBJ)/devices/nld_4020.o \
$(NLOBJ)/devices/nld_4053.o \
$(NLOBJ)/devices/nld_4066.o \

View File

@ -142,6 +142,8 @@ namespace devices
// FIXME: duplicate?
LIB_ENTRY(CD4006)
LIB_ENTRY(CD4006_dip)
LIB_ENTRY(CD4017)
LIB_ENTRY(CD4022)
LIB_ENTRY(CD4020_WI)
LIB_ENTRY(CD4020)
LIB_ENTRY(CD4024)

View File

@ -48,6 +48,7 @@ NETLIST_EXTERNAL(ROMS_lib)
#include "nld_2102A.h"
#include "nld_4006.h"
#include "nld_4013.h"
#include "nld_4017.h"
#include "nld_4020.h"
#include "nld_4053.h"
#include "nld_4066.h"

View File

@ -0,0 +1,86 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
* nld_4017.c
*
*/
#include "nld_4017.h"
#include "nl_base.h"
#include "nl_factory.h"
namespace netlist
{
namespace devices
{
template <std::size_t _MaxCount>
NETLIB_OBJECT(CD4017_base)
{
NETLIB_CONSTRUCTOR_MODEL(CD4017_base, "CD4XXX")
, m_CLK(*this, "CLK", NETLIB_DELEGATE(clk))
, m_CLKEN(*this, "CLKEN", NETLIB_DELEGATE(inputs))
, m_RESET(*this, "RESET", NETLIB_DELEGATE(inputs))
, m_CO(*this, "CO")
, m_Q(*this, 0, "Q{}")
, m_cnt(*this, "m_cnt", 0)
, m_supply(*this)
{
}
NETLIB_RESETI()
{
m_CLK.set_state(logic_t::STATE_INP_LH);
m_cnt = 0;
}
NETLIB_HANDLERI(clk)
{
++m_cnt;
update_outputs(m_cnt);
}
NETLIB_HANDLERI(inputs)
{
if (m_RESET())
{
m_CLK.inactivate();
m_cnt = 0;
update_outputs(m_cnt);
}
else if (m_CLKEN())
{
m_CLK.inactivate();
}
else
{
m_CLK.activate_lh();
}
}
public:
void update_outputs(const unsigned cnt) noexcept
{
for (std::size_t i = 0; i < _MaxCount; i++)
m_Q[i].push(i == cnt, NLTIME_FROM_NS(200));
m_CO.push(cnt < _MaxCount / 2, NLTIME_FROM_NS(160));
}
logic_input_t m_CLK;
logic_input_t m_CLKEN;
logic_input_t m_RESET;
logic_output_t m_CO;
object_array_t<logic_output_t, _MaxCount> m_Q;
state_var<unsigned> m_cnt;
nld_power_pins m_supply;
};
using NETLIB_NAME(CD4017) = NETLIB_NAME(CD4017_base)<10>;
using NETLIB_NAME(CD4022) = NETLIB_NAME(CD4017_base)<8>;
NETLIB_DEVICE_IMPL(CD4017, "CD4017", "")
NETLIB_DEVICE_IMPL(CD4022, "CD4022", "")
} //namespace devices
} // namespace netlist

View File

@ -0,0 +1,51 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
* nld_4017.h
*
* CD4017: Decade Counter/Divider with 10 Decoded Outputs
*
* +--------------+
* Q5 |1 ++ 16| VDD
* Q1 |2 15| RESET
* Q0 |3 14| CLOCK
* Q2 |4 4017 13| CLOCK ENABLE
* Q6 |5 12| CARRY OUT
* Q7 |6 11| Q9
* Q3 |7 10| Q4
* VSS |8 9| Q8
* +--------------+
*
*
* CD4022: Divide-by-8 Counter/Divider with 8 Decoded Outputs
*
* +--------------+
* Q1 |1 ++ 16| VDD
* Q0 |2 15| RESET
* Q2 |3 14| CLOCK
* Q5 |4 4022 13| CLOCK ENABLE
* Q6 |5 12| CARRY OUT
* NC |6 11| Q4
* Q3 |7 10| Q7
* VSS |8 9| NC
* +--------------+
*
* Naming conventions follow Fairchild datasheet
*
* FIXME: Timing depends on VDD-VSS
* This needs a cmos d-a/a-d proxy implementation.
*
*/
#ifndef NLD_4017_H_
#define NLD_4017_H_
#include "netlist/nl_setup.h"
#define CD4017(name) \
NET_REGISTER_DEV(CD4017, name)
#define CD4022(name) \
NET_REGISTER_DEV(CD4022, name)
#endif /* NLD_4017_H_ */

View File

@ -684,6 +684,17 @@
#define CD4006_DIP(...) \
NET_REGISTER_DEVEXT(CD4006_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4017.cpp
// ---------------------------------------------------------------------
// usage : CD4017(name)
#define CD4017(...) \
NET_REGISTER_DEVEXT(CD4017, __VA_ARGS__)
// usage : CD4022(name)
#define CD4022(...) \
NET_REGISTER_DEVEXT(CD4022, __VA_ARGS__)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4020.cpp
// ---------------------------------------------------------------------
@ -1264,6 +1275,14 @@
#define CD4013_DIP(...) \
NET_REGISTER_DEVEXT(CD4013_DIP, __VA_ARGS__)
// usage : CD4017_DIP(name)
#define CD4017_DIP(...) \
NET_REGISTER_DEVEXT(CD4017_DIP, __VA_ARGS__)
// usage : CD4022_DIP(name)
#define CD4022_DIP(...) \
NET_REGISTER_DEVEXT(CD4022_DIP, __VA_ARGS__)
// usage : CD4020_DIP(name)
#define CD4020_DIP(...) \
NET_REGISTER_DEVEXT(CD4020_DIP, __VA_ARGS__)

View File

@ -113,6 +113,68 @@ static NETLIST_START(CD4013_DIP)
)
NETLIST_END()
/*
* CD4017: Decade Counter/Divider with 10 Decoded Outputs
*
* +--------------+
* Q5 |1 ++ 16| VDD
* Q1 |2 15| RESET
* Q0 |3 14| CLOCK
* Q2 |4 4017 13| CLOCK ENABLE
* Q6 |5 12| CARRY OUT
* Q7 |6 11| Q9
* Q3 |7 10| Q4
* VSS |8 9| Q8
* +--------------+
*
*
* CD4022: Divide-by-8 Counter/Divider with 8 Decoded Outputs
*
* +--------------+
* Q1 |1 ++ 16| VDD
* Q0 |2 15| RESET
* Q2 |3 14| CLOCK
* Q5 |4 4022 13| CLOCK ENABLE
* Q6 |5 12| CARRY OUT
* NC |6 11| Q4
* Q3 |7 10| Q7
* VSS |8 9| NC
* +--------------+
*/
static NETLIST_START(CD4017_DIP)
CD4017(A)
DIPPINS( /* +--------------+ */
A.Q5, /* Q5 |1 ++ 16| VDD */ A.VDD,
A.Q1, /* Q1 |2 15| RESET */ A.RESET,
A.Q0, /* Q0 |3 14| CLOCK */ A.CLK,
A.Q2, /* Q2 |4 4017 13| CLOCK ENABLE */ A.CLKEN,
A.Q6, /* Q6 |5 12| CARRY OUT */ A.CO,
A.Q7, /* Q7 |6 11| Q9 */ A.Q9,
A.Q3, /* Q3 |7 10| Q4 */ A.Q4,
A.VSS, /* VSS |8 9| Q8 */ A.Q8
/* +--------------+ */
)
NETLIST_END()
static NETLIST_START(CD4022_DIP)
CD4022(A)
NC_PIN(NC)
DIPPINS( /* +--------------+ */
A.Q1, /* Q1 |1 ++ 16| VDD */ A.VDD,
A.Q0, /* Q0 |2 15| RESET */ A.RESET,
A.Q2, /* Q2 |3 14| CLOCK */ A.CLK,
A.Q5, /* Q5 |4 4022 13| CLOCK ENABLE */ A.CLKEN,
A.Q6, /* Q6 |5 12| CARRY OUT */ A.CO,
NC.I, /* NC |6 11| Q4 */ A.Q4,
A.Q3, /* Q3 |7 10| Q7 */ A.Q7,
A.VSS, /* VSS |8 9| NC */ NC.I
/* +--------------+ */
)
NETLIST_END()
/* CD4020: 14-Stage Ripple Carry Binary Counters
*
* +--------------+
@ -508,6 +570,8 @@ NETLIST_START(CD4XXX_lib)
/* DIP ONLY */
LOCAL_LIB_ENTRY(CD4013_DIP)
LOCAL_LIB_ENTRY(CD4017_DIP)
LOCAL_LIB_ENTRY(CD4022_DIP)
LOCAL_LIB_ENTRY(CD4020_DIP)
LOCAL_LIB_ENTRY(CD4024_DIP)
LOCAL_LIB_ENTRY(CD4053_DIP)

View File

@ -61,6 +61,12 @@
#define CD4013_DIP(name) \
NET_REGISTER_DEV(CD4013_DIP, name)
#define CD4017_DIP(name) \
NET_REGISTER_DEV(CD4017_DIP, name)
#define CD4022_DIP(name) \
NET_REGISTER_DEV(CD4022_DIP, name)
#define CD4020_DIP(name) \
NET_REGISTER_DEV(CD4020_DIP, name)