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.

50 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
3 years ago
else:
3 years ago
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'
3 years ago
else:
3 years ago
opreation = '00000'
elif alu_op == '11': # jal
opreation = '01011'
3 years ago
else:
3 years ago
opreation = '00000'
3 years ago
return opreation