Lo he hecho algunas veces yo mismo.
En general, las herramientas de diseño elegirán entre una implementación de estructura y un segmento DSP en función de la configuración de síntesis.
Por ejemplo, para Xilinx ISE, en la configuración del proceso de síntesis, Opciones HDL, hay una configuración "-use_dsp48" con las opciones: Auto, AutoMax, Sí, No. Como puede imaginar, esto controla qué tan duro intentan colocar las herramientas. DSP rodajas. Una vez tuve un problema en el que multipliqué un número entero por 3, lo que infirió 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 general (acabo de inventarlo): si su diseño tiene una frecuencia de reloj de menos de 50 MHz, y probablemente usará menos del 50% de los cortes DSP en el chip, entonces simplemente use el *, + y - operadores. Esto inferirá segmentos 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 va a ejecutar los cortes más cerca de la velocidad máxima del corte DSP (333 MHz para el grado de velocidad normal Spartan 6) Si va a usar todos los cortes, debe inferirlos manualmente .
En este caso, tienes dos opciones.
Opción 1: use manualmente la plantilla de instanciación DSP sin formato. Opción 2: use un bloque de IP de Xilinx Core Generator. (Usaría esta opción. Al mismo tiempo, aprenderá todo sobre core gen, lo que ayudará en el futuro)
Antes de hacer cualquiera de estos, lea las primeras páginas de la guía de usuario de DSP. En el caso del Spartan 6, (DSP48A1), ese sería Xilinx doc UG389:
http://www.xilinx.com/support/documentation/user_guides/ug389.pdf
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, clic en nueva fuente y selecciono "IP (CORE Generator & Architecture Wizard)" para poder editar y regenerar el bloque directamente de mi proyecto
En Core gen, eche un vistazo a los diferentes bloques de IP que puede elegir: hay algunas docenas, la mayoría de las cuales son geniales.
El núcleo multiplicador es lo que debe mirar al principio. Echa un vistazo a cada página y haz clic en el botón de la hoja de datos. Las partes importantes son los anchos de bits enteros, las etapas de la tubería (latencia) y cualquier señal de control. Esto produce el bloqueo más simple posible al eliminar todos los puertos que no necesita.
Cuando construí un filtro IIR de orden 5 por 3 el año pasado, tuve que usar la plantilla de creación de instancias manual ya que estaba creando una implementación muy personalizada, con 2 cortes DSP con una velocidad 4 veces mayor que la frecuencia de muestreo. Fue un dolor total.