mirror of https://github.com/YosysHQ/yosys.git
Fixed bug in freduce command
This commit is contained in:
parent
6f8865d81a
commit
e3b11ea2d6
|
@ -560,6 +560,31 @@ struct FreduceWorker
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool find_bit_in_cone(std::set<RTLIL::Cell*> &celldone, RTLIL::SigBit needle, RTLIL::SigBit haystack)
|
||||||
|
{
|
||||||
|
if (needle == haystack)
|
||||||
|
return true;
|
||||||
|
if (haystack.wire == NULL || needle.wire == NULL || drivers.count(haystack) == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
std::pair<RTLIL::Cell*, std::set<RTLIL::SigBit>> &drv = drivers.at(haystack);
|
||||||
|
|
||||||
|
if (celldone.count(drv.first))
|
||||||
|
return false;
|
||||||
|
celldone.insert(drv.first);
|
||||||
|
|
||||||
|
for (auto &bit : drv.second)
|
||||||
|
if (find_bit_in_cone(celldone, needle, bit))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool find_bit_in_cone(RTLIL::SigBit needle, RTLIL::SigBit haystack)
|
||||||
|
{
|
||||||
|
std::set<RTLIL::Cell*> celldone;
|
||||||
|
return find_bit_in_cone(celldone, needle, haystack);
|
||||||
|
}
|
||||||
|
|
||||||
void dump()
|
void dump()
|
||||||
{
|
{
|
||||||
std::string filename = stringf("%s_%s_%05d.il", dump_prefix.c_str(), RTLIL::id2cstr(module->name), reduce_counter);
|
std::string filename = stringf("%s_%s_%05d.il", dump_prefix.c_str(), RTLIL::id2cstr(module->name), reduce_counter);
|
||||||
|
@ -674,6 +699,11 @@ struct FreduceWorker
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (find_bit_in_cone(grp[i].bit, grp.front().bit)) {
|
||||||
|
log(" Skipping dependency of master: %s\n", log_signal(grp[i].bit));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
log(" Connect slave%s: %s\n", grp[i].inverted ? " using inverter" : "", log_signal(grp[i].bit));
|
log(" Connect slave%s: %s\n", grp[i].inverted ? " using inverter" : "", log_signal(grp[i].bit));
|
||||||
|
|
||||||
RTLIL::Cell *drv = drivers.at(grp[i].bit).first;
|
RTLIL::Cell *drv = drivers.at(grp[i].bit).first;
|
||||||
|
|
Loading…
Reference in New Issue