diff --git a/src/Core/Controller.sv b/src/Core/Controller.sv index bd3ec4b..96692bb 100644 --- a/src/Core/Controller.sv +++ b/src/Core/Controller.sv @@ -4,6 +4,7 @@ module Controller ( input word_t inst, input logic eq, input logic ltz, + input word_t rt, output Ctrl_t ctrl, output word_t imm, output logic [4:0] sa @@ -28,9 +29,9 @@ module Controller ( imm ); - assign ctrl.BJRJ = (~inst[27] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] | ~inst[31] & ~inst[29] & inst[28]) | inst[27] & ~inst[31] & ~inst[29]) & ~inst[26] | ~inst[31] & ~inst[29] & inst[26]; + assign ctrl.BJRJ = ~inst[26] & (~inst[27] & ~inst[30] & (~inst[28] & ~inst[31] & ~inst[29] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[31] & ~inst[29]) | inst[27] & ~inst[31] & ~inst[29]) | inst[26] & ~inst[31] & ~inst[29]; assign ctrl.B = ~inst[31] & ~inst[29] & (inst[28] | ~inst[27] & inst[26]); - assign ctrl.JR = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2]; + assign ctrl.JR = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[4] & inst[3] & ~inst[2] & ~inst[1]; assign ctrl.J = ~inst[31] & ~inst[29] & ~inst[28] & inst[27]; assign ctrl.BGO = ~inst[26] & (eq | inst[27] & ltz) | inst[26] & (~inst[27] & (~inst[28] & (inst[16] & ~ltz | ~inst[16] & ltz) | inst[28] & ~eq) | inst[27] & ~eq & ~ltz); @@ -40,35 +41,36 @@ module Controller ( assign ctrl.ERET = ~inst[31] & inst[30] & inst[4]; assign ctrl.OFA = ~inst[31] & ~inst[28] & ~inst[27] & ~inst[26] & (~inst[30] & inst[5] & ~inst[3] & ~inst[2] & ~inst[0] | inst[29]); - assign ctrl.ES = (~inst[30] & (~inst[28] & ~inst[27] & ~inst[26] & ((inst[4] & inst[3] & ~inst[2] | ~inst[3] & inst[2]) | inst[5]) | inst[31]) | inst[29]); - assign ctrl.ET = ~inst[27] & ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & (~inst[1] & (~inst[0] & (~inst[3] & ~inst[4] | inst[3] & inst[4]) | inst[4] & inst[3] & inst[0]) | inst[1] & (~inst[4] | inst[3]) | inst[5]) | inst[30] & inst[29]); - assign ctrl.DS = ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] | ~inst[31] & ~inst[29] & inst[28]) | ~inst[31] & ~inst[29] & (inst[28] | ~inst[27]) & inst[26]; - assign ctrl.DT = ~inst[31] & ~inst[29] & inst[28] & ~inst[27]; + assign ctrl.ES = ~inst[30] & (~inst[28] & ~inst[27] & ~inst[26] & (~inst[3] & inst[2] | inst[3] & (inst[4] | inst[1]) | inst[5]) | inst[31]) | inst[29]; + assign ctrl.ET = ~inst[31] & ~inst[27] & ~inst[26] & (~inst[30] & ~inst[29] & ~inst[28] & (~inst[3] & ~inst[4] | inst[3] & inst[4] | inst[5]) | inst[30] & inst[29]); + assign ctrl.DS = ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[4] & inst[3] & ~inst[2] & ~inst[1] | inst[28] & ~inst[29] & ~inst[31]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] | inst[28]); + assign ctrl.DT = ~inst[28] & ~inst[26] & ~inst[30] & ~inst[31] & ~inst[29] & ~inst[27] & inst[3] & inst[1] & ~inst[5] & ~inst[4] | inst[28] & ~inst[29] & ~inst[31] & ~inst[27]; assign ctrl.DP0 = ~inst[31] & (~inst[30] | inst[29] | ~inst[25] | inst[4]) | inst[31] & inst[30]; assign ctrl.DP1 = inst[26] | (~inst[30] & (inst[31] | inst[29] | inst[28] | inst[27] | ~inst[4]) | inst[30] & (~inst[29] & inst[25] | inst[3])); assign ctrl.ECtrl.OP.f_sl = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[3] & ~inst[1]; - assign ctrl.ECtrl.OP.f_sr = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[1]; - assign ctrl.ECtrl.OP.f_add = inst[31] | ~inst[28] & (~inst[26] & ~inst[27] & (inst[29] | ~inst[5] & inst[3] & ~inst[1] | inst[5] & ~inst[3] & ~inst[2]) | inst[26] & (~inst[29] | ~inst[27])); - assign ctrl.ECtrl.OP.f_and = ~inst[31] & (~inst[28] & ~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & ~inst[0] & ~inst[1] | inst[28] & ~inst[27] & ~inst[26]); - assign ctrl.ECtrl.OP.f_or = ~inst[31] & (~inst[28] & ~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & inst[0] | inst[28] & ~inst[27] & inst[26]); - assign ctrl.ECtrl.OP.f_xor = ~inst[31] & (~inst[28] & ~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & ~inst[0] & inst[1] | inst[28] & inst[27]); + assign ctrl.ECtrl.OP.f_sr = ~inst[31] & ~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & ~inst[5] & ~inst[3] & inst[1]; + assign ctrl.ECtrl.OP.f_add = ~inst[28] & (~inst[27] & ~inst[26] & ((~inst[5] & inst[3] & ~inst[1] | inst[5] & ~inst[3] & ~inst[2]) | inst[29]) | inst[26] & (~inst[29] | ~inst[27])) | inst[31]; + assign ctrl.ECtrl.OP.f_and = ~inst[31] & (~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & ~inst[1] & ~inst[0] | inst[28] & ~inst[27] & ~inst[26]); + assign ctrl.ECtrl.OP.f_or = ~inst[31] & (~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & inst[0] | inst[28] & ~inst[27] & inst[26]); + assign ctrl.ECtrl.OP.f_xor = ~inst[31] & (~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & inst[1] & ~inst[0] | inst[28] & inst[27]); assign ctrl.ECtrl.OP.f_slt = ~inst[31] & ~inst[28] & ~inst[26] & (~inst[29] & inst[5] & inst[3] & ~inst[2] & ~inst[0] | inst[27]); - assign ctrl.ECtrl.OP.f_sltu = ~inst[31] & ~inst[28] & (~inst[26] & ~inst[29] & ~inst[27] & inst[5] & inst[3] & ~inst[2] & inst[0] | inst[26] & inst[29] & inst[27]); + assign ctrl.ECtrl.OP.f_sltu = ~inst[31] & ~inst[28] & (~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[3] & ~inst[2] & inst[0] | inst[29] & inst[27] & inst[26]); + assign ctrl.ECtrl.OP.f_mova = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[3] & inst[1]; assign ctrl.ECtrl.OP.alt = ~inst[31] & (~inst[26] & (~inst[29] & inst[1] & (inst[5] | inst[0]) | inst[27]) | inst[26] & inst[29] & inst[27]); - assign ctrl.ECtrl.SA = SA_t'({inst[31] | inst[29] | ~inst[26] & (inst[5] | inst[2]), inst[31] | (~inst[28] & (inst[29] | inst[26] | inst[5] | inst[3] | inst[2]) | inst[28] & (~inst[27] | ~inst[26]))}); + assign ctrl.ECtrl.SA = SA_t'({~inst[26] & ((inst[3] & inst[1] | inst[2]) | inst[5]) | inst[31] | inst[29], (~inst[28] & (inst[29] | inst[26] | inst[5] | inst[3] | inst[2]) | inst[28] & (~inst[27] | ~inst[26])) | inst[31]}); assign ctrl.ECtrl.SB = SB_t'({inst[31] | inst[29], inst[26] | ~inst[5] & inst[3]}); assign ctrl.MCtrl0.HW = ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[4] & (~inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1]; assign ctrl.MCtrl0.LW = ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[4] & (inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1]; - assign ctrl.MCtrl0.HLS = HLS_t'({~inst[27] & ~inst[26] & (~inst[30] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[3] | inst[30] & inst[29]), ~inst[30] & inst[1], inst[0]}); + assign ctrl.MCtrl0.HLS = HLS_t'({(~inst[30] & ~inst[26] & ~inst[27] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[3] | inst[30] & inst[29]), inst[1] & ~inst[30], inst[0]}); assign ctrl.MCtrl0.MAS = MAS_t'({inst[2], inst[30] & ~inst[2] & ~inst[1]}); assign ctrl.MCtrl0.C0D = inst[15:11]; assign ctrl.MCtrl0.C0W = ~inst[31] & inst[30] & ~inst[29] & inst[23] & ~inst[3]; assign ctrl.MCtrl0.SEL = inst[2:0]; - assign ctrl.MCtrl0.RS0 = RS0_t'({~inst[30] & (inst[29] | inst[26] | ~inst[4]), inst[30], ~inst[29] & (inst[30] | ~inst[1])}); + assign ctrl.MCtrl0.RS0 = RS0_t'({~inst[30] & (~inst[4] | inst[26] | inst[29]), inst[30], ~inst[29] & (~inst[1] | inst[30])}); assign ctrl.MCtrl1.MR = inst[31] & ~inst[30]; assign ctrl.MCtrl1.MWR = inst[29]; @@ -81,6 +83,10 @@ module Controller ( assign ctrl.MCtrl1.TLBP = ~inst[31] & inst[30] & ~inst[4] & inst[3]; assign ctrl.MCtrl1.CACHE_OP = CacheOp_t'({inst[29] & inst[28] & inst[26] & inst[16], inst[29] & inst[28] & inst[26] & ~inst[20], inst[29] & inst[28] & inst[26] & ~inst[18] & (inst[20] | inst[19] | ~inst[16])}); - assign ctrl.WCtrl.RW = ctrl.RD != 5'b00000 & (~inst[30] & (~inst[27] & (~inst[26] & (~inst[31] & (~inst[28] & (~inst[3] & (~inst[4] | ~inst[0]) | inst[3] & (~inst[4] & ~inst[2] & inst[0] | inst[5])) | inst[29]) | inst[31] & ~inst[29]) | inst[26] & (~inst[31] & (~inst[28] & inst[20] | inst[29]) | inst[31] & ~inst[29])) | inst[27] & (~inst[26] & (~inst[31] & inst[29] | inst[31] & ~inst[29]) | inst[26] & (~inst[31] & (~inst[28] | inst[29]) | inst[31] & ~inst[29]))) | inst[30] & ~inst[31] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1])); + logic mov, rw, eqz; + assign mov = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] & inst[1]; + assign rw = (~inst[30] & (~inst[27] & (~inst[26] & (~inst[31] & (~inst[28] & (~inst[4] & (~inst[3] | ~inst[2] & (inst[1] | inst[0])) | inst[4] & ~inst[3] & ~inst[0]) | inst[29]) | inst[31] & ~inst[29]) | inst[26] & (~inst[31] & (~inst[28] & inst[20] | inst[29]) | inst[31] & ~inst[29])) | inst[27] & (~inst[31] & (~inst[28] & inst[26] | inst[29]) | inst[31] & ~inst[29])) | ~inst[31] & inst[30] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1])); + assign eqz = rt == 32'h0; + assign ctrl.WCtrl.RW = ctrl.RD != 5'b00000 & (~mov | ~inst[0] & eqz | inst[0] & ~eqz) & rw; endmodule diff --git a/src/Core/Datapath.sv b/src/Core/Datapath.sv index ad52678..40a2bd1 100644 --- a/src/Core/Datapath.sv +++ b/src/Core/Datapath.sv @@ -432,6 +432,7 @@ module Datapath ( .inst(D.IA_inst), .eq (D_IA_ForwardS == D_IA_ForwardT), .ltz (D_IA_ForwardS[31]), + .rt (D_IA_ForwardT), .ctrl(D.IA), .imm (D.IA_imm), .sa (D.IA_sa) @@ -440,6 +441,7 @@ module Datapath ( .inst(D.IB_inst), .eq (D_IB_ForwardS == D_IB_ForwardT), .ltz (D_IB_ForwardS[31]), + .rt (D_IB_ForwardT), .ctrl(D.IB), .imm (D.IB_imm), .sa (D.IB_sa) diff --git a/src/Core/Gadgets.sv b/src/Core/Gadgets.sv index 9288315..619dbcd 100644 --- a/src/Core/Gadgets.sv +++ b/src/Core/Gadgets.sv @@ -26,6 +26,8 @@ module instr_valid ( 32'b000000???????????????00000000100: valid = 1'b1; // SLLV 32'b000000???????????????00000000110: valid = 1'b1; // SRLV 32'b000000???????????????00000000111: valid = 1'b1; // SRAV + 32'b000000???????????????00000001010: valid = 1'b1; // MOVZ + 32'b000000???????????????00000001011: valid = 1'b1; // MOVN 32'b000000?????000000000000000001000: valid = 1'b1; // JR 32'b000000?????00000?????00000001001: valid = 1'b1; // JALR 32'b000000????????????????????001100: valid = 1'b1; // SYSCALL diff --git a/tools/ctrl_maker.py b/tools/ctrl_maker.py index 2f1fc48..c7fd510 100644 --- a/tools/ctrl_maker.py +++ b/tools/ctrl_maker.py @@ -1,4 +1,4 @@ -with open('clo.txt') as f: +with open('wctrl.txt') as f: lines = f.readlines() title = lines[0].split() items = [x.split() for x in lines[1:]] diff --git a/tools/decoder.py b/tools/decoder.py index d369363..4441b71 100644 --- a/tools/decoder.py +++ b/tools/decoder.py @@ -1,77 +1,79 @@ table = [ - ('000000000000000000000?????001111', 'SYNC'), + # ('000000000000000000000?????001111', 'SYNC'), ('00000000000???????????????000000', 'SLL'), - ('00000000000???????????????000010', 'SRL'), - ('00000000000???????????????000011', 'SRA'), - ('000000???????????????00000000100', 'SLLV'), - ('000000???????????????00000000110', 'SRLV'), - ('000000???????????????00000000111', 'SRAV'), - ('000000?????000000000000000001000', 'JR'), - ('000000?????00000?????00000001001', 'JALR'), - ('000000????????????????????001100', 'SYSCALL'), - ('000000????????????????????001101', 'BREAK'), - ('0000000000000000?????00000010000', 'MFHI'), - ('000000?????000000000000000010001', 'MTHI'), - ('0000000000000000?????00000010010', 'MFLO'), - ('000000?????000000000000000010011', 'MTLO'), - ('000000??????????0000000000011000', 'MULT'), - ('000000??????????0000000000011001', 'MULTU'), - ('000000??????????0000000000011010', 'DIV'), - ('000000??????????0000000000011011', 'DIVU'), - ('000000???????????????00000100000', 'ADD'), - ('000000???????????????00000100001', 'ADDU'), - ('000000???????????????00000100010', 'SUB'), - ('000000???????????????00000100011', 'SUBU'), - ('000000???????????????00000100100', 'AND'), - ('000000???????????????00000100101', 'OR'), - ('000000???????????????00000100110', 'XOR'), - ('000000???????????????00000100111', 'NOR'), - ('000000???????????????00000101010', 'SLT'), - ('000000???????????????00000101011', 'SLTU'), - ('000001?????00000????????????????', 'BLTZ'), - ('000001?????10000????????????????', 'BLTZAL'), - ('000001?????00001????????????????', 'BGEZ'), - ('000001?????10001????????????????', 'BGEZAL'), - ('000010??????????????????????????', 'J'), - ('000011??????????????????????????', 'JAL'), - ('000100??????????????????????????', 'BEQ'), - ('000101??????????????????????????', 'BNE'), - ('000110?????00000????????????????', 'BLEZ'), - ('000111?????00000????????????????', 'BGTZ'), - ('001000??????????????????????????', 'ADDI'), - ('001001??????????????????????????', 'ADDIU'), - ('001010??????????????????????????', 'SLTI'), - ('001011??????????????????????????', 'SLTIU'), - ('001100??????????????????????????', 'ANDI'), - ('001101??????????????????????????', 'ORI'), - ('001110??????????????????????????', 'XORI'), - ('00111100000?????????????????????', 'LUI'), - ('01000000000??????????00000000???', 'MFC0'), - ('01000000100??????????00000000???', 'MTC0'), - ('01000010000000000000000000000001', 'TLBR'), - ('01000010000000000000000000000010', 'TLBWI'), - ('01000010000000000000000000000110', 'TLBWR'), - ('01000010000000000000000000001000', 'TLBP'), - ('01000010000000000000000000011000', 'ERET'), - ('011100??????????0000000000000000', 'MADD'), - ('011100??????????0000000000000001', 'MADDU'), - ('011100??????????0000000000000100', 'MSUB'), - ('011100??????????0000000000000101', 'MSUBU'), - ('011100???????????????00000000010', 'MUL'), - ('100000??????????????????????????', 'LB'), - ('100001??????????????????????????', 'LH'), - ('100010??????????????????????????', 'LWL'), - ('100011??????????????????????????', 'LW'), - ('100100??????????????????????????', 'LBU'), - ('100101??????????????????????????', 'LHU'), - ('100110??????????????????????????', 'LWR'), - ('101000??????????????????????????', 'SB'), - ('101001??????????????????????????', 'SH'), - ('101010??????????????????????????', 'SWL'), - ('101011??????????????????????????', 'SW'), - ('101110??????????????????????????', 'SWR'), - ('101111??????????????????????????', 'CACHE'), - ('110011??????????????????????????', 'PREF'), + # ('00000000000???????????????000010', 'SRL'), + # ('00000000000???????????????000011', 'SRA'), + # ('000000???????????????00000000100', 'SLLV'), + # ('000000???????????????00000000110', 'SRLV'), + # ('000000???????????????00000000111', 'SRAV'), + ('000000???????????????00000001010', 'MOVZ'), + ('000000???????????????00000001011', 'MOVN'), + # ('000000?????000000000000000001000', 'JR'), + # ('000000?????00000?????00000001001', 'JALR'), + # ('000000????????????????????001100', 'SYSCALL'), + # ('000000????????????????????001101', 'BREAK'), + # ('0000000000000000?????00000010000', 'MFHI'), + # ('000000?????000000000000000010001', 'MTHI'), + # ('0000000000000000?????00000010010', 'MFLO'), + # ('000000?????000000000000000010011', 'MTLO'), + # ('000000??????????0000000000011000', 'MULT'), + # ('000000??????????0000000000011001', 'MULTU'), + # ('000000??????????0000000000011010', 'DIV'), + # ('000000??????????0000000000011011', 'DIVU'), + # ('000000???????????????00000100000', 'ADD'), + # ('000000???????????????00000100001', 'ADDU'), + # ('000000???????????????00000100010', 'SUB'), + # ('000000???????????????00000100011', 'SUBU'), + # ('000000???????????????00000100100', 'AND'), + # ('000000???????????????00000100101', 'OR'), + # ('000000???????????????00000100110', 'XOR'), + # ('000000???????????????00000100111', 'NOR'), + # ('000000???????????????00000101010', 'SLT'), + # ('000000???????????????00000101011', 'SLTU'), + # ('000001?????00000????????????????', 'BLTZ'), + # ('000001?????10000????????????????', 'BLTZAL'), + # ('000001?????00001????????????????', 'BGEZ'), + # ('000001?????10001????????????????', 'BGEZAL'), + # ('000010??????????????????????????', 'J'), + # ('000011??????????????????????????', 'JAL'), + # ('000100??????????????????????????', 'BEQ'), + # ('000101??????????????????????????', 'BNE'), + # ('000110?????00000????????????????', 'BLEZ'), + # ('000111?????00000????????????????', 'BGTZ'), + # ('001000??????????????????????????', 'ADDI'), + # ('001001??????????????????????????', 'ADDIU'), + # ('001010??????????????????????????', 'SLTI'), + # ('001011??????????????????????????', 'SLTIU'), + # ('001100??????????????????????????', 'ANDI'), + # ('001101??????????????????????????', 'ORI'), + # ('001110??????????????????????????', 'XORI'), + # ('00111100000?????????????????????', 'LUI'), + # ('01000000000??????????00000000???', 'MFC0'), + # ('01000000100??????????00000000???', 'MTC0'), + # ('01000010000000000000000000000001', 'TLBR'), + # ('01000010000000000000000000000010', 'TLBWI'), + # ('01000010000000000000000000000110', 'TLBWR'), + # ('01000010000000000000000000001000', 'TLBP'), + # ('01000010000000000000000000011000', 'ERET'), + # ('011100??????????0000000000000000', 'MADD'), + # ('011100??????????0000000000000001', 'MADDU'), + # ('011100??????????0000000000000100', 'MSUB'), + # ('011100??????????0000000000000101', 'MSUBU'), + # ('011100???????????????00000000010', 'MUL'), + # ('100000??????????????????????????', 'LB'), + # ('100001??????????????????????????', 'LH'), + # ('100010??????????????????????????', 'LWL'), + # ('100011??????????????????????????', 'LW'), + # ('100100??????????????????????????', 'LBU'), + # ('100101??????????????????????????', 'LHU'), + # ('100110??????????????????????????', 'LWR'), + # ('101000??????????????????????????', 'SB'), + # ('101001??????????????????????????', 'SH'), + # ('101010??????????????????????????', 'SWL'), + # ('101011??????????????????????????', 'SW'), + # ('101110??????????????????????????', 'SWR'), + # ('101111??????????????????????????', 'CACHE'), + # ('110011??????????????????????????', 'PREF'), ] class Boolean: @@ -95,9 +97,9 @@ for inst, name in table: print('=====', name, '=====') ctrl = {} - ctrl['BJRJ'] = (~inst[27] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] | ~inst[31] & ~inst[29] & inst[28]) | inst[27] & ~inst[31] & ~inst[29]) & ~inst[26] | ~inst[31] & ~inst[29] & inst[26] + ctrl['BJRJ'] = ~inst[26] & (~inst[27] & ~inst[30] & (~inst[28] & ~inst[31] & ~inst[29] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[31] & ~inst[29]) | inst[27] & ~inst[31] & ~inst[29]) | inst[26] & ~inst[31] & ~inst[29] ctrl['B'] = ~inst[31] & ~inst[29] & (inst[28] | ~inst[27] & inst[26]) - ctrl['JR'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] + ctrl['JR'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[4] & inst[3] & ~inst[2] & ~inst[1] ctrl['J'] = ~inst[31] & ~inst[29] & ~inst[28] & inst[27] ctrl['PRV'] = ~inst[31] & inst[30] & ~inst[29] @@ -107,34 +109,35 @@ for inst, name in table: ctrl['ERET'] = ~inst[31] & inst[30] & inst[4] ctrl['OFA'] = ~inst[31] & ~inst[28] & ~inst[27] & ~inst[26] & (~inst[30] & inst[5] & ~inst[3] & ~inst[2] & ~inst[0] | inst[29]) - ctrl['ES'] = (~inst[30] & (~inst[28] & ~inst[27] & ~inst[26] & ((inst[4] & inst[3] & ~inst[2] | ~inst[3] & inst[2]) | inst[5]) | inst[31]) | inst[29]) - ctrl['ET'] = ~inst[27] & ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & (~inst[1] & (~inst[0] & (~inst[3] & ~inst[4] | inst[3] & inst[4]) | inst[4] & inst[3] & inst[0]) | inst[1] & (~inst[4] | inst[3]) | inst[5]) | inst[30] & inst[29]) - ctrl['DS'] = ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] | ~inst[31] & ~inst[29] & inst[28]) | ~inst[31] & ~inst[29] & (inst[28] | ~inst[27]) & inst[26] - ctrl['DT'] = ~inst[31] & ~inst[29] & inst[28] & ~inst[27] + ctrl['ES'] = ~inst[30] & (~inst[28] & ~inst[27] & ~inst[26] & (~inst[3] & inst[2] | inst[3] & (inst[4] | inst[1]) | inst[5]) | inst[31]) | inst[29] + ctrl['ET'] = ~inst[31] & ~inst[27] & ~inst[26] & (~inst[30] & ~inst[29] & ~inst[28] & (~inst[3] & ~inst[4] | inst[3] & inst[4] | inst[5]) | inst[30] & inst[29]) + ctrl['DS'] = ~inst[26] & (~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[4] & inst[3] & ~inst[2] & ~inst[1] | inst[28] & ~inst[29] & ~inst[31]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] | inst[28]) + ctrl['DT'] = ~inst[28] & ~inst[26] & ~inst[30] & ~inst[31] & ~inst[29] & ~inst[27] & inst[3] & inst[1] & ~inst[5] & ~inst[4] | inst[28] & ~inst[29] & ~inst[31] & ~inst[27] ctrl['DP0'] = ~inst[31] & (~inst[30] | inst[29] | ~inst[25] | inst[4]) | inst[31] & inst[30] ctrl['DP1'] = inst[26] | (~inst[30] & (inst[31] | inst[29] | inst[28] | inst[27] | ~inst[4]) | inst[30] & (~inst[29] & inst[25] | inst[3])) ctrl['ECtrl_OP_f_sl'] = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[3] & ~inst[1] - ctrl['ECtrl_OP_f_sr'] = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[1] - ctrl['ECtrl_OP_f_add'] = inst[31] | ~inst[28] & (~inst[26] & ~inst[27] & (inst[29] | ~inst[5] & inst[3] & ~inst[1] | inst[5] & ~inst[3] & ~inst[2]) | inst[26] & (~inst[29] | ~inst[27])) - ctrl['ECtrl_OP_f_and'] = ~inst[31] & (~inst[28] & ~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & ~inst[0] & ~inst[1] | inst[28] & ~inst[27] & ~inst[26]) - ctrl['ECtrl_OP_f_or'] = ~inst[31] & (~inst[28] & ~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & inst[0] | inst[28] & ~inst[27] & inst[26]) - ctrl['ECtrl_OP_f_xor'] = ~inst[31] & (~inst[28] & ~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & ~inst[0] & inst[1] | inst[28] & inst[27]) + ctrl['ECtrl_OP_f_sr'] = ~inst[31] & ~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & ~inst[5] & ~inst[3] & inst[1] + ctrl['ECtrl_OP_f_add'] = ~inst[28] & (~inst[27] & ~inst[26] & ((~inst[5] & inst[3] & ~inst[1] | inst[5] & ~inst[3] & ~inst[2]) | inst[29]) | inst[26] & (~inst[29] | ~inst[27])) | inst[31] + ctrl['ECtrl_OP_f_and'] = ~inst[31] & (~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & ~inst[1] & ~inst[0] | inst[28] & ~inst[27] & ~inst[26]) + ctrl['ECtrl_OP_f_or'] = ~inst[31] & (~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & inst[0] | inst[28] & ~inst[27] & inst[26]) + ctrl['ECtrl_OP_f_xor'] = ~inst[31] & (~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[5] & inst[2] & inst[1] & ~inst[0] | inst[28] & inst[27]) ctrl['ECtrl_OP_f_slt'] = ~inst[31] & ~inst[28] & ~inst[26] & (~inst[29] & inst[5] & inst[3] & ~inst[2] & ~inst[0] | inst[27]) - ctrl['ECtrl_OP_f_sltu'] = ~inst[31] & ~inst[28] & (~inst[26] & ~inst[29] & ~inst[27] & inst[5] & inst[3] & ~inst[2] & inst[0] | inst[26] & inst[29] & inst[27]) + ctrl['ECtrl_OP_f_sltu'] = ~inst[31] & ~inst[28] & (~inst[29] & ~inst[27] & ~inst[26] & inst[5] & inst[3] & ~inst[2] & inst[0] | inst[29] & inst[27] & inst[26]) + ctrl['ECtrl_OP_f_mova'] = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[3] & inst[1] ctrl['ECtrl_OP_alt'] = ~inst[31] & (~inst[26] & (~inst[29] & inst[1] & (inst[5] | inst[0]) | inst[27]) | inst[26] & inst[29] & inst[27]) - ctrl['ECtrl_SA'] = (inst[31] | inst[29] | ~inst[26] & (inst[5] | inst[2]), inst[31] | (~inst[28] & (inst[29] | inst[26] | inst[5] | inst[3] | inst[2]) | inst[28] & (~inst[27] | ~inst[26]))) + ctrl['ECtrl_SA'] = (~inst[26] & ((inst[3] & inst[1] | inst[2]) | inst[5]) | inst[31] | inst[29], (~inst[28] & (inst[29] | inst[26] | inst[5] | inst[3] | inst[2]) | inst[28] & (~inst[27] | ~inst[26])) | inst[31]) ctrl['ECtrl_SB'] = (inst[31] | inst[29], inst[26] | ~inst[5] & inst[3]) ctrl['imm'] = (~inst[31] & inst[28] & inst[27] & inst[26], inst[31] | ~inst[28]) ctrl['MCtrl0_HW'] = ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[4] & (~inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1] ctrl['MCtrl0_LW'] = ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[4] & (inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1] - ctrl['MCtrl0_HLS'] = (~inst[27] & ~inst[26] & (~inst[30] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[3] | inst[30] & inst[29]), ~inst[30] & inst[1], inst[0]) + ctrl['MCtrl0_HLS'] = (~inst[30] & ~inst[26] & ~inst[27] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[3] | inst[30] & inst[29]), inst[1] & ~inst[30], inst[0] ctrl['MCtrl0_MAS'] = (inst[2], inst[30] & ~inst[2] & ~inst[1]) ctrl['MCtrl0_C0W'] = ~inst[31] & inst[30] & ~inst[29] & inst[23] & ~inst[3] - ctrl['MCtrl0_RS0'] = (ctrl['DP1'], inst[30], ~inst[29] & (inst[30] | ~inst[1])) + ctrl['MCtrl0_RS0'] = (~inst[30] & (~inst[4] | inst[26] | inst[29]), inst[30], ~inst[29] & (~inst[1] | inst[30])) ctrl['MCtrl1_MR'] = inst[31] & ~inst[30] ctrl['MCtrl1_MWR'] = inst[29] @@ -146,6 +149,7 @@ for inst, name in table: ctrl['MCtrl1_TLBP'] = ~inst[31] & inst[30] & ~inst[4] & inst[3] ctrl['MCtrl1_CACHE_OP'] = (inst[29] & inst[28] & inst[26] & inst[16], inst[29] & inst[28] & inst[26] & ~inst[20], inst[29] & inst[28] & inst[26] & ~inst[18] & (inst[20] | inst[19] | ~inst[16])) - ctrl['WCtrl_RW'] = ~inst[30] & (~inst[27] & (~inst[26] & (~inst[31] & (~inst[28] & (~inst[3] & (~inst[4] | ~inst[0]) | inst[3] & (~inst[4] & ~inst[2] & inst[0] | inst[5])) | inst[29]) | inst[31] & ~inst[29]) | inst[26] & (~inst[31] & (~inst[28] & inst[20] | inst[29]) | inst[31] & ~inst[29])) | inst[27] & (~inst[26] & (~inst[31] & inst[29] | inst[31] & ~inst[29]) | inst[26] & (~inst[31] & (~inst[28] | inst[29]) | inst[31] & ~inst[29]))) | inst[30] & ~inst[31] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1]) - ctrl['RD'] = (~inst[29] & inst[30] | inst[29] & ~inst[30] | inst[31], inst[26]) + ctrl['WCtrl_MOV'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & ~inst[4] & inst[3] & ~inst[2] & inst[1] + ctrl['WCtrl_RW'] = (~inst[30] & (~inst[27] & (~inst[26] & (~inst[31] & (~inst[28] & (~inst[4] & (~inst[3] | ~inst[2] & (inst[1] | inst[0])) | inst[4] & ~inst[3] & ~inst[0]) | inst[29]) | inst[31] & ~inst[29]) | inst[26] & (~inst[31] & (~inst[28] & inst[20] | inst[29]) | inst[31] & ~inst[29])) | inst[27] & (~inst[31] & (~inst[28] & inst[26] | inst[29]) | inst[31] & ~inst[29])) | ~inst[31] & inst[30] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1])) + ctrl['RD'] = (~inst[29] & inst[30] | inst[29] & ~inst[30] | inst[31], inst[26]) print(ctrl) diff --git a/tools/ectrl.txt b/tools/ectrl.txt index 71d125c..74888ac 100644 --- a/tools/ectrl.txt +++ b/tools/ectrl.txt @@ -6,6 +6,8 @@ 32'b000000???????????????00000000100 SL ? RS 1 1 RT 0 0 ? ? ? // SLLV 32'b000000???????????????00000000110 SR 0 RS 1 1 RT 0 0 ? ? ? // SRLV 32'b000000???????????????00000000111 SR 1 RS 1 1 RT 0 0 ? ? ? // SRAV +32'b000000???????????????00000001010 MOVA ? RS 1 1 ? ? ? ? ? ? // MOVZ +32'b000000???????????????00000001011 MOVA ? RS 1 1 ? ? ? ? ? ? // MOVN 32'b000000?????000000000000000001000 ? ? ? ? ? ? ? ? ? ? ? // JR 32'b000000?????00000?????00000001001 ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // JALR 32'b000000????????????????????001100 ? ? ? ? ? ? ? ? ? ? ? // SYSCALL diff --git a/tools/global.txt b/tools/global.txt index 1c41b80..ee41f87 100644 --- a/tools/global.txt +++ b/tools/global.txt @@ -6,6 +6,8 @@ 32'b000000???????????????00000000100 0 0 0 0 1 1 0 0 1 1 // SLLV 32'b000000???????????????00000000110 0 0 0 0 1 1 0 0 1 1 // SRLV 32'b000000???????????????00000000111 0 0 0 0 1 1 0 0 1 1 // SRAV +32'b000000???????????????00000001010 0 0 0 0 1 0 0 1 1 1 // MOVZ +32'b000000???????????????00000001011 0 0 0 0 1 0 0 1 1 1 // MOVN 32'b000000?????000000000000000001000 0 0 0 0 0 0 1 0 1 1 // JR 32'b000000?????00000?????00000001001 0 0 0 0 0 0 1 0 1 1 // JALR 32'b000000????????????????????001100 1 0 0 0 0 0 0 0 1 1 // SYSCALL diff --git a/tools/mctrl0.txt b/tools/mctrl0.txt index fc9f549..b5e0c15 100644 --- a/tools/mctrl0.txt +++ b/tools/mctrl0.txt @@ -6,6 +6,8 @@ 32'b000000???????????????00000000100 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SLLV 32'b000000???????????????00000000110 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SRLV 32'b000000???????????????00000000111 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SRAV +32'b000000???????????????00000001010 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // MOVZ +32'b000000???????????????00000001011 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // MOVN 32'b000000?????000000000000000001000 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // JR 32'b000000?????00000?????00000001001 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // JALR 32'b000000????????????????????001100 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // SYSCALL diff --git a/tools/mctrl1.txt b/tools/mctrl1.txt index 6111647..2cde4e0 100644 --- a/tools/mctrl1.txt +++ b/tools/mctrl1.txt @@ -6,6 +6,8 @@ 32'b000000???????????????00000000100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLLV 32'b000000???????????????00000000110 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SRLV 32'b000000???????????????00000000111 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SRAV +32'b000000???????????????00000001010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // MOVZ +32'b000000???????????????00000001011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // MOVN 32'b000000?????000000000000000001000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JR 32'b000000?????00000?????00000001001 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JALR 32'b000000????????????????????001100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SYSCALL diff --git a/tools/pcs.txt b/tools/pcs.txt index c03017f..6685032 100644 --- a/tools/pcs.txt +++ b/tools/pcs.txt @@ -6,6 +6,8 @@ 32'b000000???????????????00000000100 0 0 0 0 // SLLV 32'b000000???????????????00000000110 0 0 0 0 // SRLV 32'b000000???????????????00000000111 0 0 0 0 // SRAV +32'b000000???????????????00000001010 0 0 0 0 // MOVZ +32'b000000???????????????00000001011 0 0 0 0 // MOVN 32'b000000?????000000000000000001000 1 0 1 0 // JR 32'b000000?????00000?????00000001001 1 0 1 0 // JALR 32'b000000????????????????????001100 0 0 0 0 // SYSCALL diff --git a/tools/privilege.txt b/tools/privilege.txt index 0c86eb6..200ca0e 100644 --- a/tools/privilege.txt +++ b/tools/privilege.txt @@ -6,6 +6,8 @@ 32'b000000???????????????00000000100 0 // SLLV 32'b000000???????????????00000000110 0 // SRLV 32'b000000???????????????00000000111 0 // SRAV +32'b000000???????????????00000001010 0 // MOVZ +32'b000000???????????????00000001011 0 // MOVN 32'b000000?????000000000000000001000 0 // JR 32'b000000?????00000?????00000001001 0 // JALR 32'b000000????????????????????001100 0 // SYSCALL diff --git a/tools/wctrl.txt b/tools/wctrl.txt index cabb946..7c6c84f 100644 --- a/tools/wctrl.txt +++ b/tools/wctrl.txt @@ -1,74 +1,76 @@ -////-------------------------------- RW RD RD1 RD0 -32'b000000000000000000000?????001111 0 ? ? ? // SYNC (NOP) -32'b00000000000???????????????000000 1 RD 0 0 // SLL -32'b00000000000???????????????000010 1 RD 0 0 // SRL -32'b00000000000???????????????000011 1 RD 0 0 // SRA -32'b000000???????????????00000000100 1 RD 0 0 // SLLV -32'b000000???????????????00000000110 1 RD 0 0 // SRLV -32'b000000???????????????00000000111 1 RD 0 0 // SRAV -32'b000000?????000000000000000001000 0 ? ? ? // JR -32'b000000?????00000?????00000001001 1 RD 0 0 // JALR -32'b000000????????????????????001100 0 ? ? ? // SYSCALL -32'b000000????????????????????001101 0 ? ? ? // BREAK -32'b0000000000000000?????00000010000 1 RD 0 0 // MFHI -32'b000000?????000000000000000010001 0 ? ? ? // MTHI -32'b0000000000000000?????00000010010 1 RD 0 0 // MFLO -32'b000000?????000000000000000010011 0 ? ? ? // MTLO -32'b000000??????????0000000000011000 0 ? ? ? // MULT -32'b000000??????????0000000000011001 0 ? ? ? // MULTU -32'b000000??????????0000000000011010 0 ? ? ? // DIV -32'b000000??????????0000000000011011 0 ? ? ? // DIVU -32'b000000???????????????00000100000 1 RD 0 0 // ADD -32'b000000???????????????00000100001 1 RD 0 0 // ADDU -32'b000000???????????????00000100010 1 RD 0 0 // SUB -32'b000000???????????????00000100011 1 RD 0 0 // SUBU -32'b000000???????????????00000100100 1 RD 0 0 // AND -32'b000000???????????????00000100101 1 RD 0 0 // OR -32'b000000???????????????00000100110 1 RD 0 0 // XOR -32'b000000???????????????00000100111 1 RD 0 0 // NOR -32'b000000???????????????00000101010 1 RD 0 0 // SLT -32'b000000???????????????00000101011 1 RD 0 0 // SLTU -32'b000001?????00000???????????????? 0 ? ? ? // BLTZ -32'b000001?????10000???????????????? 1 31 0 1 // BLTZAL -32'b000001?????00001???????????????? 0 ? ? ? // BGEZ -32'b000001?????10001???????????????? 1 31 0 1 // BGEZAL -32'b000010?????????????????????????? 0 ? ? ? // J -32'b000011?????????????????????????? 1 31 0 1 // JAL -32'b000100?????????????????????????? 0 ? ? ? // BEQ -32'b000101?????????????????????????? 0 ? ? ? // BNE -32'b000110?????00000???????????????? 0 ? ? ? // BLEZ -32'b000111?????00000???????????????? 0 ? ? ? // BGTZ -32'b001000?????????????????????????? 1 RT 1 ? // ADDI -32'b001001?????????????????????????? 1 RT 1 ? // ADDIU -32'b001010?????????????????????????? 1 RT 1 ? // SLTI -32'b001011?????????????????????????? 1 RT 1 ? // SLTIU -32'b001100?????????????????????????? 1 RT 1 ? // ANDI -32'b001101?????????????????????????? 1 RT 1 ? // ORI -32'b001110?????????????????????????? 1 RT 1 ? // XORI -32'b00111100000????????????????????? 1 RT 1 ? // LUI -32'b01000000000??????????00000000??? 1 RT 1 ? // MFC0 -32'b01000000100??????????00000000??? 0 ? ? ? // MTC0 -32'b01000010000000000000000000000001 0 ? ? ? // TLBR -32'b01000010000000000000000000000010 0 ? ? ? // TLBWI -32'b01000010000000000000000000000110 0 ? ? ? // TLBWR -32'b01000010000000000000000000001000 0 ? ? ? // TLBP -32'b01000010000000000000000000011000 0 ? ? ? // ERET -32'b011100??????????0000000000000000 0 ? ? ? // MADD -32'b011100??????????0000000000000001 0 ? ? ? // MADDU -32'b011100??????????0000000000000100 0 ? ? ? // MSUB -32'b011100??????????0000000000000101 0 ? ? ? // MSUBU -32'b011100???????????????00000000010 1 RD 0 0 // MUL -32'b100000?????????????????????????? 1 RT 1 ? // LB -32'b100001?????????????????????????? 1 RT 1 ? // LH -32'h100010?????????????????????????? 1 RT 1 ? // LWL -32'b100011?????????????????????????? 1 RT 1 ? // LW -32'b100100?????????????????????????? 1 RT 1 ? // LBU -32'b100101?????????????????????????? 1 RT 1 ? // LHU -32'h100110?????????????????????????? 1 RT 1 ? // LWR -32'b101000?????????????????????????? 0 ? ? ? // SB -32'b101001?????????????????????????? 0 ? ? ? // SH -32'b101010?????????????????????????? 0 ? ? ? // SWL -32'b101011?????????????????????????? 0 ? ? ? // SW -32'b101110?????????????????????????? 0 ? ? ? // SWR -32'b101111?????????????????????????? 0 ? ? ? // CACHE -32'b110011?????????????????????????? 0 ? ? ? // PREF (NOP) \ No newline at end of file +////-------------------------------- MOV RW RD RD1 RD0 +32'b000000000000000000000?????001111 0 0 ? ? ? // SYNC (NOP) +32'b00000000000???????????????000000 0 1 RD 0 0 // SLL +32'b00000000000???????????????000010 0 1 RD 0 0 // SRL +32'b00000000000???????????????000011 0 1 RD 0 0 // SRA +32'b000000???????????????00000000100 0 1 RD 0 0 // SLLV +32'b000000???????????????00000000110 0 1 RD 0 0 // SRLV +32'b000000???????????????00000000111 0 1 RD 0 0 // SRAV +32'b000000???????????????00000001010 1 1 RD 0 0 // MOVZ +32'b000000???????????????00000001011 1 1 RD 0 0 // MOVN +32'b000000?????000000000000000001000 0 0 ? ? ? // JR +32'b000000?????00000?????00000001001 0 1 RD 0 0 // JALR +32'b000000????????????????????001100 0 0 ? ? ? // SYSCALL +32'b000000????????????????????001101 0 0 ? ? ? // BREAK +32'b0000000000000000?????00000010000 0 1 RD 0 0 // MFHI +32'b000000?????000000000000000010001 0 0 ? ? ? // MTHI +32'b0000000000000000?????00000010010 0 1 RD 0 0 // MFLO +32'b000000?????000000000000000010011 0 0 ? ? ? // MTLO +32'b000000??????????0000000000011000 0 0 ? ? ? // MULT +32'b000000??????????0000000000011001 0 0 ? ? ? // MULTU +32'b000000??????????0000000000011010 0 0 ? ? ? // DIV +32'b000000??????????0000000000011011 0 0 ? ? ? // DIVU +32'b000000???????????????00000100000 0 1 RD 0 0 // ADD +32'b000000???????????????00000100001 0 1 RD 0 0 // ADDU +32'b000000???????????????00000100010 0 1 RD 0 0 // SUB +32'b000000???????????????00000100011 0 1 RD 0 0 // SUBU +32'b000000???????????????00000100100 0 1 RD 0 0 // AND +32'b000000???????????????00000100101 0 1 RD 0 0 // OR +32'b000000???????????????00000100110 0 1 RD 0 0 // XOR +32'b000000???????????????00000100111 0 1 RD 0 0 // NOR +32'b000000???????????????00000101010 0 1 RD 0 0 // SLT +32'b000000???????????????00000101011 0 1 RD 0 0 // SLTU +32'b000001?????00000???????????????? 0 0 ? ? ? // BLTZ +32'b000001?????10000???????????????? 0 1 31 0 1 // BLTZAL +32'b000001?????00001???????????????? 0 0 ? ? ? // BGEZ +32'b000001?????10001???????????????? 0 1 31 0 1 // BGEZAL +32'b000010?????????????????????????? 0 0 ? ? ? // J +32'b000011?????????????????????????? 0 1 31 0 1 // JAL +32'b000100?????????????????????????? 0 0 ? ? ? // BEQ +32'b000101?????????????????????????? 0 0 ? ? ? // BNE +32'b000110?????00000???????????????? 0 0 ? ? ? // BLEZ +32'b000111?????00000???????????????? 0 0 ? ? ? // BGTZ +32'b001000?????????????????????????? 0 1 RT 1 ? // ADDI +32'b001001?????????????????????????? 0 1 RT 1 ? // ADDIU +32'b001010?????????????????????????? 0 1 RT 1 ? // SLTI +32'b001011?????????????????????????? 0 1 RT 1 ? // SLTIU +32'b001100?????????????????????????? 0 1 RT 1 ? // ANDI +32'b001101?????????????????????????? 0 1 RT 1 ? // ORI +32'b001110?????????????????????????? 0 1 RT 1 ? // XORI +32'b00111100000????????????????????? 0 1 RT 1 ? // LUI +32'b01000000000??????????00000000??? 0 1 RT 1 ? // MFC0 +32'b01000000100??????????00000000??? 0 0 ? ? ? // MTC0 +32'b01000010000000000000000000000001 0 0 ? ? ? // TLBR +32'b01000010000000000000000000000010 0 0 ? ? ? // TLBWI +32'b01000010000000000000000000000110 0 0 ? ? ? // TLBWR +32'b01000010000000000000000000001000 0 0 ? ? ? // TLBP +32'b01000010000000000000000000011000 0 0 ? ? ? // ERET +32'b011100??????????0000000000000000 0 0 ? ? ? // MADD +32'b011100??????????0000000000000001 0 0 ? ? ? // MADDU +32'b011100??????????0000000000000100 0 0 ? ? ? // MSUB +32'b011100??????????0000000000000101 0 0 ? ? ? // MSUBU +32'b011100???????????????00000000010 0 1 RD 0 0 // MUL +32'b100000?????????????????????????? 0 1 RT 1 ? // LB +32'b100001?????????????????????????? 0 1 RT 1 ? // LH +32'h100010?????????????????????????? 0 1 RT 1 ? // LWL +32'b100011?????????????????????????? 0 1 RT 1 ? // LW +32'b100100?????????????????????????? 0 1 RT 1 ? // LBU +32'b100101?????????????????????????? 0 1 RT 1 ? // LHU +32'h100110?????????????????????????? 0 1 RT 1 ? // LWR +32'b101000?????????????????????????? 0 0 ? ? ? // SB +32'b101001?????????????????????????? 0 0 ? ? ? // SH +32'b101010?????????????????????????? 0 0 ? ? ? // SWL +32'b101011?????????????????????????? 0 0 ? ? ? // SW +32'b101110?????????????????????????? 0 0 ? ? ? // SWR +32'b101111?????????????????????????? 0 0 ? ? ? // CACHE +32'b110011?????????????????????????? 0 0 ? ? ? // PREF (NOP) \ No newline at end of file