Following are the different types of DSP primitives for Versal adaptive SoC.
| Primitive | Description | Usage |
|---|---|---|
| DSP58 | Standard integer/Fixed point mode | Inference or instantiation |
| DSPFP32 | Floating point mode | Instantiation only |
| DSPCPLX | Complex multiplier | Inference or instantiation |
DSP58
For Versal adaptive SoCs, the DSP58 primitive includes the same features as in UltraScale devices. These features include a multiplier, adder, pre-adder, and registers to fully pipeline the primitive. However, sizing differs and the primitives include additional features.
Sizing
For signed logic, you can configure DSP58 as follows:
- Multiplier: 27x24
- Adder: 58-bit
- Pre-adder: 27-bit
For unsigned logic, you can configure DSP58 as follows:
- Multiplier: 26x23
- Adder: 57-bit
- Pre-adder: 26-bit
The following figures show examples for signed logic.
Dot Product
The DSP58 implements a dot product and represents the multiplier as three smaller multipliers added together. Filters in image processing often use dot product. For more information, refer to the Versal Adaptive SoC DSP Engine Architecture Manual (AM004). The following figure shows an example of a dot product with an extra adder.
The following figures show the RTL for a dot product.
DSPFP32
DSPFP32 performs floating point calculations. Vivado synthesis does not handle these calculations. You can use provided IPs or instantiate the DSPFP32 primitive.
DSPCPLX
DSPCPLX synthesizes logic needed to solve for the real and imaginary portions of the following equation:
(a+bi)(c+di)
Each DSPCPLX occupies two DSP58 sites. The DSPCPLX can either be instantiated in the RTL or inferred. The following figures show the RTL for the DSPCPLX.