1. Instruction Decode (ID) 과정

명령어 디코딩은 CPU에서 실행할 명령어를 해석하는 과정입니다. 이 과정은 CPU의 파이프라인에서 두 번째 단계로, 첫 번째 단계인 **Instruction Fetch (IF)**에서 가져온 명령어를 해석하는 역할을 합니다. 주요 작업은 다음과 같습니다:

  • 명령어 필드 분석: 명령어는 여러 필드로 나뉩니다(예: opcode, source/destination 레지스터 번호, immediate 값 등). 이 필드들을 분석하여 명령어의 종류와 작업을 식별합니다.
    • Opcode: 명령어의 종류(예: 덧셈, 뺄셈, 분기 등)를 결정하는 필드.
    • Source/Destination 레지스터: 연산에 사용될 레지스터의 번호.
    • Immediate 값: 일부 명령어는 즉시 값을 사용합니다.
  • 레지스터 파일에서 값 읽기: 디코딩된 명령어에 따라 레지스터 파일에서 필요한 값을 읽어옵니다. 예를 들어, 덧셈 명령어가 주어지면, 두 소스 레지스터의 값을 읽습니다.
  • 제어 신호 생성: 명령어를 해석한 결과에 따라 제어 신호를 생성하여 다음 단계(Execution, EX)로 전달합니다. 여기에는 ALU 제어 신호, 메모리 액세스 신호 등이 포함됩니다.

2. R-Type 명령어 (Register Type)

R형 명령어는 레지스터 간의 연산을 수행합니다. 이는 레지스터에서 데이터를 읽어 와서 연산한 후, 그 결과를 다시 레지스터에 저장하는 명령어들입니다. 주로 산술 및 논리 연산, 이동 연산이 여기에 포함됩니다.

  • 구조:
    • opcode (6비트) | rs (5비트) | rt (5비트) | rd (5비트) | shamt (5비트) | funct (6비트)
    • opcode: 명령어 코드(일반적으로 000000).
    • rs: 첫 번째 소스 레지스터.
    • rt: 두 번째 소스 레지스터.
    • rd: 결과가 저장될 목적 레지스터.
    • shamt: 쉬프트 연산에 필요한 쉬프트 양.
    • funct: 연산의 종류를 결정하는 기능 필드.
  • 예시:
    • add $t1, $t2, $t3: $t1 = $t2 + $t3
    • sub $t1, $t2, $t3: $t1 = $t2 - $t3

3. J-Type 명령어 (Jump Type)

J형 명령어는 프로그램의 실행 흐름을 특정 주소로 변경하는 분기 명령어입니다. 프로그램 카운터(PC)를 업데이트하여 실행 중인 명령어의 흐름을 제어합니다.

  • 구조:
    • opcode (6비트) | address (26비트)
    • opcode: 명령어 코드.
    • address: 분기할 대상 주소 (26비트로 표현됨).
  • 예시:
    • j target: 프로그램의 실행을 지정된 주소로 점프.
    • jal target: 점프 후 현재 PC 값을 $ra(return address 레지스터)에 저장하여, 나중에 복귀할 수 있도록 함.

4. I-Type 명령어 (Immediate Type)

I형 명령어는 레지스터와 즉시 값(상수)을 함께 사용하여 연산을 수행합니다. 주로 메모리에서 데이터를 로드하거나 저장하는 명령어와 산술 연산에 사용됩니다.

  • 구조:
    • opcode (6비트) | rs (5비트) | rt (5비트) | immediate (16비트)
    • opcode: 명령어 코드.
    • rs: 소스 레지스터.
    • rt: 목적 레지스터 또는 대상 레지스터.
    • immediate: 16비트 즉시 값(상수).
  • 예시:
    • addi $t1, $t2, 10: $t1 = $t2 + 10
    • lw $t1, 4($t2): $t1 = 메모리[$t2 + 4] (메모리에서 데이터를 로드)
    • sw $t1, 4($t2): 메모리[$t2 + 4] = $t1 (메모리에 데이터를 저장)

세 가지 명령어 유형 비교

  • R-Type: 레지스터 간 연산을 수행하며, 명령어가 3개의 레지스터(rs, rt, rd)를 참조합니다.
  • J-Type: 점프 명령어로, 특정 주소로의 분기를 수행합니다.
  • I-Type: 레지스터와 즉시 값을 사용한 연산이나 메모리 접근을 수행합니다.

 

* https://lifelectronics.tistory.com/182

 

'CPU ARCHITECTURE1 > CPU' 카테고리의 다른 글

05-4. Memory Access(MEM)  (0) 2024.09.30
05-3. Execute(EX)  (0) 2024.09.30
05-1. Instruction Fetch(IF)  (0) 2024.09.30
05. CPU 5-Stage Pipeline  (0) 2024.09.30
04. SPR(Special Purpose Register)  (0) 2024.09.29

+ Recent posts