Hi,

I am studying about how we can reduce the extra/redundant FFs from our logic using DC compiler. To understand the same, I instantiated the same design block 2 times in my top, giving it exactly same set of inputs. Output of one of the design was selected based on the select signal. I expected that DC compiler would optimize the design and it would be close to single instance area. The observation were-

1. When design had only combinational logic, It was optimized

2. When design contained sequential elements too, it was never optimized

I checked and verified that compile_enable_register_merging is "True" and so the design should have been optimized even if it had FFs.

I also tested the same with a very simple design. Now the 1-bit input of design was connected to a Flip-Flop (FF1). Output of FF1 goes to two FFs (FF2 and FF3). FF2 and FF3 both are connected to separate output port of the design.

Now, since FF2 and FF3 are exactly the same, I expected the design to eliminate one of these FFs, and the output of this one FF should go to both the output port, but the design was not optimized.

As per the DC user guide, I checked compile_enable_register_merging variable and it was set to True, so the equal or opposite registers (used in the Synopsys document) should have been removed. So, is it beyond the capabilities of compiler, or am I missing to set any setting variable for the compiler.

Please let me know if someone has any inputs on this.

More Chirag Maheshwari's questions See All
Similar questions and discussions