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.
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.