mirror of
https://github.com/holub/mame
synced 2025-06-29 23:48:56 +03:00
Parametrized device activation in truthtables. (nw)
This commit is contained in:
parent
cfa43e6ae5
commit
f011567c77
@ -67,9 +67,10 @@ namespace netlist
|
||||
|
||||
typedef typename uint_for_size<need_bytes_for_bits<m_NO + m_NI>::value>::type type_t;
|
||||
|
||||
static constexpr std::size_t m_num_bits = m_NI;
|
||||
static constexpr std::size_t m_size = (1 << (m_num_bits));
|
||||
static constexpr type_t m_outmask = ((1 << m_NO) - 1);
|
||||
static constexpr const std::size_t m_num_bits = m_NI;
|
||||
static constexpr const std::size_t m_size = (1 << (m_num_bits));
|
||||
static constexpr const type_t m_outmask = ((1 << m_NO) - 1);
|
||||
static constexpr const std::size_t m_min_devices_for_deactivate = 2;
|
||||
|
||||
struct truthtable_t
|
||||
{
|
||||
@ -115,7 +116,7 @@ namespace netlist
|
||||
|
||||
void inc_active() NL_NOEXCEPT override
|
||||
{
|
||||
if (m_NI > 1)
|
||||
if (m_NI >= m_min_devices_for_deactivate)
|
||||
if (++m_active == 1)
|
||||
{
|
||||
process<false>();
|
||||
@ -130,7 +131,7 @@ namespace netlist
|
||||
* can decide for each individual gate whether it is beneficial to
|
||||
* ignore deactivation.
|
||||
*/
|
||||
if (m_NI > 1)
|
||||
if (m_NI >= m_min_devices_for_deactivate)
|
||||
if (--m_active == 0)
|
||||
{
|
||||
for (std::size_t i = 0; i< m_NI; i++)
|
||||
@ -152,7 +153,7 @@ namespace netlist
|
||||
netlist_time mt(netlist_time::zero());
|
||||
|
||||
type_t nstate(0);
|
||||
if (m_NI > 1)
|
||||
if (m_NI >= m_min_devices_for_deactivate)
|
||||
{
|
||||
type_t ign(m_ign);
|
||||
if (!doOUT)
|
||||
@ -174,13 +175,14 @@ namespace netlist
|
||||
else
|
||||
{
|
||||
if (!doOUT)
|
||||
{
|
||||
nstate |= m_I[0]();
|
||||
//mt = std::max(this->m_I[0].net().time(), mt);
|
||||
mt = this->m_I[0].net().time();
|
||||
}
|
||||
for (std::size_t i = 0; i < m_NI; i++)
|
||||
{
|
||||
nstate |= (m_I[i]() << i);
|
||||
mt = std::max(this->m_I[i].net().time(), mt);
|
||||
}
|
||||
else
|
||||
nstate |= m_I[0]();
|
||||
for (std::size_t i = 0; i < m_NI; i++)
|
||||
nstate |= (m_I[i]() << i);
|
||||
}
|
||||
|
||||
const type_t outstate(m_ttp.m_outs[nstate]);
|
||||
@ -199,7 +201,7 @@ namespace netlist
|
||||
for (std::size_t i = 0; i < m_NO; out >>= 1, ++i)
|
||||
m_Q[i].set_Q_time(out & 1, mt + tim[t[i]]);
|
||||
|
||||
if (m_NI > 1)
|
||||
if (m_NI >= m_min_devices_for_deactivate)
|
||||
{
|
||||
type_t ign(m_ign);
|
||||
for (auto I = m_I.begin(); ign != 0; ign >>= 1, ++I)
|
||||
|
Loading…
Reference in New Issue
Block a user