이성열

컴퓨터에게 박자감 가르치기

이전 글에서 래치를 이용해 정보를 기억하는 회로를 만들었다. 하지만 D 래치는 활성화 신호가 켜져 있는 동안 입력 변화를 그대로 따라가기 때문에, 여러 래치가 연결된 시스템에서는 문제가 생긴다.

동기화의 필요성

컴퓨터는 복잡한 계산을 한 번에 처리하지 않는다. 대신 여러 단계로 나누어 각 단계의 결과를 래치에 저장한 뒤, 다음 단계로 전달한다. 예를 들어 덧셈 결과를 래치에 저장하고, 그 값을 다음 래치가 받아 또 다른 연산에 사용하는 식이다.

하지만 D 래치는 활성화(E) 신호가 켜져 있는 동안 D 입력의 변화를 그대로 따라간다. 이 상태에서 래치 여러 개를 A → B → C 순서로 연결하면 어떻게 될까? A의 출력이 바뀌는 순간 B가 즉시 그 값을 받고, C도 곧바로 따라 바뀐다. 각 단계가 자기 값을 독립적으로 유지하지 못하는 것이다.

아래 회로에서 세 개의 D 래치가 직렬로 연결되어 있다. E=1인 상태에서 D를 토글해보자. 세 래치의 Q가 동시에 바뀌는 것을 볼 수 있다.

데이터가 한꺼번에 통과해버려서 각 단계가 독립적으로 값을 유지할 수 없다.

A
-
B
-
C
-

클럭

따라서 우리는 모든 회로가 같은 타이밍에 동작하도록 동기화할 필요가 있다. 바로 이 동기화를 책임지는 것이 클럭(Clock) 이다.

클럭은 컴퓨터 내부에서 일정한 주기로 반복되는 정기적인 신호이다. 모든 회로에 “지금 동작해”라는 박자를 동시에 알려주는 역할을 한다.

같은 파이프라인에 클럭을 추가하면 어떻게 될까?

A
-
B
-
C
-

다음 순서대로 조작해보자:

  1. “A에 새 데이터” 클릭 → A=①. B와 C는 변하지 않는다.
  2. “클럭” 클릭 → A의 값이 B로 이동한다. B=①.
  3. “A에 새 데이터” 다시 클릭 → A=②. B는 여전히 ①이다.
  4. “클럭” 클릭 → B=②, C=①. 클럭 한 번에 데이터가 정확히 한 단계씩만 이동한다.

컴퓨터 사양에서 “3.2GHz” 같은 숫자를 본 적이 있을 것이다. 이것은 클럭의 주파수를 의미하며, 1초에 32억 번의 박자를 보내는 속도를 뜻한다. 이 클럭 주파수가 높을수록 회로는 더 자주 동작할 수 있어, 더 많은 계산을 빠르게 처리할 수 있다.

D 플립플롭

그렇다면 클럭에 맞춰 동작하는 메모리는 어떻게 구현할 수 있을까? D 플립플롭(D Flip-Flop) 을 살펴보자.

D 플립플롭은 D 래치처럼 데이터를 입력받아 저장하지만, 클럭의 특정 순간(엣지) 에서만 데이터를 받아들인다. 상승 엣지 혹은 하강 엣지 중 하나를 선택할 수 있다.

  • 상승 엣지: 클럭이 0에서 1로 바뀌는 순간
  • 하강 엣지: 클럭이 1에서 0으로 바뀌는 순간

엣지의 그 순간에만 데이터를 받아들이므로, 입력이 아무리 요동쳐도 결과가 예측 가능하고 안정적이다.

상승 엣지 D 플립플롭은 두 개의 D 래치를 사용해 아래와 같이 구현할 수 있다.

다음 순서대로 조작해보자:

  1. D를 클릭해 1로 바꾼다. CLK이 이미 1이지만 엣지(변화하는 순간)가 아니므로 Q는 변하지 않는다.
  2. CLK를 클릭해 0으로 바꾼다. 하강 엣지지만, 이 플립플롭은 상승 엣지에서만 반응하므로 Q는 그대로다.
  3. CLK를 다시 클릭해 1로 바꾼다(상승 엣지). 이 순간 D의 값(1)이 Q에 저장된다.

레지스터

D 플립플롭 하나는 단 하나의 비트(0 또는 1)만 저장할 수 있다. 하지만 컴퓨터는 8비트, 16비트, 32비트, 64비트와 같은 여러 비트가 모인 Word(컴퓨터가 한 번에 처리하는 데이터 묶음) 단위로 숫자를 표현하고 처리한다.

이러한 여러 비트의 정보를 한 번에 저장하기 위해, 여러 개의 D 플립플롭을 병렬로 연결한 것이 바로 레지스터(Register) 이다. 예를 들어, 8비트 레지스터는 8개의 D 플립플롭으로 구성되어 8개의 비트를 동시에 저장할 수 있다. 모든 플립플롭이 같은 클럭 신호를 공유하므로, 8비트 데이터가 동시에 저장되고 출력된다.

레지스터는 CPU 내부에 위치하며, 연산 장치가 계산할 값이나 제어 장치가 다음 명령어를 가져올 주소 등, CPU가 당장 처리해야 할 핵심적인 정보들을 매우 빠르게 임시 저장하는 역할을 한다. CPU와 같은 칩 내부에 위치하기 때문에 접근 속도가 매우 빠르지만, 그만큼 비싸고 공간을 많이 차지한다.

마무리

우리는 이제 덧셈을 수행할 수 있는 회로뿐만 아니라, 그 계산 결과를 ‘기억’할 수 있는 능력을 컴퓨터에게 부여하는 방법을 알게 되었다.

이제 계산과 기억이라는 두 가지 능력을 갖추었다. 그런데 이것만으로 컴퓨터라고 부를 수 있을까? 다음 글에서는 컴퓨터란 무엇인지 정의하고, 지금까지 만든 회로들이 어떻게 하나의 컴퓨터로 조립되는지 살펴보자.