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:
parent
1a7a597e07
commit
eb76d35e80
2 changed files with 32 additions and 0 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue