Day-10
3장 메모리와 디스크의 핵심: 순차논리
-컴퓨터는 비트를 어떻게 기억하는가
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래치를 껐다 켰다 할 수 있게 된 것이다.
게이트가 있는 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 방식을 사용하는 것이 플립플롭이다.
플립플롭
- 구조가 굉장히 복잡하니 오른쪽의 두 게이트는 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값의 변화는 전혀 출력값에 영향을 주지 않고 클록값의 변화로만 플립플롭을 껐다 켰다 할 수 있다.
최초의 플립플롭은 아래와 같다.
- D는 데이터, CK는 클록을 의미한다. 이 플립플롭은 양의 edge-trigger방식이기 때문에 클록이 0에서 1로 바뀔때 입력값(D)을 출력한다.
카운터
레지스터
- 레지스터는 값을 기억하기 위한 것으로 클록을 공유하는 여러 플립플롭들을 한 패키지에 넣은 것이다.
CPU가 일시적으로 값을 기억하기 위한 기억장치이다.
참고자료
https://soojong.tistory.com/entry/%EC%9E%91%EC%84%B1%EC%A4%91%EC%88%9C%EC%B0%A8%ED%9A%8C%EB%A1%9C-%EB%9E%98%EC%B9%98