summaryrefslogtreecommitdiff
path: root/passes/abc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-12-21 11:13:25 +0100
committerClifford Wolf <clifford@clifford.at>2014-12-21 11:13:25 +0100
commit25844b5683ab0d9a8ba5f4ee01bb5a601a1c8d24 (patch)
treebcf74632976a66afb3a0c43a291d63e89726b9e7 /passes/abc
parentf7b323196fbd1c2f35ab034b33f9617f7428cf31 (diff)
Fixed "abc" pass for clk and enable signals driven by logic
Diffstat (limited to 'passes/abc')
-rw-r--r--passes/abc/abc.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/passes/abc/abc.cc b/passes/abc/abc.cc
index b1a96dda..d38e538e 100644
--- a/passes/abc/abc.cc
+++ b/passes/abc/abc.cc
@@ -147,6 +147,8 @@ void extract_cell(RTLIL::Cell *cell, bool keepff)
return;
if (clk_sig != assign_map(cell->getPort("\\C")))
return;
+ if (GetSize(en_sig) != 0)
+ return;
goto matching_dff;
}
@@ -692,12 +694,6 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin
}
}
- if (clk_sig.size() != 0)
- mark_port(clk_sig);
-
- if (en_sig.size() != 0)
- mark_port(en_sig);
-
std::vector<RTLIL::Cell*> cells;
cells.reserve(module->cells_.size());
for (auto &it : module->cells_)
@@ -714,6 +710,12 @@ void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::strin
for (auto &cell_it : module->cells_)
for (auto &port_it : cell_it.second->connections())
mark_port(port_it.second);
+
+ if (clk_sig.size() != 0)
+ mark_port(clk_sig);
+
+ if (en_sig.size() != 0)
+ mark_port(en_sig);
handle_loops();