당신과는 천천히, 시간표현과 상태기억

김재만·2022년 2월 22일
0

CS

목록 보기
13/13

우리는 연속된 아날로그 입력 값에서 직관을 통해 분할된 값을 측정해왔다. 시간 역시, 분할을 할 수 없다. 하지만, 꽤나 다행히 우리가 살고 있는 행성의 자전과 공전을 통해 일정한 시간(하루 혹은 일년)마다 비슷한 현상이 반복되는 것을 관측했다. 그리고, 그로부터 하루와 한 해라는 직관이 생겨났다. 이제는 우리가 얻은 직관을 컴퓨터에게 가르칠 시간이다.

시간표현

컴퓨터를 통해 시간적인 개념을 표현한다는 것이 어떻게 가능할까. 시간을 표현하기 위해서는 통상적으로 쓰이는 최소 단위를 표현할 수 있어야한다. 우리가 통상적으로 시간을 표현하는 최소 단위는 '초(second)'다. 초라는 것은 우리가 직관적으로 주기를 느낄 수 있는 하루라는 개념을 24등분 한 시(hour)를 60등분한 분(minute)을 다시 60등분하여 세는 단위다. 따라서 사실 정확히 1초마다 반복되는 주기를 가진 것은 자연에 존재하지 않는다. 1초마다 반복되는 주기를 인공적으로 생성하거나, 혹은 그보다 짧은 주기를 만들어 1초를 잴 필요가 있다.

발진자

발진자는 인버터를 활용하여 입력된 값을 가수로 변환한다. 기존 입력값과 만나는 부분에서 인버터에서 출력된 값과의 합 연산 결과, 0을 인버터로 입력하게 되는 결과가 나온다. 0이 입력되면 인버터는 0을 출력하게 되는데, 이 0과 입력값이 만나면 그대로 입력값이 반환되므로 인버터에는 입력값이 들어가고, 입력값의 가수가 출력되게 된다. 이러한 변화는 인버터에 입력되는 값(혹은 출력되는 값)이 바뀜에 따라 주기적으로 일어난다.

클록

컴퓨터에서는 물리적으로 어쩔 수 없이 발생하는, 전파 지연이 생길 수 밖에 없다. 때문에, 작업이 순서대로 이루어지려면 앞선 작업이 충분히 마칠 수 있는 시간만큼 기다릴 필요가 생긴다. 때문에 발진자를 통해 컴퓨터에게 시간을 셀 수 있는 주기가 있는 신호를 보내주는데 이를 클록이라고 한다.

래치

시간표현을 의미있게 활용하려면, 원하는 시간만큼 데이터를 유지할 방법이 필요하다. 래치는 발진자처럼 입력된 값을 다시 반환하는 형태의 회로인데, 입력 값이 OR게이트를 통해 이루어진다. 입력값이 없을 때는 Flase가 반환되다가, 최초에 입력값이 있는 경우 OR게이트에 의해 True가 반환되는 형태다. 그리고, 해당 값으로 인해 래치에는 True 값이 저장되며, 입력값이 변하는 것과 상관없이 영구히 True를 저장하고 반환하게 된다.(저항값이 없고 전기가 무한정 유지된다면!)

위의 래치를 개선한 것이 아래의 AND-OR 게이트 래치이다. OR게이트는 위와 마찬가지로 입력값을 감지하기 위해 작동하고, AND게이트는 초기화를 감지하기 위해 작동하는 형태의 회로이다.

S-R래치

위의 래치를 보완한 것이 아래의 S-R래치(Set-Reset래치)이다. 회로에 사용하는 게이트의 수도 간소하고, set과 reset이 반영되는 구조가 같아 전파 지연시간이 비슷하다.

SET 값과 RESET값이 True면, !SET값과 !RESET값이 False이므로 두 NAND게이트에서 무조건 True 값이 반환된다.

SET 값이 False이고 RESET값이 True라면, !SET은 True이고 !RESET은 False이므로 !RESET NAND 게이트에서는 무조건 True가 반환되고 !SET NAND 게이트에서는 무조건 False가 반환된다.

SET 값이 True이고 RESET값이 False라면, !SET은 False이고 !RESET은 True이므로 !SET NAND게이트에서는 무조건 True가 반환되고 , !RESET NAND게이트에서는 False가 반환된다.

SET값과 RESET값이 False라면, !SET값과 !RESET값이 모두 True이다. 이 때는 두 입력이 동시에 일어나고 만약 두 게이트의 회로의 길이가 같다고 가정하면, 두 값이 True와 False를 반복하는 현상이 일어날 것이다.(실제로 일어나기는 매우 어렵다.)
둘 중 RESET이 False인 상황에서 SET이 True에서 False로 바뀌면 어떻게 될까. !RESET NAND에서 False 값이 출력되므로 !SET NAND에서는 True가 계속 반환되고, !RESET NAND출력값은 Flase가 유지된다.
반대로 SET은 False인 상황에서 RESET이 True에서 False로 바뀌게 되는 경우도 살펴보자. !SET NAND에서는 False가 반환되고 있으므로, !RESET NAND에서의 출력값은 True 값이 반환된다. !SET NAND 에서는 False 반환이 유지된다.

게이트가 있는 래치

게이트가 있는 래치는 SET, RESET값에 관계 없이 현재 저장하고 있는 값을 유지하고 싶을 때 게이트 값을 False로(!GATE 값은 True) 하여 입력 값을 차단하는 회로이다.

게이트가 있는 D래치

D 래치가 추가된 형태는 !SET과 !RESET의 신호를 D 하나로 관리하는 형태이다. D가 True이면 !SET은 False, !RESET은 True이고 D가 False이면 !SET은 True, !RESET은 False이다. !GATE값이 False이면 D값에 따라 !SET 혹은 !RESET 중 하나가 True인 동작이 발생하고, !GATE값이 True이면 D값의 영향에서 벗어나 !SET OR과 !RESET OR이 모두 True를 반환하여 값을 저장하게 된다.

마무리

주기성을 만들어내는 아이디어가 놀랍도록 명료하다.

profile
듣는 것을 좋아하는 개발자입니다

0개의 댓글