시계가 수동 논리를 자동 계산으로 바꾸는 방법?

발행: (2026년 1월 5일 오후 10:22 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to

위에 제공된 소스 링크 아래에 번역하고 싶은 전체 텍스트를 붙여 주시면, 요청하신 대로 마크다운 형식과 코드 블록, URL은 그대로 유지하면서 한국어로 번역해 드리겠습니다.

어떻게 덧셈을 수행하는가

컴퓨터가 어떻게 작동하는지 이해하려면, [24, 34, 77] 같은 숫자 리스트를 더하는 과정을 먼저 살펴보겠습니다.

  1. 앞의 두 숫자를 더한다:
    24 + 34 = 58.
  2. 중간 결과(58)를 메모리(또는 종이에) 저장한다.
  3. 마지막 숫자를 중간 결과에 더한다:
    58 + 77 = 135.

이 과정에서 우리는 58이라는 숫자를 보관하기 위해 우리의 기억을 “메모리”로 사용했습니다.

Simple 회로 설계

회로 구성 요소

  • 8‑bit 스위치 – 왜 필요할까요?
  • Adder – 덧셈을 수행합니다.
  • Latch (memory) – 중간 결과를 저장합니다.

회로를 이용한 덧셈 순서

단계Latch (memory)입력Adder 계산동작
시작0240 + 24 = 24스위치를 눌러 회로를 닫음으로써 24를 래치에 저장합니다.
다음243424 + 34 = 5858을 래치에 저장합니다.
다음587758 + 77 = 135135를 래치에 저장합니다.

이론적으로는 완벽해 보이지만, 실제 회로는 이렇게 동작하지 않습니다.

문제: 피드백‑루프 오류

전기는 믿을 수 없을 정도로 빠르게 흐릅니다. 수동 스위치를 누르면 손가락이 버튼 위에 있는 한 게이트가 열려 있습니다. 아주 짧게 눌러도(예: 0.1 초) CPU는 이를 수천 나노초 동안 “High” 신호로 인식합니다.

래치 출력이 가산기에 다시 피드백되기 때문에 피드백 루프가 발생합니다:

시간상황결과
0 s버튼을 눌렀다.0 (memory) + 24 (input) = 24.
0.1 s (아직 누르고 있음)래치가 High 신호를 감지하고 같은 24를 다시 더한다.24 + 24 = 48.
0.2 s반복한다.48 + 24 = 72.

손가락을 아직 떼기도 전에 회로는 같은 숫자를 수백 번 더해 버려, 거대하고 잘못된 값이 생성됩니다. 이것이 피드백 루프 오류입니다.

근본 원인: 회로가 너무 오래 “열려” 있기 때문입니다. 버튼을 얼마나 오래 누르고 있든 클릭당 한 번만 열리도록 해야 합니다.

버튼 누름 이해 (시나리오)

누름 번호누른 시간뗀 시간
11 s2 s
23 s1 s
30.5 s

플롯하면 파형은 다음과 같습니다:

  • High State (위) – 버튼이 눌린 상태.
  • Low State (아래) – 버튼이 눌리지 않은 상태.

신호의 네 단계

  1. Rising Edge – 버튼이 눌리는 정확한 순간 (0 → 1).
  2. High Level – 버튼이 눌려 있는 동안 지속되는 시간.
  3. Falling Edge – 버튼이 놓이는 정확한 순간 (1 → 0).
  4. Low Level – 버튼이 놓여 있는 동안 지속되는 시간.

Rising EdgeFalling Edge는 버튼을 얼마나 오래 누르고 있든 각 누름당 한 번씩만 발생합니다. 회로가 Rising Edge에만 반응하도록 하면 클릭당 정확히 한 번 추가됩니다.

래치 vs. 플립‑플롭

기능래치 (레벨‑트리거)플립‑플롭 (에지‑트리거)
활성화High 레벨 전체 동안 활성화상승 에지에서만 활성화
제어제어하기 어려움 (연속)정밀한 단일‑펄스 동작

해결책: 래치를 플립‑플롭으로 교체하고 버튼의 CLK (클럭) 핀으로 구동합니다.

해결책: 에지 트리거링

회로 재설계

  1. 래치를 교체하여 플립‑플롭으로 바꿉니다.
  2. 가산기의 출력을 플립‑플롭의 데이터 입력에 직접 연결합니다.
  3. 버튼을 플립‑플롭의 CLK 핀에 연결합니다.

동작 순서

단계플립‑플롭 상태입력가산기 계산동작
시작0240 + 24 = 24상승 에지에서 플립‑플롭은 24를 캡처하고 나머지 입력은 무시합니다.
다음243424 + 34 = 58다음 상승 에지에서 58을 캡처합니다.
다음587758 + 77 = 135다음 상승 에지에서 135를 캡처합니다.

일부 CPU 회로(예: 카운터)는 플립‑플롭으로 구성됩니다.

클록 신호를 이용한 자동화

클록 사이클 개요

사이클단계설명
1Adder Stage
덧셈 단계
Rising Edge – 입력이 덧셈기에 제공됩니다.
High Level – 덧셈기가 덧셈을 수행합니다.
Falling Edge – 덧셈기가 연산을 완료합니다 (전파 지연).
Low Level – 회로가 대기하여 결과가 안정화되도록 합니다.
2Capture Stage
캡처 단계
Rising Edge – 플립‑플롭이 덧셈기의 결과를 래치하고 시스템이 다음 숫자로 이동합니다.
High/Falling/Low Levels – 다음 덧셈을 위한 준비.

뇌: 제어 장치

실제 CPU에서 Control Unit은 지휘자와 같습니다. 내부 카운터를 사용하여 클록 사이클을 추적하고 컴퓨터의 모든 부분에 정확히 데이터를 전송할 시점저장할 시점을 알려줍니다.

왜 가산기는 엣지‑트리거가 아닌가

래치나 플립‑플롭과 달리, 가산기에는 클록 핀이 없습니다. 가산기는 신호를 기다리지 않고 바로 동작합니다; 항상 “켜져” 있습니다. 입력이 변경되면 즉시 출력(합계)이 변하기 시작합니다.

지연 – 가산기에 대한 유일한 타이밍 고려 사항은 전파 지연이며, 입력이 변한 후 새로운 합계가 안정화되는 데 걸리는 시간입니다. 이 지연 때문에 신뢰할 수 있는 동작을 보장하기 위해 별도의 클록 단계(가산기 → 캡처)가 필요합니다.

전파 지연 및 클록 속도

출력이 “즉시”가 아닌 이유는 전파 지연 때문입니다 – 전기가 가산기 내부의 모든 트랜지스터를 통과하는 데 걸리는 물리적 시간입니다.
클록이 너무 빠르지 않도록 해야 합니다. 그렇지 않으면 플립‑플롭이 가산기가 계산을 마치기 전에 결과를 저장하려고 시도할 수 있습니다!

숫자 더하기 [24, 34, 77]

컴퓨터는 작업을 사이클로 나눕니다. 각 사이클은 클럭의 “하트비트”에 따라 진행됩니다.

사이클단계무슨 일 발생
1 – 작업상승 에지플립‑플롭이 0에서 시작합니다. 시스템이 0과 첫 번째 입력(24)을 가산기에 전달합니다.
High / Falling / Low 레벨가산기가 덧셈을 수행합니다. 시스템은 Low 레벨 동안 전파 지연이 끝나고 결과(24)가 안정될 때까지 대기합니다.
2 – 저장상승 에지플립‑플롭이 가산기에서 24를 캡처합니다. 제어 장치가 다음 단계에 사용할 다음 숫자(34)를 선택합니다.
High / Falling / Low 레벨아무것도 없음(데이터가 단순히 저장됩니다).
3 – 작업상승 에지플립‑플롭(현재 24를 보유)과 새로운 입력(34)이 가산기에 전달됩니다.
High / Falling / Low 레벨가산기가 덧셈을 수행합니다. Low 레벨이 끝날 때 결과 58이 준비됩니다.
4 – 저장상승 에지플립‑플롭이 58을 캡처합니다. 제어 장치가 최종 숫자(77)를 선택합니다.
5 – 최종 작업상승 에지플립‑플롭이 58과 입력 77을 가산기에 보냅니다.
High / Falling / Low 레벨가산기가 계산을 완료합니다.
6 – 최종 결과상승 에지플립‑플롭이 최종 합계 135를 캡처합니다.

Source:

제어된 자동화

이 사이클이 끝날 때쯤이면 덧셈이 완벽하게 완료됩니다. 이것이 제어된 자동화이며, 각 단계마다 클록 파형상의 고유한 “시점”이 지정되어 있어 연산이 서로 충돌하거나 방해되지 않습니다.

클록의 주된 역할은 동기화입니다.

  • 클록 속도는 시스템 내 가장 느린 회로를 기준으로 선택해야 합니다. 우리 예시에서는 가산기가 가장 복잡한 부분입니다.
  • 클록이 너무 빠르게 설정되면 플립‑플롭이 가산기가 작업을 마치기 전에 데이터를 잡아내려 할 수 있습니다.
  • 클록의 Low 레벨은 가산기의 전파 지연을 충분히 커버할 수 있을 만큼 길어야 하며, 이를 통해 캡처된 모든 결과가 100 % 정확함을 보장합니다.

제어된 자동화 (Repository)

위 설명은 해당 저장소에서 사용되는 타이밍 및 동기화 전략을 요약한 것입니다.

Back to Blog

관련 글

더 보기 »

RGB LED 사이드퀘스트 💡

markdown !Jennifer Davis https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex: 내가 만드는 이유

소개 안녕하세요 여러분. 오늘은 제가 누구인지, 무엇을 만들고 있는지, 그리고 그 이유를 공유하고 싶습니다. 초기 경력과 번아웃 저는 개발자로서 17년 동안 경력을 시작했습니다.