mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 17:15:33 +00:00
Replaced more old SigChunk programming patterns
This commit is contained in:
parent
7a608437c6
commit
6aa792c864
17 changed files with 101 additions and 104 deletions
|
@ -35,10 +35,8 @@ struct BitPatternPool
|
|||
if (width > 0) {
|
||||
std::vector<RTLIL::State> pattern(width);
|
||||
for (int i = 0; i < width; i++) {
|
||||
RTLIL::SigSpec s = sig.extract(i, 1);
|
||||
assert(s.chunks().size() == 1);
|
||||
if (s.chunks()[0].wire == NULL && s.chunks()[0].data.bits[0] <= RTLIL::State::S1)
|
||||
pattern[i] = s.chunks()[0].data.bits[0];
|
||||
if (sig[i].wire == NULL && sig[i].data <= RTLIL::State::S1)
|
||||
pattern[i] = sig[i].data;
|
||||
else
|
||||
pattern[i] = RTLIL::State::Sa;
|
||||
}
|
||||
|
@ -59,9 +57,7 @@ struct BitPatternPool
|
|||
|
||||
bits_t sig2bits(RTLIL::SigSpec sig)
|
||||
{
|
||||
assert(sig.is_fully_const());
|
||||
assert(sig.chunks().size() == 1);
|
||||
bits_t bits = sig.chunks()[0].data.bits;
|
||||
bits_t bits = sig.as_const().bits;
|
||||
for (auto &b : bits)
|
||||
if (b > RTLIL::State::S1)
|
||||
b = RTLIL::State::Sa;
|
||||
|
|
|
@ -207,9 +207,9 @@ struct ConstEval
|
|||
if (sig.is_fully_const())
|
||||
return true;
|
||||
|
||||
for (size_t i = 0; i < sig.chunks().size(); i++)
|
||||
if (sig.chunks()[i].wire != NULL)
|
||||
undef.append(sig.chunks()[i]);
|
||||
for (auto &c : sig.chunks())
|
||||
if (c.wire != NULL)
|
||||
undef.append(c);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1999,6 +1999,14 @@ bool RTLIL::SigSpec::operator ==(const RTLIL::SigSpec &other) const
|
|||
return true;
|
||||
}
|
||||
|
||||
bool RTLIL::SigSpec::is_wire() const
|
||||
{
|
||||
cover("kernel.rtlil.sigspec.is_wire");
|
||||
|
||||
pack();
|
||||
return SIZE(chunks_) == 1 && chunks_[0].wire && chunks_[0].wire->width == width_;
|
||||
}
|
||||
|
||||
bool RTLIL::SigSpec::is_fully_const() const
|
||||
{
|
||||
cover("kernel.rtlil.sigspec.is_fully_const");
|
||||
|
@ -2104,6 +2112,15 @@ RTLIL::Const RTLIL::SigSpec::as_const() const
|
|||
return RTLIL::Const();
|
||||
}
|
||||
|
||||
RTLIL::Wire *RTLIL::SigSpec::as_wire() const
|
||||
{
|
||||
cover("kernel.rtlil.sigspec.as_wire");
|
||||
|
||||
pack();
|
||||
assert(is_wire());
|
||||
return chunks_[0].wire;
|
||||
}
|
||||
|
||||
bool RTLIL::SigSpec::match(std::string pattern) const
|
||||
{
|
||||
cover("kernel.rtlil.sigspec.match");
|
||||
|
|
|
@ -576,6 +576,7 @@ public:
|
|||
bool operator ==(const RTLIL::SigSpec &other) const;
|
||||
inline bool operator !=(const RTLIL::SigSpec &other) const { return !(*this == other); }
|
||||
|
||||
bool is_wire() const;
|
||||
bool is_fully_const() const;
|
||||
bool is_fully_def() const;
|
||||
bool is_fully_undef() const;
|
||||
|
@ -585,6 +586,7 @@ public:
|
|||
int as_int() const;
|
||||
std::string as_string() const;
|
||||
RTLIL::Const as_const() const;
|
||||
RTLIL::Wire *as_wire() const;
|
||||
|
||||
bool match(std::string pattern) const;
|
||||
|
||||
|
@ -612,7 +614,7 @@ inline RTLIL::SigBit &RTLIL::SigSpecIterator::operator*() const {
|
|||
|
||||
inline RTLIL::SigBit::SigBit(const RTLIL::SigSpec &sig) {
|
||||
assert(sig.size() == 1 && sig.chunks().size() == 1);
|
||||
*this = SigBit(sig.chunks()[0]);
|
||||
*this = SigBit(sig.chunks().front());
|
||||
}
|
||||
|
||||
struct RTLIL::CaseRule {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue