문서 ID: 000074260 콘텐츠 형태: 문제 해결 마지막 검토일: 2012-09-11

소스 코드에 변수 시프트 연산자가 포함되어 있을 때 Nios II C-하드웨어(C2H) 컴파일러 생성 가속기가 타이밍에 실패하는 이유는 무엇입니까?

환경

  • 인텔® Nios® II (클래식) 프로세서
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    설명

    설계가 타이밍을 충족하지 못하는 가능한 이유는 다른 조합 논리와 직렬로 하나 이상의 배럴 시프터가 포함되어 있기 때문입니다. 시프트 연산자가 변수 피연산자와 함께 사용될 때마다(예: "a = b << c;" Nios® II C2H는 배럴 시프트 로직을 생성합니다. C2H에 의해 생성된 배럴 시프트 로직은 설계 타이밍에 상당한 영향을 미칠 수 있는 많은 수의 조합 멀티플렉서를 구현합니다. 다음 두 예제는 배럴 시프터로 인해 타이밍 저하를 일으킬 수 있는 소스 코드를 보여줍니다.


    조합 시프트 입력:

    아래는 타이밍 저하를 일으킬 수 있는 배럴 시프터로의 조합 시프트 입력의 예입니다.

    int a, b, c, d, result, shift_distance;
    result = (a b c d) >> shift_distance;

    덧셈 결과는 시프트 연산자에 대한 피연산자로 사용되므로, 덧셈 입력값 중 하나와 'result' 사이에 긴 타이밍 경로가 생성됩니다. 파이프라이닝의 양을 늘리려면 아래와 같이 덧셈 결과를 임시 변수에 할당합니다.

    int a, b, c, d, addition_result, shift_distance;
    addition_result = a b c d;
    result = addition_result >> shift_distance;


    조합 시프트 출력:

    아래는 타이밍 저하를 유발할 수 있는 배럴 시프터의 조합 시프트 출력의 예입니다.

    int a, b, c, d, result, shift_distance;
    result = (a >> shift_distance) b c d;

    시프트 결과는 덧셈 연산자에 대한 피연산자로 사용되므로 'a'와 'result' 사이에 긴 타이밍 경로가 생성됩니다. 파이프라이닝의 양을 늘리려면 아래와 같이 시프트 결과를 변수에 할당합니다.

    int a, b, c, d, result, shift_result, shift_distance;
    shift_result = a >> shift_distance;
    result = shift_result b c d;

    관련 제품

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

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

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