new netlist device: 74164 - 8bit parallel output serial shift register

This commit is contained in:
Joakim Larsson Edstrom 2017-02-12 19:21:54 +01:00
parent eed65a01ac
commit f9f149a579
4 changed files with 164 additions and 0 deletions

View File

@ -78,6 +78,7 @@ namespace netlist
ENTRYX(74123, TTL_74123, "")
ENTRYX(74153, TTL_74153, "+C0,+C1,+C2,+C3,+A,+B,+G")
ENTRYX(74161, TTL_74161, "+A,+B,+C,+D,+CLRQ,+LOADQ,+CLK,+ENABLEP,+ENABLET")
ENTRYX(74164, TTL_74164, "+A,+B,+CLRQ,+CLK")
ENTRYX(74165, TTL_74165, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H")
ENTRYX(74166, TTL_74166, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,+CLRQ")
ENTRYX(74174, TTL_74174, "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ")
@ -126,6 +127,7 @@ namespace netlist
ENTRYX(74123_dip, TTL_74123_DIP, "")
ENTRYX(74153_dip, TTL_74153_DIP, "")
ENTRYX(74161_dip, TTL_74161_DIP, "")
ENTRYX(74164_dip, TTL_74164_DIP, "")
ENTRYX(74165_dip, TTL_74165_DIP, "")
ENTRYX(74166_dip, TTL_74166_DIP, "")
ENTRYX(74174_dip, TTL_74174_DIP, "")

View File

@ -52,6 +52,7 @@
#include "nld_74123.h"
#include "nld_74153.h"
#include "nld_74161.h"
#include "nld_74164.h"
#include "nld_74165.h"
#include "nld_74166.h"
#include "nld_74174.h"

View File

@ -0,0 +1,104 @@
// license:BSD-3-Clause
// copyright-holders:Joakim Larsson Edstrom
/*
* nld_74164.cpp
*
* Thanks to the 74161 work of Ryan and the huge Netlist effort by Couriersud
* implementing this was simple.
*
*/
#include "nld_74164.h"
#include "../nl_base.h"
namespace netlist
{
namespace devices
{
NETLIB_OBJECT(74164)
{
NETLIB_CONSTRUCTOR(74164)
, m_A(*this, "A")
, m_B(*this, "B")
, m_CLRQ(*this, "CLRQ")
, m_CLK(*this, "CLK")
, m_cnt(*this, "m_cnt", 0)
, m_last_CLK(*this, "m_last_CLK", 0)
, m_Q(*this, {{"QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH"}})
{
}
NETLIB_RESETI();
NETLIB_UPDATEI();
protected:
logic_input_t m_A;
logic_input_t m_B;
logic_input_t m_CLRQ;
logic_input_t m_CLK;
state_var<unsigned> m_cnt;
state_var<unsigned> m_last_CLK;
object_array_t<logic_output_t, 8> m_Q;
};
NETLIB_OBJECT_DERIVED(74164_dip, 74164)
{
NETLIB_CONSTRUCTOR_DERIVED(74164_dip, 74164)
{
register_subalias("1", m_A);
register_subalias("2", m_B);
register_subalias("3", m_Q[0]);
register_subalias("4", m_Q[1]);
register_subalias("5", m_Q[2]);
register_subalias("6", m_Q[3]);
register_subalias("8", m_CLK);
register_subalias("9", m_CLRQ);
register_subalias("10", m_Q[4]);
register_subalias("11", m_Q[5]);
register_subalias("12", m_Q[6]);
register_subalias("13", m_Q[7]);
}
};
NETLIB_RESET(74164)
{
m_cnt = 0;
m_last_CLK = 0;
}
NETLIB_UPDATE(74164)
{
if (!m_CLRQ())
{
m_cnt = 0;
}
else if (m_CLK() && !m_last_CLK)
{
m_cnt = (m_cnt << 1) & 0xfe;
if (m_A() && m_B())
{
m_cnt |= 0x01;
}
else
{
m_cnt &= 0xfe;
}
}
m_last_CLK = m_CLK();
for (std::size_t i=0; i<8; i++)
{
m_Q[i].push((m_cnt >> i) & 1, NLTIME_FROM_NS(30));
}
}
NETLIB_DEVICE_IMPL(74164)
NETLIB_DEVICE_IMPL(74164_dip)
} //namespace devices
} // namespace netlist

View File

@ -0,0 +1,57 @@
// license:BSD-3-Clause
// copyright-holders:Joakim Larsson Edstrom
/*****************************************************************************
5/74164 8-bit parallel-out serial shift registers
***********************************************************************
Connection Diagram:
___ ___
A 1 |* u | 14 Vcc
B 2 | | 13 QH
QA 3 | | 12 QG
QB 4 | | 11 QF
QC 5 | | 10 QE
QD 6 | | 9 *Clear
GND 7 |_______| 8 Clock
***********************************************************************
Function Table:
+-------------------------+----------------+
| Inputs | Qutputs* |
+-------+-------+---------+----------------+
| Clear | Clock | A B | QA QB ... QH |
+-------+-------+---------+----------------+
| L | X | X X | L L L |
| H | L | X X | QA0 QB0 QH0 |
| H | ^ | H H | H QAn QGn |
| H | ^ | L X | L QAn QGn |
| H | ^ | X L | L QAn QGn |
+-------+-------+---------+----------------+
H = High Level (steady state)
L = Low Level (steady state)
X = Don't Care
^ = Transition from low to high level
QA0, QB0 ... QH0 = The level of QA, QB ... QH before the indicated steady-state input conditions were established.
QAn, QGn = The level of QA or QG before the most recent ^ transition of the clock; indicates a 1 bit shift.
**********************************************************************/
#ifndef NLD_74164_H_
#define NLD_74164_H_
#include "../nl_setup.h"
#define TTL_74164(name, cA, cB, cCLRQ, cCLK) \
NET_REGISTER_DEV(TTL_74164, name) \
NET_CONNECT(name, A, cA) \
NET_CONNECT(name, B, cB) \
NET_CONNECT(name, CLRQ, cCLRQ) \
NET_CONNECT(name, CLK, cCLK)
#define TTL_74164_DIP(name) \
NET_REGISTER_DEV(TTL_74164_DIP, name)
#endif /* NLD_74164_H_ */