배럴 시프터

배럴 시프터(Barrel shifter)는 순수 조합 논리만을 사용하여 지정된 수의 비트만큼 데이터 워드를 시프트할 수 있는 디지털 회로이다. 즉, 본질적으로 이항 연산을 제공한다. 그러나 이론적으로는 주소 생성 장치와 같이 고정된 양에 제한되는 경우(예: 주소 생성 장치) 논리 시프트 왼쪽과 같은 단항연산을 구현하는 데에도 사용될 수 있다. 배럴 시프터를 구현하는 한 가지 방법은 시프트 거리에 따라 한 멀티플렉서의 출력이 다음 멀티플렉서의 입력에 연결되는 일련의 멀티플렉서로 구성하는 것이다. 배럴 시프터는 최신 마이크로프로세서에서 N비트를 시프트하고 회전시키는 데 자주 사용되며, 일반적으로 단일 클럭 사이클 내에서 작동한다.

예를 들어, 입력 A, B, C, D를 가진 4비트 배럴 시프터의 경우, 시프터는 비트 ABCD의 순서를 DABC, CDAB 또는 BCDA로 순환할 수 있다. 이 경우 비트 손실은 없다. 즉, 모든 출력을 오른쪽으로 최대 세 위치까지 시프트(따라서 A, B, C, D의 모든 순환 조합을 만들 수 있다)할 수 있다. 배럴 시프터는 마이크로프로세서(ALU와 함께)의 유용한 구성 요소가 되는 것을 포함하여 다양한 응용 분야를 가지고 있다.

 구현 

가장 빠른 시프터는 위 그림의 4비트 시프터와 유사한 방식으로, 더 크게 전체 크로스바로 구현된다. 이들은 지연이 가장 적으며, 출력은 항상 시프트할 입력보다 단일 게이트 지연만큼 뒤쳐진다(시프트 카운트 디코더가 안정화되는 데 필요한 짧은 시간을 허용하고 나면; 그러나 이 페널티는 시프트 카운트가 변경될 때만 발생한다). 그러나 이러한 크로스바 시프터는 n비트 시프트를 위해 n2개의 게이트를 필요로 한다. 이 때문에 배럴 시프터는 종종 병렬 2×1 멀티플렉서의 캐스케이드로 구현되는데, 이는 게이트 수를 크게 줄여 n log n으로만 증가한다. 그러나 전파 지연은 log n으로 증가하며 (크로스바 시프터와 같이 상수가 아니라) 더 커진다.

8비트 배럴 시프터의 경우, 두 개의 중간 신호가 사용되는데, 이 신호는 S[2] 및 S[1]의 값에 따라 4비트 및 2비트만큼 시프트하거나 동일한 데이터를 통과시킨다. 이 신호는 S[0]에 의해 제어되는 다른 멀티플렉서에 의해 시프트된다.

  int1  = IN       , if S[2] == 0
        = IN   << 4, if S[2] == 1
  int2  = int1     , if S[1] == 0
        = int1 << 2, if S[1] == 1
  OUT   = int2     , if S[0] == 0
        = int2 << 1, if S[0] == 1

더 큰 배럴 시프터는 추가 스테이지를 가진다.

캐스케이드 시프터는 시프트 카운트에 대한 디코딩 논리가 필요하지 않다는 점에서 전체 크로스바 시프터보다 추가적인 장점을 가진다.

 비용 

n비트 워드에 필요한 멀티플렉서의 수는 이다. 다음은 5가지 일반적인 워드 크기와 필요한 멀티플렉서의 수이다.
 128비트 — 
 64비트 — 
 32비트 — 
 16비트 — 
 8비트 — 

FO4의 중요 경로 비용 (추정, 와이어 지연 없음):
 32비트: 18 FO4에서 14 FO4로

 용도 

배럴 시프터의 일반적인 용도는 부동소수점의 하드웨어 구현이다. 부동소수점 덧셈 또는 뺄셈 연산의 경우, 두 숫자의 가수가 정렬되어야 하며, 이는 작은 숫자를 오른쪽으로 시프트하여 지수를 증가시켜 큰 숫자의 지수와 일치하도록 해야 한다. 이는 지수를 빼고 배럴 시프터를 사용하여 작은 숫자를 그 차이만큼 오른쪽으로 한 사이클에 시프트함으로써 이루어진다.

 같이 보기 
 원형 시프트

 각주 

 추가 자료 


 외부 링크 
 배럴 시프터 (8비트), 함부르크 대학교
 멀티플라이어를 사용한 배럴 시프터 구현 (폴 지글리오티, 2004-08-17)

분류:컴퓨터 산술
분류:이항연산
분류:디지털 회로
분류:이진 산술
분류:단항 연산