try add MOVZ, MOVN
This commit is contained in:
parent
7e85ca17e3
commit
29c6e16682
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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:]]
|
||||
|
182
tools/decoder.py
182
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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
150
tools/wctrl.txt
150
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)
|
||||
////-------------------------------- 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)
|
Loading…
Reference in New Issue
Block a user