CPU의 큰 그림
CPU = Datapath + Control Path
| 구성 요소 | 주요 역할 | 포함 회로 | 설명 |
| Datapath | 실제 데이터 연산 및 저장 수행 | Combinational + Sequential 둘 다 | ALU, MUX, Register, Memory 등으로 구성되어 명령어 실행의 흐름(데이터 이동)을 담당 |
| Control Path (Control Unit) | Datapath의 각 구성요소에 제어 신호 전달 | Combinational + Sequential 모두 포함 (상태머신) | 명령어 종류(opcode)에 따라 어떤 동작을 할지 제어신호(RegWrite, MemRead 등) 생성 |
Datapath는 데이터의 통로, Control path는 데이터의 신호등

위 그림은 단일 사이클(single-cycle) LEGv8 CPU의 구조도이다. 파란선이 Control path 나머지가 Datapath
Datapath (데이터 경로)
→ 실제 데이터를 주고받고 계산하는 경로포함 구성요소:
- PC (Program Counter)
- Instruction Memory
- Register File (Registers)
- ALU (산술논리연산기)
- Data Memory
- Adder (PC+4, Branch Address 계산용)
- MUX (경로 선택기)
Control Path (제어 경로)
→ Datapath 안의 각 부품이 무엇을 할지 지시하는 신호선
(파란색 선들로 표시되어 있음)
포함 구성요소:
- Control Unit (왼쪽 아래 Control 블록)
- Control signals:
- RegWrite
- ALUOp
- MemRead
- MemWrite
- MemtoReg
- Branch
- ALUSrc
- PCSrc 등
CPU 성능 요소
| 요소 | 결정 요인 |
| Instruction count | ISA(명령어 집합) + Compiler |
| CPI & Cycle time | CPU 하드웨어 구조 |
명령어 실행 흐름 (Instruction Execution)
- PC (Program Counter) → Instruction Memory : 명령어 읽기 (fetch)
- Register File : 레지스터 값 읽기
- ALU : 연산 수행 (산술, 주소계산, 분기 등)
- Data Memory : 필요 시 데이터 읽기/쓰기
- PC ← PC + 4 or Branch Target : 다음 명령어 주소 결정
⚙️ LEGv8은 64bit CPU이지만, 명령어는 4byte 단위로 정렬되어 있어서 PC는 4씩 증가
논리 설계 기본 (Logic Design Basics)
one wire per bit ( Multi bit -> multi wires)
Low voltage =0 (asserted) , High Voltage = 1 (deasserted signal)
| 구분 | 정의 | 예시 | Datapath/Control 포함 여부 |
| Combinational Elements | 입력이 바뀌면 즉시 출력이 변함 (상태 저장 X) | AND, OR, ALU, MUX, Adder | ✅ Datapath에 포함 (연산/연결 역할) |
| Sequential Elements (State Elements) | 이전 상태를 저장, 클록에 따라 갱신 | Latch, Flip-Flop, Register, Memory, PC | ✅ Datapath + Control 둘 다에 존재 (상태 저장 역할) |
⚡ 정리 문장:
Datapath는 “현재 데이터를 처리하는 조합논리” + “이전 결과를 기억하는 순차논리”로 구성된다.
Combinational Elements 예시

Sequential Elements 세부 정리
| 구분 | 이름 | 역할 | 설명 |
| 🟢 Input 1 | Data input (D) | 저장할 데이터 | 다음 클록에서 저장될 값을 입력받음 |
| 🕒 Input 2 | Clock (Clk) | 저장 시점 제어 | 언제 D의 값을 저장할지를 결정 (클록 상승/하강 시점) |
| 🔵 Output | Stored value (Q) | 저장된 데이터 출력 | 이전 클록 주기에 저장된 값이 출력으로 나옴 |
모든 sequential elements들은 공통적으로 Clock 신호에 의해 동작하지만 동작 방식(Edge, Level) 에 따라 Latch와 Flip-Flop으로 구분된다. cpu내에서는 일반적으로 Flip-Flop 기반의 Edge-triggered 방식을 사용한다.
| 요소 | 특징 | 작동 시점 | 예시 |
| Latch (래치) | Level-triggered, 입력이 클록 활성 시 바로 반영 | Clock이 assert일 때 | S-R Latch, D Latch |
| Flip-Flop (플립플롭) | Edge-triggered, 상승/하강 시점에만 갱신 | Clock의 Rising/Falling edge | D Flip-Flop |
| Register (레지스터) | 여러 Flip-Flop의 집합, 데이터 저장 | 매 클록마다 값 갱신 | PC, Register File |
| Memory | 대량 데이터 저장 | 읽기/쓰기 제어 신호로 접근 | Instruction/Data Memory |
먼저 Latch 는 S-R Latch와 D Latch로 나눠진다.
S-R Latch는 S(set) = 켜라 , R(reset) = 꺼라 둘 다 0이면 그대로 두는 간단한 기억 회로이다. 둘 다 1인 경우는 불안정하므로 쓰지 않는다.

D-Latch는 S-R Latch 2개로 구성되어있다.
Clock이 1일 때 즉 활성화(asserted) 되었을 때 입력 값(D)이 출력값(Q)이 되고 Clock이 0(deasserted) 일때는 이전의 값을 출력한다.

Flip-Flop은 Clock Edge(클록의 상승/하강 순간)에만 데이터를 저장하는 Edge-Triggered Sequential Circuit 이다.
내부를 보면 D Latch를 2개 조합하여 만들었다.

clock이 0에서 1로 변할 때 값을 업데이트하는 Positive Edge Trigger(Rising Edge)와 1에서 0 으로 변할 때 값을 업데이트 하는 Negative Edge Trigger (Falling Edge)로 구분 할 수 있다.
Rising Edge를 예로 들어보면 다음과 같다. clock이 0->1로 오를때만 현재 D의 값을 Q로 바꾼다.

CPU에서 데이터가 흘러가는 과정은 클록 신호(clock) 를 기준으로 이루어진다.
하나의 클록 주기 안에는 “읽기 → 연산 → 저장” 의 세 단계가 순서대로 일어난다.
즉, 이전 클록에서 저장된 값을 레지스터로부터 읽고,
그 값을 조합논리(예: ALU)에 통과시켜 계산을 수행한 뒤,
그 결과를 다음 레지스터에 저장(write) 하는 것이다.
이 세 단계가 끝나야 하나의 클록 사이클이 완성된다.
⏱️ (3) Edge Triggered 방식의 의미
모든 저장소자(레지스터, 플립플롭)는 클록 신호의 엣지(edge) 에 반응한다.
즉, 상승엣지(rising edge) 또는 하강엣지(falling edge) 가 발생할 때만
입력 D의 값이 출력 Q에 반영된다.
그래서 클록이 0→1로 변하는 순간, D에 있던 데이터가 Q로 저장되고,
그 후 클록이 다시 바뀔 때까지 Q는 그대로 유지된다.
이 말은 곧 “클록 엣지 순간에 현재 데이터가 바로 저장된다”는 뜻이지만,
그 데이터는 같은 사이클 내에서 즉시 사용되는 게 아니라
다음 클록 주기에서 다른 회로가 읽어 사용하는 값이 된다.
예를 들어, Register A의 값이 클록 상승엣지에서 바뀌더라도,
그 값이 ALU를 거쳐 Register B에 저장되는 것은 다음 클록의 엣지에서 이루어진다.
이렇게 해야 모든 회로가 동일한 타이밍에 맞춰 안정적으로 동작할 수 있기 때문이다.
⚙️ (4) 클록 주기를 결정하는 원리
CPU에는 이런 레지스터들이 여러 개 직렬로 연결되어 있다.
그런데 클록 주기는 단순히 “레지스터 개수 × 지연시간”으로 더해지는 것이 아니다.
하나의 클록 주기 내에서 가장 오래 걸리는 경로,
즉 레지스터 → 조합논리 → 다음 레지스터 로 이어지는
critical path(최장 지연 경로) 가 전체 클록 주기를 결정한다.
따라서, 한 사이클이 완전히 끝나기 전에
모든 신호가 안정적으로 다음 레지스터에 도착해야 한다.
만약 ALU나 다른 조합논리 회로의 계산이 너무 오래 걸리면,
그만큼 클록 주기를 늘려야 한다.
즉, CPU의 속도는 가장 느린 경로의 지연시간에 의해 제한된다.
🔁 (5) “다음 클록에서 반영된다”의 진짜 의미
플립플롭의 내부에서는 클록 엣지 순간 D값이 즉시 Q로 바뀐다.
하지만 CPU 전체를 보면, 이 값이 다른 회로의 입력으로 안정적으로 사용되는 시점은
다음 클록 사이클이다.
왜냐하면 현재 클록에서 바뀐 값은
조합논리(예: ALU, 멀티플렉서, 어드더)를 거쳐야
다음 레지스터에 저장될 수 있는데,
이 연산들이 모두 완료되기까지 시간이 필요하기 때문이다.
그래서 “다음 클록에서 반영된다”는 표현은
플립플롭 자체가 늦게 동작한다는 뜻이 아니라,
시스템 전체가 그 값을 다음 클록 주기에서 안정적으로 이용한다는 의미다.
이 방식 덕분에 CPU는 모든 회로가 동일한 클록 엣지 기준으로 동작하게 되어
데이터가 섞이거나 타이밍이 어긋나는 문제(race condition)를 피할 수 있다.
Register File
| 동작 | 설명 |
| Register Read | 두 개의 레지스터(Rn, Rm) 값을 읽음 |
| Register Write | 하나의 레지스터(Rd)에 결과를 씀 (RegWrite 신호가 1일 때) |
| Decoder | 입력된 레지스터 번호를 실제 저장 위치(2ⁿ개 중 하나)로 매핑 |


관계 정리 — Datapath vs Control Path vs Logic Type
| 항목 | 주요 예시 | 포함 논리 | 주요 역할 |
| Datapath | ALU, Register, MUX, PC, Memory | ✅ Combinational + Sequential | 실제 연산과 데이터 흐름 |
| Control Path | Control Unit, FSM, Decoder | ✅ Sequential (상태저장) + Combinational (신호생성) | Datapath 제어 신호 생성 |
| Combinational Logic | ALU, Adder, AND/OR Gate | 즉시 출력 | 데이터 처리 |
| Sequential Logic | Register, PC, Flip-Flop | Clock 동기화 | 상태 저장, 순차 실행 |
