IT 프로그래밍/컴퓨터구조

[컴퓨터구조] CPU 구조

기술1 2024. 12. 11. 18:59
반응형

CPU의 주요 동작: Instruction Fetch부터 Register Write까지

컴퓨터가 명령어를 실행하는 과정은 여러 단계를 거치며, 각 단계에서 명령어의 처리와 데이터의 이동이 이루어집니다. 이 과정은 Instruction Fetch(IF), Instruction Decode(ID), Execute(EX), Memory Access(MEM), 그리고 Write Back(WB) 단계로 나뉩니다. 여기서는 각 단계에서 수행되는 작업을 자세히 살펴보겠습니다.


1. Instruction Fetch (IF)

"PC(Program Counter) -> Instruction Memory"

  • 과정 설명:
    CPU는 Program Counter(PC) 값을 사용해 명령어 메모리로부터 실행할 명령어를 읽어옵니다. 이 과정을 Instruction Fetch라고 합니다.
    • Program Counter(PC): 현재 실행 중인 명령어의 주소를 나타내며, 다음 명령어의 위치를 지정합니다.
    • Instruction Memory: 명령어가 저장된 메모리 영역입니다.
  • 주요 작업:
    • PC 값을 바탕으로 메모리에서 명령어를 읽습니다.
    • 읽어온 명령어는 이후 단계에서 해석 및 실행됩니다.

2. Instruction Decode (ID)

"명령어 해석 및 레지스터 선택"

  • 과정 설명:
    Fetch된 명령어를 해석하는 단계입니다. 명령어는 일반적으로 특정 형식(OpCode, 레지스터 번호, 즉시 값 등)을 가지며, 이를 분석해 어떤 동작(연산, 메모리 접근, 분기 등)을 수행해야 하는지 결정합니다.
  • 주요 작업:
    1. 명령어 해석:
      • OpCode를 분석해 명령어의 종류(Instruction Class)를 파악합니다.
      • 종류에 따라 이후 단계에서 수행할 작업이 달라집니다.
        • 예: 산술/논리 연산, 메모리 접근, 분기 등.
    2. 레지스터 읽기:
      • 명령어에 포함된 레지스터 번호를 사용해 Register File에서 데이터를 읽어옵니다.
      • 읽어온 데이터를 ALU나 메모리 연산에 활용합니다.

3. Execute (EX)

"ALU를 사용한 계산"

  • 과정 설명:
    Instruction Decode에서 해석된 결과를 바탕으로 명령어의 실행 단계에 들어갑니다. 이 과정에서 주로 ALU(Arithmetic Logic Unit)가 사용됩니다.
  • 주요 작업:
    1. 데이터 연산:
      • 산술/논리 연산을 수행합니다.
        • 예: 덧셈, 뺄셈, AND, OR 등.
    2. 메모리 주소 계산:
      • 메모리에 접근하는 명령어의 경우, 데이터 메모리의 주소를 계산합니다.
        • 예: Load/Store 명령어에서 Base Address + Offset.
    3. 분기 조건 판단:
      • 분기 명령어의 경우, 조건에 따라 다음 실행할 명령어의 주소를 결정합니다.

4. Memory Access (MEM)

"데이터 메모리에 접근"

  • 과정 설명:
    Execute 단계에서 계산된 주소를 기반으로 메모리에 접근하여 데이터를 읽거나 저장하는 작업을 수행합니다.
  • 주요 작업:
    • Load: 메모리에서 데이터를 읽어옵니다.
    • Store: 메모리에 데이터를 저장합니다.
    • 주의: 메모리 접근은 시간이 많이 걸리기 때문에 캐시가 활용될 수 있습니다.

5. Write Back (WB)

"Register File 업데이트"

  • 과정 설명:
    마지막 단계에서는 Execute 또는 Memory Access 단계에서 생성된 데이터를 Register File에 저장합니다. 이 단계는 명령어의 최종 결과를 반영하는 중요한 과정입니다.
  • 주요 작업:
    • 명령어에서 지정된 목적지 레지스터에 데이터를 기록합니다.
    • 예: 연산 결과를 저장하거나, 메모리에서 읽어온 데이터를 저장합니다.

Instruction Class에 따른 동작

명령어의 종류에 따라 각 단계에서 수행되는 동작이 달라집니다. 몇 가지 예를 들어보겠습니다:

  1. Arithmetic/Logical 명령어 (ADD, SUB, AND 등):
    • ALU를 사용해 연산을 수행합니다.
    • 결과는 Register File로 Write Back됩니다.
  2. Memory 명령어 (LOAD, STORE):
    • LOAD: 메모리에서 데이터를 읽어 레지스터에 저장합니다.
    • STORE: 레지스터의 데이터를 메모리에 저장합니다.
  3. Branch 명령어 (BEQ, BNE 등):
    • 조건을 비교하고, 조건이 만족되면 PC를 분기 주소로 변경합니다.
    • 만족하지 않으면 다음 명령어로 진행합니다.

CPU의 핵심 동작 정리

  1. PC를 통해 명령어를 읽는다 (Fetch).
  2. 읽은 명령어를 해석하고 필요한 데이터를 준비한다 (Decode).
  3. ALU를 통해 연산하거나 메모리 주소를 계산한다 (Execute).
  4. 데이터 메모리에 접근하거나 데이터를 저장한다 (Memory Access).
  5. 결과를 Register File에 기록한다 (Write Back).

이러한 단계를 통해 CPU는 효율적으로 명령어를 처리하며, 각각의 단계가 명확히 정의되어 있어 병렬 처리(Pipelining) 등의 최적화 기술을 구현할 수 있습니다.

 

 


단계별 요약

  1. IF (Instruction Fetch): PC를 통해 명령어를 Instruction Memory에서 가져옴.
  2. ID (Instruction Decode): 명령어를 해석하고 필요한 데이터를 Register File에서 읽어옴.
  3. EX (Execute): ALU를 사용해 연산을 수행하거나 메모리 주소를 계산.
  4. MEM (Memory Access): Data Memory에서 데이터 읽기(LOAD) 또는 쓰기(STORE).
  5. WB (Write Back): 결과 데이터를 Register File에 저장.

LOAD와 STORE 명령어의 동작 차이

명령어Base + Offset 계산Data MemoryRegister File
LOAD 계산된 주소 사용 데이터 읽기 (Load) 데이터 저장 (Write Back)
STORE 계산된 주소 사용 데이터 쓰기 (Store) 없음

 

조합 소자

출력 : 입력에 따라 달라짐

예 : and, or, xor, not ... -> ALU, mux 

 

상태 소자

출력 : 입력과 내부 상태에 따라 달라짐

예 : d filp-flop (FF), SR, FF, JK, FF ... -> 메모리, 레지스터

 

클럭의 상승/하강에만 내부 상태가 달라짐(edge-triggered)

 

 

Clocking methodology

신호의 읽고 쓰기 타이밍을 정의

  • 신호를 읽고 있는 동안 새 값이 쓰일 경우?
  • Edge-triggered clocking: 클럭의 edge에서만 값 변경 가능

state element -> combination logic -> state element 2

 

클럭 주기 : 가장 긴 조합 논리 회로의 delay에 의해 결정 

 

 

반응형

'IT 프로그래밍 > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] Processor1  (0) 2024.12.17
[컴퓨터구조] processor1  (0) 2024.12.17
[컴퓨터구조] Dapapath  (1) 2024.12.11
[단국대 강의] MIPS 컴퓨터 구조 instruction  (0) 2024.09.29
컴퓨터 응용 분야  (0) 2024.09.06