You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.7 KiB

3 years ago
def alu_controller(alu_op,funct7,funct3): #alu_op来自主控制器funct7和funct3来自指令的特定部位 返回alu_ctrl
if alu_op=='00':
opreation='00000' #lw.sw.auipc
elif alu_op=='01':
if funct3=='000':
opreation='00101' #beq
elif funct3=='001':
opreation='00110' #bne
elif funct3=='100':
opreation='00111' #blt
elif funct3=='101':
opreation='01000' #bge
elif funct3=='110':
opreation='01001' #bltu
elif funct3=='111':
opreation='01010' #bgeu
else:
opreation='00000'
elif alu_op=='10':
if funct3=='000':
if funct7=='0100000': #sub
opreation='00001'
else: #add,addi
opreation='00000'
elif funct3=='100':
opreation='01100' #xor,xori
elif funct3=='110':
opreation='00010' #or,ori
elif funct3=='111':
opreation='00011' #and, andi
elif funct3=='010':
opreation='00100' #slt,slti
elif funct3=='001':
opreation='01101' #sll,slli 未存在
elif funct3=='011':
opreation='01110' #sliu,sltiu 未存在
elif funct3=='101':
if funct7=='0100000': #sra,srai
opreation='01111'
else: #srl,srli
opreation='10000'
else:
opreation='00000'
elif alu_op=='11': #jal
opreation='01011'
else:
opreation='00000'
return opreation