콘텐츠로 바로가기

ALU & Data Path Design

CPU의 연산 엔진인 ALU의 내부 구조와, 명령어 실행을 위해 데이터가 흐르는 물리적 통로인 데이터 패스의 연동 원리를 다루는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

computer-architecture-embedded-systemscomputer-architectureembedded-systemsdigital-logicprocessor-physicsaludata-path-designlearning9 min read

1. Overview

ALU와 데이터 경로 설계(ALU & Data Path Design, ADP)는 흩어져 있던 산술 덧셈기(Adder)와 논리 게이트들을 모아, CPU의 진짜 심장인 **산술 논리 장치(ALU)**로 조립하고 데이터가 파이프관을 타고 흐르는 고속도로(Data Path)를 개통하는 프로세서 설계 공학입니다.

학습자는 멀티플렉서(MUX) 스위치를 제어하여 하나의 연산기가 덧셈, 뺄셈, 비트 시프트를 모두 수행하도록 멱살 잡는 ALU 아키텍처를 뜯어봅니다. 나아가 레지스터 파일(Register File)에서 데이터를 뽑아내어 ALU를 거쳐 다시 메모리로 꽂아 넣는 **단일 사이클 데이터 경로(Single-Cycle Data Path)**의 물리적 궤적을 해부함으로써, 무미건조한 C/C++ 소스 코드가 어떻게 실리콘 칩 안에서 전기 신호의 흐름(Flow)으로 치환되어 연산되는지 밑바닥 물리를 통달합니다.

2. Scope & Boundaries

In-Scope

  • ALU 코어 물리 (ALU Core Mechanics): 산술 연산(Add/Sub), 논리 연산(AND/OR/XOR), 플래그 제어(Zero, Negative, Overflow, Carry).
  • 데이터 흐름 스위칭 (Data Flow Switching): 멀티플렉서(MUX)를 이용한 데이터 라우팅, 피연산자(Operand) 선택 로직.
  • 레지스터 파일 설계 (Register File Design): 읽기/쓰기 포트(Read/Write Ports), 워드 라인(Wordline)과 디코더.
  • 단일 사이클 데이터 경로 (Single-Cycle Datapath): PC(Program Counter) \rightarrow 명령어 메모리 \rightarrow 레지스터 \rightarrow ALU \rightarrow 데이터 메모리 궤적 모델링.

Out-of-Scope

  • 명령어 디코딩 및 제어 신호 생성: "어떤 MUX를 열어라"라고 신호를 뿌리는 두뇌 역할 \rightarrow 02-01-04. ISA & Control Unit Logic 영역.
  • 다중 사이클 및 파이프라이닝: 데이터가 한 클럭에 다 못 돌고 여러 클럭에 걸쳐 겹쳐 도는 기법 \rightarrow 02-03-01. Pipeline & Hazard Resolution 영역.

Boundaries

  • ADP vs. Logic Gates (02-01-01): 디지털 논리(02-01-01)가 트랜지스터로 덧셈기(Adder) 부품 단 하나를 만드는 '세공 작업'이라면, ADP는 그 덧셈기 수백 개와 MUX를 컨베이어 벨트에 배치하여 데이터가 피 철철 흐르듯 칩 전체를 관통하게 만드는 '공장 레이아웃(Data Path) 설계'입니다.

3. Counterexample

  • 클럭 주기 과부하 오판 (Critical Path Ignorance): 단일 사이클 구조에서, ALU 연산과 메모리 로드(Load)가 순차적으로 일어나는 가장 험난한 경로(Critical Path)의 전파 지연 시간을 무시하고 클럭(Clock) 속도만 냅다 올려버리는 오버클럭의 참사. 데이터가 레지스터에 도착하기도 전에 엣지(Edge)가 쳐버리면, 쓰레기 값이 저장되어 시스템 커널이 패닉(Kernel Panic)을 일으키고 폭발합니다.
  • 플래그 무시에 의한 분기 붕괴 (Flag Mismatch Fallacy): 두 수를 빼(Sub)서 결과가 0이면 같다는 것을 의미하는 ALU의 상태 플래그(Zero Flag)를 제대로 세팅/읽지 못하는 하드웨어 엉성함. 조건부 점프(Branch if Equal) 명령어가 플래그 선을 제대로 타지 못하면, if(A == B) 분기문이 무조건 깨져 소프트웨어 로직이 안드로메다로 날아갑니다.

4. Prerequisites

  • 디지털 논리 조합/순차 회로 (Basic): 덧셈기(Adder), MUX, 플립플롭이 물리적으로 어떤 딜레이와 스위치 역할을 하는지 완벽히 숙지해야 이들을 조립할 수 있습니다. (02-01-01 DLB)
  • 2의 보수 덧셈기 (Basic): 뺄셈을 덧셈기(Adder) + 비트 반전 게이트 꼼수로 처리하는 원리를 알아야 ALU 스위칭이 보입니다. (02-01-02 IFR)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 ALU Anatomy 덧셈기 하나에 MUX를 덕지덕지 붙여 뺄셈, AND, OR를 단일 모듈로 통합하는 연산기 마법을 쥡니다. P1
2 Status Flags 연산 결과가 0인지, 부호가 뒤집혔는지(Overflow)를 하드웨어 핀(Pin) 플래그로 띄워 CPU가 판단하게 만듭니다. P5
3 Register File 초고속 캐시보다 수백 배 빠른 CPU의 주머니(Register)가 어떻게 읽고 쓰기를 동시에 처리하는지 해부합니다. Industry
4 Single-Cycle Datapath 명령어가 들어와 연산되고 저장될 때까지, 데이터가 칩 안의 고속도로(Bus)를 타는 우주적 궤적을 뚫습니다. Industry

6. Learning Topics

Basic

Core Topic 01: ALU 코어 아키텍처 (ALU Anatomy)

  • Why to Learn: CPU 안에서 A+BA+B, ABA-B, ABA \land B를 할 때마다 전용 칩을 따로 쓰면 면적이 폭발하므로, 하나의 거대한 스위치 박스(ALU)를 만들어 제어 신호로 입맛에 맞게 돌려쓰기 위함입니다.
  • What to Learn:
    • Concepts: ALU(Arithmetic Logic Unit), 피연산자(Operand), 제어선(ALU Control).
    • Skills: 비트별 ALU 설계(1-bit ALU), 리플 캐리 ALU 확장, 멀티플렉서 라우팅.
    • Tools: Logisim 회로도.
    • Trade-offs: 1비트 ALU를 32개 이어 붙여 직관적으로 만드는 리플 딜레이(지연 폭발) vs 캐리를 통째로 예측해 버리는 CLA(Carry Lookahead) 모듈을 때려 박아 속도를 높이는 대신 트랜지스터 면적이 떡상하는 하드웨어 딜레마.
  • How to Learn:
    • 1단계: 1비트 ALU 블록 안에 AND, OR, 가산기(Adder) 회로를 몽땅 병렬로 때려 박은 뒤, 맨 끝단에 4<1> MUX를 달아 ALU Control 핀에 따라 원하는 연산 결과 1개만 쏙 빼먹는 스위칭 마법을 해부합니다.
    • 2단계: 뺄셈(Sub)을 할 때는 B 입력을 무조건 뒤집어(NOT 게이트 통과)버리고 맨 처음 캐리 인(Carry-in)에 1을 강제 주입하여 '2의 보수 덧셈'으로 기계적으로 위장해버리는 꼼수를 뜯어봅니다.
  • Implement: 입력 변수 A, B와 3비트 제어 코드(Opcode: 000=AND, 001=OR, 010=ADD, 110=SUB)를 파라미터로 받아, 물리적인 비트 게이트 시뮬레이션을 통해 최종 결과값 32비트를 뱉어내는 파이썬 소프트웨어 ALU 모듈 구현.

Core Topic 02: 조건 분기와 상태 플래그 (Status Flags & Condition Codes)

  • Why to Learn: C 언어의 if (x == y)if (x < 0) 같은 분기문이, 하드웨어에서는 ALU가 연산 후 은밀하게 올려놓은 깃발(플래그 핀) 단 하나로 결정되는 기계적 판단 원리를 깨우치기 위함입니다.
  • What to Learn:
    • Concepts: 조건 플래그(Condition Flags) - Z(Zero), N(Negative), V(Overflow), C(Carry).
    • Skills: 분기 명령어(Branch) 결정을 위한 플래그 조합 로직(예: N XOR V).
    • Tools: 비교 연산(Compare Instruction) 메커니즘.
    • Trade-offs: 모든 연산마다 무식하게 4개의 플래그 핀을 매번 업데이트하여 로직을 낭비하는 오버헤드 vs 플래그를 저장하는 상태 레지스터(CPSR) 하나만 두고 분기 시점에만 조회하는 압도적 속도 이득.
  • How to Learn:
    • 1단계: X==YX == Y인지 묻는 질문은 하드웨어에서 미련하게 X,YX, Y를 비교하는 게 아니라, 냅다 ALU로 뺄셈(XYX-Y)을 때린 뒤 결과가 0(Zero)이면 Z 플래그 핀에 불이 들어오게 세팅하는 폭력적인(Brute) 물리를 해부합니다.
    • 2단계: 크기 비교(X<YX < Y)를 할 때는, 뺄셈 결과의 음수(N) 플래그만 보면 오버플로우가 났을 때 오류가 나므로 반드시 NVN \oplus V (Negative XOR Overflow) 논리로 진짜 부호를 도출하는 수학적 땜질을 뜯어봅니다.
  • Implement: 두 수를 빼는 ALU 모듈을 확장하여, 연산 결과가 0일 때 Z=1, MSB가 1일 때 N=1, 오버플로우 발생 시 V=1 등의 플래그 딕셔너리를 리턴하고, Branch_If_Less_Than 함수가 이 플래그 딕셔너리의 N ^ V를 확인해 True/False를 뿜어내는 제어 분기 시뮬레이터.

Practical

Core Topic 03: 레지스터 파일 아키텍처 (Register File Physics)

  • Why to Learn: 데이터가 메모리(DRAM)까지 다녀오는 100나노초의 영겁을 기다릴 수 없어, ALU 바로 옆에 딱 달라붙어 클럭 엣지 한 방에 읽고 쓰기를 마치는 초고속 저장 공간의 구조를 장악하기 위해서입니다.
  • What to Learn:
    • Concepts: 레지스터 파일(Register File), 워드 라인(Wordline), 디코더(Decoder), 포트(Read/Write Port).
    • Skills: D-플립플롭(Flip-Flop) 뱅크, 3-State 버퍼, 멀티플렉서를 통한 Read 데이터 덤프.
    • Tools: 레지스터 버스 라우팅(Bus Routing).
    • Trade-offs: 레지스터 개수를 1024개로 미친 듯이 늘려서 컴파일러를 편하게 해주는 설계 vs 개수가 늘어날수록 MUX가 산더미처럼 커져서 ALU로 데이터를 쏘는 지연 시간이 폭발해 클럭 속도가 박살 나는 하드웨어의 저주(보통 32개로 타협).
  • How to Learn:
    • 1단계: 32개의 32비트 레지스터(총 1024개 플립플롭) 중에서 5비트 주소(00101)를 디코더에 쏘면, 딱 5번 방의 문(Wordline)만 열려서 데이터가 버스로 우수수 쏟아지는 물리를 해부합니다.
    • 2단계: add x3, x1, x2 명령어를 처리하기 위해 2개의 Read 포트(x1, x2용 MUX)와 1개의 Write 포트(x3 디코더)가 동시에 1클럭 내에서 독립적으로 움직이는 다중 포트 기하학을 뜯어봅니다.
  • Implement: 32개의 요소를 가진 리스트 배열을 메모리로 삼고, Read_Reg1, Read_Reg2 인덱스를 주면 2개의 값을 리턴(MUX)하며, Write_Reg 인덱스와 Write_Data, 그리고 RegWrite 허가 플래그가 켜졌을 때만 리스트 값을 업데이트하는(디코더) 가상 레지스터 파일 모듈.

Advanced

Core Topic 04: 단일 사이클 데이터 경로 조립 (Single-Cycle Datapath)

  • Why to Learn: 흩어져 있던 PC(프로그램 카운터), 명령어 메모리, 레지스터, ALU, 데이터 메모리를 하나의 빵판(Breadboard) 위에 거대한 전선(Bus)으로 연결해, CPU 뼈대가 완성되는 카타르시스를 맛보기 위함입니다.
  • What to Learn:
    • Concepts: 데이터 경로(Datapath), 프로그램 카운터(PC), 인스트럭션 메모리(IM), 데이터 메모리(DM).
    • Skills: 버스(Bus) 아키텍처, R-Type/I-Type/J-Type 명령어의 데이터 흐름 다이어그램 맵핑.
    • Tools: 단일 사이클 클럭 모델링.
    • Trade-offs: 명령어가 들어와서 메모리 끝단까지 한 클럭(사이클) 안에 모든 게 다 끝나는 단일 사이클의 압도적인 단순함/우아함 vs 가장 오래 걸리는 명령어(Load Word)의 시간에 전체 클럭 사이클(TT)을 무조건 강제 고정해야 해서 나머지 빠른 명령어(ADD)들이 CPU를 놀게 만드는 최악의 비효율.
  • How to Learn:
    • 1단계: PC가 4씩 펄스처럼 증가하며 명령어 메모리에서 lw (Load Word)를 긁어오면, 레지스터를 읽고(주소 베이스) \rightarrow 부호 확장된 오프셋을 ALU로 더해 \rightarrow 메모리를 찍어 읽은 뒤 \rightarrow 다시 레지스터로 박아넣는 최장 길이 궤적(Critical Path)을 눈으로 따라가 봅니다.
    • 2단계: add 명령어에서는 메모리(DM)를 거치지 않고 ALU 결과가 레지스터로 바로 직행해야 하므로, 메모리 출력과 ALU 출력 사이에 또 거대한 MUX 하나를 박아 제어(MemtoReg 플래그)하는 데이터 밸브 스위칭을 뜯어봅니다.
  • Implement: PC, IM, RegFile, ALU, DM 모듈들을 객체로 만들어 파이프라인처럼 엮어놓고, 32비트 기계어(Machine Code) 하나를 쑤셔 넣으면 각 모듈을 순차적으로 거치며 데이터가 어떻게 펌핑되어 최종 레지스터에 기록되는지 추적 로그(Trace Log)를 찍는 마이크로아키텍처 시뮬레이터 로직 작성.

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
Register File 여러 개의 CPU 레지스터를 하나의 메모리 블록처럼 관리하는 고속 저장 장소 물리입니다. 기본 자원 관리 Register Address 외부 '메인 메모리'와 혼동 P1:CS2023/ProcessorProgs core
Datapath 연산에 필요한 데이터가 CPU 구성 요소들 사이를 흐르는 물리적인 배선 통로입니다. 추천 실행 통로 ALU / MUX Control Unit '소프트웨어 경로'와 혼동 P1:CS2023/ProcessorProgs core
Critical Path 데이터 패스 내에서 신호가 시작에서 끝까지 도달하는 데 가장 긴 시간이 걸리는 경로입니다. 실무 성능 결정 Delay Clock Speed '가장 중요한 기능'으로 오해 Industry Design core
Forwarding 앞선 연산 결과가 레지스터에 기록되기 전에 직접 다음 연산의 입력으로 넣어주는 물리적 우회 기술입니다. 심화 성능 가속 Hazzard Pipeline '데이터 전송' 일반과 혼동 P1:CS2023/ProcessorProgs core

8. References

Primary

Secondary

  • [Computer Organization and Design (MIPS Edition)] Patterson & Hennessy — The definitive "Green Book" for DP.
  • [Digital Systems: Principles and Applications] Tocci — Practical implementation of ALU/DP.

Industry

  • [ARM Cortex-M Series Architecture Reference Manual] — Real-world ALU flags and data paths.
  • [Synopsys Design Compiler Guidelines] — Industry timing and path analysis standards.

9. Final Checklist

Primary

  • 32비트 가산기 회로에서 특정 비트의 합(SS)과 올림수(CC)가 이전 비트들의 결과에 논리적으로 종속되는 과정을 소통 가능한가? (P1)
  • ALU 컨트롤 비트 조합에 따라 동일한 하드웨어가 덧셈, 뺄셈, 논리 연산으로 물리적 목적이 바뀌는 메커니즘을 입증할 수 있는 가? (P1)

Secondary

  • 데이터 패스 설계를 보고, 특정 명령어(예: ADD $1, $2, $3) 실행 시 어느 제어 신호가 1(Active)이 되어야 하는지 물리적으로 서술 가능한가?
  • 왜 레지스터 파일의 읽기 포트 개수가 동시에実行 가능한 연산 명령어 수를 물리적으로 제약하는지 설명할 수 있는 가?

Industry

  • 고주파 프로세서 설계 시, Critical Path 상의 게이트 수를 줄이기 위해 연산 논리를 분화(Split-combine)하는 개선안을 제안할 수 있는 가? (SFIA)
  • 하드웨어 검증(Verification) 시, 데이터 패스 상의 모든 가능한 경로에 대해 레이스 컨디션(Race Condition)이 발생하지 않음을 물리적으로 증명할 수 있는 가?

Digital Logic & Processor Physics

4 / 7