Report Uts

63
1 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) Instruction Set : 1000 11ss ssst tttt iiii iiii iiii iiii Operasi : $t = M[$s + imm] Datapath dan controller: 2. Instruksi sw Syntax : sw $t, imm($s) Instruction Set : 1010 11ss ssst tttt iiii iiii iiii iiii Operasi : M[$s + imm] = $t Datapath dan controller:

Transcript of Report Uts

Page 1: Report Uts

1UTS 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)

Instruction Set : 1000 11ss ssst tttt iiii iiii iiii iiii

Operasi : $t = M[$s + imm]

Datapath dan controller:

2. Instruksi sw

Syntax : sw $t, imm($s)

Instruction Set : 1010 11ss ssst tttt iiii iiii iiii iiii

Operasi : M[$s + imm] = $t

Datapath dan controller:

Page 2: Report Uts

2UTS EL3043 - Arditto Trianggada / 13209046

3. Instruksi add, sub, and, dan or (R-Type)

Syntax : <funct> $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 00ff ffff

Operasi : $d = $s <funct> $d

Datapath dan controller:

Page 3: Report Uts

3UTS EL3043 - Arditto Trianggada / 13209046

7. Instruksi beq

Syntax : beq $s, $t, label

Instruction Set : 0001 00ss ssst tttt iiii iiii iiii iiii

Operasi : if ($s = $t) then nPC = PC+4+(SignExt(imm) << 2)

else nPC = PC+4

Datapath dan controller:

8. Instruksi addi

Syntax : addi $t, $s, imm

Instruction Set : 0010 00ss ssst tttt iiii iiii iiii iiii

Operasi : $t = $s + imm

Datapath dan controller:

Page 4: Report Uts

4UTS EL3043 - Arditto Trianggada / 13209046

9. Instruksi j

Syntax : j label

Instruction Set : 0000 10ii iiii iiii iiii iiii iiii iiii

Operasi : nPC = PC+4[31:28] & imm & “00”

Datapath dan controller:

SignImm

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Sign Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoReg

ALUSrc

RegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl2:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0

1

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl2:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc

nPC

Zero

Control Unit

RegDst

Branch

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl2:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Page 5: Report Uts

5UTS EL3043 - Arditto Trianggada / 13209046

Main Decoder:

ALU Decoder:

ALU

ALUCtrl[2:0] Operasi

000 A AND B

001 A OR B

010 A + B

011 n/a

100 A AND B'

101 A OR B'

110 A - B

111 A < B

+

2 01

A B

Cout

Y

3

01

ALUCtrl2

ALUCtrl1:0

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

Page 6: Report Uts

6UTS EL3043 - Arditto Trianggada / 13209046

10. Instruksi slt

Syntax : slt $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 0010 1011

Operasi : if ($s < $t) then $d = 1; else $d = 0

Pada penambahan instruksi ini, perubahan ada pada control signal, khususnya pada ALU Decoder:

Instr. Funct[5:0] AluOp[1:0] AluCtrl[2:0]

add 10 0000 1X 010

sub 10 0010 1X 110

and 10 0100 1X 000

or 10 0101 1X 001

addi XX XXXX 00 010

lw XX XXXX 00 010

sw XX XXXX 00 010

beq XX XXXX X1 110

j XX XXXX XX XXX

slt 10 1010 1X 111

Untuk spesifikasi lainnya adalah sama.

11. Instruksi sll

Syntax : sll $d, $t, shamt

Instruction Set : 0000 0000 0000t tttt dddd d0sss ss00 0000

Operasi : $d = $t << shamt

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Mengubah ALUCtrl menjadi 4 bit

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

Page 7: Report Uts

7UTS EL3043 - Arditto Trianggada / 13209046

Menambah operasi shift pada isi ALU

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

5

ALUCtrl3

ALUCtrl2:0

Menambahkan shamt[4:0] sebagai masukan pada ALU pada datapath dan controller

SignImm

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Sign Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoReg

ALUSrc

RegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl3:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0

1

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl3:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc

nPC

Zero

Instr 10:6

Page 8: Report Uts

8UTS EL3043 - Arditto Trianggada / 13209046

12. Instruksi srl

Syntax : srl $d, $t, shamt

Instruction Set : 0000 0000 0000t tttt dddd d0sss ss00 0010

Operasi : $d = $t >> shamt

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Modifikasi control signal

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

srl 00 0010 1X 0101

Menambah operasi shift pada ALU

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

5

ALUCtrl3

ALUCtrl2:0

5

>>

N

Page 9: Report Uts

9UTS EL3043 - Arditto Trianggada / 13209046

13. Instruksi sra

Syntax : sra $d, $t, shamt

Instruction Set : 0000 0000 0000t tttt dddd d0sss ss00 0011

Operasi : $d = $t >>> shamt

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Modifikasi control signal

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

srl 00 0010 1X 0101

sra 00 0011 1X 0110

Menambah operasi shift pada ALU

ALUCtrl[3:0] Operasi

0000 A AND B

0001 A OR B

0010 A + B

0011 n/a

0100 B << shamt

0101 B >> shamt

0110 B >>> shamt

0111 n/a

1000 A AND B'

1001 A OR B'

1010 A - B

1011 A < B

1100 B' << shamt

1101 B' >> shamt

1110 B' >>> shamt

1111 n/a

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

5

ALUCtrl3

ALUCtrl2:0

5

>>

N

6

>>>

N

Page 10: Report Uts

10UTS EL3043 - Arditto Trianggada / 13209046

14. Instruksi sllv

Syntax : sllv $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 0000 0100

Operasi : $d = $t << $s

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Mengubah control signal, khususnya pada ALU decoder:

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

srl 00 0010 1X 0101

sra 00 0011 1X 0110

sllv 00 0100 1X 1100

Mengubah isi dari operasi ALU

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

ALUCtrl3

ALUCtrl2:0

5

>>

N

6

>>>

N

01

A4:0

5 5

ALUCtrl3

Page 11: Report Uts

11UTS EL3043 - Arditto Trianggada / 13209046

15. Instruksi srlv

Syntax : srlv $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 0000 0110

Operasi : $d = $t >> $s

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Mengubah control signal, khususnya pada ALU decoder:

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

srl 00 0010 1X 0101

sra 00 0011 1X 0110

sllv 00 0100 1X 1100

srlv 00 0110 1X 1101

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

ALUCtrl3

ALUCtrl2:0

5

>>

N

6

>>>

N

01

A4:0

5 5

ALUCtrl3

Page 12: Report Uts

12UTS EL3043 - Arditto Trianggada / 13209046

16. Instruksi srav

Syntax : srav $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 0000 0111

Operasi : $d = $t >>> $s

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Mengubah control signal, khususnya pada ALU decoder:

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

srl 00 0010 1X 0101

sra 00 0011 1X 0110

sllv 00 0100 1X 1100

srlv 00 0110 1X 1101

srav 00 0111 1X 1110

ALUCtrl[3:0] Operasi

0000 A AND B

0001 A OR B

0010 A + B

0011 n/a

0100 B << shamt

0101 B >> shamt

0110 B >>> shamt

0111 n/a

1000 A AND B'

1001 A OR B'

1010 A - B

1011 A < B

1100 B << A

1101 B >> A

1110 B >>> A

1111 n/a

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

ALUCtrl3

ALUCtrl2:0

5

>>

N

6

>>>

N

01

A4:0

5 5

ALUCtrl3

Page 13: Report Uts

13UTS EL3043 - Arditto Trianggada / 13209046

17. Instruksi xor

Syntax : xor $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 0010 0110

Operasi : $d = $s XOR $t

Pada penambahan instruksi ini modifikasi adalah sebagai berikut

Mengubah control signal, khususnya ALU decoder

Instr. Funct[5:0] AluOp[1:0] AluCtrl[3:0]

add 10 0000 1X 0010

sub 10 0010 1X 1010

and 10 0100 1X 0000

or 10 0101 1X 0001

addi XX XXXX 00 0010

lw XX XXXX 00 0010

sw XX XXXX 00 0010

beq XX XXXX X1 1010

j XX XXXX XX XXXX

slt 10 1010 1X 1011

sll 00 0000 1X 0100

srl 00 0010 1X 0101

sra 00 0011 1X 0110

sllv 00 0100 1X 1100

srlv 00 0110 1X 1101

srav 00 0111 1X 1110

xor 10 0110 1X 0111

Mengubah isi dari ALU

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

ALUCtrl3

ALUCtrl2:0

5

>>

N

6

>>>

N

01

A4:0

5 5

ALUCtrl3

7

N

Page 14: Report Uts

14UTS EL3043 - Arditto Trianggada / 13209046

18. Instruksi nor

Syntax : nor $d, $s, $t

Instruction Set : 0000 00ss ssst tttt dddd d000 0010 0110

Operasi : $d = $s NOR $t

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Mengubah control signal, khususnya ALU decoder

Instr. Funct[5:0] AluOp[1:0] AluCtrl[4:0]

add 10 0000 1X 0 0010

sub 10 0010 1X 1 0010

and 10 0100 1X 0 0000

or 10 0101 1X 0 0001

addi XX XXXX 00 0 0010

lw XX XXXX 00 0 0010

sw XX XXXX 00 0 0010

beq XX XXXX X1 1 0010

j XX XXXX XX X XXXX

slt 10 1010 1X 1 0011

sll 00 0000 1X 0 0100

srl 00 0010 1X 0 0101

sra 00 0011 1X 0 0110

sllv 00 0100 1X 1 0100

srlv 00 0110 1X 1 0101

srav 00 0111 1X 1 0110

xor 10 0110 1X 0 0111

nor 10 0111 1X 0 1000

Mengubah isi dari ALU

ALUCtrl[4:0] Operasi

0 0000 A AND B

0 0001 A OR B

0 0010 A + B

0 0011 n/a

0 0100 B << shamt

0 0101 B >> shamt

0 0110 B >>> shamt

0 0111 A XOR B

0 1000 A NOR B

1 0000 A AND B'

1 0001 A OR B'

1 0010 A - B

1 0011 A < B

1 0100 B << A

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4

<<

N

shamt4:0

ALUCtrl4

ALUCtrl3:0

5

>>

N

6

>>>

N

01

A4:0

5 5

ALUCtrl4

7

N

8

N

Page 15: Report Uts

15UTS EL3043 - Arditto Trianggada / 13209046

1 0101 B >> A

1 0110 B >>> A

1 0111 A XOR B'

1 1000 A NOR B'

Datapath dan controller

SignImm

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Sign Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoReg

ALUSrc

RegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0

1

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc

nPC

Zero

Instr 10:6

19. Instruksi lui

Syntax : lui $t, imm

Instruction Set : 0011 1100 000t tttt iiii iiii iiii iiii

Operasi : $t = imm<<16

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Pengubahan control signal

Main decoder:

Page 16: Report Uts

16UTS EL3043 - Arditto Trianggada / 13209046

ALU decoder:

Instr. Funct[5:0] AluOp[1:0] AluCtrl[4:0]

add 10 0000 1X 0 0010

sub 10 0010 1X 1 0010

and 10 0100 1X 0 0000

or 10 0101 1X 0 0001

addi XX XXXX 00 0 0010

lw XX XXXX 00 0 0010

sw XX XXXX 00 0 0010

beq XX XXXX X1 1 0010

j XX XXXX XX X XXXX

slt 10 1010 1X 1 0011

sll 00 0000 1X 0 0100

srl 00 0010 1X 0 0101

sra 00 0011 1X 0 0110

sllv 00 0100 1X 1 0100

srlv 00 0110 1X 1 0101

srav 00 0111 1X 1 0110

xor 10 0110 1X 0 0111

nor 10 0111 1X 0 1000

lui XX XXXX 00 0 0010

Datapath dan controller

SignImm

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Sign Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoRegRegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

Page 17: Report Uts

17UTS EL3043 - Arditto Trianggada / 13209046

20. Instruksi slti

Syntax : slti $t, $s, imm

Instruction Set : 0010 10ss ssst tttt iiii iiii iiii iiii

Operasi : if ($s < SignExt(imm)) then $t = 1; else $t = 0

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Control signal

Main decoder:

ALU decoder:

Instr. Funct[5:0] AluOp[1:0] AluCtrl[4:0]

add 10 0000 10 0 0010

sub 10 0010 10 1 0010

and 10 0100 10 0 0000

or 10 0101 10 0 0001

addi XX XXXX 00 0 0010

lw XX XXXX 00 0 0010

sw XX XXXX 00 0 0010

beq XX XXXX 01 1 0010

j XX XXXX XX X XXXX

slt 10 1010 10 1 0011

sll 00 0000 10 0 0100

srl 00 0010 10 0 0101

sra 00 0011 10 0 0110

sllv 00 0100 10 1 0100

srlv 00 0110 10 1 0101

srav 00 0111 10 1 0110

xor 10 0110 10 0 0111

nor 10 0111 10 0 1000

lui XX XXXX 00 0 0010

slti XX XXXX 11 1 0011

Page 18: Report Uts

18UTS EL3043 - Arditto Trianggada / 13209046

Datapath dan controller (tetap)

SignImm

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Sign Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoRegRegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

21. Instruksi andi

Syntax : andi $t, $s, imm

Instruction Set : 0011 00ss ssst tttt iiii iiii iiii iiii

Operasi : $t = $s AND ZeroExt(imm)

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Control signal

RegDst

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl4:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

ExtOp

Page 19: Report Uts

19UTS EL3043 - Arditto Trianggada / 13209046

Main decoder (ALUOp menjadi 3-bit):

ALU decoder:

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

Datapath dan controller

Page 20: Report Uts

20UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoRegRegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

22. Instruksi ori

Syntax : ori $t, $s, imm

Instruction Set : 0011 01ss ssst tttt iiii iiii iiii iiii

Operasi : $t = $s OR ZeroExt(imm)

Pada penambahan instruksi ini modifikasi adalah sebagai berikut:

Control signal

Main decoder:

ALU decoder:

Page 21: Report Uts

21UTS EL3043 - Arditto Trianggada / 13209046

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:

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoRegRegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Page 22: Report Uts

22UTS EL3043 - Arditto Trianggada / 13209046

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. 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

xori XX XXXX 110 0 0111

Page 23: Report Uts

23UTS EL3043 - Arditto Trianggada / 13209046

Datapath dan controller adalah sama dengan penambahan andi:

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Branch

MemWrite MemtoRegRegWrite

Op

Funct

Control

UnitZero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Branch

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

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.

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl4:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Bne

ExtOp

Page 24: Report Uts

24UTS EL3043 - Arditto Trianggada / 13209046

Main decoder:

ALU decoder:

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

xori XX XXXX 110 0 0111

bne XX XXXX 001 1 0010

Penambahan control signal tersebut juga akan memodifikasi datapath dan controller sebagai

berikut

Page 25: Report Uts

25UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite MemtoRegRegWrite

Op

Funct

Control

Unit

Zero

Bra

nch

Ta

ke

n

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

25. Instruksi bltz

Syntax : bltz $s, $t, label

Instruction Set : 0000 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 bltz, diperlukan tambahan control signal yang membedakan dengan

branch lain.

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl4:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Bne

Bltz

ExtOp

Page 26: Report Uts

26UTS EL3043 - Arditto Trianggada / 13209046

Main decoder:

ALU decoder:

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

xori XX XXXX 110 0 0111

bne XX XXXX 001 1 0010

bltz XX XXXX 001 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)

Page 27: Report Uts

27UTS EL3043 - Arditto Trianggada / 13209046

ALUCtrl[4:0] Operasi

0 0000 A AND B

0 0001 A OR B

0 0010 A + B

0 0011 n/a

0 0100 B << shamt

0 0101 B >> shamt

0 0110 B >>> shamt

0 0111 A XOR B

0 1000 A NOR B

1 0000 A AND B'

1 0001 A OR B'

1 0010 A - B

1 0011 A < B

1 0100 B << A

1 0101 B >> A

1 0110 B >>> A

1 0111 A XOR B'

1 1000 A NOR B'

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

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite MemtoRegRegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

+

2 01

A B

Cout

Y

3

01

[N-1] S

NN

N

N

N NNN

N

2

Zero

Extend

== 0

Zero

4<<

N

shamt4:0

ALUCtrl4

ALUCtrl3:0

5

>>

N

6

>>>

N

01

A4:0

5 5

ALUCtrl4

7

N

8

N

LTZ

Y31N

Page 28: Report Uts

28UTS EL3043 - Arditto Trianggada / 13209046

26. Instruksi bgtz

Syntax : bgtz $s, $t, label

Instruction Set : 0001 11ss 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 bgtz, diperlukan tambahan control signal yang membedakan dengan

branch lain

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl4:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Bne

Bltz

ExtOp

Bgtz

Main decoder:

Page 29: Report Uts

29UTS EL3043 - Arditto Trianggada / 13209046

ALU decoder:

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

xori XX XXXX 110 0 0111

bne XX XXXX 001 1 0010

bltz XX XXXX 001 1 0010

bgtz XX XXXX 001 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).

Page 30: Report Uts

30UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite MemtoRegRegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Bne

Zero

LTZ

Bgtz

Bgtz

27. Instruksi blez

Syntax : blez $s, $t, label

Instruction Set : 0001 10ss ssst tttt iiii iiii iiii iiii

Operasi : 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:

Page 31: Report Uts

31UTS EL3043 - Arditto Trianggada / 13209046

ALU decoder:

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

xori XX XXXX 110 0 0111

bne XX XXXX 001 1 0010

bltz XX XXXX 001 1 0010

bgtz XX XXXX 001 1 0010

blez XX XXXX 001 1 0010

Page 32: Report Uts

32UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE 0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite MemtoRegRegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

0

1

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Bne

Zero

LTZ

Bgtz

Bgtz

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 : jal label

Instruction Set : 0000 11ii iiii iiii iiii iiii iiii iiii

Operasi : nPC = PC+4[31.28] & imm & “00”; $31 = PC+4

Modifikasi yang dilakukan adalah sebagai berikut:

Diberikan penambahan pada control signal yaitu jal

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl4:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Jal

Bne

Bltz

ExtOp

Bgtz

Page 33: Report Uts

33UTS EL3043 - Arditto Trianggada / 13209046

Pada Main decoder, RegDst diubah menjadi 2-bit:

ALU decoder:

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

xori XX XXXX 110 0 0111

bne XX XXXX 001 1 0010

bltz XX XXXX 001 1 0010

bgtz XX XXXX 001 1 0010

blez XX XXXX 001 1 0010

jal XX XXXX XXX X XXXX

Page 34: Report Uts

34UTS EL3043 - Arditto Trianggada / 13209046

Datapath dan controller

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWriteMemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PCPlus4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

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 : jr $s

Instruction Set : 0000 00ss sss0 0000 0000 0000 0000 1000

Operasi : 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

Page 35: Report Uts

35UTS EL3043 - Arditto Trianggada / 13209046

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl4:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Jal

Bne

Bltz

Jr

ExtOp

Bgtz

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr

add 10 0000 010 0 0010 0

sub 10 0010 010 1 0010 0

and 10 0100 010 0 0000 0

or 10 0101 010 0 0001 0

addi XX XXXX 000 0 0010 0

lw XX XXXX 000 0 0010 0

sw XX XXXX 000 0 0010 0

beq XX XXXX 001 1 0010 0

j XX XXXX XXX X XXXX X

slt 10 1010 010 1 0011 0

sll 00 0000 010 0 0100 0

srl 00 0010 010 0 0101 0

sra 00 0011 010 0 0110 0

sllv 00 0100 010 1 0100 0

srlv 00 0110 010 1 0101 0

srav 00 0111 010 1 0110 0

xor 10 0110 010 0 0111 0

nor 10 0111 010 0 1000 0

lui XX XXXX 000 0 0010 0

slti XX XXXX 011 1 0011 0

andi XX XXXX 100 0 0000 0

ori XX XXXX 101 0 0001 0

xori XX XXXX 110 0 0111 0

bne XX XXXX 001 1 0010 0

bltz XX XXXX 001 1 0010 0

bgtz XX XXXX 001 1 0010 0

blez XX XXXX 001 1 0010 0

jal XX XXXX XXX X XXXX X

jr 00 1000 010 X XXXX 1

Page 36: Report Uts

36UTS EL3043 - Arditto Trianggada / 13209046

Datapath dan controller

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWriteMemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

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 : jalr $d, $s

Instruction Set : 0000 00ss sss0 0000 1111 1000 0000 1001

Operasi : 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

Page 37: Report Uts

37UTS EL3043 - Arditto Trianggada / 13209046

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl2:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Jal

Bne

Bltz

Jr

Jalr

ExtOp

Bgtz

ALU decoder:

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

add 10 0000 010 0 0010 0 0

sub 10 0010 010 1 0010 0 0

and 10 0100 010 0 0000 0 0

or 10 0101 010 0 0001 0 0

addi XX XXXX 000 0 0010 0 0

lw XX XXXX 000 0 0010 0 X

sw XX XXXX 000 0 0010 0 X

beq XX XXXX 001 1 0010 0 X

j XX XXXX XXX X XXXX X X

slt 10 1010 010 1 0011 0 0

sll 00 0000 010 0 0100 0 0

srl 00 0010 010 0 0101 0 0

sra 00 0011 010 0 0110 0 0

sllv 00 0100 010 1 0100 0 0

srlv 00 0110 010 1 0101 0 0

srav 00 0111 010 1 0110 0 0

xor 10 0110 010 0 0111 0 0

nor 10 0111 010 0 1000 0 0

lui XX XXXX 000 0 0010 0 0

slti XX XXXX 011 1 0011 0 0

andi XX XXXX 100 0 0000 0 0

ori XX XXXX 101 0 0001 0 0

xori XX XXXX 110 0 0111 0 0

bne XX XXXX 001 1 0010 0 X

bltz XX XXXX 001 1 0010 0 X

bgtz XX XXXX 001 1 0010 0 X

blez XX XXXX 001 1 0010 0 X

jal XX XXXX XXX X XXXX X X

jr 00 1000 010 X XXXX 1 0

jalr 00 1001 010 X XXXX 1 1

Page 38: Report Uts

38UTS EL3043 - Arditto Trianggada / 13209046

Datapath dan controller:

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWriteMemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

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

RegDst1:0

Beq

MemWrite

MemtoReg

ALUSrc1:0

Opcode5:0

Control Unit

ALUControl2:0

Funct5:0

Main

Decoder

ALUOp2:0

ALU

Decoder

RegWrite

Jump

Jal

Bne

Bltz

Jr

Jalr

ExtOp

Bgtz

Page 39: Report Uts

39UTS EL3043 - Arditto Trianggada / 13209046

Main decoder table:

ALU decoder table:

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

add 10 0000 010 0 0010 0 0

sub 10 0010 010 1 0010 0 0

and 10 0100 010 0 0000 0 0

or 10 0101 010 0 0001 0 0

addi XX XXXX 000 0 0010 0 0

lw XX XXXX 000 0 0010 0 X

sw XX XXXX 000 0 0010 0 X

beq XX XXXX 001 1 0010 0 X

j XX XXXX XXX X XXXX X X

slt 10 1010 010 1 0011 0 0

sll 00 0000 010 0 0100 0 0

srl 00 0010 010 0 0101 0 0

sra 00 0011 010 0 0110 0 0

sllv 00 0100 010 1 0100 0 0

srlv 00 0110 010 1 0101 0 0

srav 00 0111 010 1 0110 0 0

xor 10 0110 010 0 0111 0 0

nor 10 0111 010 0 1000 0 0

lui XX XXXX 000 0 0010 0 0

slti XX XXXX 011 1 0011 0 0

andi XX XXXX 100 0 0000 0 0

ori XX XXXX 101 0 0001 0 0

xori XX XXXX 110 0 0111 0 0

bne XX XXXX 001 1 0010 0 X

bltz XX XXXX 001 1 0010 0 X

bgtz XX XXXX 001 1 0010 0 X

blez XX XXXX 001 1 0010 0 X

jal XX XXXX XXX X XXXX X X

jr 00 1000 010 X XXXX 1 0

jalr 00 1001 010 X XXXX 1 1

Page 40: Report Uts

40UTS EL3043 - Arditto Trianggada / 13209046

ALU

ALUCtrl[4:0] Operasi

0 0000 A AND B

0 0001 A OR B

0 0010 A + B

0 0011 n/a

0 0100 B << shamt

0 0101 B >> shamt

0 0110 B >>> shamt

0 0111 A XOR B

0 1000 A NOR B

1 0000 A AND B'

1 0001 A OR B'

1 0010 A - B

1 0011 A < B

1 0100 B << A

1 0101 B >> A

1 0110 B >>> A

1 0111 A XOR B'

1 1000 A NOR B'

Page 41: Report Uts

41UTS EL3043 - Arditto Trianggada / 13209046

Datapath dan Controller

Berikut ini adalah gambar rangkaian datapath Single-Cycle MIPS Processor yang telah dilengkapi

nama-nama pada tiap sinyal yang ada:

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

RegReadData2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Ja

l_se

l

15:0

Jal_sig

Page 42: Report Uts

42UTS EL3043 - Arditto Trianggada / 13209046

B. Deskripsi Struktural VHDL

Deskripsi Structural:

LIBRARY IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY SingleCycleMIPS IS

PORT( Clock : IN STD_LOGIC;

Reset : IN STD_LOGIC);

--Output pin for simulation

PC_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

Instr_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

ALUCtrl_out : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);

ReadData1_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

ReadData2_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

WriteReg_out : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);

ALUResult_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

Result_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

Beq_out : OUT STD_LOGIC;

Bne_out : OUT STD_LOGIC;

Bltz_out : OUT STD_LOGIC;

Blez_out : OUT STD_LOGIC;

Bgtz_out : OUT STD_LOGIC;

Zero_out : OUT STD_LOGIC;

LTZ_out : OUT STD_LOGIC;

J_out : OUT STD_LOGIC;

Jal_out : OUT STD_LOGIC;

Jr_out : OUT STD_LOGIC;

Jalr_out : OUT STD_LOGIC;

RegWrite_out : OUT STD_LOGIC;

MemWrite_out : OUT STD_LOGIC);

END SingleCycleMIPS;

ARCHITECTURE structural OF SIngleCycleMIPS IS

COMPONENT mux2_32bit

PORT( sel : IN STD_LOGIC;

x : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

y : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

z : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

Page 43: Report Uts

43UTS EL3043 - Arditto Trianggada / 13209046

COMPONENT mux4_5bit

PORT( sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0);

a : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

b : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

c : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

d : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));

END COMPONENT;

COMPONENT mux4_32bit

PORT( sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0);

a : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

b : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

c : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

d : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT PCReg

PORT( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

PCin : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

PCout : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT adder_32bit

PORT( x : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

y : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

z : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT BusMerging

PORT( x : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

y : IN STD_LOGIC_VECTOR(27 DOWNTO 0);

z : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT concat16

PORT( p : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT concat2

PORT( p : IN STD_LOGIC_VECTOR(25 DOWNTO 0);

q : OUT STD_LOGIC_VECTOR(27 DOWNTO 0));

END COMPONENT;

Page 44: Report Uts

44UTS EL3043 - Arditto Trianggada / 13209046

COMPONENT shiftby2

PORT( p : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT Extend

PORT( a : IN STD_LOGIC;

b : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

c : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT ALU

PORT( x : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

y : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

shift : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

Control: IN STD_LOGIC_VECTOR(4 DOWNTO 0);

z : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

Zero : OUT STD_LOGIC;

MSB : OUT STD_LOGIC);

END COMPONENT;

COMPONENT and2

PORT( x : IN STD_LOGIC;

y : IN STD_LOGIC;

z : OUT STD_LOGIC));

END COMPONENT;

COMPONENT and3

PORT( a : IN STD_LOGIC;

b : IN STD_LOGIC;

c : IN STD_LOGIC;

d : OUT STD_LOGIC));

END COMPONENT;

COMPONENT or2

PORT( x : IN STD_LOGIC;

y : IN STD_LOGIC;

z : OUT STD_LOGIC));

END COMPONENT;

COMPONENT or4

PORT( g : IN STD_LOGIC;

h : IN STD_LOGIC;

i : IN STD_LOGIC;

j : IN STD_LOGIC;

Page 45: Report Uts

45UTS EL3043 - Arditto Trianggada / 13209046

k : OUT STD_LOGIC));

END COMPONENT;

COMPONENT InstrMemory

PORT( A : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

RD : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT RegisterFile

PORT( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

WE3 : IN STD_LOGIC;

A1 : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

A2 : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

A3 : IN STD_LOGIC_VECTOR(4 DOWNTO 0);

WD3 : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

RD1 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

RD2 : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT DataMemory

PORT( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

WE : IN STD_LOGIC;

A : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

WD : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

RD : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END COMPONENT;

COMPONENT ControlUnit IS

PORT(

Opcode : IN STD_LOGIC_VECTOR(5 DOWNTO 0);

Funct : IN STD_LOGIC_VECTOR(5 DOWNTO 0);

RegDst : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);

RegWrite : OUT STD_LOGIC;

Beq : OUT STD_LOGIC;

Bne : OUT STD_LOGIC;

Bltz : OUT STD_LOGIC;

Bgtz : OUT STD_LOGIC;

MemtoReg : OUT STD_LOGIC;

MemWrite : OUT STD_LOGIC;

ALUCtrl : OUT STD_LOGIC_VECTOR (4 DOWNTO 0);

ALUSrc : OUT STD_LOGIC(1 DOWNTO 0);

J : OUT STD_LOGIC;

Jal : OUT STD_LOGIC;

Page 46: Report Uts

46UTS EL3043 - Arditto Trianggada / 13209046

Jr : OUT STD_LOGIC;

Jalr : OUT STD_LOGIC;

END COMPONENT;

SIGNAL PCPlus4 : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL BTA : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL JTA : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL BranchTaken : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Jr_sig : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Branch_sig : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Jr_sig : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL nPC : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL PC : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Instr : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL RegReadData1 : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL RegReadData2 : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL ImmExt : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL ImmUpper : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL WriteReg : STD_LOGIC_VECTOR(4 DOWNTO 0);

SIGNAL Branch_label : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Jump_label : STD_LOGIC_VECTOR(27 DOWNTO 0);

SIGNAL SrcA : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL SrcB : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL ALUResult : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Zero : STD_LOGIC;

SIGNAL LTZ : STD_LOGIC;

SIGNAL Jal_sel : STD_LOGIC;

SIGNAL ReadData : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL WriteData : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Result : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL Beq_sig : STD_LOGIC;

SIGNAL Bne_sig : STD_LOGIC;

SIGNAL Bltz_sig : STD_LOGIC;

SIGNAL Bgtz_sig : STD_LOGIC;

SIGNAL RegWrite : STD_LOGIC;

SIGNAL RegDst : STD_LOGIC_VECTOR(1 DOWNTO 0);

SIGNAL ALUSrc : STD_LOGIC_VECTOR(1 DOWNTO 0);

SIGNAL ALUCtrl : STD_LOGIC_VECTOR(4 DOWNTO 0);

SIGNAL MemWrite : STD_LOGIC;

SIGNAL MemtoReg : STD_LOGIC;

SIGNAL ExtOp : STD_LOGIC;

SIGNAL Beq : STD_LOGIC;

SIGNAL Bne : STD_LOGIC;

SIGNAL Bltz : STD_LOGIC;

SIGNAL Bgtz : STD_LOGIC;

Page 47: Report Uts

47UTS EL3043 - Arditto Trianggada / 13209046

SIGNAL Jump : STD_LOGIC;

SIGNAL Jal : STD_LOGIC;

SIGNAL Jr : STD_LOGIC;

SIGNAL Jalr : STD_LOGIC;

BEGIN

--Output signal used for simulation if necessary

PC_out <= PC;

Instr_out <= Instr;

ALUCtrl_out <= ALUCtrl;

ReadData1_out <= SrcA;

ReadData2_out <= RegReadData2;

WriteReg_out <= WriteReg;

ALUResult_out <= ALUResult;

Result_out <= Result;

Beq_out <= Beq;

Bne_out <= Bne;

Bltz_out <= Bltz;

Blez_out <= Blez;

Bgtz_out <= Bgtz;

Zero_out <= Zero;

LTZ_out <= Zero;

J_out <= Jump;

Jal_out <= Jal;

Jr_out <= Jr;

Jalr_out <= Jalr;

MemWrite_out <= MemWrite;

RegWrite_out <= '0' WHEN WriteReg = "00000" ELSE RegWrite;

--Structural description

GetJr_sig: mux2_32bit

PORT MAP( sel => Jr,

x => PCPlus4,

y => SrcA,

z => Jr_sig);

GetBranch_sig: mux2_32bit

PORT MAP( sel => BranchTaken,

x => Jr_sig,

y => BTA,

z => Branch_sig);

Page 48: Report Uts

48UTS EL3043 - Arditto Trianggada / 13209046

GetJump_sig: mux2_32bit

PORT MAP( sel => Jump,

x => Branch_sig,

y => JTA,

z => nPC);

GetPC: PCReg

PORT MAP( CLK => Clock,

RST => Reset,

PCin => nPC,

PCout => PC);

InstrMem: InstrMemory

PORT MAP( A => PC,

RD => Instr);

GetPCPlus4: adder_32bit

PORT MAP( x => PC,

y => X"0004",

z => PCPlus4);

GetJTA: BusMerging

PORT MAP( x => PCPlus4(31 DOWNTO 28),

y => Jump_label,

z => JTA);

GetControlSignal: ControlUnit

PORT MAP( Opcode => Instr(31 DOWNTO 26),

Funct => Instr(5 DOWNTO 0),

RegDst => RegDst,

RegWrite => RegWrite,

Beq => Beq,

Bne => Bne,

Bltz => Bltz,

MemtoReg => MemtoReg,

MemWrite => MemWrite,

ALUCtrl => ALUCtrl,

ALUSrc => ALUSrc,

J => Jump,

Jal => Jal,

Jr => Jr,

Jalr => Jalr);

Page 49: Report Uts

49UTS EL3043 - Arditto Trianggada / 13209046

RegFile: RegisterFile

PORT MAP( CLK => Clock,

RST => Reset,

WE3 => RegWrite,

A1 => Instr(25 DOWNTO 21),

A2 => Instr(20 DOWNTO 16),

A3 => WriteReg,

WD3 => Result,

RD1 => SrcA,

RD2 => RegReadData2);

GetJumpLabel: concat2

PORT MAP( p => Instr(25 DOWNTO 0),

q => Jump_label);

GetImmUpper: concat16

PORT MAP( p => Instr(15 DOWNTO 0),

q => ImmUpper);

GetImmExt: Extend

PORT MAP( a => ExtOp,

b => Instr(15 DOWNTO 0),

c => ImmExt);

GetBranchLabel: shiftby2

PORT MAP( p => ImmExt,

q => Branch_label);

GetBTA: adder_32bit

PORT MAP( x => Branch_label,

y => PCPlus4,

z => BTA);

GetWriteReg: mux4_5bit

PORT MAP( sel => RegDst,

a => Instr(20 DOWNTO 16),

b => Instr(15 DOWNTO 11),

c => "11111",

d => WriteReg);

GetSrcB: mux4_32bit

PORT MAP( sel => ALUSrc,

a => RegReadData2,

b => ImmExt,

c => ImmUpper,

Page 50: Report Uts

50UTS EL3043 - Arditto Trianggada / 13209046

d => SrcB);

GetALUResult: ALU

PORT MAP( x => SrcA,

y => SrcB,

shift => Instr(10 DOWNTO 6),

Control=> ALUCtrl,

z => ALUResult,

Zero => Zero,

MSB => LTZ);

GetBeq_sig: and2

PORT MAP( x => Beq,

y => Zero,

z => Beq_sig);

GetBne_sig: and2

PORT MAP( x => Bne,

y => NOT Zero,

z => Bne_sig);

GetBltz_sig: and2

PORT MAP( x => Bltz,

y => LTZ,

z => Bltz_sig);

GetBgtz_sig: and3

PORT MAP( a => Bgtz,

b => NOT Zero,

c => NOT LTZ,

d => Bgtz_sig);

GetBranchTaken: or4

PORT MAP( g => Beq_sig,

h => Bne_sig,

i => Bltz_sig,

j => Bgtz_sig,

k => BranchTaken);

DataMem: DataMemory

PORT MAP( CLK => Clock,

RST => Reset,

WE => MemWrite,

A => ALUResult,

WD => RegReadData2,

Page 51: Report Uts

51UTS EL3043 - Arditto Trianggada / 13209046

RD => ReadData);

GetJal_sel: or2

PORT MAP( x => Jal,

y => Jalr,

Z => Jal_sel);

GetJal_sig: mux2_32bit

PORT MAP( sel => Jal_sel,

x => ALUResult,

y => PCPlus4,

z => Jal_sig);

GetResult: mux2_32bit

PORT MAP( sel => MemtoReg,

x => Jal_sig,

y => ReadData,

z => Result);

END structural;

Page 52: Report Uts

52UTS EL3043 - Arditto Trianggada / 13209046

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 : beq $s, $t, label

Instruction Set: 0001 00ss ssst tttt iiii iiii iiii iiii

Operasi : 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. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

beq XX XXXX 001 1 0010 0 X

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

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken (0 or 1??)

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Page 53: Report Uts

53UTS EL3043 - Arditto Trianggada / 13209046

2. 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)

else nPC = PC+4

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

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

bne XX XXXX 001 1 0010 0 X

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

Page 54: Report Uts

54UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken (0 or 1??)

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Page 55: Report Uts

55UTS EL3043 - Arditto Trianggada / 13209046

3. Instruksi bltz

Syntax : bltz $s, $t, label

Instruction Set: 0000 01ss ssst tttt iiii iiii iiii iiii

Operasi : 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. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

bltz XX XXXX 001 1 0010 0 X

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

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken (0 or 1??)

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Page 56: Report Uts

56UTS EL3043 - Arditto Trianggada / 13209046

4. Instruksi blez

Syntax : blez $s, $t, label

Instruction Set: 0001 10ss ssst tttt iiii iiii iiii iiii

Operasi : 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. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

blez XX XXXX 001 1 0010 0 X

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

Page 57: Report Uts

57UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken (0 or 1??)

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Page 58: Report Uts

58UTS EL3043 - Arditto Trianggada / 13209046

5. Instruksi bgtz

Syntax : bgtz $s, $t, label

Instruction Set: 0001 11ss ssst tttt iiii iiii iiii iiii

Operasi : 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. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

bgtz XX XXXX 001 1 0010 0 X

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

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken (0 or 1??)

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Page 59: Report Uts

59UTS EL3043 - Arditto Trianggada / 13209046

6. Instruksi j

Syntax : j label

Instruction Set : 0000 10ii iiii iiii iiii iiii iiii iiii

Operasi : nPC = PC+4[31:28] & imm & “00”

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

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

j XX XXXX XXX X XXXX X X

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

Page 60: Report Uts

60UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Sedangkan, pada ALU tidak ada data yang diolah.

7. Instruksi jal

Syntax : jal label

Instruction Set : 0000 11ii iiii iiii iiii iiii iiii iiii

Operasi : nPC = PC+4[31.28] & imm & “00”; $31 = PC+4

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

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

jal XX XXXX XXX X XXXX X X

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

Page 61: Report Uts

61UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal=1

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch_

sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

Sedangkan, pada ALU tidak ada data yang diolah.

8. Instruksi jr

Syntax : jr $s

Instruction Set : 0000 00ss sss0 0000 0000 0000 0000 1000

Operasi : nPC = $s

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

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

jr 00 1000 010 X XXXX 1 0

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

Page 62: Report Uts

62UTS EL3043 - Arditto Trianggada / 13209046

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

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 : jalr $d, $s

Instruction Set : 0000 00ss sss0 0000 1111 1000 0000 1001

Operasi : nPC = $s; $31 = PC+4

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

Instr. Funct[5:0] AluOp[2:0] AluCtrl[4:0] Jr Jalr

jalr 00 1001 010 X XXXX 1 1

Page 63: Report Uts

63UTS EL3043 - Arditto Trianggada / 13209046

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

ImmExt

A RD

Instruction

Memory

+4

A1

A3

WD3

RD2

RD1WE3

A2

CLK

Extend

Register

File

A RD

DataMemory

WD

WE0

1

0

1Instr 25:21

20:16

15:0

5:0

SrcB

20:16

15:11

+

ALUResultReadData

WriteData

SrcA

PCPlus4

BTA

WriteReg

Result

31:26

RegDst

Beq

MemWrite

MemtoReg

RegWrite

Op

Funct

Control

Unit

Zero

BranchTaken

CLK

ALUControl4:0

ALU

0

1

25:0<<2

27:0

31:28

JTA

Jump

BTA

PC

Plu

s4

00

01

0001

4:0

<<2

Bus

Merging

CLK

PC

PCPlus4

ALUControl4:0

Beq

MemWrite

MemtoReg

BranchTaken

Jump

RegDst1:0

ALUSrc1:0

nPC

Zero

Instr 10:6

10

<<16

ALUSrc1:0

ExtOp

ExtOp

Bne

Zero

Bne

LTZ

Bltz

LTZ

Bltz

Jal

Zero

LTZ

Bgtz

Bgtz

01

Jal

10$ra = 1 1111

PCPlus4

0

1

SrcA

SrcA

Jr

Jr

Jalr=1

Jalr

ImmUpper

Jump_label

Branch_label

ReadReg1

ReadReg2

Jr_

sig

Bra

nch

_sig

Bgtz_sig

Beq_sig

Bltz_sig

Bne_sig

Jal_sig

15:0

1 1111