郑几方 3 years ago
parent 2e8d21b710
commit cf64f9e6f3

@ -1,38 +1,87 @@
import binandint
from binandint import *
def alu(a, b, alu_ctrl): # a,b为两个运算数alu_ctrl为控制信号返回运算结果result与是否为0 zero
if alu_ctrl == '00000':
pass
elif alu_ctrl == '00001':
pass
elif alu_ctrl == '00010':
pass
elif alu_ctrl == '00011':
pass
elif alu_ctrl == '00100':
pass
elif alu_ctrl == '00101':
pass
elif alu_ctrl == '00110':
pass
elif alu_ctrl == '00111':
pass
elif alu_ctrl == '01000':
pass
signed = a - b
if alu_ctrl == '00000': # add,jalr
alu_result = a + b
elif alu_ctrl == '00001': # sub
alu_result = a - b
elif alu_ctrl == '00010': # or
alu_result = a | b
elif alu_ctrl == '00011': # and
alu_result = a & b
elif alu_ctrl == '00100': # slt
if (signed >= 0):
alu_result = 0
else:
alu_result = 1
elif alu_ctrl == '00101': # beq
if a == b:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '00110': # bne
if a != b:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '00111': # blt
if a < b:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '01000': # bge
if a >= b:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '01001':
pass
if a < 0:
ua = a + 2**32
else:
ua = a
if b < 0:
ub = b + 2**32
else:
ub = b
if ua < ub:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '01010':
pass
if a < 0:
ua = a + 2**32
else:
ua = a
if b < 0:
ub = b + 2**32
else:
ub = b
if ua >= ub:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '01011':
pass
alu_result = 1
elif alu_ctrl == '01100':
pass
alu_result = a ^ b
elif alu_ctrl == '01101':
pass
alu_result = a << b
elif alu_ctrl == '01110':
pass
if a < 0:
ua = a + 2**32
else:
ua = a
if b < 0:
ub = b + 2**32
else:
ub = b
if ua <= ub:
alu_result = 1
else:
alu_result = 0
elif alu_ctrl == '01111':
pass
else:
pass
if a < 0:
ua = a + 2**32
els
Loading…
Cancel
Save