Encode different instruction by 4 bits
ALU control | Function |
---|---|
0000 | AND |
0001 | OR |
0010 | add |
0110 | subtract |
0111 | set - on - less - than |
1100 | NOR |
R-type
0 | rs | rt | rd | shamt | funct |
---|---|---|---|---|---|
31:26 | 25:21 | 20:16 | 15:11 | 10:6 | 5:0 |
Load / Store
35 or 43 | rs | rt | address |
---|---|---|---|
31:26 | 25:21 | 20:16 | 15:0 |
Branch
35 or 43 | rs | rt | address |
---|---|---|---|
31:26 | 25:21 | 20:16 | 15:0 |
opcode(instruction[31-26])을 통해 RegDst, Branch, MemRead, MemtoReg, ALUOp, MemWrite, ALUSrc, RegWrite 값을 결정하는 Control을 추가하였다.
기능
신호 이름 | 인가되지 않은 경우(0) | 인가된 경우 (1) |
---|---|---|
RegDst | rt가 Write register 가 된다 | rd가 Write register가 된다 |
RegWrite | Nothing | Write register에 Write data 를 쓴다 |
ALUSrc | Read data2가 ALU의 두 번째 operand가 된다 | 하위 16비트(instruction[15:0])가 sign extend된 값이 ALU의 두 번째 operand가 된다 |
PCSrc (branch && zero) | PC + 4가 새로운 PC값이 된다 | branch target이 새로운 PC 값이 된다. PC + 4 + target |
MemRead | Nothing | address 입력이 지정하는 데이터 메모리 내용을 Read data 출력으로 내보낸다 (???) |
MemWrite | Nothing | address 입력이 지정하는 데이터 메모리 내용을 Write data 입력 값으로 바꾼다 |
MemtoReg | ALU 출력이 레지스터의 Write data 입력이 된다 | 데이터 메모리 출력이 레지스터의 Write data 입력이 된다 |
add rd, rs, rt
control signal
signal | value | description |
---|---|---|
RegDst | 1 | rd를 select한다 |
RegWrite | 1 | rd에 write가 가능하게 한다 |
ALUSrc | 0 | rt가 ALU의 두 번째 operand가 되게 한다 |
ALUOp | OP | to select an appropriate operation for ALU |
MemRead | 0 | memory를 읽지 못하게 한다 |
MemWrite | 0 | memory에 쓰지 못하게 한다 |
MemtoReg | 0 | ALU의 출력이 register에 write하는 값이 되게 한다 |
PCSrc | 0 | 다음 PC를 선택한다 |
lw rt, rs, imm
control signal
signal | value | description |
---|---|---|
RegDst | 0 | rt에 write할 준비를 한다 |
RegWrite | 1 | rt에 쓸 수 있게 한다 |
ALUSrc | 1 | ALU의 두 번째 operand로 immediate을 선택한다 |
ALUOp | OP | add |
MemRead | 1 | reading memory가 가능하게 한다 |
MemWrite | 0 | writing memory는 불가능하게 한다 |
MemtoReg | 1 | 메모리의 출력을 레지스터에 write하게 한다 |
PCSrc | 0 | 다음 PC를 선택한다 |
sw rt, rs, imm
control signal
signal | value | description |
---|---|---|
RegDst | X (Don't care) | Not used |
RegWrite | 0 | writing register가 불가능하게 한다 |
ALUSrc | 1 | ALU의 두 번째 operand로 immediate을 선택한다 |
ALUOp | OP | add |
MemRead | 0 | reading memory가 불가능하게 한다 |
MemWrite | 1 | writing memory가 가능하게 한다 |
MemtoReg | X (Don't care) | Not used |
PCSrc | 0 | 다음 PC를 선택한다 |
beq rs, rt, imm
control signal
signal | value | description |
---|---|---|
RegDst | X (Don't care) | Not used |
RegWrite | 0 | writing register가 불가능하게 한다 |
ALUSrc | 0 | ALU의 두 번째 operand로 rt를 선택한다 |
ALUOp | OP | sub |
MemRead | 0 | reading memory가 불가능하게 한다 |
MemWrite | 0 | writing memory가 불가능하게 한다 |
MemtoReg | X (Don't care) | Not used |
PCSrc | 1 | PC + 4 + target으로 이동한다 |
000010 (2) | address |
---|---|
31:26 | 25:0 |
(ppt)
(교재)
(그림)
control signal
signal | value | description |
---|---|---|
RegDst | X (Don't care) | Not used |
RegWrite | 0 | writing register가 불가능하게 한다 |
ALUSrc | X | Not used |
ALUOp | X | Not used |
MemRead | 0 | reading memory가 불가능하게 한다 |
MemWrite | 0 | writing memory가 불가능하게 한다 |
MemtoReg | X (Don't care) | Not used |
PCSrc | X | Not used |
Jump | 1 | to select next PC |