A. Perancangan Prosesor: 1. Instruksi LW

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 63

UTS EL3043 - Arditto Trianggada / 13209046

A. Perancangan Prosesor
Prosesor yang akan dirancang adalah MIPS Single-Cycle Processor yang dapat menopang 30 buah instruksi. Tahapan-tahapan perancangan adalah sebagai berikut:

1. Instruksi lw Syntax : lw $t, imm($s) 1000 11ss ssst tttt iiii iiii iiii iiii $t = M[$s + imm]

Instruction Set : Operasi :

Datapath dan controller:

2. Instruksi sw Syntax : sw $t, imm($s) 1010 11ss ssst tttt iiii iiii iiii iiii M[$s + imm] = $t

Instruction Set : Operasi :

Datapath dan controller:

UTS EL3043 - Arditto Trianggada / 13209046

3. Instruksi add, sub, and, dan or (R-Type) Syntax : <funct> $d, $s, $t 0000 00ss ssst tttt dddd d000 00ff ffff $d = $s <funct> $d

Instruction Set : Operasi :

Datapath dan controller:

UTS EL3043 - Arditto Trianggada / 13209046

7. Instruksi beq Syntax : Instruction Set : Operasi : beq $s, $t, label 0001 00ss ssst tttt iiii iiii iiii iiii if ($s = $t) then nPC = PC+4+(SignExt(imm) << 2) else nPC = PC+4

Datapath dan controller:

8. Instruksi addi Syntax : Instruction Set : Operasi : addi $t, $s, imm 0010 00ss ssst tttt iiii iiii iiii iiii $t = $s + imm

Datapath dan controller:

UTS EL3043 - Arditto Trianggada / 13209046

9. Instruksi j Syntax : j label 0000 10ii iiii iiii iiii iiii iiii iiii nPC = PC+4[31:28] & imm & 00

Instruction Set : Operasi :

Datapath dan controller:


Jump Control Unit BranchTaken
31:26 5:0

MemtoReg MemWrite Branch ALUControl ALUSrc RegDst RegWrite WE3 RD1 RD2 RegDst

BranchTaken Branch Zero


2:0

2:0

Op Funct ALUControl

Jump

CLK

CLK

PCPlus4
0 1 0 1

ALUSrc SrcA

MemWrite CLK

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

WE A RD

nPC
BTA JTA

A2 A3 Register WD3 File

0 1

SrcB

ALU

ALUResult

Data Memory WD WriteData

0 1 ReadData Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Sign Extend

SignImm

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

25:0

<<2

Control Unit
Control Unit Jump MemtoReg MemWrite Branch

Main Opcode5:0 Decoder

ALUSrc1:0 RegDst RegWrite ALUOp2:0 ALU Decoder ALUControl2:0

Funct5:0

UTS EL3043 - Arditto Trianggada / 13209046

Main Decoder:

ALU Decoder:

ALU ALUCtrl[2:0] 000 001 010 011 100 101 110 111 Operasi A AND B A OR B A+B n/a A AND B' A OR B' A-B A<B
A
N

B
N

0
ALUCtrl2

Cout
[N-1]

+ S

Zero Extend
N N N N

== 0 Zero Y

2
N

ALUCtrl1:0

UTS EL3043 - Arditto Trianggada / 13209046

10. Instruksi slt Syntax : slt $d, $s, $t 0000 00ss ssst tttt dddd d000 0010 1011 if ($s < $t) then $d = 1; else $d = 0

Instruction Set : Operasi :

Pada penambahan instruksi ini, perubahan ada pada control signal, khususnya pada ALU Decoder: Instr. add sub and or addi lw sw beq j slt Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X AluCtrl[2:0] 010 110 000 001 010 010 010 110 XXX 111

Untuk spesifikasi lainnya adalah sama. 11. Instruksi sll Syntax : sll $d, $t, shamt 0000 0000 0000t tttt dddd d0sss ss00 0000 $d = $t << shamt

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Mengubah ALUCtrl menjadi 4 bit

Instr. add sub and or addi lw sw beq j slt sll

Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X

AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100

UTS EL3043 - Arditto Trianggada / 13209046

Menambah operasi shift pada isi ALU


shamt4:0
5

A
N

B
N

ALUCtrl3

Cout
<<
Zero Extend
[N-1]

+ S

Menambahkan shamt[4:0] sebagai masukan pada ALU pada datapath dan controller
BranchTaken Branch Zero
3:0

PCPlus4
0 1 0 1

BTA

3
JTA

== 0 Zero Y

BranchTaken

Jump

nPC

2
N

ALUCtrl2:0

Jump Control Unit


31:26 5:0

MemtoReg MemWrite Branch ALUControl ALUSrc RegDst RegWrite WE3 RD1 RD2 RegDst

3:0

Op Funct ALUControl

CLK

Instr 10:6
CLK ALUSrc SrcA

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

A2 A3 Register WD3 File

0 1

SrcB

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Sign Extend

SignImm

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

25:0

<<2

UTS EL3043 - Arditto Trianggada / 13209046

12. Instruksi srl Syntax : srl $d, $t, shamt 0000 0000 0000t tttt dddd d0sss ss00 0010 $d = $t >> shamt

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Modifikasi control signal Instr. add sub and or addi lw sw beq j slt sll srl Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X 00 0010 1X AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100 0101

Menambah operasi shift pada ALU


shamt4:0
5

A
N

B
N

ALUCtrl3

Cout
>> <<
Zero Extend
[N-1]

+ S

== 0 Zero Y

2
N

ALUCtrl2:0

UTS EL3043 - Arditto Trianggada / 13209046

13. Instruksi sra Syntax : sra $d, $t, shamt 0000 0000 0000t tttt dddd d0sss ss00 0011 $d = $t >>> shamt

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Modifikasi control signal Instr. add sub and or addi lw sw beq j slt sll srl sra Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X 00 0010 1X 00 0011 1X AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100 0101 0110

Menambah operasi shift pada ALU ALUCtrl[3:0] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Operasi A AND B A OR B A+B n/a B << shamt B >> shamt B >>> shamt n/a A AND B' A OR B' A-B A<B B' << shamt B' >> shamt B' >>> shamt n/a
shamt4:0
5

A
N

B
N

ALUCtrl3

Cout
>>>

>>

<<
Zero Extend

[N-1]

+ S

3
N

ALUCtrl2:0

== 0 Zero Y

UTS EL3043 - Arditto Trianggada / 13209046

10

14. Instruksi sllv Syntax : sllv $d, $s, $t 0000 00ss ssst tttt dddd d000 0000 0100 $d = $t << $s

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Mengubah control signal, khususnya pada ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X 00 0010 1X 00 0011 1X 00 0100 1X AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100 0101 0110 1100

Mengubah isi dari operasi ALU


shamt4:0 A4:0
5 5 N

A
N

B
N

1
>>>

ALUCtrl3
N

ALUCtrl3

Cout
>> <<
Zero Extend
[N-1]

+ S

3
N

ALUCtrl2:0

== 0 Zero Y

UTS EL3043 - Arditto Trianggada / 13209046

11

15. Instruksi srlv Syntax : srlv $d, $s, $t 0000 00ss ssst tttt dddd d000 0000 0110 $d = $t >> $s

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Mengubah control signal, khususnya pada ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X 00 0010 1X 00 0011 1X 00 0100 1X 00 0110 1X AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100 0101 0110 1100 1101

shamt4:0 A4:0
5 5

A
N

B
N

1
>>>

ALUCtrl3
N

ALUCtrl3

Cout
>> <<
Zero Extend
[N-1]

+ S

3
N

ALUCtrl2:0

== 0 Zero Y

UTS EL3043 - Arditto Trianggada / 13209046

12

16. Instruksi srav Syntax : srav $d, $s, $t 0000 00ss ssst tttt dddd d000 0000 0111 $d = $t >>> $s

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Mengubah control signal, khususnya pada ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X 00 0010 1X 00 0011 1X 00 0100 1X 00 0110 1X 00 0111 1X AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100 0101 0110 1100 1101 1110
shamt4:0 A4:0
5 5 N

ALUCtrl[3:0] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Operasi A AND B A OR B A+B n/a B << shamt B >> shamt B >>> shamt n/a A AND B' A OR B' A-B A<B B << A B >> A B >>> A n/a

A
N

B
N

1
>>>

ALUCtrl3
N

ALUCtrl3

Cout
>> <<
Zero Extend
[N-1]

+ S

3
N

ALUCtrl2:0

== 0 Zero Y

UTS EL3043 - Arditto Trianggada / 13209046

13

17. Instruksi xor Syntax : xor $d, $s, $t 0000 00ss ssst tttt dddd d000 0010 0110 $d = $s XOR $t

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut Mengubah control signal, khususnya ALU decoder Instr. Funct[5:0] AluOp[1:0] add 10 0000 1X sub 10 0010 1X and 10 0100 1X or 10 0101 1X addi XX XXXX 00 lw XX XXXX 00 sw XX XXXX 00 beq XX XXXX X1 j XX XXXX XX slt 10 1010 1X sll 00 0000 1X srl 00 0010 1X sra 00 0011 1X sllv 00 0100 1X srlv 00 0110 1X srav 00 0111 1X xor 10 0110 1X Mengubah isi dari ALU
shamt4:0 A4:0
5 5 N

AluCtrl[3:0] 0010 1010 0000 0001 0010 0010 0010 1010 XXXX 1011 0100 0101 0110 1100 1101 1110 0111

A
N

B
N

1
>>>

0
ALUCtrl3 Cout
<<
[N-1]

ALUCtrl3

>>

+ S

Zero Extend

3
N

ALUCtrl2:0

== 0 Zero Y

UTS EL3043 - Arditto Trianggada / 13209046

14

18. Instruksi nor Syntax : nor $d, $s, $t 0000 00ss ssst tttt dddd d000 0010 0110 $d = $s NOR $t

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Mengubah control signal, khususnya ALU decoder Instr. Funct[5:0] AluOp[1:0] add 10 0000 1X sub 10 0010 1X and 10 0100 1X or 10 0101 1X addi XX XXXX 00 lw XX XXXX 00 sw XX XXXX 00 beq XX XXXX X1 j XX XXXX XX slt 10 1010 1X sll 00 0000 1X srl 00 0010 1X sra 00 0011 1X sllv 00 0100 1X srlv 00 0110 1X srav 00 0111 1X xor 10 0110 1X nor 10 0111 1X Mengubah isi dari ALU ALUCtrl[4:0] 0 0000 0 0001 0 0010 0 0011 0 0100 0 0101 0 0110 0 0111 0 1000 1 0000 1 0001 1 0010 1 0011 1 0100 Operasi A AND B A OR B A+B n/a B << shamt B >> shamt B >>> shamt A XOR B A NOR B A AND B' A OR B' A-B A<B B << A AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000
shamt4:0 A4:0
5 5 N

A
N

B
N

1
>>>

0
ALUCtrl4 Cout
<<
[N-1]

ALUCtrl4

>>

+ S

Zero Extend

5
== 0 Zero

3
N

ALUCtrl3:0

UTS EL3043 - Arditto Trianggada / 13209046

15

1 0101 1 0110 1 0111 1 1000

B >> A B >>> A A XOR B' A NOR B'

Datapath dan controller


BranchTaken Branch Zero
4:0

Jump Control Unit BranchTaken


31:26 5:0

MemtoReg MemWrite Branch ALUControl ALUSrc RegDst RegWrite WE3 RD1 RD2 RegDst

4:0

Op Funct ALUControl

Jump

CLK

Instr 10:6
CLK ALUSrc SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

A2 A3 Register WD3 File

0 1

SrcB

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Sign Extend

SignImm

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

25:0

<<2

19. Instruksi lui Syntax : lui $t, imm 0011 1100 000t tttt iiii iiii iiii iiii $t = imm<<16

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Pengubahan control signal Main decoder:

UTS EL3043 - Arditto Trianggada / 13209046

16

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui Funct[5:0] AluOp[1:0] 10 0000 1X 10 0010 1X 10 0100 1X 10 0101 1X XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX X1 XX XXXX XX 10 1010 1X 00 0000 1X 00 0010 1X 00 0011 1X 00 0100 1X 00 0110 1X 00 0111 1X 10 0110 1X 10 0111 1X XX XXXX 00 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010

Datapath dan controller


BranchTaken Branch Zero
4:0

Jump Control Unit BranchTaken


31:26 5:0

MemtoReg MemWrite Branch ALUControl

4:0

Op Funct

ALUSrc1:0 RegDst
RegWrite WE3 RD1

ALUControl

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

RD2 A2 A3 Register RegDst WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Sign Extend

SignImm

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

25:0

<<2

UTS EL3043 - Arditto Trianggada / 13209046

17

20. Instruksi slti Syntax : slti $t, $s, imm 0010 10ss ssst tttt iiii iiii iiii iiii if ($s < SignExt(imm)) then $t = 1; else $t = 0

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Control signal Main decoder:

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti Funct[5:0] AluOp[1:0] 10 0000 10 10 0010 10 10 0100 10 10 0101 10 XX XXXX 00 XX XXXX 00 XX XXXX 00 XX XXXX 01 XX XXXX XX 10 1010 10 00 0000 10 00 0010 10 00 0011 10 00 0100 10 00 0110 10 00 0111 10 10 0110 10 10 0111 10 XX XXXX 00 XX XXXX 11 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011

UTS EL3043 - Arditto Trianggada / 13209046

18

Datapath dan controller (tetap)


BranchTaken Branch Zero
4:0

Jump Control Unit BranchTaken


31:26 5:0

MemtoReg MemWrite Branch ALUControl

4:0

Op Funct

ALUSrc1:0 RegDst
RegWrite WE3 RD1 RD2 RegDst

ALUControl

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Sign Extend

SignImm

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

25:0

<<2

21. Instruksi andi Syntax : andi $t, $s, imm 0011 00ss ssst tttt iiii iiii iiii iiii $t = $s AND ZeroExt(imm)

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Control signal
Control Unit Jump MemtoReg MemWrite Beq

Main Opcode5:0 Decoder

ALUSrc1:0 RegDst RegWrite ExtOp ALUOp2:0 ALU Decoder ALUControl4:0

Funct5:0

UTS EL3043 - Arditto Trianggada / 13209046

19

Main decoder (ALUOp menjadi 3-bit):

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000

Datapath dan controller

UTS EL3043 - Arditto Trianggada / 13209046

20

Jump Control Unit BranchTaken


31:26 5:0

Op Funct

MemtoReg MemWrite Branch ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

BranchTaken Branch Zero


4:0

4:0

ALUControl

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

22. Instruksi ori Syntax : ori $t, $s, imm 0011 01ss ssst tttt iiii iiii iiii iiii $t = $s OR ZeroExt(imm)

Instruction Set : Operasi :

Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Control signal Main decoder:

ALU decoder:

UTS EL3043 - Arditto Trianggada / 13209046

21

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] add 10 0000 010 0 0010 sub 10 0010 010 1 0010 and 10 0100 010 0 0000 or 10 0101 010 0 0001 addi XX XXXX 000 0 0010 lw XX XXXX 000 0 0010 sw XX XXXX 000 0 0010 beq XX XXXX 001 1 0010 j XX XXXX XXX X XXXX slt 10 1010 010 1 0011 sll 00 0000 010 0 0100 srl 00 0010 010 0 0101 sra 00 0011 010 0 0110 sllv 00 0100 010 1 0100 srlv 00 0110 010 1 0101 srav 00 0111 010 1 0110 xor 10 0110 010 0 0111 nor 10 0111 010 0 1000 lui XX XXXX 000 0 0010 slti XX XXXX 011 1 0011 andi XX XXXX 100 0 0000 ori XX XXXX 101 0 0001 Datapath dan controller adalah sama dengan penambahan andi:
BranchTaken Branch Zero
4:0

Jump Control Unit BranchTaken


31:26 5:0

Op Funct

MemtoReg MemWrite Branch ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

4:0

ALUControl

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

UTS EL3043 - Arditto Trianggada / 13209046

22

23. Instruksi xori Syntax : xori $t, $s, imm Instruction Set : 0011 01ss ssst tttt iiii iiii iiii iiii Operasi : $t = $s XOR ZeroExt(imm) Pada penambahan instruksi ini modifikasi adalah sebagai berikut: Control signal Main decoder:

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111

UTS EL3043 - Arditto Trianggada / 13209046

23

Datapath dan controller adalah sama dengan penambahan andi:


BranchTaken Branch Zero
4:0

Jump Control Unit BranchTaken


31:26 5:0

Op Funct

MemtoReg MemWrite Branch ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

4:0

ALUControl

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

24. Instruksi bne Syntax : bne $s, $t, label Instruction Set : 0001 01ss ssst tttt iiii iiii iiii iiii Operasi : if ($s /= $t) then (nPC = PC+4 + (SignExt(Imm)<<2) Modifikasi yang dilakukan sebagai berikut: Control signal Untuk menangani instruksi bne, diperlukan tambahan control signal yang membedakan antara beq dan bne.
Control Unit Jump MemtoReg MemWrite Beq Bne

Main Opcode5:0 Decoder

ALUSrc1:0 RegDst1:0 RegWrite ExtOp ALUOp2:0 ALU Decoder ALUControl4:0

Funct5:0

UTS EL3043 - Arditto Trianggada / 13209046

24

Main decoder:

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010

Penambahan control signal tersebut juga akan memodifikasi datapath dan controller sebagai berikut

UTS EL3043 - Arditto Trianggada / 13209046

25

BranchTaken

Jump Bne

Control Unit
31:26 5:0

BranchTaken

Op Funct

MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

Bne Zero
4:0

ALUControl

4:0

Beq Zero

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

25. Instruksi bltz Syntax : Instruction Set : Operasi : (SignExt(Imm)<<2) bltz $s, $t, label 0000 01ss ssst tttt iiii iiii iiii iiii if ($s < $t) then (nPC = PC+4 +

Modifikasi yang dilakukan sebagai berikut: Control signal Untuk menangani instruksi bltz, diperlukan tambahan control signal yang membedakan dengan branch lain.
Control Unit Jump MemtoReg MemWrite Beq Bne Bltz ALUSrc1:0 RegDst1:0 RegWrite ExtOp ALUOp2:0 ALU Decoder ALUControl4:0

Main Opcode5:0 Decoder

Funct5:0

UTS EL3043 - Arditto Trianggada / 13209046

26

Main decoder:

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010

Pada ALU, ditambahkan sebuah keluaran yang memiliki lebar 1-bit yang menandakan apakah A lebih kecil daripada B (LTZ=1 when A-B<0)

UTS EL3043 - Arditto Trianggada / 13209046

27

ALUCtrl[4:0] 0 0000 0 0001 0 0010 0 0011 0 0100 0 0101 0 0110 0 0111 0 1000 1 0000 1 0001 1 0010 1 0011 1 0100 1 0101 1 0110 1 0111 1 1000

Operasi A AND B A OR B A+B n/a B << shamt B >> shamt B >>> shamt A XOR B A NOR B A AND B' A OR B' A-B A<B B << A B >> A B >>> A A XOR B' A NOR B'

shamt4:0 A4:0
5 5

A
N

B
N

1
>>>

ALUCtrl4
N

ALUCtrl4

Cout
>> <<
Zero Extend
[N-1]

+ S

Modifikasi pada datapath dan controller: branch taken saat LTZ=1


BranchTaken Bltz LTZ Jump Bne Bltz BranchTaken
31:26 5:0

8
Control Unit Op Funct

== 0 Zero Y LTZ

MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

5
N

ALUCtrl3:0

Y31

Bne Zero
4:0

ALUControl

4:0

Beq Zero

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

UTS EL3043 - Arditto Trianggada / 13209046

28

26. Instruksi bgtz Syntax Instruction Set Operasi : : : bgtz $s, $t, label 0001 11ss ssst tttt iiii iiii iiii iiii if ($s > $t) then (nPC = PC+4 +

(SignExt(Imm)<<2)

Modifikasi yang dilakukan sebagai berikut: Control signal Untuk menangani instruksi bgtz, diperlukan tambahan control signal yang membedakan dengan branch lain
Control Unit Jump MemtoReg MemWrite Beq Bne Bltz Bgtz ALUSrc1:0 RegDst1:0 RegWrite ExtOp

Main Opcode5:0 Decoder

ALUOp2:0 ALU Decoder ALUControl4:0

Funct5:0

Main decoder:

UTS EL3043 - Arditto Trianggada / 13209046

29

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz bgtz Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 XX XXXX 001 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010 1 0010

Datapath dan controller Pada instruksi bgt ini, branch akan taken jika nilai isi dari register $s lebih besar daripada $t. Atau dengan kata lain, hasil pengurangan $s - $t akan bernilai positif (LTZ=0) dan nilai hasil pengurangan tersebut tidak sama dengan nol (Zero=0).

UTS EL3043 - Arditto Trianggada / 13209046

30

BranchTaken Bgtz LTZ Zero Bltz LTZ Jump Bne Bltz Bgtz BranchTaken
31:26 5:0

Control Unit Op Funct

MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

Bne Zero
4:0

Bne
4:0

ALUControl

Beq Zero

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

LTZ Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

27. Instruksi blez Syntax Instruction Set Operasi : : : blez $s, $t, label 0001 10ss ssst tttt iiii iiii iiii iiii if ($s <= $t) then (nPC = PC+4 +

(SignExt(Imm)<<2)

Modifikasi: Penambahan control signal Untuk penambahan instruksi blezini, tidak dilakukan penambahan control signal melainkan mengaktifkan signal Beq dan Bltz sekaligus ketika instruksi blez dilakukan. Main decoder:

UTS EL3043 - Arditto Trianggada / 13209046

31

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz bgtz blez Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX 001 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010 1 0010 1 0010

UTS EL3043 - Arditto Trianggada / 13209046

32

BranchTaken Bgtz LTZ Zero Bltz LTZ Jump Bne Bltz Bgtz BranchTaken
31:26 5:0

Control Unit Op Funct

MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst RegWrite WE3 RD1 RD2 RegDst

Bne Zero
4:0

Bne
4:0

ALUControl

Beq Zero

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA

PCPlus4
0 1 0 1

MemWrite CLK WE A RD 0 1 ReadData

MemtoReg

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

LTZ Zero

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

Data Memory WD WriteData

Result

20:16 15:11

0 1
WriteReg
4:0

+
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

Dapat dilihat, ketika instruksi blez diberikan (control signal Beq dan Bltz bernilai 1), branch akan taken jika nilai isi $s < $t atau $s = $t. 28. Instruksi jal Syntax Instruction Set Operasi : : : jal label 0000 11ii iiii iiii iiii iiii iiii iiii nPC = PC+4[31.28] & imm & 00; $31 = PC+4

Modifikasi yang dilakukan adalah sebagai berikut: Diberikan penambahan pada control signal yaitu jal
Control Unit Jump Jal MemtoReg MemWrite Beq Bne Bltz Bgtz ALUSrc1:0 RegDst1:0 RegWrite ExtOp

Main Opcode5:0 Decoder

ALUOp2:0 ALU Decoder ALUControl4:0

Funct5:0

UTS EL3043 - Arditto Trianggada / 13209046

33

Pada Main decoder, RegDst diubah menjadi 2-bit:

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz bgtz blez jal Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX XXX AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010 1 0010 1 0010 X XXXX

UTS EL3043 - Arditto Trianggada / 13209046

34

Datapath dan controller


BranchTaken Bgtz LTZ Zero

Bne
Jump Jal Control Unit BranchTaken
31:26 5:0

Op Funct

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2
RegDst1:0

Bltz LTZ Bne Zero


4:0

ALUControl

4:0

Beq Zero

Jal

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA CLK

PCPlus4
MemWrite WE A RD

0 1

MemtoReg

PCPlus4
0 1 0 1

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

nPC
BTA JTA

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

0 1 ReadData Result

Data Memory WD WriteData

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

Dari datapath di atas, dapat dilihat bahwa nPC akan di-update seperti pada instruksi j. Namun, selain itu akan terjadi pemasukan nilai PC+4 ke dalam register dengan alamat $ra atau $31. 29. Instruksi jr Syntax Instruction Set Operasi : : : jr $s 0000 00ss sss0 0000 0000 0000 0000 1000 nPC = $s

Modifikasi: Dilakukan penambahan control signal yaitu jr yang adalah keluaran pada bagian ALU decoder, sedangkan keluaran Main decoder-nya adalah sama dengan instruksi R-Type yang lain

UTS EL3043 - Arditto Trianggada / 13209046

35

Control Unit Jump Jal MemtoReg MemWrite Beq Bne Bltz Bgtz ALUSrc1:0 RegDst1:0 RegWrite ExtOp

Main Opcode5:0 Decoder

ALUOp2:0 ALU Decoder


Jr ALUControl4:0

Funct5:0

Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz bgtz blez jal jr

Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX XXX 00 1000 010

AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010 1 0010 1 0010 X XXXX X XXXX

Jr 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 1

UTS EL3043 - Arditto Trianggada / 13209046

36

Datapath dan controller


BranchTaken Bgtz LTZ Zero

Bne
Jump Jal Jr
31:26 5:0

Control Unit

BranchTaken

Op Funct

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1

Bltz LTZ Bne Zero


4:0

ALUControl

4:0

Beq Zero

Jal

Jr
0 1

Jump 0 1

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite WE A RD

0 1

MemtoReg

0 1

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

SrcA

nPC
BTA JTA

PCPlus4

RD2 A2 A3 Register WD3 File

RegDst1:0

00 SrcB 01 10

ALU

LTZ Zero ALUResult

0 1 ReadData Result

Data Memory WD WriteData

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

Dari gambar di atas, dapat dilihat bahwa nPC akan di-update dengan nilai masukan instruksi yaitu nilai pada register $s yang di by-pass ke masukan multiplexer dengan control signal jr sebagai selector. Kemudian, hasil operasi pada ALU tidak akan mengubah nilai di dalam register walaupun control signal keluaran dari ALU decodernya sama seperti R-Type karena nilai $d disetting dengan nilai $zero atau $0 yang telah di-hardwired-kan ke logika 0. 30. Instruksi jalr Syntax Instruction Set Operasi : : : jalr $d, $s 0000 00ss sss0 0000 1111 1000 0000 1001 nPC = $s; $31 = PC+4

Modifikasi: Dilakukan penambahan control signal yaitu jalr yang adalah keluaran pada bagian ALU decoder, sedangkan keluaran Main decoder-nya adalah sama dengan instruksi R-Type yang lain

UTS EL3043 - Arditto Trianggada / 13209046

37

Control Unit Jump Jal MemtoReg MemWrite Beq Bne Bltz Bgtz ALUSrc1:0 RegDst1:0 RegWrite ExtOp

Main Opcode5:0 Decoder

ALUOp2:0 ALU Decoder


Jalr Jr ALUControl2:0

Funct5:0

ALU decoder: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz bgtz blez jal jr jalr Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX XXX 00 1000 010 00 1001 010 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010 1 0010 1 0010 X XXXX X XXXX X XXXX Jr 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 1 1 Jalr 0 0 0 0 0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X 0 1

UTS EL3043 - Arditto Trianggada / 13209046

38

Datapath dan controller:


BranchTaken Bgtz LTZ Zero

Bne
Jump Jal Jr Jalr BranchTaken
31:26 5:0

Control Unit Op Funct

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1

Bltz LTZ Bne Zero


4:0

ALUControl

4:0

Beq Zero

Jal Jalr

Jr
0 1

Jump 0 1

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite WE A RD

0 1

MemtoReg

0 1

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

SrcA

nPC
BTA JTA

PCPlus4

RD2 A2 A3 Register WD3 File

RegDst1:0

00 SrcB 01 10

ALU

LTZ Zero ALUResult

0 1 ReadData Result

Data Memory WD WriteData

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

<<16

ExtOp
25:0

<<2

Perbedaannya adalah, tambahan control signal yaitu jalr akan dijadikan input gerbang OR jal yang keluarannya kemudian menjadi select mux yang memilih nilai antara PC+4 atau ALUResult. Dengan begitu, mux tersebut meneruskan nilai PC+4 jika salah satu antara jal dan jalr bernilai 1. Di samping itu, nilai PC+4 akan dimasukkan ke dalam register $d yang secara eksplisit dalam instruksi dimasukkan nilainya yaitu 1 1111 atau $31. Final Design Dari langkah-langkah di atas didapat hasil modifikasi utuh pada Single-Cycle MIPS Processor sebagai berikut:
Control Unit

Control Unit

Main Opcode5:0 Decoder

Jump Jal MemtoReg MemWrite Beq Bne Bltz Bgtz ALUSrc1:0 RegDst1:0 RegWrite ExtOp

ALUOp2:0 ALU Decoder


Jalr Jr ALUControl2:0

Funct5:0

UTS EL3043 - Arditto Trianggada / 13209046

39

Main decoder table:

ALU decoder table: Instr. add sub and or addi lw sw beq j slt sll srl sra sllv srlv srav xor nor lui slti andi ori xori bne bltz bgtz blez jal jr jalr Funct[5:0] AluOp[2:0] 10 0000 010 10 0010 010 10 0100 010 10 0101 010 XX XXXX 000 XX XXXX 000 XX XXXX 000 XX XXXX 001 XX XXXX XXX 10 1010 010 00 0000 010 00 0010 010 00 0011 010 00 0100 010 00 0110 010 00 0111 010 10 0110 010 10 0111 010 XX XXXX 000 XX XXXX 011 XX XXXX 100 XX XXXX 101 XX XXXX 110 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX 001 XX XXXX XXX 00 1000 010 00 1001 010 AluCtrl[4:0] 0 0010 1 0010 0 0000 0 0001 0 0010 0 0010 0 0010 1 0010 X XXXX 1 0011 0 0100 0 0101 0 0110 1 0100 1 0101 1 0110 0 0111 0 1000 0 0010 1 0011 0 0000 0 0001 0 0111 1 0010 1 0010 1 0010 1 0010 X XXXX X XXXX X XXXX Jr 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 1 1 Jalr 0 0 0 0 0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X 0 1

UTS EL3043 - Arditto Trianggada / 13209046

40

ALU

ALUCtrl[4:0] 0 0000 0 0001 0 0010 0 0011 0 0100 0 0101 0 0110 0 0111 0 1000 1 0000 1 0001 1 0010 1 0011 1 0100 1 0101 1 0110 1 0111 1 1000

Operasi A AND B A OR B A+B n/a B << shamt B >> shamt B >>> shamt A XOR B A NOR B A AND B' A OR B' A-B A<B B << A B >> A B >>> A A XOR B' A NOR B'

UTS EL3043 - Arditto Trianggada / 13209046

41

Datapath dan Controller Berikut ini adalah gambar rangkaian datapath Single-Cycle MIPS Processor yang telah dilengkapi nama-nama pada tiap sinyal yang ada:

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

4:0

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal_sel

BranchTaken

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2 SrcA

Bltz LTZ Bne Zero

Bltz_sig

Bne_sig

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0

PCPlus4
CLK MemWrite WE A RD

SrcA LTZ Zero ALUResult

Jal_sig
MemtoReg 0 1

0 1

0 1

PC
A RD Instruction Memory

Instr

25:21

A1
20:16

SrcA

nPC
BTA JTA

RegReadData2
RegDst1:0

PCPlus4

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

Data Memory WD WriteData

ReadData Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

UTS EL3043 - Arditto Trianggada / 13209046

42

B. Deskripsi Struktural VHDL


Deskripsi Structural:
LIBRARY IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY SingleCycleMIPS IS PORT( Clock Reset PC_out Instr_out ALUCtrl_out : IN STD_LOGIC; : IN STD_LOGIC); : : : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(4 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(4 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC);

--Output pin for simulation

ReadData1_out : ReadData2_out : WriteReg_out : ALUResult_out : Result_out Beq_out Bne_out Bltz_out Blez_out Bgtz_out Zero_out LTZ_out J_out Jal_out Jr_out Jalr_out : : : : : : : : : : : :

RegWrite_out : MemWrite_out : END SingleCycleMIPS;

ARCHITECTURE structural OF SIngleCycleMIPS IS COMPONENT mux2_32bit PORT( sel x y z : : : : IN STD_LOGIC; IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

UTS EL3043 - Arditto Trianggada / 13209046

43

COMPONENT mux4_5bit PORT( sel a b c d : : : : : IN STD_LOGIC_VECTOR(1 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); OUT STD_LOGIC_VECTOR(4 DOWNTO 0));

END COMPONENT; COMPONENT mux4_32bit PORT( sel a b c d : : : : : IN STD_LOGIC_VECTOR(1 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT PCReg PORT( CLK RST PCin PCout : : : : IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT adder_32bit PORT( x y z : : : IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT BusMerging PORT( x y z : : : IN STD_LOGIC_VECTOR(3 DOWNTO 0); IN STD_LOGIC_VECTOR(27 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT concat16 PORT( p q : : IN STD_LOGIC_VECTOR(15 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT concat2 PORT( p q : : IN STD_LOGIC_VECTOR(25 DOWNTO 0); OUT STD_LOGIC_VECTOR(27 DOWNTO 0));

END COMPONENT;

UTS EL3043 - Arditto Trianggada / 13209046

44

COMPONENT shiftby2 PORT( p q : : IN STD_LOGIC_VECTOR(15 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT Extend PORT( a b c : : : IN STD_LOGIC; IN STD_LOGIC_VECTOR(15 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT ALU PORT( x y shift z Zero MSB : : : : : : IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC; OUT STD_LOGIC);

Control:

END COMPONENT; COMPONENT and2 PORT( x y z : : : IN STD_LOGIC; IN STD_LOGIC; OUT STD_LOGIC));

END COMPONENT; COMPONENT and3 PORT( a b c d : : : : IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; OUT STD_LOGIC));

END COMPONENT; COMPONENT or2 PORT( x y z : : : IN STD_LOGIC; IN STD_LOGIC; OUT STD_LOGIC));

END COMPONENT; COMPONENT or4 PORT( g h i j : : : : IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC;

UTS EL3043 - Arditto Trianggada / 13209046

45

OUT STD_LOGIC));

END COMPONENT; COMPONENT InstrMemory PORT( A RD : : IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT RegisterFile PORT( CLK RST WE3 A1 A2 A3 WD3 RD1 RD2 : : : : : : : : : IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC_VECTOR(4 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); IN STD_LOGIC_VECTOR(4 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT DataMemory PORT( CLK RST WE A WD RD : : : : : : IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC; IN STD_LOGIC_VECTOR(31 DOWNTO 0); IN STD_LOGIC_VECTOR(31 DOWNTO 0); OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT; COMPONENT ControlUnit IS PORT( Opcode Funct RegDst RegWrite Beq Bne Bltz Bgtz MemtoReg MemWrite ALUCtrl ALUSrc J Jal : : : : : : : : : : : : : : IN STD_LOGIC_VECTOR(5 DOWNTO 0); IN STD_LOGIC_VECTOR(5 DOWNTO 0); OUT STD_LOGIC_VECTOR(1 DOWNTO 0); OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC; OUT STD_LOGIC_VECTOR (4 DOWNTO 0); OUT STD_LOGIC(1 DOWNTO 0); OUT STD_LOGIC; OUT STD_LOGIC;

UTS EL3043 - Arditto Trianggada / 13209046

46

Jr Jalr END COMPONENT; SIGNAL PCPlus4 SIGNAL BTA SIGNAL JTA SIGNAL BranchTaken SIGNAL Jr_sig SIGNAL Branch_sig SIGNAL Jr_sig SIGNAL nPC SIGNAL PC SIGNAL Instr

: :

OUT STD_LOGIC; OUT STD_LOGIC;

: : : : : : : : : :

STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(4 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(27 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC_VECTOR(31 DOWNTO 0); STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC_VECTOR(1 DOWNTO 0); STD_LOGIC_VECTOR(1 DOWNTO 0); STD_LOGIC_VECTOR(4 DOWNTO 0); STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC;

SIGNAL RegReadData1 : SIGNAL RegReadData2 : SIGNAL ImmExt SIGNAL ImmUpper SIGNAL WriteReg SIGNAL Jump_label SIGNAL SrcA SIGNAL SrcB SIGNAL ALUResult SIGNAL Zero SIGNAL LTZ SIGNAL Jal_sel SIGNAL ReadData SIGNAL WriteData SIGNAL Result SIGNAL Beq_sig SIGNAL Bne_sig SIGNAL Bltz_sig SIGNAL Bgtz_sig SIGNAL RegWrite SIGNAL RegDst SIGNAL ALUSrc SIGNAL ALUCtrl SIGNAL MemWrite SIGNAL MemtoReg SIGNAL ExtOp SIGNAL Beq SIGNAL Bne SIGNAL Bltz SIGNAL Bgtz : : : : : : : : : : : : : : : : : : : : : : : : : : : :

SIGNAL Branch_label :

UTS EL3043 - Arditto Trianggada / 13209046

47

SIGNAL Jump SIGNAL Jal SIGNAL Jr SIGNAL Jalr BEGIN

: : : :

STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC;

--Output signal used for simulation if necessary PC_out Instr_out ALUCtrl_out ReadData1_out ReadData2_out WriteReg_out ALUResult_out Result_out Beq_out Bne_out Bltz_out Blez_out Bgtz_out Zero_out LTZ_out J_out Jal_out Jr_out Jalr_out MemWrite_out RegWrite_out <= PC; <= Instr; <= ALUCtrl; <= SrcA; <= RegReadData2; <= WriteReg; <= ALUResult; <= Result; <= Beq; <= Bne; <= Bltz; <= Blez; <= Bgtz; <= Zero; <= Zero; <= Jump; <= Jal; <= Jr; <= Jalr; <= MemWrite; <= '0' WHEN WriteReg = "00000" ELSE RegWrite;

--Structural description GetJr_sig: mux2_32bit PORT MAP( sel x y z GetBranch_sig: mux2_32bit PORT MAP( sel x y z => BranchTaken, => Jr_sig, => BTA, => Branch_sig); => Jr, => PCPlus4, => SrcA, => Jr_sig);

UTS EL3043 - Arditto Trianggada / 13209046

48

GetJump_sig: mux2_32bit PORT MAP( sel x y z GetPC: PCReg PORT MAP( CLK RST PCin => Clock, => Reset, => nPC, => Jump, => Branch_sig, => JTA, => nPC);

PCout => PC); InstrMem: InstrMemory PORT MAP( A RD GetPCPlus4: adder_32bit PORT MAP( x y z GetJTA: BusMerging PORT MAP( x => PCPlus4(31 DOWNTO 28), y => Jump_label, z => JTA); GetControlSignal: ControlUnit PORT MAP( Opcode Funct RegDst RegWrite Beq Bne Bltz MemtoReg MemWrite ALUCtrl ALUSrc J Jal Jr Jalr => Instr(31 DOWNTO 26), => Instr(5 DOWNTO 0), => RegDst, => RegWrite, => Beq, => Bne, => Bltz, => MemtoReg, => MemWrite, => ALUCtrl, => ALUSrc, => Jump, => Jal, => Jr, => Jalr); => PC, => X"0004", => PCPlus4); => PC, => Instr);

UTS EL3043 - Arditto Trianggada / 13209046

49

RegFile: RegisterFile PORT MAP( CLK RST WE3 A1 A2 A3 WD3 RD1 RD2 GetJumpLabel: concat2 PORT MAP( p q GetImmUpper: concat16 PORT MAP( p q GetImmExt: Extend PORT MAP( a b c GetBranchLabel: shiftby2 PORT MAP( p q GetBTA: adder_32bit PORT MAP( x y z GetWriteReg: mux4_5bit PORT MAP( sel a b c d GetSrcB: mux4_32bit PORT MAP( sel a b c => => => => ALUSrc, RegReadData2, ImmExt, ImmUpper, => => => => => RegDst, Instr(20 DOWNTO 16), Instr(15 DOWNTO 11), "11111", WriteReg); => => => Branch_label, PCPlus4, BTA); => => ImmExt, Branch_label); => => => ExtOp, Instr(15 DOWNTO 0), ImmExt); => => Instr(15 DOWNTO 0), ImmUpper); => => Instr(25 DOWNTO 0), Jump_label); => Clock, => Reset, => RegWrite, => Instr(25 DOWNTO 21), => Instr(20 DOWNTO 16), => WriteReg, => Result, => SrcA, => RegReadData2);

UTS EL3043 - Arditto Trianggada / 13209046

50

d GetALUResult: ALU PORT MAP( x y

=>

SrcB);

=> =>

SrcA, SrcB, Instr(10 DOWNTO 6), ALUCtrl, ALUResult, Zero, LTZ);

shift => Control=> z Zero MSB GetBeq_sig: and2 PORT MAP( x y z GetBne_sig: and2 PORT MAP( x y z GetBltz_sig: and2 PORT MAP( x y z GetBgtz_sig: and3 PORT MAP( a b c d GetBranchTaken: or4 PORT MAP( g h i j k DataMem: DataMemory PORT MAP( CLK RST WE A WD => => => => => => => => => => => => => => => => => => => => => => => => => =>

Beq, Zero, Beq_sig);

Bne, NOT Zero, Bne_sig);

Bltz, LTZ, Bltz_sig);

Bgtz, NOT Zero, NOT LTZ, Bgtz_sig);

Beq_sig, Bne_sig, Bltz_sig, Bgtz_sig, BranchTaken);

Clock, Reset, MemWrite, ALUResult, RegReadData2,

UTS EL3043 - Arditto Trianggada / 13209046

51

RD GetJal_sel: or2 x y Z GetJal_sig: mux2_32bit PORT MAP( sel x y z GetResult: mux2_32bit PORT MAP( sel x y z END structural;

=>

ReadData);

PORT MAP(

=> => =>

Jal, Jalr, Jal_sel);

=> => => =>

Jal_sel, ALUResult, PCPlus4, Jal_sig);

=> => => =>

MemtoReg, Jal_sig, ReadData, Result);

UTS EL3043 - Arditto Trianggada / 13209046

52

C. Dataflow Instruksi
Pada bagian ini, akan dijelaskan aliran data dari instruksi beq, bne, bltz, blez, bgtz, j, jal, jr, dan jalr. 1. Instruksi beq Syntax : Instruction Set: Operasi : beq $s, $t, label 0001 00ss ssst tttt iiii iiii iiii iiii if ($s = $t) then nPC = PC+4+(SignExt(imm) <<2) else nPC = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. beq

Funct[5:0] AluOp[2:0] XX XXXX 001

AluCtrl[4:0] 1 0010

Jr 0

Jalr X

Dari control signal diatas, maka aliran data pada datapath dan ALU adalah sebagai berikut
BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken (0 or 1??)

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite

Jal_sig
MemtoReg

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1 ReadReg2
RegDst1:0

25:21

A1
20:16

SrcA

nPC
BTA JTA

PCPlus4

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

WE A RD ReadData

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

UTS EL3043 - Arditto Trianggada / 13209046

53

2. Instruksi bne Syntax : Instruction Set: Operasi : bne $s, $t, label 0001 01ss ssst tttt iiii iiii iiii iiii if ($s /= $t) then nPC = PC+4+(SignExt(imm) <<2) else nPC = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. bne

Funct[5:0] AluOp[2:0] XX XXXX 001

AluCtrl[4:0] 1 0010

Jr 0

Jalr X

Dari control signal diatas, maka aliran data pada datapath dan ALU adalah sebagai berikut

UTS EL3043 - Arditto Trianggada / 13209046

54

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken (0 or 1??)

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite

Jal_sig
MemtoReg

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1

25:21

SrcA

nPC
BTA JTA

20:16

PCPlus4

A1 ReadReg2 RD2 A2 A3 Register RegDst1:0 WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

WE A RD ReadData

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

UTS EL3043 - Arditto Trianggada / 13209046

55

3. Instruksi bltz Syntax : Instruction Set: Operasi : bltz $s, $t, label 0000 01ss ssst tttt iiii iiii iiii iiii if ($s < $t) then nPC = PC+4+(SignExt(imm) <<2) else nPC = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. bltz

Funct[5:0] AluOp[2:0] XX XXXX 001

AluCtrl[4:0] 1 0010

Jr 0

Jalr X

Dari control signal diatas, maka aliran data pada datapath dan ALU adalah sebagai berikut
BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken (0 or 1??)

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0

PCPlus4
CLK MemWrite

Jal_sig
MemtoReg

SrcA LTZ Zero ALUResult

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1
SrcA

25:21

WE A RD ReadData

A1
20:16

SrcA

nPC
BTA JTA

ReadReg2
RegDst1:0

PCPlus4

A2 A3 Register WD3 File

00 SrcB 01 10

0 1

ALU

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

UTS EL3043 - Arditto Trianggada / 13209046

56

4. Instruksi blez Syntax : Instruction Set: Operasi : blez $s, $t, label 0001 10ss ssst tttt iiii iiii iiii iiii if ($s <= $t) then nPC = PC+4+(SignExt(imm) <<2) else nPC = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. blez

Funct[5:0] AluOp[2:0] XX XXXX 001

AluCtrl[4:0] 1 0010

Jr 0

Jalr X

Dari control signal diatas, maka aliran data pada datapath dan ALU adalah sebagai berikut

UTS EL3043 - Arditto Trianggada / 13209046

57

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken (0 or 1??)

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite

Jal_sig
MemtoReg

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1

25:21

SrcA

nPC
BTA JTA

20:16

PCPlus4

A1 ReadReg2 RD2 A2 A3 Register RegDst1:0 WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

WE A RD ReadData

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

UTS EL3043 - Arditto Trianggada / 13209046

58

5. Instruksi bgtz Syntax : Instruction Set: Operasi : bgtz $s, $t, label 0001 11ss ssst tttt iiii iiii iiii iiii if ($s > $t) then nPC = PC+4+(SignExt(imm) <<2) else nPC = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. bgtz

Funct[5:0] AluOp[2:0] XX XXXX 001

AluCtrl[4:0] 1 0010

Jr 0

Jalr X

Dari control signal diatas, maka aliran data pada datapath dan ALU adalah sebagai berikut

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken (0 or 1??)

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite

Jal_sig
MemtoReg

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1 ReadReg2
RegDst1:0

25:21

A1
20:16

SrcA

nPC
BTA JTA

PCPlus4

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

WE A RD ReadData

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

UTS EL3043 - Arditto Trianggada / 13209046

59

6. Instruksi j Syntax : j label 0000 10ii iiii iiii iiii iiii iiii iiii nPC = PC+4[31:28] & imm & 00

Instruction Set : Operasi :

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. j

Funct[5:0] AluOp[2:0] XX XXXX XXX

AluCtrl[4:0] X XXXX

Jr X

Jalr X

Dari control signal diatas, maka aliran data pada datapath adalah sebagai berikut

UTS EL3043 - Arditto Trianggada / 13209046

60

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0

PCPlus4
CLK MemWrite

Jal_sig
MemtoReg

SrcA LTZ Zero

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1
SrcA

25:21

WE A RD ReadData

A1
20:16

SrcA

nPC
BTA JTA

ReadReg2
RegDst1:0

PCPlus4

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

Sedangkan, pada ALU tidak ada data yang diolah. 7. Instruksi jal Syntax Instruction Set Operasi : : : jal label 0000 11ii iiii iiii iiii iiii iiii iiii nPC = PC+4[31.28] & imm & 00; $31 = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. jal

Funct[5:0] AluOp[2:0] XX XXXX XXX

AluCtrl[4:0] X XXXX

Jr X

Jalr X

Dari control signal diatas, maka aliran data pada datapath adalah sebagai berikut

UTS EL3043 - Arditto Trianggada / 13209046

61

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal=1 Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0 SrcA SrcA CLK

PCPlus4
MemWrite

Jal_sig
MemtoReg

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1

25:21

SrcA

nPC
BTA JTA

20:16

PCPlus4

A1 ReadReg2 RD2 A2 A3 Register RegDst1:0 WD3 File

00 SrcB 01 10

ALU

LTZ Zero ALUResult

WE A RD ReadData

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

Sedangkan, pada ALU tidak ada data yang diolah.

8. Instruksi jr Syntax Instruction Set Operasi : : : jr $s 0000 00ss sss0 0000 0000 0000 0000 1000 nPC = $s

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. jr

Funct[5:0] AluOp[2:0] 00 1000 010

AluCtrl[4:0] X XXXX

Jr 1

Jalr 0

Dari control signal diatas, maka aliran data pada datapath adalah sebagai berikut

UTS EL3043 - Arditto Trianggada / 13209046

62

BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1 RD2

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr

Jump

CLK

Instr 10:6
CLK ALUSrc1:0

PCPlus4
CLK MemWrite

Jal_sig
MemtoReg

SrcA LTZ Zero

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1
SrcA

25:21

WE A RD ReadData

A1
20:16

SrcA

nPC
BTA JTA

ReadReg2
RegDst1:0

PCPlus4

A2 A3 Register WD3 File

00 SrcB 01 10

ALU

ALUResult

0 1

Data Memory WD WriteData

Result

20:16 15:11

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

Pada aliran data instruksi jr, nPC akan diupdate dengan nilai SrcA yang merupaka nilai isi dari register pada $s. Dis amping itu, jr yang merupakan instruksi R-Type dimana memiliki nilai RegDst=01, tetap tidak akan mengubah isi register karena pada kode biner nya nilai $d = 0. Oleh karena itu pengisian register dilakukan pada alamat $0 yang telah di-hardwired-kan dengan logika 0 sehingga tidak mempengaruhi isi register.

9. Instuksi jalr Syntax Instruction Set Operasi : : : jalr $d, $s 0000 00ss sss0 0000 1111 1000 0000 1001 nPC = $s; $31 = PC+4

Untuk menangani instruksi ini, control signal yang dikeluarkan adalah sebagai berikut

Instr. jalr

Funct[5:0] AluOp[2:0] 00 1001 010

AluCtrl[4:0] X XXXX

Jr 1

Jalr 1

UTS EL3043 - Arditto Trianggada / 13209046

63

Dari control signal diatas, maka aliran data pada datapath adalah sebagai berikut
BranchTaken Bgtz LTZ Zero

Bgtz_sig

Bne
Jump Jal Jr Jalr
31:26 5:0

Control Unit Op Funct

BranchTaken

Jr_sig

Jr
0 1

Branch_sig

Bltz Bgtz MemtoReg MemWrite Beq ALUControl ExtOp ALUSrc1:0 RegDst


RegWrite WE3 RD1

Bltz LTZ Bne Zero


4:0

Bltz_sig

Bne_sig

ALUControl

4:0

Beq Zero

Beq_sig 0 1

Jal Jalr=1

Jump

CLK

Instr 10:6
CLK ALUSrc1:0

PCPlus4
CLK MemWrite

Jal_sig
MemtoReg

SrcA LTZ Zero

0 1

0 1

PC
A RD Instruction Memory

Instr

ReadReg1
SrcA

25:21

WE A RD ReadData

SrcA

nPC
BTA JTA

20:16

PCPlus4

A1 ReadReg2 RD2 A2 A3 Register RegDst1:0 WD3 File

00 SrcB 01 10

ALU

ALUResult

0 1

Data Memory WD WriteData

Result

20:16 15:11

1 1111

$ra = 1 1111

00 01 10

WriteReg

4:0

Branch_label
15:0

Extend

ImmExt

<<2 PCPlus4

PCPlus4 Bus Merging


31:28 27:0

BTA

15:0

<<16

ImmUpper

ExtOp
25:0

<<2

Jump_label

You might also like