mirror of
https://github.com/holub/mame
synced 2025-07-01 08:18:59 +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;
|
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 const std::size_t m_num_bits = m_NI;
|
||||||
static constexpr std::size_t m_size = (1 << (m_num_bits));
|
static constexpr const std::size_t m_size = (1 << (m_num_bits));
|
||||||
static constexpr type_t m_outmask = ((1 << m_NO) - 1);
|
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
|
struct truthtable_t
|
||||||
{
|
{
|
||||||
@ -115,7 +116,7 @@ namespace netlist
|
|||||||
|
|
||||||
void inc_active() NL_NOEXCEPT override
|
void inc_active() NL_NOEXCEPT override
|
||||||
{
|
{
|
||||||
if (m_NI > 1)
|
if (m_NI >= m_min_devices_for_deactivate)
|
||||||
if (++m_active == 1)
|
if (++m_active == 1)
|
||||||
{
|
{
|
||||||
process<false>();
|
process<false>();
|
||||||
@ -130,7 +131,7 @@ namespace netlist
|
|||||||
* can decide for each individual gate whether it is beneficial to
|
* can decide for each individual gate whether it is beneficial to
|
||||||
* ignore deactivation.
|
* ignore deactivation.
|
||||||
*/
|
*/
|
||||||
if (m_NI > 1)
|
if (m_NI >= m_min_devices_for_deactivate)
|
||||||
if (--m_active == 0)
|
if (--m_active == 0)
|
||||||
{
|
{
|
||||||
for (std::size_t i = 0; i< m_NI; i++)
|
for (std::size_t i = 0; i< m_NI; i++)
|
||||||
@ -152,7 +153,7 @@ namespace netlist
|
|||||||
netlist_time mt(netlist_time::zero());
|
netlist_time mt(netlist_time::zero());
|
||||||
|
|
||||||
type_t nstate(0);
|
type_t nstate(0);
|
||||||
if (m_NI > 1)
|
if (m_NI >= m_min_devices_for_deactivate)
|
||||||
{
|
{
|
||||||
type_t ign(m_ign);
|
type_t ign(m_ign);
|
||||||
if (!doOUT)
|
if (!doOUT)
|
||||||
@ -174,13 +175,14 @@ namespace netlist
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!doOUT)
|
if (!doOUT)
|
||||||
{
|
for (std::size_t i = 0; i < m_NI; i++)
|
||||||
nstate |= m_I[0]();
|
{
|
||||||
//mt = std::max(this->m_I[0].net().time(), mt);
|
nstate |= (m_I[i]() << i);
|
||||||
mt = this->m_I[0].net().time();
|
mt = std::max(this->m_I[i].net().time(), mt);
|
||||||
}
|
}
|
||||||
else
|
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]);
|
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)
|
for (std::size_t i = 0; i < m_NO; out >>= 1, ++i)
|
||||||
m_Q[i].set_Q_time(out & 1, mt + tim[t[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);
|
type_t ign(m_ign);
|
||||||
for (auto I = m_I.begin(); ign != 0; ign >>= 1, ++I)
|
for (auto I = m_I.begin(); ign != 0; ign >>= 1, ++I)
|
||||||
|
Loading…
Reference in New Issue
Block a user