-
Notifications
You must be signed in to change notification settings - Fork 1
/
contronUnit.py
89 lines (85 loc) · 2.35 KB
/
contronUnit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
class controlUnit:
RegDst = 0
Branch = 0
MemRead = 0
MemtoReg = 0
ALUop = 0
MemWrite = 0
ALUsrc = 0
Regwrite = 0
Junp = 0
muxalu = 0
muxregister = 0
muxwb = 0
muxjump = 0
def __init__(self, instinput):
self.instrution = instinput
self.ALUop = instinput
self.controfill()
self.muxfill()
def controfill(self):
a = self.instrution
if a == "0000" or a == "0001" or a == "0010" or a == "0011" or a == "0100": # Rtype
self.RegDst = 1
self.ALUsrc = 0
self.MemtoReg = 0
self.Regwrite = 1
self.MemRead = 0
self.MemWrite = 0
self.Branch = 0
self.Junp = 0
elif a == "1001": # lw
self.RegDst = 0
self.ALUsrc = 1
self.MemtoReg = 1
self.Regwrite = 1
self.MemRead = 1
self.MemWrite = 0
self.Branch = 0
self.Junp = 0
elif a == "1010": # sw
self.ALUsrc = 1
self.Regwrite = 0
self.MemRead = 0
self.MemWrite = 1
self.Branch = 0
self.Junp = 0
elif a == "1011": # beq
self.ALUsrc = 0
self.Regwrite = 0
self.MemRead = 0
self.MemWrite = 0
self.Branch = 1
self.Junp = 0
elif a == "1101": # jump
self.RegDst = 0
self.ALUsrc = 0
self.MemtoReg = 0
self.Regwrite = 0
self.MemRead = 0
self.MemWrite = 0
self.Branch = 0
self.Junp = 1
elif a == "0101" or a == "0111" or a == "1000": # addi ,slti,ori,lui
self.RegDst = 0
self.ALUsrc = 1
self.MemtoReg = 0
self.Regwrite = 1
self.MemRead = 0
self.MemWrite = 0
self.Branch = 0
self.Junp = 0
elif a == "0110":
self.RegDst = 0
self.ALUsrc = 0
self.MemtoReg = 0
self.Regwrite = 1
self.MemRead = 0
self.MemWrite = 0
self.Branch = 0
self.Junp = 0
def muxfill(self):
self.muxregister = self.RegDst
self.muxalu = self.ALUsrc
self.muxwb = self.MemtoReg
self.muxjump = self.Junp