Partitioning can be viewed as, utilizing the “Divide and Conquer” concept to reduce complex designs into simpler and manageable blocks. Promoting design reuse is one of the most significant advantages to partitioning the design.
Apart from the ease in meeting timing constraints for a properly partitioned design, it is also convenient to distribute and manage different blocks of the design between team members.
The following recommendations achieve best synthesis results and reduction in compile time.
a) Keep related combinational logic in the same module.
b) Partition for design reuse.
c) Separate modules according to their functionality.
d) Separate structural logic from random logic.
e) Limit a reasonable block size (depends on the memory capacity of the machine)
f) Partition the top level (separate I/O Pads, Boundary Scan and core logic).
g) Do not add glue-logic at the top level.
h) Isolate state-machine from other logic.
i) Avoid multiple clocks within a block.
j) Isolate the block that is used for synchronizing multiple clocks.
k) WHILE PARTITIONING, THINK OF YOUR LAYOUT STYLE.