맨위로가기

시프트 레지스터

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

시프트 레지스터는 데이터를 저장하고 이동시키는 데 사용되는 디지털 회로로, 입력 및 출력 방식에 따라 직렬 입력 직렬 출력(SISO), 직렬 입력 병렬 출력(SIPO), 병렬 입력 직렬 출력(PISO), 병렬 입력 병렬 출력(PIPO)의 네 가지 주요 유형으로 분류된다. SISO는 가장 단순한 형태로, 데이터를 직렬로 입력받아 직렬로 출력하며, SIPO는 직렬 데이터를 병렬 데이터로 변환하는 데 사용된다. PISO는 병렬 데이터를 직렬 데이터로 변환하고, PIPO는 병렬 데이터를 입력받아 저장하고 클럭 신호에 따라 데이터를 이동시킨다. 시프트 레지스터는 직렬/병렬 인터페이스 변환, 지연 회로, 펄스 확장기, 데이터 처리 등 다양한 용도로 활용되며, 초기 컴퓨터에서는 데이터 처리 및 메모리 역할을 수행하기도 했다.

더 읽어볼만한 페이지

  • 디지털 레지스터 - 명령 레지스터
  • 디지털 레지스터 - 레지스터 파일
    레지스터 파일은 프로세서 내에서 데이터 저장 및 빠른 접근을 제공하는 메모리 장치로, 레지스터 뱅크 스위칭, 마이크로아키텍처 구현, 저전력 설계, 레지스터 리네이밍, 레지스터 윈도우 등의 기술을 통해 성능과 효율성을 높인다.
시프트 레지스터
기본 정보
종류순차 논리 회로
응용 분야디지털 회로
기억 장치
데이터 처리
구조 및 동작 원리
구성 요소플립플롭 (D 플립플롭, JK 플립플롭 등)
동작 원리클록 신호에 맞춰 데이터를 옆 플립플롭으로 이동시킴
직렬 입력 - 직렬 출력 (SISO)데이터가 직렬로 입력되고 직렬로 출력됨
직렬 입력 - 병렬 출력 (SIPO)데이터가 직렬로 입력되고 병렬로 출력됨
병렬 입력 - 직렬 출력 (PISO)데이터가 병렬로 입력되고 직렬로 출력됨
병렬 입력 - 병렬 출력 (PIPO)데이터가 병렬로 입력되고 병렬로 출력됨
응용
주된 용도시프트 레지스터는 데이터를 저장하거나 전송하는 데 사용됨
데이터의 직렬-병렬 변환, 병렬-직렬 변환에 사용됨
디지털 회로에서 시간 지연을 발생시키는 데 사용됨
산술 연산 (곱셈, 나눗셈)에 사용될 수 있음
추가 정보
관련 용어플립플롭
레지스터
순차 논리 회로

2. 종류

시프트 레지스터는 입력과 출력 방식에 따라 네 가지 주요 유형으로 분류된다.


  • 직렬-직렬 (SISO): 직렬 입력과 직렬 출력을 가지는 형태로, 가장 단순한 형태이다.
  • 직렬-병렬 (SIPO): 직렬 입력을 받아 병렬 출력을 제공한다. 직렬 데이터를 병렬 데이터로 변환하는 데 사용된다.
  • 병렬-직렬 (PISO): 병렬 입력을 받아 직렬 출력을 제공한다. 병렬 데이터를 직렬 데이터로 변환하는 데 사용된다.
  • 병렬-병렬 (PIPO): 병렬 입력과 병렬 출력을 가지는 형태로, 입력된 데이터를 그대로 유지하거나 클럭 신호에 따라 시프트하는 데 사용된다.


이 외에도 시프트 방향을 변경할 수 있는 양방향 시프트 레지스터와, 직렬 입력과 출력을 연결하여 순환 구조를 만드는 원형 시프트 레지스터가 있다. 또한, 다차원 시프트 레지스터를 구성하여 더 복잡한 연산을 수행할 수도 있다.

2. 1. 직렬 입출력 (SISO)

직렬 입출력(SISO) 시프트 레지스터는 가장 단순한 형태이다. 데이터는 직렬로 입력 단자를 통해 들어오고, 트리거 클럭 신호가 있을 때마다 플립플롭을 한 칸씩 이동한다. 첫 번째 플립플롭에는 입력 데이터(비트)가 저장되고, 마지막 플립플롭에 있던 데이터(비트)는 출력되면서 손실된다.

플립플롭 하나당 1비트의 데이터를 저장할 수 있으므로, 4개를 사용하면 4비트 레지스터가 된다. 예를 들어 초기값이 0000(모든 저장 공간이 비어 있음)이고, 입력이 1, 1, 0, 1, 0, 0, 0, 0 순서로 들어온다면, 아래 표와 같이 상태가 변한다.

4비트 시프트 레지스터의 사용 예시 (입력: 10110000)
시간출력 1출력 2출력 3출력 4
00000
11000
20100
31010
41101
50110
60011
70001
80000



위 표에서 왼쪽 열은 입력에 가까운 플립플롭을 나타낸다. 이 경우 출력은 00010110이 된다. 입력을 계속하면, 입력된 값과 같은 순서로 출력을 얻을 수 있다.

일반적으로 SISO 시프트 레지스터는 출력된 데이터가 손실되지만(파괴 판독), 입력된 비트열을 보존하는 회로를 구성할 수도 있다(비파괴 판독).

2. 1. 1. 파괴 판독

데이터는 맨 오른쪽 비트로 이동되면서 손실된다. 데이터 입력을 계속하면 정확히 입력된 값 그대로 결과를 얻을 것이지만, 4개의 "데이터 상승" 주기에 의해 상쇄된다. 이 배열은 와 동일한 하드웨어이며, 간단한 지연 회로로 사용될 수 있다.

2. 1. 2. 비파괴 판독

읽기/쓰기 제어 신호를 추가하여 비파괴 판독을 구현할 수 있다. 읽기/쓰기 제어 신호가 1(쓰기)이면 시프트 레지스터는 평소처럼 작동하여 입력 데이터가 클럭 주기에 따라 한 칸씩 이동하고 레지스터 끝에서 데이터가 손실된다. 그러나 읽기/쓰기 제어 신호가 0(읽기)으로 설정되면 출력되는 데이터가 다시 시프트 레지스터의 입력으로 되돌아가 시스템에 보존된다.[1]

R/W 제어 신호가 0일 때 데이터는 출력되어 레지스터의 입력으로 다시 들어가지만, R/W가 1이면 데이터는 시프트 레지스터 밖으로 나가 사라진다.[1]

2. 2. 직렬 입력, 병렬 출력 (SIPO)

이 구성은 직렬 데이터를 병렬 데이터 형식으로 변환할 수 있게 해준다. 데이터 입력은 앞서 SISO 섹션에서 설명한 것처럼 직렬 방식이다. 데이터가 클럭에 따라 입력되면 각 출력에서 동시에 읽을 수 있거나, 시프트 아웃될 수 있다.

4비트 직렬 입력 병렬 출력 시프트 레지스터


이 구성에서 각 플립플롭은 에지 트리거 방식이다. 모든 플립플롭은 주어진 클럭 주파수에서 작동한다. 각 입력 비트는 N번의 클럭 사이클 후에 N번째 출력으로 전달되어 병렬 출력을 생성한다.

병렬 출력이 직렬 로딩 과정 동안 변경되지 않아야 하는 경우, 래치되거나 버퍼링된 출력을 사용하는 것이 바람직하다. 래치된 시프트 레지스터 (예: 74595)에서 직렬 데이터는 먼저 내부 버퍼 레지스터에 로드된 다음, 로드 신호를 수신하면 버퍼 레지스터의 상태가 출력 레지스터 세트로 복사된다. 일반적으로, 직렬 입력/병렬 출력 시프트 레지스터의 실용적인 응용 분야는 단일 와이어의 직렬 형식 데이터를 여러 와이어의 병렬 형식으로 변환하는 것이다.

2. 3. 병렬 입력, 직렬 출력 (PISO)

병렬 입력 직렬 출력(PISO) 시프트 레지스터는 병렬 데이터를 직렬 데이터로 변환하는 데 사용된다. 여러 개의 입력 라인(D1~D4)에 병렬 데이터를 입력하고, 쓰기/시프트(W/S) 제어 신호와 클럭 신호에 따라 데이터를 직렬로 출력한다.

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

4비트 병렬입력, 직렬출력(PISO) 시프트 레지스터


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



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

데이터를 쓰려면 Write/Shift 제어 신호를 LOW로 해야 한다. 데이터를 시프트하려면 W/S 제어 신호를 HIGH로 하고 클록 신호를 인가한다. 첫 번째 플립플롭에 대한 입력만 사용하면, SISO 시프트 레지스터로도 기능한다.

2. 4. 병렬 입력, 병렬 출력 (PIPO)

병렬 입력 병렬 출력형(PIPO) 시프트 레지스터는 병렬 데이터를 입력으로 받아 클록 신호가 구동될 때까지 그 내용을 유지하고, 클록 신호에 의해 좌우로 시프트한다. 이는 일종의 이력 정보를 보존하는 데 사용된다.

3. 양방향 시프트 레지스터

시프트 방향을 변화시킬 수 있는 시프트 레지스터이다.

4. 원형 시프트 레지스터

SISO 시프트 레지스터의 입력과 출력을 연결하면 원형 시프트 레지스터를 구성할 수 있다. 이 구조에서는 데이터가 레지스터 내에서 순환한다.

5. 다차원 시프트 레지스터

여러 개의 시프트 레지스터를 결합하여 다차원 시프트 레지스터를 구성하면 복잡한 연산을 수행할 수 있다.

6. 사용

시프트 레지스터는 다음과 같이 다양한 용도로 활용된다.


  • 직렬-병렬 인터페이스 변환: 시프트 레지스터는 직렬과 병렬 인터페이스 간의 변환에 사용된다. 많은 회로가 병렬 비트의 집합으로 동작하지만, 직렬 인터페이스는 구성이 더 간단하기 때문이다.
  • 지연 회로: SISO(직렬 입력 직렬 출력) 시프트 레지스터는 간단한 디지털 지연 회로로 사용될 수 있다.
  • 펄스 확장기: 시프트 레지스터는 입력 펄스의 폭을 확장하는 데 사용될 수 있다. 단안정 멀티바이브레이터와 비교해서 타이밍이 구성요소의 값에 의존하지 않으나 외부 클럭이 요구되고 타이밍 정확성은 클럭의 입상도(granularity)에 의해 제한된다. 예를 들어 로냐 트위스터는 5개의 74164 시프트 레지스터를 사용하여 타이밍 논리의 코어를 생성한다.
  • 데이터 처리: 초창기 컴퓨터에서 시프트 레지스터는 데이터 처리에 사용되었다. 예를 들어, 두 개의 시프트 레지스터에 들어있는 값을 더하는 연산을 직렬 가산기를 통해 적은 하드웨어 자원으로 수행할 수 있었다.
  • 비트 연산: 많은 컴퓨터 언어는 레지스터의 데이터를 "오른쪽 시프트" 및 "왼쪽 시프트"하는 비트 연산을 포함한다.
  • 순환 메모리: 1970년대 초, 대형 SISO 시프트 레지스터는 수은 지연선을 대체하여 사용되기도 했다. 데이터포인트 3300 터미널은 1800개의 문자를 저장하기 위해 54개의 200비트 시프트 레지스터를 사용했다.


몇몇 양방향 시프트 레지스터는 스택의 하드웨어 구현을 위해서 병렬로 연결할 수도 있다.

6. 1. 직렬/병렬 인터페이스 변환

시프트 레지스터는 직렬 인터페이스와 병렬 인터페이스 간의 변환에 가장 일반적으로 사용된다. 많은 논리 회로는 비트 열을 병렬로 처리하지만, 인터페이스로서는 직렬 방식이 구성하기 쉽기 때문이다.

이 구성은 직렬 데이터를 병렬 데이터 형식으로 변환할 수 있게 해준다. 데이터 입력은 SISO 섹션에서 설명한 것처럼 직렬 방식이다. 데이터가 클럭에 따라 입력되면 각 출력에서 동시에 읽을 수 있거나, 시프트 아웃될 수 있다.

이 구성에서 각 플립플롭은 에지 트리거 방식이다. 모든 플립플롭은 주어진 클럭 주파수에서 작동한다. 각 입력 비트는 N번의 클럭 사이클 후에 N번째 출력으로 전달되어 병렬 출력을 생성한다.

병렬 출력이 직렬 로딩 과정 동안 변경되지 않아야 하는 경우, 래치되거나 버퍼링된 출력을 사용하는 것이 바람직하다. 래치된 시프트 레지스터 (예: 74595)에서 직렬 데이터는 먼저 내부 버퍼 레지스터에 로드된 다음, 로드 신호를 수신하면 버퍼 레지스터의 상태가 출력 레지스터 세트로 복사된다. 일반적으로, 직렬 입력/병렬 출력 시프트 레지스터의 실용적인 응용 분야는 단일 와이어의 직렬 형식 데이터를 여러 와이어의 병렬 형식으로 변환하는 것이다.

SerDes도 참조

6. 2. 지연 회로

SISO(직렬 입력 직렬 출력) 시프트 레지스터는 간단한 디지털 지연 회로로 사용될 수 있다.[1] 데이터는 직렬로 입력 단자에 입력되며, 트리거 클록 신호가 입력될 때마다 플립플롭을 1단씩 진행한다. 이때 입력이 연결된 첫 번째 플립플롭에 입력 데이터(비트)가 저장되고, 마지막 단 플립플롭이 가지고 있던 데이터(비트)는 출력되어 손실된다.

6. 3. 펄스 확장기

시프트 레지스터는 입력 펄스의 폭을 확장하는 데 사용될 수 있다. 단안정 멀티바이브레이터와 비교해서 타이밍은 구성요소의 값에 의존하지 않으나 외부 클럭이 요구되고 타이밍 정확성은 클럭의 입상도(granularity)에 의해 제한된다.[1] 예를 들어 로냐 트위스터는 다섯 개의 74164 시프트 레지스터를 사용하여 타이밍 논리의 코어를 생성한다.([http://ronja.twibright.com/schematics/twister.png 회로도]).[1]

6. 4. 데이터 처리

초창기 컴퓨터에서 시프트 레지스터는 데이터 처리에 사용되었다. 더해질 두 숫자는 두 개의 시프트 레지스터에 저장되었고, 그 값은 산술 논리 장치(ALU)로 클럭되어 전송되었다. 그 결과는 시프트 레지스터 중 하나(누산기)의 입력으로 다시 전달되었는데, 이 시프트 레지스터는 1비트 더 길었다. 이진 덧셈의 결과는 크기가 같거나 1비트 더 긴 답이 나올 수 있기 때문이다. 예를 들어 2개의 시프트 레지스터에 들어있는 값의 덧셈은 직렬 가산기에 의해 최소의 하드웨어 자원으로 실현할 수 있다.

6. 5. 비트 시프트 연산

많은 컴퓨터 언어는 레지스터의 데이터를 "오른쪽 시프트" 및 "왼쪽 시프트"하는 비트 연산을 포함하여, 시프트된 각 자리마다 2로 나누거나 2를 곱하는 효과를 낸다.

6. 6. 시프트 레지스터 메모리 (순환 메모리)

1970년대 초, 매우 큰 직렬 입력 직렬 출력(SISO) 시프트 레지스터(수천 비트 크기)는 일부 장치에서 초기 지연선 메모리와 유사하게 사용되었다. 당시 시프트 레지스터는 많은 핀이나 주소 디코딩 로직이 필요하지 않아 램보다 훨씬 저렴했다.[2] 이러한 시프트 레지스터 메모리는 ''순환 메모리''라고도 불렸다.

예를 들어 데이터포인트 3300 터미널은 25 행, 72 열의 6비트 대문자 문자로 구성된 디스플레이를 가졌는데, 1800개의 문자를 저장하기 위해 54개의 200비트 시프트 레지스터(6트랙, 각 트랙당 9개)를 사용했다. 시프트 레지스터 설계 덕분에 터미널 디스플레이를 스크롤할 때 디스플레이 출력을 일시 중지하고 문자 한 줄을 건너뛸 수 있었다.[3] 애플 I 터미널에도 유사한 설계가 사용되었다.[4]

7. 역사

시프트 레지스터의 초기 사례 중 하나는 1944년에 제작된 암호 해독 기계인 콜로서스 Mark 2이다. 이 장치는 6단계로 구성되었으며, 진공관사이리스터로 제작되었다.[5] 1940년대 후반 존 폰 노이만 등이 고등 연구소에서 제작한 IAS 머신에도 시프트 레지스터가 사용되었다. 1960년대에는 프랭크 완라스[6]와 켄트 스미스[7]가 제너럴 인스트루먼트에서 연구하면서 초창기 특허를 통해 시프트 레지스터가 집적 회로에 도입되었다.

참조

[1] 특허 Shift register delay circuit https://patents.goog[...] 1985-07-16
[2] 웹사이트 Inside the Intel 1405: die photos of a shift register memory from 1970 http://www.righto.co[...] 2014
[3] 웹사이트 DataPoint 3300 Maintenance Manual http://bitsavers.org[...] Datapoint Corporation 1976-12
[4] 웹사이트 Inside the Apple-1's shift-register memory http://www.righto.co[...]
[5] 간행물 The Design of Colossus http://www.ivorcatt.[...]
[6] 웹사이트 Shift register system https://patents.goog[...]
[7] 웹사이트 Electronic shift register system https://patents.goog[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com