11 votos

¿Cómo identificar las áreas de un diseño FPGA que utilizan más recursos y superficie?

Estoy trabajando en un gran diseño FPGA, y estoy muy cerca de los límites de recursos de la 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 cabe en la FPGA. Puedo desactivar partes para que quepa, pero necesito reducir el uso de recursos para completar el diseño y que cumpla los requisitos de temporización y tamaño.

Me gustaría saber si existen herramientas o informes que puedan ayudarme a identificar qué partes de mi diseño consumen más recursos. Mi diseño no está particionado y se divide en una docena o más de módulos VHDL.

Los informes de sincronización de Xilinx son fantásticos, pero ahora necesito saber dónde puedo obtener la mejor relación calidad-precio en términos de ahorro de espacio.

También me cuesta saber qué tipo de recursos se me están acabando o qué efectos tienen esos recursos.

Otra molestia es que, a medida que el diseño se hace más grande, los componentes que antes cumplían los plazos empiezan a fallar porque su colocación ya no es tan idónea.

Actualmente, utilizo los informes de cronometraje Post-Place y Route Static, y utilizo SmartXplorer. Utilizo estrategias de diseño para optimizar la temporización.

Después de desactivar parte de mi diseño para que encajara, estos son algunos de los resultados:

utilización del registro de rebanadas: 42% utilización de slice LUT: 96 número de pares LUT-FF totalmente utilizados: 38 ¿Significa esto que tengo pocos registros, pero mucho uso de puertas?

¿Existen herramientas que ayuden a los desarrolladores a optimizar por zonas o que, al menos, les permitan conocer mejor su código?

Actualización: Después de mirar la utilización a nivel de módulo, descubrí que tenía pequeños fifos asíncronos de cola por todas partes que ocupan alrededor del 30% del total de LUTs. Los estoy usando como pegamento entre dominios de reloj para buses 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 DCMs)

0 votos

Parece que tienes muchas interconexiones entre las señales, seguro que puedes arreglarlo cambiando los niveles de optimización, compartiendo recursos y tal. ¿Qué herramienta estás utilizando? ¿ISE o Vivado?

1 votos

Estoy usando ISE (Vivado no es compatible con Spartan-6) He cruzado esto en los foros de Xilinx, y me dijeron que a su vez en el informe detallado del mapa. Hice esto, y el archivo *. mrp ahora contiene la Sección 13 - Utilización por jerarquía. Voy a publicar los datos una vez que tenga un mejor formato.

5voto

rsmoorthy Puntos 113

He cruzado esta pregunta en el foro de Xilinx aquí: http://forums.xilinx.com/t5/Implementation/How-to-determine-what-part-of-the-design-consumes-the-most/td-p/393247

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

En primer lugar, active "Generar informe MAP detallado" en las propiedades del proceso de mapa (-detail).

A continuación, abra el Resumen de diseño y vaya a Utilización a nivel de módulo. Esta es 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.

Este es mi resultado (parcialmente ampliado) Utilization report

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

3voto

Flory Puntos 1911

Valdría la pena publicar toda la sección de "uso de recursos" de la salida de la herramienta.

¿Utilizas todas las RAM de bloque? Es habitual poder sustituir funciones lógicas/matemáticas por tablas de consulta RAM equivalentes si el dominio es lo suficientemente restringido, y son de suficiente complejidad como para que merezca la pena precalcularlas.

Lo mismo ocurre con los multiplicadores. A veces una pequeña desviación de la plantilla de instanciación recomendada puede tirar el multiplicador que se infiere a las unidades DSP48A.

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

Con (Altera) Quartus, puede seleccionar varios elementos en la vista de jerarquía de diseño y ver su uso de área post-p&r codificado por colores/agrupado. Esto puede dar una idea visual del uso relativo de sus módulos de diseño.

0 votos

Gracias. Estoy usando las macros hard IP para los multiplicadores y usé CoreGen para hacer los FIFOs, aunque seleccioné algunos de los fifos pequeños para usar RAM distribuida (en lugar de RAM en bloque). Investigaré su uso.

3voto

silverbolt Puntos 18

Parece que estás utilizando casi todos los recursos lógicos mientras que sólo utilizas la mitad de los registros. Parece que necesitas averiguar qué es lo que está consumiendo todas tus LUTs. Hay maneras de optimizar componentes particulares y hacerlos un poco más eficientes en espacio - cosas como RAMs, registros de desplazamiento y máquinas de estado. Mira el archivo .log resultante del sintetizador. Te dirá qué tipo de componentes están siendo inferidos. Asegúrate de que infiere los componentes correctamente. Si no es así, puede que no esté generando un netlist particularmente eficiente. Se puede saber mucho con sólo mirar los archivos de registro de síntesis. Es posible que unos pequeños cambios en tu código permitan al sintetizador inferir varios componentes, así que echa un vistazo al manual del sintetizador para obtener alguna plantilla. Puede que tengas que cambiar el sintetizador para optimizar el área en lugar de la velocidad. Además, asegúrate de que no tienes ninguna configuración de inferencia desactivada. Una vez intenté sintetizar un componente de diseño que consumía el 40% de un Spartan 3E 500 (9.312 pares LUT/FF de 4 entradas, 5,6 KB de RAM de bloque) para un Virtex 6 HXT 565 (354.240 pares LUT/dual FF de 6 entradas, 32 MB de RAM de bloque). El par de Xilinx tardó 7 horas en terminar y ocupó cerca del 40% del chip. ?!?!?!? Resulta que infer block RAM estaba apagado, y el sintetizador convirtió varios KB de RAM en LUTs. No es la decisión más eficiente. Después de cambiar la configuración, ocupaba como el 1% del chip. Imagínate.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X