컴퓨터 구조 - 10. Processor(Control Unit)
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이 필요하다.

구조
- Main Control Unit
- 주요 역할: 명령어의 타입을 해석하고, 프로세서 내의 주요 구성 요소에 필요한 제어 신호를 생성한다.
- 작동 방식: 인출한 명령어의 오퍼코드(opcode)를 해독하여 해당 명령어가 R-type, D-type, I-type 등 어떤 종류인지 파악하고, 이를 바탕으로 필요한 제어 신호를 생성한다.
- 제어 신호 생성: ALU 제어 신호, 메모리 읽기/쓰기 신호, 레지스터 읽기/쓰기 신호, MUX 선택 신호 등을 결정하여 프로세서의 각 구성 요소가 명령어에 맞게 동작하도록 지시한다.
- 예시: D-type 명령어일 경우, 메모리 접근을 위해 메모리 읽기/쓰기 신호를 생성하고, ALU에는 주소 계산을 위한 덧셈 연산을 지시하는 신호를 보낸다.
- 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)
- 해당 과정은 R-type이다. Instruction을 Fetch 한다.
- 덧셈에 필요한 레지스터 주소에 값을 읽는다. (2, 3)
- Instruction에서 opcode(11bit) 부분을 읽고 Main Control 에서 ALUOp 신호를 ALU Control로 전달한다.
- ALU Control에서 opcode와 ALUOp를 통해 ALU에서 덧셈 연산을 하도록 신호를 준다.
- 덧셈 연산을 수행 후 X1에 Write Back된다.
- PC를 증가시킨다.
예시 (LDUR X1, [X2, offset])
- 해당 과정은 D-type이다. Instruction을 Fetch 한다.
- X2의 값을 읽는다.
- offset을 sign-extend 한다.
- Instruction에서 opcode(11bit) 부분을 읽고 Main Control 에서 ALUOp 신호를 ALU Control로 전달한다.
- ALU Control에서 opcode와 ALUOp를 통해 ALU에서 덧셈 연산을 하도록 신호를 준다.
- X2의 값과 offset을 더한다.
- Data Memory에서 값을 읽는다. (MemRead = 1, MemWrite = 0)
- X1의 값을 Write한다.
- PC를 증가시킨다.
예시 (CBZ X1, offset)
- 해당 과정은 B-type이다. Instruction을 Fetch 한다.
- PC를 증가시킨다.
- X1의 값을 읽는다.
- ALU에서 X1의 값이 0인지 1인지 판단하여 신호를 보낸다.
- PC를 offset과, 현재 PC로 상황에 따라 업데이트 한다. (3번 과정에서 계산한 ALU에 따른 MUX의 동작)