2.4 ~ 2.5 Registers ~ Shift Registers
💡 Registers란 무엇인가?
레지스터는 이진(binary) 값을 저장하는 소자이다.
이진 값은 0과 1 두 가지 상태만을 가지는 수체계이기 때문에, 레지스터는 이러한 이진 정보를 저장하는 데 사용된다.
좀 더 쉽게 설명하자면, 레지스터는 여러 개의 플립플롭으로 구성된 장치로, 각각의 플립플롭이 1비트의 정보를 저장할 수 있다.
이때, 1비트는 이진 값인 0 또는 1을 의미한다. 예를 들어, 4비트 레지스터라면, 4개의 플립플롭으로 이루어져 있고, 한 번에 4개의 이진 값을 저장할 수 있다. 이 경우, 저장 가능한 값은 0000(이진수)부터 1111(이진수)까지 총 16가지이다.
메모리와는 다르게 빠르게 접근하기 위해서 임시 저장소라고 보면 된다.
4 - bit register: clock의 상태에 따라 저장되고 수정된다.
현재 위 회로의 상황을 설명해보면 아래와 같다.
- Clock pulse
- 상승 엣지: 상승할 때 작동하는 형태
- Clear
- 이렇게 Clock pulse나 input에 관계없이 Flip-flop의 상태를 변경하는 것을 Direct Input이라고 한다.
- Clear의 Input이 0이라면 A0, A1, A2, A3의 출력이 모두 0으로 초기화된다.
- Direct input은 Flip-flop을 초기화 시키거나 특정 값으로 설정할 떄 사용한다.
A0, A1, A2, A3의 출력이 모두 0으로 초기화되었다고 가정했을 때 위 회로의 진행상황
1. I0, I1, I2, I3의 입력이 각각 0 1 0 1 라고 가정
2. A0, A1, A2, A3의 출력은 각각 0 0 0 0 으로 초기화 된 상태
3. Clock pulse가 증가한다
4. A0, A1, A2, A3의 출력은 각각 0 1 0 1로 변경
❓ 그럼 값을 임시적으로 저장하는 건 어떻게 하는걸까?
Clock pulse가 상승하고 값이 변경되고 또 상승하기 직전까지 변경된 값이 저장(유지)된다.
4 - bit Register with parallel load(병렬 저장이 가능한 레지스터): clock 뿐만 아니라, Load의 값에 따라서 저장될지 or 수정될지를 결정한다.
Dn은 Load' * A(n) + Load * I(n)이다.
이 식을 바탕으로 Load가 0, 1일 때 어떻게 상황이 바뀌는지 살펴보자.
Load가 0일 때
- Dn = 1 * A(n) + 0 * I(n) = A(n)이다.
- 따라서 Clock이 상승해도 값은 변하지 않는다. -> 출력 값이 입력으로 들어가고 또 입력이 출력으로 나오기 때문에 영향을 받지 않는다.
Load가 1일 때
- Dn = 0* A(n) + 1 * I(n) = I(n)이다.
- 따라서 Clock이 상승하면 값은 I(n)으로 변경된다. -> 입력 값 I가 D의 입력으로 들어가서 출력으로 나오기 때문에 기존 값에서 변경된다.
[요약]
Load가 0이면 Clock pulse가 상승해도 Input의 상태를 유지하다가, Load가 1이 되는 순간 그 당시 I(n)에 있는 값이 Clock pulse가 상승할 때 출력 A(n)으로 전달해주는 회로이다.
4 - bit shift Register
아래의 사진을 보면 바로 이해가 될 것이다.
간단하게 설명하자면 Serial Input이 1 0 1 1일 때, Clock pulse가 상승할 때 Q의 값을 옆으로 하나씩 밀려나게 되어 최종적으로 1 0 1 1 각각 들어가게 된다.
Bidirectional shift register with parraller load
: 위에서 배운 두개가 모두 있는 회로
직접 Function table을 만들어보자.
[S(1) = 0, S(0) = 0인 경우 즉, I0에 각각 어떤 값?]
현재 입력값이 각각 A(0), A(1), A(2), A(3)이기 때문에 값은 변하지 않는다.
[S(1) = 0, S(0) = 1인 경우 즉, I0에 각각 어떤 값?]
현재 입력값이 각각 Serial Input, A(0), A(1), A(2)이기 때문에 값이 오른쪽(아래)로 한칸씩 변경되었다.
[S(1) = 1, S(0) = 0인 경우 즉, I0에 각각 어떤 값?]
현재 입력값이 각각 A(1), A(2), A(3), Serial Input이기 때문에 값이 왼쪽(위)로 한칸씩 변경되었다.
[S(1) = 1, S(0) = 1인 경우 즉, I0에 각각 어떤 값?]
현재 입력값이 각각 I(0), I(1), I(2),I(3)이기 때문에 parallel Load이다.
따라서 최종 Function Table은 아래와 같다.
요약
위 회로는 Clock pulse가 상승일 대 Select의 값에 따라 레지스터 연산하는 방식이 변경된다.