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

Add muxcover changes

This commit is contained in:
Akash Levy 2025-03-09 22:08:19 -07:00
parent 706872237f
commit 73417368b4
2 changed files with 32 additions and 50 deletions

View file

@ -729,6 +729,7 @@ OBJS += passes/techmap/alumacc.o
OBJS += passes/techmap/pmuxtree.o
OBJS += passes/techmap/bmuxmap.o
OBJS += passes/techmap/demuxmap.o
OBJS += passes/techmap/muxcover.o
OBJS += passes/techmap/aigmap.o
include $(YOSYS_SRC)/passes/hierarchy/Makefile.inc

View file

@ -505,77 +505,58 @@ struct MuxcoverWorker
for (auto inbit : mux.inputs)
implement_best_cover(tree, inbit, count_muxes_by_type);
for (auto selbit : mux.selects)
implement_decode_mux(selbit);
// for (auto selbit : mux.selects)
// implement_decode_mux(selbit);
if (GetSize(mux.inputs) == 0)
return;
// SILIMATE: For cell naming
Cell *cell = tree.muxes[tree.root];
Module *module = cell->module;
if (GetSize(mux.inputs) == 2) {
count_muxes_by_type[0]++;
Cell *cell = module->addCell(NEW_ID, ID($_MUX_));
cell->setPort(ID::A, mux.inputs[0]);
cell->setPort(ID::B, mux.inputs[1]);
cell->setPort(ID::S, mux.selects[0]);
cell->setPort(ID::Y, bit);
Cell *new_cell = module->addCell(NEW_ID2_SUFFIX("muxcover"), ID($mux));
new_cell->setPort(ID::A, mux.inputs[0]);
new_cell->setPort(ID::B, mux.inputs[1]);
new_cell->setPort(ID::S, mux.selects[0]);
new_cell->setPort(ID::Y, bit);
new_cell->fixup_parameters();
new_cell->set_src_attribute(new_cell->get_src_attribute());
return;
}
if (GetSize(mux.inputs) == 4) {
count_muxes_by_type[1]++;
Cell *cell = module->addCell(NEW_ID, ID($_MUX4_));
cell->setPort(ID::A, mux.inputs[0]);
cell->setPort(ID::B, mux.inputs[1]);
cell->setPort(ID::C, mux.inputs[2]);
cell->setPort(ID::D, mux.inputs[3]);
cell->setPort(ID::S, mux.selects[0]);
cell->setPort(ID::T, mux.selects[1]);
cell->setPort(ID::Y, bit);
Cell *new_cell = module->addCell(NEW_ID2_SUFFIX("muxcover"), ID($bmux));
new_cell->setPort(ID::A, mux.inputs);
new_cell->setPort(ID::S, mux.selects);
new_cell->setPort(ID::Y, bit);
new_cell->fixup_parameters();
new_cell->set_src_attribute(new_cell->get_src_attribute());
return;
}
if (GetSize(mux.inputs) == 8) {
count_muxes_by_type[2]++;
Cell *cell = module->addCell(NEW_ID, ID($_MUX8_));
cell->setPort(ID::A, mux.inputs[0]);
cell->setPort(ID::B, mux.inputs[1]);
cell->setPort(ID::C, mux.inputs[2]);
cell->setPort(ID::D, mux.inputs[3]);
cell->setPort(ID::E, mux.inputs[4]);
cell->setPort(ID::F, mux.inputs[5]);
cell->setPort(ID::G, mux.inputs[6]);
cell->setPort(ID::H, mux.inputs[7]);
cell->setPort(ID::S, mux.selects[0]);
cell->setPort(ID::T, mux.selects[1]);
cell->setPort(ID::U, mux.selects[2]);
cell->setPort(ID::Y, bit);
Cell *new_cell = module->addCell(NEW_ID2_SUFFIX("muxcover"), ID($bmux));
new_cell->setPort(ID::A, mux.inputs);
new_cell->setPort(ID::S, mux.selects);
new_cell->setPort(ID::Y, bit);
new_cell->fixup_parameters();
new_cell->set_src_attribute(new_cell->get_src_attribute());
return;
}
if (GetSize(mux.inputs) == 16) {
count_muxes_by_type[3]++;
Cell *cell = module->addCell(NEW_ID, ID($_MUX16_));
cell->setPort(ID::A, mux.inputs[0]);
cell->setPort(ID::B, mux.inputs[1]);
cell->setPort(ID::C, mux.inputs[2]);
cell->setPort(ID::D, mux.inputs[3]);
cell->setPort(ID::E, mux.inputs[4]);
cell->setPort(ID::F, mux.inputs[5]);
cell->setPort(ID::G, mux.inputs[6]);
cell->setPort(ID::H, mux.inputs[7]);
cell->setPort(ID::I, mux.inputs[8]);
cell->setPort(ID::J, mux.inputs[9]);
cell->setPort(ID::K, mux.inputs[10]);
cell->setPort(ID::L, mux.inputs[11]);
cell->setPort(ID::M, mux.inputs[12]);
cell->setPort(ID::N, mux.inputs[13]);
cell->setPort(ID::O, mux.inputs[14]);
cell->setPort(ID::P, mux.inputs[15]);
cell->setPort(ID::S, mux.selects[0]);
cell->setPort(ID::T, mux.selects[1]);
cell->setPort(ID::U, mux.selects[2]);
cell->setPort(ID::V, mux.selects[3]);
cell->setPort(ID::Y, bit);
Cell *new_cell = module->addCell(NEW_ID2_SUFFIX("muxcover"), ID($bmux));
new_cell->setPort(ID::A, mux.inputs);
new_cell->setPort(ID::S, mux.selects);
new_cell->setPort(ID::Y, bit);
new_cell->fixup_parameters();
new_cell->set_src_attribute(new_cell->get_src_attribute());
return;
}