¿Cómo identificar las áreas de un diseño de FPGA que utilizan la mayoría de los recursos y el área?

10

Estoy trabajando en un gran diseño de FPGA, y estoy muy cerca de los límites de recursos del FPGA que estoy utilizando actualmente, el Xilinx LX16 en el paquete CSG225.

El diseño también está casi completo, sin embargo, en este momento ya no encajará en el FPGA. Puedo apagar partes para que se ajusten, sin embargo, necesito reducir el uso de recursos para completar el diseño y hacer que cumpla con los requisitos de tamaño y tiempo.

Me gustaría saber si hay alguna herramienta de nuestros informes que pueda ayudarme a identificar qué partes de mi diseño consumen más recursos. Mi diseño no tiene particiones y está dividido en una docena o más de módulos VHDL.

Los informes de tiempos de Xilinx son fantásticos, pero ahora necesito saber dónde puedo obtener mi mejor valor por dinero en términos de ahorro de espacio.

También me cuesta mucho decir qué tipo de recursos me estoy quedando o qué efectos tienen esos recursos.

Otra molestia es que a medida que el diseño se hace más grande, los componentes que solían cumplir con el tiempo comienzan a fallar porque su ubicación ya no es tan ideal.

Actualmente, utilizo los informes de tiempo de Posicionamiento de Ruta y Lugar y uso SmartXplorer. Estoy usando estrategias de diseño para optimizar el tiempo.

Después de apagar parte de mi diseño para que encaje, aquí están algunos de los resultados:

utilización del registro de corte: 42% Utilización de LUT de rebanada: 96% número de pares LUT-FF completamente usados: 38% ¿Significa esto que soy ligero en los registros, pero pesado en el uso de la puerta?

¿Existen herramientas para ayudar a los desarrolladores a optimizar el área, o al menos darles una mejor comprensión de su código?

Actualización: Después de ver el Nivel de Módulo de Utilización, descubrí que tenía pegamento pequeño y asíncrono por todas partes que ocupaba alrededor del 30% del total de LUT. Los estoy utilizando como pegamento de dominio de reloj cruzado para autobuses de alta velocidad. Debería poder eliminarlos, ya que los relojes están estrechamente relacionados. (120 MHz de entrada, produce 100 MHz y 200 MHz a través de DCM)

    
pregunta Marcus10110

3 respuestas

5

Cruzé esta pregunta en el foro de Xilinx aquí: enlace

Esta respuesta se basa en gran medida en los comentarios allí. Gracias a Deepika, Sikta y Gabor.

Primero, habilite 'Generar informe detallado de MAP' en las propiedades del proceso del mapa (-detail).

Luego, abra el Resumen de diseño y navegue a Módulo de utilización del nivel. Aquí está la jerarquía completa, que muestra la utilización exclusiva e inclusiva del diseño.

Cada línea mostrará un par de números como 0/5392. Esto significa que ese módulo contiene cero de ese elemento específico, pero ese módulo y todos sus submódulos contienen un total de 5392 elementos.

Aquí está mi salida (parcialmente expandida) Informe de utilización http://i41.tinypic.com/axedjm.jpg

Al trabajar en la reducción del tamaño, Gabor recomienda cambiar a un FPGA más grande en las herramientas de sintetizador para que pueda mapear completamente incluso cuando es demasiado grande para que quepa en tu FPGA actual, y hará que las herramientas se ejecuten más rápido.

    
respondido por el Marcus10110
3

Parece que estás usando casi todos los recursos lógicos y solo usas la mitad de los registros. Parece que necesitas descubrir qué está consumiendo todas tus LUT. Hay formas de optimizar componentes particulares y hacerlos un poco más eficientes en espacio, como RAM, registros de desplazamiento y máquinas de estado. Mire el archivo .log resultante del sintetizador. Le dirá qué tipo de componentes se están inferiendo. Asegúrese de que está inferiendo los componentes correctamente. Si no lo es, puede que no esté generando una lista de redes particularmente eficiente. Se puede decir mucho con solo mirar los archivos de registro de síntesis. Es posible que algunos cambios menores en su código le permitan al sintetizador inferir varios componentes, así que eche un vistazo al manual del sintetizador para ver una plantilla. Es posible que deba cambiar el sintetizador para optimizar el área en lugar de la velocidad. Además, verifique que no haya desactivado ninguna configuración de infer. Una vez intenté sintetizar un componente de diseño que consumía el 40% de un Spartan 3E 500 (9,312 pares de LUT / FF de 4 entradas, 5,6 KB de RAM de bloque) para un Virtex 6 HXT 565 (354,240 pares de LUT de 6 entradas / FF dual, 32 MB bloque RAM). Xilinx par tardó 7 horas en terminar y ocupó aproximadamente el 40% del chip. ?!?!?!? Resulta que la RAM del bloque inferir estaba desactivada y el sintetizador convirtió varios KB de RAM en LUT. No es la decisión más eficiente jamás. Después de cambiar la configuración, tomó como el 1% del chip. Imagínate.

    
respondido por el alex.forencich
3

Valdría la pena publicar toda la sección de 'uso de recursos' desde el resultado de la herramienta.

¿Utilizas todas las RAM del bloque? Es común poder reemplazar las funciones lógicas / matemáticas con tablas de consulta de RAM equivalentes si el dominio está lo suficientemente restringido, y son lo suficientemente complejos como para que valga la pena el cálculo previo.

Así como la inferencia de memoria, lo mismo se aplica a los Multiplicadores. A veces, una pequeña desviación de la plantilla de creación de instancias recomendada puede arrojar el multiplicador que se infiere a las unidades DSP48A.

Si está utilizando el controlador PCIe, ¿puede reducir el espacio total de búfer reservado para las cargas útiles de TLP o el tamaño máximo de paquete de TLP? Esto puede reducir el uso de RAM / lógica del núcleo de IP a costa del ancho de banda total / put-put.

Con (Altera) Quartus, puede realizar una selección múltiple de elementos en la vista de jerarquía de diseño y ver allí el código de colores de uso del área post-p & r. Esto puede dar una idea visual del uso relativo de sus módulos de diseño.

    
respondido por el shuckc

Lea otras preguntas en las etiquetas