try add trap
This commit is contained in:
parent
a1bbfa0a0c
commit
75a62cfc37
@ -29,48 +29,49 @@ module Controller (
|
|||||||
imm
|
imm
|
||||||
);
|
);
|
||||||
|
|
||||||
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.BJRJ = ~inst[26] & (~inst[27] & (~inst[28] & ~inst[30] & ~inst[31] & ~inst[29] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[29] & ~inst[31]) | inst[27] & ~inst[31] & ~inst[29]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[19] | inst[27] | inst[28]);
|
||||||
assign ctrl.B = ~inst[31] & ~inst[29] & (inst[28] | ~inst[27] & inst[26]);
|
assign ctrl.B = ~inst[26] & inst[28] & ~inst[29] & ~inst[31] | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] & ~inst[19] | inst[28]);
|
||||||
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.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.J = ~inst[31] & ~inst[29] & ~inst[28] & inst[27];
|
||||||
|
// Take Care of BGO
|
||||||
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);
|
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);
|
||||||
|
|
||||||
assign ctrl.PRV = ~inst[31] & inst[30] & ~inst[29];
|
assign ctrl.PRV = ~inst[31] & inst[30] & ~inst[29];
|
||||||
assign ctrl.SYSCALL = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[0];
|
assign ctrl.SYSCALL = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[0];
|
||||||
assign ctrl.BREAK = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[1] & inst[0];
|
assign ctrl.BREAK = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[1] & inst[0];
|
||||||
assign ctrl.ERET = ~inst[31] & inst[30] & inst[4];
|
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.OFA = ~inst[26] & ~inst[30] & (~inst[29] & ~inst[31] & ~inst[28] & ~inst[27] & inst[5] & ~inst[0] & ~inst[4] & ~inst[2] & ~inst[3] | inst[29] & ~inst[27] & ~inst[31] & ~inst[28]);
|
||||||
|
|
||||||
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.ES = ~inst[30] & (~inst[28] & ~inst[27] & (~inst[26] & (~inst[3] & inst[2] | inst[3] & (inst[1] | inst[4]) | inst[5]) | inst[26] & inst[19]) | 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.ET = ~inst[26] & ~inst[27] & ~inst[31] & (~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.DS = ~inst[26] & (~inst[28] & ~inst[30] & ~inst[31] & ~inst[29] & ~inst[27] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[29] & ~inst[31]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] & ~inst[19] | 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.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.DP0 = ~inst[31] & (~inst[30] & (~inst[26] & (~inst[4] | ~inst[5] | inst[27] | inst[28]) | inst[26] & (~inst[19] | inst[27] | inst[28])) | inst[30] & (~inst[25] | inst[4]) | inst[29]) | 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.DP1 = ~inst[30] & (~inst[4] | inst[5] | inst[28] | inst[29] | inst[31] | inst[27] | inst[26]) | inst[30] & ~inst[29] & (inst[25] | inst[31]);
|
||||||
|
|
||||||
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_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[28] & ~inst[26] & ~inst[27] & ~inst[29] & ~inst[5] & ~inst[3] & inst[1];
|
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_add = (~inst[28] & (~inst[26] & ~inst[27] & ((~inst[5] & inst[3] & ~inst[1] | inst[5] & (~inst[0] & (~inst[2] & ~inst[4] & ~inst[3] | inst[2] & inst[4]) | inst[0] & ~inst[2] & ~inst[4] & ~inst[3])) | inst[29]) | inst[26] & (~inst[29] & ((~inst[16] & (inst[20] | inst[18]) | inst[16] & inst[20]) | inst[27]) | 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_and = ~inst[31] & (~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & inst[5] & ~inst[0] & inst[2] & ~inst[4] & ~inst[1] | 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_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_xor = ~inst[31] & (~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & inst[5] & ~inst[0] & inst[2] & ~inst[4] & inst[1] | 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_slt = ~inst[31] & ~inst[28] & (~inst[26] & (~inst[29] & inst[5] & ~inst[0] & ~inst[2] & (inst[3] | inst[4]) | inst[27]) | inst[26] & ~inst[29] & ~inst[27] & ~inst[16] & ~inst[18] & ~inst[20]);
|
||||||
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_sltu = ~inst[31] & ~inst[28] & (~inst[26] & ~inst[27] & ~inst[29] & inst[5] & inst[0] & ~inst[2] & (inst[3] | inst[4]) | inst[26] & (~inst[29] & ~inst[27] & inst[16] & ~inst[20] | inst[29] & inst[27]));
|
||||||
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.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.OP.alt = ~inst[31] & ~inst[28] & (~inst[29] & ~inst[27] & (~inst[26] & (inst[1] & (inst[0] | inst[5]) | inst[4]) | inst[26] & ~inst[20]) | inst[29] & inst[27]);
|
||||||
|
|
||||||
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.SA = SA_t'({(~inst[27] & (~inst[26] & ((inst[3] & inst[1] | inst[2]) | inst[5]) | inst[26] & ~inst[20]) | inst[31]) | inst[29], (~inst[28] & (inst[2] | inst[3] | inst[5] | inst[29] | inst[26]) | 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.ECtrl.SB = SB_t'({(inst[26] & ~inst[27] & ~inst[20] | inst[31]) | inst[29], inst[3] & ~inst[5] | inst[26]});
|
||||||
|
|
||||||
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.HW = ~inst[30] & ~inst[26] & ~inst[29] & ~inst[28] & ~inst[27] & inst[4] & (~inst[5] & ~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.LW = ~inst[30] & ~inst[26] & ~inst[29] & ~inst[28] & ~inst[27] & inst[4] & (~inst[5] & inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1];
|
||||||
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.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.MAS = MAS_t'({inst[2], inst[30] & ~inst[2] & ~inst[1]});
|
||||||
assign ctrl.MCtrl0.C0D = inst[15:11];
|
assign ctrl.MCtrl0.C0D = inst[15:11];
|
||||||
assign ctrl.MCtrl0.C0W = ~inst[31] & inst[30] & ~inst[29] & inst[23] & ~inst[3];
|
assign ctrl.MCtrl0.C0W = ~inst[31] & inst[30] & ~inst[29] & inst[23] & ~inst[3];
|
||||||
assign ctrl.MCtrl0.SEL = inst[2:0];
|
assign ctrl.MCtrl0.SEL = inst[2:0];
|
||||||
assign ctrl.MCtrl0.RS0 = RS0_t'({~inst[30] & (~inst[4] | inst[26] | inst[29]), inst[30], ~inst[29] & (~inst[1] | inst[30])});
|
assign ctrl.MCtrl0.RS0 = RS0_t'({~inst[30] & (~inst[4] | inst[5] | inst[29] | inst[26]), inst[30], ~inst[29] & (~inst[1] | inst[30])});
|
||||||
|
|
||||||
assign ctrl.MCtrl1.MR = inst[31] & ~inst[30];
|
assign ctrl.MCtrl1.MR = inst[31] & ~inst[30];
|
||||||
assign ctrl.MCtrl1.MWR = inst[29];
|
assign ctrl.MCtrl1.MWR = inst[29];
|
||||||
@ -83,9 +84,12 @@ module Controller (
|
|||||||
assign ctrl.MCtrl1.TLBP = ~inst[31] & inst[30] & ~inst[4] & inst[3];
|
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.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.Trap.TEN = ~inst[30] & ~inst[27] & (~inst[26] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[5] | inst[26] & ~inst[31] & ~inst[29] & ~inst[28] & inst[19]) | inst[30] & ~inst[29] & ~inst[31];
|
||||||
|
assign ctrl.Trap.TP = TrapOp_t'({~inst[26] & inst[2] | inst[26] & inst[18], ~inst[26] & inst[1] | inst[26] & inst[17]});
|
||||||
|
|
||||||
logic mov, rw, eqz;
|
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 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 rw = ~inst[30] & (~inst[26] & (~inst[27] & (~inst[31] & (~inst[28] & (~inst[4] & (~inst[3] | ~inst[2] & (inst[0] | inst[1])) | inst[4] & ~inst[5] & ~inst[3] & ~inst[0]) | inst[29]) | inst[31] & ~inst[29]) | inst[27] & (~inst[31] & inst[29] | inst[31] & ~inst[29])) | inst[26] & (~inst[29] & (~inst[27] & ~inst[28] & inst[20] | inst[27] & ~inst[28] | inst[31]) | inst[29] & ~inst[31])) | inst[30] & ~inst[31] & ~inst[3] & (~inst[29] & ~inst[25] & ~inst[23] | inst[29] & inst[1]);
|
||||||
assign eqz = rt == 32'h0;
|
assign eqz = rt == 32'h0;
|
||||||
assign ctrl.WCtrl.RW = ctrl.RD != 5'b00000 & (~mov | ~inst[0] & eqz | inst[0] & ~eqz) & rw;
|
assign ctrl.WCtrl.RW = ctrl.RD != 5'b00000 & (~mov | ~inst[0] & eqz | inst[0] & ~eqz) & rw;
|
||||||
|
|
||||||
|
@ -253,6 +253,7 @@ module Datapath (
|
|||||||
word_t M_I0_HI;
|
word_t M_I0_HI;
|
||||||
word_t M_I0_LO;
|
word_t M_I0_LO;
|
||||||
|
|
||||||
|
logic M_I1_Trap;
|
||||||
logic M_I1_NowExcValid;
|
logic M_I1_NowExcValid;
|
||||||
logic M_I1_PrevExcValid;
|
logic M_I1_PrevExcValid;
|
||||||
logic [4:0] M_I1_PrevExcCode;
|
logic [4:0] M_I1_PrevExcCode;
|
||||||
@ -482,6 +483,7 @@ module Datapath (
|
|||||||
| D.IB.PRV & ~C0_kernel);
|
| D.IB.PRV & ~C0_kernel);
|
||||||
assign D.IB_ERET = D_IB_valid & D.IB_pc[1:0] == 2'b00 & ~D_IB_TLBRefill & ~D_IB_TLBInvalid & ~D_IB_AddressError & D_IB_iv & D.IB.ERET & ~D.IB_Delay;
|
assign D.IB_ERET = D_IB_valid & D.IB_pc[1:0] == 2'b00 & ~D_IB_TLBRefill & ~D_IB_TLBInvalid & ~D_IB_AddressError & D_IB_iv & D.IB.ERET & ~D.IB_Delay;
|
||||||
assign D.IB_REFILL = D_IB_valid & D.IB_pc[1:0] == 2'b00 & D_IB_TLBRefill;
|
assign D.IB_REFILL = D_IB_valid & D.IB_pc[1:0] == 2'b00 & D_IB_TLBRefill;
|
||||||
|
// EXCCODE_BP and EXCCODE_SYSCALL -> exc.txt
|
||||||
assign D.IB_ExcCode = D.IB_pc[1:0] != 2'b00 | D_IB_AddressError ? `EXCCODE_ADEL
|
assign D.IB_ExcCode = D.IB_pc[1:0] != 2'b00 | D_IB_AddressError ? `EXCCODE_ADEL
|
||||||
: D_IB_TLBRefill ? `EXCCODE_TLBL
|
: D_IB_TLBRefill ? `EXCCODE_TLBL
|
||||||
: D_IB_TLBInvalid ? `EXCCODE_TLBL
|
: D_IB_TLBInvalid ? `EXCCODE_TLBL
|
||||||
@ -606,6 +608,7 @@ module Datapath (
|
|||||||
assign D.I1.sa = D.A ? D.IA_sa : D.IB_sa;
|
assign D.I1.sa = D.A ? D.IA_sa : D.IB_sa;
|
||||||
assign D.I1.ECtrl = D.A ? D.IA.ECtrl : D.IB.ECtrl;
|
assign D.I1.ECtrl = D.A ? D.IA.ECtrl : D.IB.ECtrl;
|
||||||
assign D.I1.MCtrl = D.A ? D.IA.MCtrl1 : D.IB.MCtrl1;
|
assign D.I1.MCtrl = D.A ? D.IA.MCtrl1 : D.IB.MCtrl1;
|
||||||
|
assign D.I1.Trap = D.A ? D.IA.Trap : D.IB.Trap;
|
||||||
assign D.I1.RD = D.A ? D.IA.RD : D.IB.RD;
|
assign D.I1.RD = D.A ? D.IA.RD : D.IB.RD;
|
||||||
assign D.I1.WCtrl = D.A ? D.IA.WCtrl : D.IB.WCtrl;
|
assign D.I1.WCtrl = D.A ? D.IA.WCtrl : D.IB.WCtrl;
|
||||||
|
|
||||||
@ -793,6 +796,14 @@ module Datapath (
|
|||||||
~D_go | ~D_I1_go,
|
~D_go | ~D_I1_go,
|
||||||
E.I1.MCtrl
|
E.I1.MCtrl
|
||||||
);
|
);
|
||||||
|
ffenrc #(3) E_I1_Trap_ff (
|
||||||
|
clk,
|
||||||
|
rst | rstM,
|
||||||
|
D.I1.Trap,
|
||||||
|
E.en,
|
||||||
|
~D_go | ~D_I1_go,
|
||||||
|
E.I1.Trap
|
||||||
|
);
|
||||||
ffenrc #(5 + 1) E_I1_WCtrl_ff (
|
ffenrc #(5 + 1) E_I1_WCtrl_ff (
|
||||||
clk,
|
clk,
|
||||||
rst | rstM,
|
rst | rstM,
|
||||||
@ -1085,6 +1096,14 @@ module Datapath (
|
|||||||
~E_go | ~E_I1_go,
|
~E_go | ~E_I1_go,
|
||||||
M.I1.MCtrl
|
M.I1.MCtrl
|
||||||
);
|
);
|
||||||
|
ffenrc #(3) M_I1_Trap_ff (
|
||||||
|
clk,
|
||||||
|
rst | rstM,
|
||||||
|
E.I1.Trap,
|
||||||
|
M.en,
|
||||||
|
~E_go | ~E_I1_go,
|
||||||
|
M.I1.Trap
|
||||||
|
);
|
||||||
ffenrc #(5 + 1) M_I1_WCtrl_ff (
|
ffenrc #(5 + 1) M_I1_WCtrl_ff (
|
||||||
clk,
|
clk,
|
||||||
rst | rstM,
|
rst | rstM,
|
||||||
@ -1114,6 +1133,7 @@ module Datapath (
|
|||||||
assign M.I1.ExcValid = M_I1_PrevExcValid | M_I1_NowExcValid;
|
assign M.I1.ExcValid = M_I1_PrevExcValid | M_I1_NowExcValid;
|
||||||
assign M.I1.REFILL = M_I1_PrevREFILL | dTLBRefillB;
|
assign M.I1.REFILL = M_I1_PrevREFILL | dTLBRefillB;
|
||||||
assign M.I1.ExcCode = M_I1_PrevExcValid ? M_I1_PrevExcCode
|
assign M.I1.ExcCode = M_I1_PrevExcValid ? M_I1_PrevExcCode
|
||||||
|
: M_I1_Trap ? `EXCCODE_TR
|
||||||
: dAddressErrorB ? M.I1.MCtrl.MWR ? `EXCCODE_ADES : `EXCCODE_ADES
|
: dAddressErrorB ? M.I1.MCtrl.MWR ? `EXCCODE_ADES : `EXCCODE_ADES
|
||||||
: dTLBRefillB ? M.I1.MCtrl.MWR ? `EXCCODE_TLBS : `EXCCODE_TLBL
|
: dTLBRefillB ? M.I1.MCtrl.MWR ? `EXCCODE_TLBS : `EXCCODE_TLBL
|
||||||
: dTLBInvalidB ? M.I1.MCtrl.MWR ? `EXCCODE_TLBS : `EXCCODE_TLBL
|
: dTLBInvalidB ? M.I1.MCtrl.MWR ? `EXCCODE_TLBS : `EXCCODE_TLBL
|
||||||
@ -1300,6 +1320,12 @@ module Datapath (
|
|||||||
M_I1_DataR
|
M_I1_DataR
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// M.I1.TRAP
|
||||||
|
assign M_I1_Trap = M.I1.Trap.TEN & ( M.I1.Trap.TP == NE ? M.I1.ALUOut != 32'b0
|
||||||
|
: M.I1.Trap.TP == EQ ? M.I1.ALUOut == 32'b0
|
||||||
|
: M.I1.Trap.TP == LT ? M.I1.ALUOut[0] == 1'b1
|
||||||
|
: M.I1.Trap.TP == GE ? M.I1.ALUOut[0] == 1'b0);
|
||||||
|
|
||||||
assign M.en = M_go & W.en;
|
assign M.en = M_go & W.en;
|
||||||
assign M_go = (M.I0.MCtrl.HLS[2:1] != 2'b10 | M_I0_MULT_bvalid)
|
assign M_go = (M.I0.MCtrl.HLS[2:1] != 2'b10 | M_I0_MULT_bvalid)
|
||||||
& (M.I0.MCtrl.HLS != DIV | M_I0_DIV_bvalid)
|
& (M.I0.MCtrl.HLS != DIV | M_I0_DIV_bvalid)
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
// fetch_tlb_refill
|
// fetch_tlb_refill
|
||||||
// fetch_tlb_invalid
|
// fetch_tlb_invalid
|
||||||
// ri
|
// ri
|
||||||
// syscall, break, overflow
|
// syscall, break, overflow, trap
|
||||||
// mem_addr
|
// mem_addr
|
||||||
// mem_tlb_refill
|
// mem_tlb_refill
|
||||||
// mem_tlb_invalid
|
// mem_tlb_invalid
|
||||||
@ -94,6 +94,13 @@ typedef enum logic [2:0] {
|
|||||||
DC_IO = 3'b111 // D-Cache Index writeOnly
|
DC_IO = 3'b111 // D-Cache Index writeOnly
|
||||||
} CacheOp_t;
|
} CacheOp_t;
|
||||||
|
|
||||||
|
typedef enum logic [1:0] {
|
||||||
|
GE = 2'b00,
|
||||||
|
LT = 2'b01,
|
||||||
|
EQ = 2'b10,
|
||||||
|
NE = 2'b11
|
||||||
|
} TrapOp_t;
|
||||||
|
|
||||||
typedef struct packed {
|
typedef struct packed {
|
||||||
SA_t SA;
|
SA_t SA;
|
||||||
SB_t SB;
|
SB_t SB;
|
||||||
@ -124,6 +131,11 @@ typedef struct packed {
|
|||||||
CacheOp_t CACHE_OP; // critical
|
CacheOp_t CACHE_OP; // critical
|
||||||
} MCtrl1_t;
|
} MCtrl1_t;
|
||||||
|
|
||||||
|
typedef struct packed {
|
||||||
|
logic TEN; // critical
|
||||||
|
TrapOp_t TP;
|
||||||
|
} Trap_t;
|
||||||
|
|
||||||
typedef struct packed {
|
typedef struct packed {
|
||||||
logic RW; // critical
|
logic RW; // critical
|
||||||
} WCtrl_t;
|
} WCtrl_t;
|
||||||
@ -155,6 +167,7 @@ typedef struct packed {
|
|||||||
|
|
||||||
MCtrl0_t MCtrl0;
|
MCtrl0_t MCtrl0;
|
||||||
MCtrl1_t MCtrl1;
|
MCtrl1_t MCtrl1;
|
||||||
|
Trap_t Trap;
|
||||||
|
|
||||||
logic [4:0] RD;
|
logic [4:0] RD;
|
||||||
WCtrl_t WCtrl;
|
WCtrl_t WCtrl;
|
||||||
@ -245,6 +258,7 @@ typedef struct packed {
|
|||||||
ECtrl_t ECtrl;
|
ECtrl_t ECtrl;
|
||||||
|
|
||||||
MCtrl1_t MCtrl;
|
MCtrl1_t MCtrl;
|
||||||
|
Trap_t Trap;
|
||||||
|
|
||||||
logic [4:0] RD;
|
logic [4:0] RD;
|
||||||
WCtrl_t WCtrl;
|
WCtrl_t WCtrl;
|
||||||
@ -305,6 +319,7 @@ typedef struct packed {
|
|||||||
word_t ALUOut;
|
word_t ALUOut;
|
||||||
|
|
||||||
MCtrl1_t MCtrl;
|
MCtrl1_t MCtrl;
|
||||||
|
Trap_t Trap;
|
||||||
|
|
||||||
logic [4:0] RD;
|
logic [4:0] RD;
|
||||||
WCtrl_t WCtrl;
|
WCtrl_t WCtrl;
|
||||||
@ -355,6 +370,7 @@ typedef struct packed {
|
|||||||
word_t ALUOut;
|
word_t ALUOut;
|
||||||
|
|
||||||
MCtrl1_t MCtrl;
|
MCtrl1_t MCtrl;
|
||||||
|
Trap_t Trap;
|
||||||
word_t RDataW;
|
word_t RDataW;
|
||||||
|
|
||||||
logic [4:0] RD;
|
logic [4:0] RD;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
with open('wctrl.txt') as f:
|
with open('global.txt') as f:
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
title = lines[0].split()
|
title = lines[0].split()
|
||||||
items = [x.split() for x in lines[1:]]
|
items = [x.split() for x in lines[1:]]
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
table = [
|
table = [
|
||||||
# ('000000000000000000000?????001111', 'SYNC'),
|
# ('000000000000000000000?????001111', 'SYNC'),
|
||||||
('00000000000???????????????000000', 'SLL'),
|
# ('00000000000???????????????000000', 'SLL'),
|
||||||
# ('00000000000???????????????000010', 'SRL'),
|
# ('00000000000???????????????000010', 'SRL'),
|
||||||
# ('00000000000???????????????000011', 'SRA'),
|
# ('00000000000???????????????000011', 'SRA'),
|
||||||
# ('000000???????????????00000000100', 'SLLV'),
|
# ('000000???????????????00000000100', 'SLLV'),
|
||||||
# ('000000???????????????00000000110', 'SRLV'),
|
# ('000000???????????????00000000110', 'SRLV'),
|
||||||
# ('000000???????????????00000000111', 'SRAV'),
|
# ('000000???????????????00000000111', 'SRAV'),
|
||||||
('000000???????????????00000001010', 'MOVZ'),
|
# ('000000???????????????00000001010', 'MOVZ'),
|
||||||
('000000???????????????00000001011', 'MOVN'),
|
# ('000000???????????????00000001011', 'MOVN'),
|
||||||
# ('000000?????000000000000000001000', 'JR'),
|
# ('000000?????000000000000000001000', 'JR'),
|
||||||
# ('000000?????00000?????00000001001', 'JALR'),
|
# ('000000?????00000?????00000001001', 'JALR'),
|
||||||
# ('000000????????????????????001100', 'SYSCALL'),
|
# ('000000????????????????????001100', 'SYSCALL'),
|
||||||
@ -30,9 +30,21 @@ table = [
|
|||||||
# ('000000???????????????00000100111', 'NOR'),
|
# ('000000???????????????00000100111', 'NOR'),
|
||||||
# ('000000???????????????00000101010', 'SLT'),
|
# ('000000???????????????00000101010', 'SLT'),
|
||||||
# ('000000???????????????00000101011', 'SLTU'),
|
# ('000000???????????????00000101011', 'SLTU'),
|
||||||
|
('000000????????????????????110000', 'TGE'),
|
||||||
|
('000000????????????????????110001', 'TGEU'),
|
||||||
|
('000000????????????????????110010', 'TLT'),
|
||||||
|
('000000????????????????????110011', 'TLTU'),
|
||||||
|
('000000????????????????????110100', 'TEQ'),
|
||||||
|
('000000????????????????????110110', 'TNE'),
|
||||||
# ('000001?????00000????????????????', 'BLTZ'),
|
# ('000001?????00000????????????????', 'BLTZ'),
|
||||||
# ('000001?????10000????????????????', 'BLTZAL'),
|
|
||||||
# ('000001?????00001????????????????', 'BGEZ'),
|
# ('000001?????00001????????????????', 'BGEZ'),
|
||||||
|
('000001?????01000????????????????', 'TGEI'),
|
||||||
|
('000001?????01001????????????????', 'TGEIU'),
|
||||||
|
('000001?????01010????????????????', 'TLTI'),
|
||||||
|
('000001?????01011????????????????', 'TLTIU'),
|
||||||
|
('000001?????01110????????????????', 'TNEI'),
|
||||||
|
('000001?????01100????????????????', 'TEQI'),
|
||||||
|
# ('000001?????10000????????????????', 'BLTZAL'),
|
||||||
# ('000001?????10001????????????????', 'BGEZAL'),
|
# ('000001?????10001????????????????', 'BGEZAL'),
|
||||||
# ('000010??????????????????????????', 'J'),
|
# ('000010??????????????????????????', 'J'),
|
||||||
# ('000011??????????????????????????', 'JAL'),
|
# ('000011??????????????????????????', 'JAL'),
|
||||||
@ -97,8 +109,8 @@ for inst, name in table:
|
|||||||
print('=====', name, '=====')
|
print('=====', name, '=====')
|
||||||
ctrl = {}
|
ctrl = {}
|
||||||
|
|
||||||
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['BJRJ'] = ~inst[26] & (~inst[27] & (~inst[28] & ~inst[30] & ~inst[31] & ~inst[29] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[29] & ~inst[31]) | inst[27] & ~inst[31] & ~inst[29]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[19] | inst[27] | inst[28])
|
||||||
ctrl['B'] = ~inst[31] & ~inst[29] & (inst[28] | ~inst[27] & inst[26])
|
ctrl['B'] = ~inst[26] & inst[28] & ~inst[29] & ~inst[31] | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] & ~inst[19] | inst[28])
|
||||||
ctrl['JR'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[4] & inst[3] & ~inst[2] & ~inst[1]
|
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['J'] = ~inst[31] & ~inst[29] & ~inst[28] & inst[27]
|
||||||
|
|
||||||
@ -107,37 +119,37 @@ for inst, name in table:
|
|||||||
ctrl['SYSCALL'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[0]
|
ctrl['SYSCALL'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[0]
|
||||||
ctrl['BREAK'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[1] & inst[0]
|
ctrl['BREAK'] = ~inst[31] & ~inst[30] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & inst[3] & inst[2] & ~inst[1] & inst[0]
|
||||||
ctrl['ERET'] = ~inst[31] & inst[30] & inst[4]
|
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['OFA'] = ~inst[26] & ~inst[30] & (~inst[29] & ~inst[31] & ~inst[28] & ~inst[27] & inst[5] & ~inst[0] & ~inst[4] & ~inst[2] & ~inst[3] | inst[29] & ~inst[27] & ~inst[31] & ~inst[28])
|
||||||
|
|
||||||
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['ES'] = ~inst[30] & (~inst[28] & ~inst[27] & (~inst[26] & (~inst[3] & inst[2] | inst[3] & (inst[1] | inst[4]) | inst[5]) | inst[26] & inst[19]) | 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['ET'] = ~inst[26] & ~inst[27] & ~inst[31] & (~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['DS'] = ~inst[26] & (~inst[28] & ~inst[30] & ~inst[31] & ~inst[29] & ~inst[27] & inst[3] & ~inst[1] & ~inst[4] & ~inst[2] | inst[28] & ~inst[29] & ~inst[31]) | inst[26] & ~inst[31] & ~inst[29] & (~inst[27] & ~inst[19] | 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['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['DP0'] = ~inst[31] & (~inst[30] & (~inst[26] & (~inst[4] | ~inst[5] | inst[27] | inst[28]) | inst[26] & (~inst[19] | inst[27] | inst[28])) | inst[30] & (~inst[25] | inst[4]) | inst[29]) | 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['DP1'] = ~inst[30] & (~inst[4] | inst[5] | inst[28] | inst[29] | inst[31] | inst[27] | inst[26]) | inst[30] & ~inst[29] & (inst[25] | inst[31])
|
||||||
|
|
||||||
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_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[28] & ~inst[26] & ~inst[27] & ~inst[29] & ~inst[5] & ~inst[3] & inst[1]
|
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_add'] = ~inst[28] & (~inst[26] & ~inst[27] & ((~inst[5] & inst[3] & ~inst[1] | inst[5] & (~inst[0] & (~inst[2] & ~inst[4] & ~inst[3] | inst[2] & inst[4]) | inst[0] & ~inst[2] & ~inst[4] & ~inst[3])) | inst[29]) | inst[26] & (~inst[29] & ((~inst[16] & (inst[20] | inst[18]) | inst[16] & inst[20]) | inst[27]) | 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_and'] = ~inst[31] & (~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & inst[5] & ~inst[0] & inst[2] & ~inst[4] & ~inst[1] | 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_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_xor'] = ~inst[31] & (~inst[28] & ~inst[26] & ~inst[27] & ~inst[29] & inst[5] & ~inst[0] & inst[2] & ~inst[4] & inst[1] | 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_slt'] = ~inst[31] & ~inst[28] & (~inst[26] & (~inst[29] & inst[5] & ~inst[0] & ~inst[2] & (inst[3] | inst[4]) | inst[27]) | inst[26] & ~inst[29] & ~inst[27] & ~inst[16] & ~inst[18] & ~inst[20])
|
||||||
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_sltu'] = ~inst[31] & ~inst[28] & (~inst[26] & ~inst[27] & ~inst[29] & inst[5] & inst[0] & ~inst[2] & (inst[3] | inst[4]) | inst[26] & (~inst[29] & ~inst[27] & inst[16] & ~inst[20] | inst[29] & inst[27]))
|
||||||
ctrl['ECtrl_OP_f_mova'] = ~inst[31] & ~inst[29] & ~inst[28] & ~inst[27] & ~inst[26] & ~inst[5] & inst[3] & inst[1]
|
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_OP_alt'] = ~inst[31] & ~inst[28] & (~inst[29] & ~inst[27] & (~inst[26] & (inst[1] & (inst[0] | inst[5]) | inst[4]) | inst[26] & ~inst[20]) | inst[29] & inst[27])
|
||||||
|
|
||||||
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_SA'] = ((~inst[27] & (~inst[26] & ((inst[3] & inst[1] | inst[2]) | inst[5]) | inst[26] & ~inst[20]) | inst[31]) | inst[29], (~inst[28] & (inst[2] | inst[3] | inst[5] | inst[29] | inst[26]) | inst[28] & (~inst[27] | ~inst[26])) | inst[31])
|
||||||
ctrl['ECtrl_SB'] = (inst[31] | inst[29], inst[26] | ~inst[5] & inst[3])
|
ctrl['ECtrl_SB'] = ((inst[26] & ~inst[27] & ~inst[20] | inst[31]) | inst[29], inst[3] & ~inst[5] | inst[26])
|
||||||
ctrl['imm'] = (~inst[31] & inst[28] & inst[27] & inst[26], inst[31] | ~inst[28])
|
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_HW'] = ~inst[30] & ~inst[26] & ~inst[29] & ~inst[28] & ~inst[27] & inst[4] & (~inst[5] & ~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_LW'] = ~inst[30] & ~inst[26] & ~inst[29] & ~inst[28] & ~inst[27] & inst[4] & (~inst[5] & inst[1] & inst[0] | inst[3]) | inst[30] & inst[29] & ~inst[1]
|
||||||
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_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_MAS'] = (inst[2], inst[30] & ~inst[2] & ~inst[1])
|
||||||
ctrl['MCtrl0_C0W'] = ~inst[31] & inst[30] & ~inst[29] & inst[23] & ~inst[3]
|
ctrl['MCtrl0_C0W'] = ~inst[31] & inst[30] & ~inst[29] & inst[23] & ~inst[3]
|
||||||
ctrl['MCtrl0_RS0'] = (~inst[30] & (~inst[4] | inst[26] | inst[29]), inst[30], ~inst[29] & (~inst[1] | inst[30]))
|
ctrl['MCtrl0_RS0'] = (~inst[30] & (~inst[4] | inst[5] | inst[29] | inst[26]), inst[30], ~inst[29] & (~inst[1] | inst[30]))
|
||||||
|
|
||||||
ctrl['MCtrl1_MR'] = inst[31] & ~inst[30]
|
ctrl['MCtrl1_MR'] = inst[31] & ~inst[30]
|
||||||
ctrl['MCtrl1_MWR'] = inst[29]
|
ctrl['MCtrl1_MWR'] = inst[29]
|
||||||
@ -149,7 +161,10 @@ for inst, name in table:
|
|||||||
ctrl['MCtrl1_TLBP'] = ~inst[31] & inst[30] & ~inst[4] & inst[3]
|
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['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['Trap_TEN'] = ~inst[30] & ~inst[27] & (~inst[26] & ~inst[31] & ~inst[29] & ~inst[28] & inst[4] & inst[5] | inst[26] & ~inst[31] & ~inst[29] & ~inst[28] & inst[19]) | inst[30] & ~inst[29] & ~inst[31]
|
||||||
|
ctrl['Trap_OP'] = (~inst[26] & inst[2] | inst[26] & inst[18], ~inst[26] & inst[1] | inst[26] & inst[17])
|
||||||
|
|
||||||
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_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['WCtrl_RW'] = ~inst[30] & (~inst[26] & (~inst[27] & (~inst[31] & (~inst[28] & (~inst[4] & (~inst[3] | ~inst[2] & (inst[0] | inst[1])) | inst[4] & ~inst[5] & ~inst[3] & ~inst[0]) | inst[29]) | inst[31] & ~inst[29]) | inst[27] & (~inst[31] & inst[29] | inst[31] & ~inst[29])) | inst[26] & (~inst[29] & (~inst[27] & ~inst[28] & inst[20] | inst[27] & ~inst[28] | inst[31]) | inst[29] & ~inst[31])) | 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['RD'] = (~inst[29] & inst[30] | inst[29] & ~inst[30] | inst[31], inst[26])
|
||||||
print(ctrl)
|
print(ctrl)
|
||||||
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 OR 1 RS 1 1 RT 0 0 ? ? ? // NOR
|
32'b000000???????????????00000100111 OR 1 RS 1 1 RT 0 0 ? ? ? // NOR
|
||||||
32'b000000???????????????00000101010 SLT 1 RS 1 1 RT 0 0 ? ? ? // SLT
|
32'b000000???????????????00000101010 SLT 1 RS 1 1 RT 0 0 ? ? ? // SLT
|
||||||
32'b000000???????????????00000101011 SLTU 1 RS 1 1 RT 0 0 ? ? ? // SLTU
|
32'b000000???????????????00000101011 SLTU 1 RS 1 1 RT 0 0 ? ? ? // SLTU
|
||||||
|
32'b000000????????????????????110000 SLT 1 RS 1 1 RT 0 0 ? ? ? // TGE
|
||||||
|
32'b000000????????????????????110001 SLTU 1 RS 1 1 RT 0 0 ? ? ? // TGEU
|
||||||
|
32'b000000????????????????????110010 SLT 1 RS 1 1 RT 0 0 ? ? ? // TLT
|
||||||
|
32'b000000????????????????????110011 SLTU 1 RS 1 1 RT 0 0 ? ? ? // TLTU
|
||||||
|
32'b000000????????????????????110100 ADD 1 RS 1 1 RT 0 0 ? ? ? // TEQ
|
||||||
|
32'b000000????????????????????110110 ADD 1 RS 1 1 RT 0 0 ? ? ? // TNE
|
||||||
32'b000001?????00000???????????????? ? ? ? ? ? ? ? ? ? ? ? // BLTZ
|
32'b000001?????00000???????????????? ? ? ? ? ? ? ? ? ? ? ? // BLTZ
|
||||||
32'b000001?????10000???????????????? ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? ? ? ? ? ? ? ? ? ? ? ? // BGEZ
|
32'b000001?????00001???????????????? ? ? ? ? ? ? ? ? ? ? ? // BGEZ
|
||||||
|
32'b000001?????01000???????????????? SLT 1 RS 1 1 IMM 1 ? IX 0 1 // TGEI
|
||||||
|
32'b000001?????01001???????????????? SLTU 1 RS 1 1 IMM 1 ? IX 0 1 // TGEIU
|
||||||
|
32'b000001?????01010???????????????? SLT 1 RS 1 1 IMM 1 ? IX 0 1 // TLTI
|
||||||
|
32'b000001?????01011???????????????? SLTU 1 RS 1 1 IMM 1 ? IX 0 1 // TLTIU
|
||||||
|
32'b000001?????01110???????????????? ADD 1 RS 1 1 IMM 1 ? IX 0 1 // TNEI
|
||||||
|
32'b000001?????01100???????????????? ADD 1 RS 1 1 IMM 1 ? IX 0 1 // TEQI
|
||||||
|
32'b000001?????10000???????????????? ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // BLTZAL
|
||||||
32'b000001?????10001???????????????? ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // BGEZAL
|
32'b000001?????10001???????????????? ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // BGEZAL
|
||||||
32'b000010?????????????????????????? ? ? ? ? ? ? ? ? ? ? ? // J
|
32'b000010?????????????????????????? ? ? ? ? ? ? ? ? ? ? ? // J
|
||||||
32'b000011?????????????????????????? ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // JAL
|
32'b000011?????????????????????????? ADD 0 PC 0 1 EIGHT 0 1 ? ? ? // JAL
|
||||||
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 0 0 0 0 1 1 0 0 1 1 // NOR
|
32'b000000???????????????00000100111 0 0 0 0 1 1 0 0 1 1 // NOR
|
||||||
32'b000000???????????????00000101010 0 0 0 0 1 1 0 0 1 1 // SLT
|
32'b000000???????????????00000101010 0 0 0 0 1 1 0 0 1 1 // SLT
|
||||||
32'b000000???????????????00000101011 0 0 0 0 1 1 0 0 1 1 // SLTU
|
32'b000000???????????????00000101011 0 0 0 0 1 1 0 0 1 1 // SLTU
|
||||||
|
32'b000000????????????????????110000 0 0 0 0 1 1 0 0 0 1 // TGE
|
||||||
|
32'b000000????????????????????110001 0 0 0 0 1 1 0 0 0 1 // TGEU
|
||||||
|
32'b000000????????????????????110010 0 0 0 0 1 1 0 0 0 1 // TLT
|
||||||
|
32'b000000????????????????????110011 0 0 0 0 1 1 0 0 0 1 // TLTU
|
||||||
|
32'b000000????????????????????110100 0 0 0 0 1 1 0 0 0 1 // TEQ
|
||||||
|
32'b000000????????????????????110110 0 0 0 0 1 1 0 0 0 1 // TNE
|
||||||
32'b000001?????00000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLTZ
|
32'b000001?????00000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLTZ
|
||||||
32'b000001?????10000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? 0 0 0 0 0 0 1 0 1 1 // BGEZ
|
32'b000001?????00001???????????????? 0 0 0 0 0 0 1 0 1 1 // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 0 0 0 0 1 0 0 0 0 1 // TGEI
|
||||||
|
32'b000001?????01001???????????????? 0 0 0 0 1 0 0 0 0 1 // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 0 0 0 0 1 0 0 0 0 1 // TLTI
|
||||||
|
32'b000001?????01011???????????????? 0 0 0 0 1 0 0 0 0 1 // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 0 0 0 0 1 0 0 0 0 1 // TNEI
|
||||||
|
32'b000001?????01100???????????????? 0 0 0 0 1 0 0 0 0 1 // TEQI
|
||||||
|
32'b000001?????10000???????????????? 0 0 0 0 0 0 1 0 1 1 // BLTZAL
|
||||||
32'b000001?????10001???????????????? 0 0 0 0 0 0 1 0 1 1 // BGEZAL
|
32'b000001?????10001???????????????? 0 0 0 0 0 0 1 0 1 1 // BGEZAL
|
||||||
32'b000010?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // J
|
32'b000010?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // J
|
||||||
32'b000011?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // JAL
|
32'b000011?????????????????????????? 0 0 0 0 0 0 0 0 1 1 // JAL
|
||||||
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // NOR
|
32'b000000???????????????00000100111 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // NOR
|
||||||
32'b000000???????????????00000101010 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SLT
|
32'b000000???????????????00000101010 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SLT
|
||||||
32'b000000???????????????00000101011 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SLTU
|
32'b000000???????????????00000101011 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // SLTU
|
||||||
|
32'b000000????????????????????110000 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TGE
|
||||||
|
32'b000000????????????????????110001 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TGEU
|
||||||
|
32'b000000????????????????????110010 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TLT
|
||||||
|
32'b000000????????????????????110011 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TLTU
|
||||||
|
32'b000000????????????????????110100 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TEQ
|
||||||
|
32'b000000????????????????????110110 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TNE
|
||||||
32'b000001?????00000???????????????? 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // BLTZ
|
32'b000001?????00000???????????????? 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // BLTZ
|
||||||
32'b000001?????10000???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // BGEZ
|
32'b000001?????00001???????????????? 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TGEI
|
||||||
|
32'b000001?????01001???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TLTI
|
||||||
|
32'b000001?????01011???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TNEI
|
||||||
|
32'b000001?????01100???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // TEQI
|
||||||
|
32'b000001?????10000???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // BLTZAL
|
||||||
32'b000001?????10001???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // BGEZAL
|
32'b000001?????10001???????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // BGEZAL
|
||||||
32'b000010?????????????????????????? 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // J
|
32'b000010?????????????????????????? 0 0 ? 0 ? ? ? ? ? 0 ? ? ? ? // J
|
||||||
32'b000011?????????????????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // JAL
|
32'b000011?????????????????????????? 0 0 ? 0 ? ? ? ? ? 0 ALU 1 ? ? // JAL
|
||||||
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // NOR
|
32'b000000???????????????00000100111 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // NOR
|
||||||
32'b000000???????????????00000101010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLT
|
32'b000000???????????????00000101010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLT
|
||||||
32'b000000???????????????00000101011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLTU
|
32'b000000???????????????00000101011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // SLTU
|
||||||
|
32'b000000????????????????????110000 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGE
|
||||||
|
32'b000000????????????????????110001 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGEU
|
||||||
|
32'b000000????????????????????110010 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLT
|
||||||
|
32'b000000????????????????????110011 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLTU
|
||||||
|
32'b000000????????????????????110100 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TEQ
|
||||||
|
32'b000000????????????????????110110 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TNE
|
||||||
32'b000001?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLTZ
|
32'b000001?????00000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLTZ
|
||||||
32'b000001?????10000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGEZ
|
32'b000001?????00001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGEI
|
||||||
|
32'b000001?????01001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLTI
|
||||||
|
32'b000001?????01011???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TNEI
|
||||||
|
32'b000001?????01100???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // TEQI
|
||||||
|
32'b000001?????10000???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BLTZAL
|
||||||
32'b000001?????10001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGEZAL
|
32'b000001?????10001???????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // BGEZAL
|
||||||
32'b000010?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // J
|
32'b000010?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // J
|
||||||
32'b000011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JAL
|
32'b000011?????????????????????????? 0 0 0 0 0 ? ? ? ? ? ? ? ? ? // JAL
|
||||||
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 0 0 0 0 // NOR
|
32'b000000???????????????00000100111 0 0 0 0 // NOR
|
||||||
32'b000000???????????????00000101010 0 0 0 0 // SLT
|
32'b000000???????????????00000101010 0 0 0 0 // SLT
|
||||||
32'b000000???????????????00000101011 0 0 0 0 // SLTU
|
32'b000000???????????????00000101011 0 0 0 0 // SLTU
|
||||||
|
32'b000000????????????????????110000 0 0 0 0 // TGE
|
||||||
|
32'b000000????????????????????110001 0 0 0 0 // TGEU
|
||||||
|
32'b000000????????????????????110010 0 0 0 0 // TLT
|
||||||
|
32'b000000????????????????????110011 0 0 0 0 // TLTU
|
||||||
|
32'b000000????????????????????110100 0 0 0 0 // TEQ
|
||||||
|
32'b000000????????????????????110110 0 0 0 0 // TNE
|
||||||
32'b000001?????00000???????????????? 1 1 0 0 // BLTZ
|
32'b000001?????00000???????????????? 1 1 0 0 // BLTZ
|
||||||
32'b000001?????10000???????????????? 1 1 0 0 // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? 1 1 0 0 // BGEZ
|
32'b000001?????00001???????????????? 1 1 0 0 // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 0 0 0 0 // TGEI
|
||||||
|
32'b000001?????01001???????????????? 0 0 0 0 // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 0 0 0 0 // TLTI
|
||||||
|
32'b000001?????01011???????????????? 0 0 0 0 // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 0 0 0 0 // TNEI
|
||||||
|
32'b000001?????01100???????????????? 0 0 0 0 // TEQI
|
||||||
|
32'b000001?????10000???????????????? 1 1 0 0 // BLTZAL
|
||||||
32'b000001?????10001???????????????? 1 1 0 0 // BGEZAL
|
32'b000001?????10001???????????????? 1 1 0 0 // BGEZAL
|
||||||
32'b000010?????????????????????????? 1 0 0 1 // J
|
32'b000010?????????????????????????? 1 0 0 1 // J
|
||||||
32'b000011?????????????????????????? 1 0 0 1 // JAL
|
32'b000011?????????????????????????? 1 0 0 1 // JAL
|
||||||
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 0 // NOR
|
32'b000000???????????????00000100111 0 // NOR
|
||||||
32'b000000???????????????00000101010 0 // SLT
|
32'b000000???????????????00000101010 0 // SLT
|
||||||
32'b000000???????????????00000101011 0 // SLTU
|
32'b000000???????????????00000101011 0 // SLTU
|
||||||
|
32'b000000????????????????????110000 0 // TGE
|
||||||
|
32'b000000????????????????????110001 0 // TGEU
|
||||||
|
32'b000000????????????????????110010 0 // TLT
|
||||||
|
32'b000000????????????????????110011 0 // TLTU
|
||||||
|
32'b000000????????????????????110100 0 // TEQ
|
||||||
|
32'b000000????????????????????110110 0 // TNE
|
||||||
32'b000001?????00000???????????????? 0 // BLTZ
|
32'b000001?????00000???????????????? 0 // BLTZ
|
||||||
32'b000001?????10000???????????????? 0 // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? 0 // BGEZ
|
32'b000001?????00001???????????????? 0 // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 0 // TGEI
|
||||||
|
32'b000001?????01001???????????????? 0 // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 0 // TLTI
|
||||||
|
32'b000001?????01011???????????????? 0 // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 0 // TNEI
|
||||||
|
32'b000001?????01100???????????????? 0 // TEQI
|
||||||
|
32'b000001?????10000???????????????? 0 // BLTZAL
|
||||||
32'b000001?????10001???????????????? 0 // BGEZAL
|
32'b000001?????10001???????????????? 0 // BGEZAL
|
||||||
32'b000010?????????????????????????? 0 // J
|
32'b000010?????????????????????????? 0 // J
|
||||||
32'b000011?????????????????????????? 0 // JAL
|
32'b000011?????????????????????????? 0 // JAL
|
||||||
|
88
tools/trap.txt
Normal file
88
tools/trap.txt
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
////-------------------------------- TEN TP TP1 TP0
|
||||||
|
32'b000000000000000000000?????001111 0 ? ? ? // SYNC (NOP)
|
||||||
|
32'b00000000000???????????????000000 0 ? ? ? // SLL
|
||||||
|
32'b00000000000???????????????000010 0 ? ? ? // SRL
|
||||||
|
32'b00000000000???????????????000011 0 ? ? ? // SRA
|
||||||
|
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
|
||||||
|
32'b000000????????????????????001101 0 ? ? ? // BREAK
|
||||||
|
32'b0000000000000000?????00000010000 0 ? ? ? // MFHI
|
||||||
|
32'b000000?????000000000000000010001 0 ? ? ? // MTHI
|
||||||
|
32'b0000000000000000?????00000010010 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 0 ? ? ? // ADD
|
||||||
|
32'b000000???????????????00000100001 0 ? ? ? // ADDU
|
||||||
|
32'b000000???????????????00000100010 0 ? ? ? // SUB
|
||||||
|
32'b000000???????????????00000100011 0 ? ? ? // SUBU
|
||||||
|
32'b000000???????????????00000100100 0 ? ? ? // AND
|
||||||
|
32'b000000???????????????00000100101 0 ? ? ? // OR
|
||||||
|
32'b000000???????????????00000100110 0 ? ? ? // XOR
|
||||||
|
32'b000000???????????????00000100111 0 ? ? ? // NOR
|
||||||
|
32'b000000???????????????00000101010 0 ? ? ? // SLT
|
||||||
|
32'b000000???????????????00000101011 0 ? ? ? // SLTU
|
||||||
|
32'b000000????????????????????110000 1 GE 0 0 // TGE
|
||||||
|
32'b000000????????????????????110001 1 GE 0 0 // TGEU
|
||||||
|
32'b000000????????????????????110010 1 LT 0 1 // TLT
|
||||||
|
32'b000000????????????????????110011 1 LT 0 1 // TLTU
|
||||||
|
32'b000000????????????????????110100 1 EQ 1 0 // TEQ
|
||||||
|
32'b000000????????????????????110110 1 NE 1 1 // TNE
|
||||||
|
32'b000001?????00000???????????????? 0 ? ? ? // BLTZ
|
||||||
|
32'b000001?????00001???????????????? 0 ? ? ? // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 1 GE 0 0 // TGEI
|
||||||
|
32'b000001?????01001???????????????? 1 GE 0 0 // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 1 LT 0 1 // TLTI
|
||||||
|
32'b000001?????01011???????????????? 1 LT 0 1 // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 1 NE 1 1 // TNEI
|
||||||
|
32'b000001?????01100???????????????? 1 EQ 1 0 // TEQI
|
||||||
|
32'b000001?????10000???????????????? 0 ? ? ? // BLTZAL
|
||||||
|
32'b000001?????10001???????????????? 0 ? ? ? // BGEZAL
|
||||||
|
32'b000010?????????????????????????? 0 ? ? ? // J
|
||||||
|
32'b000011?????????????????????????? 0 ? ? ? // JAL
|
||||||
|
32'b000100?????????????????????????? 0 ? ? ? // BEQ
|
||||||
|
32'b000101?????????????????????????? 0 ? ? ? // BNE
|
||||||
|
32'b000110?????00000???????????????? 0 ? ? ? // BLEZ
|
||||||
|
32'b000111?????00000???????????????? 0 ? ? ? // BGTZ
|
||||||
|
32'b001000?????????????????????????? 0 ? ? ? // ADDI
|
||||||
|
32'b001001?????????????????????????? 0 ? ? ? // ADDIU
|
||||||
|
32'b001010?????????????????????????? 0 ? ? ? // SLTI
|
||||||
|
32'b001011?????????????????????????? 0 ? ? ? // SLTIU
|
||||||
|
32'b001100?????????????????????????? 0 ? ? ? // ANDI
|
||||||
|
32'b001101?????????????????????????? 0 ? ? ? // ORI
|
||||||
|
32'b001110?????????????????????????? 0 ? ? ? // XORI
|
||||||
|
32'b00111100000????????????????????? 0 ? ? ? // LUI
|
||||||
|
32'b01000000000??????????00000000??? 1 ? ? ? // MFC0
|
||||||
|
32'b01000000100??????????00000000??? 1 ? ? ? // MTC0
|
||||||
|
32'b01000010000000000000000000000001 1 ? ? ? // TLBR
|
||||||
|
32'b01000010000000000000000000000010 1 ? ? ? // TLBWI
|
||||||
|
32'b01000010000000000000000000000110 1 ? ? ? // TLBWR
|
||||||
|
32'b01000010000000000000000000001000 1 ? ? ? // TLBP
|
||||||
|
32'b01000010000000000000000000011000 1 ? ? ? // ERET
|
||||||
|
32'b011100??????????0000000000000000 0 ? ? ? // MADD
|
||||||
|
32'b011100??????????0000000000000001 0 ? ? ? // MADDU
|
||||||
|
32'b011100??????????0000000000000100 0 ? ? ? // MSUB
|
||||||
|
32'b011100??????????0000000000000101 0 ? ? ? // MSUBU
|
||||||
|
32'b011100???????????????00000000010 0 ? ? ? // MUL
|
||||||
|
32'b100000?????????????????????????? 0 ? ? ? // LB
|
||||||
|
32'b100001?????????????????????????? 0 ? ? ? // LH
|
||||||
|
32'h100010?????????????????????????? 0 ? ? ? // LWL
|
||||||
|
32'b100011?????????????????????????? 0 ? ? ? // LW
|
||||||
|
32'b100100?????????????????????????? 0 ? ? ? // LBU
|
||||||
|
32'b100101?????????????????????????? 0 ? ? ? // LHU
|
||||||
|
32'h100110?????????????????????????? 0 ? ? ? // 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)
|
@ -30,9 +30,21 @@
|
|||||||
32'b000000???????????????00000100111 0 1 RD 0 0 // NOR
|
32'b000000???????????????00000100111 0 1 RD 0 0 // NOR
|
||||||
32'b000000???????????????00000101010 0 1 RD 0 0 // SLT
|
32'b000000???????????????00000101010 0 1 RD 0 0 // SLT
|
||||||
32'b000000???????????????00000101011 0 1 RD 0 0 // SLTU
|
32'b000000???????????????00000101011 0 1 RD 0 0 // SLTU
|
||||||
|
32'b000000????????????????????110000 0 0 ? ? ? // TGE
|
||||||
|
32'b000000????????????????????110001 0 0 ? ? ? // TGEU
|
||||||
|
32'b000000????????????????????110010 0 0 ? ? ? // TLT
|
||||||
|
32'b000000????????????????????110011 0 0 ? ? ? // TLTU
|
||||||
|
32'b000000????????????????????110100 0 0 ? ? ? // TEQ
|
||||||
|
32'b000000????????????????????110110 0 0 ? ? ? // TNE
|
||||||
32'b000001?????00000???????????????? 0 0 ? ? ? // BLTZ
|
32'b000001?????00000???????????????? 0 0 ? ? ? // BLTZ
|
||||||
32'b000001?????10000???????????????? 0 1 31 0 1 // BLTZAL
|
|
||||||
32'b000001?????00001???????????????? 0 0 ? ? ? // BGEZ
|
32'b000001?????00001???????????????? 0 0 ? ? ? // BGEZ
|
||||||
|
32'b000001?????01000???????????????? 0 0 ? ? ? // TGEI
|
||||||
|
32'b000001?????01001???????????????? 0 0 ? ? ? // TGEIU
|
||||||
|
32'b000001?????01010???????????????? 0 0 ? ? ? // TLTI
|
||||||
|
32'b000001?????01011???????????????? 0 0 ? ? ? // TLTIU
|
||||||
|
32'b000001?????01110???????????????? 0 0 ? ? ? // TNEI
|
||||||
|
32'b000001?????01100???????????????? 0 0 ? ? ? // TEQI
|
||||||
|
32'b000001?????10000???????????????? 0 1 31 0 1 // BLTZAL
|
||||||
32'b000001?????10001???????????????? 0 1 31 0 1 // BGEZAL
|
32'b000001?????10001???????????????? 0 1 31 0 1 // BGEZAL
|
||||||
32'b000010?????????????????????????? 0 0 ? ? ? // J
|
32'b000010?????????????????????????? 0 0 ? ? ? // J
|
||||||
32'b000011?????????????????????????? 0 1 31 0 1 // JAL
|
32'b000011?????????????????????????? 0 1 31 0 1 // JAL
|
||||||
|
Loading…
Reference in New Issue
Block a user