A shift register is a type of digital circuit using a cascade of flip-flops where the output of one flip-flop is connected to the input of the next. They share a single clock signal, which causes the data stored in the system to shift from one location to the next. By connecting the last flip-flop back to the first, the data can cycle within the shifters for extended periods, and in this configuration they were used as computer memory, displacing delay-line memory systems in the late 1960s and early 1970s.

In most cases, several parallel shift registers would be used to build a larger memory pool known as a "bit array". Data was stored into the array and read back out in parallel, often as a computer word, while each bit was stored serially in the shift registers. There is an inherent trade-off in the design of bit arrays; putting more flip-flops in a row allows a single shifter to store more bits, but requires more clock cycles to push the data through all of the shifters before the data can be read back out again.

Shift registers can have both parallel and serial inputs and outputs. These are often configured as "serial-in, parallel-out" (SIPO) or as "parallel-in, serial-out" (PISO). There are also types that have both serial and parallel input and types with serial and parallel output. There are also "bidirectional" shift registers, which allow shifting in both directions: L → R or R → L. The serial input and last output of a shift register can also be connected to create a "circular shift register". A PIPO register (parallel in, parallel out) is simply a D-type register and is not a shift register, but is very fast – an output is given within a single clock pulse. A "universal" shift register provides bidirectional serial-in and serial-out, as well as parallel-in and parallel-out.

Serial-in serial-out (SISO)

Destructive readout 

These are the simplest kind of shift registers. The data string is presented at "data in" and is shifted right one stage each time "data advance" is brought high. At each advance, the bit on the far left (i.e. "data in") is shifted into the first flip-flop's output. The bit on the far right (i.e. "data out") is shifted out and lost.

The data is stored after each flip-flop on the "Q" output, so there are four storage "slots" available in this arrangement, hence it is a 4-bit register. To give an idea of the shifting pattern, imagine that the register holds 0000 (so all storage slots are empty). As "data in" presents 1,0,1,1,0,0,0,0 (in that order, with a pulse at "data advance" each time—this is called clocking or strobing) to the register, this is the result. The right hand column corresponds to the right-most flip-flop's output pin, and so on.

So the serial output of the entire register is 00010110. It can be seen that if data were to be continued to input, it would get exactly what was put in (10110000), but offset by four "data advance" cycles. This arrangement is the hardware equivalent of a queue. Also, at any time, the whole register can be set to zero by bringing the reset (R) pins high.

This arrangement performs destructive readout each datum is lost once it has been shifted out of the right-most bit.

Serial-in parallel-out (SIPO)

This configuration allows conversion from serial to parallel format. Data  input is serial, as described in the SISO section above. Once the data has been clocked in, it may be either read off at each output simultaneously, or it can be shifted out.

In this configuration, each flip-flop is edge triggered. All flip-flops operate at the given clock frequency.  Each input bit makes its way down to the Nth output after N clock cycles, leading to parallel output.

In cases where the parallel outputs should not change during the serial loading process, it's desirable to use a latched or buffered output. In a latched shift register (such as the 74595) the serial data is first loaded into an internal buffer register, then upon receipt of a load signal the state of the buffer register is copied into a set of output registers. In general, the practical application of the serial-in/parallel-out shift register is to convert data from serial format on a single wire to parallel format on multiple wires.

Parallel-in serial-out (PISO) 
This configuration has the data input on lines D1 through D4 in parallel format, D1 being the most significant bit. To write the data to the register, the Write/Shift control line must be held LOW. To shift the data, the W/S control line is brought HIGH and the registers are clocked. The arrangement now acts as a PISO shift register, with D1 as the Data Input. However, as long as the number of clock cycles is not more than the length of the data-string, the Data Output, Q, will be the parallel data read off in order.  The animation below shows the write/shift sequence, including the internal state of the shift register.

Uses

Serial and Parallel conversion 

One of the most common uses of a shift register is to convert between serial and parallel interfaces.

Delay 

Serial-in serial-out shift registers can be used as simple delay circuits.

Stack 

Several bidirectional shift registers can also be connected in parallel for a hardware implementation of a stack.

More I/O pins 
Shift registers are commonly attached to microcontrollers when more general-purpose input/output pins are required than are available, sometimes over a Serial Peripheral Interface in daisy chain configuration, which allows any number of binary devices to be accessed using only two to four pins, though more slowly than parallel I/O.

For more outputs, SIPO shift registers are used. The parallel outputs of the shift register and the desired state for all those devices can be sent out of the microcontroller using a single serial connection.

For more inputs, PISO shift registers are used. Each binary input (such as a button or more complicated circuitry) is attached to a parallel input of the shift register, then the data is sent back serially to the microcontroller.

Pulse extenders 
Shift registers can also be used as pulse extenders. Compared to monostable multivibrators, the timing does not depend on component values, but it requires an external clock, and the timing accuracy is limited by the granularity of this clock. An example of such a pulse extender is the Ronja Twister, wherein five 74164 shift registers create the core of the timing logic this way (schematic).

Data processing 
In early computers, shift registers were used to handle data processing: two numbers to be added were stored in two shift registers and clocked out into an arithmetic and logic unit (ALU) with the result being fed back to the input of one of the shift registers (the accumulator), which was one bit longer, since binary addition can only result in an answer that has the same size or is one bit longer.

Bitshift operations 

Many computer languages include bitwise operations to "shift right" and "shift left" the data in a register, effectively dividing by two or multiplying by two for each place shifted.

Shift register memory 
Very large serial-in serial-out shift registers (thousands of bits in size) were used in a similar manner to the earlier delay-line memory in some devices built in the early 1970s. Shift registers don't need many pins or address decoding logic, so was much cheaper than random-access memory back then. Such shift register memory was sometimes called circulating memory.

Datapoint 3300, for example, stored its terminal display of 25 rows of 72 columns of 6-bit upper-case characters using 54 200-bit shift registers (arranged in 6 tracks of 9 packs), providing storage for 1800 characters. The shift register design meant that scrolling the terminal display could be accomplished by simply pausing the display output to skip one line of characters. A similar design was used for the Apple I's terminal.

History
One of the first known examples of a shift register was in the Mark 2 Colossus, a code-breaking machine built in 1944. It was a six-stage device built of vacuum tubes and thyratrons. A shift register was also used in the IAS machine, built by John von Neumann and others at the Institute for Advanced Study in the late 1940s. Shift registers made their way into integrated circuits in the 1960s as evidenced by early patents from Frank Wanlass and Kent Smith working at General Instrument.

See also
 Delay-line memory
 Linear-feedback shift register (LFSR)
 Ring counter
 SerDes (Serializer/Deserializer)
 Serial Peripheral Interface Bus
 Shift register lookup table (SRL)
 Circular buffer

References

Digital registers
Computer memory
시프트 레지스터(shift register)는 디지털 회로에서 선형 방식으로 설치된 프로세서 레지스터의 집합이며, 회로가 활성화되었을 때 데이터를 줄 아래로 이동시키는 것과 같은 방법으로 입출력을 서로 연결하고 있다.

종류 
시프트 레지스터는 직렬 입력, 병렬 출력(SIPO)과 병렬 입력, 직렬 출력(PISO) 형태를 포함하여 직렬과 병렬로 입출력을 결합할 수 있다. 또한 직병렬 입력을 가진 형태와 직병렬 출력을 가진 형태가 있다. 또한 시프트 레지스터의 방향을 다르게 할 수 있는 양방향 시프트 레지스터도 있다. 그리고 레지스터의 직렬 입력과 출력은 원형 시프트 레지스터를 만들기 위해 서로 연결할 수도 있다. 하나의 시프트 레지스터는 더 복잡한 연산을 수행할 수 있는 다차원 시프트 레지스터를 만들 수 있다.

직렬 입출력

파괴 판독 
이것들은 가장 간단한 종류의 

시프트 레지스터이다. 데이터 문자열은 "데이터 입력"에 나타나고, "데이터 상승"이 높아질 때마다 한 단계씩 오른쪽으로 이동한다. 각각 상승되었을 때, 맨 왼쪽("데이터 입력")에 있는 비트는 첫 번째 플립플롭의 출력으로 이동한다. 맨 오른쪽("데이터 출력")에 있는 비트는 밖으로 이동해서 출력되고 손실된다.

데이터는 'Q' 출력의 각각의 플립플롭 뒤에 저장되므로 이 배열에서 4개의 저장 "슬롯"을 사용할 수 있으며, 따라서 4비트 레지스터이다. 이동하는 모양을 이해하기 위해서, 레지스터가 0000를 유지하고 있다고 상상해 보자.(그래서 모든 저장 슬롯은 비어 있다) "데이터 입력"이 레지스터에 1, 1, 0, 1, 0, 0, 0, 0(각 시간에 "데이터 상승" 펄스마다 이 순서대로. 이것을 클러킹 또는 스토브라고 부른다)을 나타내면, 결과는 오른 쪽 표와 같다. 왼쪽 열은 가장 왼쪽 플립플롭의 출력에 대응되며, 되풀이된다.

그래서 전체 레지스터의 직렬 출력은 00001011(마지막 단계는 세지 않음)이다. 보이는 것과 같이 데이터를 계속 입력한다면, 정확히 입력한 그대로 결과를 얻을 것이지만, 4개의 "데이터 상승" 주기에 의하여 상쇄된다. 이 배열은 큐와 동일한 하드웨어다. 또한, 어떠한 경우에도 전체 레지스터는 리셋(R) 핀을 증가시키면 모든 데이터를 0으로 설정할 수 있다. 이 배열은 "파괴 판독"을 수행한다. 데이터는 맨 오른쪽 비트 바깥으로 이동되면 손실되고 만다.

비파괴 판독 
비파괴 판독은 아래에 보이는 설정을 이용하여 얻을 수 있다. 다른 입력 줄이 추가된다 - 읽기(0)/쓰기(1) 제어. 이것이 1(즉, 쓰기)이면 시프트 레지스터는 정상적으로 동작하며, 입력 데이터는 모든 클럭 주기마다 한 칸씩 상승하고, 레지스터의 끝에서 손실된다. 그러나 R/W 제어 신호가 0(즉, 읽기)으로 설정되었으면, 오른쪽 레지스터의 바깥으로 이동하여 출력되는 모든 데이터는 왼쪽의 다음 입력이 되고, 시스템에 저장된다. 그러므로 R/W 제어 신호가 0으로 설정되는 한, 데이터가 시스템으로부터 손실될 수 없다.

이 애니메이션에서, 마지막 4개의 출력 비트는 맨 오른쪽에 보인다. R/W 제어신호가 0으로 설정되었을 때 데이터는 출력되고 레지스터의 입력으로 불러들이지만, R/W가 1이면 데이터는 시프트 바깥으로 나가고 손실된다.

직렬 입력, 병렬 출력 
이 설정은 직렬 형태에서 병렬 형태로 변환할 수 있다. 데이터는 위의 직렬 입력, 직렬 출력 (SISO) 부분에서 설명한 것처럼 직렬로 입력된다. 한번 데이터가 입력되면, 각 출력을 동시에 읽어들이거나 바깥으로 이동해 대체될 수 있다.

병렬 입력, 직렬 출력 
이 설정은 병렬 형태로 D1에서 D4까지 줄에 데이터를 입력한다. 데이터를 레지스터에 기록하기 위해서, 쓰기/시프트 제어신호는 반드시 1으로 고정되어야 한다. 데이터를 이동하기 위해서, W/S 제어 줄은 1 이고 레지스터는 클럭이 입력된다. 배열은 데이터 입력의 D1과 함께 직렬 입력, 직렬 출력(DISO) 시프트 레지스터처럼 동작한다. 그러나 클럭 주기의 횟수가 데이터 문자열의 길이보다 크지 않는 한, 데이터 출력, Q는, 순서대로 병렬 데이터를 읽어들일 것이다. 

아래의 애니메이션은 시프트 레지스터의 내부 상태를 포함하여, 쓰기/시프트 순서를 보여준다.

이 종류의 시프트 레지스터는 병렬 입력(D0 - D3)로부터 데이터를 취하고 레지스터가 클럭이 입력될 때 일치하는 출력(Q0 - Q3)으로 이동시킨다. 새로운 정보가 준비될 때까지, 시스템의 나머지 부분의 입력인 오래된 정보를 보존하면서, 시프트 레지스터는 "역사"의 종류처럼 사용될 수 있으며, 그래서 레지스터는 클럭이 입력되고, 새로운 데이터는 "통과된다".

주의: 입력 D0 - D3는 Q1 - Q4로 정확하지 않게 표시되었고 가장 높은 열을 뜻한다.

사용 
시프트 레지스터는 직렬과 병렬 인터페이스를 전환하는 데 가장 일반적으로 사용된다. 이것은 많은 회로가 병렬 비트의 집합으로 동작하기 때문에 유용하지만, 직렬 인터페이스의 구성이 더 간단하다. 시프트 레지스터는 간단한 지연 회로처럼 사용될 수 있다. 몇몇 양방향 시프트 레지스터는 스택의 하드웨어 구현을 위해서 병렬로 연결할 수도 있다.

시프트 레지스터는 펄스 확장기로 사용할 수도 있다. 단안정 멀티바이브레이터와 비교해서 타이밍은 구성요소의 값에 의존하지 않으나 외부 클럭이 요구되고 타이밍 정확성은 클럭의 입상도(granularity)에 의해 제한된다. 예시 - 로냐 트위스터는 다섯 개의 74164 시프트 레지스터가 이 방법으로 타이밍 논리의 코어를 생성한다.(회로도).

역사 
제일 처음 알려진 시프트 레지스터의 사례는 1940년대의 암호 해독 장비인 콜로서스 컴퓨터에서 사용된 것이었다. 이것은 진공관으로 만들어진 5-단계 소자였다.

외부 링크 

 시프트 레지스터 - AllAboutCircuits.com

디지털 레지스터