Si votre design contient une boucle for comme celle-ci :
entier i;
for( i = ... ; ... ; ... ) commence
a = expression de i ;
si( ...... Instruction conditionnelle concernant un ) begin
Déclaration;
......
Fin
Fin
Le logiciel Intel® Quartus® Prime Pro Edition peut synthétiser un très grand nombre de niveaux logiques dans cette boucle for.
Si une boucle for contient ces conditions, elle ne peut pas être optimisée pour la profondeur de la logique.
- Expression d’affectation qui dépend de la variable de contrôle de boucle
- Une instruction if imbriquée dans la boucle qui utilise le résultat de l’affectation comme condition select
L’instruction d’affectation qui dépend de la variable de contrôle de boucle doit être déplacée hors du bloc de boucle for pour permettre une optimisation supplémentaire. Une fois en dehors de la boucle, l’instruction assignment peut être convertie en affectations parallèles à chaque bit d’un vecteur. Ensuite, le résultat de l’affectation de chaque cycle peut être indexé par la variable de contrôle de boucle dans ce vecteur nouvellement créé.
Le code peut être modifié comme suit :
vecteur[ N ] = ... ;
......
vecteur[ 2 ] = ... ;
vecteur[ 1 ] = ... ;
entier i ;
for( i = ... ; ... ; ... ) commence
si( ...... instruction conditionnelle sur le vecteur[i] ) begin
Déclaration;
......
Fin
Fin
L’optimisation convient aux cas où le nombre de cycles est fixe et n’est pas très important. L’optimisation peut augmenter l’utilisation des ALUT tout en diminuant le nombre de niveaux logiques.
Une future version du logiciel Intel® Quartus® Prime Pro Edition est prévue pour optimiser automatiquement le code original.