순차 논리회로 (Shift Register)
【 이론 】
쉬프트(shift)란 "위치를 바꾸다. 이동한다."는 뜻이며, 레지스터의 동작은 클록 펄스(clock pulse)의 입력에 의해서 이루어진다.
여기서 쉬프트 레지스터의 동작 상태를 살펴보자. 만약 6비트의 데이터 101101 이 쉬프트 레지스터에 축적되어 있다고 하자. 이 상태를 보인 것이 그림 14-13(a)이다. 이 상태에서 클록 펄스를 1개 받으면 그림 14-13(b)와 같이 LSB(least significant bit)의 1은 밖으로 나와서 버려지고 각각의 비트는 1비트씩 왼쪽 숫자를 받는다.
이때, MSB(most significant bit)는 외부 데이터를 받는다. 그림에서는 외부 데이터는 모두 0이므로 1비트 우측 쉬프트가 행하여질 때마다 MSB에는 "0"이 들어온다. 이것은 우측 쉬프트(right shift)의 한 예이다.
그림 14-14(a)는 D플립플롭을 이용해서 구성한 우측 쉬프트 레지스터(right shift register)이다. 여기서 각 단의 D플립플롭에 현재 기억되어 있는 데이터값을 1010 이라 하고, 새로운 외부 데이터 직렬 입력 11010 이 D입력으로 입력될 때, 그리고 클록 펄스(즉, 쉬프트 펄스)의 트레일링 에지(trailing edge)상태마다 오른쪽으로 한 비트씩 데이터가 이동된다고 할 때 그 동작 상태를 그림 14-14(b)에 나타내었다.
쉬프트 레지스터를 이용하면 곱셈과 나눗셈을 할 수 있다. 즉, 왼쪽으로 한 번 쉬프트하면 2로 곱한 결과가 되고, 오른족으로 한 번 쉬프트하면 2로 나눈 결과가 된다. 예를 들면 5비트 2진 데이터값이 (10000)2인 경우 오른쪽으로 한 번 쉬프트하면 (1000)2이 되고, 또 한번 오른쪽으로 이동하면 (100)2이 된다. 여기서 2진 데이터값을 10진수로 바꾸어 보면 5비트 (10000)2은 (16)10이 되고 (1000)2은 (8)10, (100)2은 (4)10가 된다. 이는 16에서 1비트 오른쪽으로 이동하면 16 ÷ 2 = 8이 되고, 또 한 번 오른쪽으로 이동하면 8 ÷ 2 = 4가 된다는 것을 알 수 있다. 결국 오른쪽으로 1비트씩 이동하면 2로 나눈 셈이 된다. 또 이것을 왼쪽으로 한 비트씩 이동해 보면 2로 곱해지는 것을 알 수 있게 된다.