S-R래치를 통해서 정보를 기억하는 방법에 대해서 알 수 있었다.
여기서 더 나아가 원하는 시점에만 S-R래치를 작동시켜서 정보를 변경하거나 기억하는 방법이 존재한다.
1-1. 게이트가 있는 래치
- NAND 결과표
->하나라도 0이면 출력값은 1이고, 입력값이 1이 있다면 나머지 입력값에 따라 결과가 달라진다.
- 앞에서 배운 S-R래치에 게이트와 OR게이트 한쌍을 추가한 것.
- gate-bar값이 1일 때
- set-bar와 reset-bar가 어떤 값이든지 상관 없이 출력은 그대로이다. (q = 1).
- gate-bar값이 0일 때
- set-bar와 reset-bar값에 따라서 출력이 변한다.
우리는 이를 통해서 게이트가 있는 래치는 gate-bar값이 0일때(gate값이 1일때)는 입력값을 출력에 반영하는 것이 가능하다. 반면에 gate-bar값이 1이라면 set또는 reset값과 무관하게 기존의 출력을 유지한다. 즉, gate를 통해서 S-R래치를 껐다 켰다 할 수 있게 된 것이다.
1-2. 게이트가 있는 D래치
입력값을 set과 reset 두가지로 유지하는 것이 불편하기 때문에 등장한 것이 인버터를 추가한 게이트 방식이 존재한다. 이를 게이트가 있는 D래치라고 한다.
- 즉, 이제는 인버터를 통해 D값 하나의 입력만으로 게이트가 있는 S-R래치를 다루는 것이 가능해졌다.
다만 게이트가 있는 S-R 래치는 치명적인 단점이 존재한다.
게이트가 있는 S-R 래치는 level- trigger 방식이다.
- 예를 들어서 지금처럼 positive-level trigger 방식이라면 3번구간에서 한 게이트값에 두개의 입력(D)가 존재하기 때문에 문제가 생긴다. 예를 들어 외부적 요인이나 잡음 등으로 잠깐 입력값이 바뀌었을 뿐인데 출력값이 바뀌어버리는 결과가 나타날 수 있는 것이다. 그래서 등장하게 된 개념이 edge-trigger방식이다.
- 예를 들어서 지금처럼 positive-edge trigger 방식이라면 3번구간에서 한 게이트값에 두개의 입력(D)이 존재하더라도 출력값에는 영향을 주지 않아 문제가 없다. 예를 들어 외부적 요인이나 잡음 등으로 잠깐 입력값이 바뀌어도 출력값이 바뀌지 않는 결과가 나타날 수 있는 것이다.
- 바로 이 edge trigger 방식을 사용하는 것이 플립플롭이다.
1-3 플립플롭.
- 구조가 굉장히 복잡하니 오른쪽의 두 게이트는 S-R 래치와 동일하므로 그 부분을 제외한 나머지 부분만 가지고 어떤 논리로 돌아가는지 살펴보자.
- 클록이 0이면 D값이 어떤 값이던지 간에 S-bar와 R-bar는 항상 1이다.
- 클록이 1이고 R-bar가 0인 경우 D 값이 0 이던 1이던 상관없이 무조건 S-bar는 1이고 R-bar는 0이다.
- 클록이 1이고 S-bar가 0인 경우 D 값이 0 이던 1이던 상관없이 무조건 S-bar는 0이고 R-bar는 1이다.
- 결론 : 모든 경우의 수를 따져봤을 때 클록이 0이면 S-bar와 R-bar는 무조건 1이고 클록이 1일때는 S-bar와 R-bar가 1, 0 또는 0, 1의 값을 갖는다. 이 과정에서 입력값(D)가 미치는 영향은 전혀없다! 이 점이 앞의 게이트가 있는 S-R 래치와의 결정적인 차이점이다.
이번에는 클록값을 변경하는 경우를 살펴보자.
- D값이 1일때 우리는 클록값이 0에서 1로 바뀔 때 S-bar값이 1에서 0으로 바뀌고 R-bar값은 그대로 0에서 0이라는 것을 확인할 수 있다. S-bar와 R-bar가 0, 1이라면 S-R래치에서 출력값이 1이기 때문에 우리는 클록값이 0에서 1로 바뀔때 입력값인 1이 결과로 출력됨을 확인할 수 있다.
- 다른 경우로 D값이 0일때 우리는 클록값이 0에서 1로 바뀔 때 S-bar값이 1에서 1로 그대로고 R-bar값은 1에서 0으로 바뀐다는 것을 확인할 수 있다. S-bar와 R-bar가 1, 0이라면 S-R래치에서 출력값이 0이기 때문에 우리는 클록값이 0에서 1로 바뀔때 입력값인 0이 결과로 출력됨을 확인할 수 있다.
최초의 플립플롭은 아래와 같다.
- D는 데이터, CK는 클록을 의미한다. 이 플립플롭은 양의 edge-trigger방식이기 때문에 클록이 0에서 1로 바뀔때 입력값(D)을 출력한다.
1-4. 카운터
- 위에서 배운 플립플롭들을 조합하여 수를 세는 카운터를 만들어낼 수 있다.
https://www.youtube.com/watch?v=XKel----57I
1-5. 레지스터
- 레지스터는 값을 기억하기 위한 것으로 클록을 공유하는 여러 플립플롭들을 한 패키지에 넣은 것이다. CPU가 일시적으로 값을 기억하기 위한 기억장치이다.
출처
1. 한권으로 읽는 컴퓨터 구조와 프로그래밍 -조너선 스타인하트 지음-
[순차회로] 래치
이전에 클럭을 통해서 컴퓨터에게 현재와 과거의 개념을 부여했다면, 이번에는 어떻게 컴퓨터가 과거의 bit값을 기억하는지 알아본다. 비트를 기억하는 방법은 크게 래치(Latch)와 플립플롭(Flip-
soojong.tistory.com
'CS' 카테고리의 다른 글
락, 트랜잭션과 작업크기, 락대기, 교착상태 (0) | 2022.02.22 |
---|---|
동적 메모리 할당, 더 효율적인 메모리 할당, 가비지 컬렉션, 이중 연결 리스트 (0) | 2022.02.16 |
파동에 올라타라, 범용직렬버스, 네트워킹 (0) | 2022.02.09 |
메모리상의 데이터 배치, 프로그램 실행 (0) | 2022.02.05 |
문자를 사용한 수 표현, 색을 표현하는 방법 (0) | 2022.01.21 |