3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-23 09:05:32 +00:00

memory_dff: Fix needlessly duplicating enable bits.

When the register being merged into the EN signal happens to be a $sdff,
the current code creates a new $mux for every bit, even if they happen
to be identical (as is usually the case), preventing proper grouping
further down the flow.  Fix this by adding a simple cache.

Fixes #2409.
This commit is contained in:
Marcelina Kościelnicka 2020-10-22 10:37:44 +02:00
parent 1a7a597e07
commit eb76d35e80
2 changed files with 32 additions and 0 deletions

View file

@ -46,8 +46,15 @@ struct MemoryDffWorker
{
sigmap.apply(sig);
dict<SigBit, SigBit> cache;
for (auto &bit : sig)
{
if (cache.count(bit)) {
bit = cache[bit];
continue;
}
if (bit.wire == NULL)
continue;
@ -103,6 +110,7 @@ struct MemoryDffWorker
d = module->Mux(NEW_ID, rbit, d, cell->getPort(ID::SRST));
}
cache[bit] = d;
bit = d;
clk = this_clk;
clk_polarity = this_clk_polarity;