ID del artículo: 000091832 Tipo de contenido: Resolución de problemas Última revisión: 23/08/2023

¿Por qué el software sintetiza un gran número de niveles lógicos para un bucle for-en mi diseño cuando una instrucción if está anidada en el bucle?

Entorno

    Intel® Quartus® Prime Pro Edition
BUILT IN - ARTICLE INTRO SECOND COMPONENT
Descripción

Si tu diseño contiene un bucle for-como este:

entero i;

for( i = ... ; ... ; ... ) begin

a = expresión de i ;

si( ...... declaración condicional sobre a ) begin

Declaración;

......

Final

Final

El software Intel® Quartus® Prime Pro Edition puede sintetizar un gran número de niveles lógicos en este bucle for.

Resolución

Si un bucle for-loop contiene estas condiciones, entonces no se puede optimizar para la profundidad lógica

  • Una expresión de asignación que depende de la variable de control de bucle
  • Una instrucción if anidada en el bucle que utiliza el resultado de la asignación como condición select

La instrucción de asignación que depende de la variable de control de bucle se debe mover fuera del bloque for-loop para permitir una mayor optimización. Una vez fuera del bucle, la sentencia de asignación se puede convertir en asignaciones paralelas a cada bit de un vector. Luego, el resultado de la asignación de cada ciclo puede ser indexado por la variable de control de bucle en este vector recién creado.

El código se puede modificar como:

vector[ N ] = ... ;

......

vector[ 2 ] = ... ;

vector[ 1 ] = ... ;

entero i ;

for( i = ... ; ... ; ... ) begin

si( ...... declaración condicional sobre vector[i] ) begin

Declaración;

......

Final

Final

La optimización es adecuada para los casos en que el número de ciclos es fijo y no es muy grande. La optimización puede aumentar el uso de ALUTs y disminuir el número de niveles lógicos.

Una versión futura del software Intel® Quartus® Prime Pro Edition está programada para optimizar el código original automáticamente.

Productos relacionados

Este artículo se aplica a 1 productos

Dispositivos programables Intel®

1

El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.