CS

시간표현과 상태기억

mrban 2022. 1. 29. 00:45

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. 한권으로 읽는 컴퓨터 구조와 프로그래밍 -조너선 스타인하트 지음-

2.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

 

[순차회로] 래치

 이전에 클럭을 통해서 컴퓨터에게 현재와 과거의 개념을 부여했다면, 이번에는 어떻게 컴퓨터가 과거의 bit값을 기억하는지 알아본다. 비트를 기억하는 방법은 크게 래치(Latch)와 플립플롭(Flip-

soojong.tistory.com