Reset Coding Example: Multiplier Pipeline Registers with Synchronous and Asynchronous Reset - Reset Coding Example: Multiplier Pipeline Registers with Synchronous and Asynchronous Reset - 2026.1 English - UG1387

Versal Adaptive SoC Hardware, IP, and Platform Development Methodology Guide (UG1387)

Document ID
UG1387
Release Date
2026-07-22
Version
2026.1 English

In this example, the pipeline registers use a mix of synchronous and asynchronous resets. This mix is present in the logic that targets the dedicated DSP resources. This mix causes 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 DSP output (DSP58 M and P registers) packs the multiplier register with synchronous reset. This adds up to 32 extra fabric registers, and the DSP58 results in the configuration: AREG/BREG=0, MREG=1, PREG=1.

Figure 1. Multiplier with Pipeline Registers (Synchronous and Asynchronous Reset)

You can rewrite the preceding example to use a single type of reset for all pipeline registers. This change takes advantage of existing DSP primitive features. It involves changing the mix of asynchronous reset and synchronous reset on pipeline registers.

The following figure shows how to change the reset definition in the RTL. This change ensures all pipeline registers around the multiplier logic use a single reset type. The reset type can be either synchronous or asynchronous. By making this change, synthesis can take advantage of the DSP58 internal registers (AREG/BREG=1, MREG=1, PREG=1).

Figure 2. Changing Synchronous and Asynchronous Reset into a Single Type of Reset for All Pipeline Stages Around Multiplier Logic