CPU: MIPS 아키텍처 및 CPU 내부 구성요소 정리
MIPS 아키텍처 기반 CPU 용어 정리
MIPS(Microprocessor without Interlocked Pipeline Stages)는 RISC(Reduced Instruction Set Computer) 아키텍처의 대표적인 예시로, 명령어 집합이 단순하고 고정 길이이며 파이프라인 처리에 최적화되어 있습니다. 이러한 특성 덕분에 MIPS는 CPU의 작동 원리를 이해하는 데 매우 효과적인 모델이 됩니다. CPU 전문가 수준의 이해를 위해 각 단계의 내부 메커니즘과 MIPS의 특성을 상세히 파고들어 보겠습니다.
전제: MIPS ISA (Instruction Set Architecture)의 특징
MIPS ISA는 다음의 특징을 가집니다:
RISC: 적은 수의 단순한 명령어로 구성됩니다.
고정 길이 명령어: 모든 명령어가 32비트 고정 길이를 가집니다. 이는 Fetch 단계에서 명령어를 가져오는 것을 단순화합니다.
Load/Store 아키텍처: 메모리 접근은
lw
(load word),sw
(store word)와 같은 로드/스토어 명령어로만 가능하며, 모든 연산은 레지스터 간에 이루어집니다.파이프라인 친화적: 명령어 실행 단계들이 균등한 시간(클럭 사이클)을 가지도록 설계되어 파이프라이닝 효율을 극대화합니다.
32개의 범용 레지스터:
$s0-$s7, $t0-$t9
등 32개의 32비트 범용 레지스터를 사용합니다. 레지스터 파일은 CPU 내부의 초고속 메모리 역할을 합니다.
MIPS CPU의 내부 구성 요소 (Fetch-Decode-Execute Cycle 관련)
MIPS CPU가 Fetch-Decode-Execute Cycle을 수행하기 위해 필수적인 내부 구성 요소들은 다음과 같습니다.
PC (Program Counter)
PC는 현재 실행되고 있는 프로그램에서 "다음에 가져올 명령어의 메모리 주소"를 저장합니다.
명령어가 실행될 때마다 PC는 자동으로 +4(1워드 = 4바이트)만큼 증가해서 다음 명령어를 순차적으로 가리키게 됩니다. 점프나 브랜치 명령이 실행될 경우, PC는 연산 결과에 따라 다른 주소로 바뀔 수 있습니다.
IM (Instruction Memory)
프로그램 전체의 명령어가 저장된 읽기 전용 메모리입니다.
PC가 지정하는 주소의 명령어를 읽어와 파이프라인의 Fetch 단계에서 사용하게 됩니다.
IM은 CPU 외부 혹은 내부에 위치할 수 있으나, 파이프라인 성능을 위해 빠른 접근 속도를 가집니다.
RegFile (Register File)
32개의 32비트 범용 레지스터로 이루어진 내부 메모리 공간입니다.
동시에 2개 레지스터를 읽고 1개 레지스터에 쓸 수 있도록 입력/출력 포트가 나뉘어 있습니다.
연산에 필요한 피연산자(값)를 빠르게 제공하고 결과를 저장하는데 사용됩니다.
DM (Data Memory)
Load/Store 명령어에 의해 접근되는 메모리입니다.
연산의 직접 대상이 아닌 데이터(예: 배열, 변수 등)가 저장되어 있습니다.
CPU가 데이터를 읽거나 쓸 때만 접근하며, 일반 연산은 레지스터 간에 이루어집니다.
ALU (Arithmetic Logic Unit)
산술 연산(덧셈, 뺄셈 등)과 논리 연산(AND, OR 등)을 실제로 계산하는 논리회로입니다.
ALU의 제어 신호는 명령어의 기능에 맞게 결정되며, 결과는 레지스터나 DM 등으로 전달됩니다.
Sign Extender
I-타입 명령어에서 16비트인 즉시값(immediate value)을 32비트로 부호를 유지한 채 확장합니다(예: 음수를 올바르게 표현 가능).
부호 확장을 통해 ALU나 주소 계산에 사용되는 올바른 값으로 변환시켜 줍니다.
Shift Left 2
주소 계산 또는 점프, 브랜치 명령에서 오프셋을 워드 단위로 맞추기 위해 비트를 두 칸 왼쪽으로 이동(=4배 곱하기)합니다.
이를 통해 실제 메모리 주소 계산에 필요한 값을 만듭니다.
Mux (Multiplexer)
2개 이상의 입력 중 하나를 선택하여 다음 회로(예: ALU, 레지스터 등)에 값을 전달합니다.
어떤 값이 선택될지는 CU(Control Unit)에서 제어 신호로 결정합니다.
예시: ALU 입력 선택(Mux로 레지스터 값 혹은 즉시값 중에 무엇을 넣을지 정함)
Control Unit (CU)
명령어의 opcode, funct 필드 값을 해석하여 각 하드웨어 구성 요소가 어떻게 동작할지 결정합니다.
CU에서 발생한 제어 신호에 의해 각종 Mux의 선택, ALU 연산 종류, 레지스터 및 메모리 읽기/쓰기 활성화 등이 결정됩니다.
파이프라인의 효율적인 동작 및 올바른 명령어 수행을 위해 필수적인 제어 블록입니다.