aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/celltypes.h9
-rw-r--r--kernel/sigtools.h24
2 files changed, 33 insertions, 0 deletions
diff --git a/kernel/celltypes.h b/kernel/celltypes.h
index 6273e926a..bf5ef4b38 100644
--- a/kernel/celltypes.h
+++ b/kernel/celltypes.h
@@ -29,6 +29,15 @@ struct CellTypes
std::set<std::string> cell_types;
std::vector<const RTLIL::Design*> designs;
+ CellTypes()
+ {
+ }
+
+ CellTypes(const RTLIL::Design *design)
+ {
+ setup(design);
+ }
+
void setup(const RTLIL::Design *design = NULL)
{
if (design)
diff --git a/kernel/sigtools.h b/kernel/sigtools.h
index e6c09331d..f081957c7 100644
--- a/kernel/sigtools.h
+++ b/kernel/sigtools.h
@@ -164,6 +164,18 @@ struct SigSet
}
}
+ void insert(RTLIL::SigSpec sig, const std::set<T> &data)
+ {
+ sig.expand();
+ for (auto &c : sig.chunks) {
+ if (c.wire == NULL)
+ continue;
+ assert(c.width == 1);
+ bitDef_t bit(c.wire, c.offset);
+ bits[bit].insert(data.begin(), data.end());
+ }
+ }
+
void erase(RTLIL::SigSpec sig)
{
sig.expand();
@@ -188,6 +200,18 @@ struct SigSet
}
}
+ void erase(RTLIL::SigSpec sig, const std::set<T> &data)
+ {
+ sig.expand();
+ for (auto &c : sig.chunks) {
+ if (c.wire == NULL)
+ continue;
+ assert(c.width == 1);
+ bitDef_t bit(c.wire, c.offset);
+ bits[bit].erase(data.begin(), data.end());
+ }
+ }
+
void find(RTLIL::SigSpec sig, std::set<T> &result)
{
sig.expand();