The DSP sheet covers estimation of DSP58 block resources. Similar to previous generations, a Versal® ACAP DSP block can implement a wide variety of arithmetic and logical functions ranging from addition, subtraction, multiplication, and also common DSP functions such as multiply-accumulate. Like previous generation DSP blocks can implement wide logic functions such as XOR and can be cascaded to form digital filters. The Versal ACAP DSP block has a wider 27x24 complex multiplier that can also be configured as three 9x8 multipliers and also has a wider 58-bit accumulator. Versal ACAP DSP also supports floating point addition and multiplication.
The following settings descriptions are used to configure Versal DSP blocks for power estimation:
- Versal ACAP XPE allows you to use mode-specific configurations for the DSP block. You can select the suitable configurations from the drop-down list based on the DSP operation that you are performing. The Versal DSP58 power model supports much more fine-grained accuracy compared to previous generations. You can choose from various sizes of integer mulitpliers, MACs, dot-products, complex multipliers, and floating point operations.
- DSP58 Slices
- This is the number of DSP58 blocks. In the Versal architecture, one DSP58 block can implement a 27x24 fixed-point multiplier while two DSP58 blocks can be paired with common logic to implement an 18-bit complex multiplier.
- Choose the DSP58 Slice clock from the drop-down menu.
- Block Toggle Rate
- This is the average toggle rate of all DSP block signals. Manually adjust the
toggle rate when necessary.
- If the DSP block is enabled for only a fraction of cycles, scale the Block Toggle Rate by the enable rate. For example if the DSP is enabled for half the cycles, multiply the Block Toggle Rate by 0.5 to get the new Block Toggle Rate.
- If the DSP block does not use all the multiplier outputs, scale the Block Toggle Rate by the fraction of output bits used. If only 48 bits are used then multiply the Block Toggle Rate by (48 / 58) to reflect the proportion of actively switching signals in the DSP block.
- DSP Mode
- This indicates the operational mode of the DSP blocks. It is auto populated
and is read only for the configuration that is specified.
- This mode is compatible with the DSP48 from previous generations. INT24 indicates the DSP block is configured as a 27x24 signed, fixed point multiplier. If using a smaller sized multiplier, scale the Block Toggle Rate by the proportion of used output bits.
- DSP58 uses the Vector Fixed Point ALU mode in this configuration. This mode is used for computing three-element 9x8 vector dot-products with accumulate or post add options.
- This mode indicates that two adjacent DSP58 blocks are configured to implement an 18-bit complex multiplier. Ensure that the DSP Slice total takes into account two DSP Slices per complex multiplier.
- DSP58E5 uses floating point multiplier and adder in this configuration. This mode is used for FP32 single precision or FP16 half precision with accumulate or post add options.
- MULT Used?
- This indicates whether or not the DSP58 multiplier is used. The default value is Yes because the multiplier is expected to be used for the majority of cases. Set the value to No for non-multiplication use cases. It is auto populated and is a read only for a given configuration.
- Multiplier Pipeline Used?
- When MULT Used is Yes, this indicates whether or not the multiplier is pipelined. The multiplier is typically pipelined due to its relatively large propagation delay so the default value is Yes. The value should be set to No only for very low clock speeds. This field is auto populated and you override this setting.
- Pre-Add Used?
- The DSP58 contains a 27-bit signed adder that can drive one or both inputs of the multiplier. Choose Yes if you are implementing an arithmetic function that requires the pre-add, for example (B + D) * A. The default value is No. This field is auto populated and is a read only for a given configuration.
- AD Reg Used?
- This indicates that the Pre-Adder output is pipelined before feeding to multiplier input. The default value is No. This field is auto populated and you can override this setting.