디자인에 다음과 같은 for 루프가 포함 된 경우 :
정수 i;
for( i = ... ; ... ; ; ... ) 시작
a = i의 표현 ;
만약( ...... A) 시작에 대한 조건문
문을;
......
끝
끝
인텔® Quartus® Prime Pro Edition 소프트웨어는 이 for-loop에서 매우 많은 수의 로직 레벨을 합성할 수 있습니다.
for 루프에 이러한 조건이 포함되어 있으면 논리 깊이에 대해 최적화할 수 없습니다
- 루프 제어 변수에 따라 달라지는 할당 식입니다
- 루프에 중첩된 if 문으로, 할당 결과를 선택 조건으로 사용합니다.
루프 제어 변수에 종속된 대입문은 추가 최적화가 가능하도록 for-loop 블록 밖으로 이동해야 합니다. 루프를 벗어나면 할당 문을 벡터의 각 비트에 대한 병렬 할당으로 변환할 수 있습니다. 그런 다음 각 주기의 할당 결과는 새로 생성된 이 벡터의 루프 제어 변수에 의해 인덱싱될 수 있습니다.
코드는 다음과 같이 수정할 수 있습니다.
벡터[ N ] = ... ;
......
벡터[ 2 ] = ... ;
벡터[ 1 ] = ... ;
정수 i ;
for( i = ... ; ... ; ; ... ) 시작
만약( ...... vector[i] )에 대한 조건문 begin
문을;
......
끝
끝
최적화는 사이클 수가 고정되어 있고 그리 크지 않은 경우에 적합합니다. 최적화는 ALUT의 사용량을 증가시키면서 로직 레벨의 수를 감소시킬 수 있습니다.
인텔® Quartus® Prime Pro Edition 소프트웨어의 향후 버전은 원본 코드를 자동으로 최적화할 예정입니다.