컴퓨터 구조 - 10. Processor(Control Unit)

JeongSH·2024년 11월 1일

컴퓨터 구조

목록 보기
10/11

Control Unit이 필요한 이유

  • ALU는 덧셈, 뺄셈, AND, OR, NOR 등 다양한 연산을 지원한다.
  • 예를 들어 D-type 연산을 수행할 때는 주솟값을 계산해야 하므로 ALU에서 덧셈 연산을 처리해야 한다.
  • R-type 연산을 할 때는 덧셈 외에도 다양한 연산을 수행해야 한다.
  • 이 외에도 By-pass와 같이 단순히 값을 넘겨주어야 할 때도 있다.
  • ALU는 각 Instruction에 맞는 연산을 수행해야 하며, 이를 위해 신호를 받아야 한다.
  • 이러한 신호를 제공하는 역할을 Control Unit이 담당한다.
    따라서 Control Unit은 ALU가 시기적절하게 필요한 연산을 수행하도록 하여 Processor가 명령을 수행할 수 있게 한다.
  • ALU 외에도 MUX, Data Memory 등에도 신호를 제공해야 하므로 Control Unit이 필요하다.

구조

  1. Main Control Unit
  • 주요 역할: 명령어의 타입을 해석하고, 프로세서 내의 주요 구성 요소에 필요한 제어 신호를 생성한다.
  • 작동 방식: 인출한 명령어의 오퍼코드(opcode)를 해독하여 해당 명령어가 R-type, D-type, I-type 등 어떤 종류인지 파악하고, 이를 바탕으로 필요한 제어 신호를 생성한다.
  • 제어 신호 생성: ALU 제어 신호, 메모리 읽기/쓰기 신호, 레지스터 읽기/쓰기 신호, MUX 선택 신호 등을 결정하여 프로세서의 각 구성 요소가 명령어에 맞게 동작하도록 지시한다.
  • 예시: D-type 명령어일 경우, 메모리 접근을 위해 메모리 읽기/쓰기 신호를 생성하고, ALU에는 주소 계산을 위한 덧셈 연산을 지시하는 신호를 보낸다.
  1. ALU Control Unit
  • 주요 역할: Main Control Unit에서 받은 ALU 제어 신호와 명령어의 기능 코드(funct)를 바탕으로 ALU가 수행할 구체적인 연산을 결정한다.
  • 작동 방식: Main Control Unit에서 R-type 명령어가 들어온 경우, 기능 코드(funct)에 따라 덧셈, 뺄셈, 논리 연산 등을 수행하도록 ALU에 제어 신호를 보낸다.
  • 세부 제어: ALU Control Unit은 ALU가 다양한 연산을 지원할 수 있도록 덧셈, 뺄셈, AND, OR, NOR 등의 연산 신호를 조정한다.
  • 예시: R-type 명령어에서 덧셈을 지시할 경우, ALU에 덧셈 연산을 수행하도록 신호를 전달한다.

예시 (ADD X1, X2, X3)

  1. 해당 과정은 R-type이다. Instruction을 Fetch 한다.
  2. 덧셈에 필요한 레지스터 주소에 값을 읽는다. (2, 3)
  3. Instruction에서 opcode(11bit) 부분을 읽고 Main Control 에서 ALUOp 신호를 ALU Control로 전달한다.
  4. ALU Control에서 opcode와 ALUOp를 통해 ALU에서 덧셈 연산을 하도록 신호를 준다.
  5. 덧셈 연산을 수행 후 X1에 Write Back된다.
  6. PC를 증가시킨다.

예시 (LDUR X1, [X2, offset])

  1. 해당 과정은 D-type이다. Instruction을 Fetch 한다.
  2. X2의 값을 읽는다.
  3. offset을 sign-extend 한다.
  4. Instruction에서 opcode(11bit) 부분을 읽고 Main Control 에서 ALUOp 신호를 ALU Control로 전달한다.
  5. ALU Control에서 opcode와 ALUOp를 통해 ALU에서 덧셈 연산을 하도록 신호를 준다.
  6. X2의 값과 offset을 더한다.
  7. Data Memory에서 값을 읽는다. (MemRead = 1, MemWrite = 0)
  8. X1의 값을 Write한다.
  9. PC를 증가시킨다.

예시 (CBZ X1, offset)

  1. 해당 과정은 B-type이다. Instruction을 Fetch 한다.
  2. PC를 증가시킨다.
  3. X1의 값을 읽는다.
  4. ALU에서 X1의 값이 0인지 1인지 판단하여 신호를 보낸다.
  5. PC를 offset과, 현재 PC로 상황에 따라 업데이트 한다. (3번 과정에서 계산한 ALU에 따른 MUX의 동작)

0개의 댓글