In this example, the pipeline registers use a mix of synchronous and asynchronous resets in the logic that targets the dedicated DSP resources, which cause suboptimal mapping of the multiplier-accumulator to the DSP primitives. The following figure shows a 16x16-bit DSP58-based multiplier using input pipeline registers with asynchronous reset and multiplier output registers with synchronous reset. Synthesis must use regular fabric registers for the input stages. The multiplier register with synchronous reset is packed into the DSP output (DSP58 M and P registers). This adds up to 32 extra fabric registers, and the DSP58 results in the configuration: AREG/BREG=0, MREG=1, PREG=1.
To take advantage of the existing DSP primitive features, you can rewrite the preceding example to change the mix of asynchronous reset and synchronous reset on pipeline registers into a single type of reset for all pipeline registers. The following figure shows how to change the reset definition in the RTL so that all of the pipeline registers around the multiplier logic use a single type of reset (synchronous/asynchronous reset). By making this change, synthesis can take advantage of the DSP58 internal registers (AREG/BREG=1, MREG=1, PREG=1).