Je l'ai fait moi-même plusieurs fois.
Généralement, les outils de conception choisiront entre une implémentation de structure et une tranche DSP en fonction des paramètres de synthèse.
Par exemple, pour Xilinx ISE, dans les paramètres du processus de synthèse, Options HDL, il y a un paramètre "-use_dsp48" avec les options: Auto, AutoMax, Oui, Non. Comme vous pouvez l'imaginer, cela contrôle la force avec laquelle les outils essaient de placer Tranches DSP. J'ai eu une fois un problème où j'ai multiplié un entier par 3, ce qui a déduit une tranche DSP - sauf que je déduisais déjà manuellement chaque tranche DSP de la puce, donc le synthé a échoué! J'ai modifié le paramètre sur Non, car j'utilisais déjà chaque tranche dsp.
C'est probablement une bonne règle de base (je viens de me réconcilier): si votre conception est cadencée à moins de 50 MHz et que vous allez probablement utiliser moins de 50% des tranches DSP de la puce, utilisez simplement le *, + et - opérateurs. cela déduira les tranches DSP sans registre de pipeline. Cela limite vraiment la vitesse de pointe. (Je n'ai aucune idée de ce qui se passe lorsque vous utilisez la division)
Cependant, s'il semble que vous allez exécuter les tranches plus près de la vitesse maximale de la tranche DSP (333 MHz pour la vitesse normale Spartan 6). Si vous allez utiliser toutes les tranches, vous devez les déduire manuellement .
Dans ce cas, vous avez deux options.
Option 1: utilisez manuellement le modèle d'instanciation DSP brut. Option 2: utilisez un bloc IP de Xilinx Core Generator. (J'utiliserais cette option. En même temps, vous apprendrez tout sur la génération de base, ce qui vous aidera à l'avenir)
Avant d'effectuer l'une ou l'autre de ces opérations, lisez les deux premières pages du guide d'utilisation de la tranche DSP. Dans le cas du Spartan 6, (DSP48A1), ce serait le document Xilinx UG389:
http://www.xilinx.com/support/documentation/user_guides/ug389.pdf
Considérez d'abord l'option Core Generator. Je crée généralement un projet de test dans Core Generator pour la partie avec laquelle je travaille, où je crée un certain nombre de blocs IP juste pour apprendre le système. Ensuite, lorsque je suis prêt à en ajouter un à ma conception dans ISE, je clique avec le bouton droit dans la hiérarchie de conception, je clique sur une nouvelle source et je sélectionne "IP (Générateur de base et assistant d'architecture)" afin de pouvoir modifier et régénérer le bloc directement de mon projet.
Dans Core gen, jetez un œil aux différents blocs IP parmi lesquels vous pouvez choisir - il y en a quelques dizaines, dont la plupart sont plutôt cool.
Le noyau multiplicateur est ce que vous devez regarder en premier. Consultez chaque page et cliquez sur le bouton de la fiche technique. Les parties importantes sont les largeurs de bits entières, les étages de pipeline (latence) et tous les signaux de contrôle. Cela produit le bloc le plus simple possible en supprimant tous les ports dont vous n'avez pas besoin.
Lorsque je construisais un filtre IIR d'ordre 5 par 3 l'année dernière, j'ai dû utiliser le modèle d'instanciation manuelle car je construisais une implémentation très personnalisée, avec 2 tranches DSP cadencées 4x plus rapidement que la fréquence d'échantillonnage. C'était une douleur totale.