문서 ID: 000091832 콘텐츠 형태: 문제 해결 마지막 검토일: 2023-08-23

if 문이 루프에 중첩 될 때 소프트웨어가 내 디자인에서 for 루프에 대해 매우 많은 수의 논리 수준을 합성하는 이유는 무엇입니까?

환경

  • 인텔® Quartus® Prime Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    설명

    디자인에 다음과 같은 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 소프트웨어의 향후 버전은 원본 코드를 자동으로 최적화할 예정입니다.

    관련 제품

    이 문서는 다음 항목에 적용됩니다. 1 제품

    인텔® 프로그래밍 가능 장치

    이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.