Yo mismo lo he hecho varias veces.
En general, las herramientas de diseño elegirán entre una implementación de estructura y un segmento DSP según la configuración de síntesis.
Por ejemplo, para Xilinx ISE, en la configuración del proceso de síntesis, Opciones de HDL, hay una configuración "-use_dsp48" con las opciones:
Auto, AutoMax, Sí, No.
Como puede imaginar, esto controla la fuerza con la que las herramientas intentan colocar los segmentos DSP. Una vez tuve un problema en el que multiplicaba un entero por 3, lo que infería un segmento DSP, excepto que ya estaba inferiendo manualmente cada segmento DSP en el chip, ¡así que el sintetizador falló! Cambié la configuración a No, porque ya estaba usando cada segmento de dsp.
Esta es probablemente una buena regla de oro (acabo de hacer):
Si su diseño tiene una velocidad de reloj de menos de 50 MHz y probablemente va a usar menos del 50% de los segmentos DSP en el chip, entonces solo use los operadores *, + y -. esto inferirá cortes de DSP sin registros de canalización. Esto realmente limita la velocidad máxima. (No tengo idea de lo que sucede cuando usas la división)
Sin embargo, si parece que vas a ejecutar los cortes más cerca de la velocidad máxima del corte DSP (333 MHz para el grado de velocidad normal de Spartan 6) De todos los cortes, deberías inferirlos manualmente.
En este caso, tienes dos opciones.
Opción 1: utilizar manualmente la plantilla de creación de instancias de DSP sin formato.
Opción 2: usar un bloque de IP de Xilinx Core Generator. (Yo usaría esta opción. Al mismo tiempo, aprenderá todo sobre Core Gen, lo que ayudará en el futuro)
Antes de hacer cualquiera de estas acciones, lea las dos primeras páginas de la guía del usuario de DSP. En el caso del Spartan 6, (DSP48A1), sería Xilinx doc UG389:
enlace
Considere primero la opción Core Generator. Por lo general, creo un proyecto de prueba en Core Generator para la parte con la que estoy trabajando, donde creo cualquier número de bloques de IP solo para aprender el sistema. Luego, cuando estoy listo para agregar uno a mi diseño en ISE, hago clic derecho en la Jerarquía de Diseño, hago clic en la nueva fuente y selecciono "IP (Generador de CORE y Asistente de Arquitectura)" para poder editar y regenerar el bloque directamente desde mi proyecto.
En Core gen, eche un vistazo a los diferentes bloques de IP que puede elegir: hay unas pocas docenas, la mayoría de las cuales son muy interesantes.
El núcleo multiplicador es lo que debes ver primero. Echa un vistazo a cada página, y haga clic en el botón de hoja de datos. Las partes importantes son los anchos de bits de enteros, las etapas de la tubería (latencia) y cualquier señal de control. Esto produce el bloqueo más simple posible al quitar todos los puertos que no necesita.
El año pasado, cuando estaba creando un filtro IIR de orden de 5 por 3, tuve que usar la plantilla de creación de instancias manual ya que estaba creando una implementación muy personalizada, con 2 rebanadas DSP sincronizadas 4 veces más rápido que la frecuencia de muestreo. Fue un dolor total.