설계가 타이밍을 충족하지 못하는 가능한 이유는 다른 조합 논리와 직렬로 하나 이상의 배럴 시프터가 포함되어 있기 때문입니다. 시프트 연산자가 변수 피연산자와 함께 사용될 때마다(예: "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;