3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-06-17 03:16:18 +00:00

Cleanup and sigmap fix

This commit is contained in:
Alain Dargelas 2025-02-20 16:49:02 -08:00
parent adcbc7f8a6
commit 04edcc0baf

View file

@ -39,40 +39,27 @@ void lhs2rhs_rhs2lhs(RTLIL::Module *module, SigMap &sigmap, dict<RTLIL::SigSpec,
for (auto it = module->connections().begin(); it != module->connections().end(); ++it) { for (auto it = module->connections().begin(); it != module->connections().end(); ++it) {
RTLIL::SigSpec lhs = it->first; RTLIL::SigSpec lhs = it->first;
RTLIL::SigSpec rhs = it->second; RTLIL::SigSpec rhs = it->second;
if (lhs.is_chunk()) {
std::cout << "lhs ischunck: " << lhs.size() << std::endl;
} else {
std::cout << "lhs isnotchunck: " << lhs.size() << std::endl;
}
if (rhs.is_chunk()) {
std::cout << "rhs ischunck: " << rhs.size() << std::endl;
} else {
std::cout << "rhs isnotchunck" << std::endl;
}
if (!lhs.is_chunk()) { if (!lhs.is_chunk()) {
std::vector<SigSpec> lhsBits; std::vector<SigSpec> lhsBits;
for (int i = 0; i < lhs.size(); i++) { for (int i = 0; i < lhs.size(); i++) {
SigSpec bit_sig = lhs.extract(i, 1); SigSpec bit_sig = lhs.extract(i, 1);
lhsBits.push_back(bit_sig); lhsBits.push_back(bit_sig);
std::cout << "li:" << i << std::endl;
} }
std::vector<SigSpec> rhsBits; std::vector<SigSpec> rhsBits;
for (int i = 0; i < rhs.size(); i++) { for (int i = 0; i < rhs.size(); i++) {
SigSpec bit_sig = rhs.extract(i, 1); SigSpec bit_sig = rhs.extract(i, 1);
rhsBits.push_back(bit_sig); rhsBits.push_back(bit_sig);
std::cout << "ri:" << i << std::endl;
} }
for (uint32_t i = 0; i < lhsBits.size(); i++) { for (uint32_t i = 0; i < lhsBits.size(); i++) {
if (i < rhsBits.size()) { if (i < rhsBits.size()) {
std::cout << "lri:" << i << std::endl;
rhsSig2LhsSig[sigmap(rhsBits[i])].insert(sigmap(lhsBits[i])); rhsSig2LhsSig[sigmap(rhsBits[i])].insert(sigmap(lhsBits[i]));
lhsSig2rhsSig[sigmap(lhsBits[i])] = sigmap(rhsBits[i]); lhsSig2rhsSig[lhsBits[i]] = sigmap(rhsBits[i]);
} }
} }
} else { } else {
rhsSig2LhsSig[sigmap(rhs)].insert(sigmap(lhs)); rhsSig2LhsSig[sigmap(rhs)].insert(sigmap(lhs));
lhsSig2rhsSig[sigmap(lhs)] = sigmap(rhs); lhsSig2rhsSig[lhs] = sigmap(rhs);
} }
} }
} }
@ -100,19 +87,17 @@ void collectTransitiveFanin(RTLIL::SigSpec &sig, SigMap& sigmap, dict<RTLIL::Sig
collectTransitiveFanin(actual, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec); collectTransitiveFanin(actual, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec);
for (int i = 0; i < actual.size(); i++) { for (int i = 0; i < actual.size(); i++) {
SigSpec bit_sig = actual.extract(i, 1); SigSpec bit_sig = actual.extract(i, 1);
collectTransitiveFanin(bit_sig, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec); collectTransitiveFanin(bit_sig, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells,
visitedSigSpec);
} }
} }
} }
} }
} }
std::cout << "HERE\n";
if (lhsSig2RhsSig.count(sigmap(sig))) { if (lhsSig2RhsSig.count(sigmap(sig))) {
std::cout << "THERE\n";
RTLIL::SigSpec rhs = lhsSig2RhsSig[sigmap(sig)]; RTLIL::SigSpec rhs = lhsSig2RhsSig[sigmap(sig)];
collectTransitiveFanin(rhs, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec); collectTransitiveFanin(rhs, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec);
for (int i = 0; i < rhs.size(); i++) { for (int i = 0; i < rhs.size(); i++) {
std::cout << "THERE: " << i << "\n";
SigSpec bit_sig = rhs.extract(i, 1); SigSpec bit_sig = rhs.extract(i, 1);
collectTransitiveFanin(bit_sig, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec); collectTransitiveFanin(bit_sig, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec);
} }
@ -147,16 +132,6 @@ void observabilityClean(RTLIL::Module *module, SigMap& sigmap, dict<RTLIL::SigSp
if (w && (!w->port_output) && (!w->get_bool_attribute(ID::keep))) { if (w && (!w->port_output) && (!w->get_bool_attribute(ID::keep))) {
continue; continue;
} }
if (po.is_chunk()) {
std::cout << "po ischunck" << std::endl;
} else {
std::cout << "po isnotchunck" << std::endl;
}
if (w)
std::cout << "Name: " << w->name.c_str() << std::endl;
else
std::cout << "No Name: " << std::endl;
std::cout << "PO size: " << po.size() << std::endl;
collectTransitiveFanin(po, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec); collectTransitiveFanin(po, sigmap, sig2CellsInFanin, lhsSig2RhsSig, visitedCells, visitedSigSpec);
for (int i = 0; i < po.size(); i++) { for (int i = 0; i < po.size(); i++) {
SigSpec bit_sig = po.extract(i, 1); SigSpec bit_sig = po.extract(i, 1);
@ -164,7 +139,7 @@ void observabilityClean(RTLIL::Module *module, SigMap& sigmap, dict<RTLIL::SigSp
} }
} }
pool<RTLIL::SigSig> newConnections; std::vector<RTLIL::SigSig> newConnections;
for (auto it = module->connections().begin(); it != module->connections().end(); ++it) { for (auto it = module->connections().begin(); it != module->connections().end(); ++it) {
RTLIL::SigSpec lhs = it->first; RTLIL::SigSpec lhs = it->first;
RTLIL::SigSpec sigmaplhs = sigmap(lhs); RTLIL::SigSpec sigmaplhs = sigmap(lhs);
@ -172,8 +147,7 @@ void observabilityClean(RTLIL::Module *module, SigMap& sigmap, dict<RTLIL::SigSp
lhs = sigmaplhs; lhs = sigmaplhs;
} }
if (visitedSigSpec.count(lhs)) { if (visitedSigSpec.count(lhs)) {
newConnections.insert(*it); newConnections.push_back(*it);
std::cout << "New connection\n";
} else { } else {
for (int i = 0; i < lhs.size(); i++) { for (int i = 0; i < lhs.size(); i++) {
SigSpec bit_sig = lhs.extract(i, 1); SigSpec bit_sig = lhs.extract(i, 1);
@ -182,8 +156,7 @@ void observabilityClean(RTLIL::Module *module, SigMap& sigmap, dict<RTLIL::SigSp
bit_sig = sigmapbit_sig; bit_sig = sigmapbit_sig;
//} //}
if (visitedSigSpec.count(bit_sig)) { if (visitedSigSpec.count(bit_sig)) {
newConnections.insert(*it); newConnections.push_back(*it);
std::cout << "New connection\n";
break; break;
} }
} }