시계가 수동 논리를 자동 계산으로 바꾸는 방법?
Source: Dev.to
위에 제공된 소스 링크 아래에 번역하고 싶은 전체 텍스트를 붙여 주시면, 요청하신 대로 마크다운 형식과 코드 블록, URL은 그대로 유지하면서 한국어로 번역해 드리겠습니다.
어떻게 덧셈을 수행하는가
컴퓨터가 어떻게 작동하는지 이해하려면, [24, 34, 77] 같은 숫자 리스트를 더하는 과정을 먼저 살펴보겠습니다.
- 앞의 두 숫자를 더한다:
24 + 34 = 58. - 중간 결과(58)를 메모리(또는 종이에) 저장한다.
- 마지막 숫자를 중간 결과에 더한다:
58 + 77 = 135.
이 과정에서 우리는 58이라는 숫자를 보관하기 위해 우리의 기억을 “메모리”로 사용했습니다.
Simple 회로 설계
회로 구성 요소
- 8‑bit 스위치 – 왜 필요할까요?
- Adder – 덧셈을 수행합니다.
- Latch (memory) – 중간 결과를 저장합니다.
회로를 이용한 덧셈 순서
| 단계 | Latch (memory) | 입력 | Adder 계산 | 동작 |
|---|---|---|---|---|
| 시작 | 0 | 24 | 0 + 24 = 24 | 스위치를 눌러 회로를 닫음으로써 24를 래치에 저장합니다. |
| 다음 | 24 | 34 | 24 + 34 = 58 | 58을 래치에 저장합니다. |
| 다음 | 58 | 77 | 58 + 77 = 135 | 135를 래치에 저장합니다. |
이론적으로는 완벽해 보이지만, 실제 회로는 이렇게 동작하지 않습니다.
문제: 피드백‑루프 오류
전기는 믿을 수 없을 정도로 빠르게 흐릅니다. 수동 스위치를 누르면 손가락이 버튼 위에 있는 한 게이트가 열려 있습니다. 아주 짧게 눌러도(예: 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. |
| … | … | … |
손가락을 아직 떼기도 전에 회로는 같은 숫자를 수백 번 더해 버려, 거대하고 잘못된 값이 생성됩니다. 이것이 피드백 루프 오류입니다.
근본 원인: 회로가 너무 오래 “열려” 있기 때문입니다. 버튼을 얼마나 오래 누르고 있든 클릭당 한 번만 열리도록 해야 합니다.
버튼 누름 이해 (시나리오)
| 누름 번호 | 누른 시간 | 뗀 시간 |
|---|---|---|
| 1 | 1 s | 2 s |
| 2 | 3 s | 1 s |
| 3 | 0.5 s | — |
플롯하면 파형은 다음과 같습니다:
- High State (위) – 버튼이 눌린 상태.
- Low State (아래) – 버튼이 눌리지 않은 상태.
신호의 네 단계
- Rising Edge – 버튼이 눌리는 정확한 순간 (0 → 1).
- High Level – 버튼이 눌려 있는 동안 지속되는 시간.
- Falling Edge – 버튼이 놓이는 정확한 순간 (1 → 0).
- Low Level – 버튼이 놓여 있는 동안 지속되는 시간.
Rising Edge와 Falling Edge는 버튼을 얼마나 오래 누르고 있든 각 누름당 한 번씩만 발생합니다. 회로가 Rising Edge에만 반응하도록 하면 클릭당 정확히 한 번 추가됩니다.
래치 vs. 플립‑플롭
| 기능 | 래치 (레벨‑트리거) | 플립‑플롭 (에지‑트리거) |
|---|---|---|
| 활성화 | High 레벨 전체 동안 활성화 | 상승 에지에서만 활성화 |
| 제어 | 제어하기 어려움 (연속) | 정밀한 단일‑펄스 동작 |
해결책: 래치를 플립‑플롭으로 교체하고 버튼의 CLK (클럭) 핀으로 구동합니다.
해결책: 에지 트리거링
회로 재설계
- 래치를 교체하여 플립‑플롭으로 바꿉니다.
- 가산기의 출력을 플립‑플롭의 데이터 입력에 직접 연결합니다.
- 버튼을 플립‑플롭의 CLK 핀에 연결합니다.
동작 순서
| 단계 | 플립‑플롭 상태 | 입력 | 가산기 계산 | 동작 |
|---|---|---|---|---|
| 시작 | 0 | 24 | 0 + 24 = 24 | 상승 에지에서 플립‑플롭은 24를 캡처하고 나머지 입력은 무시합니다. |
| 다음 | 24 | 34 | 24 + 34 = 58 | 다음 상승 에지에서 58을 캡처합니다. |
| 다음 | 58 | 77 | 58 + 77 = 135 | 다음 상승 에지에서 135를 캡처합니다. |
일부 CPU 회로(예: 카운터)는 플립‑플롭으로 구성됩니다.
클록 신호를 이용한 자동화
클록 사이클 개요
| 사이클 | 단계 | 설명 |
|---|---|---|
| 1 | Adder Stage 덧셈 단계 | Rising Edge – 입력이 덧셈기에 제공됩니다. High Level – 덧셈기가 덧셈을 수행합니다. Falling Edge – 덧셈기가 연산을 완료합니다 (전파 지연). Low Level – 회로가 대기하여 결과가 안정화되도록 합니다. |
| 2 | Capture 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)
위 설명은 해당 저장소에서 사용되는 타이밍 및 동기화 전략을 요약한 것입니다.