unknown 4 years ago
parent 87310d1cb3
commit 652cf24590

@ -1,36 +1,92 @@
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:
elif alu_ctrl=='01001': alu_result = 0
pass elif alu_ctrl=='00110': #bne
elif alu_ctrl=='01010': if a != b:
pass alu_result = 1
elif alu_ctrl=='01011': else:
pass alu_result = 0
elif alu_ctrl=='01100': elif alu_ctrl=='00111': #blt
pass if a<b:
elif alu_ctrl=='01101': alu_result = 1
pass else:
elif alu_ctrl=='01110': alu_result = 0
pass elif alu_ctrl=='01000': #bge
elif alu_ctrl=='01111': if a>=b:
pass alu_result = 1
else: else:
pass alu_result = 0
elif alu_ctrl=='01001':
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':
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':
alu_result = 1
elif alu_ctrl=='01100':
alu_result = a^b
elif alu_ctrl=='01101':
alu_result=a<<b
elif alu_ctrl=='01110':
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':
if a<0:
ua = a+2**32
else:
ua=a
alu_result=a>>b
elif alu_ctrl=='10000':
alu_result=a>>b
else:
alu_result = 0
return alu_result
Loading…
Cancel
Save