Control Unit
제어 유닛
- Instruction Decoding에 의해, 명령어의 Opcode와 Funct가 파악된다.
- R-Type 명령어의 6bits Opcode에 의해 그림의 6가지 Control Signal의 값이 결정된다.
- R-Type 명령어의 6bits Funct에 의해 ALUControl값이 결정된다.
ALUOp[1:0] | Meaning |
00 | Add |
01 | Subtract |
10 | Look at \(\texttt{Funct}\) |
11 | Not Used |
- ALUOp = 10이라면 해당 명령어는 R-Type 명령어이기 때문에, Funct 코드까지 필히 확인해야되는 상황임을 의미한다.
- lw, sw명령어는 OPcode만 파악하여, Add 연산을 지시할 수 있다.
- bne, beq 명령어는 OPcode만 파악하여, Subtract 연산을 지시할 수 있다.
Truth Table of ALU Decoder
ALUOp[1:0] | Funct | ALUControl[2:0] |
00 | X | 010 (add) |
X1 | X | 110 (subtract) |
1X | 100 000 (add) | 010 (add) |
1X | 100 010 (sub) | 110 (subtract) |
1X | 100 100 (and) | 000 (and) |
1X | 100 101 (or) | 001 (or) |
1X | 101 011 (sltu) | 111 (sltu) |
* X : don't care
- ALUOp 코드가 11인 경우는 사용되지 않기 때문에, 01과 10인 경우가 각각 X1과 1X로 표기되는 것이다.
Instruction | OP Code [5:0] |
RegWrite | RegDst | AluSrc | Branch | MemWrite | MemtoReg | ALUOp [1:0] |
Jump |
R-type | 000 000 | 1 | 1 | 0 | 0 | 0 | 0 | 10 | 0 |
lw | 100 011 | 1 | 0 | 1 | 0 | 0 | 1 | 00 | 0 |
sw | 101 011 | 0 | X | 1 | 0 | 1 | X | 00 | 0 |
beq | 000 100 | 0 | X | 0 | 1 | 0 | X | 01 | 0 |
addi | 001 000 | 1 | 0 | 1 | 0 | 0 | 0 | 00 | 0 |
j | 000 100 | 0 | X | X | 0 | 0 | X | XX | 1 |
- xxx와 같은 Don't care 처리 방식은 컴파일러에게 최적화를 맡기는 것이다.
- xxx 표현 대신, 프로그래머가 직접적으로 값을 지정함으로써 최적화를 Manually하게 설계할 수 있다.
- aluop가 00, 01이면 funct 코드를 참조하지 않는다.
이미지 출처 : 권건우 교수님 강의록