Fix padding, remove CIs from undriven_bits before erasing undriven POs

This commit is contained in:
Eddie Hung 2019-05-26 11:26:38 -07:00
parent 086b6560b4
commit 67f7c64a77
1 changed files with 8 additions and 14 deletions

View File

@ -302,16 +302,13 @@ struct XAigerWriter
continue;
// Fully pad all unused input connections of this box cell with S0
// Fully pad all undriven output connections of thix box cell with anonymous wires
// Fully pad all undriven output connections of this box cell with anonymous wires
for (const auto w : box_module->wires()) {
if (w->port_input) {
auto it = cell->connections_.find(w->name);
if (it != cell->connections_.end()) {
if (GetSize(it->second) < GetSize(w)) {
RTLIL::SigSpec padded_connection(RTLIL::S0, GetSize(w)-GetSize(it->second));
padded_connection.append(it->second);
it->second = std::move(padded_connection);
}
if (GetSize(it->second) < GetSize(w))
it->second.append(RTLIL::SigSpec(RTLIL::S0, GetSize(w)-GetSize(it->second)));
}
else
cell->connections_[w->name] = RTLIL::SigSpec(RTLIL::S0, GetSize(w));
@ -319,11 +316,8 @@ struct XAigerWriter
if (w->port_output) {
auto it = cell->connections_.find(w->name);
if (it != cell->connections_.end()) {
if (GetSize(it->second) < GetSize(w)) {
RTLIL::SigSpec padded_connection = module->addWire(NEW_ID, GetSize(w)-GetSize(it->second));
padded_connection.append(it->second);
it->second = std::move(padded_connection);
}
if (GetSize(it->second) < GetSize(w))
it->second.append(module->addWire(NEW_ID, GetSize(w)-GetSize(it->second)));
}
else
cell->connections_[w->name] = module->addWire(NEW_ID, GetSize(w));
@ -384,13 +378,13 @@ struct XAigerWriter
}
// Do some CI/CO post-processing:
// CIs cannot be undriven
for (const auto &c : ci_bits)
undriven_bits.erase(c.first);
// Erase all POs that are undriven
if (!holes_mode)
for (auto bit : undriven_bits)
output_bits.erase(bit);
// CIs cannot be undriven
for (const auto &c : ci_bits)
undriven_bits.erase(c.first);
for (auto bit : unused_bits)
undriven_bits.erase(bit);