When implementing a Multiplier in a single DSP block, Vivado synthesis tries to take advantage of the pipelining capabilities of DSP blocks. Vivado synthesis pulls up to two levels of registers present: On the multiplication operands, and after the multiplication.
When a Multiplier does not fit on a single DSP block, Vivado synthesis decomposes the macro to implement it. In that case, Vivado synthesis uses either of the following:
- Several DSP blocks
- A hybrid solution involving both DSP blocks and slice logic
Use the KEEP
attribute to restrict absorption of Registers into DSP
blocks. For example, if a Register is present on an operand of the multiplier, place
KEEP
on the output of the Register to prevent the Register from
being absorbed into the DSP block.