郑几方 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 def alu(a, b, alu_ctrl): # a,b为两个运算数alu_ctrl为控制信号返回运算结果result与是否为0 zero
if alu_ctrl == '00000': signed = a - b
pass if alu_ctrl == '00000': # add,jalr
elif alu_ctrl == '00001': alu_result = a + b
pass elif alu_ctrl == '00001': # sub
elif alu_ctrl == '00010': alu_result = a - b
pass elif alu_ctrl == '00010': # or
elif alu_ctrl == '00011': alu_result = a | b
pass elif alu_ctrl == '00011': # and
elif alu_ctrl == '00100': alu_result = a & b
pass elif alu_ctrl == '00100': # slt
elif alu_ctrl == '00101': if (signed >= 0):
pass alu_result = 0
elif alu_ctrl == '00110': else:
pass alu_result = 1
elif alu_ctrl == '00111': elif alu_ctrl == '00101': # beq
pass if a == b:
elif alu_ctrl == '01000': alu_result = 1
pass 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': 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': 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': elif alu_ctrl == '01011':
pass alu_result = 1
elif alu_ctrl == '01100': elif alu_ctrl == '01100':
pass alu_result = a ^ b
elif alu_ctrl == '01101': elif alu_ctrl == '01101':
pass alu_result = a << b
elif alu_ctrl == '01110': elif alu_ctrl == '01110':
pass if a < 0:
elif alu_ctrl == '01111': ua = a + 2**32
pass
else: else:
pass 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':
if a < 0:
ua = a + 2**32
els
Loading…
Cancel
Save