Wenn Ihr Design eine for-Schleife wie diese enthält:
ganze Zahl i;
for( i = ... ; ... ; ... ) beginnen
a = Ausdruck von i ;
wenn( ...... Bedingte Anweisung zu einem ) Begin
Anweisung;
......
Ende
Ende
Die Intel® Quartus® Prime Pro Edition Software kann eine sehr große Anzahl von Logikpegeln in dieser for-Schleife synthetisieren.
Wenn eine for-Schleife diese Bedingungen enthält, kann sie nicht für die Logiktiefe optimiert werden:
- Ein Zuweisungsausdruck, der von der Schleifensteuervariablen abhängt
- Eine in der Schleife verschachtelte if-Anweisung, die das Zuweisungsergebnis als Auswahlbedingung verwendet
Die Zuweisungsanweisung, die von der Schleifensteuervariablen abhängt, sollte aus dem for-Schleifenblock verschoben werden, um eine weitere Optimierung zu ermöglichen. Außerhalb der Schleife kann die Zuweisungsanweisung in parallele Zuweisungen zu jedem Bit eines Vektors umgewandelt werden. Dann kann das Zuordnungsergebnis jedes Zyklus durch die Schleifensteuervariable in diesem neu erstellten Vektor indiziert werden.
Der Code kann wie folgt geändert werden:
Vektor[ N ] = ... ;
......
Vektor[ 2 ] = ... ;
Vektor[ 1 ] = ... ;
ganze Zahl i ;
for( i = ... ; ... ; ... ) beginnen
wenn( ...... Bedingte Aussage über Vektor[i] ) beginnen
Anweisung;
......
Ende
Ende
Die Optimierung eignet sich für Fälle, in denen die Anzahl der Zyklen festgelegt und nicht sehr groß ist. Die Optimierung kann die Verwendung von ALUTs erhöhen und gleichzeitig die Anzahl der Logikebenen verringern.
Eine zukünftige Version der Intel® Quartus® Prime Pro Edition Software ist geplant, um den ursprünglichen Code automatisch zu optimieren.