aboutsummaryrefslogtreecommitdiffstats
path: root/passes/memory/memory_dff.cc
diff options
context:
space:
mode:
authorMarcelina Koƛcielnicka <mwk@0x04.net>2020-07-19 02:28:55 +0200
committerMarcelina Koƛcielnicka <mwk@0x04.net>2020-07-24 11:22:31 +0200
commitc9251eb26b131c0d6d21d152a9a40fc162703b64 (patch)
tree881a9c9ac23cd6da749d836fa1116cfb5ac67f73 /passes/memory/memory_dff.cc
parent557f81cb49db6efb832c06d9e77bcdb68853af33 (diff)
downloadyosys-c9251eb26b131c0d6d21d152a9a40fc162703b64.tar.gz
yosys-c9251eb26b131c0d6d21d152a9a40fc162703b64.tar.bz2
yosys-c9251eb26b131c0d6d21d152a9a40fc162703b64.zip
memory_dff: Refactor to use FfInitVals.
Diffstat (limited to 'passes/memory/memory_dff.cc')
-rw-r--r--passes/memory/memory_dff.cc17
1 files changed, 5 insertions, 12 deletions
diff --git a/passes/memory/memory_dff.cc b/passes/memory/memory_dff.cc
index e10acce8c..68023fd11 100644
--- a/passes/memory/memory_dff.cc
+++ b/passes/memory/memory_dff.cc
@@ -20,6 +20,7 @@
#include <algorithm>
#include "kernel/yosys.h"
#include "kernel/sigtools.h"
+#include "kernel/ffinit.h"
USING_YOSYS_NAMESPACE
PRIVATE_NAMESPACE_BEGIN
@@ -34,19 +35,11 @@ struct MemoryDffWorker
dict<SigBit, int> sigbit_users_count;
dict<SigSpec, Cell*> mux_cells_a, mux_cells_b;
pool<Cell*> forward_merged_dffs, candidate_dffs;
- pool<SigBit> init_bits;
+ FfInitVals initvals;
MemoryDffWorker(Module *module) : module(module), sigmap(module)
{
- for (auto wire : module->wires()) {
- if (wire->attributes.count(ID::init) == 0)
- continue;
- SigSpec sig = sigmap(wire);
- Const initval = wire->attributes.at(ID::init);
- for (int i = 0; i < GetSize(sig) && i < GetSize(initval); i++)
- if (initval[i] == State::S0 || initval[i] == State::S1)
- init_bits.insert(sig[i]);
- }
+ initvals.set(&sigmap, module);
}
bool find_sig_before_dff(RTLIL::SigSpec &sig, RTLIL::SigSpec &clk, bool &clk_polarity)
@@ -58,7 +51,7 @@ struct MemoryDffWorker
if (bit.wire == NULL)
continue;
- if (init_bits.count(sigmap(bit)))
+ if (initvals(bit) != State::Sx)
return false;
for (auto cell : dff_cells)
@@ -178,7 +171,7 @@ struct MemoryDffWorker
if (d.size() != 1)
continue;
- if (init_bits.count(d))
+ if (initvals(d) != State::Sx)
return false;
bit = d;