mirror of
https://github.com/YosysHQ/yosys
synced 2025-10-27 17:59:26 +00:00
Update backends to avoid bits()
This commit is contained in:
parent
e151fbc5df
commit
c89a4da607
6 changed files with 33 additions and 26 deletions
|
|
@ -709,12 +709,13 @@ struct BtorWorker
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Const initval;
|
Const::Builder initval_bits(GetSize(sig_q));
|
||||||
for (int i = 0; i < GetSize(sig_q); i++)
|
for (int i = 0; i < GetSize(sig_q); i++)
|
||||||
if (initbits.count(sig_q[i]))
|
if (initbits.count(sig_q[i]))
|
||||||
initval.bits().push_back(initbits.at(sig_q[i]) ? State::S1 : State::S0);
|
initval_bits.push_back(initbits.at(sig_q[i]) ? State::S1 : State::S0);
|
||||||
else
|
else
|
||||||
initval.bits().push_back(State::Sx);
|
initval_bits.push_back(State::Sx);
|
||||||
|
Const initval = initval_bits.build();
|
||||||
|
|
||||||
int nid_init_val = -1;
|
int nid_init_val = -1;
|
||||||
|
|
||||||
|
|
@ -1043,10 +1044,11 @@ struct BtorWorker
|
||||||
{
|
{
|
||||||
if (bit.wire == nullptr)
|
if (bit.wire == nullptr)
|
||||||
{
|
{
|
||||||
Const c(bit.data);
|
Const::Builder c_bits;
|
||||||
|
c_bits.push_back(bit.data);
|
||||||
while (i+GetSize(c) < GetSize(sig) && sig[i+GetSize(c)].wire == nullptr)
|
while (i + GetSize(c_bits) < GetSize(sig) && sig[i + GetSize(c_bits)].wire == nullptr)
|
||||||
c.bits().push_back(sig[i+GetSize(c)].data);
|
c_bits.push_back(sig[i + GetSize(c_bits)].data);
|
||||||
|
Const c = c_bits.build();
|
||||||
|
|
||||||
if (consts.count(c) == 0) {
|
if (consts.count(c) == 0) {
|
||||||
int sid = get_bv_sid(GetSize(c));
|
int sid = get_bv_sid(GetSize(c));
|
||||||
|
|
|
||||||
|
|
@ -1668,26 +1668,29 @@ struct CxxrtlWorker {
|
||||||
f << signal_temp << " == ";
|
f << signal_temp << " == ";
|
||||||
dump_sigspec(compare, /*is_lhs=*/false, for_debug);
|
dump_sigspec(compare, /*is_lhs=*/false, for_debug);
|
||||||
} else if (compare.is_fully_const()) {
|
} else if (compare.is_fully_const()) {
|
||||||
RTLIL::Const compare_mask, compare_value;
|
RTLIL::Const::Builder compare_mask_builder(compare.size());
|
||||||
|
RTLIL::Const::Builder compare_value_builder(compare.size());
|
||||||
for (auto bit : compare.as_const()) {
|
for (auto bit : compare.as_const()) {
|
||||||
switch (bit) {
|
switch (bit) {
|
||||||
case RTLIL::S0:
|
case RTLIL::S0:
|
||||||
case RTLIL::S1:
|
case RTLIL::S1:
|
||||||
compare_mask.bits().push_back(RTLIL::S1);
|
compare_mask_builder.push_back(RTLIL::S1);
|
||||||
compare_value.bits().push_back(bit);
|
compare_value_builder.push_back(bit);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RTLIL::Sx:
|
case RTLIL::Sx:
|
||||||
case RTLIL::Sz:
|
case RTLIL::Sz:
|
||||||
case RTLIL::Sa:
|
case RTLIL::Sa:
|
||||||
compare_mask.bits().push_back(RTLIL::S0);
|
compare_mask_builder.push_back(RTLIL::S0);
|
||||||
compare_value.bits().push_back(RTLIL::S0);
|
compare_value_builder.push_back(RTLIL::S0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
log_assert(false);
|
log_assert(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RTLIL::Const compare_mask = compare_mask_builder.build();
|
||||||
|
RTLIL::Const compare_value = compare_value_builder.build();
|
||||||
f << "and_uu<" << compare.size() << ">(" << signal_temp << ", ";
|
f << "and_uu<" << compare.size() << ">(" << signal_temp << ", ";
|
||||||
dump_const(compare_mask);
|
dump_const(compare_mask);
|
||||||
f << ") == ";
|
f << ") == ";
|
||||||
|
|
@ -3042,7 +3045,7 @@ struct CxxrtlWorker {
|
||||||
if (init == RTLIL::Const()) {
|
if (init == RTLIL::Const()) {
|
||||||
init = RTLIL::Const(State::Sx, GetSize(bit.wire));
|
init = RTLIL::Const(State::Sx, GetSize(bit.wire));
|
||||||
}
|
}
|
||||||
init.bits()[bit.offset] = port.init_value[i];
|
init.set(bit.offset, port.init_value[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ struct MemContentsTest {
|
||||||
RTLIL::Const values;
|
RTLIL::Const values;
|
||||||
for(addr_t addr = low; addr <= high; addr++) {
|
for(addr_t addr = low; addr <= high; addr++) {
|
||||||
RTLIL::Const word(data_dist(rnd), data_width);
|
RTLIL::Const word(data_dist(rnd), data_width);
|
||||||
values.bits().insert(values.bits().end(), word.begin(), word.end());
|
values.append(word);
|
||||||
}
|
}
|
||||||
insert_concatenated(low, values);
|
insert_concatenated(low, values);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -657,7 +657,7 @@ struct SimplecWorker
|
||||||
{
|
{
|
||||||
SigSpec sig = sigmaps.at(module)(w);
|
SigSpec sig = sigmaps.at(module)(w);
|
||||||
Const val = w->attributes.at(ID::init);
|
Const val = w->attributes.at(ID::init);
|
||||||
val.bits().resize(GetSize(sig), State::Sx);
|
val.resize(GetSize(sig), State::Sx);
|
||||||
|
|
||||||
for (int i = 0; i < GetSize(sig); i++)
|
for (int i = 0; i < GetSize(sig); i++)
|
||||||
if (val[i] == State::S0 || val[i] == State::S1) {
|
if (val[i] == State::S0 || val[i] == State::S1) {
|
||||||
|
|
|
||||||
|
|
@ -1079,14 +1079,14 @@ struct Smt2Worker
|
||||||
|
|
||||||
RTLIL::SigSpec sig = sigmap(wire);
|
RTLIL::SigSpec sig = sigmap(wire);
|
||||||
Const val = wire->attributes.at(ID::init);
|
Const val = wire->attributes.at(ID::init);
|
||||||
val.bits().resize(GetSize(sig), State::Sx);
|
val.resize(GetSize(sig), State::Sx);
|
||||||
if (bvmode && GetSize(sig) > 1) {
|
if (bvmode && GetSize(sig) > 1) {
|
||||||
Const mask(State::S1, GetSize(sig));
|
Const mask(State::S1, GetSize(sig));
|
||||||
bool use_mask = false;
|
bool use_mask = false;
|
||||||
for (int i = 0; i < GetSize(sig); i++)
|
for (int i = 0; i < GetSize(sig); i++)
|
||||||
if (val[i] != State::S0 && val[i] != State::S1) {
|
if (val[i] != State::S0 && val[i] != State::S1) {
|
||||||
val.bits()[i] = State::S0;
|
val.set(i, State::S0);
|
||||||
mask.bits()[i] = State::S0;
|
mask.set(i, State::S0);
|
||||||
use_mask = true;
|
use_mask = true;
|
||||||
}
|
}
|
||||||
if (use_mask)
|
if (use_mask)
|
||||||
|
|
@ -1361,10 +1361,10 @@ struct Smt2Worker
|
||||||
for (int k = 0; k < GetSize(initword); k++) {
|
for (int k = 0; k < GetSize(initword); k++) {
|
||||||
if (initword[k] == State::S0 || initword[k] == State::S1) {
|
if (initword[k] == State::S0 || initword[k] == State::S1) {
|
||||||
gen_init_constr = true;
|
gen_init_constr = true;
|
||||||
initmask.bits()[k] = State::S1;
|
initmask.set(k, State::S1);
|
||||||
} else {
|
} else {
|
||||||
initmask.bits()[k] = State::S0;
|
initmask.set(k, State::S0);
|
||||||
initword.bits()[k] = State::S0;
|
initword.set(k, State::S0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -327,19 +327,20 @@ void dump_const(std::ostream &f, const RTLIL::Const &data, int width = -1, int o
|
||||||
|
|
||||||
void dump_reg_init(std::ostream &f, SigSpec sig)
|
void dump_reg_init(std::ostream &f, SigSpec sig)
|
||||||
{
|
{
|
||||||
Const initval;
|
|
||||||
bool gotinit = false;
|
bool gotinit = false;
|
||||||
|
|
||||||
|
Const::Builder initval_bits(sig.size());
|
||||||
for (auto bit : active_sigmap(sig)) {
|
for (auto bit : active_sigmap(sig)) {
|
||||||
if (active_initdata.count(bit)) {
|
if (active_initdata.count(bit)) {
|
||||||
initval.bits().push_back(active_initdata.at(bit));
|
initval_bits.push_back(active_initdata.at(bit));
|
||||||
gotinit = true;
|
gotinit = true;
|
||||||
} else {
|
} else {
|
||||||
initval.bits().push_back(State::Sx);
|
initval_bits.push_back(State::Sx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gotinit) {
|
if (gotinit) {
|
||||||
|
Const initval = initval_bits.build();
|
||||||
f << " = ";
|
f << " = ";
|
||||||
dump_const(f, initval);
|
dump_const(f, initval);
|
||||||
}
|
}
|
||||||
|
|
@ -767,9 +768,10 @@ void dump_memory(std::ostream &f, std::string indent, Mem &mem)
|
||||||
dump_sigspec(os, port.data.extract(sub * mem.width, mem.width));
|
dump_sigspec(os, port.data.extract(sub * mem.width, mem.width));
|
||||||
os << stringf(" = %s[", mem_id.c_str());;
|
os << stringf(" = %s[", mem_id.c_str());;
|
||||||
if (port.wide_log2) {
|
if (port.wide_log2) {
|
||||||
Const addr_lo;
|
Const::Builder addr_lo_builder(port.wide_log2);
|
||||||
for (int i = 0; i < port.wide_log2; i++)
|
for (int i = 0; i < port.wide_log2; i++)
|
||||||
addr_lo.bits().push_back(State(sub >> i & 1));
|
addr_lo_builder.push_back(State(sub >> i & 1));
|
||||||
|
Const addr_lo = addr_lo_builder.build();
|
||||||
os << "{";
|
os << "{";
|
||||||
os << temp_id;
|
os << temp_id;
|
||||||
os << ", ";
|
os << ", ";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue