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