- 시프트 레지스터 란?
- 디지털 전자 장치의 레지스터 유형
- 1. 직렬 입력-직렬 출력 시프트 레지스터
- 2. 직렬 입력 – 병렬 출력 시프트 레지스터
- 3. 병렬 입력 – 직렬 출력 시프트 레지스터
- 4. 병렬 입력 – 병렬 출력 시프트 레지스터
- 5. 양방향 시프트 레지스터
- 6. 카운터
- 시프트 레지스터의 응용
시프트 레지스터 란?
시프트 레지스터는 데이터를 저장하고 전송할 수있는 순차 논리 회로 입니다. 이들은 생성되는 시프트 레지스터의 유형에 따라 하나의 플립 플롭의 출력이 다른 플립 플롭의 입력 역할을 할 수 있도록 연결된 플립 플롭으로 구성됩니다.
시프트 레지스터 는 기본적으로 데이터를 전송 ("시프트") 할 수있는 레지스터 유형입니다. 레지스터는 일반적으로 특정 수의 플립 플롭을 직렬로 연결하여 생성되는 저장 장치이며 레지스터에 의해 저장 될 수있는 데이터의 양 (비트 수)은 항상 플립 플롭의 수에 정비례합니다. 플롭은 한 번에 한 비트 만 저장할 수 있습니다. 한 플립 플롭의 출력이 다른 플립 플롭의 입력이되는 방식으로 레지스터의 플립 플롭이 연결되면 시프트 레지스터가 생성됩니다.
플립 플롭 은 래치 와 유사한 작동을하는 장치입니다. 두 상태 (0 또는 1) 사이를 이동할 수 있고 데이터를 비트 단위로 저장할 수있는 쌍 안정 진동기라고 할 수 있습니다. 새로운 데이터는 각 클럭 사이클과 출력에서 전송 된 이전 데이터와 함께 플립 플롭으로 읽혀집니다.
시프트 레지스터는 어떤 플립 플롭으로 구성됩니까?
그러나 이는 플립 플롭의 종류에 따라 달라지며, 플립 플롭 간의 입력, 출력 및 클럭 사이클 관계가 다양합니다. 다양한 종류의 플립 플롭이 있지만 시프트 레지스터 생성에 가장 일반적으로 사용되는 것은 D (지연) 플립 플롭입니다.
D 플립 플롭의 작동을 위해 D 플립 플롭의 클럭이 변경 될 때마다 (플립 플롭의 사양에 따라 상승 또는 하강 에지). 출력 "Q" 의 데이터는 입력 "D" 의 데이터와 동일한 데이터가됩니다 . 플립 플롭 의 출력 "Q" 는 다음 클록 사이클까지 해당 값에 머무르며 입력에서 값 (High 또는 low, 1 또는 0)으로 다시 변경됩니다.
이제 우리는 Sift 레지스터가 무엇인지 알았으므로 플립 플롭 유형과 그 응용 프로그램에 대해 더 자세히 살펴 보겠습니다. 그러나 그 전에 시프트 레지스터가 사용되는 위치에 대한보다 실용적인 노출을 제공하기 위해 디스플레이 또는 LED 시퀀스를 인터페이스하기 위해 다른 마이크로 컨트롤러와 함께 사용했던 인기있는 시프트 레지스터 74HC595를 살펴 보겠습니다.
- Arduino가있는 74HC595로 레지스터를 시프트하여 LED 시퀀스 제어
- 7- 세그먼트 디스플레이 인터페이스로 ESP32가있는 시프트 레지스터
- 여러 LED를 제어하기 위해 Raspberry Pi로 레지스터 시프트
- LED 시퀀스 제어를위한 PIC가있는 시프트 레지스터
디지털 전자 장치의 레지스터 유형
시프트 레지스터는 주로 직렬 또는 병렬 작동 모드 에 따라 유형으로 분류됩니다 .
아래에 나열된 6 가지 기본 유형의 시프트 레지스터 가 있지만 일부는 데이터 흐름의 방향에 따라 오른쪽으로 시프트하거나 왼쪽으로 시프트 할 수 있습니다.
1. 직렬 입력 – 직렬 출력 시프트 레지스터 (SISO)
2. 직렬 입력 – 병렬 출력 시프트 레지스터 (SIPO)
3. 병렬 입력 – 병렬 출력 시프트 레지스터 (PIPO)
4. 병렬 입력 – 직렬 출력 시프트 레지스터 (PISO)
5. 양방향 시프트 레지스터
6. 카운터
1. 직렬 입력-직렬 출력 시프트 레지스터
직렬 입력 – 직렬 출력 시프트 레지스터는 데이터를 직렬 (클럭 사이클 당 1 비트)로 스트리밍하고 동일한 방식으로 차례로 데이터를 스트리밍하는 시프트 레지스터입니다.
간단한 직렬 입력 – 직렬 출력 4 비트 시프트 레지스터 가 위에 나와 있으며, 레지스터는 4 개의 플립 플롭으로 구성되며 작동 방식에 대한 설명은 아래에 설명되어 있습니다.
시작시 시프트 레지스터가 먼저 지워지고 모든 플립 플롭의 출력이 0이되고 입력 데이터가 한 번에 한 비트 씩 직렬로 입력에 적용됩니다.
SISO 시프트 레지스터를 통해 데이터를 이동 하는 두 가지 기본 방법 이 있습니다.
- 비파괴 판독
- 파괴적인 판독
- 비파괴 판독
비파괴 판독 기반의 시프트 레지스터에는 항상 읽기 / 쓰기 작동 모드가 있으며 읽기 및 쓰기 작동 모드간에 전환 할 수 있도록 추가 라인이 추가됩니다.
장치가 "쓰기"작동 모드에있을 때 시프트 레지스터는 파괴적 판독 버전과 똑같이 작동하여 한 번에 한 비트 씩 각 데이터를 이동시켜 데이터가 손실되지만 작동 모드가 "읽기"로 전환되면 데이터 입력에서 시프트 아웃되는 것은 시스템으로 다시 들어가 시프트 레지스터에 대한 입력으로 사용됩니다. 이렇게하면 데이터가 더 오래 유지됩니다 (읽기 모드에있는 한).
- 파괴적인 판독
파괴적인 판독의 경우 플립 플롭이 정보를 이동하기 때문에 데이터가 완전히 손실됩니다. 위의 4 비트 시프트 레지스터에 대해 "1101"이라는 단어를 보내려고합니다. 시프트 레지스터를 지운 후 모든 플립 플롭의 출력은 0이되므로이 데이터 (1101)를 직렬로 적용하는 첫 번째 클럭 사이클 동안 플립 플롭의 출력은 아래 표와 같습니다.
첫 번째 클록주기:
FF0 |
FF1 |
FF2 |
FF3 |
1 |
0 |
0 |
0 |
두 번째 클록주기:
FF0 |
FF1 |
FF2 |
FF3 |
0 |
1 |
0 |
0 |
세 번째 클록주기:
FF0 |
FF1 |
FF2 |
FF3 |
1 |
0 |
1 |
0 |
네 번째 클록주기:
FF0 |
FF1 |
FF2 |
FF3 |
1 |
1 |
0 |
1 |
2. 직렬 입력 – 병렬 출력 시프트 레지스터
우리가 고려할 두 번째 유형의 시프트 레지스터는 SIPO 시프트 레지스터라고도하는 직렬 입력-병렬 출력 시프트 레지스터 입니다. 이러한 유형의 시프트 레지스터는 데이터를 직렬에서 병렬로 변환하는 데 사용됩니다. 데이터는 클럭 사이클마다 하나씩 들어오고 각 출력에서 이동 및 교체되거나 읽혀질 수 있습니다. 즉, 데이터를 읽을 때 각 읽기 비트는 해당 출력 라인에서 동시에 사용할 수 있습니다 (아래에 표시된 4 비트 시프트 레지스터의 경우 Q0 – Q3).
4 비트 직렬 입력 – 병렬 출력 시프트 레지스터는 아래 이미지에 나와 있습니다.
아래는 데이터가 1001로 입력 된 병렬 출력 4 비트 시프트 레지스터에서 데이터가 직렬 외부로 시프트되는 방법을 보여주는 표입니다.
맑은 |
FF0 |
FF1 |
FF2 |
FF3 |
1001 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
0 |
1 |
0 |
0 |
|
0 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
직렬 입력-병렬 출력 시프트 레지스터의 좋은 예 는 8 비트 시프트 레지스터 인 74HC164 시프트 레지스터입니다.
이 장치에는 2 개의 직렬 데이터 입력 (DSA 및 DSB), 8 개의 병렬 데이터 출력 (Q0 ~ Q7)이 있습니다. 데이터는 DSA 또는 DSB를 통해 직렬로 입력되며 두 입력 중 하나는 다른 입력을 통한 데이터 입력을위한 활성 HIGH 활성화로 사용될 수 있습니다. 데이터는 클럭 (CP) 입력의 LOW에서 HIGH로 전환 될 때 이동합니다. 마스터 리셋 입력 (MR)의 LOW는 레지스터를 지우고 다른 입력에 관계없이 모든 출력을 LOW로 강제합니다. 입력에는 클램프 다이오드가 포함됩니다. 이를 통해 전류 제한 저항을 사용하여 VCC를 초과하는 전압에 대한 입력을 인터페이스 할 수 있습니다.
3. 병렬 입력 – 직렬 출력 시프트 레지스터
병렬 입력-직렬 출력 시프트 레지스터에서 데이터는 병렬로 제공됩니다. 예를 들어 아래에 표시된 4 비트 레지스터를 고려하십시오.
이 레지스터는 쓰기 / 시프트 (WS) 제어 입력이 시프트 레지스터의 작동 모드를 제어하는 4 비트 워드를 저장하고 시프트하는 데 사용할 수 있습니다. WS 제어 라인이 낮 으면 (쓰기 모드) D0에서 D3까지 데이터를 쓰고 클럭 인 할 수 있습니다. 데이터를 직렬로 이동하기 위해 WS 제어 라인이 HIGH (Shift 모드)가되고 레지스터는 클럭 입력에서 데이터를 이동합니다. 병렬 시프트 레지스터는 PISO 시프트 레지스터 라고도 합니다.
병렬 입력-직렬 출력 시프트 레지스터의 좋은 예는 74HC165 8 비트 시프트 레지스터이며 직렬 입력-직렬 출력 시프트 레지스터로 도 작동 할 수 있습니다.
이 장치는 직렬 데이터 입력 (DS), 8 개의 병렬 데이터 입력 (D0 ~ D7) 및 2 개의 보완 직렬 출력 (Q7 및 Q7 ')을 갖추고 있습니다. 병렬로드 입력 (PL)이 LOW이면 D0에서 D7까지의 데이터가 시프트 레지스터에 비동기 적으로로드됩니다. PL이 HIGH 일 때 데이터는 DS에서 레지스터에 직렬로 들어갑니다. 클럭 인 에이블 입력 (CE)이 LOW 인 경우 데이터는 CP 입력의 LOW에서 HIGH로 전환 될 때 이동합니다. CE에서 HIGH는 CP 입력을 비활성화합니다. 입력은 15V까지의 과전압 내성이 있습니다.이를 통해 장치를 HIGH에서 LOW로 레벨 전환 애플리케이션에 사용할 수 있습니다.
시프트 레지스터의 기능 다이어그램은 다음과 같습니다.
시스템의 타이밍 다이어그램은 아래 이미지와 같습니다.
4. 병렬 입력 – 병렬 출력 시프트 레지스터
병렬 입력-병렬 출력 시프트 레지스터의 경우 병렬 출력의 출력 데이터는 입력 데이터가 공급 될 때 동시에 나타납니다. 이러한 유형의 시프트 레지스터는 PIPO 시프트 레지스터 라고도 합니다.
D0에서 D3까지의 각 입력 핀의 입력 데이터는 장치가 클럭킹 될 때 동시에 읽혀지며 동시에 각 입력에서 읽은 데이터는 해당 출력에서 전달됩니다 (Q0에서 Q3).
74HC195 시프트 레지스터는 범용 시프트 레지스터 밖으로 병렬 시프트 레지스터 - 우리가 병렬로 특히 지금까지 설명한 모든 유형 설명 모드에서 대부분 작동 할 수있다.
5. 양방향 시프트 레지스터
시프트 레지스터는 시프트 레지스터의 종류와 구성에 따라 오른쪽 또는 왼쪽 데이터 시프트 또는 둘 다를 수행 할 수 있습니다. 오른쪽 시프트 연산에서 이진 데이터는 2로 나뉩니다. 이 작업을 반대로하면 이진 데이터에 2가 곱해집니다. 조합 논리를 적절히 적용하면 직렬 시프트 레지스터를 구성하여 두 작업을 모두 수행 할 수 있습니다.
아래 이미지의 4 비트 레지스터를 고려하십시오. 두 개의 NAND 게이트는 OR 게이트로 구성되며 오른쪽 또는 왼쪽으로 이동 방향을 제어하는 데 사용됩니다.
왼쪽 / 쓰기 제어 라인은 데이터가 오른쪽 또는 왼쪽으로 이동되는 방향을 결정하는 데 사용됩니다.
74HC194 양방향 시프트 레지스터가 좋은 예입니다. 레지스터는 직렬 및 병렬 입력 또는 출력의 모든 모드와 변형에서 작동 할 수 있습니다. 제어 라인, 클록, 입력 및 출력 핀을 강조하는 74HC194의 기능 다이어그램은 다음과 같습니다.
장치의 타이밍 다이어그램도 아래에 나와 있습니다. 제어 라인이 레지스터의 동작을 제어하는 방법을 이해하는 데 도움이됩니다.
6. 카운터
회전 시프트 레지스터 라고도하는 카운터 는 기본적으로 특정 패턴을 생성하는 방식으로 출력이 입력으로 장치에 피드백되는 시프트 레지스터입니다. 이러한 종류의 레지스터는 표시되는 패턴과 시퀀스 때문에 카운터라고합니다. 가장 많이 사용되는 시프트 레지스터 카운터 유형은 링 카운터 입니다.
링 카운터
링 카운터는 기본적으로 최상위 비트의 출력이 최하위 비트에 대한 입력으로 피드백되는 카운터 유형입니다. 4 비트 링 카운터는 D 플립 플롭을 사용하는 아래 다이어그램에 나와 있습니다.
클럭 펄스가 적용되면 각 단계의 출력이 다음 단계로 이동하고 사이클이 계속 진행됩니다. 클리어가 하이로 설정되면 첫 번째 플립 플롭 (1로 설정 됨)을 제외한 모든 플립 플롭이 0으로 재설정됩니다.
시프트 레지스터의 응용
시프트 레지스터는 많은 응용 프로그램에서 사용됩니다.
1. 병렬에서 직렬로 변환. 직렬 통신은 일반적으로 전송되는 비트 수에 따라 달라지는 병렬에 비해 두 개의 와이어 만 필요하므로 두 장치 간의 통신에 필요한 와이어 수 또는 라인 수를 줄이는 데 사용됩니다.
2. 마이크로 컨트롤러를위한 IO 확장. 현대 전자 제품에서 마이크로 컨트롤러 IO 핀은 부동산이라고하며 100 개의 LED를 켜거나 Arduino 또는 Atmeg328p 마이크로 컨트롤러와 같은 것을 사용하여 100 개의 리드 스위치를 읽는 것과 같은 특정 애플리케이션에 대해 가능한 한 많이 필요합니다. 예를 들어, 아래의 회로도는 마이크로 컨트롤러 IO 핀 중 3 개만 사용하여 직렬-병렬 시프트 레지스터를 사용하여 8 개의 LED를 제어하는 방법을 보여줍니다.
3. 순차 장치 에서 사용되는 상태 레지스터에서 사용됩니다. 유한 메모리 머신과 마찬가지로 장치의 다음 상태는 항상 새 데이터를 이전 위치로 이동하고 삽입하여 결정됩니다.
4. 다른 주요 응용 프로그램은 시간 지연 에서 찾을 수 있습니다. 시프트 레지스터는 클록에 의해 시간이 조정되는 장치의 시간 지연에 사용되거나 계단식 시프트 레지스터에 의해 증가되거나 하위 비트에서 출력을 가져 와서 감소됩니다.
시간 지연은 일반적으로 공식을 사용하여 계산됩니다.
t = N * (1 / fc)
N은 출력을 취하는 플립 플롭 스테이지의 수이고, Fc는 클럭 신호의 주파수이며, 결정되는 값인 t는 출력이 지연되는 시간입니다.
넓은 범위로 인해 특정 작업에 대한 시프트 레지스터 를 선택할 때 작동 모드, 비트 크기 (플립 플롭 수), 오른쪽 또는 왼쪽 또는 왼쪽과 같은 사항을 고려하여 특정 요구에 맞는 것을 선택하는 것이 중요합니다. 양방향 등
의 일부 에서 가장 인기있는 시프트 레지스터가 있습니다;
- 74HC 194 4 비트 양방향 범용 시프트 레지스터
- 74HC 198 8 비트 양방향 범용 시프트 레지스터
- 74HC595 Serial-In-Parallel-Out 시프트 레지스터
- 74HC165 Parallel-In-Serial-Out 시프트 레지스터
- IC 74291 4 비트 범용 시프트 레지스터, 이진 업 / 다운 카운터, 동기식.
- IC 74395 3- 상태 출력이있는 4 비트 범용 시프트 레지스터.
- IC 74498 병렬 입력 및 3 상태 출력이있는 8 비트 양방향 시프트 레지스터.
- IC 74671 4 비트 양방향 시프트 레지스터.
- IC 74673 출력 저장 레지스터가있는 16 비트 직렬 입력 직렬 출력 시프트 레지스터.
- IC 74674 3 개 상태 출력이있는 16 비트 병렬 입력 직렬 출력 시프트 레지스터.
몇 가지가 더 있습니다. 귀하의 애플리케이션에 가장 적합한 것을 찾아야합니다.
읽어 주셔서 감사합니다.