03-02-2013 12:31 AM - edited 03-02-2013 12:32 AM
I have three questions regarding the use of use_dsp48 synthesis directive (target device: Virtex 4):
1) When synthesis directive (*use_dsp48="yes"*) is used on a signal and only the associated multiplication operation needs to be mapped to a DSP48 block, does it matter under any case if the USE DSP48 setting in synthesis properties is set to NO? I assume it should not matter. If I set it to yes or auto, then other multiplication operations may also get mapped to DSP48 which I do not want.
2) UG627 (XST User Guide for Virtex-4, Virtex-5, Spartan-3, and Newer CPLD Devices) says that ISE will decompose a bigger multiplication (one that cannot fit in one DSP48) into smaller ones so that it fits over multiple DSP48 blocks. However, does ISE do this only when it infers DSP48 (by setting USE DSP48 setting in synthesis properties is set to YES or AUTO)? My experiments do not demonstrate that it is able to do so when (*use_dsp48="yes"*) is explicitly applied to the corresponding signal (see (c) below)
3) When ISE infers DSP48 and breaks a bigger multiplication into smaller ones so that it fits over multiple DSP48s, does it insert extra pipelines that would be needed to balance the path which converges at some point with the bigger multiplication path?
I have attached my code for analysis. I have found the following things:
a) When I apply (*use_dsp48="yes"*) to r1 and r5 in the attached design ( with USE DSP48 setting in synthesis properties set to NO), ISE uses two DSP48 which are used only for r5 (based on MAP report) and ignores the directive on r1. Is it possible that there is some inbuilt rule in ISE which overrides this explicit directive on r1?
b) When I apply (*use_dsp48="yes"*) to r5 and r8 in the attached designn ( with USE DSP48 setting in synthesis properties set to NO), both of which are big multiplications, ISE does not map either of them to DSP48.
Any comments/inputs would be greatly appreciated. I am using ISE14.4