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.
|
|
|
|
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
|